2)面试题汇总(部分)
🟦 1. Golang
⬅️ 基础能力
Go 中指针和引用的区别?结构体如何使用指针接收器?
Go 没有引用的语法,只有指针。使用指针接收器可以修改接收对象的字段并避免内存复制。defer 的执行顺序你了解吗?会在哪些场景踩坑?
defer 是先进后出(栈结构)。常见坑包括 defer 闭包变量的值捕获时机、文件未及时关闭等。Go 中如何做错误处理?你是否使用过 errors.Wrap 或 error chain?
通常使用if err != nil
,errors.Wrap
/fmt.Errorf("%w")
可以保留原始错误信息,用于排查链路。slice 和 array 的区别?slice 扩容的底层机制是?
slice 是对数组的封装,有长度和容量;扩容是重新分配更大数组并复制原有数据。
➡️ 深度考察
Go 中 map 是线程安全的吗?如何实现并发安全的 map?
原生 map 非线程安全,需加锁或使用sync.Map
,后者适用于读多写少的场景。channel 的使用场景?阻塞与非阻塞的区别,select 如何配合超时处理?
channel 用于 goroutine 通信。阻塞:无数据时挂起;非阻塞:使用select + default
。可配合time.After
超时。context 的设计初衷是什么?常用场景有哪些?context.WithCancel 和 WithTimeout 区别?
用于跨 API 传递取消信号、超时和元数据。WithCancel 需要手动 cancel;WithTimeout 到期自动取消。你是否使用过 sync.Once、sync.Map、atomic 操作?什么场景适用?
sync.Once
用于懒加载,sync.Map
用于并发读写,atomic
提供原子操作用于计数器等。
🟦 2. 鉴权与权限系统设计
⬅️ 基础能力
你了解 OAuth2、JWT 的基本原理吗?项目中是否使用?
OAuth2 是授权协议,JWT 是自包含令牌,包含身份信息、签名校验等。token 存储在哪里?如何保证安全?是否有 token 刷新机制?
存储在客户端(如 LocalStorage)、服务器(如 Redis),使用 HTTPS、安全头,支持 Refresh Token 刷新。前后端分离项目中,如何实现登录态的校验与续签?
每次请求带 token,后端校验后返回新 token 或设置定期刷新机制。
➡️ 深度考察
权限系统你是如何设计的?RBAC、ABAC 还是自定义策略模型?
RBAC 常用,基于角色授权;ABAC 灵活、支持条件判断;复杂系统可混用。用户和权限的关系你是如何建模的?涉及哪些数据库表?
通常包括用户表、角色表、权限表、用户角色中间表、角色权限中间表等。如何处理按钮级权限、接口级权限?
按钮级权限由前端根据权限数据控制,接口级在服务端做拦截校验。鉴权是否做了缓存?Redis 缓存权限信息是否存在一致性问题?
做了缓存,提升性能。需设计缓存失效策略或监听变更同步缓存防止一致性问题。
🟦 3. 微服务架构
⬅️ 基础能力
你在项目中如何做服务拆分的?拆分的依据是什么?
按业务边界拆分,例如订单、用户、支付。避免单体服务耦合过重。服务之间调用是同步还是异步?用的是什么协议?(HTTP/gRPC)
同步用 HTTP/gRPC,异步用消息队列(Kafka、NSQ)。服务注册与发现是怎么做的?是否用过 Nacos 或 Consul?
使用注册中心(Nacos、Consul)管理服务实例和心跳。
➡️ 深度考察
如何应对服务雪崩?是否做过服务熔断、限流、降级机制?
使用 Sentinel、Hystrix 等中间件做熔断限流,避免级联故障。微服务之间调用失败如何处理?是否使用重试机制?
支持重试,需设置重试次数、退避策略,防止服务雪崩。如何做链路追踪?是否接入过 SkyWalking、Jaeger?
使用 OpenTelemetry、SkyWalking 等工具采集链路数据,打通上下游调用链。服务如何做到无感知升级?服务之间的版本控制是如何做的?
灰度发布、新老版本并行,接口版本号、路径隔离等方式控制。
🟦 4. 服务间通信(RPC/gRPC/消息队列)
⬅️ 基础能力
你使用的服务间通信协议是?为什么选择它?
RESTful 简单直观;gRPC 高效、支持 proto 定义、多语言。gRPC 和 RESTful 的优劣对比?protobuf 的作用是什么?
gRPC 性能高、接口规范清晰;protobuf 是高效序列化协议,适合大规模通信。项目中是否用到消息队列?用的什么(Kafka、RabbitMQ、NSQ)?
用于解耦、削峰、异步处理。Kafka 适用于高吞吐场景。
➡️ 深度考察
如何实现消息幂等性?消息重复消费怎么处理?
消费端落库前做幂等校验(如唯一 key);使用事务或唯一约束防重复消费。消息队列积压你如何排查和处理?
检查生产/消费速率、消费者是否宕机或阻塞,临时扩容消费者处理。消息顺序性如何保证?是否使用过分区与消费组?
Kafka 分区维持局部顺序,同一 key 投递到同一分区;消费组做并行消费。
🟦 5. 配置中心(Nacos)
⬅️ 基础能力
配置中心的核心作用是什么?相比本地配置文件有什么优势?
动态配置、集中管理、环境隔离,避免频繁重启服务。你如何使用 Nacos 管理多环境配置?命名空间、配置集、配置项分别指什么?
命名空间对应环境,配置集对应服务模块,配置项是具体的 key-value。
➡️ 深度考察
配置热更新是如何实现的?服务如何感知配置变更?
客户端监听配置变化,推送新值,应用动态加载。如果 Nacos 服务不可用,你的服务能否正常运行?有没有做过降级处理?
本地缓存配置,Nacos 宕机后读取本地快照,避免服务宕机。Nacos 的权限体系你了解吗?支持哪些接入方式?
支持账号角色权限管理,支持 SDK、OpenAPI、Spring Cloud 等方式接入。
🟦 6. Redis 应用与原理
⬅️ 基础能力
Redis 常用的数据结构有哪些?实际项目中都用在哪些场景?
String、List、Hash、Set、ZSet,用于缓存、排行榜、计数器等。如何防止缓存穿透、缓存击穿、缓存雪崩?
穿透:加空值缓存;击穿:加互斥锁;雪崩:设置不同 TTL,使用限流。你如何设计缓存 Key?是否使用过 TTL、LRU 过期策略?
Key 命名规范如user:123
; TTL 控制数据时效,Redis 默认用 LRU 淘汰机制。
➡️ 深度考察
Redis 是单线程,为什么还那么快?它真的只有一个线程吗?
核心处理是单线程,避免上下文切换;IO、多线程 I/O 模型也逐步支持。是否使用过 Redis 分布式锁?是怎么实现的?有没有遇到锁失效或死锁问题?
使用 SETNX + EX 实现,Redlock 可用于高可用。需注意自动续期与异常释放。使用 Redis 做权限缓存/session 缓存如何防止一致性问题?
设置一致性 TTL、异步失效同步机制,关键数据变更主动清缓存。
🟦 7. 日志监控
⬅️ 基础能力
你使用的日志库是哪个?zap/logrus/sirupsen?
zap 性能高,logrus 可扩展,sirupsen 是 logrus 的仓库名。日志你是打到本地、文件,还是集中输出到 ELK/EFK?
生产使用 filebeat 采集到 ELK,便于搜索与报警。
➡️ 深度考察
如何根据日志排查线上 Bug?有没有规范日志格式与字段?
关键操作打点,统一字段如 trace_id、user_id 等;分级输出方便定位。是否有接入 ELK/SkyWalking/Prometheus?你对它们了解多少?
ELK 日志分析,SkyWalking 链路追踪,Prometheus 做指标监控和告警。服务日志采集量大时如何优化?是否有做日志分级、采样、异步处理?
使用 INFO/WARN/ERROR 分级,输出异步化,日志采样避免磁盘 IO 饱和。
🟦 8. 高并发处理
⬅️ 基础能力
项目中有没有高并发场景?比如下单、秒杀、接口爆量?
秒杀、抢购等常见高并发场景,需预热资源、限流控制。如何避免并发写入冲突?是否使用过分布式锁或乐观锁?
使用 CAS、版本号做乐观锁,或 Redis/ZooKeeper 分布式锁控制。
➡️ 深度考察
有没有设计过“削峰填谷”方案?使用了哪些技术手段?
使用消息队列缓冲请求,提前预加载数据、排队机制等。接口压力测试你是如何做的?用过 wrk、ab、Locust 吗?
使用 wrk、Locust 压测接口,分析 TPS、QPS、响应时长。如何做服务限流?是基于 IP、用户、接口 QPS?算法使用的是哪种?
常用令牌桶、漏桶;限流维度为用户/IP/接口级别;实现方式可用 Sentinel、nginx 限流等。
🟦 9. 数据分库分表
⬅️ 基础能力
你项目中有做分库分表吗?使用了什么中间件?
使用 ShardingSphere/MyCAT,实现水平分表。分库分表对事务的影响你了解吗?如何保证分布式事务?
无法用本地事务,需用分布式事务框架如 Seata、TCC、SAGA。
➡️ 深度考察
你是按什么维度做分表的?
常按 user_id、订单号、时间维度等分表。查询跨分表数据时如何处理?分页查询是否踩过坑?
使用中间件聚合查询,分页需先全量查询再二次分页,避免偏移量不准确。分库后主键如何设计?雪花算法你了解吗?
雪花算法生成全局唯一 ID,含时间戳、机器编号等。
🟦 10. 服务监控与运维相关
⬅️ 基础能力
你参与过线上服务的部署吗?部署在哪个平台?
使用 K8s、Docker 容器部署,CI/CD 自动化发布。如何查看一个服务的健康状态?用什么方式做健康检查?
服务提供/health
接口或基于探针检查。
➡️ 深度考察
你是否做过服务可用性监控?用的是什么方案?
使用 Prometheus + Grafana 做指标采集与可视化。如何设置服务告警?触发逻辑和报警方式是怎样的?
设置阈值(如 QPS、错误率)+ 推送(邮件、钉钉等)。遇到内存泄漏、CPU 飙高,你会怎么排查?
使用 pprof、top、netstat、日志定位瓶颈函数或异常 goroutine。
💡 三、软技能考察问题
📈 沟通与协作
- 你在多人协作项目中担任过什么角色?如何协调团队之间的分工?
- 你如何处理前后端协作中出现的问题?举一个例子说明。
- 项目中是否有你主导或推动的流程/规范改进?效果如何?
🧠 学习能力与主动性
- 你最近在学的技术或框架是什么?是基于什么原因去学它的?
- 遇到不会的问题你一般如何解决?请说说你调试一个线上 Bug 的思路。
🕹️ 问题解决能力
- 请描述一个你独立解决复杂问题的经历。具体困难是什么,你怎么解决的?
- 有没有出现过生产环境的事故?你是怎么处理的?
📌 时间管理与执行力
- 项目任务多、时间紧的情况下你如何规划和优先级安排?
- 你有过 deadline 前交付困难的情况吗?怎么处理的?
📣 表达能力与文档习惯
- 你是否有写技术文档或规范文档的习惯?举个例子。
- 项目中有没有你撰写的 README 或开发文档?具体包含哪些内容?