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

课程前言

课程定位 :区别于零基础通识课,完全面向 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,资深能通过底层原理解释现象、预判风险、做架构优化、解决疑难线上问题

相关推荐
晚风_END1 小时前
Linux|操作系统|最新版openzfs编译记录
linux·运维·服务器·数据库·spring·中间件·个人开发
GanGanGanGan_2 小时前
Rocky Linux 9 + XFCE 编译安装 fcitx5 + Rime 教程
linux·centos
AC赳赳老秦2 小时前
知识产权辅助:用 OpenClaw 批量生成专利交底书 / 软著申请材料,自动校验格式与内容合规性
java·人工智能·python·算法·elasticsearch·deepseek·openclaw
WBluuue2 小时前
Codeforces 1093 Div2(ABCD1D2)
c++·算法
浅念-2 小时前
「一文吃透 BFS:从层序遍历到锯齿形、最大宽度、每层最大值」
数据结构·算法
汉克老师2 小时前
GESP5级C++考试语法知识(十三、贪心算法(一))
算法·贪心算法·海盗船·gesp5级·gesp五级·排队接水
咖喱o2 小时前
QinQ/VLAN Stacking
linux·运维·服务器·网络
xiaoye-duck2 小时前
《Linux系统编程》Linux指令 (二):从零开始理解Linux基础指令
linux