Skip to content

2)面试题汇总(部分)

🟦 1. Golang

⬅️ 基础能力

  1. Go 中指针和引用的区别?结构体如何使用指针接收器?
    Go 没有引用的语法,只有指针。使用指针接收器可以修改接收对象的字段并避免内存复制。

  2. defer 的执行顺序你了解吗?会在哪些场景踩坑?
    defer 是先进后出(栈结构)。常见坑包括 defer 闭包变量的值捕获时机、文件未及时关闭等。

  3. Go 中如何做错误处理?你是否使用过 errors.Wrap 或 error chain?
    通常使用 if err != nilerrors.Wrap/fmt.Errorf("%w") 可以保留原始错误信息,用于排查链路。

  4. slice 和 array 的区别?slice 扩容的底层机制是?
    slice 是对数组的封装,有长度和容量;扩容是重新分配更大数组并复制原有数据。

➡️ 深度考察

  1. Go 中 map 是线程安全的吗?如何实现并发安全的 map?
    原生 map 非线程安全,需加锁或使用 sync.Map,后者适用于读多写少的场景。

  2. channel 的使用场景?阻塞与非阻塞的区别,select 如何配合超时处理?
    channel 用于 goroutine 通信。阻塞:无数据时挂起;非阻塞:使用 select + default。可配合 time.After 超时。

  3. context 的设计初衷是什么?常用场景有哪些?context.WithCancel 和 WithTimeout 区别?
    用于跨 API 传递取消信号、超时和元数据。WithCancel 需要手动 cancel;WithTimeout 到期自动取消。

  4. 你是否使用过 sync.Once、sync.Map、atomic 操作?什么场景适用?
    sync.Once 用于懒加载,sync.Map 用于并发读写,atomic 提供原子操作用于计数器等。

🟦 2. 鉴权与权限系统设计

⬅️ 基础能力

  1. 你了解 OAuth2、JWT 的基本原理吗?项目中是否使用?
    OAuth2 是授权协议,JWT 是自包含令牌,包含身份信息、签名校验等。

  2. token 存储在哪里?如何保证安全?是否有 token 刷新机制?
    存储在客户端(如 LocalStorage)、服务器(如 Redis),使用 HTTPS、安全头,支持 Refresh Token 刷新。

  3. 前后端分离项目中,如何实现登录态的校验与续签?
    每次请求带 token,后端校验后返回新 token 或设置定期刷新机制。

➡️ 深度考察

  1. 权限系统你是如何设计的?RBAC、ABAC 还是自定义策略模型?
    RBAC 常用,基于角色授权;ABAC 灵活、支持条件判断;复杂系统可混用。

  2. 用户和权限的关系你是如何建模的?涉及哪些数据库表?
    通常包括用户表、角色表、权限表、用户角色中间表、角色权限中间表等。

  3. 如何处理按钮级权限、接口级权限?
    按钮级权限由前端根据权限数据控制,接口级在服务端做拦截校验。

  4. 鉴权是否做了缓存?Redis 缓存权限信息是否存在一致性问题?
    做了缓存,提升性能。需设计缓存失效策略或监听变更同步缓存防止一致性问题。

🟦 3. 微服务架构

⬅️ 基础能力

  1. 你在项目中如何做服务拆分的?拆分的依据是什么?
    按业务边界拆分,例如订单、用户、支付。避免单体服务耦合过重。

  2. 服务之间调用是同步还是异步?用的是什么协议?(HTTP/gRPC)
    同步用 HTTP/gRPC,异步用消息队列(Kafka、NSQ)。

  3. 服务注册与发现是怎么做的?是否用过 Nacos 或 Consul?
    使用注册中心(Nacos、Consul)管理服务实例和心跳。

➡️ 深度考察

  1. 如何应对服务雪崩?是否做过服务熔断、限流、降级机制?
    使用 Sentinel、Hystrix 等中间件做熔断限流,避免级联故障。

  2. 微服务之间调用失败如何处理?是否使用重试机制?
    支持重试,需设置重试次数、退避策略,防止服务雪崩。

  3. 如何做链路追踪?是否接入过 SkyWalking、Jaeger?
    使用 OpenTelemetry、SkyWalking 等工具采集链路数据,打通上下游调用链。

  4. 服务如何做到无感知升级?服务之间的版本控制是如何做的?
    灰度发布、新老版本并行,接口版本号、路径隔离等方式控制。

