本文系统介绍了 Java 多线程的关键技术要点:通过 Thread.join 实现子线程先行;阻塞方式包括 sleep、阻塞 I/O、监视器竞争、wait/notify 以及 suspend;比较了 synchronized(JVM 层实现、自动释放、不可中断、非公平)与 Lock(代码层实现、手动释放、可中断、可公平)的区别,并阐述了 synchronized 的 monitorenter/monitorexit 实现原理及对静态方法的锁机制。随后解析了 ReentrantLock 基于 AQS 的实现、乐观锁与悲观锁的概念、以及公平/非公平锁的实现细节。最后说明了除 synchronized/Lock 外的线程安全手段(volatile、原子类、ThreadLocal、不可变对象),并概述了 JDK6 之后的锁升级过程(无锁、偏向锁、轻量级锁、重量级锁)。

本文概述了Java 并发包 JUC 的主要组件——原子类、锁与 Condition、线程池、阻塞队列、并发容器和同步器;阐述了抽象队列同步器 AQS 的设计原理及其在 ReentrantLock、Semaphore、读写锁等中的实现方式;分析了 LongAdder 通过分段计数来缓解高并发下 CAS 竞争的机制;介绍了 ThreadLocal 的实现细节、哈希冲突处理以及常见的线程私有变量使用场景;并系统讲解了线程池的类型、工作流程、五种状态、拒绝策略以及针对 CPU 密集型和 IO 密集型任务的队列大小设置方法。

JVM 由类加载器、运行时数据区(包括程序计数器、虚拟机栈、堆、方法区、本地方法栈等)、执行引擎和本地接口四部分组成。启动时 java.exe 负责定位并装载 JRE、加载 JVM 动态库、创建 JNIEnv 并执行主类或 class。Java 程序经编译生成字节码,由类加载器加载入内存,执行引擎解释或 JIT 编译后交给操作系统运行。运行时数据区划分为线程私有的计数器、栈、本地栈和共享的堆、方法区(含运行时常量池)以及直接内存。类加载经历加载、验证、准备、解析、初始化等阶段,完成后在方法区存放类元数据,局部变量存于栈帧中。

本文系统阐述了JVM 垃圾回收的触发时机、对象可回收判定以及常用优化措施。重点说明了 Eden 区满时触发 Minor GC、老年代占用超阈值或 CMS 检查导致 Full GC,并给出通过扩大方法区/老年代、缩小新生代、禁用 System.gc() 等减轻 Full GC 的手段。进一步介绍了基于 GC Roots 的可达性分析算法、对象年龄晋升老年代的机制以及新生代划分为 Eden 与两个 Survivor 的原因。随后比较了标记‑清除、标记‑复制、标记‑整理三大算法的优缺点,解释了新老年代采用不同回收策略的必要性。最后简要概述了面向服务端的 G1 收集器与 CMS 收集器的工作原理、优势与局限,并区分了内存泄漏与内存溢出及其防治方法。

本文概述MySQL常用SQL技术:LIMIT分页及大偏移优化(索引覆盖、延迟关联、书签方式);聚合函数COUNT、AVG、SUM、MAX、MIN与GROUP BY;表关联包括内连接、左/右外连接、等值连接及一对多、多对多、自关联;外连接概念,MySQL不支持FULL OUTER;行转列使用CASE/IF配合聚合;SQL注入原理及防护(参数校验、预编译占位符);JOIN实现表间更新;WHERE在过滤前、HAVING在聚合后,建议优先使用WHERE。

MySQL索引是一种磁盘结构,用于快速定位行,主要实现为BTREE和HASH两种。常见索引包括普通、唯一、主键、组合、全文和空间索引,创建方式有在CREATE TABLE时定义、ALTER TABLE或CREATE INDEX。索引能提升查询、排序、分组和唯一性校验,但会占用磁盘、增加写入和维护成本,且不一定每次都被使用,需遵守最左前缀原则并通过EXPLAIN验证。MyISAM的BTREE叶节点存记录地址,InnoDB采用聚簇索引把数据存于叶子,辅助索引指向主键。HASH仅适合等值查询,BTREE支持范围和排序。索引并非越多越好,应根据列基数、更新频率等评估,并在必要时进行重建。