- 博客(339)
- 资源 (7)
- 收藏
- 关注
原创 spring boot 2.x升级为spring boot 3.x中数据库连接池druid的问题
针对项目中的问题很多,尤其是 spring boot 3 带来的变化大,针对一些问题,需要从源码层次入手看问题。之前整理的升级相关的文章参考链接。
2024-01-06 20:07:10
2227
原创 cap分布式理论
cap是实现分布式系统的思想。由3个元素组成。Consistency(一致性)在任何对等 server 上读取的数据都是最新版,不会读取出旧数据。比如 zookeeper 集群,从任何一台节点读取出来的数据是一致的。Availability(可用性)虽然系统内部会出现一些故障,但整体一直会对外提供服务,不至于崩溃。比如有10台 server,其中4台 server 出现了故障,经过特殊处理,把请求交给剩余的6台运行正常的 server,整体还在运行中,没有因为4台出现故障的 server 造
2023-10-08 11:42:13
1745
原创 对于java线程池ThreadPoolExecutor监控以及参数动态调整的思考
上面两个链接都是一篇文章发布在不同地方,看其中一篇即可。看到了美团技术团队的这篇文章以及加上自己对线程池的了解和看过的源码,有如下思考。
2023-10-07 14:59:58
538
原创 java并发编程 守护线程 用户线程 main ThreadPoolExecutor CompletableFuture
之前经常使用线程,没有对这个概念做彻底深入了解下面写4个例子来验证一下源码如下看注释的含义是,daemon 为 true 时是守护线程,false 为用户线程。当所有守护线程在执行时 jvm 会退出。
2023-10-02 22:12:24
609
原创 redis集群最少使用三个主节点和使用16384个槽以及主节点数量不超过1000的原因
cluster各节点之间需要互相通信确认对方是否存活。假设有A、B两个节点,B发现联系不上A,是不能确定A和B谁出了问题的,假设集群中还有一个C节点的话,如果B、C可以互相联系,但是都联系不上A,那么这时候就可以确定A出问题了,需要把A从集群中踢出去。集群可用原则:可用节点数量>集群总节点数量的二分之一,节点数量为奇数个是出于节省资源的考虑。因为不管是四个还是三个节点,一旦挂了两个,整个集群都是不可用的。即为了节省资源和节点通信考虑,集群的节点数量为奇数,即。
2023-09-09 14:33:26
2016
原创 一个 SpringBoot 项目能处理多少请求
首先,这个问题有坑,因为 spring boot 不处理请求,只是把现有的开源组件打包后进行了版本适配、预定义了一些开源组件的配置通过代码的方式进行自动装配进行简化开发。这是 spring boot 的价值。使用 spring boot 进行开发相对于之前写配置文件是简单了,但是解决问题麻烦了,对于刚入手的开发人员没接触过很多项目的是友好的,但是在实际开发中遇到的问题是多种多样的,然而解决这些问题需要了解内部的运行原理,这个需要看相应的源码,有时需要对现有的自动装配进行自定义处理。
2023-07-29 19:37:53
672
原创 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
2838
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
440
原创 java内存模型(jmm)产生的原因
除了增加高速缓存之外,为了使cpu内存的运算单元能进行被充分利用,cpu可能会对输入代码进行乱序执行优化,cpu会在计算之后将乱序执行的结果重组,保证该结果与顺序执行的结果是一致的,但并不保证程序中各个语句计算的先后顺序与输入代码中的顺序一致,因此如果存在一个计算任务依赖另外一个计算任务的中间结果,那么其顺序性并不能靠代码的先后顺序来保证。由于计算机的存储设备与cpu的运算速度有几个数量级的差距,所以现代计算机系统不得不加入一层或者多层使读写速度尽可能接近cpu运算速度的高速缓存来作为内存与cpu的缓冲。
2022-10-02 12:52:12
561
原创 软件开发中的时空问题感悟
项目用了k8s,对于k8s不太了解,但是通过lens看到项目的gc使用的是serial,jmap命令执行到后期eden区域总是处于100%无法回收,再接下来就是lens显示重启了,因为项目重启后容器就销毁了,无法查看dump文件,之前这个问题不是很重要,就没在意。因为是调用了定时任务,定时任务中有一个数据导出到excel的问题(使用easyexcel来处理),目前从数据库查询后符合要求的。,这样一来,任务执行时间就长了,还好这个任务不是对时间要求很高的。目前在做的项目遇到了一个问题。
2022-09-03 18:27:12
253
原创 java线程状态转换
周志明老师的书籍《深入理解java虚拟机》第2版已看完,在383页讲到线程状态转换,加上下面的链接讲到线程状态转换,自己做了一个图。 https://blog.csdn.net/pange1991/article/details/53860651之前看过很多文章写到waiting和timed waiting这两个状态加上理解感觉有歧义,后面看到周志明老师的书籍才知道,在图中用了书籍中的两个中文含义,简洁明了。
2022-04-18 15:36:05
264
原创 java老项目中添加链路追踪功能问题记录
本文介绍了在传统Spring MVC项目中实现全链路追踪的解决方案。由于项目限制无法使用Spring Cloud Sleuth,作者基于MDC和ThreadLocal实现了TraceId功能。通过编写TraceFilter拦截HTTP请求生成/传递TraceId,并配置Dubbo的ConsumerFilter和ProviderFilter实现跨服务调用时的TraceId透传。日志框架(logback/log4j)通过%X{TraceId}模式输出追踪标识,最终实现了HTTP+Dubbo调用的全链路日志追踪,
2026-07-04 19:13:02
161
原创 java与asm的字节码适配问题
本文记录了在使用JDK8+Spring+SpringMVC+Tomcat+JSP的老旧技术栈时遇到的ASM字节码问题。开发者在添加Stream API代码(Function.identity())后,因Spring依赖的老版本ASM4(仅支持Java7)无法处理Java8接口静态方法的INVOKESTATIC指令,导致BeanDefinitionStoreException异常。通过查阅ASM版本支持表发现,ASM6+才完整支持Java8特性。虽然升级ASM可解决问题,但由于甲方项目限制,最终选择改用传统非
2026-06-25 16:55:03
205
原创 单元测试的技术组成(junit/assert/testng/Mockito)
摘要:单元测试技术由测试运行器(如JUnit)、断言框架(如AssertJ)和Mock框架(如Mockito)组成,分别负责执行测试、验证结果和模拟依赖。这种细分使得各组件职责明确,断言框架专注结果验证,Mock框架处理依赖控制。主流组合通常采用JUnit5+Mockito+AssertJ,而传统项目可能使用JUnit4+Mockito+Hamcrest,Google生态则偏好JUnit+Mockito+Truth。这种模块化设计提高了测试代码的可维护性和灵活性。
2026-06-17 11:38:33
314
原创 spring boot 4.1发布
Spring Boot 4.1.0版本经历了多个里程碑和候选版本的迭代,包括M1-M4和RC1,最终于2026年6月发布正式版。该版本持续改进框架功能,优化性能并修复问题,为开发者提供更稳定的企业级应用开发体验。各预发布阶段通过官方博客和GitHub发布更新日志,帮助用户跟踪新特性和变更。
2026-06-12 20:09:06
258
原创 java JSR 223 中常用的脚本语言与引擎名称对应关系
摘要:本文介绍了Java平台支持的多种脚本语言引擎实现。JavaScript引擎包括Nashorn(JDK8-14)、Rhino(JDK6-7)和GraalVM推荐方案;Python有Jython(Python2)和GraalPy;还列举了Groovy、Ruby、Lua等语言的引擎实现方式。文中提供了引擎识别方法和常用语言引擎名速查表,并特别提醒:JDK11+默认移除了JavaScript引擎,需引入第三方实现;生产环境使用脚本引擎需注意安全风险、性能问题和调试困难等挑战。
2026-05-27 14:25:22
59
原创 slf4j中jcl-over-slf4j、jul-to-slf4j、log4j-over-slf4j、slf4j-api、slf4j-log4j12、log4j-slf4j-impl的区别是什么
SLF4J日志框架解析:slf4j-api是日志门面接口,不包含具体实现;*-over-slf4j用于桥接其他日志框架到SLF4J,其中to/over命名区别在于是否覆盖原实现(JUL用to转接,JCL/Log4j用over覆盖)。注意避免错误组合如同时使用slf4j-log4j12和log4j-slf4j-impl,推荐使用slf4j-api+log4j-slf4j-impl+log4j-core组合,配合log4j-over-slf4j接管旧日志。
2026-05-13 15:19:09
379
原创 groovy学习
本文介绍了Groovy语言的基础特性及其与Java的关系。Groovy是基于JDK的脚本语言,代码示例展示了其执行系统命令的简洁语法。编译后的Groovy代码仍是标准Java类,通过字节码增强实现语法简化,本质上是Java的"语言级封装"。文章对比了Groovy与Apache Commons等工具库的差异,指出Groovy在语法层面提供更深入的增强。此外还介绍了静态编译检查、返回值规则(最后一行为返回值)等核心特性,以及闭包的使用方式。Groovy通过运行时增强使Java开发更简洁,同时
2026-03-15 08:14:02
83
原创 jetbrains系工具idea和webstorm默认编辑器设置
EditorConfig是一个统一代码风格的工具,通过.editorconfig文件配置不同文件类型的编码、缩进等格式规范。该文件包含根配置声明、通用设置和针对特定文件类型的规则,如设置UTF-8编码、LF换行符、自动清理行尾空格等。不同文件类型可配置不同的缩进方式(空格或Tab)和大小(如JS文件2空格,Java/Python文件4空格)。这种配置能确保团队成员使用不同编辑器时保持一致的代码风格,提升协作效率。
2025-12-08 22:55:42
256
原创 vue.js 3中组件样式有哪些
Vue3样式方案摘要:Vue3提供多种样式方案,包括Scoped CSS(通过data-v-xxx限定组件样式)、CSS Modules(哈希类名)、全局样式等。特殊选择器如:deep()用于子组件样式覆盖,:slotted()用于插槽内容样式,:global()用于局部全局样式。支持v-bind()实现动态CSS。选择建议:优先Scoped CSS保证独立;高封装需求用CSS Modules;需要覆盖子组件用:deep();插槽样式用:slotted();少量全局样式用:global();状态变化用v-b
2025-12-08 14:57:43
481
原创 vue.js 3的页面中css里的:deep()是干什么的
摘要::deep()是Vue3特有的CSS深度选择器,用于在scoped样式中穿透子组件样式隔离。它会被Vue编译器转换为带[data-v-*]的属性选择器,处理顺序先于PostCSS。这种机制支持有选择地修改子组件内部样式,是组件库定制的重要工具。开发时使用.parent:deep(.child.item)语法,最终编译为带作用域属性的选择器,实现样式穿透的同时保持隔离特性。
2025-12-08 11:38:43
294
原创 vue.js 3中全局组件和局部组件的区别
Vue组件注册分为全局和局部两种方式。全局组件通过Vue.component()注册,可在所有实例中使用,适合通用基础组件;局部组件在实例的components选项中注册,仅限当前实例使用,适合专用组件。全局组件会增加初始包体积,而局部组件支持按需加载,有利于性能优化。选择注册方式需考虑组件复用性和性能影响,通用组件推荐全局注册,专用组件建议局部注册以避免命名冲突。
2025-12-08 11:03:36
275
原创 vue.js是干什么的?各个版本有什么区别?
Vue.js框架演进与技术革新 摘要:Vue.js作为渐进式JavaScript框架,从2.x到3.x版本进行了重大革新。Vue 3采用Monorepo管理方式,全面转向TypeScript,使用Proxy替代Object.definedProperty实现更完善的数据劫持。新增Composition API解决Options API逻辑分散问题,移除非必要API如$on/$off。编译阶段优化包括Block Tree生成、slot编译优化和高效diff算法,显著提升性能。版本迭代解决了Vue 2在TS支持
2025-12-07 22:28:46
997
原创 vue.js 2和vue.js 3的生命周期与对应的钩子函数区别
Vue 2和Vue 3生命周期钩子对比:在Vue 2中,主要使用beforeCreate、created、beforeMount等选项式API;Vue 3在保留这些钩子的同时,引入Composition API的setup()替代了beforeCreate和created,并新增了onMounted、onUpdated等组合式函数。网络请求建议放在mounted(选项式)或onMounted(组合式)中。卸载阶段,Vue 2使用beforeDestroy/destroyed,Vue 3改为beforeUnm
2025-12-07 21:43:07
320
原创 vue.js 3项目整合vue-router 4的问题
摘要:在使用Vue 3.2.13创建项目时,发现与不同版本的vue-router存在兼容性问题。实验显示,当vue-router为4.0.3和4.6.3版本时项目启动报错(TS7016类型声明缺失),而4.0.4版本却能正常运行。虽然通过升级vue-router解决了问题,但官方文档未明确说明这种版本对应关系。建议在Vue 3项目中使用vue-router时注意版本匹配,遇到类似错误可尝试调整router版本。(148字)
2025-12-03 21:42:49
274
原创 vue项目中@作用是什么?加和不加有什么区别?
Vue项目中@符号是webpack配置的路径别名,默认指向src目录。使用@/可以简化导入路径,如@/components/MyComponent.vue等价于./src/components/MyComponent.vue。不加@则默认从node_modules导入。这种别名配置提高了代码可读性和维护性。
2025-12-03 19:16:31
298
原创 ecmascript中Promise和async/await的区别
本文对比了Promise和async/await两种异步处理方式。Promise通过.then().catch()链式调用实现异步操作,而async/await使用类似同步代码的写法。两者在错误处理(.catch() vs try-catch)、可读性(回调风险 vs 清晰代码)和调试方面各有特点。async函数总会返回Promise,await只能在async函数中使用。虽然Promise是底层机制,但async/await作为其语法糖,能显著提升代码可读性,建议在现代开发中优先使用async/await
2025-12-03 15:36:45
213
原创 jvm 偏向锁禁用以及移除
JVM的偏向锁在JDK演进中被逐步废弃:JDK6引入该优化,JDK15默认禁用并标记为废弃(JEP 374),主要因维护成本高、收益下降及潜在性能问题。最终在JDK18(JEP 416)完全移除相关代码。开发者使用新版JDK时无需再考虑此特性,其历史作用已被现代并发优化方案取代。该变更反映了同步机制随应用场景变化的持续演进。
2025-11-25 10:00:08
568
原创 JDK 26 正式支持 HTTP/3
OpenJDK 26将支持HTTP/3协议,计划于2026年3月17日正式发布。根据JEP 517提案,新版本将实现HTTP/3功能,并在服务端不支持该协议时自动降级到HTTP/2或HTTP/1.1。这一特性将提升Java应用的网络通信能力,使其能够适应现代网络协议环境。目前相关功能正在开发中,用户可以通过OpenJDK官网了解最新进展。
2025-11-10 09:29:47
268
原创 mongodb的挑战者eloqdoc
文章分析指出,EloqDoc是一款兼容MongoDB的高性能分布式文档数据库,基于MongoDB开源版本修改开发。通过对比GitHub上的MongoDB源码许可证变更记录发现,MongoDB从4.1.5版本开始采用SSPL许可证,因此EloqDoc最晚是基于4.1.4版本(2018年10月12日发布)进行修改的。这一发现揭示了EloqDoc的技术基础和开发时间节点。
2025-11-05 09:30:13
207
原创 MicroProfile的作用 Quarkus
MicroProfile与Spring技术体系对比:MicroProfile是Java微服务标准化规范,适合云原生、轻量级开发,支持跨厂商迁移;而SpringBoot/SpringCloud提供全家桶式解决方案,拥有强大社区生态。两者呈现融合趋势,新框架如Quarkus可同时兼容两种API。选择依据主要取决于项目需求:云原生场景优先MicroProfile实现(如Quarkus),快速开发需求则选择Spring生态。SpringBoot 3也开始集成JakartaEE特性,开发者可根据团队熟悉度和项目特性灵
2025-10-31 11:06:23
710
原创 spring security7.0与Spring Authorization Server
Spring Authorization Server 1.5.x 是最后一代独立版本,现已被整合到 Spring Security 7.0 中。该项目已发布多个里程碑版本(M1-M3)和候选版本(RC1-RC3),最终版本计划于2025年11月发布。这一变化标志着授权服务器功能正式成为Spring Security的核心组件,开发者可通过Spring Security 7.0获取完整的OAuth2授权服务器支持。
2025-10-29 14:15:27
471
原创 java公式解析工具
EvalEx是一个Java表达式解析库,支持自定义公式处理。该项目GitHub地址为https://github.com/ezylang/EvalEx,官网为https://ezylang.github.io/EvalEx/。注意从3.0.0版本开始,Maven依赖的groupId发生了变化:3.0之前版本使用com.udojava,最后版本为2.7;3.0开始改用com.ezylang,当前最新版本为3.0.0。开发者升级时需注意依赖配置的变化。
2025-10-28 13:57:01
167
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