🟦 4. 服务间通信(RPC/gRPC/消息队列)

⬅️ 基础能力

  1. 你使用的服务间通信协议是?为什么选择它?
    RESTful 简单直观;gRPC 高效、支持 proto 定义、多语言。

  2. gRPC 和 RESTful 的优劣对比?protobuf 的作用是什么?
    gRPC 性能高、接口规范清晰;protobuf 是高效序列化协议,适合大规模通信。

  3. 项目中是否用到消息队列?用的什么(Kafka、RabbitMQ、NSQ)?
    用于解耦、削峰、异步处理。Kafka 适用于高吞吐场景。

➡️ 深度考察

  1. 如何实现消息幂等性?消息重复消费怎么处理?
    消费端落库前做幂等校验(如唯一 key);使用事务或唯一约束防重复消费。

  2. 消息队列积压你如何排查和处理?
    检查生产/消费速率、消费者是否宕机或阻塞,临时扩容消费者处理。

  3. 消息顺序性如何保证?是否使用过分区与消费组?
    Kafka 分区维持局部顺序,同一 key 投递到同一分区;消费组做并行消费。

🟦 5. 配置中心(Nacos)

⬅️ 基础能力

  1. 配置中心的核心作用是什么?相比本地配置文件有什么优势?
    动态配置、集中管理、环境隔离,避免频繁重启服务。

  2. 你如何使用 Nacos 管理多环境配置?命名空间、配置集、配置项分别指什么?
    命名空间对应环境,配置集对应服务模块,配置项是具体的 key-value。

➡️ 深度考察

  1. 配置热更新是如何实现的?服务如何感知配置变更?
    客户端监听配置变化,推送新值,应用动态加载。

  2. 如果 Nacos 服务不可用,你的服务能否正常运行?有没有做过降级处理?
    本地缓存配置,Nacos 宕机后读取本地快照,避免服务宕机。

  3. Nacos 的权限体系你了解吗?支持哪些接入方式?
    支持账号角色权限管理,支持 SDK、OpenAPI、Spring Cloud 等方式接入。

🟦 6. Redis 应用与原理

⬅️ 基础能力

  1. Redis 常用的数据结构有哪些?实际项目中都用在哪些场景?
    String、List、Hash、Set、ZSet,用于缓存、排行榜、计数器等。

  2. 如何防止缓存穿透、缓存击穿、缓存雪崩?
    穿透:加空值缓存;击穿:加互斥锁;雪崩:设置不同 TTL,使用限流。

  3. 你如何设计缓存 Key?是否使用过 TTL、LRU 过期策略?
    Key 命名规范如 user:123; TTL 控制数据时效,Redis 默认用 LRU 淘汰机制。

➡️ 深度考察

  1. Redis 是单线程,为什么还那么快?它真的只有一个线程吗?
    核心处理是单线程,避免上下文切换;IO、多线程 I/O 模型也逐步支持。

  2. 是否使用过 Redis 分布式锁?是怎么实现的?有没有遇到锁失效或死锁问题?
    使用 SETNX + EX 实现,Redlock 可用于高可用。需注意自动续期与异常释放。

  3. 使用 Redis 做权限缓存/session 缓存如何防止一致性问题?
    设置一致性 TTL、异步失效同步机制,关键数据变更主动清缓存。

🟦 7. 日志监控

⬅️ 基础能力

  1. 你使用的日志库是哪个?zap/logrus/sirupsen?
    zap 性能高,logrus 可扩展,sirupsen 是 logrus 的仓库名。

  2. 日志你是打到本地、文件,还是集中输出到 ELK/EFK?
    生产使用 filebeat 采集到 ELK,便于搜索与报警。

