Java 后端开发面试技能清单

一、Java 基础(核心重点)

1. Java 语言核心

  • 面向对象:封装、继承、多态、抽象类 vs 接口
  • 关键字:final、static、volatile、synchronized、transient、native
  • 数据类型:8大基本类型、包装类、自动装箱拆箱、Integer 缓存池(-128~127)
  • String:String、StringBuilder、StringBuffer 区别、String 不可变性原理、字符串常量池
  • Object 类:equals()、hashCode()、toString()、clone()、finalize()
  • == 与 equals 区别
  • hashCode 与 equals 的关系

2. 异常处理

  • 异常体系:Throwable、Error、Exception
  • Checked vs Unchecked 异常
  • try-catch-finally 执行顺序(return 情况)
  • try-with-resources
  • 自定义异常

3. 反射机制

  • Class 对象获取方式
  • 反射创建对象、调用方法、获取属性
  • 反射的应用场景(框架、动态代理)
  • 反射的性能问题

4. 泛型

  • 泛型类、泛型接口、泛型方法
  • 类型擦除
  • 通配符:? extends、? super(PECS原则)
  • 泛型的限制

5. 注解

  • 元注解:@Target、@Retention、@Documented、@Inherited
  • 自定义注解
  • 注解的应用(Spring、MyBatis 中的注解)

6. I/O 流

  • 字节流 vs 字符流
  • 节点流 vs 处理流
  • BIO、NIO、AIO 区别
  • NIO 核心组件:Buffer、Channel、Selector
  • 零拷贝:mmap、sendfile

7. 序列化

  • Serializable 接口
  • serialVersionUID 作用
  • transient 关键字
  • 其他序列化方式:JSON、Protobuf、Hessian、Kryo

8. Lambda 与 Stream(Java 8+)

  • 函数式接口:Consumer、Supplier、Function、Predicate
  • Lambda 表达式语法
  • 方法引用
  • Stream 操作:filter、map、flatMap、reduce、collect
  • 并行流 parallelStream

9. Java 新特性

  • Java 8:Lambda、Stream、Optional、新日期API
  • Java 11:var 局部变量、HTTP Client
  • Java 17:Sealed Classes、Pattern Matching
  • Java 21:虚拟线程(Virtual Thread)

二、集合框架

1. Collection 体系

类型 实现类 底层结构 特点
List ArrayList 数组 查询快、增删慢
List LinkedList 双向链表 增删快、查询慢
List Vector 数组 线程安全、性能差
Set HashSet HashMap 无序、不重复
Set LinkedHashSet 链表+HashMap 有序、不重复
Set TreeSet 红黑树 排序、不重复
Queue PriorityQueue 优先级队列
Queue ArrayDeque 数组 双端队列

2. Map 体系

实现类 底层结构 特点
HashMap 数组+链表+红黑树 无序、允许null
LinkedHashMap 数组+链表+红黑树+双向链表 有序
TreeMap 红黑树 排序
Hashtable 数组+链表 线程安全、不允许null
ConcurrentHashMap 数组+链表+红黑树 线程安全、高性能

3. 深入原理

  • ArrayList:初始容量、扩容机制(1.5倍)、modCount 快速失败
  • LinkedList:双向链表结构、头尾操作
  • HashMap
    • 底层结构(数组+链表+红黑树)
    • 哈希计算、扰动函数
    • put 流程、get 流程
    • 扩容机制(2倍)、扩容时机
    • 链表转红黑树条件(长度>8 且 数组长度>=64)
    • 1.7 vs 1.8 区别(头插法 vs 尾插法、死循环问题)
    • 为什么容量是2的幂次
    • 负载因子为什么是0.75
  • ConcurrentHashMap
    • 1.7 分段锁实现
    • 1.8 CAS + synchronized 实现
    • size() 如何保证准确性

4. 线程安全集合

  • CopyOnWriteArrayList:写时复制、适用读多写少
  • CopyOnWriteArraySet
  • ConcurrentSkipListMap:跳表实现、有序
  • ConcurrentLinkedQueue:无锁队列
  • BlockingQueue:ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueue、DelayQueue

5. 工具类

  • Collections:sort、reverse、shuffle、synchronizedXxx
  • Arrays:sort、binarySearch、copyOf、asList

三、JVM 虚拟机

1. 内存结构

区域 线程共享 存储内容 异常
对象实例、数组 OOM
方法区/元空间 类信息、常量、静态变量 OOM
虚拟机栈 栈帧(局部变量、操作数栈) SOF/OOM
本地方法栈 Native 方法 SOF/OOM
程序计数器 当前执行的字节码行号

2. 堆内存划分

  • 新生代:Eden、Survivor0、Survivor1(8:1:1)
  • 老年代
  • 对象分配流程:TLAB → Eden → Survivor → 老年代

3. 对象创建过程

  1. 类加载检查
  2. 分配内存(指针碰撞/空闲列表)
  3. 初始化零值
  4. 设置对象头
  5. 执行 <init> 方法

4. 对象内存布局

  • 对象头:Mark Word、类型指针、数组长度
  • 实例数据
  • 对齐填充

5. 对象访问定位

  • 句柄访问
  • 直接指针访问(HotSpot 使用)

6. 垃圾回收

判断对象是否存活
  • 引用计数法(循环引用问题)
  • 可达性分析(GC Roots)
GC Roots 包括
  • 虚拟机栈中引用的对象
  • 本地方法栈中引用的对象
  • 方法区静态属性引用的对象
  • 方法区常量引用的对象
  • 同步锁持有的对象
