- 博客(332)
- 资源 (7)
- 收藏
- 关注
原创 spring boot 2.x升级为spring boot 3.x中数据库连接池druid的问题
针对项目中的问题很多,尤其是 spring boot 3 带来的变化大,针对一些问题,需要从源码层次入手看问题。之前整理的升级相关的文章参考链接。
2024-01-06 20:07:10
2178
原创 cap分布式理论
cap是实现分布式系统的思想。由3个元素组成。Consistency(一致性)在任何对等 server 上读取的数据都是最新版,不会读取出旧数据。比如 zookeeper 集群,从任何一台节点读取出来的数据是一致的。Availability(可用性)虽然系统内部会出现一些故障,但整体一直会对外提供服务,不至于崩溃。比如有10台 server,其中4台 server 出现了故障,经过特殊处理,把请求交给剩余的6台运行正常的 server,整体还在运行中,没有因为4台出现故障的 server 造
2023-10-08 11:42:13
1719
原创 对于java线程池ThreadPoolExecutor监控以及参数动态调整的思考
上面两个链接都是一篇文章发布在不同地方,看其中一篇即可。看到了美团技术团队的这篇文章以及加上自己对线程池的了解和看过的源码,有如下思考。
2023-10-07 14:59:58
504
原创 java并发编程 守护线程 用户线程 main ThreadPoolExecutor CompletableFuture
之前经常使用线程,没有对这个概念做彻底深入了解下面写4个例子来验证一下源码如下看注释的含义是,daemon 为 true 时是守护线程,false 为用户线程。当所有守护线程在执行时 jvm 会退出。
2023-10-02 22:12:24
591
原创 redis集群最少使用三个主节点和使用16384个槽以及主节点数量不超过1000的原因
cluster各节点之间需要互相通信确认对方是否存活。假设有A、B两个节点,B发现联系不上A,是不能确定A和B谁出了问题的,假设集群中还有一个C节点的话,如果B、C可以互相联系,但是都联系不上A,那么这时候就可以确定A出问题了,需要把A从集群中踢出去。集群可用原则:可用节点数量>集群总节点数量的二分之一,节点数量为奇数个是出于节省资源的考虑。因为不管是四个还是三个节点,一旦挂了两个,整个集群都是不可用的。即为了节省资源和节点通信考虑,集群的节点数量为奇数,即。
2023-09-09 14:33:26
1943
原创 一个 SpringBoot 项目能处理多少请求
首先,这个问题有坑,因为 spring boot 不处理请求,只是把现有的开源组件打包后进行了版本适配、预定义了一些开源组件的配置通过代码的方式进行自动装配进行简化开发。这是 spring boot 的价值。使用 spring boot 进行开发相对于之前写配置文件是简单了,但是解决问题麻烦了,对于刚入手的开发人员没接触过很多项目的是友好的,但是在实际开发中遇到的问题是多种多样的,然而解决这些问题需要了解内部的运行原理,这个需要看相应的源码,有时需要对现有的自动装配进行自定义处理。
2023-07-29 19:37:53
654
原创 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
2805
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
421
原创 java内存模型(jmm)产生的原因
除了增加高速缓存之外,为了使cpu内存的运算单元能进行被充分利用,cpu可能会对输入代码进行乱序执行优化,cpu会在计算之后将乱序执行的结果重组,保证该结果与顺序执行的结果是一致的,但并不保证程序中各个语句计算的先后顺序与输入代码中的顺序一致,因此如果存在一个计算任务依赖另外一个计算任务的中间结果,那么其顺序性并不能靠代码的先后顺序来保证。由于计算机的存储设备与cpu的运算速度有几个数量级的差距,所以现代计算机系统不得不加入一层或者多层使读写速度尽可能接近cpu运算速度的高速缓存来作为内存与cpu的缓冲。
2022-10-02 12:52:12
547
原创 软件开发中的时空问题感悟
项目用了k8s,对于k8s不太了解,但是通过lens看到项目的gc使用的是serial,jmap命令执行到后期eden区域总是处于100%无法回收,再接下来就是lens显示重启了,因为项目重启后容器就销毁了,无法查看dump文件,之前这个问题不是很重要,就没在意。因为是调用了定时任务,定时任务中有一个数据导出到excel的问题(使用easyexcel来处理),目前从数据库查询后符合要求的。,这样一来,任务执行时间就长了,还好这个任务不是对时间要求很高的。目前在做的项目遇到了一个问题。
2022-09-03 18:27:12
238
原创 java线程状态转换
周志明老师的书籍《深入理解java虚拟机》第2版已看完,在383页讲到线程状态转换,加上下面的链接讲到线程状态转换,自己做了一个图。 https://blog.csdn.net/pange1991/article/details/53860651之前看过很多文章写到waiting和timed waiting这两个状态加上理解感觉有歧义,后面看到周志明老师的书籍才知道,在图中用了书籍中的两个中文含义,简洁明了。
2022-04-18 15:36:05
246
原创 jetbrains系工具idea和webstorm默认编辑器设置
EditorConfig是一个统一代码风格的工具,通过.editorconfig文件配置不同文件类型的编码、缩进等格式规范。该文件包含根配置声明、通用设置和针对特定文件类型的规则,如设置UTF-8编码、LF换行符、自动清理行尾空格等。不同文件类型可配置不同的缩进方式(空格或Tab)和大小(如JS文件2空格,Java/Python文件4空格)。这种配置能确保团队成员使用不同编辑器时保持一致的代码风格,提升协作效率。
2025-12-08 22:55:42
210
原创 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
443
原创 vue.js 3的页面中css里的:deep()是干什么的
摘要::deep()是Vue3特有的CSS深度选择器,用于在scoped样式中穿透子组件样式隔离。它会被Vue编译器转换为带[data-v-*]的属性选择器,处理顺序先于PostCSS。这种机制支持有选择地修改子组件内部样式,是组件库定制的重要工具。开发时使用.parent:deep(.child.item)语法,最终编译为带作用域属性的选择器,实现样式穿透的同时保持隔离特性。
2025-12-08 11:38:43
234
原创 vue.js 3中全局组件和局部组件的区别
Vue组件注册分为全局和局部两种方式。全局组件通过Vue.component()注册,可在所有实例中使用,适合通用基础组件;局部组件在实例的components选项中注册,仅限当前实例使用,适合专用组件。全局组件会增加初始包体积,而局部组件支持按需加载,有利于性能优化。选择注册方式需考虑组件复用性和性能影响,通用组件推荐全局注册,专用组件建议局部注册以避免命名冲突。
2025-12-08 11:03:36
236
原创 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
960
原创 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
294
原创 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
227
原创 vue项目中@作用是什么?加和不加有什么区别?
Vue项目中@符号是webpack配置的路径别名,默认指向src目录。使用@/可以简化导入路径,如@/components/MyComponent.vue等价于./src/components/MyComponent.vue。不加@则默认从node_modules导入。这种别名配置提高了代码可读性和维护性。
2025-12-03 19:16:31
247
原创 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
194
原创 jvm 偏向锁禁用以及移除
JVM的偏向锁在JDK演进中被逐步废弃:JDK6引入该优化,JDK15默认禁用并标记为废弃(JEP 374),主要因维护成本高、收益下降及潜在性能问题。最终在JDK18(JEP 416)完全移除相关代码。开发者使用新版JDK时无需再考虑此特性,其历史作用已被现代并发优化方案取代。该变更反映了同步机制随应用场景变化的持续演进。
2025-11-25 10:00:08
529
原创 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
213
原创 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
188
原创 MicroProfile的作用 Quarkus
MicroProfile与Spring技术体系对比:MicroProfile是Java微服务标准化规范,适合云原生、轻量级开发,支持跨厂商迁移;而SpringBoot/SpringCloud提供全家桶式解决方案,拥有强大社区生态。两者呈现融合趋势,新框架如Quarkus可同时兼容两种API。选择依据主要取决于项目需求:云原生场景优先MicroProfile实现(如Quarkus),快速开发需求则选择Spring生态。SpringBoot 3也开始集成JakartaEE特性,开发者可根据团队熟悉度和项目特性灵
2025-10-31 11:06:23
694
原创 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
366
原创 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
147
原创 docx定义的模板导出数据开源实现
本文探讨了poi-tl开源库在实际项目中的应用问题。poi-tl是一个基于Apache POI的Word模板引擎(官网:deepoove.com/poi-tl,GitHub:github.com/Sayi/poi-tl),但在使用中发现存在转换后数据样式丢失的问题。作为替代方案,XDocReport库值得进一步研究,可能提供更稳定的文档处理能力。这些发现对需要精确文档格式的开发项目具有参考价值。
2025-10-28 11:06:23
182
原创 word文档模板通过poi-tl导出问题注意点
本文记录了处理docx文档导出时遇到的拼写检查和文本分隔问题。针对拼写检查,需在Microsoft Word和WPS中关闭相关选项。对于poi-tl解析时出现的文本分隔问题,发现是由于变量输入不完整导致。解决方案是将文本复制到纯文本编辑器重新输入,确保变量完整保留样式。最终展示了解压后的正确XML格式示例,其中变量{{priceSheetCode}}被完整包裹在一个文本节点中。
2025-10-25 17:41:36
395
原创 google or-tools中java实现与依赖操作系统底层库版本关系
在Windows11上使用OR-Tools Java版(9.10.4067)时出现EXCEPTION_ACCESS_VIOLATION错误,经测试发现从9.10.x版本开始存在兼容性问题。降级至9.8.3296版本后运行正常。该问题可能与Windows系统下的原生库(msvcp140.dll)有关,建议Windows用户暂时使用9.8.x稳定版本。
2025-10-20 16:40:10
205
原创 sat4j中参数作用
SAT求解器采用合取范式(CNF)作为标准输入格式,要求逻辑表达式由多个子句通过"与"(AND)连接,每个子句内部则是变量通过"或"(OR)连接。例如(A∨¬B)∧(B∨C)表示必须同时满足三个子条件。这种结构将复杂逻辑分解为统一规则,既便于人工理解,也适合机器处理。CNF的通用性使其成为SAT求解的基础,所有求解器都遵循用数组表示OR子句、用addClause()添加AND关系的标准表达方式,其中负值代表逻辑非。
2025-09-30 17:54:40
173
原创 sat4j中控制变量选择策略
摘要:SAT4J中的ISolver.setOrder(int order)方法用于设置变量选择策略,影响求解顺序。OLDORDER按原始顺序选择变量,速度快但易得简单解;NEWORDER基于活动度动态排序,可能返回更多true解;RANDOMORDER随机选择需配合随机种子。建议根据不同场景选择策略:快速求解用OLDORDER,获取更多true解用NEWORDER,避免偏向性用RANDOMORDER。配置时需在solve()前调用,NEWORDER可配合活性衰减系数优化。
2025-09-30 16:48:40
189
原创 spring native
Spring Boot 3.0正式集成了GraalVM原生镜像支持,取代了实验性的Spring Native项目。相比旧版Spring Native(已被归档),新版本作为官方功能更稳定,仅需标准构建插件即可实现原生编译,不再需要额外依赖。主要区别包括:Spring Boot 3.x原生支持采用官方插件,要求JDK17+,而旧版Spring Native是实验性项目,依赖特殊配置和注解。这一演进使Spring应用原生编译更加标准化和便捷。
2025-09-30 10:10:12
302
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