滴滴 2025 后端高频面试题(20 题)
点击「查看答案」展开答案解析。
来源: 牛客原题 | 题量: 20 题
第1题(问答题) 详细的说说Redis的数据类型
查看答案
要点 基础:String、Hash、List、Set、ZSet; 进阶:Bitmap、HyperLogLog、GEO、Stream、Bitfield。各自底层结构(如 String 用 SDS、ZSet 用跳表+哈希、List 用 quicklist)。
第2题(问答题) 说说Redis的持久化策略。
查看答案
要点 RDB(定时快照,二进制,恢复快,可能丢最近数据)、AOF(追加写命令日志,可配置 fsync 策略,AOF 重写压缩)、混合持久化(RDB+AOF,Redis 4.0+)。
第3题(问答题) MySQL 中的 MVCC 是什么?Read View 在 MVCC 中如何工作?如果没有 MVCC 会怎样?
查看答案
要点 MVCC=多版本并发控制,通过 undo log 版本链 + Read View 实现。Read View 记录当前活跃事务与最小/最大事务 id,按规则判断版本可见性。无 MVCC 时读写互相阻塞,或出现脏读、不可重复读、幻读。
第4题(问答题) 说说JVM的垃圾回收算法。
查看答案
要点 标记-清除、标记-复制、标记-整理、分代收集(新生代复制、老年代标记整理);收集器:Serial、Parallel、CMS、G1、ZGC。
第5题(问答题) 从「敲下一个 URL」到「页面出现在屏幕」整条链路全景
查看答案
要点 URL 解析 → DNS 解析 → TCP 三次握手 → (HTTPS) TLS 握手 → 发 HTTP 请求 → 服务器处理返回 → 浏览器解析 HTML → 构建 DOM/CSSOM → 渲染树 → 布局 → 绘制 → 合成显示。
第6题(问答题) 什么是进程和线程?进程和线程的区别?
查看答案
要点 进程是资源分配的基本单位(独立地址空间),线程是 CPU 调度的基本单位(共享进程地址空间);切换开销、通信方式(进程 IPC vs 线程共享内存)、健壮性(进程隔离)。
第7题(问答题) 消息队列如何保证不重复消费?
查看答案
要点
- 消费端幂等:业务唯一 ID + 去重表/唯一索引;2. Redis setnx 去重;3. 状态机保证(已处理则跳过);4. 数据库唯一约束兜底。
第8题(问答题) 讲一下防抖节流以及适用场景。
查看答案
要点 防抖:连续触发只执行最后一次(延迟后执行),用于搜索框输入、窗口 resize;节流:固定时间间隔内只执行一次,用于滚动、按钮防连点、上报。
第9题(问答题) 说说 TCP 的三次握手
查看答案
要点 客户端 SYN → 服务端 SYN+ACK → 客户端 ACK。三次是为了双方确认收发能力并同步初始序列号,防止历史失效连接导致资源浪费。
第10题(问答题) 如何监控并优化慢 SQL?
查看答案
要点 开启慢查询日志、定位慢 SQL → EXPLAIN 分析执行计划 → 加索引/优化索引 → 改写 SQL(避免 select *、函数、隐式转换)→ 分库分表/读写分离。
第11题(问答题) 讲一下限流算法。
查看答案
要点 固定窗口计数、滑动窗口、漏桶(匀速流出)、令牌桶(允许突发);生产常用令牌桶 + Redis/Guava RateLimiter。
第12题(问答题) 如何利用Redis实现一个分布式锁?
查看答案
要点 SET key token NX PX 过期时间 加锁 → 唯一 token 保证只有持锁者可释放 → Lua 脚本原子校验并释放 → 看门狗续期(Redisson)。
第13题(问答题) TCP 与 UDP 的 10 大核心区别是什么?
查看答案
要点 连接性、可靠性、有序性、流量/拥塞控制、头部大小(20B vs 8B)、传输方式(字节流 vs 报文)、广播多播、资源开销、适用场景、状态数量。
第14题(问答题) HTTP vs. HTTPS 有什么区别?
查看答案
要点 HTTPS = HTTP + TLS/SSL 加密,端口 443(HTTP 80),需 CA 证书,握手有额外开销,防窃听/篡改/冒充。
第15题(问答题) 消息队列如何保证消息不丢?
查看答案
要点 生产端:同步发送 + 确认(ack)+ 重试;Broker:持久化 + 多副本同步;消费端:消费成功后再手动 ack(避免自动 ack 丢消息)。
第16题(问答题) 如何评估 / 判断索引是否生效?常见索引失效场景有哪些?
查看答案
要点 失效场景:like 前置通配、对列做函数/运算、隐式类型转换、or 非索引列、not in/!=、联合索引不满足最左前缀、数据分布导致优化器弃用索引。判断:EXPLAIN 看 key/type/rows/Extra。
第17题(问答题) 如何创建线程池?线程池常见参数有哪些?
查看答案
要点 参数:corePoolSize、maximumPoolSize、keepAliveTime、unit、workQueue、threadFactory、handler(拒绝策略:Abort/CallerRuns/Discard/DiscardOldest)。可用 Executors 或 ThreadPoolExecutor 手动创建。
第18题(问答题) SQL 调优常见方法有哪些?
查看答案
要点 EXPLAIN 分析 → 建/改索引 → 避免 select * → 避免索引列函数/运算 → 大表分页优化(延迟关联)→ join 驱动表选择与子查询改写。
第19题(问答题) HTTP/1.0、HTTP/1.1、HTTP/2.0、HTTP/3.0 的区别?
查看答案
要点 1.0:短连接;1.1:keep-alive 持久连接、管线化;2.0:二进制分帧、多路复用、头部压缩(HPACK)、服务器推送;3.0:基于 QUIC(UDP),减少握手与队头阻塞。
第20题(问答题) 分布式锁的原理和常见的实现有哪些?
查看答案
要点 原理:互斥、防死锁(过期/续期)、可重入、唯一标识。实现:Redis(setnx)、Zookeeper(临时顺序节点)、etcd(lease)、数据库(唯一索引/悲观锁)。
—