引用类型
类型 回收时机 应用场景
强引用 不回收 普通对象
软引用 内存不足时 缓存
弱引用 GC 时 WeakHashMap
虚引用 GC 时 跟踪回收
垃圾回收算法
算法 优点 缺点 应用
标记-清除 简单 碎片 CMS
复制 无碎片 空间浪费 新生代
标记-整理 无碎片 效率低 老年代
分代收集 综合优点 - HotSpot
垃圾收集器
收集器 区域 算法 特点
Serial 新生代 复制 单线程、STW
ParNew 新生代 复制 多线程、STW
Parallel Scavenge 新生代 复制 吞吐量优先
Serial Old 老年代 标记-整理 单线程
Parallel Old 老年代 标记-整理 多线程
CMS 老年代 标记-清除 低延迟
G1 全堆 分区+复制+标记整理 可控停顿
ZGC 全堆 着色指针+读屏障 超低延迟
CMS 收集过程
  1. 初始标记(STW)
  2. 并发标记
  3. 重新标记(STW)
  4. 并发清除
G1 收集过程
  1. 初始标记(STW)
  2. 并发标记
  3. 最终标记(STW)
  4. 筛选回收(STW)

7. 类加载机制

类加载过程
  1. 加载:读取字节码、生成 Class 对象
  2. 验证:文件格式、元数据、字节码、符号引用
  3. 准备:分配内存、设置零值
  4. 解析:符号引用转直接引用
  5. 初始化 :执行 <clinit> 方法
类加载器
加载器 加载路径
Bootstrap ClassLoader JAVA_HOME/lib
Extension ClassLoader JAVA_HOME/lib/ext
Application ClassLoader classpath
自定义 ClassLoader 自定义路径
双亲委派模型
  • 工作流程:向上委派、向下加载
  • 作用:避免重复加载、安全性
  • 打破双亲委派:SPI、Tomcat、OSGi

8. JVM 调优

常用参数
复制代码
-Xms:初始堆大小
-Xmx:最大堆大小
-Xmn:新生代大小
-XX:MetaspaceSize:元空间初始大小
-XX:MaxMetaspaceSize:元空间最大大小
-XX:+UseG1GC:使用 G1 收集器
-XX:MaxGCPauseMillis:最大 GC 停顿时间
-XX:+PrintGCDetails:打印 GC 详情
-XX:+HeapDumpOnOutOfMemoryError:OOM 时 dump 堆
常见问题排查
  • OOM 排查:jmap、MAT、VisualVM
  • CPU 过高:top、jstack
  • GC 频繁:jstat、GC 日志分析
常用工具
工具 用途
jps 查看 Java 进程
jinfo 查看/修改 JVM 参数
jstat 监控 GC 状态
jstack 查看线程堆栈
jmap 内存映射、dump 堆
jconsole 图形化监控
VisualVM 综合监控
Arthas 在线诊断

四、多线程与并发

1. 线程基础

创建线程的方式
  1. 继承 Thread 类
  2. 实现 Runnable 接口
  3. 实现 Callable 接口
  4. 线程池
线程状态
状态 说明
NEW 新建
RUNNABLE 可运行
BLOCKED 阻塞
WAITING 等待
TIMED_WAITING 超时等待
TERMINATED 终止
常见方法对比
方法 所属 释放锁 唤醒方式
sleep Thread 超时自动
wait Object notify/notifyAll
yield Thread 自动
join Thread - 目标线程结束
park LockSupport unpark

2. 线程池

核心参数
参数 说明
corePoolSize 核心线程数
maximumPoolSize 最大线程数
keepAliveTime 空闲线程存活时间
unit 时间单位
workQueue 工作队列
threadFactory 线程工厂
handler 拒绝策略
工作流程
  1. 提交任务
  2. 核心线程未满 → 创建核心线程执行
  3. 核心线程已满 → 加入队列
  4. 队列已满 → 创建非核心线程执行
  5. 达到最大线程数 → 执行拒绝策略
拒绝策略
策略 说明
AbortPolicy 抛出异常(默认)
CallerRunsPolicy 调用者执行
DiscardPolicy 静默丢弃
DiscardOldestPolicy 丢弃最老任务
工作队列
队列 特点
ArrayBlockingQueue 有界数组队列
LinkedBlockingQueue 可选有界链表队列
SynchronousQueue 不存储元素
PriorityBlockingQueue 优先级队列
DelayQueue 延迟队列
预定义线程池(不推荐直接使用)
线程池 特点 问题
FixedThreadPool 固定线程数 队列无界,OOM
SingleThreadExecutor 单线程 队列无界,OOM
CachedThreadPool 可缓存线程 线程数无限,OOM
ScheduledThreadPool 定时调度 线程数无限
线程池大小设置
  • CPU 密集型:N + 1(N 为 CPU 核数)
  • IO 密集型:2N 或 N * (1 + W/C)

3. 锁机制

synchronized
  • 使用方式:修饰方法、修饰代码块
  • 锁对象:普通方法锁 this、静态方法锁 Class、代码块锁指定对象
  • 底层原理:monitorenter、monitorexit
  • 锁升级:无锁 → 偏向锁 → 轻量级锁 → 重量级锁
  • 锁优化:锁消除、锁粗化、自适应自旋
ReentrantLock
  • 与 synchronized 区别
特性 synchronized ReentrantLock
实现 JVM API
释放锁 自动 手动
可中断
公平锁 可选
条件变量 1个 多个
  • 公平锁 vs 非公平锁
  • Condition 条件变量
读写锁
  • ReentrantReadWriteLock
  • 读读共享、读写互斥、写写互斥
  • 锁降级
