计算机基础(完整版·超详细可背诵)

课程前言

课程定位 :区别于零基础通识课,完全面向 Java 后端中高级、资深工程师、大厂社招/校招核心面试。所有知识点不孤立讲底层,全部联动 Java、JVM、并发、Netty、中间件、线上调优、生产故障。

课程结构:五大模块、循序渐进、从通识底层 → 工程落地 → 资深内核进阶

每节统一学习模板(全书通用)

  1. 核心定义:一句话精准概括

  2. 底层原理:逐层拆解机制

  3. 特点/对比/优劣:面试最爱考对比题

  4. 面试&生产落地:标准答案 + 线上问题 + 优化方案

学习收益:彻底告别碎片化八股,建立「计算机底层 → Java源码 → 中间件 → 线上调优」完整知识链路。

模块一:计算机网络(Java 网络编程 / Netty / 网关核心基石·资深完整版)

模块前言:中级与资深网络知识分水岭

中级开发只会背诵三次握手、四次挥手;资深Java工程师核心能力 :打通「操作系统IO模型 → 内核网络协议栈 → Java NIO → Netty高性能通信 → 线上网络故障排查」全链路,能够解释Netty底层为什么快、TCP线上各种异常根因、分布式超时/重传/连接泄露问题、网关负载均衡底层逻辑。本模块补全市面90%教程缺失的Java工程落地网络底层,完全对标大厂资深面试+生产故障调优。

第1章 网络五层模型与各层核心协议(Java工程视角)

1. 核心定义

互联网数据传输遵循分层架构,业内通用TCP/IP五层模型 ,从上至下逐层封装、逐层解封装,实现跨设备、跨网络数据通信。分层的核心价值是解耦、各司其职、协议标准化、便于排错与扩展。

2. 底层原理

数据发送:应用层数据 → 传输层加端口头 → 网络层加IP头 → 数据链路层加MAC头 → 物理层二进制传输。

数据接收:反向逐层解包,剥离对应层头部,校验无误后最终交付应用程序。每层只处理自己层级的头部信息,不干预上层业务数据。

3. 各层核心职责与协议(Java重点标注)

  • 应用层 :面向用户/应用程序,定义业务数据格式与交互规则。协议:HTTP、HTTPS、DNS、FTP、SSH、RPC自定义协议。Java Netty、自定义RPC、网关均工作在应用层。

  • 传输层 :端到端通信,进程与进程的数据传输、流量控制、可靠保障。协议:TCP、UDP。Java NIO、Socket通信底层依赖传输层。

  • 网络层:主机到主机寻址、路由转发、跨网段传输。协议:IP、ICMP、ARP。负责找到目标服务器。

  • 数据链路层:局域网内帧传输、MAC寻址、差错校验、帧同步。

  • 物理层:二进制比特流传输,定义硬件电气、光学传输标准,处理物理链路通断。

4. 面试&生产落地

  • 为什么需要分层?解耦、各司其职、单层改动不影响全局,迭代维护简单,故障可分层定位。

  • Java NIO、Netty 工作在传输层+应用层,基于操作系统内核网络IO模型实现高并发通信。

  • 线上网络故障标准分层排查:物理链路 → 局域网互通 → 路由转发 → 端口连通/防火墙 → 应用协议异常。

  • RPC框架、网关、MQ通信底层全部依赖五层模型的传输层可靠机制实现数据投递。

第2章 TCP 完整核心原理(资深高频重中之重·补全完整版)

1. 核心定义

TCP 是面向连接、可靠、字节流、全双工、拥塞可控的传输层协议,是互联网绝大多数业务、Java网络通信、分布式调用的底层核心协议。

2. 核心机制原理

(1)三次握手(建立连接)深层原理

第一次握手:客户端发送 SYN 报文,携带客户端初始序列号ISN,请求建立连接;服务端接收,确认客户端发送能力正常。

第二次握手:服务端返回 SYN+ACK 报文,携带服务端ISN,确认客户端、告知客户端自己收发能力正常。

第三次握手:客户端返回 ACK 报文,确认服务端接收能力正常,双方同步序列号,连接正式建立。

核心目的(面试必背):同步双方初始序列号、确认双向收发能力正常、规避历史失效报文残留、防止过期连接干扰新连接。

(2)四次挥手(断开连接)深层原理

TCP 全双工通信,读写通道完全独立,单方向关闭不影响另一方向数据传输,因此必须四次交互。

主动方发 FIN(关闭己方写通道)→ 被动方 ACK 确认 → 被动方数据发完发 FIN → 主动方 ACK 确认,等待2MSL后连接彻底断开。

核心本质:FIN只关闭单向流,保证对方残留数据可以正常接收完毕,避免数据丢失。

(3)四大可靠传输机制(完整补全)
  • 确认应答ACK:每段数据接收成功必须返回ACK确认,携带期望接收的下一个字节序号,保证数据可达、有序。

  • 超时重传:报文丢失或ACK超时,自动重传,解决网络丢包、延迟问题,保障可靠性。

  • 滑动窗口(流量控制):动态调整发送速率,匹配接收方缓冲区剩余容量,防止接收方缓冲区溢出、数据丢失。

  • 拥塞控制 :根据全网拥堵状态调整发送速率,避免网络雪崩,包含慢启动、拥塞避免、快重传、快恢复四阶段。

(4)保活机制 Keep-Alive

连接空闲一段时间后,自动发送探测报文,检测对端状态,清理宕机、断网、异常退出导致的僵尸连接,释放无效文件句柄。

(5)TCP序列号与确认号(有序性核心)

TCP每个字节数据都有唯一序列号,用于排序、去重、标记数据位置;确认号保证数据按序接收、无重复、无遗漏,是TCP可靠有序的底层基石。

3. TCP 核心缺陷与特性对比

  • 优点:可靠、有序、无丢失、无重复、支持流量/拥塞控制、适配复杂网络。

  • 缺点:头部开销大、握手挥手耗时、系统资源占用高、不适用于超低延迟弱网场景。

4. 面试&生产高频问题(资深完整版)

(1)TIME_WAIT 详解(生产重点)

产生:主动关闭连接方,四次挥手最后一步进入 TIME_WAIT,持续固定 2MSL。

作用:保证对方收到最后ACK报文、隔离新旧连接重复报文、保证网络残留数据传输完毕。

生产问题:高并发短连接场景大量 TIME_WAIT 堆积,耗尽本机端口资源,导致服务无法新建连接。

优化:开启 tcp_tw_reuse、扩容本地端口范围、合理缩短超时时间、业务层连接池复用连接。

(2)CLOSE_WAIT 详解(Java代码Bug核心)

产生:被动关闭方收到FIN报文后,应用层未调用 close() 关闭连接、未释放资源。

本质:Java代码连接泄露Bug,流未关闭、连接未回收。

后果:文件句柄持续占用、句柄耗尽、服务拒绝新连接、端口资源泄露。

解决:try-with-resources自动关闭流、统一资源关闭工具类、连接池规范回收连接。

(3)粘包拆包(Netty核心考点)

原因:TCP 是无边界字节流协议,内核缓冲区会合并小数据包、拆分大数据包,导致应用层读取数据错乱。

四大解决方案:固定长度报文、特殊分隔符、报文头+长度字段(工业主流)、Netty专用解码器(LengthFieldBasedFrameDecoder)。

(4)TCP半开连接/半关闭连接

半关闭:一方关闭写通道、仍可接收数据;半开连接:对方异常宕机断网,本地连接仍存活,形成僵尸连接,占用句柄资源,依赖Keep-Alive机制清理。

第3章 UDP 核心原理与适用场景(Java高阶补充)

1. 核心定义

UDP 是无连接、不可靠、面向数据报、独立报文边界的传输层协议,无需握手,直接收发数据,极致低延迟。

2. 底层原理

