🎯 后端架构面试题精选50题¶
适用岗位:后端开发工程师、架构师、AI系统工程师 难度分布:基础(20) + 进阶(20) + 系统设计(10)
一、基础题(20题)¶
Q1: HTTP/1.1 vs HTTP/2 vs HTTP/3的区别? | 版本 | 传输层 | 多路复用 | 核心改进 | |------|--------|---------|---------| | 1.1 | TCP | 否(队头阻塞) | Keep-Alive长连接 | | 2 | TCP | 是(Stream) | 二进制帧、头部压缩(HPACK)、服务器推送 | | 3 | QUIC(UDP) | 是 | 0-RTT连接、无队头阻塞、连接迁移 |
Q2: TCP三次握手和四次挥手? - 三次握手:SYN→SYN+ACK→ACK(确保双方收发能力) - 四次挥手:FIN→ACK→FIN→ACK(双方独立关闭) - TIME_WAIT:2MSL等待,防止旧连接的延迟包干扰新连接
Q3: RESTful API设计原则? - 资源导向:URL是名词(/users/123),HTTP动词表示操作(GET/POST/PUT/DELETE) - 无状态:每个请求包含所有信息 - 版本控制:/api/v1/... - 分页:?page=1&size=20 - 错误码:200/201/400/401/403/404/500
Q4: 数据库索引的原理?B+树 vs 哈希索引? - B+树:有序多叉树,支持范围查询和排序,MySQL InnoDB默认 - 哈希索引:O(1)等值查询,不支持范围查询 - 建索引原则:高选择性字段、WHERE/JOIN/ORDER BY字段、最左前缀匹配
Q5: SQL优化的基本策略? - EXPLAIN分析执行计划 - 避免全表扫描:加索引、避免函数包裹列 - 覆盖索引:索引包含查询所有列 - 分页优化:用"WHERE id > last_id"替代"OFFSET" - 避免SELECT *
Q6: Redis常用数据结构和应用场景? | 数据结构 | 场景 | |---------|------| | String | 缓存、计数器、分布式锁 | | Hash | 用户信息、对象属性 | | List | 消息队列、最新N条记录 | | Set | 标签、共同好友 | | ZSet | 排行榜、延迟队列 |
Q7: 缓存穿透、击穿、雪崩的区别和解决? - 穿透:查不存在的key→布隆过滤器/缓存空值 - 击穿:热key过期→互斥锁/永不过期+异步更新 - 雪崩:大批key同时过期→随机过期时间/多级缓存
Q8: MySQL事务ACID属性? - Atomicity:原子性(undo log) - Consistency:一致性(约束+应用逻辑) - Isolation:隔离性(锁+MVCC) - Durability:持久性(redo log + WAL)
Q9: MySQL隔离级别? - READ UNCOMMITTED → 脏读 - READ COMMITTED → 不可重复读(Oracle默认) - REPEATABLE READ → 幻读(MySQL默认,MVCC+间隙锁解决) - SERIALIZABLE → 完全串行化
Q10: 什么是分布式锁?Redis实现?
- Redlock:多Redis实例多数派加锁 - 问题:主从切换可能丢锁 → Redisson的看门狗续期Q11: 消息队列的作用?Kafka vs RabbitMQ? - 作用:异步解耦、削峰填谷、事件驱动 - Kafka:高吞吐(100万+/s)、持久化、适合大数据/日志/流处理 - RabbitMQ:低延迟、协议丰富(AMQP)、适合业务消息
Q12: 微服务架构的优缺点? - 优:独立部署、技术多样性、故障隔离、团队自治 - 缺:分布式复杂性、运维成本、数据一致性、调试困难 - 拆分原则:按业务域DDD拆分
Q13: 负载均衡算法? - 轮询(RR)、加权轮询、随机、加权随机 - 最少连接、一致性哈希(适合缓存/有状态服务) - IP Hash(会话粘性)
Q14: CAP定理和BASE理论? - CAP:一致性(C) + 可用性(A) + 分区容忍(P),只能3选2 - 分布式系统必须P → 选CP(强一致)或AP(最终一致) - BASE:基本可用+软状态+最终一致性
Q15: 什么是gRPC?和REST对比? | 维度 | gRPC | REST | |------|------|------| | 协议 | HTTP/2 + Protobuf | HTTP/1.1 + JSON | | 性能 | 高(二进制序列化) | 中(文本序列化) | | 流式 | 支持双向流 | 不支持 | | 适用 | 微服务内部通信 | 对外API |
Q16: Docker容器和虚拟机的区别? - 容器共享宿主OS内核,秒级启动,MB级大小 - VM有独立OS,分钟级启动,GB级大小 - 容器适合微服务,VM适合强隔离场景
Q17: 什么是连接池?为什么需要? - 预创建一批数据库连接复用,避免频繁创建/销毁 - 参数:最小连接数、最大连接数、超时时间 - 常用:HikariCP(Java)、SQLAlchemy Pool(Python)
Q18: 分库分表的策略? - 垂直拆分:按业务拆表(用户表/订单表分库) - 水平拆分:按主键Hash/范围分片 - 问题:跨分片查询、分布式事务、全局ID生成(雪花算法)
Q19: 什么是幂等性?如何实现? - 多次执行相同操作结果一致(如PUT是幂等的,POST不是) - 实现:数据库唯一约束、Token机制、乐观锁(版本号)
Q20: OAuth 2.0的四种授权方式? - 授权码模式(最安全,Web APP标准) - 隐式模式(简化版,SPA但不推荐) - 密码模式(用户名密码,内部系统) - 客户端凭证模式(服务间通信)
二、进阶题(20题)¶
Q21-Q40 要点: - Q21: 分布式事务方案(2PC/TCC/Saga/消息最终一致性) - Q22: 限流算法(令牌桶/漏桶/滑动窗口) - Q23: 熔断器模式(Hystrix/Sentinel/断路器状态机) - Q24: 数据库读写分离和主从延迟解决 - Q25: 全文搜索引擎(Elasticsearch原理/倒排索引) - Q26: API网关的职责(路由/限流/认证/灰度) - Q27: 服务发现(Consul/Nacos/etcd) - Q28: 配置中心设计(Nacos/Apollo) - Q29: 日志系统设计(ELK/Loki) - Q30: 链路追踪(Jaeger/Zipkin/OpenTelemetry) - Q31: CQRS(命令查询职责分离)模式 - Q32: Event Sourcing(事件溯源) - Q33: 如何实现分布式ID生成器 - Q34: WebSocket vs SSE vs 长轮询 - Q35: CDN原理和缓存策略 - Q36: 容器编排(Kubernetes架构/Pod/Service/Ingress) - Q37: CI/CD流水线设计 - Q38: 数据库连接泄漏排查方法 - Q39: JVM/Python内存模型和GC - Q40: 如何设计一个高并发秒杀系统
三、系统设计题(10题)¶
Q41: 设计一个URL短链接服务 - 核心:62进制编码(a-zA-Z0-9) → 7位支持62^7≈3.5万亿 - 架构:API→ID生成(snowflake)→62进制→存Redis+MySQL→301重定向 - 扩展:自定义短链、过期、统计
Q42: 设计一个分布式文件存储系统 - 参考HDFS:NameNode(元数据)+DataNode(数据块) - 分块存储(64MB块)+3副本+机架感知 - 一致性哈希分片+负载均衡
Q43: 设计一个实时排行榜系统 - Redis ZSet:ZADD/ZRANK/ZRANGE - 分段排行:前1000名精确排序+后续近似 - 持久化:定期dump到MySQL
Q44: 设计一个即时通讯系统 - 长连接(WebSocket)+消息队列+离线消息存储 - 消息可靠性:ACK确认+消息序号+重试 - 群聊:扩散写(写入每个成员信箱)
Q45: 设计一个日活千万的Feed流系统 - 推模型(Push):发布时写入粉丝收件箱(适合粉丝少) - 拉模型(Pull):查看时从关注者拉取(适合大V) - 推拉结合:大V用拉,普通用户用推
Q46: 设计一个LLM推理服务(日调用1亿) - 架构:API Gateway → 请求队列 → GPU集群(vLLM/TensorRT-LLM) - 优化:Dynamic Batching + KV Cache + PagedAttention + 量化 - 弹性:K8s HPA按GPU利用率自动扩缩 + 请求优先级队列 - 成本:Spot实例+模型量化(INT4/FP8)+短请求路由到小模型
Q47: 设计一个分布式向量检索系统 - Milvus/Qdrant架构:协调器+查询节点+数据节点+索引节点 - 索引:IVF+PQ/HNSW,支持百亿级向量 - 实时性:增量索引+异步全量重建
Q48-Q50:设计电商下单流程、设计监控告警系统、设计多租户SaaS平台
最后更新:2026年2月