- 博客(124)
- 收藏
- 关注
原创 多线程中使用原子类获取唯一值
/多线程环境,原子类内部进行CAS,从而实现 id 值唯一。(简述:1:读取当前值 2:自增自减 3:因为可见性,一个成功,其他的立即停止 4:其他的继续读新值,尝试自增自减.....)AtomicLong 是一个线程安全的原子类,用于在多线程环境中对 long 类型进行原子操作(如递增、递减、设置等。CAS:如果内存位置 V 的当前值等于预期值 A,那么将 V 更新为新值 B;保证内存可见性:一个线程修改 value 后,其他线程能立即看到最新值。失败的线程会重试(自旋),直到成功。
2025-11-04 14:10:49
173
原创 并行流parallelStream使用时机
最多占用: 最大线程数 = CPU核心数 - 1。如果服务器是 8 核,那么 parallelStream 默认最多会占用 7 个线程。: ForkJoinPool 保留 1 个核心用于主线程或其他非并行任务,避免完全占满所有CPU核心。// 通常是 CPU核心数 - 1。如何获取当前并行线程数?
2025-11-04 09:27:52
242
原创 MVC搭建feign客户端
简单来说:引入feign依赖,编写配置类,原生方式@RequestLine搭建客户端跟boot的区别:boot可以 1:启动类开启feign 2:@FeignClient编写客户端 3:@RequestMapping写路径 MV上述都不可以。
2025-10-31 11:36:10
198
原创 读大佬文章有感
但是看完大佬,发现我要学习N个月的东西,别人可能只需要半个月,比如前端,有过多次学习又放弃的经历,最终是在今年的工作中强行学会的(因为胜任不了任务人就没了)。但是相比于大佬,我确实属于不上进的,学习慢,容易放弃,意志力不坚定(跟大佬比)值此1024节日,发现了自己的不足,清醒的认识到了自己还需要前进,努力,虽不比得人聪明,但是能认识到自己的不足,努力前进也是一个好事情。最开始是看到了秋招的博文,点进去的,读完之后,顺手看了下其他的博文,发下厉害的人真的好多,人和人的脑子可能也确实不太一样。
2025-10-24 14:38:17
268
原创 线程的中断与恢复
thread.interrupt(),给当前线程打标记,然后isInterrupted,判断当前线程携带停止标记(turn,flase),然后进行手动停止(return)备注:大多数情况下,抛出异常,并不会给自动给线程设置中断标记,而是需要在catch里手动设置。executorService.shutdownNow(),线程池立即关闭。Thread.stop()已废弃,不安全。当前线程的中断状态(静态方法)指定线程(可能是别的线程)该线程(设置中断状态为。
2025-10-23 11:06:31
390
原创 【GIT】错误集锦及解决方案
初始化工作区:创建工程 -》VCS -》 Create Git Repository -》 选择要管理的文件夹(相当于找个文件空白地方打开控制台init)-》所有的文件都变成棕色,就成功了。:标记当前分支的当前版本所在位置,如果没有显示:git log --decorate 查看当前提交日志,且显示当前分支的当前版本所在位置。你也在DDD文件300行写了代码,你再提交就冲突了。:要初始化的文件 -》空白处Git Bash Here -》git init(即:在那个文件,进入控制台,init初始化)
2025-10-10 17:43:17
977
原创 北上广深杭等城市【社保公积金最低限度缴纳明细】
城市个人缴纳公司缴纳总成本(元/月)上海1,144.522,448.113,592.63北京1,057.262,107.693,164.95杭州/苏州/宁波756.251,278.312,034.56青岛/济南569.961,242.371,812.33广州573.181,022.381,595.56深圳370.52715.961,086.48✅上海最高,深圳最低,浙江、江苏城市居中,山东、广东部分城市因公积金基数低而成本较低。📌提示:以上为最低基数缴纳,实际应按上年月均工资。
2025-09-24 11:11:34
1735
原创 【FTL】 java模板引擎
4:通过json参数来调用特定的接口,拿到接口返回的URL。这里实际会年变为一个PDF文件。2:前端开发完之后,为一个HTML文件。基于FTL语法,改造HTML文件为FTL文件。1:简单:由后端开发模板 复杂:由前端开发模板(本次业务由前端开发模板)(开发阶段的操作方法,生产完整流程不知道)3:上传并配置到后台管理系统模板管理页面。.ftl为后缀的就是FTL文件。
2025-09-20 10:48:32
272
原创 Mongo的增删改查
MongoDB 是文档数据库,适合存储结构灵活、读写频繁的业务数据。相比 Redis:Mongo 更适合持久化和复杂查询;Redis 更适合高速缓存。相比 MySQL:Mongo 更易扩展、schema 自由;MySQL 更适合强一致性事务。使用场景:日志、内容、用户画像、商品详情等。CRUD 操作简洁直观,支持丰富查询语法。
2025-09-04 20:06:07
677
原创 BSON 和 JSON 的区别
BSON 是 JSON 的“超集” + 二进制优化版本。MongoDB 存储的是 BSON,网络传输也是 BSON,但你写代码时通常用 JSON 风格操作,驱动会自动转换。支持更多类型,比如:ObjectId:12 字节唯一 IDDate:真正的日期对象BinData:二进制数据(如图片)Regex:正则表达式对象💡 类比:JSON 像.txt文件,BSON 像.docx—— 功能更强、结构更紧凑、机器处理更快。
2025-09-04 15:47:44
314
原创 nginx配置讲解
#------------------------------------------------正向代理-----------------------------------------------------------####------------------------------------------------反向代理-----------------------------------------------------------#### nginx -s stop:停止nginx。
2025-09-03 16:18:40
936
2
原创 lua脚本为什么能保证原子性
Lua 脚本之所以能够在 Redis 中保证原子性,主要是因为 Redis 的单线程模型以及它对待 Lua 脚本的方式——即将 Lua 脚本作为单一、不可分割的命令来执行。这使得 Lua 脚本不仅可以在分布式环境中安全地执行复杂的逻辑,而且还可以保证这些逻辑以原子方式执行,不受并发操作的影响。
2025-06-26 15:25:34
591
原创 线上问题处理日记----重复请求处理
所以第二条,第三条,进入代码 -> 查库未能触发校验(因为第一条被ai卡住还没落库) -> 所以后续重复数据,会直接再次访问。如果我在ai分析响应过来之前(指的是ai响应,然后记录ai数据落库的时间),多次发起分析。那么此时因为第一条数据,还在ai处处理,数据也没有落库。其实是有考虑到的,对后续会入库的表字段做了校验。我们做的是ai调用,让ai给我的客户做分析。从而造成重复数据(同一条数据多次调用ai)因为ai做分析本身是有一个响应时间的,锁 同一条数据的dealerId,后续同一条数据多次触发,
2025-06-26 14:00:50
219
原创 io密集型跟cpu密集型的区别 与 代码处理方式
CPU 使用率高(接近100%)低(<30%)线程状态RUNNABLE(持续运行)WAITING / BLOCKED(等待外部资源)性能瓶颈CPU 核心数量网络带宽、磁盘速度、数据库并发限制。
2025-06-26 10:16:50
361
原创 GPT夸的我是心情舒畅十分开心
当然可以!为你写一首程序员之诗:代码如诗心自畅,指间流转绘华章。一行一语皆心意,逻辑如水润无瑕。今日妙手成佳作,笑看屏前万象新。愿君常有好思路,代码人生日日春。
2025-06-12 13:57:43
164
原创 常规方法不能用于实体判断(需要精确判断字段值)
你需要手动编写逻辑来判断该对象是否是“业务意义上的空对象”。想法实现方式blackVo!= null只能判断对象是否存在,不能判断内容是否为空同上同上toString()toJson()输出内容可见,但不能直接用于判断想判断对象字段是否为空✅ 必须自己写逻辑判断字段,或使用反射。
2025-06-09 10:58:47
375
原创 手动事务的使用
【观察其他定时任务,采用return Result写法,异常-1,正常1,所以排除@Transactional,因为异常时return,无法回滚(抛异常会跟相同功能的写法背离),所以采用手动事务处理】定时将前端页面配置的字典数据(标签数据)同步到数据库特定的表(标签表)原因:上来就手动事务,或者手动事务开启过早,容易出现长事务问题。都有,判断名称,名称不同修改。字典有,数据库表没有=新增。公司需要写一个定时任务,涉及增改查操作,范围要小,在增删改的地方,创建手动事务,异常里做回滚。
2025-06-03 10:35:29
278
原创 in跟exist的执行顺序
如果sql语句中包含了exists关键字,它优先执行exists左边的语句(即主查询语句)。如果匹配上,则可以查询出数据。如果sql语句中包含了in关键字,则它会优先执行in里面的子查询语句,然后再执行in外面的语句。如果in里面的数据量很少,作为条件查询速度更快。提高缓存命中率:较小的数据集更容易被加载到内存中,这可以增加数据访问的局部性并提高缓存的使用效率。优化索引使用:如果小表上的连接条件上有索引,那么查找匹配的大表记录会更加高效。不管是用in,还是exists关键字,其核心思想都是用小表驱动大表。
2025-05-23 14:03:07
308
原创 for循环实现死循环
/ 逻辑代码,通过 break 或 return 控制循环结束。//逻辑代码,通过return或者break空值循环结束。//逻辑代码,通过return或者break空值循环结束。) { //嵌入式常见写法。备注:这两种for循环写法 等价 于死循环。2:写死ture的for。
2025-05-23 11:38:57
513
原创 【GC日志查看】
gc日志:看法简述:堆空间示图: 事件类型: :这表示这是一个垃圾回收事件,具体原因是分配失败(即没有足够的内存来分配新对象)。 垃圾回收范围: :这是年轻代(PSYoungGen)的垃圾回收详情。 是垃圾回收前年轻代使用的总内存。 是垃圾回收后年轻代使用的总内存。 是年轻代的总大小。 整体堆信息: :整个Java堆的信息。
2025-04-29 15:02:14
608
原创 PageHelper编写注意及内存泄漏处理
原因:确保分页参数被消费掉,并正确执行分页参数清理操作。2:分页参数被消费后,抛出异常(无内存泄漏)1:分页参数被消费前,抛出异常(内存泄漏)2:执行sql时抛出异常 (无内存泄漏)
2025-04-27 15:49:28
549
原创 @TrandLocal原理简述 与 可能存在的长事务问题
ThrandLocal 自动从数据库连接池获取链接,并开启事务,自动绑定到TrandLocal上,耗时操作会导致占用这个链接时间长,数据库连接被占用不释放,相似操作过多,会导致数据库连接池耗尽【典型的长事务】被这个注解包裹的方法都使用同一个链接,
2025-04-25 11:03:38
147
原创 【FastJSON】的parse与parseObject
功能:parseObject 方法专门用于将 JSON 字符串解析为一个 Java Bean(即指定类型的对象)。功能:parse 方法是 FastJSON 提供的一个通用解析方法,它可以将 JSON 字符串解析成一个 Object 类型的结果。适用场景:当你不确定或者不关心 JSON 字符串的具体结构(比如它可能是一个数组、对象或者其他类型)时,可以使用 parse 方法。返回类型:parse 返回的是 Object 类型,而 parseObject 可以指定返回类型。自定义类型会报类型转换异常!
2025-04-25 11:02:26
680
原创 【延迟双删】简单解析
首次删除:当需要更新某个数据项时,首先删除缓存中的该项。更新数据库:接着,更新数据库中的该项。短暂延迟:然后等待一段很短的时间(例如50毫秒),这段时间允许任何正在进行的读操作完成。二次删除:最后,再次删除缓存中的该项。这样做的目的是防止在这段延迟期间有任何读操作将旧数据重新写入了缓存。2:为什么要进行再次删除(二次删除):1:为什么延迟:短暂的等待时间(延迟)是为了确保所有可能的读取请求都已完成,避免旧的数据被再次写入缓存。
2025-04-22 21:55:58
408
原创 加锁注意事项
• 说明二:如果lock方法在try代码块之内,可能由于其它方法抛出异 常,导致在finally代码块中,unlock对未加锁的对象解锁,它会调用 AQS 的 tryRelease 方法(取决于具体实现类),抛出 IllegalMonitorStateException异常。2:并且在加锁方法 与try代码块之间没有任何可能抛出异常的方法调用,避免加锁成功后,在 finally中无法解锁。• 说明一:如果在lock方法与try代码块之间的方法调用抛出异常,那么无 法解锁,造成其它线程无法成功获取锁。
2025-04-18 17:21:07
337
原创 字符串循环拼接,不能用 + 连接, 需要用 StringBuilder 代替
然后,在循环中,我们调用 append() 方法来追加 "hello" 字符串。这不会创建新的字符串实例,而是直接在现有的 StringBuilder 实例上进行修改。这行代码时,实际上是在创建一个新的 String 对象。这是因为 String 在 Java 中是不可变的,这意味着每次你“改变”一个 String 的值时,实际上是创建了一个新的 String 实例。随着循环次数的增加,这种操作会显著增加内存消耗和垃圾回收的负担,因为每次迭代都会生成一个新的临时对象。用 StringBuilder 代替+
2025-04-18 16:14:53
213
原创 BigDecimal(double)会丢失精度
或使用BigDecimal的 valueOf方法,此方法内部其实执行了Double的toString,而 Double 的toString按double的实际能表达的精度对尾数进行了截断。优先推荐入参为String的构造方法:BigDecimal recommend1 = new BigDecimal("0.1");• 说明: BigDecimal(double)存在精度损失风险,在精确计算或值比 较的场景中可能会导致业务逻辑异常。• 最坏影响: 数据精度丢失。• 级别: 【MAJOR】
2025-04-16 10:23:09
401
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