无需建立连接、无ACK确认、无拥塞/流量控制、无状态,每次发送独立数据报,内核不缓存报文状态,传输效率拉满。

3. 优缺点对比

优点:延迟极低、开销小、适合海量并发、支持多播广播、内核开销极小。

缺点:可能丢包、乱序、无重传机制、数据不可靠、无拥塞控制易导致网络风暴。

4. 生产&Java落地场景

直播、语音视频、游戏实时交互、DNS查询、监控指标上报、QUIC协议底层、UDP自定义可靠传输框架。

资深拓展:业务可基于UDP自研可靠机制(重传、序号、ACK),兼顾低延迟与可靠性,适配实时业务。

第4章 HTTP/HTTPS 全版本演进与核心机制(网关/接口核心)

1. HTTP 各版本核心差异(面试必考完整版)

  • HTTP1.0:默认短连接,一次请求一次连接,频繁握手挥手,性能极差,无连接复用。

  • HTTP1.1 :默认长连接Keep-Alive、支持缓存、断点续传、Host头、请求管线化;存在串行队头阻塞,一个请求阻塞后续全部请求。

  • HTTP2.0:二进制帧传输、单连接多路复用、头部压缩、服务端推送、流量控制,彻底解决1.1队头阻塞,基于TCP。

  • HTTP3.0(QUIC):基于UDP,0-RTT快速握手、弱网容错、连接迁移、彻底无队头阻塞,移动端、高抖动网络首选。

2. HTTPS 安全机制(补全TLS底层)

(1)核心定义

HTTPS = HTTP + SSL/TLS 安全加密层,443端口,实现传输数据加密、防篡改、防劫持、身份校验。

(2)混合加密完整原理

混合加密机制:非对称加密协商会话密钥 + 对称加密传输业务数据 + 数字签名校验完整性与身份,兼顾安全性与传输性能。

(3)TLS版本差异与优化

TLS1.2:四次握手,流程繁琐、延迟高;TLS1.3:精简为两次握手,删除冗余步骤,大幅提升连接速度、降低延迟,生产主流推荐。

3. HTTP 缓存机制(业务优化核心)

  • 强缓存:Cache-Control、Expires,不请求服务器,直接复用本地缓存,性能最优。

  • 协商缓存:Last-Modified、ETag,请求服务器校验资源是否更新,未更新则304复用缓存,更新则返回新资源。

4. 网络安全基础(生产必备)

  • CORS跨域:浏览器同源策略限制,协议/域名/端口任一不同即跨域,服务端配置响应头解决,前后端分离核心机制。

  • XSS:跨站脚本攻击,注入恶意脚本,防护:输入过滤、输出转义、CSP策略、HttpOnly Cookie。

  • CSRF:跨站请求伪造,盗用用户身份请求,防护:Token校验、Referer校验、SameSite Cookie。

第5章 DNS 域名解析原理与生产优化

1. 核心定义

DNS 是域名解析协议,实现人类可读域名与机器可读IP地址的双向映射,是所有外网访问的前置环节。

2. 完整解析流程

浏览器缓存 → 系统缓存 → 本地DNS服务器 → 根域名服务器 → 顶级域名服务器 → 权威域名服务器 → 返回IP并缓存。

3. 查询方式

  • 递归查询:本地DNS替客户端完成全部查询,返回最终结果。

  • 迭代查询:各级服务器逐级返回下一级地址,由本地DNS继续查询,分担根服务器压力。

4. 生产优化方案

DNS缓存、预解析、CDN加速、智能DNS调度、本地DNS集群,降低解析延迟、解决DNS解析超时导致的接口失败问题。

第6章 负载均衡与代理网关(架构必备完整版)

1. 四层负载均衡(LVS)

工作在传输层,基于 IP+端口 转发,不解析应用层协议,无业务侵入、性能极高、吞吐量大,适合全局流量入口、高并发场景。

2. 七层负载均衡(Nginx/网关)

工作在应用层,解析HTTP/HTTPS协议,支持路由匹配、权重分发、灰度发布、限流、缓存、rewrite重写、日志统计,业务灵活性极强,Java微服务网关底层依赖七层负载。

3. 核心调度算法

轮询、加权轮询、IP哈希(会话保持)、最小连接数、最快响应优先、一致性哈希。

4. 正向代理 & 反向代理

  • 正向代理:代理客户端,隐藏客户端真实IP(翻墙、内网代理上网)。

  • 反向代理:代理服务端,隐藏后端服务集群,对外统一入口(微服务网关、Nginx生产主流)。

5. 高可用机制

主动/被动健康检查、故障节点自动摘除、主备切换、集群容灾、异地多活流量调度、熔断降级联动。

第7章 Java网络编程核心(BIO/NIO/AIO 资深分水岭)

1. 核心定义

Java网络通信基于操作系统Socket套接字实现,分为BIO、NIO、AIO三种编程模型,模型差异直接决定并发能力,Netty基于NIO优化封装。

2. BIO 阻塞IO模型(老式)

同步阻塞,一连接一线程,线程阻塞等待数据就绪与拷贝;优点编码简单,缺点线程资源爆炸、并发极低、无法应对高连接场景,生产已淘汰。

3. NIO 非阻塞IO(Java核心·Netty底层)

同步非阻塞,基于缓冲区Buffer、通道Channel、选择器Selector实现;单线程可监听成千上万个连接,无连接阻塞,仅处理就绪事件,高并发高性能,是Java网络编程主流。

核心三组件:Buffer缓冲区、Channel通道、Selector多路复用器。

4. AIO 异步IO

异步非阻塞,内核完成数据拷贝后主动回调应用程序,无需线程轮询;Java落地场景少、适配差,Netty未采用。

5. 面试&生产落地

Netty彻底重构JDK NIO缺陷,解决空轮询Bug、API繁琐、线程模型简陋问题,实现主从Reactor多线程模型,支撑高性能RPC、网关、IM通信。

第8章 线上网络高频故障全解(资深排错必备)

1. 接口超时根因

网络丢包重传、TCP队列溢出、连接泄露、线程阻塞、GC卡顿、后端慢SQL、网络拥堵。

2. 端口占用/无法建连

端口被占用、防火墙拦截、内核连接队列满、文件句柄耗尽、IP白名单限制。

3. 数据错乱/重复请求

TCP粘包拆包、网络重传、幂等未实现、超时重试导致重复调用。

4. 长连接断线/心跳失效

防火墙空闲断开、Keep-Alive参数不合理、网络抖动、服务宕机未释放连接。

第9章 资深网络核心思维总结

  • 所有分布式调用超时、抖动、失败,底层90%都是网络层问题(丢包、重传、连接异常、队列满)。

  • Netty高性能本质:IO多路复用 + 线程模型优化 + 内存池 + 拆包粘包处理 + 无锁设计。

  • TCP可靠是内核兜底可靠,业务仍需做重试、幂等、超时控制,双重保障。

  • 线上网络调优核心:优化内核网络参数、规避连接堆积、减少上下文切换、合理复用连接。

计算机简洁版

第1章 网络五层模型与各层核心协议

1. 核心定义

互联网数据传输遵循分层架构,业内通用TCP/IP五层模型,从上至下逐层封装、逐层解封装,实现跨设备、跨网络数据通信。

2. 底层原理

数据发送:应用层数据 → 传输层加端口头 → 网络层加IP头 → 数据链路层加MAC头 → 物理层二进制传输。

数据接收:反向逐层解包,剥离对应层头部,最终交付应用程序。

3. 各层核心职责与协议

  • 应用层:面向用户/应用程序,定义业务数据格式。协议:HTTP、HTTPS、DNS、FTP、SSH。

  • 传输层:端到端通信,进程与进程的数据传输。协议:TCP、UDP。

  • 网络层:主机到主机寻址、路由转发。协议:IP、ICMP、ARP。

  • 数据链路层:局域网内帧传输、MAC寻址、差错校验。

  • 物理层:二进制比特流传输,定义硬件电气、光学传输标准。

