
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
本文从 JDK8 源码出发,由浅入深拆解 HashMap 的底层实现,并附上实战性能优化建议。HashMap 是 Java 开发者的基本功,底层原理看似复杂,拆解后逻辑其实非常清晰。从数据结构到 put 流程,再到扩容机制,每一处设计都体现了工程师对性能和空间的权衡思考。无论是日常业务开发,还是后端技术面试,HashMap 的底层原理都是绕不开的话题。如果用自定义对象做 key,必须重写 hash
ThreadLocal 的 key 是弱引用,当 ThreadLocal 对象被回收后,key 变为 null,但 value 是强引用,不会被回收。线程的 run 方法中如果抛出未捕获的运行时异常,线程会直接终止,且默认不会打印任何日志,上层代码也感知不到,最终表现为 “业务莫名不执行了”,排查非常困难。死锁是多线程中最经典的问题,当两个线程互相持有对方需要的锁,且都不释放时,就会造成程序永久阻
而缓冲流在普通流的基础上增加了内存缓冲区,可以一次性读取 / 写入多个字符,大幅减少磁盘 IO 次数,将文件复制效率提升数倍。很多初学者在面对文件复制时,往往会混淆字符流和字节流的使用场景,写出效率低下甚至会损坏文件的代码。字节流直接操作文件的二进制字节数据,不关心文件的类型和编码,因此可以复制任何类型的文件(文本、图片、视频、压缩包等)。在实际开发中,根据文件类型选择合适的流,同时注意避免常见的
finally块的代码会在try的 return 之前执行,如果 finally 里也有 return 语句,会直接覆盖 try 中的返回值,导致业务逻辑错乱。本文整理了 Java 异常处理中最容易踩的 8 个坑,以及对应的行业通用最佳实践,附完整代码示例,帮你写出更健壮、更易维护的代码。重新抛出异常时,如果只传入错误信息而不传入原始异常对象,会丢失最关键的栈追踪信息,无法定位异常最初发生的位置。
AutoConfigurationImportSelector的核心方法是selectImports(),它会读取项目中所有META-INF/spring.factories文件,找到 key 为org.springframework.boot.autoconfigure.EnableAutoConfiguration对应的所有自动配置类全限定名,将其加载到 Spring 容器中。理解了自动配置原
Java 是纯面向对象语言,一切皆对象:普通的对象是类的实例,而类本身也是对象—— 每个类在被加载后,JVM 都会在方法区(JDK8 后为元空间)生成一个对应的Class对象,这个对象保存了类的全部元数据信息(类名、父类、接口、构造器、字段、方法等)。很多人觉得反射 “玄乎”,本质是没有理解 “动态” 的核心 —— 普通的 Java 代码是编译期就确定了类、方法、属性,而反射让程序可以在运行时动态
ThreadLocal 的 key 是弱引用,当 ThreadLocal 对象被回收后,key 变为 null,但 value 是强引用,不会被回收。线程的 run 方法中如果抛出未捕获的运行时异常,线程会直接终止,且默认不会打印任何日志,上层代码也感知不到,最终表现为 “业务莫名不执行了”,排查非常困难。死锁是多线程中最经典的问题,当两个线程互相持有对方需要的锁,且都不释放时,就会造成程序永久阻