StampedLock
  • 乐观读
  • 比读写锁性能更好

4. AQS(AbstractQueuedSynchronizer)

  • 核心思想:CLH 队列 + state 状态
  • 独占模式:ReentrantLock
  • 共享模式:Semaphore、CountDownLatch
  • 源码分析:acquire、release、acquireShared、releaseShared

5. 并发工具类

工具类 作用 场景
CountDownLatch 倒计时器 主线程等待多个子线程完成
CyclicBarrier 循环屏障 多个线程互相等待到达屏障点
Semaphore 信号量 限制并发访问资源数量
Exchanger 交换器 两个线程交换数据
Phaser 阶段器 分阶段任务

6. 原子类

类型
基本类型 AtomicInteger、AtomicLong、AtomicBoolean
引用类型 AtomicReference、AtomicStampedReference、AtomicMarkableReference
数组类型 AtomicIntegerArray、AtomicLongArray
字段更新 AtomicIntegerFieldUpdater
累加器 LongAdder、LongAccumulator
  • CAS 原理:Compare And Swap
  • ABA 问题:AtomicStampedReference 解决
  • LongAdder vs AtomicLong:分段累加,高并发更优

7. volatile

  • 可见性:修改立即刷新到主内存
  • 有序性:禁止指令重排(内存屏障)
  • 不保证原子性
  • 应用场景:状态标志、双重检查锁定

8. ThreadLocal

  • 原理:每个线程维护 ThreadLocalMap
  • 内存泄漏:key 弱引用、value 强引用
  • 解决方案:使用后调用 remove()
  • 应用场景:数据库连接、用户信息传递
  • InheritableThreadLocal:父子线程传递
  • TransmittableThreadLocal:线程池场景

9. 并发设计模式

  • 不可变模式:Immutable
  • 生产者-消费者模式
  • Future 模式
  • Worker Thread 模式
  • 两阶段终止模式

五、MySQL

1. SQL 基础

  • DDL:CREATE、ALTER、DROP、TRUNCATE
  • DML:INSERT、UPDATE、DELETE
  • DQL:SELECT、JOIN、子查询、聚合函数、分组、排序
  • DCL:GRANT、REVOKE

2. 数据类型

类型 说明
INT 整数
BIGINT 大整数
DECIMAL 精确小数
VARCHAR 变长字符串
TEXT 长文本
DATETIME 日期时间
TIMESTAMP 时间戳

3. 存储引擎

引擎 事务 行锁 外键 场景
InnoDB 支持 支持 支持 默认、OLTP
MyISAM 不支持 不支持 不支持 读多写少
Memory 不支持 不支持 不支持 临时表

4. 索引

索引类型
类型 说明
主键索引 聚簇索引
唯一索引 值唯一
普通索引 最常用
联合索引 多列组合
全文索引 文本搜索
前缀索引 字符串前缀
B+ 树特点
  • 非叶子节点只存索引
  • 叶子节点存数据,并用链表连接
  • 层数少,IO 次数少
聚簇索引 vs 非聚簇索引
类型 叶子节点存储 回表
聚簇索引 完整数据行 不需要
非聚簇索引 主键值 需要
覆盖索引
  • 查询的列都在索引中
  • 避免回表
最左前缀原则
  • 联合索引按最左字段匹配
  • 范围查询后面的列无法使用索引
索引失效场景
  • 使用函数或计算
  • 隐式类型转换
  • LIKE 以 % 开头
  • OR 连接非索引列
  • 不符合最左前缀
  • 使用 != 或 NOT IN
  • IS NULL / IS NOT NULL(看情况)
索引优化
  • 选择性高的列建索引
  • 联合索引考虑顺序
  • 避免冗余索引
  • 前缀索引节省空间

5. 事务

ACID 特性
特性 说明 实现
原子性 全部成功或全部失败 undo log
一致性 数据保持一致状态 其他三个特性保证
隔离性 事务间相互隔离 MVCC + 锁
持久性 提交后永久保存 redo log
隔离级别
级别 脏读 不可重复读 幻读
READ UNCOMMITTED
READ COMMITTED
REPEATABLE READ 有(InnoDB 部分解决)
SERIALIZABLE

6. MVCC

  • 实现:隐藏列(trx_id、roll_pointer)+ undo log + ReadView
  • ReadView:活跃事务列表、最小/最大事务ID
  • RC vs RR:ReadView 生成时机不同

7. 锁机制

锁类型
说明
共享锁(S锁) 读锁
排他锁(X锁) 写锁
意向锁 表级锁标志
记录锁 锁定单行
间隙锁 锁定范围间隙
临键锁 记录锁 + 间隙锁
死锁
  • 产生条件:互斥、占有等待、不可抢占、循环等待
  • 排查:SHOW ENGINE INNODB STATUS
  • 解决:超时、死锁检测

8. 日志

日志 层级 作用
redo log InnoDB 崩溃恢复、持久性
undo log InnoDB 事务回滚、MVCC
binlog Server 主从复制、数据恢复
binlog 格式
  • Statement:记录 SQL 语句
  • Row:记录行变更
  • Mixed:混合模式

9. SQL 优化

EXPLAIN 字段
字段 说明
id 查询序号
select_type 查询类型
table 表名
type 访问类型(system > const > eq_ref > ref > range > index > ALL)
possible_keys 可能使用的索引
key 实际使用的索引
key_len 索引长度
rows 预估扫描行数
Extra 额外信息
优化技巧
  • 避免 SELECT *
  • 使用覆盖索引
  • 小表驱动大表
  • 批量操作代替循环
  • 分页优化(延迟关联)
  • 避免深度分页