4. 面试&生产落地

  • 为什么需要分层?解耦、各司其职、单层改动不影响全局,便于迭代和排错。

  • Java NIO、Netty 工作在传输层+应用层,基于操作系统内核网络能力实现高并发通信。

  • 线上网络故障可分层排查:物理链路 → 局域网 → 路由 → 端口连通 → 应用协议。

第2章 TCP 完整核心原理(资深高频重中之重)

1. 核心定义

TCP 是面向连接、可靠、字节流、全双工的传输层协议,是互联网绝大多数业务的底层通信协议。

2. 核心机制原理

(1)三次握手(建立连接)

第一次握手:客户端发送 SYN 报文,请求建立连接;服务端接收,确认客户端发送能力正常。

第二次握手:服务端返回 SYN+ACK 报文,确认客户端、告知客户端自己收发能力正常。

第三次握手:客户端返回 ACK 报文,确认服务端接收能力正常,连接正式建立。

核心目的:同步双方初始序列号、确认双向收发能力正常、规避历史失效报文干扰。

(2)四次挥手(断开连接)

TCP 全双工通信,读写通道独立,无法一次性关闭,必须四次交互。

主动方发 FIN(关闭写通道)→ 被动方 ACK 确认 → 被动方数据发完发 FIN → 主动方 ACK 确认,连接彻底断开。

(3)四大可靠传输机制
  • 确认应答:每段数据接收成功必须返回 ACK 确认,保证数据可达。

  • 超时重传:报文丢失或ACK超时,自动重传,解决网络丢包问题。

  • 滑动窗口(流量控制):动态调整发送速率,匹配接收方缓冲区上限,防止接收方溢出。

  • 拥塞控制:根据网络拥堵状态调整发送速率,避免全网拥塞,包含慢启动、拥塞避免、快重传、快恢复。

(4)保活机制 Keep-Alive

连接空闲一段时间后,自动发送探测报文,检测对端状态,清理宕机、断网导致的僵尸连接。

3. TCP 核心缺陷与特性对比

  • 优点:可靠、有序、无丢失、无重复。

  • 缺点:开销大、握手挥手耗时、头部占用高、不适合极速弱网场景。

4. 面试&生产高频问题(必背)

(1)TIME_WAIT 详解

产生:主动关闭连接方,四次挥手最后一步进入 TIME_WAIT,持续 2MSL。

作用:保证对方收到最后ACK、隔离新旧连接重复报文。

生产问题:高并发短连接场景大量 TIME_WAIT 会耗尽端口资源。

优化:开启 tcp_tw_reuse、调整端口范围、缩短超时时间。

(2)CLOSE_WAIT 详解

产生:被动关闭方收到FIN后,应用层未调用 close() 关闭连接。

本质:代码Bug,连接泄露,不释放文件句柄。

后果:文件句柄耗尽、服务无法建立新连接、端口占用。

解决:排查代码未关闭流/连接、统一资源关闭工具类。

(3)粘包拆包

原因:TCP 是字节流协议,无数据边界,内核缓冲区会合并/拆分数据。

解决方案:固定长度报文、特殊分隔符、报文头+报文体(长度字段)、Netty 解码器(LengthFieldBasedFrameDecoder)。

第3章 UDP 核心原理与适用场景

1. 核心定义

UDP 是无连接、不可靠、面向数据报的传输层协议,无需握手,直接收发数据。

2. 底层原理

无需建立连接、无需确认应答、无拥塞控制、无流量控制,每次发送独立数据报,传输效率极致高。

3. 优缺点对比

优点:延迟极低、开销小、适合海量并发、支持多播广播。

缺点:可能丢包、乱序、无重传机制、数据不可靠。

4. 生产场景

直播、语音视频、游戏、DNS查询、监控上报、QUIC协议底层。

第4章 HTTP/HTTPS 全版本演进与核心机制

1. HTTP 各版本核心差异(面试必考)

  • HTTP1.0:默认短连接,一次请求一次连接,频繁握手,性能极差。

  • HTTP1.1:默认长连接、支持缓存、断点续传、Host头、管线化;存在队头阻塞问题。

  • HTTP2.0:二进制帧传输、单连接多路复用、头部压缩、服务端推送,解决1.1队头阻塞。

  • HTTP3.0(QUIC):基于UDP,0-RTT快速握手、弱网容错、彻底无队头阻塞,移动端首选。

2. HTTPS 安全机制

(1)核心定义

HTTPS = HTTP + SSL/TLS 安全加密层,443端口,实现传输数据加密、防篡改、防劫持。

(2)加密原理

混合加密机制:非对称加密协商会话密钥 + 对称加密传输业务数据 + 数字签名校验完整性。

(3)TLS版本差异

TLS1.2:四次握手,流程繁琐;TLS1.3:精简为两次握手,大幅提升连接速度。

3. HTTP 缓存机制(业务优化核心)

  • 强缓存:Cache-Control、Expires,不请求服务器,直接复用本地缓存。

  • 协商缓存:Last-Modified、ETag,请求服务器校验资源是否更新,未更新则304复用缓存。

4. 网络安全基础

  • CORS跨域:浏览器同源策略限制,协议/域名/端口任一不同即跨域,服务端配置响应头解决。

  • XSS:跨站脚本攻击,注入恶意脚本,防护:输入过滤、输出转义、CSP策略。

  • CSRF:跨站请求伪造,盗用用户身份请求,防护:Token校验、Referer校验。

第5章 DNS 域名解析原理

1. 核心定义

DNS 是域名解析协议,实现人类可读域名与机器可读IP地址的双向映射。

2. 解析流程

浏览器缓存 → 系统缓存 → 本地DNS服务器 → 根域名服务器 → 顶级域名服务器 → 权威域名服务器 → 返回IP。

3. 查询方式

  • 递归查询:本地DNS替客户端完成全部查询。

  • 迭代查询:各级服务器逐级返回下一级地址,由本地DNS继续查询。

4. 生产优化

DNS缓存、预解析、CDN加速、智能DNS调度,降低解析延迟。

第6章 负载均衡与代理网关(架构必备)

1. 四层负载均衡(LVS)

工作在传输层,基于 IP+端口 转发,不解析应用层协议,性能极高、无业务侵入,适合高并发流量入口。

2. 七层负载均衡(Nginx)

工作在应用层,解析HTTP/HTTPS协议,支持路由匹配、权重分发、灰度发布、限流、缓存、rewrite重写,业务灵活性极强。

3. 核心调度算法

轮询、加权轮询、IP哈希(会话保持)、最小连接数、最快响应优先。

4. 正向代理 & 反向代理

  • 正向代理:代理客户端,隐藏客户端真实IP(翻墙)。

  • 反向代理:代理服务端,隐藏后端服务集群,对外统一入口(生产主流)。

5. 高可用机制

主动/被动健康检查、故障节点自动摘除、主备切换、集群容灾、异地多活流量调度。

模块二:数据结构与算法(Java集合/中间件底层·资深完整版)

第1章 进程、线程、协程核心原理

1. 核心定义与本质区别

  • 进程 :操作系统资源分配最小单位,拥有独立虚拟地址空间,进程间完全隔离,切换开销极大。

  • 线程 :CPU调度执行最小单位,共享进程堆、方法区资源,私有栈空间,切换开销极小。

  • 协程:用户态轻量级线程,无内核切换、无需OS调度、极致高并发,Java主流通过框架实现(Quasar)。

2. 用户态 & 内核态

用户态:应用程序运行态,权限受限,无法直接操作硬件和内核资源。

内核态:操作系统内核运行态,最高权限,可操作所有硬件、内存、网络资源。

核心痛点:用户态切换内核态需要上下文切换,频繁系统调用严重损耗Java服务性能。

3. 上下文切换

