- 博客(75)
- 资源 (16)
- 收藏
- 关注

原创 spring循环依赖详解
Bean的生命周期被Spring管理的Bean的生成步骤如下:Spring扫描class得到BeanDefinition;根据得到的BeanDefinition去生成bean;首先根据class推断构造方法;根据推断出来的构造方法,反射,得到一个对象(暂时叫做原始对象);填充原始对象中的属性(依赖注入);如果原始对象中的某个方法被AOP了,那么则需要根据原始对象生成一个代理对象;把最终生成的代理对象放入单例池(源码中叫做singletonObjects)中,下次getBean时就直接从单
2022-01-12 13:50:05
782

原创 spring bean创建流程+demo
Spring启动流程:解析启动类,得到扫描路径;遍历扫描路径下的java类文件; 如果类文件存在@Component、@Config等注解,则存入BeanDefinitionMap<String,Class>中,key为beanName。遍历BeanDefinitionMap,通过反射创建Bean;Bean创建流程:spring的一大优点就是扩展性很强,比如,在spring bean 的生命周期中,给我们预留了很多参与bean 的生命周期的方法。大致梳理一下,有以下几种:
2022-01-11 14:29:31
579

原创 Redis安装及使用(入门)
一. Redis 简介Redis是一款开源的、高性能的键-值存储(key-value store)。它常被称作是一款数据结构服务器(data structure server)。Redis的键值可以包括字符串(strings)类型,同时它还包括哈希(hashes)、列表(lists)、集合(sets)和 有序集合(sorted sets)等数据类型。
2016-06-23 08:58:21
617

原创 Redis入门基础
Redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库,并用于构建高性能,可扩展的Web应用程序的完美解决方案。 Redis从它的许多竞争继承来的三个主要特点: Redis数据库完全在内存中,使用磁盘仅用于持久性。 相比许多键值数据存储,Redis拥有一套较为丰富的数据类型。 Redis可以将数据复制到任意数量的从服务器。Redis 优势异常
2016-04-19 15:26:56
5093
2

