自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(102)
  • 资源 (2)
  • 收藏
  • 关注

原创 Leetcode_06 Z 字形变换

字符串操作

2022-07-13 19:34:01 196 1

转载 基于Java的归并排序

什么是归并排序对于该词的定义,百度先查:归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。过程描述:归并过程为:比较a[i]和b[j]的大小,若a[i]≤b[j],则将第一个有序表中的元素a[i]复制到r[k]中,并令i和k分别加上1;否则将第二个有序表中的元素b

2022-01-04 10:58:18 205

原创 基于Java实现的快速排序

什么是快速排序快速排序(Quicksort)是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。编码思路就上述可得:1、选择基数:选择一个基数base,即作为第二步数组分割的各元素比较的基础数值,一般可以选择数组的第一个元素作为基数。2、数组分割:将数组分成两个子序列,左边都比基数小,右边都比基数大。3

2021-12-30 15:24:08 650

原创 说说代码中的异常处理问题

前言作为Java开发人员,开发过程中不可避免的需要处理各种异常。以运行时异常为例,在最常见的Springboot项目中,偷懒的同学可能一遇到异常就直接往上抛,或者简单地用try catch做处理,catch块打印堆栈信息。但是这么做存在2个值得我们考虑的问题。1、如果我们只是一味地层层地往上抛,最终在Controller层再次抛出异常,并没有进过处理,Controller再次抛出,异常被servlet捕获,服务器会认为是我们自己写的代码业务出现异常,接口直接返回500,这是非常不友好的。并且如果你公

2021-02-08 11:07:34 524

原创 springboot项目redis分布式锁实现(基于luttuce)

问题背景对于大部分的后端服务,服务很多都是多实例部署的,而在我们的工程中,比如说代码中定义的定时任务需要从数据库中捞数据,那么多机部署上的每个实例都会执行,那么就会存在数据重复上报,那么就不可避免得出现脏数据,影响数据的准确性。问题分析解决这个问题最直接的思路就是,当多机部署中无论哪个实例捞到了某条数据,那么其他的实例就不能再次捞取。针对这个思路,我们大致可以有以下两个解决方案:1. 在数据库层解决。给访问的数据表中,增一个字段flag,标识是否已经上报过,每个实例上报一条,就更新一下这个状

2021-01-26 14:51:43 769 2

原创 大量数据推送kafka,进行数据上报

需求背景最近做的一个需求,需要将数据(数据分为产品基本数据和产品使用数据,分处同一个连接下的两个数据库)推送上报后,运营部门进行分析,简单翻译过来就是需要从数据库中把历史数据和每日数据捞出来,推到kafka上,其中一些的细节想在本文记录分享一下。分析1、数据分类在背景中交代过数据分为产品基本数据和产品使用数据(一下通称为基本数据和使用数据),很多同学(包括我)的第一反应是必然是要创建两个独立的数据实体类,基本数据类和使用数据类。但是有经验的同学肯定会想到,既然都属于产品的数据类,两类数据在从

2021-01-20 21:00:38 2391

原创 关于JVM的GC的问答

引言在Java的世界中,很多同学似乎对垃圾回收不会有过多关注,很多入门的同学对GC也不熟悉,但是也能写出不赖的程序或系统。但这并不代表Java的GC就不重要。相反,当系统或程序出现问题的时候,我们可能更依赖GC日志来对问题进行定位。虽然Java语言JVM实现对于GC的自我管理,但在Java面试中,GC的问题出现的频率非常高,有时候,偷懒的面试官只是无脑地抛出“你能说说你对GC的理解吗?”这种笼统但让你一时间不知道从哪说起的干巴巴的问题,这个时候需要静下心来思考和梳理一下该如何回答关于GC诸多方面,本

2020-12-29 20:54:14 196 2

原创 Java中hashcode()方法和equals()方法的问答

前言在课间的时候,和几个同学一起聊起了hashcode()方法和equals()方法,对于这两个方法的理解,大部分人首先想到的还是“重写equals方法必须重写hashcode方法”,“String类中已经重写equals方法,用来比较字符串的内容是否相等”这几个高频点,但是如果是在面试的场景下问你两者的联系或区别,一时间很多人可能不能很好地组织出来,基本上都是想到一句说一句,抓不住重点,没有逻辑。基于这点,我在本文记录一下。首先抛开问题本身,如果别人问你XX和YY的关系或者区别,我们回答的思路首先