线程/进程切换时,CPU需要保存当前执行现场、加载新现场,产生性能开销。高并发下大量上下文切换是服务卡顿、CPU飙高的核心原因之一。

4. IPC 进程通信方式

管道、消息队列、共享内存(速度最快)、信号量、Socket(跨机器通信)。

5. 死锁原理与解决

四大必要条件:互斥条件、请求保持、不可剥夺、循环等待。

解决方案:破坏任意一个条件、锁排序、超时释放、死锁检测工具。

第2章 内存管理(JVM内存模型底层)

1. 虚拟内存机制

操作系统为每个进程分配独立虚拟内存空间,隔离进程内存,解决物理内存不足问题,实现内存复用。

2. 分页、缺页中断、内存碎片

虚拟内存分页映射物理内存页框,访问未加载内存触发缺页中断,从磁盘加载数据。

内存碎片分为内部碎片(页内剩余空间)、外部碎片(空闲小块内存),会降低内存利用率。

3. Swap 与 OOM Killer

Swap交换分区:物理内存不足时,将冷数据置换到磁盘,频繁Swap会导致服务严重卡顿。

OOM Killer:系统内存耗尽时,内核强制杀死内存占用最大的进程,是线上服务挂掉的常见原因。

4. 写时复制 COW

fork创建子进程时,不立刻复制父进程内存,仅共享内存;当任意进程修改数据时,才复制内存副本,极大节省fork开销。

5. 页缓存与脏页

磁盘数据优先缓存到内存页缓存,提升读写速度;修改后的缓存数据为脏页,内核定时刷入磁盘,是MySQL、Redis持久化的底层核心机制。

第3章 五大IO模型(NIO/Netty底层)

1. 核心区分维度

阻塞/非阻塞 :线程是否等待数据就绪;同步/异步:数据拷贝是否由内核完成通知。

2. 五大模型详解

  • 阻塞IO:线程全程阻塞等待数据就绪+拷贝,简单低效,并发能力差。

  • 非阻塞IO:线程轮询检测数据状态,不阻塞,但空轮询浪费CPU资源。

  • IO多路复用:单线程监听大量文件描述符,仅处理就绪事件,高并发核心方案。

  • 信号驱动IO:数据就绪内核发送信号通知线程,使用较少。

  • AIO异步IO:内核完成数据拷贝后主动通知应用,真正异步,Java落地较少。

3. select/poll/epoll 深度对比

  • select:fd数量受限、每次遍历全部fd、效率低。

  • poll:无fd上限,仍全量遍历,无本质优化。

  • epoll:事件驱动、仅遍历就绪fd、支持LT水平触发/ET边缘触发,Linux高并发标配,Netty底层依赖。

4. 零拷贝原理(生产高频优化)

核心:减少用户缓冲区与内核缓冲区之间的数据拷贝,降低CPU开销、提升传输效率。

主流实现:mmap内存映射、sendfile。

落地场景:文件上传下载、网络文件传输、Redis/RDB持久化、Nginx静态资源传输。

第4章 系统底层基础与容器原理

  • 中断机制:硬中断响应硬件事件,软中断处理内核异步任务。

  • 文件系统:inode存储文件元信息,block存储文件数据;软链接跨分区、硬链接不跨分区。

  • 资源限制:ulimit限制文件句柄数、进程数,防止服务资源耗尽。

  • 容器底层:Namespace实现进程/网络/用户隔离,Cgroup实现CPU/内存资源限制。

模块三:数据结构与算法(Java集合/中间件底层·资深完整版)

前言:本模块资深学习定位

中级开发 只会刷题、认结构;资深/大厂面试 核心考察:数据结构底层存储、时间复杂度、优缺点、适用场景、Java集合对应实现、中间件底层依托、线上性能问题。本章节补齐市面90%笔记缺失的「工程落地底层」,完全对标阿里/字节/腾讯Java资深面试标准。

第1章 算法复杂度分析(所有算法的前置基石)

1. 核心定义

复杂度是衡量算法执行效率的数学模型,分为时间复杂度 (执行次数)和空间复杂度(额外内存开销),不看绝对耗时,看数据量增长趋势。

2. 底层原理

算法执行耗时随数据量n线性/指数/对数增长,大厂只看最坏时间复杂度,同时兼顾平均复杂度;空间复杂度重点看是否产生额外数组、递归栈、辅助对象。

3. 常见复杂度排序(必背)

O(1) 常数 < O(logn) 对数 < O(n) 线性 < O(nlogn) 线性对数 < O(n²) 平方 < O(2ⁿ) 指数

4. 面试&生产落地

  • 为什么HashMap查询O(1)、树结构O(logn)?哈希直接寻址优于树遍历。

  • 生产禁止嵌套循环O(n²),数据量上万必卡顿,必须优化为O(n)、O(nlogn)。

  • 递归算法重点关注栈空间开销,避免大数据量栈溢出。

第2章 线性数据结构(Java集合底层全覆盖)

1. 数组(ArrayList底层)

核心定义

一段连续内存空间存储相同类型数据,支持下标随机访问。

底层原理

内存地址连续,通过首地址+下标偏移量直接定位元素;Java数组固定长度,ArrayList基于动态数组实现扩容机制。

特点与优劣
  • 优点:随机访问快 O(1)、CPU缓存命中率高、遍历效率极高

  • 缺点:插入/删除中间元素需移动数据 O(n)、固定长度、扩容存在拷贝开销

Java&生产落地

ArrayList基于动态数组,默认初始容量10,1.5倍扩容;适合读多写少、遍历查询场景。

2. 链表(LinkedList底层)

核心定义

离散内存存储,通过节点指针关联前后元素,分为单向链表、双向链表、循环链表。

底层原理

每个节点包含数据域与指针域,无需连续内存,新增节点仅修改指针指向,无需数据迁移。

特点与优劣
  • 优点:任意位置增删快 O(1)、无内存碎片、无扩容拷贝开销

  • 缺点:无随机访问、查询遍历O(n)、指针占用额外内存、CPU缓存不命中

Java&生产落地

LinkedList基于双向链表,适合写多读少、频繁插入删除;栈、队列、阻塞队列底层大量依赖链表结构。

3. 栈(LIFO 后进先出)

核心定义

限制仅在一端进出的线性结构,后进先出。

底层原理

仅允许栈顶入栈、出栈操作,栈底固定,保证操作有序性。

生产&Java落地

JVM栈帧、方法调用栈、递归回溯、表达式求值、括号匹配、浏览器前进后退。

4. 队列(FIFO 先进先出)

核心定义

队尾入队、队首出队,先进先出线性结构。

进阶分类(资深必知)
  • 普通队列:FIFO顺序执行

  • 循环队列:解决数组队列假溢出问题(线程池任务队列底层)

  • 阻塞队列:满阻塞、空阻塞(Java并发包核心)

  • 优先队列:堆实现,按权重排序(ThreadPoolExecutor任务调度)

生产落地

流量削峰、任务排队、线程池、MQ消息队列、异步解耦。

第3章 哈希表结构(HashMap/HashTable/ThreadLocalMap底层)

1. 核心定义

通过哈希函数将key映射为数组下标,实现平均O(1)读写的键值对存储结构。

2. 底层原理

哈希函数扰动计算下标 → 定位数组桶位 → 无冲突直接写入 → 有冲突使用冲突解决方案。

3. 两种哈希冲突解决方案(面试必考对比)

(1)链地址法(HashMap)

桶位冲突后挂载链表,链表过长转为红黑树(JDK8);优点:冲突容忍度高、扩容平滑。

(2)开放寻址法(ThreadLocalMap)

冲突后向后寻找空桶,线性探测;优点:无指针开销、内存紧凑;缺点:冲突堆积、扩容成本高。

