- 分类
- Java
Java 注解处理器与字节码:编译期生成 vs 运行期织入
Java 代码生成有两种主要方式:编译期使用 APT + JavaPoet + AutoService 生成注解处理代码和 SPI 注册,安全可审计但需避免修改已有源文件;运行期使用 ASM 或 Javassist 修改字节码,可处理动态 Control-Flow nhưng 核 risk higher,改系统类或写错栈帧会崩溃。APT 支持增量编译且错误在编译期暴露,Javassist 生成类需考虑内存缓存(prune)和 Android 对系统类的限制(minify 后类名变化)。核心对比:APT 安全审计强但依赖注解完备性,ASM/Javassist 灵活但易引发运行时错误;前者适合消除路由 DI样板代码,后者用于埋点、热修复等场景。需避免运行期修改系统类,两种方案都存在内存资源管控问题。
- 2026/09/16 14:22
- 5
- 0
- 0
- 24.5℃
Java 语言与并发基础:从语义细节到并发原语
本文系统梳理Java基础与并发开发要点:1. 哈希码需配合equals使用,注意可变字段对HashMap的影响;2. ArrayList避免作为并发容器,需关注扩容机制与修改导致fail-fast异常;3. Arrays工具类简化数组操作,但需注意asList的固定性及遍历时存在的拆箱陷阱;4. Stream处理需考虑短路机制与并行场景,Android需注意API版本兼容性;5. BigDecimal必须用字符串构造模拟精确小数,避免double精度误差,比较用compareTo而非equals。6. 并发核心机制:通过JMM保证可见有序,AQS与LockSupport实现细粒度控制(park/unpark),要求编写同步器时严格原子化操作。7死锁四大条件需重点防范,可通过资源有序申请或超时机制破坏;8. LRU缓存需配合过期时间与防扫描策略,避免成倍访问激增内存,实际开发应结合LRU-K/LFU均衡淘汰率。9. ThreadLocal若用于线程池必须及时remove,不可替代单例模式或全局参数。附工具速查表强调:同步场景优先用synchronized/volatile,自定义锁基于AQS,严格使用可乐终止器(原子操作),避免滥用多线程直接造线程。核心收获为:遇共享可变状态须多重约束保障一致性,工具链选择要匹配业务特性,设计时尽早考虑高并发与优雅退化。
- 2026/09/16 14:21
- 6
- 0
- 0
- 24.6℃
Java 静态属性和静态方法能否被继承、重写?
Java中静态成员属于类而非对象,可通过子类访问。核心要点:静态方法不具备运行时多态,无法被重写,但可通过子类访问父类同名静态方法(方法隐藏);静态字段同样不能重写,子类同名字段 thuộc字段隐藏。接口静态方法不可被子类继承,调用需使用接口名称。访问权限决定可见性:private成员不可见,protected默认可见,public全类可见。静态成员不参与多态调用,调用时由变量声明类型决定(如 Parent parent = new Child(); parent打印调用的是Parent类的静态方法)。静态方法不能直接访问实例字段,需显式转为对象调用(如user1.printName())但实际执行避免实例方法的场景。静态调用的编译时绑定特性导致静态成员无法根据实际对象类型动态分发。常见误区包括将方法隐藏误认为重写,静态方法动态绑定等。静态设计仍符合封装、继承等面向对象原则,但属于类级抽象而非对象级实例化。
- 2026/07/10 19:24
- 18
- 0
- 0
- 25.8℃
Java项目配置文件加密方案全解析:从Jasypt到Vault
一、引言:为什么配置文件加密刻不容缓? 在Spring Boot项目中,数据库密码、API密钥、Redis凭证等敏感信息常常被明文写在application.yml或application.properties中,然后堂而皇之地提交到代码仓库。这无异于把家门钥匙贴在门框上——一旦代码泄露或被内部人员
- 2026/06/30 20:00
- 7
- 0
- 0
- 24.7℃
Java线程池的优雅关停:从shutdown到shutdownNow的究竟
应用重启时,线程池里的任务怎么办?直接“拔电源”,正在执行的任务会丢失,积压的队列也可能被清空。要做到“优雅关停”,就得在停止服务前,给线程池一个体面的收场:尽力完成进行中的任务、合理地放弃等待,并确保资源回收。 本文将讲解线程池关闭的核心机制,并给出标准化的优雅停机范式。 一、线程池的状态:先看懂
- 2026/05/09 21:04
- 53
- 0
- 0
- 29.3℃
Java线程池如何处理异常?线程池异常处理:避开“吞异常”陷阱
在使用线程池时,你很可能遇到过这种情况:任务明明出错了,日志里却干干净净,就像什么都没发生一样。这其实是因为 线程池默认会“吞掉”某些异常,尤其当你用 submit() 提交 Callable 或 Runnable 时。 本文将彻底梳理线程池异常处理的四种主要方式,并给出最佳实践,帮你告别“异常黑洞
- 2026/05/09 20:58
- 18
- 0
- 0
- 25.8℃
Java transient关键字
transient 是 Java 中的一个字段修饰符,主要用于对象序列化(Serialization)时控制某些字段不被序列化。 transient 的中文翻译是 "瞬态的" 或 "临时的"。 下面从概念、原理、使用场景、示例和注意事项进行系统讲解。 一、什么是 transient 当一个类实现了
- 2026/02/24 13:02
- 26
- 0
- 0
- 26.6℃
JVM - 主流JVM实现
HotSpot Oracle JDK / OpenJDK 默认 现在用得最多的就是它 OpenJ9 IBM 捐给 Eclipse 基金会 内存占用小、启动快 很多云场景、微服务在用 GraalVM 新一代高性能虚拟机 支持 Java、JS、Python 等多语言 能把 Java 编译成原生可执行文件
- 2026/02/24 12:51
- 27
- 0
- 0
- 26.7℃
Java 本地缓存 Ehcache 该怎么用?
在 Java 缓存生态里,Redis 几乎成了分布式缓存的代名词,但提到本地缓存,有一个 “老伙计” 你一定绕不开 ——Ehcache。作为纯 Java 实现的进程内缓存框架,Ehcache 凭借轻量、易集成、高性能的特点,至今仍是中小型项目、单机应用的首选。本文带你吃透 Ehcache 的核心用法
- 2026/02/24 01:46
- 28
- 0
- 0
- 26.8℃