- 博客(18)
- 收藏
- 关注
原创 30WQPS高并发点赞业务架构设计方案
术语说明QPSRedis分布式集群,支持分片存储与主从高可用分层存储热数据(近1年)存储于MySQL,冷数据(超1年)归档至HDFS+ClickHouse异步刷库先更新缓存,再通过消息队列异步同步数据至数据库既解决了原文架构的扩展性、一致性、维护性问题,又提供了完整的落地细节与兜底方案,可直接用于生产环境部署。架构设计的核心并非追求“完美设计”,而是在性能、一致性、可用性、成本之间找到平衡。
2025-12-01 10:48:51
620
原创 JDK 9 Compact Strings 深度解析:原理、实现与性能优势
在 JDK 9 之前,Java 中的字符串是基于 UTF-16 编码实现的。也就是说,每个字符都占用两个字节(char 类型),即使你只使用 ASCII 字符(实际上只需 1 字节)。这种设计在国际化方面是兼容的,但它在处理大量只包含英文或 Latin-1 字符的字符串时会造成明显的内存浪费。为了解决这一问题,JDK 9 引入了,这是JEP 254提出的特性,目标是在不破坏兼容性的前提下压缩内存占用,提高缓存效率。JDK 9 的 Compact Strings 是一次对 Java 核心类String。
2025-07-03 22:15:00
712
原创 深入理解 Java 中的 String:原理、优化与实战
在 Java 的世界中,String是使用最频繁的类之一。无论是日志输出、网络通信,还是业务逻辑判断,几乎都离不开字符串。但越是基础的东西,往往也越容易被忽视。本篇文章将从多个角度深入剖析String,带你了解其底层实现、常见陷阱、性能优化技巧以及在实战开发中的最佳实践。Java 的String类虽然看起来简单,但其底层设计精妙、实现复杂,融合了内存优化、不可变模式、压缩编码与 JVM 支持等多种技术。通过源码分析我们可以:明白为何String是不可变的理解不同方法背后的性能考量。
2025-07-03 17:44:55
745
原创 HashMap 进阶指南:红黑树、并发问题与 JDK 源码
场景推荐集合原因单线程HashMap性能优,无锁开销多线程读多写少分段锁 + CAS 安全高效插入顺序需保留保序能力强,常用于缓存有序键集合TreeMap支持排序操作不允许 nullHashtable老旧设计,不推荐深入理解 HashMap,不只是为了答好面试题,更是为了写出健壮、高性能、易扩展的系统。它承载着 Java 集合体系的基础设计,也启发我们思考:如何设计具备退化保护的数据结构?如何用最少的计算实现最大的信息分布?如何在并发、扩容、兼容性之间取得平衡?
2025-06-30 11:30:05
994
原创 深入理解 HashMap 源码实现:从原理到优化
在 Java 的世界里,HashMap是最常用的集合类之一。它背后的数据结构与算法设计,不仅体现了 Java 工程的精巧,也对性能优化起着决定性作用。本文将从实际使用出发,深入剖析 HashMap 的源码实现(基于 JDK 1.8),探讨它的数据结构、核心算法、线程安全问题、以及 JDK 版本演进过程中的关键优化。特性说明结构数组 + 链表 + 红黑树线程安全❌性能优化resize 拆分重定位、高效 hash、懒加载JDK 演进JDK8 引入红黑树、大量使用位运算和懒初始化理解。
2025-06-30 10:57:53
302
原创 从代码工匠到架构思维:一次 Java 后端服务的深度优化实践
在近期负责的企业级后台系统中,我对一个证书生成模块进行了深度重构与优化。这个模块表面看似简单,实则涉及多个技术点:图像处理、并发优化、模块解耦、资源加载与分发,背后隐藏着诸多可提升之处。本文将结合真实的 Java 应用场景,逐步讲解如何在已有代码基础上进行高质量重构与架构优化,力求写出“有味道”的 Java 后端代码。
2025-06-27 18:24:24
338
原创 MySQL 最左匹配原则详解:从原理到实战优化
最左匹配原则是 MySQL 索引优化的核心概念之一,理解并掌握这一原则对于编写高效的 SQL 查询和设计合理的索引结构至关重要。设计复合索引时,根据查询需求确定列的顺序避免在查询条件中使用函数或表达式,防止索引失效使用EXPLAIN工具分析查询执行计划,验证索引使用情况在 Java 应用中,确保 ORM 框架生成的 SQL 符合最左匹配原则通过合理应用最左匹配原则,可以显著提高数据库查询性能,减少系统响应时间,提升用户体验。
2025-06-27 10:00:11
1073
原创 LeetCode 回文数问题的 Java 解决方案:从基础到高级的全方位解析
数学方法解决字符串问题递归算法的应用大数处理与BigInteger类防御性编程与异常处理单元测试与性能测试问题扩展与变种解法。
2025-06-23 19:05:55
351
原创 学习支撑千万级 QPS 的分布式营销决策引擎设计与实践
通过合理运用 Java 相关技术和工具,结合先进的数据存储与处理技术、算法模型,以及科学的性能优化和容灾策略,能够打造出一个高效、稳定、可靠的营销决策引擎,实现毫秒级实时竞价与个性化推荐,为企业在激烈的互联网营销竞争中提供强大的技术支持。包括服务器的 CPU、内存、磁盘、网络等资源使用情况,业务逻辑层的服务调用次数、响应时间、错误率,以及数据存储与处理层的数据库读写性能等。同时,系统必须具备高可用性、可扩展性,以应对流量的大幅波动,支撑千万级的 QPS,确保在海量请求下仍能实现毫秒级响应。
2025-06-20 15:15:29
447
原创 LeetCode 移除元素问题的 Java 解决方案:从初级到高级的全方位解析
双指针算法的优化应用Java 8+ Stream API 和函数式编程泛型编程与函数式接口的结合防御性编程与异常处理单元测试与性能测试问题扩展与变种解法。
2025-06-19 23:20:12
311
原创 LeetCode 两数之和问题的 Java 解决方案
摘要:本文提出了一个使用哈希表高效解决两数之和问题的方案。给定整数数组nums和目标值target,该方法通过一次遍历,在O(n)时间复杂度内找到两个和为target的元素索引。具体实现时,对每个元素计算其补数(target-nums[i]),若补数存在于哈希表中则返回结果,否则将当前元素存入哈希表。这种方法显著优于O(n²)的暴力解法,通过空间换时间策略提高了效率。文末附有Java代码实现和复杂度分析,验证了算法的正确性和优化效果。
2025-06-18 22:15:00
267
原创 高并发系统下的 Canal 数据同步实战:从架构设计到性能调优
架构层面:优先采用 "Canal + 消息队列 + 批量写入" 模式,隔离业务波动影响参数配置yamlcanal:batch-size: 500 # 根据业务量调整retry-count: 3 # 失败重试次数async-threads: 20 # 消费线程数=CPU核心数*2监控体系:重点关注 binlog dump 位点延迟、消费端 QPS、数据库慢查询性能提升:单节点数据同步能力从日均 1 万条→10 万条成本降低:硬件资源减少 30%可用性增强。
2025-06-18 17:45:43
642
原创 使用163网易云邮箱发送邮件报错javax.mail.AuthenticationFailedException: 535 Error: authentication failed
最近在测试发送邮件的过程中,在填写密码那块写成了自己的163登录密码,导致登录时出现535报错,这个地方不需要我们输入真实密码,需要在163邮箱平台上面查找授权码。修改正确邮件即可发送成功@Beforepublic void prepareMailAccount() { account = new MailAccount(); account.setHost("smtp.163.com"); account.setPort(25); account.set..
2021-08-06 15:07:45
3934
原创 记录一次postgresql存储过程
随着项目开发,需要做一个按一定规则递增生成的动态编码,中间按年月后面再加上四位从1开始动态递增的数字,因此写一个存储过程CREATE OR REPLACE FUNCTION public.generate_code_cwscode(cwsnum character varying)RETURNS character varyingLANGUAGE plpgsqlAS $function$DECLAREcurr_max_code VARCHAR;new_no VARCHAR;vmod...
2020-07-28 14:24:24
984
原创 关于多类型数据库分页配置
一般项目多数据源是同一类型的数据库,比如说都是postgresql或者都是MYSQL,只是存储的数据来源有多处,那么我们的分页配置文件一般这样写:pagehelper.helperDialect=postgresqlpagehelper.reasonable=truepagehelper.supportMethodsArguments=truepagehelper.para...
2020-04-29 11:07:58
1176
原创 springboot搭建Gradle项目报错
从网上找了很多文章关于springboot搭建gradle项目的报错信息,发现没有找到太多有价值的消息,尝试了更改build文件,还是不能成功解决Cause: org/gradle/api/internal/plugins/DefaultConvention这个报错,最终尝试替换gradle版本,一开始使用最新6.2.2版本报错,后面尝试使用3.4.1版本报错,经过尝试,使用5.6....
2020-03-24 13:32:33
6798
3
原创 Yangyuanwang的第一篇博客
万事开头难,第一次记住这句话是在看电视据凤阳小岗村书记沈浩前往那个贫穷的小村子上任,他的母亲说:“娃,万事开头难,开了头一切都会好起来!”记得第一次选择IT的时候,是在三年前,觉得IT是神秘高尚的职业,同样是门晦涩难懂的学科,义无反顾反顾的扎进IT行业;最初是压抑痛苦,随着慢慢日积月累,相反所带来的是不断征服困苦的喜悦; 万事开头是难,殊不知难过之后还有更难;但是就像大地,日月星...
2018-11-11 21:29:40
253
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