计算机大厂工作实习--02 八股必背(题目答案版) 文章目录计算机网络1. 从输入 URL 到页面展示发生了什么2. 三次握手的过程以及为什么是三次而不是四次两次3. 四次挥手的过程以及为什么是四次4. TCP 与 UDP 的概念、特点、区别和对应的使用场景5. HTTP 常见的状态码和常见字段有哪些6. HTTP 有哪些请求方法GET 和 POST 请求的区别是什么7. 什么是强缓存和协商缓存8. HTTP 1.0 和 HTTP 1.1 的区别9. HTTP 2.0 与 HTTP 1.1 的区别10. HTTPS 是怎么建立连接的11. HTTPS 与 HTTP 的区别12. DNS 是什么DNS 查询过程是什么13. HTTP 多个 TCP 连接是如何实现的14. TCP 的 Keepalive 和 HTTP 的 Keep-Alive 是一个东西吗15. TCP 连接如何确保可靠性16. 既然提到了拥塞控制那你能说说拥塞控制是怎么实现的吗17. Cookie 和 Session 是什么有什么区别18. Ping 是怎么工作的19. 什么是 SYN 攻击如何避免20. 什么是对称加密和非对称加密21. HTTPS 是如何保证数据完整性的22. 数字证书验证流程是什么操作系统1. 进程和线程的区别2. 进程调度算法你了解多少3. 进程间有哪些通信方式4. 什么是死锁如何避免死锁5. 什么是虚拟内存为什么需要虚拟内存6. 什么是内存分段和分页它们的作用是什么7. 解释一下用户态和内核态8. 解释一下页面置换算法例如 LRU最近最少使用、FIFO先进先出等9. 解释一下进程同步和互斥以及解决这些问题的方法10. 什么是中断和异常它们有什么区别11. 介绍一下几种典型的锁12. 你知道的线程同步方式有哪些数据库1. 一条 SQL 查询语句是如何执行的2. 说一说事务隔离级别3. 事务的四大特性有哪些4. 索引有哪些种类5. MySQL 为什么使用 B 树作为索引它的优势是什么6. 什么时候需要创建索引什么时候不需要创建索引7. 说一下你了解的 MVCC 机制并说明原理8. 索引失效的场景有哪些9. MySQL 的执行引擎有哪些10. MySQL 日志文件有哪几种有什么作用11. MySQL 有哪些锁作用分别是什么Redis1. Redis 为什么这么快2. Redis 的数据类型有哪些3. 说一说 Redis 持久化机制4. Redis 过期键的删除策略5. 什么是缓存击穿、缓存穿透、缓存雪崩6. 如何保证缓存和数据库双写时的一致性7. Redis 是单线程的还是多线程的8. Redis 事务的相关命令有哪些9. Redis 事务支持隔离性吗为什么不支持回滚10. 介绍一下 Redis 的哨兵机制11. Redis 哨兵是如何工作的12. 了解主从复制的原理吗说明计算机网络操作系统、数据库的详细答案直接看文档。计算机网络1. 从输入 URL 到页面展示发生了什么① 浏览器解析 URL检查本地缓存并通过 DNS 将域名解析成服务器 IP。② 浏览器与服务器建立 TCP 连接如果是 HTTPS还需要进行 TLS 握手。③ 浏览器发送 HTTP 请求服务器处理业务逻辑并返回 HTTP 响应。④ 浏览器解析 HTML 生成 DOM 树解析 CSS 生成 CSSOM 树同时下载并执行 JavaScript。⑤ DOM 和 CSSOM 结合生成渲染树经过布局、绘制和图层合成最终将页面展示出来。面试时可以概括为URL 解析 → 缓存 → DNS → TCP/TLS → HTTP 请求与响应 → DOM/CSSOM → 渲染树 → 布局 → 绘制 → 页面展示。2. 三次握手的过程以及为什么是三次而不是四次两次① 第一次握手客户端发送 SYN请求建立连接并发送自己的初始序列号。② 第二次握手服务器返回 SYN ACK确认客户端的请求同时发送自己的初始序列号。③ 第三次握手客户端返回 ACK确认收到了服务器的序列号双方建立连接。④ 不能两次是因为服务器无法确认客户端是否收到了自己的响应也无法避免失效的历史连接请求造成资源浪费。⑤ 不需要四次是因为服务器的确认报文 ACK 和连接请求报文 SYN 可以合并发送。最核心的一句话是三次握手是为了确认双方的收发能力正常并同步和确认双方的初始序列号两次不够可靠四次又可以合并为三次。3. 四次挥手的过程以及为什么是四次① 第一次挥手主动关闭方发送 FIN表示自己没有数据要发送了。② 第二次挥手被动关闭方返回 ACK但此时可能还有数据需要继续发送。③ 第三次挥手被动关闭方发送完剩余数据后再发送 FIN。④ 第四次挥手主动关闭方返回 ACK并进入 TIME_WAIT等待 2MSL 后关闭。⑤ 之所以需要四次是因为 TCP 是全双工通信两个方向需要分别关闭服务器收到 FIN 后ACK 可以立即发送但 FIN 需要等剩余数据发送完成后才能发送。最核心的一句话TCP 是全双工通信双方的发送方向需要分别关闭所以通常需要四次挥手。![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/ebc1e2fea7cb423ca46d1aed1f5707a9.png4. TCP 与 UDP 的概念、特点、区别和对应的使用场景① TCP 是面向连接、可靠、基于字节流的传输协议通过确认应答、超时重传、流量控制和拥塞控制保证数据可靠、有序到达。② UDP 是无连接、不保证可靠、面向数据报的传输协议不提供确认和重传机制因此开销更小、传输速度更快。③ TCP 适用于网页访问、文件传输、支付和数据库连接等对可靠性要求高的场景UDP 适用于音视频通话、直播、游戏和 DNS 等对实时性要求高的场景。④ 两者最核心的区别是TCP 更注重可靠性UDP 更注重实时性和传输效率。5. HTTP 常见的状态码和常见字段有哪些① 状态码主要分为五类1xx 信息响应、2xx 成功、3xx 重定向、4xx 客户端错误、5xx 服务器错误。② 常见状态码有200 成功、201 创建成功、301/302 重定向、304 使用缓存、400 参数错误、401 未认证、403 无权限、404 资源不存在、429 请求过多、500 服务器错误、502 网关错误、503 服务不可用、504 网关超时。③ 常见请求字段有 Host、User-Agent、Accept、Content-Type、Authorization、Cookie、Origin 和 Referer常见响应字段有 Content-Type、Set-Cookie、Location、Cache-Control、ETag 和 Last-Modified。6. HTTP 有哪些请求方法GET 和 POST 请求的区别是什么常见的请求方式① GET获取资源例如查询用户信息、获取文章列表。② POST创建资源或提交数据例如注册用户、提交订单、上传文件。③ PUT整体更新资源例如更新用户的全部信息。④ PATCH局部更新资源例如只修改用户的昵称。⑤ DELETE删除资源例如删除用户、删除文章。Q2:GET 主要用于查询数据参数通常放在 URL 中可以被缓存和保存为书签并且通常具有幂等性POST 主要用于提交或新增数据参数通常放在请求体中可以传输更多数据默认不缓存而且通常不具有幂等性。需要注意GET 并不是因为参数在 URL 中就一定不安全POST 也不是天然安全。真正的数据传输安全需要依靠 HTTPS、鉴权和权限控制。7. 什么是强缓存和协商缓存先了解一下浏览器缓存流程 浏览器请求资源↓检查强缓存是否有效↓有效直接使用本地缓存↓无效发送协商缓存请求↓资源未修改服务器返回 304使用本地缓存↓资源已修改服务器返回 200 和最新资源精简回答① 强缓存命中时浏览器不会向服务器发送请求直接读取本地缓存主要由 Cache-Control 和 Expires 控制。② 协商缓存会向服务器发送请求通过 ETag / If-None-Match 或 Last-Modified / If-Modified-Since 判断资源是否发生变化。资源未变化返回 304发生变化返回 200 和最新资源。③ 一般先判断强缓存强缓存失效后再使用协商缓存。8. HTTP 1.0 和 HTTP 1.1 的区别① HTTP 1.0 默认使用短连接每次请求都要重新建立 TCP 连接HTTP 1.1 默认使用长连接可以复用 TCP 连接。② HTTP 1.1 强制要求携带 Host 请求头支持一台服务器部署多个虚拟主机。③ HTTP 1.1 增加了管道化、分块传输和范围请求支持断点续传。④ HTTP 1.1 的缓存机制更加完善增加了 Cache-Control、ETag 等字段。最核心的区别可以记为长连接、Host、缓存增强、分块传输和断点续传。9. HTTP 2.0 与 HTTP 1.1 的区别① HTTP/2 使用二进制分帧而 HTTP/1.1 使用文本报文。② HTTP/2 支持多路复用可以在一个 TCP 连接中并发传输多个请求和响应减少连接建立开销并解决 HTTP 层面的队头阻塞。③ HTTP/2 使用 HPACK 压缩请求头减少重复头部数据。④ HTTP/2 还支持请求优先级和服务器推送。⑤ HTTP/2 仍然基于 TCP因此发生丢包时仍然存在 TCP 层面的队头阻塞。最核心的一句话HTTP/2 通过二进制分帧、多路复用和头部压缩提高了 HTTP/1.1 的传输效率但没有解决 TCP 层面的队头阻塞。10. HTTPS 是怎么建立连接的HTTPSHTTPTLS① 客户端先通过 TCP 三次握手与服务器建立连接。② 客户端发送 ClientHello服务器返回 ServerHello、数字证书和密钥交换参数。③ 客户端验证证书的有效期、域名、签名和 CA 是否可信。④ 验证通过后双方通过 ECDHE 等算法协商出相同的会话密钥。⑤ TLS 握手完成后双方使用对称加密传输 HTTP 数据。最核心的一句话HTTPS 先通过证书验证服务器身份再通过密钥交换协商会话密钥最后使用对称加密传输 HTTP 数据。11. HTTPS 与 HTTP 的区别HTTPS HTTP TLSHTTP 负责传输应用层数据TLS 负责加密、身份认证和完整性校验。① HTTP 默认使用 80 端口数据通常明文传输HTTPS 默认使用 443 端口是在 HTTP 基础上增加 TLS 加密。② HTTPS 通过数字证书验证服务器身份通过加密保证数据机密性并通过完整性校验防止数据被篡改。③ HTTP 建立 TCP 连接后即可传输数据HTTPS 在 TCP 握手后还需要进行 TLS 握手因此会有一定性能开销。④ 最核心的区别是HTTP 是明文传输HTTPS 提供加密、身份认证和数据完整性保护。12. DNS 是什么DNS 查询过程是什么① DNS 是域名系统主要负责将域名解析为 IP 地址。② 查询时先检查浏览器缓存、操作系统缓存和 hosts 文件没有结果则请求本地 DNS 服务器。③ 本地 DNS 缓存未命中时会依次查询根域名服务器、顶级域名服务器和权威 DNS 服务器最终获得 IP 地址并返回给客户端。④ 查询结果会根据 TTL 缓存以减少后续查询开销。⑤ DNS 通常使用 UDP 53 端口响应较大、区域传送等情况会使用 TCP。最核心的流程是浏览器缓存 → 系统缓存 → hosts → 本地 DNS → 根 DNS → 顶级域 DNS → 权威 DNS → 返回 IP。13. HTTP 多个 TCP 连接是如何实现的HTTP 本身是应用层协议TCP 是传输层协议。所谓“HTTP 使用多个 TCP 连接”本质上是浏览器为同一个网站同时创建多个 TCP Socket每个 Socket 都可以独立发送 HTTP 请求、接收 HTTP 响应。① HTTP 通过浏览器创建多个独立的 TCP Socket 来实现多个 TCP 连接每个连接由源 IP、源端口、目标 IP、目标端口组成的四元组唯一标识。② 即使访问同一个服务器浏览器也可以使用不同的客户端临时端口建立多个连接并将不同 HTTP 请求分配到这些连接中并行传输。③ HTTP/1.1 通常使用连接池维护多个长连接以提高资源加载速度但连接数量会受到浏览器限制。④ HTTP/2 通常不再依靠多个 TCP 连接而是在一个 TCP 连接上通过多路复用并发传输多个请求。最核心的一句话HTTP/1.1 通过多个不同源端口的 TCP 连接实现并发HTTP/2 则主要通过单连接多路复用实现并发。14. TCP 的 Keepalive 和 HTTP 的 Keep-Alive 是一个东西吗① TCP Keepalive 和 HTTP Keep-Alive 不是一个东西。② HTTP Keep-Alive 属于应用层用于让多个 HTTP 请求复用同一个 TCP 连接减少频繁握手和挥手的开销。③ TCP Keepalive 属于传输层用于连接长时间空闲时探测对端是否仍然存活清理异常的半开连接。④ 可以简单记为HTTP Keep-Alive 是为了复用连接TCP Keepalive 是为了检测连接。15. TCP 连接如何确保可靠性① TCP 通过序列号和确认应答机制保证数据可确认、可排序并识别重复数据。② 当数据丢失时通过超时重传和快速重传机制重新发送。③ TCP 使用校验和检测数据是否在传输过程中损坏。④ TCP 通过滑动窗口提高传输效率并通过流量控制避免接收方缓冲区溢出。⑤ TCP 通过拥塞控制根据网络状态调整发送速度避免网络拥塞。最核心的一句话TCP 通过序列号、ACK 确认、重传、校验和、滑动窗口、流量控制和拥塞控制保证数据可靠、有序、无重复地传输。16. 既然提到了拥塞控制那你能说说拥塞控制是怎么实现的吗根据网络情况动态控制发送的速度。① TCP 通过拥塞窗口 cwnd 控制发送速度实际发送窗口取 cwnd 和接收窗口 rwnd 的较小值。② 刚建立连接时使用慢启动cwnd 按指数增长达到慢启动阈值后进入拥塞避免改为线性增长。③ 如果发生超时说明拥塞较严重TCP 会减小阈值并把 cwnd 降到较小值重新慢启动。④ 如果收到三个重复 ACK则触发快速重传和快速恢复立即重传丢失数据并将窗口减半后继续拥塞避免。最核心的一句话TCP 通过“先快速试探、再缓慢增长、发生丢包就降低发送速率”的方式实现拥塞控制17. Cookie 和 Session 是什么有什么区别HTTP 本身是无状态协议服务器默认不会记住前一次请求是谁发出的。Cookie 和 Session 都用于保存用户状态例如登录状态、购物车信息等① Cookie 是保存在客户端浏览器中的小段数据浏览器会在后续请求中自动携带。② Session 是保存在服务端的用户会话数据服务器通常通过 Cookie 中的 Session ID 找到对应 Session。③ Cookie 会占用客户端存储安全性相对较低Session 数据保存在服务端相对安全但会增加服务器存储压力。④ 分布式系统中 Session 需要共享通常可以存储在 Redis 中。最核心的一句话Cookie 保存在客户端Session 保存在服务端实际登录中通常用 Cookie 保存 Session ID用 Session 保存用户状态。18. Ping 是怎么工作的Ping 是一种用于检测目标主机是否可达以及估算网络往返延迟的工具。它主要基于网络层的 ICMP 协议不是 TCP也不是 UDP。① Ping 基于网络层的 ICMP 协议发送 ICMP Echo Request目标主机收到后返回 ICMP Echo Reply。② 发送方根据请求和响应之间的时间计算网络往返延迟 RTT并统计丢包率。③ Ping 不需要建立 TCP 连接也没有端口号只能检测 IP 层面的可达性不能直接判断某个应用或端口是否正常。④ Ping 不通不一定代表服务器宕机也可能是防火墙或目标主机禁用了 ICMP 响应。最核心的一句话Ping 通过 ICMP 回显请求和回显应答检测目标主机是否可达并计算网络往返延迟。19. 什么是 SYN 攻击如何避免① SYN 攻击利用 TCP 三次握手攻击者发送大量 SYN 请求但不返回最后一个 ACK使服务器产生大量处于 SYN_RECV 状态的半连接。② 当半连接队列和服务器资源被耗尽后正常客户端就无法建立连接。③ 常见防护方式包括启用 SYN Cookie、增大半连接队列、缩短重试时间、限制连接速率以及使用防火墙、负载均衡和 DDoS 流量清洗服务。最核心的一句话SYN 攻击就是大量建立“只握手两次、不完成第三次”的半连接从而耗尽服务器连接资源。20. 什么是对称加密和非对称加密① 对称加密使用同一把密钥进行加密和解密速度快适合大量数据传输但密钥分发困难常见算法有 AES。② 非对称加密使用公钥和私钥公钥可以公开私钥需要保密安全性和密钥管理更好但速度较慢常见算法有 RSA 和 ECC。③ HTTPS 通常结合使用两者通过非对称密码机制完成身份认证和密钥协商再使用对称加密传输实际数据。最核心的一句话对称加密速度快但密钥难分发非对称加密便于认证和密钥协商但速度慢因此实际系统通常混合使用。21. HTTPS 是如何保证数据完整性的HTTPS 通过 TLS 的消息认证机制保证数据在传输过程中没有被篡改。核心思想是发送方对数据生成一个认证标签接收方收到后重新校验只要数据被修改校验就会失败。① HTTPS 通过 TLS 的消息认证机制保证数据完整性。② 现代 TLS 使用 AES-GCM、ChaCha20-Poly1305 等 AEAD 算法在加密数据的同时生成认证标签。③ 接收方使用会话密钥验证认证标签只要密文被修改、重复或乱序验证就会失败。④ TLS 握手结束时还会通过 Finished 消息校验整个握手过程是否被篡改。最核心的一句话HTTPS 使用只有通信双方掌握的会话密钥生成认证标签数据一旦被篡改接收方就无法通过完整性校验。22. 数字证书验证流程是什么当浏览器访问 HTTPS 网站时服务器会把自己的数字证书发送给浏览器。浏览器需要确认两件事这个证书是否可信以及证书中的公钥是否真的属于当前网站。① 服务器在 TLS 握手时向客户端发送数字证书和证书链。② 浏览器检查证书有效期、访问域名、证书用途以及是否被吊销。③ 浏览器从服务器证书开始使用上一级 CA 的公钥逐级验证数字签名直到可信根 CA。④ 如果根 CA 位于浏览器或操作系统的信任库中并且整条证书链验证通过浏览器就信任证书中的服务器公钥。最核心的一句话数字证书验证就是检查域名和有效期并沿着证书链使用上级 CA 公钥逐级验证签名最终追溯到本地信任的根 CA。操作系统1. 进程和线程的区别进程是程序的一次执行过程线程是进程中的一条执行路径。① 进程是资源分配的基本单位线程是 CPU 调度的基本单位。② 不同进程拥有独立地址空间同一进程中的线程共享堆、代码和文件资源但各自拥有独立的栈、寄存器和程序计数器。③ 线程创建和切换开销更小但共享数据容易产生线程安全问题进程隔离性更强但通信和切换成本较高。2. 进程调度算法你了解多少进程调度是操作系统从就绪队列中选择一个进程使用 CPU。常见调度算法有 FCFS、短作业优先、时间片轮转、优先级调度和多级反馈队列。FCFS 简单但可能造成短任务长时间等待SJF 平均等待时间短但可能使长任务饥饿时间片轮转较公平适合分时系统多级反馈队列综合考虑任务优先级和运行时间实际系统中较常见。3. 进程间有哪些通信方式不同进程地址空间相互独立因此需要通过 IPC 进行通信。常见进程通信方式有管道、消息队列、共享内存、信号量、信号和 Socket。共享内存速度最快但需要额外的同步机制消息队列保留消息边界管道适合简单数据流Socket 既支持本机通信也支持跨主机通信。4. 什么是死锁如何避免死锁死锁是多个线程互相等待对方持有的资源导致程序无法继续执行。死锁需要同时满足互斥、请求并保持、不可剥夺和循环等待四个条件。实际开发中通常通过统一加锁顺序、减少锁嵌套、设置超时、使用 tryLock 和缩小临界区来避免死锁。5. 什么是虚拟内存为什么需要虚拟内存虚拟内存是操作系统通过页表为每个进程提供的独立虚拟地址空间。它可以实现进程隔离、按需加载、内存共享并让程序使用看起来连续且可能大于物理内存的地址空间。其核心是虚拟地址到物理地址的映射。6. 什么是内存分段和分页它们的作用是什么分段按照代码段、数据段、堆和栈等逻辑结构划分内存段大小不固定容易产生外部碎片。分页把虚拟内存和物理内存划分为固定大小的页和页框通过页表进行映射避免了外部碎片是虚拟内存实现的基础。7. 解释一下用户态和内核态用户态权限较低普通程序不能直接访问硬件和内核资源内核态权限最高可以执行特权指令和管理系统资源。应用程序通过系统调用、中断或异常从用户态切换到内核态。区分两种状态主要是为了保护操作系统安全和稳定。8. 解释一下页面置换算法例如 LRU最近最少使用、FIFO先进先出等页面置换算法用于物理内存不足时选择要淘汰的页面。FIFO 淘汰最早进入的页面实现简单但可能出现 Belady 异常LRU 淘汰最近最少使用的页面效果较好但维护成本高Clock 算法利用访问位近似实现 LRU是实际系统中常用的方案。9. 解释一下进程同步和互斥以及解决这些问题的方法互斥是保证同一时刻只有一个线程访问共享资源同步是保证多个线程按照一定顺序协作执行。常见实现方式包括互斥锁、信号量、条件变量、管程、原子操作和自旋锁。10. 什么是中断和异常它们有什么区别中断和异常都会使 CPU 暂停当前程序转而执行相应的处理程序。中断通常由外部硬件异步触发例如网卡和定时器异常由当前指令同步触发例如缺页、除零和非法访问。两者都会使 CPU 暂停当前任务进入内核执行对应处理程序。11. 介绍一下几种典型的锁典型锁包括互斥锁、自旋锁、读写锁、悲观锁、乐观锁和可重入锁。互斥锁获取失败会阻塞自旋锁会持续尝试读写锁适合读多写少悲观锁先加锁再操作乐观锁通常通过 CAS 或版本号在更新时检测冲突。12. 你知道的线程同步方式有哪些线程同步方式主要有互斥锁、信号量、条件变量、读写锁、自旋锁、原子操作、屏障和事件通知。互斥锁解决共享资源竞争条件变量用于线程等待和通知信号量限制并发数量原子操作适合简单且高频的无锁更新。数据库1. 一条 SQL 查询语句是如何执行的① 客户端先与 MySQL 建立连接并发送 SQL连接器负责身份认证和权限管理。② 解析器对 SQL 进行词法、语法分析预处理器检查表和字段是否存在。③ 优化器根据索引和统计信息生成执行计划决定使用哪个索引、表连接顺序等。④ 执行器按照执行计划调用存储引擎接口InnoDB 从 Buffer Pool 或磁盘中读取数据并通过 B 树索引定位记录。⑤ 最后执行器将查询结果返回给客户端。最适合背诵的一句话一条查询 SQL 会依次经过连接器、解析器、预处理器、优化器和执行器执行器调用存储引擎读取数据最后将结果返回客户端。2. 说一说事务隔离级别①读未提交READ UNCOMMITTED可以读到其他事务尚未提交的数据可能出现脏读、不可重复读和幻读。②读已提交READ COMMITTED只能读到已提交的数据解决脏读但同一事务前后两次读取结果仍可能不同。③可重复读REPEATABLE READ同一事务多次读取同一行结果保持一致。InnoDB 默认使用该级别并通过 MVCC 和锁处理并发读取。④串行化SERIALIZABLE通过让事务串行执行来提供最高隔离性但并发能力最低。最核心的一句话隔离级别从低到高是读未提交、读已提交、可重复读、串行化隔离性越强并发性能通常越低。InnoDB 的可重复读还会结合 MVCC 和临键锁处理快照读取及锁定范围查询。3. 事务的四大特性有哪些①原子性Atomicity事务中的操作要么全部成功要么全部失败通常通过 undo log 回滚。②一致性Consistency事务执行前后数据都要满足业务规则和完整性约束。③隔离性Isolation并发事务彼此隔离避免互相读到不符合隔离级别的数据主要依靠锁和 MVCC。④持久性Durability事务提交后结果即使遇到故障也能恢复InnoDB 主要依靠 redo log。最核心的一句话ACID 分别是原子性、一致性、隔离性和持久性它们共同保证事务可靠地改变数据。4. 索引有哪些种类①按功能分有主键索引、唯一索引、普通索引和联合索引。②按数据存储方式分有聚簇索引和二级索引。InnoDB 的主键索引是聚簇索引叶子节点保存整行数据二级索引的叶子节点保存索引列和主键值。③按数据结构分常见的有 B 树索引、哈希索引、全文索引和空间索引具体支持情况与存储引擎有关InnoDB 最常用的是 B 树索引。最核心的一句话面试时可以先按功能介绍主键、唯一、普通和联合索引再说明 InnoDB 中的聚簇索引与二级索引。5. MySQL 为什么使用 B 树作为索引它的优势是什么① B 树的非叶子节点主要保存索引键单个节点能容纳更多索引项树的高度较低查询时磁盘 I/O 较少。② 所有数据都在叶子节点查询路径稳定叶子节点按顺序连接适合范围查询和排序。③ 相比哈希索引B 树支持范围查找和有序遍历相比普通二叉树B 树更适合磁盘页读取。最核心的一句话B 树能减少磁盘 I/O同时支持范围查询和有序遍历因此适合作为关系型数据库的主要索引结构。6. 什么时候需要创建索引什么时候不需要创建索引① 经常出现在WHERE、JOIN、ORDER BY、GROUP BY中并且能明显缩小结果范围的列通常适合建索引。② 多列经常一起作为查询条件时可以按实际查询方式建立联合索引并注意最左前缀原则覆盖索引还可以减少回表。③ 表很小、列区分度很低、字段很少被查询或写入更新非常频繁时索引收益可能不大。④ 索引会占用存储空间也会增加INSERT、UPDATE、DELETE的维护成本。因此要结合慢查询和EXPLAIN执行计划决定避免盲目加索引。最核心的一句话索引优先建在高频查询、过滤效果好的列上同时权衡写入成本、存储占用和实际执行计划。7. 说一下你了解的 MVCC 机制并说明原理① MVCC 是多版本并发控制让普通一致性读读取符合事务可见性规则的历史版本减少读写之间的阻塞。② InnoDB 通过隐藏字段、undo log 版本链和 Read View 实现 MVCC。数据更新时旧版本保存在 undo log 中Read View 根据事务 ID 判断哪个版本对当前事务可见。③ 在 InnoDB 中读已提交通常每次一致性读都会生成新的 Read View可重复读通常在事务第一次一致性读时生成 Read View并在事务内复用。④ 普通SELECT通常是快照读UPDATE、DELETE和SELECT ... FOR UPDATE等属于当前读会读取较新的记录并按需加锁。最核心的一句话MVCC 通过 undo log 保存数据的历史版本再通过 Read View 判断当前事务能看到哪个版本让快照读尽量不阻塞写入。8. 索引失效的场景有哪些①不符合联合索引最左前缀原则例如联合索引是(a, b)查询只使用b通常无法有效利用该索引。②对索引列进行函数或表达式计算例如对日期列使用DATE(create_time)可能导致索引无法直接用于查找。③发生隐式类型转换例如字符串列与数字进行比较可能导致索引无法有效使用。④使用前导模糊匹配例如LIKE %abc通常无法利用普通 B 树索引定位开头。⑤使用 OR 时有条件列没有索引优化器可能选择全表扫描具体是否走索引要看执行计划。⑥联合索引中出现范围查询范围条件之后的列通常不能继续用于缩小索引查找范围但仍可能参与其他优化。⑦索引区分度低或表很小优化器判断全表扫描成本更低时也可能主动不使用索引。最核心的一句话排查索引问题时重点看最左前缀、索引列上的函数或类型转换、前导模糊匹配以及EXPLAIN显示的实际执行计划。9. MySQL 的执行引擎有哪些①InnoDB最常用的引擎支持事务、行级锁、外键和崩溃恢复适合大多数业务表。②MyISAM不支持事务主要使用表级锁常用于读多写少的场景。③MEMORY将表数据保存在内存中访问速度快但服务器重启后数据会丢失适合临时或可重建的数据。最核心的一句话常见引擎有 InnoDB、MyISAM 和 MEMORY业务表通常优先使用支持事务和崩溃恢复的 InnoDB。10. MySQL 日志文件有哪几种有什么作用①redo logInnoDB 的重做日志记录数据页的修改用于崩溃恢复保证事务的持久性。②undo log保存数据修改前的旧版本用于事务回滚也为 MVCC 提供历史版本。③binlogMySQL Server 层的归档日志记录数据变更可用于主从复制和时间点恢复。④relay log从库保存主库传来的 binlog 内容用于主从复制。⑤error log记录 MySQL 启动、运行和停止过程中的错误及诊断信息。⑥slow query log记录执行时间较长的 SQL用于定位性能问题。⑦general query log记录客户端连接和服务器收到的语句通常按需开启。最核心的一句话redo log 用于崩溃恢复undo log 用于回滚和 MVCCbinlog 用于归档、复制和恢复错误日志与慢查询日志分别用于故障排查和性能分析。11. MySQL 有哪些锁作用分别是什么①按粒度分有全局锁、表级锁和行级锁。全局锁限制全库写入表级锁锁定整张表行级锁只锁相关记录通常并发能力更高。②按兼容性分有共享锁S 锁和排他锁X 锁。共享锁主要用于读取允许其他事务继续读取排他锁用于修改会阻止其他事务对相关记录进行冲突操作。③意向锁InnoDB 用它表示事务准备对表中的行加共享锁或排他锁便于协调表级锁和行级锁。④记录锁、间隙锁和临键锁记录锁锁定索引记录间隙锁锁定索引记录之间的范围阻止插入临键锁是记录锁与间隙锁的组合用于控制索引范围上的并发。⑤ InnoDB 的行锁实际是加在索引记录上的如果查询没有合适的索引可能扫描并锁定大量记录影响并发。最核心的一句话面试先说明全局锁、表级锁、行级锁和共享锁、排他锁再补充 InnoDB 通过记录锁、间隙锁和临键锁控制索引记录及范围上的并发。Redis1. Redis 为什么这么快① 基于内存存储读写速度远快于磁盘。② 采用单线程执行命令避免了线程切换和锁竞争。③ 使用I/O 多路复用可以同时处理大量客户端。④ 事件驱动。Redis 会将连接、读写等操作注册为事件当事件就绪后再进行处理因此能够高效应对大量并发请求。⑤ 高效的数据结构。2. Redis 的数据类型有哪些有五种数据类型① string(最基本的数据类型)② hash(键值对集合)③ set(无序集合)④ zset(有序集合)⑤ list3. 说一说 Redis 持久化机制作答版Redis的持久化机制是为了保证数据在服务器重启或者异常情况下不丢失而设计的Redis提供了两种主要的持久化方式①RDB特定的时间间隔内生成数据的时间点快照②AOF记录了所有对Redis数据集进行更改的写操作这些写操作追加到一个文件中RDB 类似于定期备份而 AOF 类似于实时记录。补充①RDBRedis Database持久化RDB是Redis默认的持久化方式它通过在特定的时间间隔内生成数据的时间点快照来实现持久化。快照文件以二进制的格式保存了Redis在某一时刻的数据集。RDB持久化的优点是生成的快照文件较小适用于备份缺点是如果Redis服务器突然崩溃可能会丢失最后一次快照之后的数据。②AOF(Append Only File持久化AOF持久化记录了所有对Redis数据集进行更改的写操作这些写操作以追加的方式写入一个文件中。当Redis服务器重新启动的时候它会重新执行AOF文件中记录的写操作从而恢复数据集的状态。AOF持久化的优点是提供了更可靠的持久性因为数据变更操作记录被记录在一个追加的日志文件中可以减少数据丢失的风险。缺点是AOF文件通常比RDB文件更大而且恢复数据时可能需要更长的时间。RDB 类似于定期备份而 AOF 类似于实时记录。4. Redis 过期键的删除策略惰性删除。键被访问的时候才检查是否过期这样做得好处是可以降低redis的CPU使用率并且避免了定期检查所有键的开销。惰性删除流程如下①当客户端尝试读取一个键时redis会首先检查是否过期②如果键已经过期redis会返回空值null并在返回之前删除该键③如果键未过期redis将正常返回其值5. 什么是缓存击穿、缓存穿透、缓存雪崩穿透 → 查不存在的数据 → 布隆过滤器 空值缓存击穿 →一个热点key过期 → 互斥锁 不过期雪崩 →一批key同时过期 或 Redis挂了 → 随机过期时间 高可用 限流6. 如何保证缓存和数据库双写时的一致性没有完美方案,只能尽量降低不一致窗口。业界主流方案Cache Aside(旁路缓存) 先删库后删缓存进阶方案binlog7. Redis 是单线程的还是多线程的Redis 主要采用单线程模型进行命令处理但在处理网络 I/O 和一些后台任务比如持久化和集群数据分片时会利用多线程来提高效率。核心的键值存储操作是在单个主线程中执行的这简化了并发控制同时由于操作都是在内存中进行因此能够实现极高的性能。8. Redis 事务的相关命令有哪些① MULTI开启事务后续命令逐个放入队列中然后EXEC命令原子化执行这个命令队列② EXEC执行事务中所有操作命令③ DISCARD放弃执行事务中所有操作命令④ WATCH监视一个或多个key如果事务在执行前这个key被其他命令修改则事务被中断不会执行事务中的任何命令⑤ UNWATCH取消WATCH对所有key的监9. Redis 事务支持隔离性吗为什么不支持回滚redis的事务提供了一种批量执行命令的机制但不具备ACID特性中的隔离性和回滚功能10. 介绍一下 Redis 的哨兵机制哨兵Sentinel机制是一种用来监控和管理Redis服务器是否正常工作以及在需要时进行自动故障转移的系统。哨兵系统可以提高Redis的可用性确保数据的安全性和服务的连续性。11. Redis 哨兵是如何工作的哨兵每秒向主节点发送心跳检测ping主节点。当一段时间十几秒到几十秒内心跳检测没有收到回复则这个哨兵主观认为主节点下线。当超过一半数量哨兵认为主节点下线主节点被认为客观下线并由哨兵任命一个从节点为主节点。升级逻辑为优先级高的节点其次是offset大的节点因为offset大代表这个节点同步的数据多丢失的信息少。12. 了解主从复制的原理吗主从复制指将一台redis服务器的数据复制到其他的redis服务器这种复制是单向异步的。