本文旨在快速解决常规,常见,常识的三常问题.提供对应问题权威,有效,易懂的解决方案
查询问题或者答案自行Ctrl+F 在网页搜索关键字,都是搞开发的脑壳机灵点
如果有死链请留言
为什么要用Java
给Java说句公道话–没有java写不出来的系统
别让自己“墙”了自己–千万不要觉得,整几个服务RPC一下,加个缓存,加个队列,就能叫架构,那只是系统集成罢了
ZGC | JDK 16的新增功能–GC最大暂停时间从10ms降低到1ms
通用Mapper是什么,怎么用?
通用Mapper官方文档–解决80%的配置和疑问,如果是新项目建议使用配置更少更易于使用的通用Mapper5
分页插件 PageHelper怎么用?
分页插件 PageHelper官方文档
如何正确的进行Java基准测试?
不要再用main方法测试代码性能了,用这款JDK自带工具–JMH可以进行预热保证JIT的优化效果
Mybatis二级缓存->业务缓存的解决方案
深入了解MyBatis二级缓存-逆流而上–又名二级缓存从了解到放弃
Spring Cache简单介绍和使用–正儿八经的缓存方案
Spring Cache+Redis实现自定义注解缓存–新手参考demo
Java基础知识了解,包含Java8的最新调整
Java 核心知识库–没事多看看,吹比用得到
为什么不推荐使用Join
为什么MySQL不推荐使用子查询和join–自行百度其他资料进行扩展了解
分库分表的几种常见形式以及可能遇到的难题–介绍垂直分表,垂直分库,水平分表,水平分库分表等方案以及join性能问题拆分为in解决的方案
深入理解并发/并行,阻塞/非阻塞,同步/异步
Java深入理解并发/并行,阻塞/非阻塞,同步/异步–详细解释并发/并行,阻塞/非阻塞,同步/异步之间的同异
如何理解:程序、进程、线程、并发、并行、高并发? - 大宽宽的回答 - 知乎–浅显易懂有进有出
BIO,NIO,多路复用,AIO
BIO,NIO,多路复用,AIO–快速了解不同概念之间区别
Java 8 中的 Streams API 详解以及什么是中间操作,终端操作,短路操作
Java 8 中的 Streams API 详解 Java 8 中的 Streams API 详解–认真读,其实Stream很简单
从JIT到类加载再到实现原理解式Lambda编译慢的问题–Lambda表达式 在应用程序中首次使用时,需要额外加载ASM框架,因此需要更多的编译,加载的时间
Java8 方法引用的四种处理方式
Java笔记——Java8特性之Lambda、方法引用和Streams Java笔记——Java8特性之Lambda、方法引用和Streams–解答由不同处理方式导致的二义性
Java8–什么是异步编程?
Java8–CompletableFuture 组合式异步编程-异步编程,并行编码,从代码层面优化程序执行效率
Java8函数之旅 (八) - 组合式异步编程–作者其他的文章也很不错
使用CompletionService获取多线程返回值–CompletionService 的使用场景
那些年我们追过的异步骚操作:ListenableFuture、CompletableFuture、RxJava(Observable)–完整又详细的介绍Completablefuture 的方法和RXJava的完整对比
CompletableFuture异步调用的概述和使用样例–学习Completablefuture必备
CompletableFuture原理与实践-外卖商家端API的异步化–美团的技术分享,适合进阶学习.其中强调了父任务和子任务共享线程池会导致死锁但是forkjoinpool不存在该问题参考资料ForkJoinPool线程池Java 普通线程池与 ForkJoinPool 的效果对比
CompletableFuture 捕获异常方式:handle、whenComplete、exceptionally
–CompletableFuture 三种异常处理方式
想用Java做爬虫,应该怎么做?
分布式爬虫框架XXL-CRAWLER–许雪里的分布式爬虫框架,几行代码实现网页爬取和内容分析读取
分布式任务调度平台XXL-JOB–依旧是雪里的分布式系列,配合XXL-CRAWLER可以实现分布式定时爬虫,自动告警等等功能非常强大
Java匿名内部类使用外部变量时,外部变量必须是final
java匿名内部类使用外部变量时,外部变量必须是final–1.8之前外部变量必须为final修饰,之后只需在编译期间值不发生变化
Java为什么要用类型擦除实现泛型?
java为什么要用类型擦除实现泛型?–答案是向后兼容
Java泛型的使用
【java】泛型中,? extends T 与 ? super T 的区别、看法–言简意赅
批量插入的两种实现方案与其区别
批量插入的区别和实现–代码循环和数据库实现
Mybatis插入数据返回(回写)主键
Mybatis官方示例-useGeneratedKeys和keyProperty配置主键回写策略,需要一定英文基础或者网页翻译
MyBatis获取插入记录的自增长字段值–参考示例
JavaWeb——MVC与三层结构,什么是MVC,什么是三层结构,二者之间有何区别?
MVC模式与三层架构–详细解释了何为MVC何为三层结构,二者之间区别何在
Java要收费了怎么办?
Oracle 终于要向 Java 的非付费用户开枪了-怎么看?–答案是不会收费
V2EX讨论帖–企业支持和客服支持收费不代表不能够免费使用
什么是VO、DTO、DO、PO?
浅析VO、DTO、DO、PO的概念、区别和用处–没事就复习
Redis分布式锁实现
redis加锁的多种实现方案
UUID和雪花算法
如果再有人问你分布式 ID,这篇文章丢给他–解析uuid,雪花算法等
面向对象和面向过程
贫血模型与充血模型的对比|| 备用–介绍了面向对象,面向过程,贫血模型,充血模型,DDD,TDD
什么是SOA,RPC,微服务,分布式
阿里P8架构师谈:Restful、SOAP、RPC、SOA、微服务之间的区别–浅显易懂的讲解
四种软件架构:Serverless架构、微服务架构、分布式架构、单体架构–不同架构的含义
一分钟弄懂什么是分布式和微服务–微服务可以不使用分布式
这三年被分布式坑惨了,曝光十大坑–讲解分布式缓存,分布式事务的典型问题
Spring中@Autowrite注解 @Resource 构造器注入有何不同?
快速讲解两者之间关系–推荐使用Resource
【Spring】浅谈spring为什么推荐使用构造器注入–使用构造器注入在启动时就会抛出循环依赖错误,不使用构造器则只能在调用时抛出
Spring注解@Component、@Repository、@Service、@Controller区别
例举出不同注解的使用场景–定义不同,功能相同
java.util.concurrent(juc)
JUC-Lock–讲解得很详细
Actomic原子类–基于cas实现的具有原子性的实现
jdk1.8 LongAdder源码学习–使用LongAdder代替Actomic提升性能
死磕 java并发包之LongAdder源码分析–AtomicLong是强一致性的单次累加可以返回正确累加结果addAndGet(),LongAdder只保证最终一致性add()方法无返回值手动调用sum()累加cell[]获得返回值在并发时不准确
ConcurrentHashMap 能否保证绝对的线程安全?–详细讲解了1.7中ConcurrentHashMap和1.8ConcurrentHashMap的区别
ConcurrentHashMap, ConcurrentSkipListMap实现原理–内部结构的演变
死磕 java集合之ConcurrentSkipListMap源码分析——发现个bug–清晰说明ConcurrentSkipListMap结构
ConcurrentHashMap 1.8为什么要使用CAS+Synchronized取代Segment+ReentrantLock–sync是龟兔赛跑中的乌龟,活得久就是硬道理
ConcurrentHashMap分析(一)整体结构–逐行代码逐个变量解释结构
面试必问的CAS,你懂了吗?–CAS的ABA问题
线程安全和单例
Sychronized in Java–讲解Sychronized的锁范围以及单例的构造
Java是值传递还是引用传递
java基本数据类型传递与引用传递区别详解–Java只有值传递
Java重写equal()时为什么也得重写hashCode()
重写equal()时为什么也得重写hashCode()之深度解读equal方法与hashCode方法渊源–重写hashCode是为了Map
Java中return与finally的先后关系
Java中return与finally的先后关系–在栈中解释两者的相关关系
JDK Dynamic Proxy 和 CGLIB
Spring AOP无法拦截内部方法调用–JDK Dynamic Proxy 无法拦截this
Spring代理自调用–this问题和3种解决方案
Spring 循环依赖相关
Spring-bean的循环依赖以及解决方式–Spring三层缓存解决bean的循环依赖,但但无法解决"A的构造方法中依赖了B的实例对象,同时B的构造方法中依赖了A的实例对象”这类问题了"
浅谈Spring解决循环依赖的三种方式–虽然Spring目前推荐构造器注入但是会带来代码膨胀和互相依赖问题,所以个人建议使用setter方式也就是@Resource注解注入
一文告诉你Spring是如何利用“三级缓存“巧妙解决Bean的循环依赖问题的【享学Spring】–Spring 三级缓存和构造器循环依赖
杂项
三目运算符的BUG–自动拆箱导致的NPE
不要在系统设计中强制依赖枚举,因为你不知道哪一天这个枚举就要变成数据库里的N条数据–业务重构有感 2025-06-11 18:05:39
以下为选读:
每小时固定执行FGC导致程序卡顿
JVM菜鸟进阶高手之路五–RMI导致固定间隔调用FGC,默认1小时
JVM 菜鸟进阶高手之路六(JVM每隔一小时执行一次Full GC)–Tomcat也可能导致每小时或者10小时进行1次FGC
为什么不建议用 try catch?因为懒和菜的人看不懂
为什么不建议用 try catch?–try catch机制非常好。那些觉得try catch不行的人,是他们自己的水平有问题,无法理解这种机制。并且这群人写代码不遵守规则,喜欢偷懒,这才造成try catch不好的错觉。
Java异常的栈轨迹及Java Exception性能问题–try…catch和if…else的性能开销在同一数量级
不明白为什么java要用try…catch…。不用完全没有影响啊?–回答得都很经典
关于try-catch的讨论–32楼说的非常好
数据结构
数据结构教程–学会就月薪10W
不会算法怎么办?
循序渐进理解时间复杂度和空间复杂度–算法前置必读,理解什么是"O"
解析Arrays中sort方法的黑科技–讲解基本数据类型和非基本数据类型排序算法的区别
Timsort——自适应、稳定、高效排序算法–Java1.8之后默认使用的排序算法,例如Arrays.sort(T[]) Stream.sorted() List.sort() Collections.sort(),本质上都是调用了Arrays.sort() (在1.8之后),legacyMergeSort()已被逐渐弃用
JDK(四)JDK1.8源码分析【排序】DualPivotQuicksort–在Arrays.sort()的基本类型重载方法中使用
十大经典排序算法最强总结(含Java代码实现)–非常好的算法讲解
动态可视化算法学习-学完年薪百万
排序算法整合(冒泡,快速,希尔,拓扑,归并)–详细好理解的排序算法
java中Arrays.parallelSort和Arrays.sort性能对比–排序建议使用Stream.parallel.sorted(),会调用Arrays.parallelSort()性能比Arrays.sort()更高,而且在数据量低于1 << 13 即8192 或者 CPU核心为1时会自动降级为串行执行
高级进阶知识
如何编写无法维护的代码–对世界投以恶意只会获得恶意
老手必备技能:多用join;多用子查询;多在java中写长文本;多用注解写sql;一定要装lombok;一定要用mybatisplus;一定要用jfinal;用多重循环代替HashJoin;返回值多用Map
后端架构师技术图谱–内容过多建议挑选感兴趣的内容学习,首先推荐算法和设计模式
互联网 Java 工程师大厂面试+学习指南–redis讲的不错,其他内容正在更新中
大数据
大数据入门指南–大数据常用工具
单例模式写法
Java 利用枚举实现单例模式–枚举写法-单例模式最优解
Java单例模式的七种写法–七种写法简介
顶级程序员的百宝箱
顶级程序员的百宝箱-各式各样的文档
Java的协程
Kotlin 协程真的比 Java 线程更高效吗?|备用链接–Kotlin其实是假协程(2020年3月30日 12:17:23之前)
Java的协程特性计划–loom在未来版本会加入jdk(jdk14未加入)
为什么 Java 坚持多线程不选择协程?–知乎上的讨论
关于其他语言
我为什么放弃Go语言-我觉的写得不错,主观意愿上记录一下 2023年2月8日 09:37:43
ZGC
从历代 GC 算法角度刨析 ZGC-CMS 从来未被当作默认 GC,且已废弃 2023年2月21日 10:36:43
ThreadLocal
不推荐使用:有可能引发内存泄漏并发污染问题,父子线程传递问题,虚拟线程适配问题(jdk21可能可以解决)
推荐使用:非业务场景例如框架组件等业务属性比较轻技术规范强的项目
全网最全的 ThreadLocal 原理详细解析 —— 原理篇
ThreadLocal线程池使用和TransmittableThreadLocal值传递–InheritableThreadLocal只能满足父子线程传递无法满足线程池传递,需要使用TransmittableThreadLocal