10. 分库分表

  • 垂直分库:按业务拆分
  • 垂直分表:按字段拆分
  • 水平分库:按数据拆分
  • 水平分表:按数据拆分
  • 分片策略:哈希、范围、时间
  • 分布式 ID:雪花算法
  • 跨库问题:事务、JOIN、排序分页
  • 中间件:ShardingSphere、MyCat

11. 主从复制

  • 原理:binlog → relay log → 数据回放
  • 模式:异步、半同步、全同步
  • 延迟问题:原因与解决方案

六、Redis

1. 数据类型与应用场景

类型 底层结构 应用场景
String SDS 缓存、计数器、分布式锁
Hash 压缩列表/哈希表 对象存储
List 压缩列表/双向链表 消息队列、文章列表
Set 整数集合/哈希表 标签、共同好友
ZSet 压缩列表/跳表+哈希表 排行榜、延迟队列
Bitmap String 签到、在线状态
HyperLogLog 稀疏/稠密编码 UV 统计
GEO ZSet 地理位置
Stream 基数树 消息队列

2. 底层数据结构

  • SDS:简单动态字符串
  • 压缩列表:ziplist
  • 快速列表:quicklist
  • 跳表:skiplist
  • 整数集合:intset
  • 哈希表:dictht
  • listpack:Redis 7.0 替代 ziplist

3. 持久化

方式 原理 优点 缺点
RDB 快照 恢复快、文件小 可能丢数据
AOF 日志追加 数据安全 文件大、恢复慢
混合持久化 RDB + AOF 兼顾两者优点 -
AOF 同步策略
策略 说明
always 每次写入都同步
everysec 每秒同步(默认)
no 操作系统决定
AOF 重写
  • 作用:压缩 AOF 文件
  • 触发:手动或自动

4. 内存管理

过期策略
  • 惰性删除:访问时检查
  • 定期删除:随机抽取检查
内存淘汰策略
策略 说明
noeviction 不淘汰,报错
allkeys-lru 所有 key 的 LRU
volatile-lru 设置过期的 key 的 LRU
allkeys-lfu 所有 key 的 LFU
volatile-lfu 设置过期的 key 的 LFU
allkeys-random 随机淘汰
volatile-random 随机淘汰设置过期的
volatile-ttl 淘汰即将过期的

5. 缓存问题

问题 说明 解决方案
缓存穿透 查询不存在的数据 布隆过滤器、空值缓存
缓存击穿 热点 key 过期 互斥锁、不过期+后台更新
缓存雪崩 大量 key 同时过期 随机过期时间、多级缓存

6. 数据一致性

  • Cache Aside:旁路缓存模式
  • 先更新数据库,再删缓存
  • 延迟双删
  • 订阅 binlog

7. 分布式锁

  • SETNX + EXPIRE:非原子问题
  • SET NX EX:原子设置
  • Redisson:可重入、看门狗续期
  • RedLock:多节点加锁

8. 集群模式

模式 说明 优缺点
主从复制 读写分离 手动故障转移
哨兵模式 自动故障转移 不支持分片
Cluster 分片 + 高可用 官方推荐
Cluster 集群
  • 哈希槽:16384 个槽
  • 节点通信:Gossip 协议
  • 故障转移:主观下线 → 客观下线 → 选举

9. 其他特性

  • Pipeline:批量命令
  • Lua 脚本:原子执行
  • 事务:MULTI/EXEC(弱事务)
  • 发布订阅:Pub/Sub

七、Spring 全家桶

1. Spring 核心

IoC(控制反转)
  • 概念:将对象创建和依赖管理交给容器
  • DI 方式:构造器注入、Setter 注入、字段注入
  • 注解:@Autowired、@Resource、@Inject
Bean 生命周期
  1. 实例化
  2. 属性填充
  3. Aware 接口回调
  4. BeanPostProcessor 前置处理
  5. InitializingBean / @PostConstruct
  6. BeanPostProcessor 后置处理
  7. 使用
  8. DisposableBean / @PreDestroy
  9. 销毁
Bean 作用域
作用域 说明
singleton 单例(默认)
prototype 原型
request 每个请求
session 每个会话
application 每个应用
循环依赖
  • 三级缓存解决
    • singletonObjects:完整 Bean
    • earlySingletonObjects:早期 Bean
    • singletonFactories:Bean 工厂
  • 构造器注入无法解决
AOP(面向切面编程)
  • 概念:将横切关注点与业务逻辑分离
  • 术语:切面、连接点、切入点、通知、织入
  • 通知类型:前置、后置、返回、异常、环绕
  • 实现方式:JDK 动态代理、CGLIB
动态代理
方式 条件 原理
JDK 实现接口 反射
CGLIB 无需接口 字节码生成子类
事务
  • 传播机制
类型 说明
REQUIRED 有则加入,无则新建(默认)
REQUIRES_NEW 新建事务,挂起当前
SUPPORTS 有则加入,无则不使用
NOT_SUPPORTED 不使用事务
MANDATORY 必须有事务
NEVER 不能有事务
NESTED 嵌套事务
  • @Transactional 失效场景
    • 非 public 方法
    • 同类方法调用
    • 异常被捕获
    • 异常类型不对
    • 多线程调用
设计模式在 Spring 中的应用
模式 应用
单例模式 Bean 默认单例
工厂模式 BeanFactory
代理模式 AOP
模板方法 JdbcTemplate
观察者模式 事件机制
适配器模式 HandlerAdapter
策略模式 Resource 接口