原创 Spring+Quartz实现定时任务的配置方法
一、Quartz的特点按作业类的继承方式来分,主要有以下两种:作业类继承org.springframework.scheduling.quartz.QuartzJobBean类的方式作业类不继承org.springframework.scheduling.quartz.QuartzJobBean类的方式注:个人比较推崇第二种,因为这种方式下的作业类仍然是POJO。 * 按任务调度的触发时机来
2016-04-19 15:13:17
2100
原创 java设计模式-总结
一、实例的创建单例模式模式定义:保证一个类只有一个实例,并且提供一个全局访问点场景:重量级的对象,不需要多个实例,如线程池,数据库连接池。1.懒汉模式:延迟加载, 只有在真正使用的时候,才开始实例化。1)线程安全问题2)double check 加锁优化3)编译器(JIT),CPU 有可能对指令进行重排序,导致使用到尚未初始化的实例,可以通过添加volatile 关键字进行修饰,对于volatile 修饰的字段,可以防止指令重排。2.饿汉模式:类加载的 初
2022-05-15 11:54:05
279
原创 Java锁详解
乐观锁/悲观锁 独享锁/共享锁 互斥锁/读写锁 可重入锁 公平锁/非公平锁 分段锁 偏向锁/轻量级锁/重量级锁 自旋锁 以上是一些锁的名词,这些分类并不是全是指锁的状态,有的指锁的特性,有的指锁的设计,下面总结的内容是对每个锁的名词进行一定的解释。一、乐观锁/悲观锁 乐观锁与悲观锁并不是特指某两种类型的锁,是人们定义出来的概念或思想,主要是指看待并发同步的角度。悲观锁适合写操作非常多的场景,乐观锁适合读操作非常多的场景,不加锁会带来大量的性能提升。乐观锁 ...
2022-04-26 20:47:21
850
原创 MySQL索引详解
1、什么是索引索引(index)是帮助MySQL高效获取数据的数据结构(有序)。一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储在磁盘上。索引是数据库中用来提高性能的最常用的工具。我们通常所说的索引,包括聚集索引、覆盖索引、组合索引、前缀索引、唯一索引等,没有特别说明,默认都是使用B+树结构组织(多路搜索树,并不一定是二叉的)的索引。优势与劣势优势:1、提高数据检索的效率,降低数据库的IO成本。2、通过索引列对数据进行排序,降低数据排序的成本,降低CP
2022-03-15 14:55:56
1150
2
原创 idea常用插件
1. Codota 代码智能提示插件只要打出首字母就能联想出一整条语句,这也太智能了,还显示了每条语句使用频率。原因是它学习了我的项目代码,总结出了我的代码偏好。2. Key Promoter X 快捷键提示插件每次都会在右下角弹窗提示,帮助我们快速熟悉快捷键。3. CodeGlance 显示代码缩略图插件当代码很多的时候,方便查看,很有用。4. Lombok 简化臃肿代码插件实体类中的get/set/构造/toString/hashCode等方法,都不需要我们再手动写了
2022-02-13 11:38:55
1086
原创 jmap、jstat、jinfo、jstack命令详解
jmapjmap -histo [pid] > ./log.txt 此命令可以用来查看内存信息,实例个数以及占用内存大小 num:序号 instances:实例数量 bytes:占用空间大小 class name:类名称,[C is a char[],[S is a short[],[I is a int[],[B is a byte[],[[I is a int[][] jmap -heap [pid]jmap -dump:format=b,fil
2022-01-14 14:56:44
2488
原创 Java BigDecimal详解
一、BigDecimal概述Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数,但在实际应用中,可能需要对更大或者更小的数进行运算和处理。一般情况下,对于那些不需要准确计算精度的数字,我们可以直接使用Float和Double处理,但是Double.valueOf(String) 和Float.valueOf(String)会丢失精度。所以开发中,如果我们需要精确计算的结果,则必须使用BigDeci
2022-01-14 14:40:28
378
原创 Spring事务详解
Spring事务执行步骤:判断当前执行的方法是否存在@Transactional注解;如果存在,则利用事务管理器(TransactionMananger)新建一个数据库连接;修改数据库连接的autocommit为false;执行target.test(),执行程序员所写的业务逻辑代码,也就是执行sql;执行完了之后如果没有出现异常,则提交,否则回滚。Spring事务是否会失效的判断标准:某个加了@Transactional注解的方法被调用时,要判断到底是不是直接通过【代理对象】调用的
2022-01-11 14:32:01
1569
原创 SLF4J: Class path contains multiple SLF4J bindings
异常信息:SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Foundbinding in[jar:file:/D:/tools/maven/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]SLF4J: Found binding in[ja
2022-01-11 11:35:41
371
原创 Reids 事务(ACID)详解
Redis 的事务需要先划分出三个阶段事务开启:使用 MULTI 可以标志着执行该命令的客户端从非事务状态切换至事务状态;命令入队:MULTI开启事务之后,非 WATCH、EXEC、DISCARD、MULTI等特殊命令,客户端的命令不会被立即执行,而是放入一个事务队列;如果收到 EXEC 命令,事务队列里的命令将会被执行;如果收到 DISCARD 命令,则事务被丢弃。命令入队过程如果出错(如使用了不存在的命令),则事务队列会被拒接执行;执行事务:执行事务期间出现了异常(如命令和操作的
2022-01-10 15:20:16
645
原创 java.lang.NoClassDefFoundError: reactor/ipc/netty/http/client/HttpClient
java.lang.NoClassDefFoundError: reactor/ipc/netty/http/client/HttpClient问题:springboot项目启动时报NoClassDefFoundError: reactor/ipc/netty/http/client/HttpClient报错信息:nested exception is org.springframework.beans.BeanInstantiationException: Failed to instant
2022-01-04 16:14:10
1450
原创 springboot启动类不能正常启动
springboot启动类不能正常启动1、启动配置加@SpringBootApplication注解@SpringBootApplicationpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); }}2、导入spring-boot-starter-web包 <depen
2022-01-04 10:58:37
6041
2
原创 缓存穿透、缓存击穿、缓存雪崩--详解
一、缓存穿透缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,如发起id为-1的数据或者特别大的不存在的数据。有可能是黑客利用漏洞攻击从而去压垮应用的数据库。常见解决方案对于缓存穿透问题,常见的解决方案有以下三种:1、验证拦截:接口层进行校验,如鉴定用户权限,对ID之类的字段做基础的校验,如id<=0的字段直接拦截;2、缓存空数据:当数据库查询到的数据为空时,也将这条数据进行缓存,但缓存的有效性设置得要较短,以免影响正常数据的缓存;public Student getStuden
2022-01-04 10:34:22
261
原创 swagger之API接口版本控制+demo案例
springboot整合swagger配置在之前的文章已经写过了,此篇是基于已整合swagger后的,关于版本控制的配置和demo案例。文章地址:swagger2 注解详解+使用案例版本控制思路:此demo是基于swagger的group进行版本控制,对接口URL无侵入,版本对接口地址无影响。相关操作和注意项:无新增依赖jar包;新增自定义版本注解ApiVersion ;新增版本号定义(常量或枚举值都行);手动实例化Docket对象,并注入到spring容器;相关解释都在代码注释里;
2021-12-01 18:23:40
1347
原创 swagger2 注解详解+使用案例
API注解说明:注解使用位置注意事项@Api用于controller类上基于类的整体描述@ApiOperation用于controller类内部的方法上基于方法功能的描述@ApiImplicitParams用于controller类内部的方法上非Model对象的参数描述,包含多个@ApiImplicitParam@ApiImplicitParam用于@ApiImplicitParams内单个参数的描述@ApiModel用于参数为Model对象
2021-11-24 13:43:40
897
原创 Swagger:Unable to infer base url. This is common when using dynamic servlet registration or when...
问题描述打开:http://localhost:8080/swagger-ui.html 报如下信息:Unable to infer base url. This is common when using dynamic servletregistration or when the API is behind an API Gateway. The base url isthe root of where all the swagger resources are served. For e.g
2021-11-23 13:54:42
1829
2
原创 Redis 慢查询详解--slowlog
什么是 SLOWLOGSlow log 是 Redis 用来记录查询执行时间的日志系统。查询执行时间指的是不包括像客户端响应(talking)、发送回复等 IO 操作,而单单是执行一个查询命令所耗费的时间。另外,slow log 保存在内存里面,读写速度非常快,因此你可以放心地使用它,不必担心因为开启 slow log 而损害 Redis 的速度。设置 SLOWLOGSlow log 的行为由两个配置参数(configuration parameter)指定,可以通过改写 redis.conf 文
2021-09-27 16:42:19
2392
2
原创 Redis info详解
Redis info详解通过给定可选的参数section,可以让命令只返回某一部分的信息:Server部分记录了Redis服务器的信息,它包含以下域:redis_version : 2.8.19 # Redis服务器版本redis_git_sha1:00000000 #Git SHA1redis_git_dirty: 0 #G
2021-09-22 14:06:48
3059
原创 Redis config配置文件详解
# redis 配置文件示例# 当你需要为某个配置项指定内存大小的时候,必须要带上单位,# 通常的格式就是 1k 5gb 4m 等酱紫:## 1k => 1000 bytes# 1kb => 1024 bytes# 1m => 1000000 bytes# 1mb => 1024*1024 bytes# 1g => 1000000000 bytes# 1gb => 1024*1024*1024 bytes## 单位是不区分大小写的,你写 1K
2021-09-14 10:14:16
5627
原创 计算机浮点数存储(java)
一、前言我们通常认为浮点数和小数是等价的,并没有严格区分它们的概念,这也并没有影响到我们的学习,原因就是浮点数和小数是绑定在一起的,只有小数才使用浮点格式来存储。其实,整数和小数可以都使用定点格式来存储,也可以都使用浮点格式来存储,但实际情况却是,使用定点格式存储整数,使用浮点格式存储小数,这是在 “数值范围” 和 “数值精度” 两项重要指标之间追求平衡的结果。二、什么是浮点数?浮点型简单讲就是实数的意思。浮点数在计算机中用以近似表示任意某个实数。具体的说,这个实数由一个整数或定点数(即尾数)乘以某
2021-09-07 11:16:29
659
原创 JVM G1垃圾回收器
G1收集器简介(-XX:+UseG1GC)G1 (Garbage-First)是一款面向服务器的垃圾收集器,主要针对配备多颗处理器及大容量内存的机器. 以极高概率满足GC 停顿时间要求的同时,还具备高吞吐量性能特征.G1将Java堆划分为多个大小相等的独立区域(Region),JVM最多可以有2048个Region。一般Region大小等于堆大小除以2048,比如堆大小为4096M,则Region大小为2M,当然也可以用参数"XX:G1HeapRegionSize"手动指定Region大小,但是推荐
2021-09-05 21:40:37
691
原创 JVM垃圾回收机制详解
JVM垃圾回收机制详解一、引用计数法二、可达性分析算法1、常见引用类型三、垃圾收集算法1、标记-复制算法2、标记-清除算法3、标记-整理算法4、分代收集理论5、三色标记对象内存回收堆中几乎放着所有的对象实例,对堆垃圾回收前的第一步就是要判断哪些对象已经死亡(即不能再被任何途径使用的对象)。一、引用计数法给对象中添加一个引用计数器,每当有一个地方引用它,计数器就加1;当引用失效,计数器就减1;任何时候计数器为0 的对象就是不可能再被使用的。 这个方法实现简单,效率高,但是目前主流的虚拟机中并没有选择这
2021-08-24 17:20:41
458
原创 JVM内存模型详解
JVM内存模型一、JVM整体结构及内存模型二、JVM内存参数设置三、对象创建的主要流程:四、指针压缩五、对象栈上分配六、对象在Eden区分配七、对象进入老年代一、JVM整体结构及内存模型二、JVM内存参数设置-Xss:每个线程的栈大小-Xms:设置堆的初始可用大小,默认物理内存的1/64-Xmx:设置堆的最大可用大小,默认物理内存的1/4-Xmn:新生代大小-XX:NewRatio:默认2表示新生代占年老代的1/2,占整个堆内存的1/3。-XX:SurvivorRatio:默认8表示一个
2021-08-16 14:38:13
891
原创 JAVA类加载器和双亲委派机制
JAVA类加载器和双亲委派机制一、类加载过程二、类加载器三、双亲委派机制1、沙箱安全机制:2、全盘负责委托机制3、Tomcat打破双亲委派机制一、类加载过程加载 >> 验证 >> 准备 >> 解析 >> 初始化 >> 使用 >> 卸载加载:在硬盘上查找并通过IO读入字节码文件,使用到类时才会加载,例如调用类的main()方法,new对象等等,在加载阶段会在内存中生成一个代表这个类的java.lang.Class对象,作为
2021-08-09 11:00:28
169
原创 ConcurrentHashMap在JDK8中的优化
ConcurrentHashMap在JDK8中的优化JDK8之前JDK8为什么不继续使用ReentrantLockJDK8之前JDK8之前,ConcurrentHashMap是通过分段锁(Segment加锁)来减少多线程中锁竞争,首先在初始化ConcurrentHashMap的时候,会初始化一个Segment数组,容量为16,而每个Segment呢,都继承了ReentrantLock类,也就是说每个Segment类本身就是一个锁,之后Segment内部又有一个table数组,每个table数组里的数据
2021-08-06 15:38:35
2817
原创 kafka常见问题及优化
kafka常见问题及优化一、消息丢失:二、消息重复发送和重复消费三、消息乱序四、消息积压五、消息回溯六、延时队列七、kafka事务八、kafka高性能原因一、消息丢失:发送端:acks=0:表示producer不需要等待任何broker确认收到消息的回复,就可以继续发送下一条消息。性能最高,但是最容易丢消息。大数据统计报表场景,对性能要求很高,对数据丢失不敏感的情况可以用这种。acks=1:至少要等待leader已经成功将数据写入本地log,但是不需要等待所有follower是否成功写入。就可
2021-08-02 11:13:18
1304
转载 Kafka设计原理详解(选举和Rebalance)
Kafka的选举和Rebalance一、Kafka核心总控制器Controller1、Controller选举机制2、Partition副本选举Leader机制二、消费者Rebalance1、消费者Rebalance机制2、消费者Rebalance分区分配策略:三、Rebalance过程第一阶段:选择组协调器第二阶段:加入消费组JOIN GROUP第三阶段( SYNC GROUP)四、producer发布消息机制剖析1、写入方式2、消息路由3、写入流程五、HW与LEO详解六、日志分段存储七、附录:zooke
2021-07-28 17:25:22
405
原创 Java内部锁 synchronized详解(偏向锁和轻量级锁)
Java synchronized内部锁详解(偏向锁和轻量级锁)偏向锁JDK 6 以前 synchronized具体实现逻辑:由于 synchronized 重量级锁有以下二个问题,:因此JDK 6 之后做了改进,引入了偏向锁和轻量级锁:synchronized锁状态无锁偏向锁轻量级锁重量级锁
2021-07-23 09:47:53
763
原创 springboot集成kafka
springboot集成kafka一、maven pom配置二、application.yml配置三、生产者代码:四、消费者代码:一、maven pom配置引入spring boot kafka依赖<dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId></dependency>
2021-07-22 17:46:37
145
原创 kafka基本原理详解
kafka详解一、简介二、Kafka的使用场景三、Kafka基本概念四、server.properties核心配置详解五、生产策略(Producers)六、消费策略(Consumers)七、消费顺序一、简介Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、Storm/Spark流式
2021-07-22 17:25:22
361
原创 Java线程池的关闭
Java线程池的关闭一、线程中断interrupt方法两个作用二、线程池的关闭shutdownNow方法的源码:advanceRunState(STOP)interruptWorkers()tasks = drainQueue()runWorker方法源码getTask方法源码总结:shutdown方法的源码:interruptIdleWorkers源码总结:三、优雅的关闭线程池总结:一、线程中断在介绍线程池关闭之前,先介绍下Thread的interrupt。 在程序中,我们是不能随便中断一个线
2021-07-15 15:07:06
1894
转载 Java终止线程的三种方式
Java终止线程的三种方式:1、线程正常退出,也就是当 run() 方法完成后线程中止。2、使用 stop()> 方法强行终止线程,但是不推荐使用这个方法,该方法已被弃用。3、使用 interrupt> 方法中断线程,在当前线程中打一个停止的标记,并不是真的停止线程。一、线程正常退出在 run() 方法执行完毕后,该线程就终止了。但是在某些特殊的情况下,run() 方法会被一直执行;在服务端程序中可能会使用 while(true) { … }这样的循环结构来不断的接收来自客户
2021-07-12 15:59:55
4290
原创 springboot正常启动后访问不到controller层的接口
springboot正常启动后访问不到controller层的接口一、启动类未扫描controller目录二、启动类包路径异常三、controller类未添加注解四、application.yml关闭了web服务一、启动类未扫描controller目录解决办法:启动类添加包扫描路径,如:@SpringBootApplication(scanBasePackages = {“com.xxx.controller”})二、启动类包路径异常解决办法:启动类与controller目录保持在同一层
2021-07-05 20:17:44
5433
1
原创 idea断点进不去
idea断点进不去一、断点功能被禁二、断点功能被限制一、断点功能被禁先查下idea的断点功能是否被禁用,如图,若图标置灰表示被禁用二、断点功能被限制断点功能没被禁用是,直接执行main函数,断点可用,但运行spring项目后,发现断点进不去,原因是spring项目并非只有一个线程,你的代码大多数情况下都是子线程在执行,你需要确认下idea是否开启了“allow parallel run”,断点允许并行运行。具体配置步骤如图所示:...
2021-06-24 17:06:48
19554
2
原创 python安装及配置
python安装及配置一、解压安装包将下载好的压缩包解压到 python3中:tar -xf Python-3.6.5.tar.xz -C python3二、编译、安装进入Python-3.6.5目录,配置安装路径:./configure --prefix=/home/python3安装:make等make结束之后,再执行:make install三、测试是否安装成...
2018-09-19 19:33:30
199
spring-kafka-demo.rar
2022-01-13
jquery.validate.js
2016-03-11
jquery-2.1.4.min.js
2016-03-11
jquery-2.1.4.js
2016-03-10
jquery-1.7.2.js
2016-03-10
Java编程思想第四版完整中文高清版(免费).pdf
2016-03-07
ADT-21.0.0.zip
2016-03-03
ADT-12.0.0.zip
2016-03-03
TortoiseSVN-1.8.10.26129-x64-svn-1.8.11
2016-02-26
读写XML文件的dom4j
2016-02-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人