4. Java HashMap 资深底层考点(补全)

  • 数组+链表+红黑树复合结构

  • 阈值8转红黑树、阈值6退化为链表

  • 默认容量16、负载因子0.75、2倍扩容

  • 扰动函数减少哈希碰撞

  • 线程不安全:并发插入丢失数据、死循环扩容(JDK7)

5. 生产优缺点

优点:读写极快、适合缓存、映射场景;缺点:无序、内存利用率一般、哈希冲突会退化性能。

第4章 树结构大全(MySQL/Redis/Java集合核心底层)

1. 基础二叉树、二叉搜索树BST

BST规则:左子树全部小于根、右子树全部大于根;缺点:极端场景退化为链表,查询退化为O(n),因此诞生平衡树。

2. 红黑树(Java资深重点)

核心定义

自平衡二叉搜索树,通过染色+左旋+右旋维持近似平衡,保证增删查稳定 O(logn)。

五大性质(背诵精简版)
    1. 节点红黑二色;2. 根节点黑色;3. 叶子空节点黑色;4. 红节点子节点必黑;5. 任意节点到叶子路径黑色节点数相同
落地场景

JDK8 HashMap、TreeMap、TreeSet;优势:平衡成本低、性能稳定,适合内存高频读写。

3. B+树(MySQL索引灵魂)

核心定义

多路平衡查找树,专为磁盘IO优化设计,是数据库索引专属结构。

底层特性(面试必背)
  • 非叶子节点只存索引key,不存数据,节点层级极小、磁盘IO极少

  • 所有数据全部落在叶子节点

  • 叶子节点有序双向链表串联,支持范围查询、区间遍历

  • 层高极低(千万数据层高3~4),查询稳定极快

生产落地

MySQL InnoDB 聚簇索引、二级索引全部基于B+树;解释了为什么数据库适合范围查询、排序、分页。

4. 跳表(Redis ZSet底层)

核心定义

多层有序链表,通过随机层数建立索引,实现查询 O(logn)。

对比红黑树优势

实现简单、无复杂旋转染色、支持范围遍历、内存开销可控,更适合磁盘/网络中间件,因此Redis选用跳表而非红黑树。

第5章 工程高阶数据结构(分布式/中间件专属·资深分水岭)

1. 堆&优先队列

完全二叉树实现,分为大顶堆、小顶堆;核心作用:动态获取最值。

落地:Java PriorityQueue、线程池任务优先级、TOPK问题、定时器延时任务。

2. 字典树 Trie

按字符逐层匹配的树结构,前缀匹配效率极高。

落地:网关路由匹配、搜索提示、敏感词过滤、字符串批量检索。

3. 并查集

支持快速合并集合、查询连通性,带路径压缩、按秩合并优化,近乎O(1)。

落地:区间连通、朋友圈问题、图连通性、分布式节点分组。

4. 布隆过滤器(缓存穿透解决方案)

底层原理

超大位数组+多个哈希函数,将元素映射为多个bit位标记。

核心特性(必背)

可以判断一定不存在,不能判断一定存在(存在误判、无漏判)。

生产落地

Redis前置防缓存穿透、垃圾邮件过滤、URL去重、海量数据判重。

5. 一致性哈希(分布式核心)

解决问题

普通哈希取模,节点增减会导致大量缓存失效、数据倾斜。

底层原理

0~2³²哈希环,对象哈希落点归属顺时针最近节点;新增节点仅影响局部数据。

优化机制

虚拟节点解决数据倾斜、节点负载不均问题。

落地

Redis集群、Nginx负载均衡、分布式限流、分片存储。

6. 单调栈 &amp; 单调队列(工程高频)

维持内部元素单调递增/递减,可快速求解:左右最大值、滑动窗口最大值、接雨水、温度趋势。

落地:风控数据统计、监控指标滑动窗口计算。

第6章 经典算法详解(面试手撕+工程优化)

1. 八大排序算法(时间复杂度+稳定性+场景)

稳定排序 :冒泡、插入、归并;不稳定:选择、快排、堆排、希尔

  • 冒泡/插入/选择:简单、O(n²)、仅适合小数据量

  • 快速排序:分治思想、平均O(nlogn)、实际最快、不稳定

  • 归并排序:稳定O(nlogn)、适合外部排序、海量数据

  • 堆排序:O(nlogn)、适合TOPK场景

2. 二分查找(工程最常用)

有序数组专属、O(logn);变种:左右边界查找、旋转有序数组、局部极值查找。

生产:有序列表检索、边界匹配、二分答案解题。

3. 五大算法思想(资深必备)

  • 分治:分而治之、递归合并(快排、归并、海量数据拆分)

  • 贪心:每步局部最优,不一定全局最优(活动选择、区间覆盖)

  • 回溯:深度优先、尝试+回退(全排列、组合、子集)

  • 动态规划DP:重叠子问题+最优子结构,空间换时间(背包、最长子序列)

  • 双指针/滑动窗口:子数组、子串、区间统计、最长最短问题

4. 图论基础(后端进阶)

  • 存储:邻接表(工程常用)、邻接矩阵(稠密图)

  • DFS深度优先:递归/栈实现,连通性、路径搜索

  • BFS广度优先:队列实现、最短无权路径、层序遍历

  • 拓扑排序:有向无环图、任务依赖排序

第7章 工业级工程算法(资深与中级分水岭)

1. 缓存淘汰算法

  • LRU:最近最少使用,LinkedHashMap底层、Redis内存淘汰

  • LFU:最少使用频次,解决LRU缓存偶用数据污染问题

2. 限流算法(线上高并发核心)

  • 固定窗口计数器:简单、临界突刺问题

  • 滑动窗口计数器:平滑限流、解决临界突刺

  • 漏斗限流:匀速流出、削峰不控并发

  • 令牌桶限流:可突发、可匀速,工程最常用(Sentinel底层)

3. 海量数据处理思路(大厂手撕)

分治拆分、哈希分片、位图统计、堆TopK、外排序、多路归并,解决亿级数据去重、排序、频次统计、最大最小值问题。

数据结构与算法简洁版

第1章 基础线性数据结构

1. 数组

连续内存空间、下标随机访问O(1)、增删需要移动元素效率低、固定长度,对应Java ArrayList底层。

2. 链表

离散内存存储、无扩容开销、增删O(1)、查询效率低,对应Java LinkedList底层。

3. 栈&队列

栈:后进先出,用于栈帧、递归、表达式解析;队列:先进先出,用于线程池、消息排队。

第2章 哈希结构与哈希冲突

哈希表通过哈希函数将key映射为下标,实现高效读写。

哈希冲突解决方案:链地址法(HashMap)、开放寻址法(ThreadLocalMap)。

第3章 树形结构(面试终极重点)

1. 红黑树

自平衡二叉搜索树,通过染色、旋转维持近似平衡,增删查稳定O(logn),是 JDK8 HashMap、TreeMap 底层。

2. B+树

多路平衡查找树,非叶子节点仅存索引、叶子节点存全部数据且有序链表串联,磁盘IO次数极少,是 MySQL 索引底层核心。

第4章 工程高阶数据结构(中间件专属)

  • 跳表:多层有序链表,查询效率媲美红黑树、实现简单,Redis ZSet底层。

  • 字典树Trie:前缀匹配,用于路由匹配、搜索提示、字符串检索。

  • 堆/优先队列:动态获取最值,用于线程池任务调度、TOPK问题。

  • 并查集:快速合并、查询集合连通关系,解决区间连通问题。

  • 布隆过滤器:位图存储,判断元素一定不存在、存在误判,解决缓存穿透。

  • 一致性哈希:解决分布式节点扩容缩容数据倾斜,用于分布式缓存、负载均衡。

第5章 算法体系

1. 基础必备

复杂度分析、八大排序(快排/归并/堆排重点)、二分查找。

2. 高阶思想

双指针、滑动窗口、单调栈、单调队列、递归回溯、分治、贪心、动态规划、位运算。

3. 图论基础