2. Spring MVC

执行流程
  1. 请求到达 DispatcherServlet
  2. HandlerMapping 找到 Handler
  3. HandlerAdapter 执行 Handler
  4. 返回 ModelAndView
  5. ViewResolver 解析视图
  6. 渲染视图返回响应
核心组件
组件 作用
DispatcherServlet 前端控制器
HandlerMapping 处理器映射
HandlerAdapter 处理器适配器
Handler 处理器(Controller)
ViewResolver 视图解析器
View 视图
常用注解
注解 作用
@Controller 控制器
@RestController @Controller + @ResponseBody
@RequestMapping 请求映射
@GetMapping/PostMapping GET/POST 请求
@RequestParam 请求参数
@PathVariable 路径参数
@RequestBody 请求体
@ResponseBody 响应体

3. Spring Boot

自动装配原理
  1. @SpringBootApplication 包含 @EnableAutoConfiguration
  2. @EnableAutoConfiguration 导入 AutoConfigurationImportSelector
  3. 加载 META-INF/spring.factories 中的自动配置类
  4. 根据 @Conditional 条件判断是否生效
启动流程
  1. 创建 SpringApplication 对象
  2. 运行 run() 方法
  3. 准备环境 Environment
  4. 创建 ApplicationContext
  5. 刷新容器
  6. 执行 Runner
常用注解
注解 作用
@SpringBootApplication 主启动类
@Configuration 配置类
@Bean 定义 Bean
@Value 注入配置值
@ConfigurationProperties 批量绑定配置
@Conditional 条件装配
@Import 导入配置类
自定义 Starter
  1. 创建自动配置类
  2. 使用 @Conditional 控制生效
  3. 创建 spring.factories 文件
  4. 打包发布

4. MyBatis

核心组件
组件 作用
SqlSessionFactory 创建 SqlSession
SqlSession 执行 SQL
Executor 执行器
StatementHandler SQL 处理器
ParameterHandler 参数处理器
ResultSetHandler 结果集处理器
TypeHandler 类型处理器
执行流程
  1. 读取配置文件
  2. 构建 SqlSessionFactory
  3. 创建 SqlSession
  4. 获取 Mapper 代理对象
  5. 执行 SQL
  6. 返回结果
#{} vs ${}
符号 方式 SQL 注入
#{} 预编译 安全
${} 字符串替换 不安全
缓存
级别 范围 默认
一级缓存 SqlSession 开启
二级缓存 namespace 关闭
动态 SQL
  • if、choose/when/otherwise
  • where、set、trim
  • foreach
  • sql、include
分页
  • 逻辑分页:RowBounds
  • 物理分页:PageHelper

八、分布式与微服务

1. 分布式理论

CAP 理论
特性 说明
C(一致性) 所有节点数据一致
A(可用性) 每个请求都能得到响应
P(分区容错) 网络分区时系统继续工作
  • 只能满足两个:CP 或 AP
  • 常见选择:Zookeeper(CP)、Eureka(AP)
BASE 理论
  • BA(Basically Available):基本可用
  • S(Soft state):软状态
  • E(Eventually consistent):最终一致性
一致性模型
  • 强一致性
  • 弱一致性
  • 最终一致性

2. 注册中心

组件 公司 一致性 特点
Eureka Netflix AP 已停更
Zookeeper Apache CP 强一致
Nacos Alibaba AP/CP 阿里推荐
Consul HashiCorp CP 多数据中心

3. 配置中心

组件 特点
Nacos Config 动态刷新、分组命名空间
Apollo 灰度发布、权限管理
Spring Cloud Config Git 存储

4. 服务调用

组件 方式 特点
RestTemplate HTTP 简单直接
Feign/OpenFeign HTTP 声明式、集成 Ribbon
Dubbo RPC 高性能
gRPC RPC 跨语言、Protobuf

5. 负载均衡

组件 方式
Ribbon 客户端负载均衡
LoadBalancer Spring Cloud 官方
Nginx 服务端负载均衡
负载均衡策略
  • 轮询、加权轮询
  • 随机、加权随机
  • 最少连接
  • IP Hash
  • 一致性 Hash

6. 服务网关

组件 特点
Zuul Netflix、阻塞式
Gateway Spring Cloud、响应式
Kong 高性能、插件丰富
APISIX 云原生
功能
  • 路由转发
  • 负载均衡
  • 限流熔断
  • 认证鉴权
  • 日志监控

7. 熔断限流

组件 公司 特点
Hystrix Netflix 已停更
Sentinel Alibaba 功能丰富、控制台
Resilience4j - 轻量级
Sentinel 核心概念
  • 资源:需要保护的服务/方法
  • 规则:流控规则、降级规则、系统规则
  • 流控效果:直接拒绝、Warm Up、排队等待

8. 分布式事务

方案 一致性 性能 复杂度
2PC
3PC
TCC 最终
SAGA 最终
本地消息表 最终
可靠消息 最终
最大努力通知 最终
Seata
  • AT 模式:无侵入、自动补偿
  • TCC 模式:try-confirm-cancel
  • SAGA 模式:长事务
  • XA 模式:强一致

9. 分布式 ID

方案 优点 缺点
UUID 简单 无序、太长
数据库自增 简单 性能瓶颈
Redis INCR 性能好 依赖 Redis
雪花算法 有序、高性能 时钟回拨问题
Leaf/Tinyid 高可用 额外部署
雪花算法结构
  • 1 bit 符号位
  • 41 bit 时间戳
  • 10 bit 机器 ID
  • 12 bit 序列号

