- 博客(291)
- 资源 (7)
- 收藏
- 关注

原创 spring boot 2.x升级为spring boot 3.x中数据库连接池druid的问题
针对项目中的问题很多,尤其是 spring boot 3 带来的变化大,针对一些问题,需要从源码层次入手看问题。之前整理的升级相关的文章参考链接。
2024-01-06 20:07:10
1875

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

原创 对于java线程池ThreadPoolExecutor监控以及参数动态调整的思考
上面两个链接都是一篇文章发布在不同地方,看其中一篇即可。看到了美团技术团队的这篇文章以及加上自己对线程池的了解和看过的源码,有如下思考。
2023-10-07 14:59:58
368

原创 java并发编程 守护线程 用户线程 main ThreadPoolExecutor CompletableFuture
之前经常使用线程,没有对这个概念做彻底深入了解下面写4个例子来验证一下源码如下看注释的含义是,daemon 为 true 时是守护线程,false 为用户线程。当所有守护线程在执行时 jvm 会退出。
2023-10-02 22:12:24
530

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

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

原创 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
2736
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
359

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

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

原创 java线程状态转换
周志明老师的书籍《深入理解java虚拟机》第2版已看完,在383页讲到线程状态转换,加上下面的链接讲到线程状态转换,自己做了一个图。 https://blog.csdn.net/pange1991/article/details/53860651之前看过很多文章写到waiting和timed waiting这两个状态加上理解感觉有歧义,后面看到周志明老师的书籍才知道,在图中用了书籍中的两个中文含义,简洁明了。
2022-04-18 15:36:05
221
原创 java中HashMap和ConcurrentHashMap的共性以及区别
HashMap与ConcurrentHashMap的比较(JDK1.8) 相同点: 采用数组+链表/红黑树存储结构 默认初始容量16,负载因子0.75 扩容阈值12(16*0.75) 链表长度≥8且数组容量>64时转为红黑树 不同点: HashMap允许null键值,ConcurrentHashMap禁止 ConcurrentHashMap采用CAS保证线程安全 初始化机制不同(代码实现差异) ConcurrentHashMap通过锁分段技术实现高并发访问,而HashMap是非线程安全的数据结构。
2025-06-22 23:30:36
162
原创 java javascript typescript基本数据类型区别
typescript在javascript基础上加了any、unknown、void、never、tuple这几个类型。
2025-06-08 18:47:04
82
原创 jvm对象压缩
后就会开启压缩,但是怎么开启压缩的,以及什么情况下压缩失效,没有一篇文章讲的特别透彻,在这里记录一下,后面抽时间进行更新。最近在看一些文章,知道64位jvm在启动时指定。
2025-05-20 22:14:54
168
原创 node.js使用ts-node搭建typescript运行环境
在使用ts-node运行TypeScript文件时,可能会遇到TypeError: Unknown file extension ".ts"的错误。这是因为Node.js的ES Modules系统无法直接识别.ts文件扩展名。为了解决这个问题,需要配置tsconfig.json文件,该文件提供了TypeScript编译的详细配置,包括模块系统、目标JavaScript版本等。通过正确配置tsconfig.json,ts-node能够识别并处理TypeScript文件,从而避免上述错误。例如,配置compil
2025-05-17 23:52:55
493
原创 node.js为什么产生?npm是什么?
从官网得知介绍如下https://nodejs.org/zh-cn/learn/getting-started/introduction-to-nodejsNode.js是一个开源和跨平台的JavaScript运行时环境。Node.js在浏览器之外运行V8 JavaScript引擎,这是Google Chrome的核心。这使得Node.js具有很高的性能。Node.js应用程序在单个进程中运行,无需为每个请求创建新线程。Node.js在其标准库中提供了一组异步I/O,可以防止JavaScript代码阻塞
2025-05-04 22:47:28
561
原创 mysql事务脏读 不可重复读 幻读 事务隔离级别关系
至于当前事务在执行过程中针对同一条查询sql涉及到的数据查询多少次返回结果如何不做限制,只有一个标准,只读取事务已提交的数据,这样就会有一个问题,别的事务针对符合查询条件的数据做了修改,那查询到的数据就说不明白了。看着隔离级别中的名字定义和数据一致性问题可知,针对的是事务执行过程中查询数据的问题,然而这些问题可能是由于插入、修改、删除导致的。技术,使用了innodb中数据行的隐藏数据中的trx_id,MV指的是undo log,CC指的是readview。非活跃状态的事务,即事务已提交的数据。
2025-04-13 20:28:42
331
原创 typescript是什么,解决了什么问题
在学习前端过程中,发现了typescript,才知道是微软开发的一门语言。主要是为了解决javascript的缺少类型约束的问题,javascript有的功能,typescript不会缺,甚至比javascript还多,所以说typescript是javascript的超集。现在的浏览器不支持typescript,但是可以通过一些编译器将typescript转换为javascript。
2025-03-30 00:12:17
145
原创 开发过程中需要安装的浏览器插件
Vue.js devtoolshttps://chromewebstore.google.com/detail/vuejs-devtools/nhdogjmejiglipccpnnnanhbledajbpd?hl=zh-CN&utm_source=ext_sidebarModHeaderhttps://chromewebstore.google.com/detail/modheader-modify-http-hea/idgpnmonknjnojddfkpgkljpfnnfcklj?utm_source=e
2025-03-29 19:41:52
187
原创 jdk 支持路线图
https://www.oracle.com/java/technologies/java-se-support-roadmap.html
2025-03-29 18:09:06
467
原创 vue options api和composition api区别
对应代码逻辑被拆分到各个属性中,当组件变得更大、更复杂时,同一个功能的逻辑会拆的很分散,不利于代码阅读和理解。能将同一个关注点的逻辑收集在一起,方便代码封装和复用,提高代码可读性。使用函数多,复杂,可读性差。函数编程对typescript支持更友好。可以直接在对应属性中编写对应功能,容易理解,快速上手。
2025-03-22 20:11:41
152
原创 前端项目中export和import的作用
翻看了一下ecma官网介绍,发现ES6是在2015年推出的,从推出这个规范到各家浏览器厂商支持,再到市场上实际应用,一般需要3年左右的时间。ecma制定了一个浏览器端运行代码的规范(发号施令),编号为262,各大浏览器中的javascript只是其中一个实现(实际干活的),还有一个actionscript,不过这个现在已经不怎么用了。近期在学习前端,发现有export和import,想起了之前没用过,就研究搜索了一下,发现这个是在 ES6中添加的,难怪之前学习js的时候没见过。
2025-03-08 23:55:08
562
原创 org.mortbay.jetty和org.eclipse.jetty的区别
Eclipse接管后的Jetty在性能和稳定性方面有了显著提升。此外,Jetty项目在2006年由Codehaus接手,并在2008年由Eclipse接手重写,这也导致了包结构的变化,这些变化使得Jetty的稳定性和性能得到了显著提升,特别是在高负载情况下表现更佳。在2008年,Eclipse基于JDK 1.5开始重写Jetty,从那时起,Jetty的包结构从 org.mortbay.jetty 变更为 org.eclipse.jetty,并且API也有所变化。主要区别在于它们的版本和包结构的变化。
2025-02-18 21:05:01
289
原创 vue.js v-model实现原理
在 vue.js 3中,通过 v-model 指令可以方便实现表单元素数据双向绑定。实现 v-model 指令元素并不神奇,本质上是一种语法糖。实现原理其实是 v-bind 和 v-on 这两个指令。v-on 指令会绑定 input 事件,在事件回调中重新为 value 属性绑定的变量赋值,简写为。v-bind 指令会将表单元素的 value 属性与一个变量绑定,简写为。v-on监听input事件,更新message变量的值。v-bind给value属性绑定message变量。
2025-02-09 18:23:55
307
原创 spring spring-boot spring-cloud发布以及适配
看了 spring 的官网,提到 2025 年 spring 会跟随 jdk 25 LTS发布后,接着发布 Spring Framework 7.0 GA,与之对应 spring 序列的组件版本情况如下。
2025-01-26 17:16:10
340
原创 Vue.createApp的对象参数
Vue.createApp的对象参数属性名作用注意事项template定义需要渲染的模板内容data为 vue.js 组件定义响应式数据,该属性需要传入一个函数,该函数返回一个对象methods需要传入一个对象,通常会在这个对象中定义很多方法,可以被绑定到模板中,在该方法中,可以使用 this 直接访问 data 返回对象的属性。methods 中定义的方法不能使用箭头函数。
2024-12-08 22:05:30
1284
原创 junit单元测试单个测试类正常但是整个项目不通过
最近在做项目使用junit写单元测试的时候,发现了一个奇怪的问题,单个测试类正常但是整个项目不通过,这个问题很奇葩,但是找不到原因。思考了一下,可能是共享变量的问题。在此记录一下,方便后面排查问题。如下链接也是碰到了这个问题。
2024-06-28 14:34:19
491
原创 visual studio code生成代码模板
新建一个临时文件,例如 test.html,输入 vue3app,按 tab 或者 enter 键即可。需要生成代码片段的源代码,右边 vs code 是生成代码片段的格式。输入自定义描述,例如 create vue3 app。输入触发代码片段的名称,例如 vue3app。将网页中的内容复制到注释的内容中即可。文件->首选项->配置用户代码片段。
2024-05-26 20:36:18
876
原创 spring事务@Transactional
spring 事务注解 @Transactional 添加后,通过 aop 为当前方法创建代理对象,默认使用 cglib,可以使用 java 的动态代理。默认回滚异常为 RuntimeException 或者 Error 子类,如果抛出的异常非 RuntimeException 子类,需要单独指定 rollbackFor 为 Exception,否则会捕捉不到。
2024-04-21 16:38:59
1071
原创 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
738
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人