邻接表存储、DFS、BFS、拓扑排序、最短路径。

4. 工业级算法

LRU/LFU缓存淘汰、滑动窗口限流、漏斗限流、海量数据TopK、去重、排序。

模块四:Linux生产实战(排查+调优+运维·资深完整版)

前言:Linux模块资深学习定位

中级开发只会简单 ls、cd 命令;资深Java工程师核心能力:线上故障排查、性能瓶颈定位、内核调优、资源治理、服务高可用运维。本模块完全对标生产环境,覆盖「日常运维、性能监控、CPU/内存/IO/网络排查、内核调优、故障复盘、自动化运维」,所有知识点均联动Java服务线上问题,是大厂面试、生产调优核心考点。

第1章 Linux基础核心能力(生产必备)

1. 核心定义

Linux是后端服务标准运行系统,所有Java、中间件、分布式服务均部署在Linux环境,系统资源、内核参数直接决定服务性能与稳定性。

2. 文件体系与权限原理

Linux一切皆文件,分为普通文件、目录文件、链接文件、设备文件、管道文件;权限采用「用户+组+其他」三级权限模型,r读w写x执行权限对程序运行、日志写入、进程启动至关重要。

3. 高频生产命令(分类完整版)

  • 文件操作:ls、cd、pwd、mkdir、rm、cp、mv、touch、stat,生产严禁直接 rm -rf / 批量删库,需先备份、再过滤删除

  • 日志查看:cat、more、less、tail -f、tail -n、head、grep、sed、awk,线上日志筛选、关键词检索、日志统计核心工具

  • 权限管理:chmod(修改权限)、chown(修改属主属组)、chgrp(修改所属组),解决服务无权限写日志、无权限启动问题

  • 压缩解压:tar、zip、unzip、gzip,线上日志打包、备份、迁移必备

  • 查找命令:find(磁盘文件查找)、which(命令路径查找)、whereis(系统文件查找)

4. 面试&生产落地

线上服务启动失败、日志无法写入、文件丢失、权限拒绝报错,90%都是文件权限、目录不存在、用户权限不足导致;生产必须规范文件目录权限,统一服务运行用户。

第2章 进程管理与服务常驻(Java进程核心)

1. 核心定义

进程是Linux资源分配单元,Java服务、Nginx、Redis、MySQL均以独立进程运行,进程状态、资源占用直接决定服务运行状态。

2. 进程核心状态

  • R运行态:正在占用CPU执行

  • S睡眠态:等待资源就绪(网络、IO、锁)

  • D不可中断睡眠:磁盘IO阻塞,无法被唤醒,极易导致服务卡顿

  • Z僵尸进程:子进程退出、父进程未回收,占用进程号资源

  • T暂停态:被暂停运行

3. 高频进程命令

  • ps -ef / ps aux:查看全量进程、PID、占用资源、父进程

  • top:实时动态监控进程CPU、内存占用、负载情况

  • kill / kill -9:普通关闭、强制杀死进程(生产慎用-9,会丢失内存数据)

  • pkill、pgrep:批量检索、批量终止进程

4. 僵尸进程&孤儿进程生产问题

僵尸进程过多会耗尽系统PID资源,导致无法新建进程;解决方案:父进程正常回收子进程、启动进程托管、配置系统自动回收。

5. 服务常驻运维

nohup、&后台运行、screen、systemd托管;生产Java服务统一使用systemd实现开机自启、异常重启、日志托管、进程守护,避免窗口关闭服务退出。

第3章 系统性能三剑客(线上性能排查核心)

1. vmstat 全局性能监控

核心作用

监控系统全局状态:CPU、内存、磁盘IO、上下文切换、中断、Swap使用情况,快速定位整机瓶颈。

核心指标(生产必看)
  • cs(上下文切换):数值过高,线程频繁切换,CPU利用率低、服务卡顿

  • si/so(Swap进出):不为0表示内存不足,发生内存置换,服务严重卡顿

  • us/sy:用户态、内核态CPU占比,us高应用代码问题,sy高系统内核/IO问题

2. iostat 磁盘IO专项排查

核心作用

精准定位磁盘读写压力、IO等待耗时,是排查IO瓶颈、数据库卡顿、日志刷屏核心工具。

核心指标
  • %util:磁盘繁忙率,接近100%表示磁盘打满,IO瓶颈

  • await:IO平均等待时间,耗时越高队列阻塞越严重

  • rMB/s、wMB/s:实时读写速度,判断是否存在大量日志刷盘、持久化刷屏

3. sar 历史性能复盘

核心作用

唯一可以复盘历史性能数据的工具,可查询过去CPU、内存、网络、磁盘状态,用于事后故障复盘。

常用场景

sar -u 查CPU、sar -r 查内存、sar -n DEV 查网络流量。

第4章 网络深度排查体系(线上超时/丢包/连接异常全解)

1. 网络连通性排查链路(标准生产流程)

ping 连通性检测 → mtr 精准丢包定位(替代ping,生产首选) → traceroute 路由追踪 → 端口连通检测 → 抓包分析。

2. 端口与连接状态排查

核心命令

ss -s、ss -tulnp:替代老旧netstat,高效统计TCP全状态连接,速度极快。

TCP核心状态生产解读
  • SYN_RECV:收到连接请求,队列满导致无法建立连接,防SYN攻击

  • ESTABLISHED:正常活跃连接,数量异常偏高存在连接不释放泄露

  • TIME_WAIT:主动关闭连接,高并发短连接堆积耗尽端口

  • CLOSE_WAIT:被动关闭未释放,代码连接泄露Bug

3. 线上抓包分析

tcpdump 线上无损抓包,精准定位请求丢失、重传、粘包、握手失败、超时断开等网络问题,是分布式接口调用异常终极排查手段。

4. 防火墙与安全策略

iptables、firewalld端口放行、IP白名单、流量转发;线上接口不通、跨机器访问失败,优先排查防火墙策略。

第5章 Linux内核生产调优(资深高薪核心)

1. 网络内核调优(高并发服务必备)

核心问题

高并发短连接场景端口耗尽、TIME_WAIT堆积、SYN攻击、连接队列溢出。

核心调优参数(可直接上线配置)
  • net.ipv4.tcp_tw_reuse=1:复用TIME_WAIT连接,释放端口资源

  • net.ipv4.tcp_syncookies=1:开启SYN防攻击,抵御恶意连接洪水

  • net.ipv4.ip_local_port_range:扩容本地可用端口范围

  • net.core.somaxconn:增大服务监听队列,解决连接队列溢出报错

  • net.ipv4.tcp_fin_timeout:缩短超时回收时间,快速释放无效连接

2. 内存内核调优(防止OOM与卡顿)

  • vm.swappiness=10:降低Swap使用率,优先使用物理内存,避免磁盘置换卡顿

  • vm.dirty_ratio、vm.dirty_background_ratio:优化脏页刷盘阈值,平滑IO峰值,避免瞬间批量刷盘卡顿

  • 调整OOM优先级,核心服务禁止被OOM Killer杀死

3. 文件句柄与资源限制调优

核心问题

Java、Netty、MQ、数据库都是IO密集型服务,默认句柄数过低,会出现Too many open files崩溃报错。

调优方案

修改ulimit -n 提升最大文件句柄数、修改系统全局limits.conf,永久生效,适配高并发长连接服务。

4. IO内核调优

调整磁盘IO调度算法、提升队列深度、优化读写缓存策略,减少读写放大,适配SSD固态硬盘生产环境。

第6章 线上故障排查标准流程(资深工程师方法论)

1. 服务卡顿/响应慢排查链路

查看CPU负载 → 查看内存&Swap → 查看磁盘IO繁忙率 → 查看网络连接状态 → 查看日志报错 → 定位代码/内核瓶颈。

2. 服务宕机排查链路