10. 分布式锁

方案 优点 缺点
MySQL 简单 性能低
Redis 性能高 可靠性问题
Zookeeper 可靠 性能一般
etcd 可靠 复杂

九、消息队列

1. 基础概念

  • 为什么用 MQ:解耦、异步、削峰
  • 缺点:复杂度增加、一致性问题、可用性降低

2. 常见 MQ 对比

MQ 语言 吞吐量 延迟 特点
RabbitMQ Erlang 万级 微秒 功能完善、AMQP
RocketMQ Java 十万级 毫秒 阿里出品、事务消息
Kafka Scala 百万级 毫秒 日志收集、大数据
Pulsar Java 百万级 毫秒 云原生、计算存储分离

3. RabbitMQ

Exchange 类型
类型 路由方式
Direct 精确匹配 routing key
Fanout 广播到所有队列
Topic 模糊匹配 routing key
Headers 根据 headers 匹配
消息确认机制
  • 生产者确认:confirm 模式
  • 消费者确认:手动 ack

4. RocketMQ

核心概念
  • NameServer:注册中心
  • Broker:消息存储
  • Producer:生产者
  • Consumer:消费者
  • Topic:主题
  • Tag:标签
  • Message Queue:队列
消息类型
  • 普通消息
  • 顺序消息
  • 延迟消息
  • 事务消息
  • 批量消息

5. Kafka

核心概念
  • Broker:节点
  • Topic:主题
  • Partition:分区
  • Replica:副本
  • Producer:生产者
  • Consumer:消费者
  • Consumer Group:消费组
  • Offset:偏移量
高性能原因
  • 顺序写磁盘
  • 零拷贝
  • 分区并行
  • 批量发送
  • 压缩

6. 核心问题与解决方案

消息丢失
环节 解决方案
生产者 确认机制、重试
Broker 持久化、副本
消费者 手动 ACK
重复消费
  • 原因:网络问题、重试机制
  • 解决 :幂等性设计
    • 唯一 ID + 去重表
    • 状态机
    • 乐观锁
顺序消费
  • 全局有序:单分区
  • 局部有序:相同 key 同一分区
消息堆积
  • 增加消费者
  • 批量消费
  • 跳过非重要消息
  • 转存后续处理

十、计算机网络

1. 网络分层模型

OSI 七层 TCP/IP 四层 协议
应用层 应用层 HTTP、FTP、DNS
表示层 应用层 -
会话层 应用层 -
传输层 传输层 TCP、UDP
网络层 网络层 IP、ICMP
数据链路层 网络接口层 ARP
物理层 网络接口层 -

2. TCP

三次握手
  1. 客户端 → SYN → 服务端
  2. 服务端 → SYN+ACK → 客户端
  3. 客户端 → ACK → 服务端

为什么三次:确认双方收发能力

四次挥手
  1. 客户端 → FIN → 服务端
  2. 服务端 → ACK → 客户端
  3. 服务端 → FIN → 客户端
  4. 客户端 → ACK → 服务端

为什么四次:服务端可能还有数据要发送

TIME_WAIT
  • 时间:2MSL
  • 作用:确保最后 ACK 到达、让旧连接消失
TCP 特性
  • 面向连接
  • 可靠传输
  • 流量控制(滑动窗口)
  • 拥塞控制(慢启动、拥塞避免、快重传、快恢复)

3. TCP vs UDP

特性 TCP UDP
连接 面向连接 无连接
可靠性 可靠 不可靠
速度
场景 HTTP、FTP DNS、视频

4. HTTP

HTTP 方法
方法 作用 幂等 安全
GET 获取资源
POST 提交数据
PUT 更新资源
DELETE 删除资源
PATCH 部分更新
GET vs POST
方面 GET POST
参数位置 URL Body
长度限制 有(浏览器)
幂等性
缓存 可以 不可以
状态码
分类 含义 常见
1xx 信息 100 Continue
2xx 成功 200 OK、201 Created
3xx 重定向 301、302、304
4xx 客户端错误 400、401、403、404
5xx 服务端错误 500、502、503
HTTP 版本
版本 特点
HTTP/1.0 短连接
HTTP/1.1 持久连接、管道化
HTTP/2 多路复用、头部压缩、服务器推送
HTTP/3 QUIC 协议、基于 UDP

5. HTTPS

  • 加密过程

    1. 客户端请求,发送支持的加密套件
    2. 服务端返回证书和公钥
    3. 客户端验证证书
    4. 客户端生成对称密钥,用公钥加密发送
    5. 双方使用对称密钥通信
  • 对称加密 vs 非对称加密

类型 速度 安全性 用途
对称加密 密钥分发难 数据加密
非对称加密 安全 密钥交换

6. DNS

  • 解析过程:浏览器缓存 → 本地 hosts → 本地 DNS → 根 DNS → 顶级 DNS → 权威 DNS
  • 记录类型:A、AAAA、CNAME、MX、NS
类型 存储位置 安全性 跨域
Cookie 客户端 不支持
Session 服务端 不支持
Token 客户端 较高 支持

8. JWT

  • 结构:Header.Payload.Signature
  • 优点:无状态、跨域
  • 缺点:无法主动失效、体积大

十一、操作系统

1. 进程与线程

对比 进程 线程
定义 资源分配单位 CPU 调度单位
资源 独立地址空间 共享进程资源
切换 开销大 开销小
通信 IPC 直接通信

2. 进程间通信(IPC)

方式 特点
管道 单向、父子进程
命名管道 双向、任意进程
消息队列 异步
共享内存 最快
信号量 同步
Socket 网络通信

