Java 核心知识点详细总结 一、Java 基础 1. 核心特性 跨平台原理:JVM屏蔽不同操作系统指令集差异,对外提供统一 Java API,实现跨平台运行。 数据类型:8 种基本数据类型,int 固定4 字节,long 需加L;包装类(Integer/Byte 等)支持 **-128~127 缓存机制 **。 字符串核心: String:final 修饰不可变,底层private final char[],无修改方法; StringBuilder:线程不安全、效率最高,适合频繁拼接; StringBuffer:线程安全(synchronized)、效率低。 面向对象:四大特征封装、抽象、继承、多态;重载(同一类、方法名同参数不同)、重写(子类遵循两同两小一大规则)。 2. 核心机制 传递方式:Java 仅值传递,基本类型传数值,引用类型传内存地址。 反射:运行时获取类信息 / 调用方法,获取 Class 对象 3 种方式:getClass()、类.class、Class.forName()。 序列化:transient关键字修饰字段不参与序列化。 二、集合框架 1. 核心接口与工具 Collection:单值集合父接口;Collections:集合工具类,提供排序、查找等静态方法。 2. 常用集合对比 表格 集合类型 底层结构 线程安全 核心特性 ArrayList 数组 否 查询快、增删慢,默认容量10,扩容1.5 倍 LinkedList 双向链表 否 增删快、查询慢 Vector 数组 是 效率低,扩容2 倍 HashMap 数组 + 链表 + 红黑树 否 默认容量16,加载因子0.75 ConcurrentHashMap 1.8:Node+CAS+synchronized 是 高并发,桶级锁替代分段锁 3. 核心规则 HashSet 判重:hashCode()+equals() 双重判断; HashMap 树化:链表长度 **>8且数组容量≥64**;退化:树节点≤6。 三、JUC 并发编程 1. 线程基础 创建方式:继承 Thread、实现 Runnable/Callable、线程池;Callable支持返回值、抛出异常。 线程状态:新建→可运行→运行→阻塞→死亡。 2. 同步机制 synchronized:JVM 层面锁,自动释放,可重入非公平; ReentrantLock:API 层面锁,手动释放,可判断锁状态; volatile:保证可见性、禁止指令重排,不保证原子性; CAS:比较并交换,硬件级原子操作,存在ABA 问题(用AtomicStampedReference解决)。 3. 线程池 核心参数:corePoolSize(核心线程)、maximumPoolSize(最大线程)、keepAliveTime(空闲超时)、workQueue(任务队列)、threadFactory(线程工厂)、handler(拒绝策略); 执行流程:核心线程→队列→非核心线程→拒绝策略; 规范:手动创建ThreadPoolExecutor,避免Executors导致 OOM。 4. 其他核心 ThreadLocal:线程隔离,底层ThreadLocalMap,key 为弱引用; 死锁:四大条件(互斥、请求保持、不剥夺、环路等待),打破任一条件即可预防。 四、Java Web 1. HTTP 请求 GET/POST:GET 传参在 URL、长度受限、不安全;POST 传参在请求体、无长度限制、安全。 2. Servlet 生命周期:加载→实例化→init()→service()→destroy(); 转发 / 重定向:转发(服务器端、一次请求、地址不变);重定向(客户端、两次请求、地址变更)。 3. 会话机制 Cookie:客户端存储,不安全,单条≤4K; Session:服务器存储,安全,依赖 Cookie 传递 sessionId; JWT:无状态 Token,适合分布式、移动端。 五、数据库 1. 基础知识点 存储引擎:InnoDB(支持事务、行锁)、MyISAM(无事务、表锁); 三范式:1NF(原子性)、2NF(唯一性)、3NF(消除传递依赖); 聚合函数:sum()、avg()、max()、min()、count()。 2. SQL 核心 PreparedStatement:预编译,有效防止 SQL 注入; 执行顺序:from→where→group by→having→select→order by。 六、索引与事务 1. 索引 数据结构:B + 树(MySQL 默认),非叶子节点存 key,叶子节点存数据 + 双向链表; 分类:聚簇索引(主键,存完整数据)、非聚簇索引(二级索引,存主键)、覆盖索引(无需回表); 失效场景:索引列运算、%开头 like、or、!=、is null。 2. 事务 ACID:原子性、一致性、隔离性、持久性; 隔离级别:读未提交→读已提交(Oracle 默认)→可重复读(MySQL 默认)→串行化; 并发问题:脏读、不可重复读、幻读。 七、主流框架 1. Spring IOC:控制反转,对象创建交给容器;DI:依赖注入,自动装配依赖; AOP:动态代理(JDK 代理 / CGLIB),通知类型:前置、后置、环绕、异常、最终; 事务失效 事务失效:异常捕获、抛出检查异常、非 public 方法、内部调用。 2. SpringBoot 自动配置:@SpringBootApplication整合配置、扫描、自动装配三大能力。 3. MyBatis #{} / ${}:#{} 预编译防注入,${}字符串拼接不防注入; 缓存:一级缓存(SqlSession 级,默认开启)、二级缓存(Mapper 级,手动开启)。 八、设计模式 1. 六大原则 开闭原则、里氏代换、依赖倒转、单一职责、接口隔离、迪米特法则。 2. 常用模式 单例模式:饿汉式(线程安全)、懒汉式(双重检查 + volatile)、枚举式(防反射 / 反序列化); 代理模式:静态代理、JDK 动态代理(基于接口)、CGLIB 代理(基于子类)。 九、JVM 1. 类加载 过程:加载→验证→准备→解析→初始化; 双亲委派:自定义→应用→扩展→启动类加载器,避免类重复加载。 2. 运行时数据区 线程私有:程序计数器、虚拟机栈、本地方法栈; 线程共享:堆、方法区(JDK8 后为元空间)。 3. 垃圾回收 GC 算法:标记 - 清除、复制(新生代)、标记 - 整理(老年代)、分代收集; 垃圾收集器:G1(JDK9 默认,区域分代,低延迟); 内存溢出:堆内存不足,内存泄漏(单例、资源未关闭)。 十、Redis 1. 核心特性 数据类型:String、Hash、List、Set、ZSet; 持久化:RDB(快照,恢复快)、AOF(日志,数据安全); 淘汰策略:推荐allkeys-lru(淘汰最近最少使用数据)。 2. 缓存问题 & 解决方案 表格 缓存问题 核心原因 解决方案 缓存穿透 查询不存在的数据 缓存空值、布隆过滤器 缓存击穿 单个热点 key 过期 互斥锁、逻辑过期 缓存雪崩 大量 key 同时过期 / Redis 宕机 随机过期、集群、多级缓存 3. 分布式锁 核心命令:SET lock value NX EX 超时时间,Redisson 解决锁续期 + 重试。 十一、消息中间件 核心作用:解耦、异步、削峰填谷; RabbitMQ:confirm 机制(生产者)、持久化(服务端)、手动 ACK(消费者)保证消息不丢失;幂等性解决重复消费。 十二、微服务 SpringCloud:提供服务注册发现、配置中心、网关、负载均衡、熔断降级; Dubbo:阿里高性能 RPC 微服务框架。 十三、计算机网络 TCP:三次握手(建立连接)、四次挥手(关闭连接),可靠传输基于校验、重传、流量 / 拥塞控制; 跨域:违反同源策略,解决方案:CORS、Nginx 代理、JSONP。 十四、数据结构 递归:爬楼梯问题遵循斐波那契规律,f(n)=f(n-1)+f(n-2)。 4. 关键问题 问题 1:JDK1.8 中 HashMap 的底层原理、树化条件及线程安全方案? 答案: 底层原理:采用数组 + 链表 + 红黑树结构,通过 hash (key) 计算数组下标,哈希冲突用链表存储;默认容量16,加载因子0.75,扩容为原容量 2 倍。 树化条件:链表长度超过 8,且数组容量 **≥64** 时转为红黑树;树节点数≤6 时退化为链表。 线程安全方案:使用ConcurrentHashMap,JDK1.8 通过CAS+synchronized实现桶级锁,替代分段锁,并发性能大幅提升。 问题 2:Redis 缓存穿透、击穿、雪崩的核心区别与解决方案? 答案: 核心区别:缓存穿透是查询不存在的数据,缓存击穿是单个热点 key 过期,缓存雪崩是大量 key 同时过期 / Redis 宕机。 解决方案: 穿透:缓存空对象、布隆过滤器、参数合法性校验; 击穿:互斥锁重建缓存、热点 key 设置逻辑过期; 雪崩:key 过期时间加随机值、Redis 集群部署、多级缓存、限流降级。 问题 3:Spring 事务失效的常见场景及解决方法? 答案: 异常捕获未抛出:try-catch 捕获异常后未抛出,事务不回滚;解决:catch 块抛出RuntimeException。 抛出检查异常:Spring 默认仅回滚非检查异常;解决:@Transactional(rollbackFor = Exception.class)。 非 public 方法:AOP 仅代理 public 方法;解决:将方法改为 public。 同类内部调用:未经过代理对象,事务失效;解决:引入自身代理对象调用方法。