java教程技术文章
-
Lambda捕获局部变量本身不直接导致内存泄漏,但会延长变量生命周期;编译器将其转为隐藏类,值类型被复制、引用类型被强引用,若被事件、静态缓存或异步任务长期持有,则引发隐性泄漏。329 收藏 -
基本数据类型传递实际值,包装类传递引用副本,因不可变性和null导致行为差异。258 收藏 -
面向对象设计六大原则是应对变化的思考工具,需权衡“何时松、何处紧”:单一职责依变更驱动拆分,开闭原则聚焦可预判扩展,接口按业务场景聚合,里氏替换重语义一致性,迪米特法则重调用安全性。325 收藏 -
KeyGenerator生成对称密钥需严格遵循安全规范:调用JCE安全随机源、按标准算法(如AES-256、SM4、HmacSHA256)结构化生成,经getInstance→init→generateKey→getEncoded四步获取字节数组,并安全存储与脱敏使用。497 收藏 -
SpringAOP不支持opens关键字,因其属Java模块系统语法,与AOP代理织入无关;其切面变量问题实为Bean识别、自调用拦截或切点匹配等配置与机制问题。282 收藏 -
静态方法属于类不依赖实例,不能访问this、实例变量或方法,不可被重写只能隐藏,无super/this,加载早于对象,线程安全需谨慎。241 收藏 -
基本类型必须通过包装类才能存入Java集合,因集合只支持引用类型;自动装箱/拆箱简化操作,但需注意==比较陷阱、null值检查及字符串转换异常处理。182 收藏 -
beforeExecute是合适的注入点,因为它在任务被工作线程执行前触发,既能获取目标线程又能安全绑定TraceId;需结合任务封装或InheritableThreadLocal传递上下文,并在afterExecute中清理MDC。119 收藏 -
int在所有JVM上读写均原子,因32位指令可单次完成;long在32位JVM中被拆为两次32位操作,非原子,64位JVM虽可用单指令但不保证原子性,需volatile或AtomicLong确保。301 收藏 -
volatile不能替代synchronized,因其仅保证可见性与有序性(通过MESI缓存行失效),但不保证i++等复合操作的原子性;而synchronized通过monitorenter/monitorexit指令强制加锁并刷新整个工作内存,确保原子性。246 收藏 -
关键变量必须声明为volatile以保障多线程读写可见性,避免“改了但没生效”;需配合同步块串行化配置更新与线程池调整,并通过日志和压测验证生效一致性。329 收藏 -
white-space:nowrap仅控制文本换行行为,不改变盒模型,需配合flex-shrink:0、明确宽度、overflow:hidden及无覆盖样式才能生效;配text-overflow:ellipsis时三者缺一不可。338 收藏 -
AOP捕获错目标主因是变量生命周期失控而非切点错误;须禁用this引用穿透代理、限定切点包路径、管控ThreadLocal一致性、规范调试快照。367 收藏 -
Java内存泄漏最常见原因是静态集合类长期持有短生命周期对象引用,如staticList/Map未及时清理,导致对象无法被GC回收,持续占用堆内存。402 收藏 -
Java变量生命周期由类型、作用域和引用关系共同决定,并绑定JVM内存分区:基本类型局部变量存栈中,随方法进出而创建销毁;引用变量本身在栈、所指对象在堆;成员变量随对象存堆,静态变量存方法区/元空间;JVM还支持逃逸分析与活变量优化,使对象可提前被GC回收。348 收藏