2020-12-25 11:37:18 123

原创 SpringBoot-HelloWorld的pom文件配置

前言关于如何搭建Springboot hellowolrd应用其实很简单,网上也有非常多的教程,我之前也写过一个最简单的springboot hello world应用,可以看看Springboot hello world搭建其实在搭建springboot应用中,可能会明显感觉到其中省去了很多之前惯用的Spring+SpringMVC+Mybatis中的一些配置,在之前,我们需要在SpringMVC中开启扫描和注解,Spring配置文件中同样要配置扫描以及数据源等诸多配置,当这些工作准备好了之后才能

2020-12-17 21:46:36 563

原创 IDEA搭建Springboot-Helloworld应用

网上已有非常多的spingboot项目的教程,基本上都是通过Spring Initializr构建出完整的Springboot应用,但是我觉得对于入门者来说,还是希望从最简单方式来搭建helloworld,以便更好地理解SpringBoot的一些原理,本文我就以jar包的形式,通过IDEA工具完成一个最简单的Helloworld应用。环境准备JDK:1.8及以上IDE:IDEAmaven:3.3及以上Springboot:2.3.4环境的配置以及检验这里就不多说了,不熟悉话可以自行百

2020-12-17 15:26:03 1485 2

原创 Java实际开发中业务实体多种状态的管理

背景在实际的开发中,业务场景下常会涉及业务实体拥有多种状态,例如产品的发布,产品实体必然会有多种操作,比如发布者提交发布审核(可自主撤销),审核人员进行审核(通过或拒绝),发布者还可以申请产品下线(如果产品拥有多个版本,还可以细分为只下线当前版本和将该产品的所有版本均下线),管理人员还可以自主地将产品进行强制下线等等诸多操作。多种操作的存在,需要对应产品自身的不同状态的良好管理机制,比如,已经已经进入发布审核状态的产品只能进行审核人员审核的操作,而不能进行下线或者强制下线操作;对已经下线的产品不能申

2020-12-03 18:55:45 1306

原创 菜鸡学前端:图标icon的获取

推荐一个实用的图标库网址:http://www.fontawesome.com.cn/faicons/举例操作:1.首先需要将font awesome的工程下载到本地并解压,目录例如我需要下载如下icon2.在图标库网址中选择所需的图标,右键检查元素3.进入到font awesome中的fonts目录下,实用notepad++打开fontawesome-webfont文件,在该文件中搜索步骤2中拷贝的内容,搜索结果如下:4.notepad可以新建空的文本,初始内容可...

2020-11-30 17:18:48 1108 2

原创 菜鸡学前端:对多行文本的“显示更多”和“收起”的处理

背景:之前工程中的后端数据中对一段文本数据进行截断,只显示一部分,后面发现截断后的说明描述上和理解上有一些问题,所以打算在后端不做截断处理,在前端做处理,如果文本显示超过2行,则对后面的内容进行隐藏,以及出现“显示更多“和“收起”的处理因为本人是个前端菜鸡,所以记录一下处理过程HTML:<span #descSpan id="descSpan" class="description-span" [class.more]="isMore">{{ description }}</

2020-11-24 16:43:23 1497

原创 一次关于数据缓存的优化和记录

问题背景描述:由于国庆期间公司停电维护,国庆后第一天出现服务中断的问题问题排查与分析:通过公司luban的监控日志发现,找到一台mysql数据库服务器,8点多开始出现CPU占有率出现持续升高,9点左右CPU占有率将近100%,并且一直居高不下,数据服务异常,后端服务出现中断通过APM查看API调用记录发现,在对应的时间段内有大量请求响应超过10秒,正常情况下这些API的请求响应时间应该都是毫秒级的;分析发现其中获取xxx列表的接口/xxx/list(并发量3800,平时并发量600左右)和/xx

2020-11-18 21:39:01 175 1

原创 angular非表单中input输入框的url校验