查看系统日志messages → 查看OOM杀死记录 → 查看进程退出日志 → 排查资源耗尽、参数错误、代码死锁。

3. 接口超时排查链路

网络丢包/重传 → 连接堆积 → 队列溢出 → 线程阻塞 → GC卡顿 → 数据库慢SQL。

第7章 自动化运维与生产规范

1. Shell脚本实战

批量启停服务、批量日志清理、批量文件备份、数据同步、监控告警脚本,提升运维效率,避免重复人工操作。

2. Crontab定时任务

定时日志切割、定时数据备份、定时巡检、定时清理临时文件;生产禁止高频定时任务,避免瞬间资源打满。

3. 日志规范

logrotate日志切割,防止单日志文件过大占满磁盘,自动分割、压缩、过期删除,保障服务长期稳定运行。

4. Systemd服务托管

统一服务配置、开机自启、异常自动重启、日志统一收集、资源限制,是生产Java服务标准部署方式。

第8章 面试&生产高频总结(必背)

  • CPU高:优先排查应用死循环、频繁GC、大量上下文切换

  • 内存高:内存泄漏、缓存溢出、Swap置换、堆内存溢出

  • IO高:日志刷屏、数据库频繁刷盘、大量随机IO

  • 网络异常:连接泄露、TIME_WAIT/CLOSE_WAIT堆积、端口耗尽、队列溢出

  • 服务挂掉:文件句柄耗尽、OOM杀死、端口占用、内核参数限制

Linux生产实战简洁版

第1章 高频基础命令

文件操作、权限管理(chmod/chown)、进程查看、解压压缩、用户管理、日志查看。

第2章 性能分析三剑客

  • vmstat:全局监控CPU、内存、IO、上下文切换、中断。

  • iostat:精准分析磁盘读写负载、IO等待、读写速度。

  • sar:全维度系统资源监控,复盘历史性能数据。

第3章 网络深度排查体系

连通性排查:ping → mtr(精准丢包) → traceroute(路由追踪)

连接统计:ss 替代 netstat,高效统计TCP各状态连接数

抓包分析:tcpdump 线上抓包,分析粘包、重传、异常报文、协议错误

防火墙:iptables、firewalld 规则配置与排查

第4章 内核生产调优(资深核心)

1. 网络调优

提升最大文件句柄、开启tw_reuse复用TIME_WAIT、开启syncookies防SYN攻击、扩容本地端口范围。

2. 内存调优

降低Swap使用率、优化脏页刷盘参数、保护核心进程不被OOM杀死。

3. IO调优

调整磁盘IO调度算法、优化队列深度、减少读写放大。

第5章 自动化运维

Shell脚本批量处理、crontab定时任务、日志切割、systemd服务托管、进程常驻守护。

模块五:资深Java专属底层进阶(中高级分水岭·完整版)

模块前言:资深与中级核心分水岭

普通中级开发仅掌握API调用、业务编码、框架使用 ;资深Java工程师核心壁垒是吃透硬件底层、操作系统内核、并发底层原理,能够解释JMM、volatile、CAS、锁机制、高并发性能问题的底层根源,能解决线上隐形性能瓶颈、并发Bug、硬件层级性能损耗。本模块是JUC并发、JVM调优、中间件高性能架构的终极底层基石,也是大厂资深面试必问压轴知识点。

第1章 计算机组成原理(并发高性能硬件基石)

1. CPU多级缓存体系(核心定义)

CPU为解决运算速度远超内存读写速度的速度鸿沟,设计了L1/L2/L3三级高速缓存,层级越靠近CPU,速度越快、容量越小、造价越高,是Java高并发高性能的硬件核心支撑。

2. 底层原理与层级特性

CPU运算速度 >> L1缓存 > L2缓存 > L3缓存 > 内存 > 磁盘;各级缓存缓存数据以缓存行(Cache Line) 为最小存储单位,主流CPU缓存行固定为64字节。

层级分工:L1/L2为CPU核心独占缓存,读写速度极快;L3为多核共享缓存,用于多核数据交互同步,协调多核心数据一致性。

3. 特点与优劣

  • 优点:极大降低CPU访问内存的频次,规避内存IO低速瓶颈,成倍提升程序运行效率

  • 缺点:多级缓存存在数据不一致问题、缓存行机制会引发伪共享、CPU会基于缓存做指令重排,带来并发安全问题

4. 面试&生产落地

所有Java高并发优化、缓存优化、对象内存布局优化,本质都是利用CPU缓存特性、规避缓存失效问题;Disruptor高性能框架、Netty内存优化、并发工具类底层均依赖CPU缓存原理。

第2章 伪共享(高并发隐形性能杀手)

1. 核心定义

伪共享 :多个线程同时修改同一个CPU缓存行内的不同独立变量,导致缓存行频繁失效、触发缓存刷新,造成严重的CPU性能损耗,是高并发场景极易忽略的隐形瓶颈。

2. 底层原理

CPU缓存以64字节缓存行加载数据,若多个互不相关的共享变量存储在同一个缓存行中,任意一个线程修改其中一个变量,都会导致整行缓存失效;其他线程修改同缓存行内其他变量时,必须重新从内存加载数据,频繁触发缓存同步,大幅降低并发执行效率。

3. 解决方案与优劣

核心解决方案:缓存行填充(Padding),通过填充无用字节,让独立共享变量独占一个缓存行,避免多线程竞争同一缓存行。

JDK1.8提供注解@sun.misc.Contended自动完成缓存行填充,简化开发,适配高并发工具类。

4. 面试&生产落地

典型落地场景:JDK线程池、ConcurrentHashMap、Disruptor无锁队列、高性能计数器;生产中高频并发变量必须做缓存行填充优化,否则高并发下性能断崖式下跌。

第3章 CPU指令重排与内存屏障(JMM核心底层)

1. 核心定义

CPU为最大化利用运算资源、提升执行效率,会在不改变单线程执行结果 的前提下,打乱代码指令的原始执行顺序,该行为称为指令重排序,是并发有序性问题的根本诱因。

2. 重排分类与底层原理

指令重排分为三级:编译器重排(JVM编译优化)、CPU指令级重排、CPU内存系统重排;单线程下重排无任何影响,多线程共享变量场景会引发数据错乱、逻辑异常。

3. 内存屏障机制(解决方案)

内存屏障是CPU提供的指令,用于禁止指令重排、强制刷新缓存数据,彻底解决重排导致的有序性、可见性问题,分为四类:

  • LoadLoad屏障:禁止读-读重排

  • StoreStore屏障:禁止写-写重排

  • LoadStore屏障:禁止读-写重排

  • StoreLoad屏障:禁止写-读重排(最强屏障,volatile底层核心)

4. 面试&生产落地

volatile关键字底层完全依赖内存屏障实现:禁止指令重排、强制变量读写穿透缓存同步内存数据,保证多线程可见性与有序性;DCL单例模式必须加volatile,本质就是规避指令重排导致的空指针问题。

第4章 缓存一致性协议(多核并发数据安全基石)

1. 核心定义

多核CPU场景下,每个核心拥有独立缓存,为保证多个缓存副本数据一致,CPU硬件层面实现MESI缓存一致性协议,解决多核缓存数据不一致问题。

2. 底层原理(MESI四状态)

缓存行存在四种状态,通过总线消息实时同步状态:

  • M(Modified修改态):当前核心修改数据,未同步内存,数据独占且失效其他核心缓存

  • E(Exclusive独占态):当前核心独占缓存行,数据与内存一致

  • S(Shared共享态):多个核心缓存同一数据,数据与内存一致

  • I(Invalid失效态):当前缓存行数据失效,需重新加载

3. 特点与优劣

优点:硬件层面保证多核缓存数据一致性,无需应用层干预,保障并发数据安全;缺点:缓存状态同步会产生总线开销,高并发竞争下性能损耗明显。

4. 面试&生产落地

