自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zlpzlpzyd的专栏

在其位谋其政 任其职尽其责

  • 博客(270)
  • 资源 (7)
  • 收藏
  • 关注

原创 spring boot 2.x升级为spring boot 3.x中数据库连接池druid的问题

针对项目中的问题很多,尤其是 spring boot 3 带来的变化大,针对一些问题,需要从源码层次入手看问题。之前整理的升级相关的文章参考链接。

2024-01-06 20:07:10 1229

原创 cap分布式理论

cap是实现分布式系统的思想。由3个元素组成。Consistency(一致性)在任何对等 server 上读取的数据都是最新版,不会读取出旧数据。比如 zookeeper 集群,从任何一台节点读取出来的数据是一致的。Availability(可用性)虽然系统内部会出现一些故障,但整体一直会对外提供服务,不至于崩溃。比如有10台 server,其中4台 server 出现了故障,经过特殊处理,把请求交给剩余的6台运行正常的 server,整体还在运行中,没有因为4台出现故障的 server 造

2023-10-08 11:42:13 1514

原创 对于java线程池ThreadPoolExecutor监控以及参数动态调整的思考

上面两个链接都是一篇文章发布在不同地方,看其中一篇即可。看到了美团技术团队的这篇文章以及加上自己对线程池的了解和看过的源码,有如下思考。

2023-10-07 14:59:58 155

原创 java并发编程 守护线程 用户线程 main ThreadPoolExecutor CompletableFuture

之前经常使用线程,没有对这个概念做彻底深入了解下面写4个例子来验证一下源码如下看注释的含义是,daemon 为 true 时是守护线程,false 为用户线程。当所有守护线程在执行时 jvm 会退出。

2023-10-02 22:12:24 405

原创 redis集群最少使用三个主节点和使用16384个槽以及主节点数量不超过1000的原因

cluster各节点之间需要互相通信确认对方是否存活。假设有A、B两个节点,B发现联系不上A,是不能确定A和B谁出了问题的,假设集群中还有一个C节点的话,如果B、C可以互相联系,但是都联系不上A,那么这时候就可以确定A出问题了,需要把A从集群中踢出去。集群可用原则:可用节点数量>集群总节点数量的二分之一,节点数量为奇数个是出于节省资源的考虑。因为不管是四个还是三个节点,一旦挂了两个,整个集群都是不可用的。即为了节省资源和节点通信考虑,集群的节点数量为奇数,即。

2023-09-09 14:33:26 382

原创 对于现有的分布式id发号器的思考 id生成器 雪花算法 uuid 幂等

分布式id发号器 id生成器 雪花算法 uuid 幂等

2023-08-03 17:58:10 1249

原创 一个 SpringBoot 项目能处理多少请求

首先,这个问题有坑,因为 spring boot 不处理请求,只是把现有的开源组件打包后进行了版本适配、预定义了一些开源组件的配置通过代码的方式进行自动装配进行简化开发。这是 spring boot 的价值。使用 spring boot 进行开发相对于之前写配置文件是简单了,但是解决问题麻烦了,对于刚入手的开发人员没接触过很多项目的是友好的,但是在实际开发中遇到的问题是多种多样的,然而解决这些问题需要了解内部的运行原理,这个需要看相应的源码,有时需要对现有的自动装配进行自定义处理。

2023-07-29 19:37:53 521

原创 ThreadPoolExecutor获取当前工作线程数量

ThreadPoolExecutor获取当前工作线程数量

2023-03-31 00:52:58 3136

原创 java可见性问题的来源

java可见性问题的来源

2023-03-20 20:26:35 47

原创 JVM垃圾收集算法

JVM垃圾收集算法

2023-03-19 18:32:54 51

原创 java @Autowired @Resource @Inject 三个注解的区别

有两个重要的属性,name 和 type,spring 将 name 属性解析为 bean 的名字,type 解析为 bean 的类型。如果同时指定了 name 和 type,从 spring 上下文中找到唯一匹配的 bean 进行装配,找不到抛出异常。如果指定了 type,则从上下文中查找类型匹配的 bean 进行装配,找不到或者找到多个抛出异常。如果指定了 name,则从上下文中查找名称匹配的 bean 进行装配,找不到抛出异常。在 spring 中,@Inject 和 @Autowired 相同。

