147、后端中级面试题精选
2000/6/8大约 6 分钟
后端中级面试题精选
面向中级后端工程师,下列 18 题围绕系统设计、数据一致性与服务治理展开,并提供参考答案、追问与考察要点。
系统设计
设计一个订单系统,说明服务拆分、数据库设计与接口划分。
- 参考答案:可拆为订单、商品、支付、库存、通知等微服务;数据库采用订单主表 + 明细表,使用订单号作为业务主键;接口采用 REST/GraphQL,订单服务负责创建、查询、取消;库存服务提供扣减接口,异步通知使用 MQ。
- 追问:如何保证接口向后兼容?
- 考察要点:领域建模、微服务拆分、接口设计。
订单超时关闭可以有哪些实现方式?
- 参考答案:方案一:消息队列延迟消息,到期自动触发;方案二:定时扫描数据库,适合订单量不大;方案三:数据库事件/TTL;实际常使用 MQ + 状态机,确保幂等和重试。
- 追问:订单积压或消息丢失如何处理?
- 考察要点:延迟任务、可靠投递、扩展性。
系统支持灰度发布需要哪些组件与流程?
- 参考答案:需要配置中心/服务网关控制流量、灰度策略(按用户/地区/比例)、监控指标、回滚流程与审批;CI/CD 管道应支持多环境部署。
- 追问:如何验证灰度效果?
- 考察要点:发布流程、流量治理、监控。
缓存策略设计时如何防止穿透、击穿与雪崩?
- 参考答案:穿透:设置空值缓存、布隆过滤器;击穿:互斥锁/单飞、热点数据预加载;雪崩:设置随机过期时间、自动降级、批量预热。
- 追问:缓存与数据库如何保持一致?
- 考察要点:缓存模式、容错策略。
文件上传 + CDN 加速涉及哪些组件?
- 参考答案:客户端直传至对象存储(S3、OSS),后端签发上传凭证;完成后写入元数据表;CDN 配置缓存规则与鉴权;后台提供图片处理/鉴黄等增值能力。
- 追问:大文件断点续传如何实现?
- 考察要点:对象存储、CDN、安全策略。
如何设计一个实时日志采集和查询系统?
- 参考答案:使用 Logstash/Filebeat 采集 -> Kafka -> Elasticsearch/OpenSearch 存储 -> Kibana 查询;提供索引生命周期策略控制成本。
- 追问:高峰期写入背压如何处理?
- 考察要点:日志平台、数据流、扩展性。
一致性与事务
结合实际业务解释 CAP 与 BASE 理论的取舍。
- 参考答案:支付场景倾向 CP(强一致)牺牲可用性;社交点赞可选 AP,允许最终一致;BASE 强调基本可用、软状态、最终一致,需要补偿或重试机制。
- 追问:你的项目做过哪些权衡?
- 考察要点:一致性模型、业务判断。
跨服务扣库存与写订单如何保证一致?
- 参考答案:方案:先写订单为待支付,调用库存服务扣减(带幂等),使用可靠消息最终一致;或采用 TCC,预扣库存 -> 确认/取消。
- 追问:失败如何补偿?
- 考察要点:分布式事务、可靠消息。
消息队列保证至少一次投递时如何避免重复消费?
- 参考答案:消费者需实现幂等:可使用数据库唯一键、Redis setnx、幂等表记录消费状态,处理完再 ack;同时监控堆积情况。
- 追问:如何监控重复消费?
- 考察要点:幂等设计、消费保证。
说明 TCC 或 Saga 模式的流程与适用场景。
- 参考答案:TCC:Try 预留资源、Confirm 确认、Cancel 释放,适合强一致、高价值操作;Saga:一系列本地事务 + 补偿操作,适合长业务流程,最终一致。
- 追问:实现难点有哪些?
- 考察要点:事务模式、补偿逻辑。
描述一次幂等性设计的实践,包括幂等键与状态管理。
- 参考答案:例如支付回调:以订单号 + 第三方流水号作为幂等键,使用 Redis/数据库记录处理状态,重复请求直接返回已处理结果;若失败需记录日志并报警。
- 追问:幂等键冲突如何处理?
- 考察要点:幂等实现、状态管理。
如何在分布式环境中实现全链路事务追踪?
- 参考答案:结合事务日志 + TraceID:在请求进入时生成全局 TraceID,日志、MQ、数据库操作都带上该 ID,并使用链路追踪系统(Zipkin、SkyWalking)展示全流程。
- 追问:跨语言如何统一?
- 考察要点:链路追踪、日志关联。
服务治理
服务注册发现、配置中心、API 网关分别解决哪些问题?
- 参考答案:注册发现维护服务地址,支持负载均衡;配置中心统一配置并热更新;网关提供认证、限流、路由、灰度。
- 追问:这些组件如何高可用?
- 考察要点:微服务基础设施。
在 Kubernetes 中如何实现自动弹性扩缩容?
- 参考答案:使用 HPA 根据 CPU/自定义指标调整 Pod 数;结合 Cluster Autoscaler 扩缩节点;配合 Prometheus Adapter 暴露自定义指标;需要合理设置冷却时间与最小副本。
- 追问:指标波动时如何防止抖动?
- 考察要点:K8s、资源管理、可扩展性。
讲述一次熔断、限流、降级策略的落地过程。
- 参考答案:例如使用 Sentinel/Hystrix,针对外部依赖设定并发与响应时间阈值,超出时熔断并返回默认值;提供限流令牌桶、降级页面;上线前通过压测验证。
- 追问:策略生效如何验证?
- 考察要点:稳定性治理、保护机制。
如何构建分布式链路追踪系统?
- 参考答案:使用 OpenTelemetry/Zipkin/Jaeger:在各服务接入 SDK,生成 TraceID + Span;日志、监控系统共享 TraceID;提供可视化 UI 展示调用拓扑。
- 追问:链路数据量大如何采样?
- 考察要点:可观测性、采样策略。
生产事故发生时的应急响应流程是什么?
- 参考答案:通常包含:告警触发 -> 值班响应 -> 故障确认 -> 临时降级/回滚 -> 通知相关方 -> 记录时间线 -> 事后复盘并制定改进计划。
- 追问:如何确保复盘结论落地?
- 考察要点:Incident 管理、值班机制。
如何在多团队环境中落地编码规范与代码评审制度?
- 参考答案:制定统一 Lint/格式化规则,结合工具自动检测;建立 Review Guideline、设定必须 Review 人数;配合度量(缺陷率、Review 时长)持续改进。
- 追问:规范执行不力怎么办?
- 考察要点:团队治理、流程优化。