Java 常见面试题

Java 内存模型 Java 的内存模型结构 运行时常量池 JVM 在类加载完成后,会把字节码文件中的常量池信息加载到运行时常量池(Runtime Constant Pool)中。每个类或接口


浅谈 Java 中的锁升级

Java 在并发场景下,为了兼顾性能与安全,引入了锁升级机制。同一把锁会根据竞争情况,从低开销状态逐步升级到高开销状态,以减少无意义的阻塞与线程切换。 Java 对象的锁标志是存储在对象头中的 Mark Word (在 64 位虚拟机中长度是 64 位)中的: 倒数第3位:表示该对象是否可偏向; 倒


浅谈 ThreadLocal

ThreadLocal JDK 提供的 ThreadLocal 可以实现让每个线程都有自己的专属本地变量,虽然每个线程操作的是同一个 ThreadLocal 对象,但是 get() 和 set() 方法操作的变量都保存在每个线程内部,和其他线程互不影响。 举个例子,下面的代码创建了 10 个线程对一


浅谈 Java 内存模型:从 CAS 到 AQS

Java 内存模型 Java 的内存模型(Java Memory Model, JMM)规定了所有的变量都存储在主内存中,每条线程还有自己的工作内存,线程的工作内存保存了被该线程使用的变量的主内存副本。线程对变量的读取、赋值等操作都必须在工作内存中执行,而不能直接读写主内存中的数据。 比如下面的例子


代理模式:实现类似 Python 的 @Cache 注解

笔者在 Leetcode 中使用 Python 刷题时,总能体会到 @Cache 装饰器的强大,在写动态规划时省去了很多记忆化的麻烦。 与此同时,我好奇 Java 中注解的工作原理,想着能不能自己实现一个 Java 中的 @Cache 注解,为我的函数自动生成以函数参数为 key,函数返回值为 va