2023-03-04 22:40:43 2521 4

原创 java OutOfMemoryError问题原因排查

因为新生代和老年代的默认分配比例为 1:2,所以新生代分配了 1g 内存。由于 Eden 和 Survivor 的比例为 8:1,所以需要进行 gc,但是新生代晋升到老年代对象有两种方式,标红部分为生成文件时导出的文件数据,其中对象占用 86 MB内存,GC Root 引用的对象是 > 1,07 GB。以上两种情况都无法满足,即无法升级到老年代,所以发生了 oom。程序oom后生成了dump文件,使用mat文件分析后如下。

2022-12-21 16:18:05 278

原创 java垃圾收集器组合

java垃圾收集器组合

2022-10-04 22:50:01 128

原创 java内存模型(jmm)产生的原因

除了增加高速缓存之外,为了使cpu内存的运算单元能进行被充分利用,cpu可能会对输入代码进行乱序执行优化,cpu会在计算之后将乱序执行的结果重组,保证该结果与顺序执行的结果是一致的,但并不保证程序中各个语句计算的先后顺序与输入代码中的顺序一致,因此如果存在一个计算任务依赖另外一个计算任务的中间结果,那么其顺序性并不能靠代码的先后顺序来保证。由于计算机的存储设备与cpu的运算速度有几个数量级的差距,所以现代计算机系统不得不加入一层或者多层使读写速度尽可能接近cpu运算速度的高速缓存来作为内存与cpu的缓冲。

2022-10-02 12:52:12 458

原创 软件开发中的时空问题感悟

项目用了k8s,对于k8s不太了解,但是通过lens看到项目的gc使用的是serial,jmap命令执行到后期eden区域总是处于100%无法回收,再接下来就是lens显示重启了,因为项目重启后容器就销毁了,无法查看dump文件,之前这个问题不是很重要,就没在意。因为是调用了定时任务,定时任务中有一个数据导出到excel的问题(使用easyexcel来处理),目前从数据库查询后符合要求的。,这样一来,任务执行时间就长了,还好这个任务不是对时间要求很高的。目前在做的项目遇到了一个问题。

2022-09-03 18:27:12 162

原创 java synchronized 对锁对象升级的获得与释放

线程执行到 synchronized 关键字时对 lock 对象的处理情况

2022-07-01 15:42:09 147

原创 java线程状态转换

周志明老师的书籍《深入理解java虚拟机》第2版已看完,在383页讲到线程状态转换,加上下面的链接讲到线程状态转换,自己做了一个图。 https://blog.csdn.net/pange1991/article/details/53860651之前看过很多文章写到waiting和timed waiting这两个状态加上理解感觉有歧义,后面看到周志明老师的书籍才知道,在图中用了书籍中的两个中文含义,简洁明了。

2022-04-18 15:36:05 175

原创 spring中各种bean加载顺序

具体加载顺序按照罗列的顺序。

2024-04-06 00:48:45 333

原创 spring-cloud-openfeign 3.0.0之前版本(对应spring boot 2.4.x之前版本)feign配置加载顺序

spring-cloud-openfeign 3.0.0之前版本(对应spring boot 2.4.x之前版本)feign配置加载顺序

2024-03-09 01:07:26 497 1

原创 spring-cloud-openfeign 3.0.0(对应spring boot 2.4.x之前版本)之前版本feign整合ribbon请求流程

spring-cloud-openfeign(spring 2.4.x之前) 3.0.0之前版本feign整合ribbon请求流程

2024-03-09 01:01:16 554

原创 spring boot 2.4.x 之前版本(对应spring-cloud-openfeign 3.0.0之前版本)feign请求异常逻辑

内层请求异常返回原始异常,外层异常使用 ribbon 的 ClientException 进行包装最终通过 feign.Client.Default 来执行实际请求,如果引入了其他依赖(例如 feign-httpclient 或者 feign-hc5 或者 feign-okclient),会使用其他方式。最终通过 native 函数调用 jvm 层次的 tcp 网络调用,出现异常返回 IOException。

2024-03-09 00:40:56 995

原创 spring boot(2.4.x 开始)和spring cloud项目中配置文件加载顺序 spring-cloud-starter-bootstrap Marker

