- 博客(86)
- 收藏
- 关注
原创 讲一件Java虚拟线程
:虚拟线程不是万能药,而是将I/O密集型应用的复杂度从"分布式系统级别"降回"单机级别"的工具。它让编写高并发代码回归到直观的阻塞式编程模型,同时保持非阻塞的性能优势。在典型的Web服务中,我们常使用线程池处理请求。传统线程池在应对高并发请求时,如同让一群壮汉挤在狭窄的走廊里——资源浪费严重,效率低下。Java 19引入的虚拟线程(Virtual Threads)通过。
2025-06-11 23:42:27
535
原创 mybatis执行insert如何返回id
特性说明默认返回值受影响行数(Integer),不是 ID!获取 ID 的方式通过将 ID 注入到参数对象中(如支持数据库MySQL、SQL Server 等(注解配置使用。
2025-06-08 23:43:27
735
原创 能不能用string接收数据库的datetime类型字段
方案优势劣势直接String接收简单快速,无需配置丢失时区信息;不支持日期计算;依赖数据库格式支持日期操作;时区可控(推荐)需配置依赖推荐:优先使用,仅在纯展示且无需计算时用String。
2025-06-05 20:29:15
786
原创 java判断一个字符串(如 str1)是否在给定的一组字符串
在 Java 中,有几种简洁的方式可以判断一个字符串(如str1)是否在给定的一组字符串(如。
2025-06-04 20:27:38
428
1
原创 终极陷阱:Java序列化漏洞的内爆原理与防御体系重建
安全事件:年度16起 → 0起序列化性能:提升280%网络带宽占用:降低75%首席安全官洞见:序列化机制如同建筑物的承重结构,表面简单的接口背后需要工程级的防御深度。真正的安全不是修补已知漏洞,而是重新设计构建时的信任体系。当我们将"不信任"作为第一原则时,才能构建出面对未知攻击的韧性系统。附录:强制安全基线配置# JVM启动参数。
2025-06-03 20:32:12
511
原创 技术博客:线程池的暗礁——Executors工厂类为何成为Java高并发系统的禁忌
线程池峰值利用率:87% → 95%GC次数:日均200次 → <10次队列积压告警响应时间:30分钟→20秒架构师洞见:在Java并发领域,线程池既是利刃也是暗礁。真正的高可用不是靠侥幸避开漏洞,而是通过深度掌握机制构筑全方位防线。当你理解每个参数背后的物理含义时,才能真正驾驭这个强大而危险的武器。注:文中涉及的技术细节均在JDK 17中验证,可适配JDK 8+环境。推荐结合Arthas工具进行线上诊断实战。
2025-06-02 20:05:31
921
原创 Java高效处理大文件:避免OOM的深度实践
在Java中处理大文件是开发中的高频场景,尤其在大数据、日志分析等领域。本文将深入探讨几种高效处理大文件的方案,包含性能对比和最佳实践。通过合理选择处理方案,配合NIO和内存映射技术,Java可轻松处理TB级文件。:固定内存占用(默认8KB缓冲区),适合GB级日志文件处理。:通过虚拟内存将文件映射到堆外内存,突破JVM堆大小限制。:零拷贝技术减少内存复制,适合二进制文件处理。
2025-06-01 22:58:17
800
原创 深入剖析Java类加载机制:双亲委派模型的突破与实战应用
Override// 打破双亲委派:优先加载特定包// 实现热部署的关键方法// 1. 创建新的ClassLoader实例// 2. 迁移状态// 3. 替换当前引用某大型电商平台通过重构类加载架构,将应用启动时间从120秒优化到15秒。在云原生时代,理解类加载机制对于构建高效、稳定的Java应用至关重要。随着Project Leyden的推进,我们有望看到更先进的类加载和初始化技术,解决Java的长期痛点——启动时间和内存占用。
2025-05-31 22:19:32
1159
原创 Java并发新境界:为什么JDK19的虚拟线程无法解决所有阻塞问题?——深度解析异步与结构化并发的本质
虚拟线程处理CPU密集型任务结构化并发编排跨服务调用io_uring异步IO实现磁盘/网络操作99分位延迟从2.3s降至47ms服务器成本降低80%系统吞吐量提升40倍终极启示:没有银弹能解决所有并发问题,但理解从CPU指令到分布式调用的完整栈,能让开发者像指挥家一样精确控制资源的交响乐。
2025-05-30 23:30:53
685
原创 深入Java类加载机制:为什么自定义类加载器可能导致Metaspace内存泄漏?
系统凌晨发生严重故障,监控显示Metaspace持续增长直至OOM。重启后24小时内问题复现,但堆内存、线程数均正常。这个自定义类加载器每处理一次交易就生成新的代理类,最终导致Metaspace耗尽。本文将揭示类加载机制与内存管理的深层联系。
2025-05-29 21:04:36
665
原创 解密Java并发编程:为什么volatile不能完全替代synchronized?
在Java并发编程领域,理解底层原理比记住语法规则更重要。某支付系统通过将volatile与Thread.onSpinWait()结合,在自旋锁场景中实现了纳秒级的等待响应。随着硬件架构的演进,开发者需要持续更新对内存模型的理解,才能编写出既高效又可靠的并发代码。
2025-05-28 18:18:02
923
原创 深入剖析Java CompletableFuture:原理、陷阱与高并发场景优化指南
CompletableFuture的深度掌握需要理解其底层机制,规避常见陷阱,并在实践中不断优化。随着Java并发模型的持续演进,开发者需要保持对结构化并发等新范式的关注。正确使用异步编程工具,将帮助我们在高并发场景下构建出更健壮、更高效的系统。
2025-05-28 00:01:12
486
原创 深入剖析Java中的伪共享:原理、检测与解决方案
警惕共享数据布局:多线程环境下,检查关键数据结构是否可能引发伪共享。工具验证:结合perfJMH量化性能影响。平衡取舍:填充策略会增大内存,优先优化热点代码。伪共享如同隐形的锁,消除它需要开发者对硬件架构与内存模型的深入理解。掌握这些技巧,方能编写出真正高效的并发Java应用。
2025-05-26 23:06:47
892
原创 使用中文作为map的可以,需要注意什么
Java的Map完全支持中文作为键,核心问题在于确保字符编码正确和字符串的不可变性。只要遵循常规的字符串处理规范,中文键在实际开发中与英文键无本质区别。
2025-05-25 22:39:33
409
原创 Logback 在 Spring Boot 中的详细配置
因为 Spring Boot 提供了扩展支持(例如基于 Profile 的配置)。Spring Boot 默认会加载。作为 Logback 的配置文件。
2025-05-23 20:26:43
1117
原创 深入Java G1 GC调优:如何解决高延迟与吞吐量瓶颈
G1 GC的调优是平衡停顿时间吞吐量和内存占用的艺术。理解原理:掌握Region、并发标记、Mixed GC等核心机制。精准监控:通过GC日志和Profiler工具定位瓶颈。渐进调优:避免一次性调整多个参数,需验证每一步的效果。终极建议:在调优前明确应用的核心需求(延迟优先或吞吐量优先),结合压力测试结果制定策略。对于关键服务,可采用多版本参数对比与自动化巡检确保稳定性。
2025-05-19 23:23:06
1130
原创 Java中的伪共享(False Sharing):隐藏的性能杀手与高并发优化实战
现代CPU通过缓存行(Cache Line)(通常64字节)批量加载内存数据。当两个线程分别修改同一缓存行中的不同变量时,即使变量逻辑无关,也会触发缓存行的反复失效与同步,导致性能急剧下降。这种现象称为伪共享。何时需要关注伪共享?高并发场景下,线程频繁修改共享数据结构。性能监控显示高缓存未命中率,但无明显锁竞争。优化原则空间换时间:通过填充牺牲少量内存换取性能。隔离写入热点:分散变量到不同缓存行。框架级解决方案参考Disruptor。
2025-05-18 22:16:45
1385
原创 深入理解Java内存模型(JMM):如何编写正确且高效的多线程代码
理解Java内存模型是编写正确、高效并发代码的基石。明确Happens-Before规则与内存屏障的作用。合理选择volatile、原子类或并发容器。通过工具验证代码的线程安全性。最佳实践避免过早优化,优先保证正确性。在高并发场景中,优先使用包提供的工具类。
2025-05-17 21:43:39
1037
原创 Spring Boot循环依赖的陷阱与解决方案:如何打破“Bean创建死循环”?
循环依赖指两个或多个Bean相互依赖对方,形成一个闭环。Bean A 的创建需要注入 Bean BBean B 的创建又需要注入 Bean A此时,Spring容器在初始化Bean时会陷入“死循环”。@Servicepublic ServiceA(ServiceB serviceB) { // 构造器注入ServiceB@Servicepublic ServiceB(ServiceA serviceA) { // 构造器注入ServiceA。
2025-05-16 22:20:54
1080
原创 Spring Boot多数据源配置的陷阱与终极解决方案
primary:secondary:// 主数据源(必须标记@Primary)@Primary// 从数据源严格隔离配置:每个数据源的属性前缀、Bean名称、事务管理器都要清晰隔离显式排除自动配置:避免残留配置造成冲突事务边界明确:通过@Qualifier和@Transactional属性精确控制监控先行:配置连接池监控,预防泄漏和性能瓶颈。
2025-05-15 21:28:03
1007
1
原创 如何避免“伪Optional”代码
Optional的正确使用需要开发者深入理解其设计哲学:通过类型系统增强API表达力,而非消灭所有null。避免将Optional作为“语法糖”滥用,才能发挥其提升代码健壮性的价值。黄金法则:如果你的Optional使用导致代码比传统null检查更复杂,请重新审视设计!
2025-05-14 20:17:55
579
原创 关于 javax.validation.constraints的详细说明
String message() default "密码必须包含大小写字母和数字";Class<?Class<?=.*[A-Z])(?核心价值:通过声明式注解简化数据校验逻辑,减少样板代码。最佳实践:优先使用标准注解,避免重复造轮子。结合分组校验实现多场景复用。统一处理校验异常,返回清晰的错误信息。扩展性:通过自定义注解和校验器满足复杂业务需求。
2025-05-13 21:59:57
793
原创 如何避免Java中的ConcurrentModificationException
是一种运行时异常,表示在并发环境下,某个线程在遍历集合时,另一个线程修改了集合的结构。然而,即使是在单线程环境中,也可能触发此异常,例如在遍历过程中直接调用remove()方法。// 抛出ConcurrentModificationException的根源在于集合的结构修改与遍历操作的不一致。理解集合的底层实现(如modCount机制)是解决问题的关键。根据具体场景选择迭代器操作、并发集合或Java 8+的新特性,可以高效避免此类异常。最佳实践:在单线程中优先使用迭代器的remove()
2025-05-12 23:30:29
524
原创 Java中的内存泄漏——为什么静态集合类可能成为“隐藏杀手”
Java的内存泄漏问题往往源于开发者对对象引用生命周期的不当管理。静态集合类作为高频“嫌疑人”,需要格外谨慎。通过限制容量、使用弱引用或成熟的三方库,可以有效规避这类问题。同时,善用内存分析工具,结合代码审查,才能构建健壮的应用。行动建议定期检查项目中的静态集合使用场景。在关键模块中引入缓存淘汰策略。为团队分享内存泄漏排查案例,提升代码安全意识。
2025-05-11 14:53:17
610
原创 如何在postman使用时间戳
通过以上方法,你可以灵活地在 Postman 中处理日期与时间戳的转换!在发送请求前,将日期字符串转为时间戳并存储为环境变量/全局变量。在请求的 URL、Body 或 Headers 中通过。
2025-05-10 20:56:24
1112
原创 自定义 Spring Boot Starter 的 完整实现步骤及 代码示例
模块作用包含自动配置类、条件化 Bean 定义和属性配置绑定空模块,仅依赖和其他必要库(如 HTTP 客户端)// 默认阿里云SmsService// 阿里云实现@Override// 调用阿里云 SDK// 腾讯云实现(类似)@Bean@Override// 检查短信服务是否可用生成配置提示文件"description": "短信服务提供商(aliyun/tencent)",},"description": "API 密钥"关键点说明。
2025-05-08 23:28:24
637
原创 Spring Boot 启动原理的核心机制
自定义 Starter:创建文件。定义自动配置类(使用注解)。覆盖默认配置:@Bean@ConditionalOnMissingBean // 覆盖默认 Bean核心理念:约定优于配置,通过自动化和条件化加载降低开发复杂度。启动优化:分析的初始化阶段和容器刷新过程可针对性优化启动时间。扩展能力:通过自定义 Starter 和监听器灵活扩展框架功能。
2025-05-08 23:15:35
1466
1
原创 Spring + Shiro 整合的核心要点及详细实现说明
Autowired// 授权逻辑:获取用户权限信息@Override// 添加角色和权限(从数据库查询)// 认证逻辑:验证用户身份@Overridethrow new UnknownAccountException("用户不存在");ByteSource.Util.bytes(user.getSalt()), // 使用盐值加密getName()优势:Shiro 轻量易用,与 Spring 整合后可通过注解快速实现细粒度权限控制,适合中小型项目。适用场景。
2025-05-06 21:05:51
735
原创 程序员崩溃瞬间:StackOverflowError和OutOfMemoryError
一、当递归变成"无限循环":StackOverflowError全解析StackOverflowError是每个Java开发者都会遇到的"老朋友"。上周我在review团队代码时,就发现了一个典型的案例:// 缺少终止条件的递归这段代码会在运行时快速耗尽栈空间,抛出StackOverflowError。
2025-05-05 22:59:25
1008
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人