Golang 社招面经集合
之前找工作,搜了一部分互联网上的Golang社招面经,这里是一部分的总结
> 牛客的md编辑器不太行,我原始的md文档渲染的一塌糊涂,这里用富文本写出来,复制到自己的md编辑器看就可以了,不过也没多少样式。
# v2ex调研
## 4年大厂面经
https://v2ex.com/t/919283
@JiangYon 总结一下我学 /复习 golang 的路径
1. 看了 go by example 和 learn go with tests 熟悉了基础的语法
2. 后续购入 & 认真读过的 Golang 读物(时间顺序):
- Go 语言核心编程:读完,了解基本的坑
- Go 语言编程之旅:读完,教会我写项目
- Go 专家编程:读完,了解了常用数据结构的实现
- Go 语言设计与实现:读了一部分,比较多科班的内容考验读者基本功
- Go 语言底层原理剖析:读了一部分,代码有点多,抽象不够,考验耐心
- Go 程序员面试笔试宝典:读了一部分,Q&A 的形式,八股文大杂烩
我觉得你这样问的话,可能主要看有多少时间准备吧。如果你在未来半年内不考虑面试,那应该是有时间吃透其中几本书的;如果马上就要面试了,或许更推荐以抽象程度比较高的博客、文章为主。
1. 面试不通过的原因自然是不得而知,很大程度会是答得不让面试官满意吧,可以是深度不够,也可以是广度不够,这些不重要。
2. 通俗来说怎么向别人更好地介绍你接触的业务,同时让别人有可以入手提问的角度。譬如如果你做了一个收款打款(业务表述)的东西,那换个话术讲它可能是一套数据强一致的 CRUD (技术表述);又譬如我做了一个短网址服务(业务),那它本质上是一个流量入口,是一个承载 xx QPS 的业务网关(这个描述可能不太合适,但总会有合适的模型能套在你的业务上),它该具有 xx QPS 服务应该有的什么特点(例如可用性、性能、限流熔断 bla bla )。工作得越久,业务越复杂,越应该想办法让它能在数十秒内让别人听明白(哪怕有一些偏差,也远胜于摸不着头脑)。
## 五年经验 offer字节
https://v2ex.com/t/1060319
力扣100、面试范围:
GMP 、内存分配、gc 、ctx 、sync 、channel 、协程池、map 、slice 、interface 、携程控制、defer ,go 尤其是 slice 是面试重灾区,一般 go 的代码题都是 slice
回复:
1.投自己业务匹配的岗位 2.简历上面要写出亮点,不要让面试官发散问,让面试官围绕你的简历问 3.场景问题无非就是高可用、稳定性、高并发,解决思路类似 4.有的面试官挺傻 b
感谢分享,这些其实是公认的面试经验了,我建议 OP 找一个领域进行突破, 比如云原生、金融业务、AI 提效,
把你的工作经验能够靠上这些的方面尽量包装一下,把你的自己业务抽出来,空闲时间学一学相关内容改改简历加上这些内容,这样你的路子会宽一些。
系统设计现在分享非常非常多了, 至于高可用、稳定性、高并发,我可以这么说,多数系统设计方案也是纸上谈兵,业务层面是无法深入到基础设施层的,很多业务团队也不知道这些下层是怎么搞的。
因为都是看一些互联网公司的分享和技术博客,当然面试的时候要说还是要说的。(没吃过猪肉还没见过猪跑,哈哈 )。
我也是准备往云原生+稳定性+分布式数据存储上转,这个领域做的不好就是大号运维,想做的好路径很陡峭
## 社招面试网站推荐
https://www.v2ex.com/t/1125535
- 应届的八股有些难度也很大的,你把项目准备一下就行了,社招主要还是项目穿插一些八股。
- dlmy:
5 年经验我建议准备一个最拿的出手的项目,最好还有一个能 hold 住的框架源码,再把这个框架源码融入到这个项目中去,引导面试官去问源码,这样面试通过的概率就很大了。
作为一个常年在公司担任二面的面试官来说,我常问的问题如下:
1 、项目数据容量多少?访问量多少? PV 多少? TPS 多少?
2 、项目可靠性要求 99 还是 99.99 ?需要 7x24 服务吗?设计维护周期多少?
3 、项目中业务数据是怎么流转的,怎么存储的,如何去解决并发读与并发写的问题?
4 、项目中你面临的最大困难是什么,如何解决的,在这个过程中你有什么收获?
5 、如果项目体量再扩大 10 倍、100 倍,你觉得目前的项目架构哪些地方需要改进?
一般我会在这些问题中穿插一些技术点,根据实际情况进行提问,差不多 40 分钟左右结束。
以前面试的重点是 "绝活哥",现在企业的要求是 "全能王",所以面试前应该好好去准备一下的。
如果你面的是 Java ,那以前的 "绝活哥" 指的就是在 Spring 、Redis 、MySQL 、RocketMQ 、ES 中精通其中的一两个就行了,而现在的 "全能王" 就是全部都要。
## 35k程序员(p7)面经
https://v2ex.com/t/1106214
## 面试体系的搭建
写好自我介绍
https://www.v2ex.com/t/1066051
# xhs调研
下面这份主要来自xhs
## 大厂3年经验
64 【go后端的社招经验 - ZooKeeper | 小红书 - 你的生活兴趣社区】 😆 YIm6s2jHeSsqhCR 😆 https://www.xiaohongshu.com/discovery/item/68416653000000002100595e?source=webshare&xhsshare=pc_web&xsec_token=ABc07bM1v3ae5mdYBTObLSbFnnxFsV2wjvUPpwiRNcXkI=&xsec_source=pc_share
go后端的社招经验
先介绍下背景:
双非本,211硕,大厂3年经验,一直在做c端业务
重点准备八股+项目+刷题
八股:go基础、DB、Cache、MQ
刷题:leetcode hot100刷了一遍
项目:重点包装一下项目,把架构和细节吃透,可以先用小公司练手
面试情况:
高德(谈薪后已拒)
滴滴(已oc)
字节(已oc)
阿里(已oc,需转java,谈薪中)
pdd(已拒)
地平线(二面挂)
理想(三面挂)
腾讯(简历挂,怀疑鹅厂在北京没hc)
知乎(已拒)
美图(已拒)
微博(已拒)
go社招高德面试经验分享
一面(一个小时)
Q:在你负责的业务中挑一个有难度的,在白板上手绘架构图并进行介绍。
反思:
这个面试形式,感觉更像是晋升答辩,基本就是考察业务复杂度,以及对业务的理解程度。
全程围绕业务细节进行Q&A,同时穿插一些技术选型的问题,比如限流算法为什么使用滑动窗口,不使用令牌桶漏桶,传统的cookie&session与jwt相比,各自的优缺点与适用场景等等。
二面(一个多小时)
Q:主要问了一些基础问题
1.给一段go语言的代码,说出有哪些问题(主要关注下并发加锁,并发等待,错误处理,超时控制,是否使用已废弃的标准库)
2.给一个mysql语句,看能不能走到索引,以及为什么
3.聚簇索引与非聚簇索引
4.间隙锁 for update访问不存在的key会使得锁范围扩大,除此之外还有什么情况会让锁范围超出预期
5.在你的业务场景中,使用redis来做什么
6.zset的底层实现
7.有没有遇到过大key 热key的情况,怎么解决的
8.看你项目中用到了mq,kafka是如何保证顺序消费的,数据积压了怎么处理
9.了解死信队列吗,死信队列有什么作用
10.服务的热更新是怎么做的,比如nginx的restart会导致连接断开,而reload不影响现有连接
11.设计一个长连接网关服务
12.简单聊了下项目
13.反问环节
反思:二面难度中规中矩,主要是考察基础,稍微会有些压力,不过比较舒服的点是没有手撕算法。
三面(一个半小时):
Q:
1.主要聊过往的项目,聊项目背景、系统架构、为什么做这个事?以及在这个项目中遇到的问题(技术问题+团队协作),你是怎么解决的。事后复盘,项目收益如何,你的反思是什么,如果再让你重新做这个项目有哪些点可以优化。
2.工作过程中难免会遇到线上事故或者线上问题,在解决完线上case之后,你做了什么去保证以后不再出类似问题。
3.反问环节,介绍了一下团队架构与业务,聊了聊个人发展,家庭情况。
hrg面(半个小时左右)
Q:自我介绍,看机会的原因,未来五年内的职业规划,期望薪资,优缺点,介绍下在过往项目中自己是什么角色,过往的项目有什么可以优化的地方,对ai的了解,平时如何自我提升等等。
总结:
高德的面试体验很好,三面均无手撕,面试官的技术能力比较强,整体风格比较务实。
go社招滴滴面经分享
跟大家分享一下滴滴的面试过程,希望能帮到正在找工作的朋友。
一面
一面面试官看着比较年轻,态度很好,问了一些八股,简单聊了聊项目,然后写一道easy算法题,整体上很基础。
二面
二面是+1,技最后写了一道术能力比较不错,沟通起来也很舒服,重点问了下项目细节,然后出了个系统设计题,问了些关于服务治理、服务重构的方法论,算法题。
三面
跟其他家类似,三面基本就是聊项目,聊收益,聊成长,重点关注业务能力与沟通能力。
hr面
滴滴的hr面感觉有点水,不到二十分钟就结束了,问了些不痛不痒的问题。
题目(部分)
1.介绍下gmp,go的gc
2.slice的扩容机制,slice是不是并发安全的
3.context的超时控制如何实现的
4.go语言中的内存逃逸是什么,会有什么影响,如何避免
5.go语言中有哪些情况会导致内存泄露
6.mysql中mvcc的实现,实时读快照读
7.聊一下go和php的区别(滴滴服务端还有一部分php服务)
8.redis的key的底层实现
9.redis的过期策略
10.分布式系统数据一致性的保证
11.聊了下分布式哈希,raft一致性算法中的投票依据等等
12.设计了一个乘客司机订单表,给出具体的字段以及设计思路
算法题:
lc 92 反转链表ⅱ
两个协程交替打印1-100
滴滴的面试难度适中,一面面试官比较保守,整体偏八股,没有问特别深入。二面业务导向,主要深入业务细节,从而判断候选人整体的能力。三面无需多言,软素质更加重要。hr的话语权貌似不高,主要看业务侧的面评。
Go的泛型是怎么实现的,Java的呢?
泛型的实现有哪些方式?
为什么Go要引入goroutine?
简述执行SQL语句的全过程。
update是怎么执行的?
可重复读是怎么实现的?
如何保证数据的原子性和持久性?
索引的分类,了解最左原则吗?
分析下列情况什么时候会用到索引。
简述Redis的AOF和RDB。
golang的基础类型;slice这种和int float有什么区别;传递一个slice需要注意什么;如果在slice里存放指针,对slice进行复制,修改新的某个下标变量时会影响老的吗
给了一段代码,关于select多路复用的代码,问这段代码输出什么
给了一段代码,关于context实现超时控制的,问有什么问题
go语言中map底层
mysql的事务隔离级别;如何解决幻读;Mysql如何给单行数据加锁;对数据库的复制 备份有了解吗;半同步复制两种模式
分布式理论raft共识算法的优缺点
TCP三次握手最后一次ack丢失会怎样;服务器端没收到第二个ack,客户端发数据,会发生什么;TCP的time_wait状态
多线程开发如何避免死锁
用过哪些ai 编辑器
问我的项目会遇到会遇到哪些难点
如何看待工程师文化
手撕代码:快排,问什么场景性能最坏
go语言中int和int32有什么区别
协程,线程,进程的区别。多进程程序有必要吗
介绍一下垃圾回收机制
进程之间通信方式
I/0方式有哪几种,I/O多路复用底层实现 Golang的I/0多路复用:
浏览器到输入URL的过程
TCP三次握手如果客户端最后一次不握手不发送ACK会怎么样
Go的垃圾回收机制。如何知道线上垃圾回收出现问题,使用什么工具查看
数据库的ACID以及如何实现。数据库的隔离级别。innodb和myisam的区别:
在使用数据库事务的时候需要关注什么
多个节点搭建数据库,数据库的主从复制
在go语言调用方法时,传递参数时是值传递还是引用传递
defer命令原理
go中什么数据结构是值拷贝,引用拷贝。
讲一下slice和数组
为什么go要引入slice和数组
goroutine中只能用channel的,什么联系
goroutine中怎么用锁的
讲一下go的泛型
讲一下go的接口
讲一下了解的设计模式,讲了策略模式
用过什么数据库,讲了Redis和MySQL
MySQL和Redis的区别,它们的技术选型,应用场景,讲讲理解
讲解对MySQL索引的理解
有没有用过elasticsearch(只了解过)
共享本地ide手撕反转链表
http和tcp的区别
开始比较随便的问题
有没有用过腾讯云或者阿里云
有没有用过k8s
有没有用过docker
项目怎么部署服务的,docker部署有什么优势
有没有用什么ai辅助编程
## 3年经验
28程序媛gap三月golang devops运维开发面经
1. defer执行顺序,项目中defer使用的场景
2. go语言怎么实现并发控制
3. 父context被取消,子context的生命周期会怎样
4. 对关闭的channel操作会发生什么
5. 说下gmp模型
6. groutine和线程的区别
7. groutine的使用场景
8. 介绍下worker pool
9. K8S中如何查看已经挂掉的pod日志
10. docker的网络模式
11. docker中CMD和ENTRYPOINT的区别
12. 如何查看机器上的端口是否启动
13. 手撕go协程池
14. goroutine与线程的区别
15. map是否并发安全
16. 在高QPS,不引入外部资源下,如何优化sync.map的性能
17. redis的bitmap数据结构和使用场景
18. 介绍下布隆过滤器
19. 消息队列用的什么(直接回复没用过就没下文了)
20. MySQL单表大表性能优化
21. 离职原因
22. 个人发展的考量,对行业有什么期望
23. 前司的职级和薪资,近两次绩效
24. 打开画图软件,画一个之前工作中比较有挑战的项目的架构图,边画边讲
25. 在架构中,讲述自己主要负责的部分
26. 项目中有哪些关键的稳定性保障
27. 复盘之前出过的稳定性问题,解决步骤,后续操作有哪些,当下能不能再给出一些解决方案
28. 之前是否在大的决策中与别人有意见不同意的,后续的解决方案是什么
29. go使用的标准包有哪些(我自己挖坑了sync)
30. 项目中sync怎么用的,能否用channel替代waitgroup(这题其实我没怎么理解)
31. web端项目可能会引发的安全问题有哪些
32. 横向越权与纵向越权,什么样的情况会导致横向越权
33. 现有项目单表最大量级有多少?如何优化处理的
34. 慢sql的问题排查
35. 索引正常,sql无优化空间,如何提高查询速度(回答了缓存,分区分表)
36. 缓存,分区分表也做了,业务请求高并发,还有什么优化空间?(回答读写分离,换个数据库)
37. 数据不常变,是否了解本地缓存?感觉上面的场景他想让我回答本地缓存
38. 无手撕:面试之前笔试两道medium力扣
39. 项目细节追问(30min)
40. 项目中最有成就感的事情(2-3件)
41. channel底层实现机制以及怎么保证线程安全
42. 内存逃逸分析
43. mysql慢查询优化
44. redis单线程架构的优势和局限,单线程为什么快
45. docker镜像分层原理
46. 镜像大小的优化策略
47. K8S中Pod的生命周期
48. 从创建deployment到容器拉起经历的阶段
49. Pod是如何创建的
50. 如何保证任务不会被重复消费
51. 手撕:无重复字符的最长子串
## 2年经验
来自面经博主 常笑笑 2年经验
https://www.xiaohongshu.com/explore/67d5048a0000000009014879?xsec_token=AB9uaLrumKUXawI3hb2Wot-Unk4-bjggABT-8YU7EqbLc=&xsec_source=pc_user
🦐虾皮面试题:讲讲go的内存分配机制
见xhs收藏
1️⃣ 考察点
内存分配设计原理、性能优化相关、GC相关、实际问题解决相关
2️⃣ 面试回答
1. 从基本概念讲起,逐步深入
2. 结合实际应用场景举例说明
3. 展示对性能优化的理解
4. 适当提及自己遇到的相关问题和解决方案
5. 如果学过其它语言,可以对比其他语言的内存管理方式。
面试时回答:Go的内存分配机制采用了三级缓存结构来优化性能,每个工作线程都有自己的本地缓存mcache,可以无锁地快速分配小对象;当本地缓存不足时,会从全局的mcentral获取,虽然需要加锁但竞争概率很低;大对象则直接从mheap分配。通过span机制管理内存块,既提高了小对象分配效率,又减少了内存碎片,并通过逃逸分析尽量将对象分配在栈上。在实际应用中,可以通过控制对象大小来优化分配效率,或通过逃逸分析减少堆分配压力。
3️⃣ 延伸思考
6. 什么情况下Go编译器会决定将变量分配在堆上?能否举例说明如何通过代码优化减少不必要的堆分配?
7. 为什么大对象的分配性能相对较差?在实际项目中应该如何优化大对象的使用?
8. 内存分配器是如何协助垃圾回收器工作的?
9. 使用过sync.Pool吗?它与内存分配器有什么关系?
10. 假设你发现应用的GC时间过长,可能是什么内存分配模式导致的?你会如何分析和优化?
## 某博主面经
> 忘记来源了,应该是xhs某个帖子分享,原帖子是一个文字视频
蚂蚁一面
1.自我介绍,深挖工作项目,项目的并发量、QPS,做的优化,解决,遇到的问题,难点
2.负责模块的架构设计及原因?
3.有没有处理过CPU高和内存高的问题?如何解决的?
4.如何解决项目中锁竞争比较频繁的情况?
5.项目里的MySQL主从延迟产生后,从哪些层面可以避免?
6.两条update语句处理一张表的不同的主键范围的记录,一个到阻塞?底层是为一个>15,会不会遇
7.MySQLMVCC的,本原理,RR下幻读问题如何解决,间隙锁死锁原因与排查思路,如何预防?
8.redolog的在磁盘上的存储方式,落盘的策略有哪些,什么情况下使用哪种策略?
9.联合索引ABC,现在有个执行语句是A=XXXandC<XXX,索引怎么走;
10.Redis有什么持久化策略有哪些
11.Redis64位KV存储,大key的场景怎么处理
12.RabbitMQ的镜像集群与晋通集群有什么区别,如何保证高可用,消息的持久化机制?
13.场景题:多线程转账,如何确保转账成功
14..LRU缓存实现,要求set\get操作o(1)时
蚂蚁二面
1.根据你介绍的一个项目,如果量级扩大1000倍,你会怎么做?有哪些优化措施?高性能&高可用措施有哪些?
2.有没有处理过线上疑难问题?OOM如何排查与解决?
3.有过GC调优的经历吗?
4.有用过MySQL的什么高级特性吗?
5.联合索引的实现原理、需要注意什么
6.sql题:给学生表、课程成绩表,求不存在01课程但存在02课程的学生的成绩
7.为什么在业务里用Redis,Redis有什么优点?
8.对Redis里数据结构的实现熟悉吗?详细讲一讲
9.用过Redis的哪些数据结构,分别用在什么场景?
10.Kafka在项目中怎么使用的?kafka的优势和发送过程?Kafka如何保证消息有序?
11.启动两个线程,一个输出1,3,5,7...99,另一个输出2,4,6,8...100最后按序输出1,2,3,4,5...100
12.提供一个整型数组以及一个整数s,如果该数组中存在n个连续元素,且元素相加之和大于等于s,则返回满足该条件的连续元
蚂蚁三面
1.数组A,`2*n`个元素,n个奇数、n个偶数,设计一个算法,使得数组奇数下标位置放置的都是奇数,偶数下标位置放置的都是偶数..
2.Leetcode121买卖股票的最佳时机
3.写SQL,一个video表,里面有三个字段user_id、video_id、start_time表里面的一行记录表示的是某个user在在某个time看了某个video,要求:今天看不同视频数量超过100个的用户id的前三名
4.项目架构设计?
5.项目中出彩点?
6.为什么这样设计?是否涉及过度设计?
7.继续聊项目的细节
8.工作两年的收获是什么?说一说最有成就感的一件事
9.最近在学习什么东西吗?
10.离职原因?是否做好应对风险的准备?
滴滴一面
1.gomap为什么要设计成不支持并发的
2.go的反射了解么,原理是什么,实际使用过吗
3.Innodb索引的数据结构,描述下多级索引命中的场景
4.Mysql行锁,颗粒度有什么变化
5.Mysql怎么做优化的
6.做过分库分表么,为什么要分库分表,会有什么问题,多少数据适合分库分表,跨库,聚合操作怎么做
7.Sql字段超长了怎么办?截断还是继续写
8.Redis持久化的两种方式,分别会在什么时候数据丢失
9.Redis链表,删除其中某个元素后发生的变化
10.Redis如何实现string,这样实现有什么好处
11.Redis怎么实现分布式锁
12.算法题:输出有序数组的全排列
13.算法题:三数之和
滴滴二面
1.画出项目架构图,以及数据流向,然后深挖项目
2.golang的协程讲一下原理
3.Mysql回表、索引结构
4.邮箱字段加索引可以怎么设计,详细说说多个方案
5.多个服务,流量突增怎么解决?
6.限流的底层原理是什么?
7.限流会影响其他服务吗?
8.Redis限流器可以怎么设计
9.算法题:一个N位数K,从N位中去掉M个数字,使剩下的数字最大
10.算法题:合并有序链表
11.场景设计:设计一个乘客订单表,解释各个表字段设计的原因;表逐渐变大,导致必须分表分库,对之前的设计有什么需要改进和补充;分表分库后,用户想快速查到他之前的订单历史,除了每个表和库都查询还有什么好的办法
高德一面
1.索引的类型,索引怎么进行检索的
2.mysql索引左前缀原理,怎么优化,哪些字段适合建索引,索引有什么优缺点
3.联合索引失效的场景?a,b,c联合索引b=null,a=xxandb=xx or c=xx会生效吗?
4.线上遇到过慢查询么,怎么定位,优化的
5.数据库的explain说下,explain有哪些字段,分别什么含义,重点关注哪些字段?
6.千万级别的数据表,查询效率很慢,有什么优化方法?
7.你了解那些锁,乐观锁和悲观锁,为什么读要加锁,乐观锁为什么适合读场景,写场景不行么,会有什么问题
8.什么情况下产生死锁,工作中的死锁怎么处理
9.redis缓存穿透,布隆过滤器,怎么使用,有什么问题,怎么解决这个问题
10.redis分布式锁,过期时间怎么定的,如果一个业务执行时间比较长,锁过期了怎么办,怎么保证释放锁的一个原子性,你们redis是集群的么,讲讲redlock算法
11.你们用redis么,用来做什么,什么场景使用的,遇到过什么问题,怎么解决的
12.算法题:收集了一组整数数组,每个元素代表一天与前一天相比的带宽变化:负数代表带宽减少了、正数则代表带宽增加了。请编写程序找到一段连续的时间日数,使得在这一段时间内的带宽变化量总和是最大的,返回日期区间和最大值。,
高德二面
1.了解哪些设计模式,工厂,策略,装饰者,桥接模式讲讲,单例模式会有什么问题
2.mysql中有一个索引(a,b,c),有一条sql,wherea=1andb>1andc=1;可以用到索引么,为什么没用到,B+树的结构,为什么不用红黑树,B树,一干万的数据大概多少次io
3.mysql聚簇索引,覆盖索引,底层结构,主键索引,没有主键怎么办,会自己生成主键为什么还要自定义主键,自动生成的主键有什么问题
4.redis线程模型,单线程有什么优缺点,为什么单线程能保证高性能,什么情况下会出现阻塞,怎么解决
5.kafka是怎么保证高可用性的,讲讲它的设计架构,为什么读写都在主分区,这样有什么优缺点
6.kafka怎么保证消息不丢,从生产者,服务端,消费者讲一讲
7.Redis乐观锁的应用场景,举例说明
8.编程题:多个线程从Redis获取一个数,进行随机累加,要求保证一致性,写出程序
9.算法题:给定发车时间和延误区间,判断当前时间能赶上的最近的车。
高德三面
1.你怎么理解线程安全,哪些场景会产生线程安全问题,有什么解决办法
2.mysql多事务执行会产生哪些问题,怎么解决这些问题
3.分库分表做过么,具体讲讲
4.mysql主从复制,主从延时怎么解决
5.怎么保证redis和mysql的一致性,redis网络原因执行超时了会执行成功么,那不成功怎么保证数据一致性
6.redis持久化过程,aof持久化会出现阻塞么,一般什么情况下使用rdb,aof
7.线上有遇到大流量的情况么,产生了什么问题,为什么数据库2000qps就撑不住了,有想过原因么,你们当时怎么处理的
8.限流怎么做,如果让你设计一个限流系统,怎么实现
9.你们为什么要用mq,遇到过什么问题么,怎么就解决的10.你平时开发中怎么解决问题,假如现在线上有一个告警,你的解决思路。
美团一面
1.Redis集群,为什么是16384,哨兵模式,选举过程,会有脑裂问题么,Raft算法,优缺点
2.数据库的索引有哪几种?为什么要用B+树来做索引?组合索引和几个单个的索引有什么区别?
3.数据库的大表查询优化了解吗?
4.MVCC机制了解不?MVCC机制有什么问题?怎么去解决这个问题?
5.Mysql慢语句调优做过吗?说说你是怎么做的?
6.内存溢出,内存泄漏遇到过么,什么场景产生的,怎么解决的?
7.你们用的什么消息中间件,为什么用kafka?怎么保证高吞吐量的?
8.kafka重平衡,重启服务怎么保证kafka不发生重平衡,有什么方案?
9.怎么理解分布式和微服务,为什么要拆分服务,会产生什么问题,怎么解决这些问题
10.有哪些编码格式,有没有想过为什么会有这么多的编码格式。
11.外卖系统,一天一千万条数据,用户需要查到近30天的数据,商家也要查询到30天的数据,如何优化?
12.一个热榜功能怎么设计,怎么设计缓存,如何保证缓存和数据库的一致性?
13.给定一个长度为N的整形数组arr,其中有N个互不相等的自然数1-N,请实现arr的排序,但是不要把下标0~N-1位置上的数通过直接赋值的方式替换成1~N
14.判断一个树是否是平衡二叉树
美团二面
1.Innodb的结构了解么,磁盘页和缓存区是怎么配合,以及查找的,缓冲区和磁盘数据不一致怎么办,mysql突然宕机了会出现数据丢失么
2.Redis字符串实现,sds和c区别是什么?讲讲空间预分配
3.Redis有序集合怎么实现的,跳表是什么,往跳表添加一个元素的过程,添加和获取元素,获取分数的时间复杂度,为什么不用红黑树,红黑树有什么特点,左旋右旋操作
4.10模型了解么,多路复用,selete,poll,epoll,epoll的结构,怎么注册事件,et和lt模式
5.怎么理解高可用,如何保证高可用,有什么弊端,熔断机制,怎么实现的
6.对于高并发怎么看,怎么算高并发,你们项目有么,如果有会产生什么问题,怎么解决
7.讲一下分布式锁,基于zookeeper实现和redis实现在性能上有什么差异?
8.kafka如何保证不丢消息又不会重复消费?
9.leetcode55.跳跃游戏,给定一个非负整数数组,你最初位于数组的第一个位置。
10.算法:给定一个二叉树,请计算节点值之和最大的路径的节点值之和是多少,这个路径的开始节点和结束节点可以是二叉树中的任意节点
字节三面
1.大key了解吗?大key有什么坏处,为什么?如何解决大key
2.热点key了解吗,怎么解决呢?
3.你们Redis的内存淘汰策略是什么?用的哨兵还是集群,一致性Hash与Redis哈希槽原理是什么
4.让你设计一个限流的系统怎么做?为什么这么设计?各有什么优缺点?
5.设计一个延时任务系统怎么做?为什么这么设计?各有什么优缺点?
6.Mysql索引优化没有走对是什么原因?
7.explain语句会执行sql吗?
8.采用分库分表性能提升了多少知道吗?为什么要用分库分表?
9.怎么解决分库导致的分布式事务问题?
10.分库分表怎么查询的?
11.说一下读写分离,如果有数据库延迟怎么办?
12.给出一串字符串,写出选取三个字符组合出来的所有可能,多种方法实现
13.给出一棵二叉树的根节点,现在有这个二叉树的部分节点,要求这些节点最近的公共祖先。
14.现有一个随机数生成器可以生成0到4的数,现在要让你用这个随机数生成器生成0到6的随机数,要保证生成的数概率均匀。
15.说一说写后读问题。
字节一面
1.Redis你比较熟吧,说说它机制为什么快
2.Redis有几种数据结构,底层分别是怎么存储的?
4.Redis数据幂等性是怎么保证的?
5.Redis内存不足时怎么办?
6.Redis分布式锁先SETNX后,未来得及设置过期时间宕机了怎么办?
7.Zset延时队列怎么实现的?
8.MySQL的索引结构,聚簇索引和非聚簇索引的区别
9.MySQL有几种高可用方案,你们用的是哪一种
10.如果让你设计MySQ高可用方案的话,你会优先考虑哪些方面?
11.Kafka消息的可靠性、顺序性是如何实现的的?
12.讲讲Kafka的ISR机制
13.Kafka与其他MQ的对比以及怎么选择
14.有一个任务系统当用户完成任务后会进行发奖,怎么保证任务完成后发奖一定成功?
15.SQL:查找员工表第N高的工资
16.一个无序数组找其子序列构成的和最大,要求子序列中的元素在原数组中两两都不相邻
17.LeetCode209二叉树转双向链表
字节二面
1.项目中如何解决重复消息和保证消息不丢?
2.项目中是如何解决缓存击穿和缓存穿透的问题?还有别的方案吗?
3.项目为什么用Kafka而不是其他的?Kafka和RocketMQ有什么区别,适用场景分别是什么?
4.了解哪些设计模式,在项目中用到哪些,具体说说?
5.Redis的ZSET怎么实现的?尽量介绍的全一点。
6.Redis的ZSET做排行榜时,如果要实现分数相同时按时间顺序排序怎么实现?
7.项目里用Redis除了缓存还做了什么吗?
8.为什么会考虑用Redis做分布式锁呢?其他的东西可以做分布式锁吗?分布式锁对使用的组件有什么要求呢?数据库实现分布式锁和Redis各有什么优劣?
9.MySQL的InnoDB引擎了解吗,用自增值和非自增作值作主键有什么区别?
10.MySQL事务的四个隔离级别?每个级别可能产生的问题是什么?
11.Binlog日志和Redolog日志清楚吗?详细说说?以及在日常工作中怎么使用?
12.如何排查CPU飙高,CPU都有哪些指标,分别介绍下对应指标升高出现的原因?
13.假设现在让你去优化淘宝的商品搜索接口,你有什么思路?
14.假设现在要维护用户的姓名和身份证号,从三高系统的角度你会如何设计存储?
15.SQL题(表T(id,name,salary,city)用SQL实现找到同时符合城市平均工资大于5000,单人工资大于10000的人的名字)
16.算法:验证对称二叉树
快手一面
1.golang有线程池吗?如何实现类似线程池的效果?
2.Redis有了解过么?Zset的底层数据结构是什么?
3.讲讲Redis分布式锁原理
4.Redis的淘汰机制以及过期策略
5.MySQL联合索引跟非联合索引它在这个存储上有啥区别?联合两个主键,两个主键和非两个主键在存储上有什么区别?它的叶子节点跟非叶子节点都存在一些什么内容?
6.Sql查询语句确定创建哪种类型的索引?如
9.为什么需要消息系统,MySQL不能满足需
求吗?
10.Kafka怎么保证数据可靠性?
11.讲讲Kafka维护消费状态跟踪的方法
12.RocketMQ的数据存储格式是什么样的
13.场景题:多个RPC,第一个RPC服务写一个数据,第二个RPC服务也去写一个数据,然后当第二个RPC服务失败了之后要去回滚第一个RPC的这个结果,怎么处理
14.思考题:那假设一种高热的数据它突然之间过期了,怎么预防这样的情况?
15.思考题:本来有100台机器,我要扩到150。那在50台新起的这个机器上面是没有LocalCache的,那如果说这个时候有请求到上面来,就直接就会请求到线上去了,这种问题怎么去避免?
16.算法题:最长公共子序列
快手二面
1.遇到的线上问题(如OOM、性能瓶颈)如何排查解决?
2.如何评估系统的QPS和容量?
3.设计一下微博/朋友圈Feed流功能。
4.大量并发点赞时的处理策略是什么?
6.Kafka分布式(不是单机)的情况下,如何保证消息的顺序消费?
7.Kafka主题,分区和日志文件的关系
8.Redis分布式锁和Zookeeper分布式锁区别
9.Redis的单机性能瓶颈在哪?1
10.如何保证Redis缓存与数据库双写时的数据一致性?
11.为什么Zookeeper可以保证CP12算法题:合并n个有序链表
13.LRU缓存实现
快手三面
1.用三个线程交替打印ABC,共打印100次。
2.线上GC频繁,如何定位原因?列举可能的排查步骤。
3.设计一个支持干万级用户同时在线的弹幕系统,需考虑实时性、消息不丢失、流量突增等问题。如何设计架构?
4.设计短视频推荐系统的实时特征更新模块,如何保证低延迟和高吞吐量?
5.现有用户表数据量达到亿级,查询性能下降,如何优化?是否需要分库分表?具体分片策略如何设计?
6.如何看待AIGC(AI生成内容)对短视频行业的影响?如何将其应用于内容生产流程?
京东一面
1.线上遇到过慢查询吗?怎么定位问题的?怎么优化的?
2.一般你们怎么建Mysql索引,基于什么原则,遇到过索引失效的情况么,怎么优化的?
3.你们建表会定义自增id么,为什么,自增id用完了怎么办
4.介绍一下Mysql写入数据的流程,越详细越好。
5.Redis线上的持久化策略是怎么样的?你们是多久同步一次的?
6.Redis的set有了解过么?底层的数据结构是怎么样的?和zset有啥差别?
7.系统在11:05设置一个值,并给出5分钟的过期时间,系统刚刚set完之后redis集群崩溃,11:11分系统重启成功,那么redis中set的值是否还存在?
8.项目中用到的消息队列的消息模型是怎么样的?Kafka、RabbitMQ有啥区别么?
9.项目中这些场景不用队列行不行?会有什么问题吗?
10.Kafka一致性、可靠性,为什么能做到高吞吐,消息积压怎么处理,如何保证消费有序?
11.RPC框架调用的流程是怎么样的?讲一下核心步骤。
12.一个热榜功能怎么设计,怎么设计缓存,如何保证缓存和数据库的一致性
13.写一个工厂模式;
14.口述算法,四则运算表达式怎么求值
3.使用过事务吗,遇到过事务失效的情况吗,原因是什么?
4.消息的长链接、触达的实现有了解吗?
5.下单支付场景下怎么确保一致性?
6.消息队列的延迟消息有用过吗?
7.你们的熔断降级怎么做的?
8.你们读写性能是怎么评估的?
9.电商促销的容灾方案应该怎么设计?
10.微信朋友圈设计,点赞,评论功能实现,以及拉黑功能
11.重构项目你会怎么做,怎么确定重构的范围、怎么保证重构的质量?
12.工作中,遇见了技术瓶颈无法解决,你的解决思路?
# 调研小结:
在技术方面,如果把这些面经看下来(或者让ai总结),其实很容易就总结出来那些是常考点,翻来覆去也就是那么些东西,所以只要准备几个月,差不多都能搞定。
不过并非所有Golang的岗位都是都是一套题,同样是Golang的后端,也是区别的,因此考察的技术侧重点也是不一样的。从招人的岗位角度来分类:业务快速开发[^1],云原生应用[^2],云原生基础开发[^3],区块链/web3[^4],游戏服务器[^5],高并发服务器。
业务快速开发类,这类公司数量是最多的,因此可以进一步的分类。可以进一步分为小厂、中厂、大厂,小公司要求不算高,甚至接受其他语言转Golang,基本的八股+项目讲的自信清楚基本可以了;中厂在小厂的基础上再增加要求是技术体感[^6]和解决方案灵活;大厂面的少,体会下来是在中厂的基础上再增加一个系统设计,要求有更广的视野。
云原生应用开发类,JD上面写熟练k8s,熟练docker等词汇就是此类岗位,对k8s和docker要求高,如果没此类技术经验,很难面试,因为面试官不知道问什么,这就很难通过了。
云原生基础开发,很少,一般是云厂商招聘,云厂商一般是大厂,所以很少且要求很高。只拿到过一次面试机会,性能方面问的很多,要求很高,对于Golang和其他技术底层体感要求高,不爱其他技术转来的。
区块链/web3类,数量不多,比较特殊,通常公司成立时间小于一年且人数为个位数,不太了解。
游戏服务器类,数量尚可,公司级别梯队也是比较不错的[^7],什么层次都可以找到对应的公司,但是社招基本上都要求有游戏开发经验,投了很多,都没拿到面。
高并发服务器开发,很少,多集中在顶尖大厂,比如字节。
[^1]: 主要是业务逻辑为主,符合要求框架、MySQL、Redis等常见开发套件
[^2]: devops,k8s二开,docker熟练,搞不好就是大号运维
[^3]: 比较硬核,主Linux和一些分布式原理,go极限调优
[^4]: 有些极小的公司或者是工作室,是存在涉及灰产的可能性的
[^5]: 一部分c++需求的外溢或者替代,第一原则是要求有游戏开发经验
[^6]: 此时只是背诵或简单理解八股就不够了,要求是使用过对应的技术或者是有过体会的
[^7]: 有小厂有中厂也有顶尖大厂,数量都还挺多,可以满足各类技术级别的开发者

查看23道真题和解析