3. 进程调度算法

算法 特点
FCFS 先来先服务
SJF 短作业优先
优先级调度 按优先级
时间片轮转 公平
多级反馈队列 综合

4. 死锁

产生条件
  • 互斥
  • 占有等待
  • 不可抢占
  • 循环等待
处理方法
  • 预防:破坏四个条件之一
  • 避免:银行家算法
  • 检测:资源分配图
  • 解除:终止进程、资源剥夺

5. 内存管理

  • 分页:固定大小页
  • 分段:按逻辑段
  • 段页式:段内分页
页面置换算法
算法 特点
FIFO 先进先出
LRU 最近最少使用
LFU 最不经常使用
OPT 最优(理论)

6. 虚拟内存

  • 概念:使用磁盘扩展内存
  • 页表:虚拟页 → 物理页
  • 缺页中断:页面不在内存时触发

十二、数据结构与算法

1. 数据结构

结构 特点 应用
数组 连续存储、随机访问 ArrayList
链表 非连续、增删快 LinkedList
LIFO 函数调用、括号匹配
队列 FIFO BFS、消息队列
哈希表 O(1) 查找 HashMap
二叉树 层级结构 索引、表达式
红黑树 平衡二叉搜索树 TreeMap
B+ 树 多路平衡 数据库索引
优先级队列 排序、Top K
关系网络 社交网络、路径规划
跳表 有序链表 Redis ZSet
字典树 前缀匹配 搜索提示
布隆过滤器 概率判断存在 防缓存穿透

2. 排序算法

算法 平均时间 最坏时间 空间 稳定
冒泡排序 O(n²) O(n²) O(1) 稳定
选择排序 O(n²) O(n²) O(1) 不稳定
插入排序 O(n²) O(n²) O(1) 稳定
希尔排序 O(nlogn) O(n²) O(1) 不稳定
归并排序 O(nlogn) O(nlogn) O(n) 稳定
快速排序 O(nlogn) O(n²) O(logn) 不稳定
堆排序 O(nlogn) O(nlogn) O(1) 不稳定
计数排序 O(n+k) O(n+k) O(k) 稳定
桶排序 O(n+k) O(n²) O(n+k) 稳定
基数排序 O(nk) O(nk) O(n+k) 稳定

3. 常见算法思想

思想 说明 应用
双指针 首尾指针、快慢指针 两数之和、链表环
滑动窗口 动态维护窗口 最长子串
二分查找 有序数组查找 查找、边界问题
递归/回溯 穷举所有可能 排列组合、N皇后
贪心 局部最优 活动选择、霍夫曼
动态规划 重叠子问题、最优子结构 背包问题、最长子序列
分治 分解→解决→合并 归并排序、快排
BFS 层序遍历 最短路径
DFS 深度优先 路径问题

4. LeetCode 高频题型

类型 经典题目
数组 两数之和、三数之和、移动零
链表 反转链表、环形链表、合并链表
栈/队列 有效括号、最小栈、滑动窗口最大值
哈希表 字母异位词、两数之和
字符串 最长回文子串、无重复字符最长子串
二叉树 遍历、最大深度、层序遍历、验证BST
动态规划 爬楼梯、最长递增子序列、背包问题
回溯 全排列、组合、子集
贪心 跳跃游戏、分发糖果
二分 搜索旋转数组、寻找峰值

十三、设计模式

1. 创建型模式

模式 说明 应用
单例模式 唯一实例 Spring Bean
工厂方法 延迟到子类创建 Collection.iterator()
抽象工厂 创建产品族 数据库驱动
建造者模式 分步骤创建 StringBuilder
原型模式 克隆对象 Object.clone()
单例模式实现
  • 饿汉式
  • 懒汉式(双重检查锁)
  • 静态内部类
  • 枚举

2. 结构型模式

模式 说明 应用
代理模式 控制访问 AOP
适配器模式 接口转换 InputStreamReader
装饰器模式 动态添加功能 IO 流
外观模式 统一接口 SLF4J
桥接模式 抽象与实现分离 JDBC
组合模式 树形结构 文件目录
享元模式 共享对象 String 常量池

3. 行为型模式

模式 说明 应用
策略模式 算法封装 Comparator
模板方法 定义骨架 JdbcTemplate
观察者模式 发布-订阅 Spring 事件
责任链模式 链式处理 Filter
状态模式 状态决定行为 订单状态
命令模式 请求封装 Runnable
迭代器模式 遍历集合 Iterator
中介者模式 集中交互 MVC 中的 C
备忘录模式 状态保存 游戏存档
解释器模式 语法解释 正则表达式
访问者模式 分离数据和操作 编译器 AST

十四、Linux 与运维

1. 常用命令

类型 命令
文件操作 ls、cd、cp、mv、rm、mkdir、touch
文件查看 cat、less、more、head、tail、vim
文件查找 find、locate、which
文本处理 grep、awk、sed、sort、uniq、wc
压缩解压 tar、gzip、zip、unzip
权限管理 chmod、chown、chgrp
进程管理 ps、top、kill、nohup、&
网络相关 ping、curl、wget、netstat、ss、ifconfig
系统信息 uname、df、du、free、uptime
用户管理 useradd、passwd、su、sudo

2. 日志查看

bash 复制代码
# 实时查看日志
tail -f app.log

# 查看最后 100 行
tail -n 100 app.log

# 搜索关键字
grep "ERROR" app.log

# 搜索关键字并显示上下文
grep -C 5 "Exception" app.log

3. 性能排查

bash 复制代码
# CPU 使用率
top
htop