从 spring boot 2.4.x 开始,ConfigFileApplicationListener 标记为已过期,监听替换为BootstrapConfigFileApplicationListener(继承了 ConfigFileApplicationListener 作为过渡),用 ConfigDataEnvironmentPostProcessor (EnvironmentPostProcessor 的实现类)代替用于加载配置。在此版本中专门重写了文件加载相关的功能。在启动时添加 vm 参数。

2024-02-08 15:21:30 917

原创 spring boot和spring cloud项目中配置文件application和bootstrap中的值与对应的配置类绑定处理

这样参数的顺序正好对应起来最后匹配 bootstrap 值的问题,例如项目中使用了 nacos 中的配置中心功能,很多参数不需要在项目中进行配置,在 nacos 中进行指定就可以,但是 nacos 中的配置参数与项目是隔离的。加载完文件转换为 Environment 中对应的值之后,接下来需要将对应的值与对应的配置类进行绑定,方便对应的组件取值处理接下来的操作。以迭代器中的值顺序为准与 cache 中进行比对,返回对应的配置类,然后再将对应的配置属性从对应的配置文件中获取。可以发现,对应配置值顺序如下。

2024-02-07 17:52:49 1661

原创 spring boot(2.4.x之前版本)和spring cloud项目中自动装配的监听执行顺序

综合上述表述,如果引入了 BootstrapApplicationListener 则优先加载,但是在源码中发现如下正好对应了我们平时写的 spring boot 启动类,可知,在启动时,如果引入了 spring cloud 组件,会先创建一个子容器来加载对应的配置,然后传递到父容器中进行参数传递,完成参数加载。

2024-02-07 15:51:01 1318

原创 spring boot和spring cloud项目中配置文件application和bootstrap加载顺序

在前面的文章基础上日志配置如果引用了 spring cloud 的组件且有 bootstrap 和 application 相关文件,启动日志如下如果 bootstrap 相关文件存在,先加载,然后再加载 application 相关文件。对应引用了 spring cloud 组件。如果 bootstrap 相关文件不存在,加载 application 相关文件。对应未引用 spring cloud 组件。

2024-02-07 09:31:08 1058

原创 spring boot(2.4.x之前版本)和spring cloud项目中配置文件的作用

为了防止理解问题,pom.xml 版本依赖如下日常开发中经常使用的配置文件有 application 和 bootstrap(日志相关的例外不做讲解),对应的配置文件后缀分别为 properties 或者 yml(yaml),区别如下。

2024-02-06 17:56:44 868

原创 mysql的联合索引利用情况

在使用 mysql 进行数据存储时,不免用到联合索引,但是使用联合索引有一些注意点,在此记录一下。使用的 mysql 版本为 8.0.28定义表结构如下可以看到,这里的类型为数字,但是存储的类型为 char,在插入过程中会进行转化。

2024-01-27 01:09:36 1147

原创 java集合ArrayList和HashSet的fail-fast与fail-safe以及ConcurrentModificationException

针对集合的元素移除问题最好还是获取其中的 iterator() 获取对应的迭代器来实现。参考链接。

2024-01-23 18:37:57 1082

原创 java线程池ThreadPoolExecutor的拒绝策略RejectedExecutionHandler

近期在面试时问题时问到了 ThreadPoolExecutor 的拒绝策略 RejectedExecutionHandler 的实现 CallerRunsPolicy,之前没深入思考过,在此记录一下。

2024-01-22 11:49:28 941

原创 spring mvc的HandlerInterceptor的原理以及使用场景

近期在面试的时候问到了 spring mvc 的 HandlerInterceptor,用过但是没深入,记录一下。以下代码为 spring boot 2.7.15 中自带的 spring 5.3.29如下为 DispatcherServlet 中的 doDispatch()其中通过 HandlerExecutionChain、HttpServletRequest、HttpServletResponse、HandlerAdapter、HandlerExecutionChain 来进行请求处理。

2024-01-21 21:11:32 851

原创 分布式锁的产生以及使用

日常开发中,针对一些需要锁定资源的操作,例如商城的订单超卖问题、订单重复提交问题等。都是为了解决在资源有限的情况限制客户端的访问。

2024-01-20 23:07:40 988

原创 spring cloud netflix hystrix的替代产品

