【面经】网宿科技-Go后端开发实习-二面面经
bg:9本大二/主go/一段实验室打工经历 二面感觉问得深很多,面试官笑呵呵的很有压力
1. 项目深挖(短链接生成系统 - 架构设计与一致性)
- 面试官: 请简单介绍一下这个短链接生成系统的核心流程。
- 面试官: 你为什么引入 Redis?如果去掉 Redis 直接抗 5000 QPS,PostgreSQL 的瓶颈大概会出在哪里?
- 面试官: 短链接生成的算法你用的哪种?如果是 Hash 算法,产生碰撞(Conflict)了你如何在代码层面解决?
- 面试官: 谈谈你提到的一致性方案:先更新数据库,再删除缓存。
- 面试官: 如果数据库更新成功,但删除缓存失败了,此时会有脏数据。除了重试机制,你了解“延迟双删”或者“监听 Binlog 异步删除”吗?
- 面试官: 如果短链接的跳转流量突然暴增(缓存穿透/击穿),你的系统有做什么防范吗?
2. Linux 基础与系统排查
- 面试官: 平时开发最常用的 Linux 命令有哪些?
- 面试官: 具体用什么命令查看系统内存?
free -h里的available和free有什么区别? - 面试官: 某个端口被占用,如何快速找到并 Kill 掉该进程?
- 面试官: 现在线上服务器 CPU 突然飙升到 100%,你的排查步骤是什么?
- 面试官: 如何使用
grep查找日志文件中包含关键词 "Error" 的前后 10 行? - 面试官: 知道
chmod的数字权限含义吗?755 代表什么权限?
3. Go 语言
- 面试官: 既然二面了,我们聊聊底层。讲讲 Go 的 GMP 调度模型,为什么要有 P?
- 面试官: 项目中你是怎么处理多个 Goroutine 协同工作的?(Context 或 WaitGroup)
- 面试官:(深挖)Context 的
Done()信号是怎么传递的?底层是什么数据结构? - 面试官: Go 的垃圾回收(GC)大致流程是什么?为什么会有 STW?
- 面试官: 写代码时如何避免 Goroutine 泄露?
4. Docker 与云原生
- 面试官: 岗位偏向容器平台,你平时
docker run -v和-p分别代表什么? - 面试官: 讲讲 Docker 的 Multi-stage build(多阶段构建)。
- 面试官:(追问)多阶段构建除了减小镜像体积,对代码安全性有什么帮助?
- 面试官: 你知道 Docker 是利用 Linux 内核的哪些机制实现隔离的吗?(Namespace / Cgroups)
- 面试官: 假如容器内的 Go 程序发生了 OOM(内存溢出),你应该去哪里看报错日志?