➡️ 深度考察

  1. 如何根据日志排查线上 Bug?有没有规范日志格式与字段?
    关键操作打点,统一字段如 trace_id、user_id 等;分级输出方便定位。

  2. 是否有接入 ELK/SkyWalking/Prometheus?你对它们了解多少?
    ELK 日志分析,SkyWalking 链路追踪,Prometheus 做指标监控和告警。

  3. 服务日志采集量大时如何优化?是否有做日志分级、采样、异步处理?
    使用 INFO/WARN/ERROR 分级,输出异步化,日志采样避免磁盘 IO 饱和。

🟦 8. 高并发处理

⬅️ 基础能力

  1. 项目中有没有高并发场景?比如下单、秒杀、接口爆量?
    秒杀、抢购等常见高并发场景,需预热资源、限流控制。

  2. 如何避免并发写入冲突?是否使用过分布式锁或乐观锁?
    使用 CAS、版本号做乐观锁,或 Redis/ZooKeeper 分布式锁控制。

➡️ 深度考察

  1. 有没有设计过“削峰填谷”方案?使用了哪些技术手段?
    使用消息队列缓冲请求,提前预加载数据、排队机制等。

  2. 接口压力测试你是如何做的?用过 wrk、ab、Locust 吗?
    使用 wrk、Locust 压测接口,分析 TPS、QPS、响应时长。

  3. 如何做服务限流?是基于 IP、用户、接口 QPS?算法使用的是哪种?
    常用令牌桶、漏桶;限流维度为用户/IP/接口级别;实现方式可用 Sentinel、nginx 限流等。

🟦 9. 数据分库分表

⬅️ 基础能力

  1. 你项目中有做分库分表吗?使用了什么中间件?
    使用 ShardingSphere/MyCAT,实现水平分表。

  2. 分库分表对事务的影响你了解吗?如何保证分布式事务?
    无法用本地事务,需用分布式事务框架如 Seata、TCC、SAGA。

➡️ 深度考察

  1. 你是按什么维度做分表的?
    常按 user_id、订单号、时间维度等分表。

  2. 查询跨分表数据时如何处理?分页查询是否踩过坑?
    使用中间件聚合查询,分页需先全量查询再二次分页,避免偏移量不准确。

  3. 分库后主键如何设计?雪花算法你了解吗?
    雪花算法生成全局唯一 ID,含时间戳、机器编号等。

🟦 10. 服务监控与运维相关

⬅️ 基础能力

  1. 你参与过线上服务的部署吗?部署在哪个平台?
    使用 K8s、Docker 容器部署,CI/CD 自动化发布。

  2. 如何查看一个服务的健康状态?用什么方式做健康检查?
    服务提供 /health 接口或基于探针检查。

➡️ 深度考察

  1. 你是否做过服务可用性监控?用的是什么方案?
    使用 Prometheus + Grafana 做指标采集与可视化。

  2. 如何设置服务告警?触发逻辑和报警方式是怎样的?
    设置阈值(如 QPS、错误率)+ 推送(邮件、钉钉等)。

  3. 遇到内存泄漏、CPU 飙高,你会怎么排查?
    使用 pprof、top、netstat、日志定位瓶颈函数或异常 goroutine。

💡 三、软技能考察问题

📈 沟通与协作

  • 你在多人协作项目中担任过什么角色?如何协调团队之间的分工?
  • 你如何处理前后端协作中出现的问题?举一个例子说明。
  • 项目中是否有你主导或推动的流程/规范改进?效果如何?

🧠 学习能力与主动性

  • 你最近在学的技术或框架是什么?是基于什么原因去学它的?
  • 遇到不会的问题你一般如何解决?请说说你调试一个线上 Bug 的思路。

🕹️ 问题解决能力

  • 请描述一个你独立解决复杂问题的经历。具体困难是什么,你怎么解决的?
  • 有没有出现过生产环境的事故?你是怎么处理的?

📌 时间管理与执行力

  • 项目任务多、时间紧的情况下你如何规划和优先级安排?
  • 你有过 deadline 前交付困难的情况吗?怎么处理的?

📣 表达能力与文档习惯

  • 你是否有写技术文档或规范文档的习惯?举个例子。
  • 项目中有没有你撰写的 README 或开发文档?具体包含哪些内容?