# 内存使用
free -h

# 磁盘使用
df -h

# IO 监控
iostat

# 网络监控
netstat -anp
ss -anp

4. Shell 脚本基础

  • 变量、条件判断、循环
  • 函数定义
  • 常用操作

十五、开发工具

1. Git

命令 作用
git clone 克隆仓库
git add 添加到暂存区
git commit 提交
git push 推送
git pull 拉取
git branch 分支管理
git checkout 切换分支
git merge 合并分支
git rebase 变基
git stash 暂存修改
git reset 重置
git revert 撤销提交
git log 查看日志
git diff 查看差异
Git 工作流
  • Git Flow:master、develop、feature、release、hotfix
  • GitHub Flow:master + feature branch
  • GitLab Flow:环境分支

2. Maven

命令 作用
mvn clean 清理
mvn compile 编译
mvn test 测试
mvn package 打包
mvn install 安装到本地仓库
mvn deploy 部署到远程仓库
生命周期
  • clean、default、site
  • 依赖范围:compile、test、provided、runtime
依赖冲突解决
  • 最短路径优先
  • 先声明优先
  • exclusion 排除

3. Docker

命令 作用
docker build 构建镜像
docker run 运行容器
docker ps 查看容器
docker logs 查看日志
docker exec 进入容器
docker stop 停止容器
docker rm 删除容器
docker rmi 删除镜像
docker-compose 编排多容器
Dockerfile 常用指令
  • FROM、WORKDIR、COPY、ADD
  • RUN、CMD、ENTRYPOINT
  • EXPOSE、ENV、VOLUME

十六、其他技术

1. Elasticsearch

  • 核心概念:Index、Type、Document、Field
  • 倒排索引原理
  • 分词器:Standard、IK
  • 查询 DSL:match、term、bool、range
  • 聚合查询:terms、avg、sum
  • 与 MySQL 同步

2. Nginx

  • 反向代理
  • 负载均衡
  • 静态资源服务
  • 配置文件结构
  • 常用配置:upstream、location、proxy_pass

3. 定时任务

方案 特点
Timer 简单、单线程
ScheduledExecutor 多线程
Spring @Scheduled 注解方式
Quartz 功能强大
XXL-JOB 分布式调度
Elastic-Job 分布式调度

4. 日志框架

  • 门面:SLF4J、Commons Logging
  • 实现:Logback、Log4j2
  • 日志级别:TRACE、DEBUG、INFO、WARN、ERROR
  • 配置:日志格式、滚动策略、异步日志

5. 单元测试

  • JUnit 5:@Test、@BeforeEach、@AfterEach
  • Mockito:mock、when、verify
  • 断言:assertEquals、assertTrue

6. 安全

问题 解决方案
SQL 注入 预编译语句、参数校验
XSS 输入过滤、输出编码
CSRF Token 验证、SameSite Cookie
越权 权限校验
敏感数据 加密存储、脱敏展示

7. RESTful API 设计

  • URI 设计:名词复数、层级结构
  • HTTP 方法语义
  • 状态码使用
  • 版本控制
  • 分页、过滤、排序

十七、项目与软技能

1. 项目介绍模板

  • 项目背景:解决什么问题
  • 技术架构:用了哪些技术
  • 核心功能:主要功能模块
  • 你的职责:负责哪些模块
  • 技术亮点:有什么创新点
  • 遇到的问题:如何解决的

2. 项目深挖问题

  • 为什么选择这个技术方案?
  • 系统 QPS 能达到多少?怎么测的?
  • 如何保证系统高可用?
  • 做过哪些性能优化?
  • 遇到过线上问题吗?怎么排查的?
  • 如果重新设计会怎么改进?

3. 软技能

方面 考察点
学习能力 如何学习新技术、阅读源码吗
解决问题 遇到问题怎么解决
沟通协作 如何与团队协作
抗压能力 如何应对紧急需求
职业规划 短期和长期目标

面试准备建议

重点复习优先级(按重要程度排序)

  1. Java 基础 + 集合 + 并发 + JVM
  2. MySQL + Redis
  3. Spring + Spring Boot + MyBatis
  4. 计算机网络
  5. 数据结构与算法(每天刷 2-3 题)
  6. 分布式 + 微服务 + 消息队列
  7. 项目经验(准备 2-3 个亮点)

学习资源推荐

  • 刷题:LeetCode Hot 100、剑指 Offer
  • 视频:尚硅谷、黑马程序员
  • 博客:JavaGuide、小林 coding
相关推荐
1104.北光c°1 小时前
JVM虚拟机【八股篇】:类加载机制与性能调优
java·开发语言·jvm·笔记·程序人生·调优·双亲委派
顺天认证2 小时前
打破获客瓶颈!易流客全球获客系统助力企业实现业绩倍增
面试
JTCC2 小时前
Java 设计模式西游篇 - 第一回:单例模式显神通 悟空巧解资源劫
java·单例模式·设计模式
ren049182 小时前
多线程、单例模式
java
Nuopiane2 小时前
MyPal3(7)
java·开发语言
不光头强2 小时前
object所有方法及知识点
java·开发语言·jvm
予枫的编程笔记2 小时前
【面试专栏|JVM虚拟机】CMS vs 其他垃圾收集器:核心差异+适用场景
java·jvm·java面试·后端开发·垃圾回收机制·cmv垃圾回收器·jvm性能优化
渡过晚枫2 小时前
[第十六届蓝桥杯/java/算法]1.偏蓝
java·算法·蓝桥杯
zhaoyin19942 小时前
JavaScript面试题笔记
java·javascript·笔记