当非表单的dialog输入框中指定输入url,并需要进行提交时对输入的内容进行url校验,网上有很多的正则表达式对url匹配校验,如果当前对于url没有指定的格式,正则表达式的范式很有可能出现场景覆盖不完全的问题。可以自己手动增加对输入框的自定义校验,校验代码可以如下:checkUrlInput(url: string): boolean { try { new URL(url); return true; } catch(err

2020-11-12 09:24:16 1068 2

原创 Java中的装箱和拆箱

前言自动装箱和拆箱问题是java面试中基础题中出现频率很高,好记性不如烂笔头,把之前遇到的相关问题和概念做一下记录包装类Java中包含8种基本数据类型,并且在java5之后,为每种基本数据类型都提供了对应的包装器类型。基本数据类型包装类boolBooleanbyteBooleancharCharactershortShortintIntegrefloatFloatdoubleDoublelongLong思考:1、为

2020-05-20 10:11:18 508

原创 Java的四种引用:强引用、软应用、弱引用、虚引用

前戏在JDK远古时期的版本中,java对象的似乎就只有两种状态,即被引用和不被引用。也就是说程序中,如果一个对象不被任何其他对象或变量引用,那么JVM就判定这个对象无法被使用,JVM直接对对象内存进行回收。但是,这两种极端状态并不能覆盖所有的对象,随着程序的运行,程序对某个对象的引用强度可能在不断地变化,比如一个对象可能会出现以下情况,一个对象表面表面上看起来处于不被引用的状态,它占据一定的内存空间,但是JVM马上对它进行回收又不太划算,或许在后面的场景下还可以用得上。对于这样的可有可无的对象,

2020-05-14 21:46:12 256

原创 Leetcode-202:快乐数

题目描述编写一个算法来判断一个数 n 是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为1,那么这个数就是快乐数。如果 n 是快乐数就返回 True ;不是,则返回 False 。思路分析根据题目意思,如果一个数按其规则变化最终可以为1则是快乐数,否则按规则变化会陷入无限循环。所以我们需要判断在按规则变化数字时:数字是否变为1。如果是,返回tru..

2020-05-08 20:50:08 229

原创 找出数组中每个数的右边第一个比它大的数

问题描述:给出一组数,找出数组中每个数的右边第一个比它大的数问题分析:利用单调栈,从左至右依次压入数据的索引(若直接压数,则还需要一个数组保存栈中元素所对应的数组位置,如果当前元素小于等于栈顶的索引所对应的数组的值,入栈当前索引,否则将栈顶索引出栈,并在栈顶索引所对应的res数组中记录下当前的值。到最后再检查栈中剩余元素,代表剩余元素右边没有比它大的值,在res对应位置赋值为-1。代码:...

2018-09-19 09:32:30 5172

原创 2018-8-30华为机试第三题

一个很明显的递归问题package cn.csu.ksh;import java.util.ArrayList;import java.util.List;import java.util.Scanner;public class Main2 { public static void main(String[] args) { Scanner sc = new ...

2018-08-30 15:58:00 1137

原创 2018-8-30华为机试题第1题

问题描述:字符串之数字子串求和思路:要求时间复杂度O(N),空间O(1) 1.不管遇到什么先-'0' =&gt;cur 2.若cur不是数字-&gt;即不在0~9之间...需要先判断posi是不是false... 因为没第一次遇到'-'则会把posi设置为false,第二次先去看看之前posi, 如果是'-',那么就约掉这个'-',把posi设置为true...

2018-08-30 15:48:36 1565 1

原创 sysnchronized的实现原理与应用

在并发编程中,synchronized一直是被使用非常频繁的,很多人会把它称为重量级锁,但是,JavaSE1.6对它有一个重大优化,在1.6中为了减少获得锁和释放锁带来的性能消耗而引入了偏向锁和轻量级锁。我们知道Java中的每一个对象都可以作为锁,具体表现为三种形式:1.对于普通同步方法,锁是当前实例对象2.对于静态同步方法,锁是当前类的Class对象3.对于同步代码块,锁是syn...

2018-08-29 11:39:25 1897 1

原创 Java并发中——阻塞队列

阻塞队列的使用场景在并发的情况下,生产者消费者模式需要用到队列,生产者线程生产数据,放进队列,然后消费从队列中获取数据,这个在单线程的情况下没有问题。而在使用非阻塞队列的时候有一个很大问题就是:它不会对当前线程产生阻塞,那么在面对类似消费者-生产者的模型时,就必须额外地实现同步策略以及线程间唤醒策略,这个实现起来就非常麻烦。在高并发的情况下,可能出现消费者消费速度远大于生产者生产速度,消费...

2018-08-15 16:51:05 399

原创 Java线程池相关参数以及拒绝策略

为什么要使用线程池在JavaSE中,要实现多线程的方式有多种,例如继承Thread、实现Runnable接口或者Callable接口。但是我们应该要知道,创建一个线程的开销是很大的,因为它总涉及与操作系统交互,我们知道,线程总共有三个过程,分别是创建、使用、销毁。但是在实际使用中,服务器在创建和销毁线程上花费的时间和消耗的系统资源,甚至可能要比花在实际处理实际的用户请求的时间和资源要多的多。除...

2018-08-13 15:01:26 1090

原创 剑指Offer学习】【面试题18 :二叉树的镜像】

题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5...

2018-08-08 14:41:39 151

原创 【剑指Offer学习】【面试题12 :数值的整数次方】

题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。题目分析很多人看到这个题基本上心里马上就有一个大致的思路了,就是用一个循环来做base的exponent次方,于是代码很快就能出来public double solution(double base,int exponent){ double result...

2018-08-07 11:23:33 176

原创 【剑指Offer学习】【面试题10 :青蛙跳台的变种问题】

题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。题目分析这次的场景和之前青蛙跳台的问题不一样,前一次的场景是青蛙一次可以调1个台阶,也可以跳2个台阶。现在的场景是:青蛙也可以跳上n级。所以情况又发生了变化。现在我们用数学归纳法来分析一下这个变种问题:首先,当n=1时,只有一种跳法  f(1)=1。其次,当...

2018-08-05 19:14:50 445

原创 【剑指Offer学习】【面试题9 :青蛙跳台问题】

问题描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。问题分析当n=1,有一种跳法当n=2,一次跳一个跳两次,一次跳两个跳一次,共两种跳法当n&gt;=2时,n个台阶,设有F(n)种跳法      (1)若第一次选择跳1个台阶,那么剩下的n-1个台阶有F(n-1)种跳法      (2)若第一次选中...

2018-08-04 20:18:43 752

原创 【剑指Offer学习】【面试题6 :重建二叉树】

题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。解题思路二叉树的前序遍历是从根节点开始的,依次前序遍历左子树,然后再前序遍历右子树。所以在前序遍历中,第一个出现的必定是跟节点。二叉树的中序...

2018-08-03 14:53:51 207

原创 【剑指Offer学习】【二维数组中的查找】

题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路:首先选取数组中右上角的数字。如果该数字等于要查找的数字,查找过程结束  如果该数字大于要查找的数字,剔除这个数字所在的列,如果该数字小于要查找的数字,剔除这个数字所在的行。 也就是说如...

2018-08-01 16:00:54 203

原创 初链—区块链混合共识的领航者

1.蓬勃发展的区块链互联网的高度普及使人类从工业社会迈入信息社会,而区块链技术的出现,又是对互联网技术更上一层的技术革新。区块链思想最早出现在大名鼎鼎的比特币开源项目中。比特币项目在诞生和发展过程中,借鉴了来自数字货币、密码学、博弈论、分布式系统、控制论等多个领域的技术成果,作为其核心支撑的区块链技术更是令人数目的创新成果。区块链技术的诞生为社会中实体货币虚拟化提供了可能,同时货币自身的价值依...

2018-07-29 15:36:58 1454

原创 初链:高性能去中心化公开账本

1.绪论2017-2018年,互联网界最火热的话题之一就是区块链。其去中心化、分布式以及防篡改一系列特性使得人们对于这个可能对互联网发展产生重大影响的技术关注颇多。从比特币的区块链最初版本,到以太坊为主流的进阶版本,再到超级账本项目的版本,区块链技术一直在飞速的发展,并且不断落地到各个领域。本文我将简单介绍区块链中的相关概念以及相关技术理念。2.什么是区块链所谓区块链,字面上的理解就是...

2018-07-27 22:41:47 1593

原创 DEL:区块链4.0时代--让技术更接近价值

1.蓬勃发展的区块链技术的终极魅力,是高度普及之时,价值的极致绽放 互联网的高度普及使人类从工业社会迈入信息社会,而区块链技术的出现,又是对互联网技术更上一层的技术革新。区块链思想最早出现在大名鼎鼎的比特币开源项目中。比特币项目在诞生和发展过程中,借鉴了来自数字货币、密码学、博弈论、分布式系统、控制论等多个领域的技术成果,作为其核心支撑的区块链技术更是令人数目的创新成果。区块链技术的诞生为...

2018-07-23 09:53:20 3187

原创 PBFT算法

引言———分布式系统一致性问题区块链系统,首先是一个分布式系统。传统单节点结构演变到分布式系统,碰到的首要问题就是一致性的保障。很显然,如果分布式集群无法保证处理结果一直的话,那任何建立于其上的业务系统都无法正常工作。 一致性问题是分布式领域最为基础也是最重要的问题。如果分布式系统能实现“一致”,对外就可以呈现一个完美的、可扩展的“虚拟节点”,相对于物理节点具有更优越性能和稳定性。这也是分布式...

2018-07-23 09:51:44 9089

原创 谈谈spring中的IOC

学习过Spring框架的人一定都会学习Spring的IoC(控制反转) 、DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC 、DI这两个概念是模糊不清的,是很难理解的,今天谈谈我对Spring Ioc的理解。1.什么是IOCIoc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交...

2018-07-19 10:41:56 231

原创 Java抽象类与接口

引言在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方,又有太多不同的地方。首先来说一下抽象类和接口的相关概念,然后再对两者进行比较。抽象类在描述抽象类之前,我们先来说说抽象方法,Java中的抽象方法是指使用abstract关键字修饰的方法,并且抽象方法只有方法声明,没有实现细节。可以看看抽象方法的语法:abstract void method();那么如果一个...

2018-07-15 17:41:56 276

原创 进程和线程的主要区别(总结)

根本区别:进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位在开销方面:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。所处环境:在操作系统中能同时运行多个进程(程序);而在同一个进程(程序)中有多个线程同时执行(通过CPU调...

2018-06-13 10:11:52 249611 19

原创 二叉搜索树的后序遍历序列

题目如果输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果,如果是则返回true,如果不是则返回false。假设输入的数组的任意两个数字都互不相同。分析:在后序遍历得到的序列中,最后一个数字是树的根节点的值,数组中前面的数字可以分为两个部分:第一部分为左子树的节点的值,他们都比根节点的值要小;第二部分是右子树节点的值,他们都比根节点的值大。我们在解决这个问题的时候需要用同样的方法来确定...

2018-05-30 11:20:42 182

原创 Java面向对象的三大特征以及理解

Java面向对象的三大特征为:封装、继承和多态,本文说说我对三大特性的理解。1.封装Java中的封装是指一个类把自己内部的实现细节进行隐藏,只暴露对外的接口(setter和getter方法)。封装又分为属性的封装和方法的封装。把属性定义为私有的,它们通过setter和getter方法来对属性的值进行设定和获取。下面我举一个简单的封装例子public class Person { priva...

2018-05-26 16:01:36 24492 5

原创 Java中的反射

在Java框架的学习中,我们会接触到反射,例如接触非常多的spring框架,它的IOC原理就是运用了反射的机制以及动态代理的思想,使得对象的创建并不需要自己完成,而是交给spring容器来完成。还有JDBC中加载数据库的驱动时,也必然使用到反射等等。可以说,反射机制是我们在框架设计和学习中非常重要的一个机制和思想。什么是反射反射机制就是程序在运行时,对于任意一个类,都能知道这个类的所有属性和方法;...

2018-05-24 10:14:04 192

Java高级编程教案

Java高级编程教案,适合Java入门的学生或者上Java课的老师使用

2019-01-21

JAVA课设任务

用图形用户界面实现。 2、 能实现编辑、保存、另存为、查找替换等功能。 3、 提示:使用文件输入输出流。

2012-12-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除