CAS、锁机制、volatile可见性的底层硬件支撑就是MESI协议;大量线程竞争同一共享变量时,频繁的缓存状态切换会导致CPU飙高、性能下降,是并发优化的核心切入点。

第5章 原子操作硬件底层(CAS核心原理)

1. 核心定义

Java无锁CAS操作的底层依托CPU硬件级原子指令,实现无锁状态下的变量原子读写与更新,替代重量级锁,大幅提升并发性能。

2. 底层原理:总线锁 & 缓存锁

  • 总线锁:早期CPU通过锁定系统总线,禁止其他核心读写内存,实现原子操作,开销极大、性能低

  • 缓存锁:现代CPU基于MESI协议,锁定缓存行替代总线锁,仅锁定当前数据缓存行,不影响其他数据读写,性能极高,是CAS底层实现

3. CAS机制优缺点

  • 优点:无线程阻塞、无上下文切换、并发性能远优于synchronized重量级锁

  • 缺点:存在ABA问题、循环自旋空耗CPU、只能保证单个变量原子性

4. 面试&生产落地

Atomic系列原子类、AQS同步器、ConcurrentHashMap、自旋锁底层全部基于CAS实现;生产中低并发竞争场景用锁,高并发轻竞争场景优先用CAS无锁操作。

第6章 存储硬件IO原理(中间件调优终极底层)

1. HDD机械硬盘 vs SSD固态硬盘

核心原理与特性对比
  • HDD机械硬盘:依靠磁头机械寻址读写,顺序IO速度快,随机IO需要频繁移动磁头,耗时极高、性能极差,存在机械损耗

  • SSD固态硬盘 :闪存芯片读写,无机械结构,随机IO性能碾压HDD,读写延迟极低;存在读写放大、擦除磨损问题

2. 工程顶级核心准则(必背)

所有数据库、缓存、消息队列、文件存储的性能优化,本质只有一条:规避随机IO、放大顺序IO。MySQL索引、Redis持久化、MQ日志存储、分库分表,全部基于该底层逻辑设计。

3. 操作系统页缓存与脏页机制

Linux为弥补磁盘低速缺陷,引入**页缓存(PageCache)**机制,程序读写磁盘数据优先操作内存页缓存,减少直接磁盘IO,大幅提升吞吐。

被修改的页缓存数据为脏页,内核会定时或阈值触发刷盘,将脏页同步到磁盘,是所有中间件异步持久化的核心底层机制。

4. 面试&生产落地

MySQL批量插入、Redis RDB/AOF持久化、MQ顺序写日志,都是为了适配磁盘顺序IO特性;线上磁盘IO飙高、服务卡顿,大概率是大量随机IO、脏页集中刷盘导致。

第7章 Java并发三大核心特性(JMM体系总纲)

1. 核心定义

Java多线程并发安全的三大基石:原子性、可见性、有序性,所有并发Bug、并发工具、锁机制、JMM模型,都是为了解决这三个特性的缺失问题。

2. 底层问题根源

三大并发安全问题,全部源于硬件与系统底层机制:

  • 原子性问题:多线程交叉执行,复合操作不具备不可分割性

  • 可见性问题:CPU多级缓存导致线程本地缓存与内存数据不一致

  • 有序性问题:CPU+编译器指令重排打乱代码执行逻辑

3. 解决方案全覆盖

  • 原子性:synchronized锁、Lock锁、CAS原子操作

  • 可见性:volatile关键字、锁机制(加锁刷新缓存)

  • 有序性:volatile内存屏障、锁机制(保证串行执行,规避重排)

4. 面试&生产落地

判断并发代码是否线程安全,只需校验是否同时满足三大特性;生产中volatile只能解决可见性、有序性,无法保证原子性,不能用于计数、自增等复合操作。

第8章 JMM Java内存模型(并发底层终极模型)

1. 核心定义

JMM(Java Memory Model) 是Java虚拟机定义的一套多线程内存访问规范,屏蔽不同硬件、操作系统的内存差异,统一Java并发内存语义,解决多线程数据安全问题。

2. 底层内存划分原理

JMM将内存分为两大区域:

  • 线程私有工作内存:每个线程独占,存储变量副本,读写优先操作本地缓存,速度快

  • 主内存:共享内存,存储所有共享变量原始数据,线程间通信必须通过主内存中转

线程间无法直接交互,必须:工作内存 ↔ 主内存 ↔ 其他线程工作内存,该机制是可见性问题的直接来源。

3. JMM八大内存交互操作

主内存与工作内存的数据读写,严格遵循load、store、read、write、lock、unlock、use、assign八大原子操作,保证内存交互规范。

4. happens-before先行发生原则(面试核心)

JMM通过happens-before规则界定指令执行顺序,无需依赖内存屏障即可保证有序性,核心常用规则:

  • 程序顺序规则:单线程内操作有序

  • 锁规则:解锁操作先行于后续加锁操作

  • volatile规则:写操作先行于后续读操作

  • 线程启动规则:start()先行于线程所有操作

  • 线程终止规则:线程所有操作先行于线程终止检测

5. 面试&生产落地

JMM是所有Java并发工具的理论基石,synchronized、volatile、AQS、线程池的底层语义全部基于JMM实现;理解JMM才能彻底搞定并发安全、指令重排、可见性疑难问题。

第9章 资深底层核心思维总结

  • 所有并发问题,根源都是硬件问题:CPU缓存、指令重排、上下文切换是并发Bug与性能瓶颈的本质

  • 所有存储优化,根源都是IO优化:规避随机IO、利用页缓存、减少刷盘次数是存储中间件核心优化逻辑

  • 所有Java语法特性,都是底层封装:volatile、锁、CAS本质都是对CPU硬件、系统内核能力的封装

  • 资深工程师核心能力:透过业务API,看懂底层硬件、内核、JVM机制,预判风险、优化性能、解决疑难故障

全书终章:Java资深工程师底层思维总结

1. 网络思维:所有分布式通信、网关、RPC、MQ 都建立在 TCP/IP、HTTP 底层机制之上,线上超时、丢包、连接泄露均源于网络底层。

2. 系统思维:JVM内存、线程调度、IO读写、卡顿瓶颈,全部受操作系统内核机制约束。

3. 数据结构思维:Java集合、Redis、MySQL索引、限流缓存,全部依赖底层数据结构特性。

4. 生产思维:所有线上调优、故障排查,最终回归 Linux 内核参数、硬件IO、CPU缓存底层。

5. 资深分水岭思维 :中级只会用API,资深能通过底层原理解释现象、预判风险、做架构优化、解决疑难线上问题。

相关推荐
lisw051 小时前
发酵算法两大应用方向解析
算法·数学建模
BioRunYiXue1 小时前
使用docker分析高通量测序数据
java·数据库·人工智能·spring cloud·docker·tomcat·html
Shaoshing2 小时前
缓存一致问题及常见解决方案
java·缓存
动词ing2 小时前
【题目练习】全排列
算法
聚美智数2 小时前
文档转换 API‑文档转 PDF‑PDF 转文档‑异步文档处理‑文件格式迁移‑转换结果回调推送 API 接口介绍
android·java·pdf
从零数据分析2 小时前
零基础学SQL 23:和上月比总对不上?LAG/LEAD 一步取出上一次(附 4 个模板)
java·数据库·sql·mysql·oracle·sqlite·database
帷幕落秋2 小时前
Linux 网络基础
linux
yuzhiboyouye2 小时前
com.fasterxml.jackson.annotation 里最常用高频的注解,可以按“控制字段、控制格式、控制结构、控制流程”来记
java·开发语言
高晶2 小时前
ARM 嵌入式 Linux 命令系统 BusyBox 实战指南
linux·设计模式·程序员
苜蓿muxu2 小时前
简述 ConcurrentHashMap 和 CopyOnWriteArrayList 的区别以及各自适用场景
java·编程语言