spring cloud 整合了 netflix 的一个很多的熔断处理的组件,即 hystrix。但是在最后一个版本 1.5.18 在 2018.11.16 发布后,进入了维护模式,即没有新特性对外发布了,即使有问题也只能那样了。

2024-01-19 14:25:37 933

原创 字符串倒序输出

近期面试有这样一个问题,给定一个字符串,将其倒序输出,这种问题乍一看很好处理,但是实际在写的时候不知道怎么写了,有思路,但是没写出来。还可以通过数据结构中的栈实现,因为栈是后进先出(Last In First Out,LIFO)的数据结构,对于字符串倒序输出,正好符合这个要求。java 语言的好处是很多地方给开发人员封装了,带来的坏处是不思考这些底层问题了,在遇到一些问题的时候棘手。对于面试中遇到的问题,一般是考察算法类的,对应代码里的第一种和第二种,那种内部封装的一般情况下不会问这个。

2024-01-19 10:40:17 509

原创 apache log4j2官方文档

https://logging.apache.org/log4j/2.x/manual/configuration.htmlapache log4j2官方文档

2024-01-16 17:38:49 396

原创 elasticsearch的查询方式和mysql数据库事务隔离级别的思考

查询方式数据量实时查询排序跳页使用场景与关系数据库事务隔离级别对应关系from+size浅分页10000不支持支持不支持深分页,无序批量查询.。后台批处理、导出>10000支持支持不支持深分页,实时大批量查询参考链接。

2024-01-04 12:26:48 1141

原创 linux支持的零拷贝(zero copy)类型以及java对应的支持

如上述表格,在传统 io 的基础上,mmap 方式少了一次 cpu 复制,sendfile 相比 mmap 少了1次用户态切换,1次内核态切换,系统调用少了1次,sendfile+DMA scatter/gather 在单纯的 sendfile 调用基础上少了1次cpu复制,后面的 direct io、splice、tee 在资源消耗上类似。将内核中的读缓冲区与用户空间的缓冲区进行映射,所有的IO都在内核中完成。将 cpu 的复制操作交给网卡去做,需要网卡支持并且提供对应的驱动程序。

2024-01-01 11:50:04 460

原创 linux 的直接direct io O_DIRECT

Direct IO也叫无缓冲IO,裸IO(rawIO),意思是使用无缓冲IO对文件进行读写,不会经过page cache。通常,我们使用的文件流读取、内存映射都属于 Cache IO,因为将数据写入文件,首先会写入cache,最终再落盘到 IO device 或者称为 disk上。cache IO 使得我们在写入、读取(预读取、顺序读取等特性)文件数据的时候,性能得以提升,能够从cache(内存)中读取数据。

2024-01-01 01:06:08 973

原创 java零拷贝zero copy MappedByteBuffer

java零拷贝zero copy MappedByteBuffer

2023-12-31 22:13:16 858

原创 linux的页缓存page cache

由于我们开发的程序要运行的话一般都在 linux 上运行,以下以 linux 为例来讲解Page Cache 的本质是由 Linux 内核管理的内存区域。通过 mmap(memory map) 以及 buffered io 将文件读取到内存空间实际上都是读取到 Page Cache 中。mmap 是通过指针操作的方式绕过了内核态直接操作 Page Cache。

2023-12-31 17:24:08 1458

原创 java中PhantomReference WeakReference SoftReference垃圾回收触发时机以及使用场景

java中PhantomReference WeakReference SoftReference垃圾回收触发时机以及使用场景

2023-12-30 19:55:18 1025

Jboss In Action

此文件为Jboss In Action一书的配套源代码。

2014-10-10

MyEclipse 下载地址

此文件中包含了MyEclipse的常用版本,以及各种版本在不通操作系统平台上的安装包。

2014-05-18

通过输入的年份和月份打印对应的日历

此文件通过输入的年份和月份可以输出对应的日历

2014-04-19

计算生日是第几天

使用Java实现计算生日是当月的第几天,此计算方式从书上看到。

2014-04-16

《深入浅出Hibernate》 示例源码

《深入浅出Hibernate》 示例源码

2014-04-10

MyEclipse 设置

此文档是我在使用MyEclipse的过程中总结出来的经验

2014-04-02

空空如也

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

TA关注的人

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