Go后端社招面经实录

自身情况:半年经验,985本,公司裁员离开了,经过一个月左右的面试总算上岸了

由于工作经验的硬伤,最大的关卡在简历关。

还有就是社招的流程真的很快很快,想同时走十几家公司的流程根本不可能,因为面试过了基本会在一天内通知你,然后进入下一场面试,建议在有一定面试经验后,按照求职期望从高到低分批次投递,不然选offer时会很麻烦。。。

以下是面试问题的整理:

一,Go语言相关

1,Go里有哪些数据结构是并发安全的?int类型是并发安全的吗?

2,Go如何实现一个单例模式?

3,sync.Once是如何实现的,如何不使用sync.Once实现单例模式?

4,Go语言里的map是并发安全的吗?

5,如果要实现一个并发安全的map,该怎么做?(分桶加锁)

6,Slice与数组的区别

7,Slice的底层实现

8,不同的Slice在复制和传值时,是深拷贝还是浅拷贝?

9,sync.map的底层实现

10,sync.mutex的底层实现

11,如何判断一个结构体是否实现了某接口?

12,channel为什么不常用?(走社招流程的话,真心建议复习一下channel的使用方法,手撕时被坑了不止一次。。。)

13,channel在什么情况下会panic?

14,介绍一下GMP模型

15,如果有100个IO密集型协程,10个计算密集型协程,那么这100个IO密集型协程会对这10个计算密集型协程产生影响吗?根据自己对GMP模型的理解进行分析并得出结论

16,GMP模型相比于正常的协程-线程-进程调度,有哪些优点和缺点?

17,Grpc的实现原理

18,介绍一下Grpc实现过程中,经历了哪些层次?

19,相比于C语言,Go语言开发有哪些改进?

20,介绍一下Go语言的内存分配和垃圾回收机制?

21,Go语言在使用过程中,哪些情况可能会导致panic?

22,Go语言内存泄漏的排查思路

23,Go语言中context常用场景,及实现细节

24,Gin框架相比标准包,解决了哪些问题?

二,Redis相关

1,介绍一下redis在工作中的用途

2,redis在工作中一般可以承受多少的qps?

3,redis有哪些数据结构,分别常用与哪些场合?

4,redis跳表实现细节,为什么选用跳表,而不选择红黑树和B+树?

5,redis中使用Lua脚本为什么能保证事务性?

6,在分布式锁实现时,Setnx一定是可靠的吗,为什么(主从不一致)?

7,如果需要保证可靠,需要怎样的机制保证(Raft算法)?

8,redis为什么要防止bigkey?

9,redis是内存相关的数据库,那么有1G的数据,想要以key-value的方式存储,那么是每个key的数据多一些更占内存,还是少一些更占内存,根据所学的redis底层数据结构实现进行分析和回答

10,redis的网络IO模型介绍

11,epoll和select模型的区别

12,redis中TTL到期后是如何回收的?

13,在使用分布式锁时,如何保证解锁时是之前上过的锁?

14,使用redis实现分布式缓存时,需要注意哪些问题?

15,说下缓存击穿,缓存穿透,缓存雪崩有什么区别?

三,MySQL相关

1,索引的底层实现

2,为什么使用B+树,而不使用跳表?

3,MySQL分表怎么做?

4,如果要添加分表或删除分表,如何操作(一致性哈希算法)?

5,主键索引和唯一索引的区别

6,有遇到深翻页问题吗,如何解决?

7,在使用分布式缓存时,数据库和缓存的数据一致性如何解决?

8,MySQL自增主键,一定是自增的吗?有哪些方式会破坏这个性质

四,计算机基础

1,计算机网络的多层模型简要介绍

2,如果要做负载均衡,那么应该在哪一层上做文章?

3,TCP

4,http状态码

5,http2.0相比与http1.1的优化

6,DNS的实现细节

7,http协议中,如何判断该报文已经传送完所有的数据并结束?

8,https

五,算法相关

1,介绍Raft算法

2,主动轮询型和监听回调型有什么区别?分别应用在哪些场合?

3,介绍一下微服务架构,有哪些优点和缺点,为什么要使用微服务架构?

4,介绍一下CAP模型

5,介绍一下令牌桶限流算法

6,还有其他的限流算法吗,分别有什么优劣,适用于什么场景?

7,如何实现LRU缓存?

8,如何解决LRU缓存中刷盘的问题,即,业务中扫描了大量的数据,这些数据把LRU缓存占满,但是在之后不会再访问,导致缓存中存在大量非热点数据,如何解决?(LFU)

9,布隆过滤器,及其常用的业务场景

10,前缀树实现

六,K8S,docker相关

1,什么是声明式API?

2,Etcd数据库有什么特性,为什么K8S选用了Etcd数据库?

3,K8S中一个node的生命周期是怎样的?

4,服务发现机制介绍

5,docker的实现原理介绍

6,如果只是使用Linux命名空间进行分离,那么容器将很容易实现,docker相比于容器的核心竞争力在哪里?

7,Nginx介绍

8,Nginx在K8S中负责什么模块?

9,如何排查K8S中OOM的问题?

10,容器开发相比与虚拟机开发,有哪些优劣势?

11,容器隔离的不安全,有哪些根源上的原因?

七,项目相关(由于每个人的项目不同,问的问题也不同,一些方案已经隐藏在以上的问题中,不再重复赘述了)

1,分布式存储,如何解决分块上传问题(保证数据一致性)?(数据偏移+校验和)

2,节点不可达如何处理?(主从,raft算法保证一致性)

3,项目介绍,项目难点介绍

由于只有半年经验,通用项目方面介绍的问题比较少(简历上的项目相对冷门,很少问,在介绍时经常和面试官不在同一频道上。。。)

八,场景题

1,库存超卖问题

2,使用爬虫爬取URL时,能使用的内存空间只有1MB,如何过滤已经爬取过的URL?

3,在K8S架构中,如何处理单机或单容器限流问题,以免该容器负载过高导致整个node不可用?

4,如何处理长连接的负载均衡问题?

5,如果业务需要添加新的接口,但是在旧MySQL表中没有对应索引,如何解决?

6,如何处理单用户重复调用问题(翻译:如何保证多次操作的幂等性)?

7,技术选型时,如何做调研工作?

还有不少Go语言代码分析题及手撕题,基本不会超出Go语言书籍的介绍范畴,并且涉及的内容多且杂,就不过多赘述了

最后聊一下社招的感触吧。社招相比与校招,其实很考验面试官的能力,因为并非每个候选人的方向都与面试官完全一致,这样导致候选人与面试官之间的沟通常常存在隔阂。也是在经历过一个月的面试后,逐渐理解了八股的重要性,因为大部分情况下,你和面试官能聊的真的就只有这么多。

最后给面试官们评个级,图一乐,为了保密就不涉及公司名称了。

S级:全程只问项目,且能在几十分钟内精准打击到每个项目的要点,如果没做过会被拷打的很惨,项目专业度一度让我怀疑他是不是以前做过同项目的师兄(在我面试过的几十个面试官中,只有一个能达到这样的水准)

A级:擅长场景题,且这些场景题通常有标准化的方案,给候选者自由发挥的空间,且能针对候选者的回答进行深入拷打,并回答一些标准化的问题,能对项目作一部分深入,同时也会问八股,且相当深入(至少是技术主管级别,面试过程很痛苦,但思维的交锋也属实有趣)

B级:八股文为主,同时夹杂着部分面试官对项目的理解,不会对项目作过多的深入

C级:全程八股,感觉像KPI面,但是这种面试好像通过率还不小。。。

最低等:需要全程跟着面试官的思维走,但是能一眼看出面试官水平有限,甚至会出现时间复杂度都给出错误回答的情况,一眼草台班子,我唯一的问题是他凭什么能面试我(出现频率较低,如果遇到了,并且觉得自己一定有offer的话,建议直接开喷,我很想这么做。。。但是如果是为了保证面试通过率,那还是回答:“你说得对”吧)

#golang##社招##面经#
全部评论
要不要这么强啊,佬 会这么多,羡慕死了
4 回复 分享
发布于 2024-03-31 16:02 上海
八股准备了多久呀,佬
1 回复 分享
发布于 2024-04-01 20:01 美国
大部分题目应该都是有标准答案的,可以私聊讨论部分题目的答案,毕竟太多了😪
点赞 回复 分享
发布于 2024-03-31 08:07 广东
佬,有无go相关八股合集,可以分析下嘛😍
点赞 回复 分享
发布于 2024-04-06 16:30 河北
mark,之前没背过golang八股,现在要找工作了,感谢分享
点赞 回复 分享
发布于 2024-04-18 18:33 北京
有没有啥golang的八股文合集呀
点赞 回复 分享
发布于 2024-04-18 18:34 北京
老哥,有什么社招岗位应届生能投的吗?这些题我感觉我能答的七七八八
点赞 回复 分享
发布于 2024-04-24 20:39 广东
请问社招有go项目推荐吗
点赞 回复 分享
发布于 2024-05-11 08:38 天津
请问社招的话项目是公司做的项目还是自己下来折腾的项目呢
点赞 回复 分享
发布于 2024-06-24 16:08 北京
mark
点赞 回复 分享
发布于 2024-07-29 16:52 四川
大佬,有没有社招项目推荐,我像转行,但是没有项目
点赞 回复 分享
发布于 01-25 12:55 陕西

相关推荐

02-05 15:22
引言“明明刷了几个月题,面试手撕代码还是大脑空白…” 最近在牛客讨论区看到不少同学吐槽,明明LeetCode刷题量已经卷到300+,却在面试中频频翻车。作为经历过秋招斩获6家大厂offer的过来人,我想说:盲目堆砌刷题量 ≠ 面试通关。今天分享3个容易被忽视的“面试雷区”和应对策略,助你跳出无效内卷。陷阱一:过度依赖题解,失去独立思考能力典型表现遇到新题5分钟没思路直接看答案背诵最优解代码却无法解释“为什么这么做”破局方法✅ 设置“痛苦阈值”:新题至少尝试30分钟再参考答案✅ 建立解题日志:记录自己的错误思路和优化过程(如:暴力解法 → 发现重复计算 → 引入DP)✅ 模拟面试场景:用牛客模拟面试功能随机抽题,限时白板编码案例:同学A在面试中被要求实现“带随机指针的链表深拷贝”,虽然做过类似题,但面试官追问“如果不允许额外空间怎么办?”时,因从未思考过变种问题而卡壳。陷阱二:忽视代码沟通,把笔试当面试致命误区闷头写代码不解释思路忽略边界条件检查(如:输入为空、数值溢出)正确姿势🎤 开口说思路:先明确问题约束(“假设节点数不超过10^4,那我可以用O(n)空间”),再分步骤拆解🧩 防御性编程:主动提出测试用例(“我先测试链表为空的情况,再处理…”)✍️ 代码即文档:变量命名自解释(用slow/fast代替p1/p2),关键逻辑添加注释面试官原话:“比起直接写最优解,我更想看候选人如何把模糊问题转化为可执行的代码逻辑。”陷阱三:算法与工程经验割裂残酷真相面试官常从项目经历中延伸算法问题(如:“你的分布式项目里如何快速检测环路依赖?” → 图论问题)应对策略🔗 项目复盘法:针对简历中的项目,预设可能的算法延伸问题(如:高并发场景 → 限流算法;缓存设计 → LRU实现)💡 技术闭环思维:在GitHub建立“算法+场景”案例库(示例:用并查集优化社交网络好友推荐)参考模板:python复制# 项目延伸算法示例:电商库存系统的并发扣减 → 乐观锁 + 环形队列实现class InventoryManager:    def __init__(self, stock):        self.ring_buffer = [{'stock': stock, 'version': 0} for _ in range(10)]  # 通过版本号避免CAS冲突        def deduct(self, quantity):        # 实现细节见个人GitHub...结语算法面试本质是系统性工程,牛客的题库、面经、模拟面试功能都是绝佳的训练场。但更重要的是建立“解题元认知”——理解面试官如何通过题目考察你的分析能力、工程思维和沟通素质。互动话题:你在面试中踩过哪些坑?欢迎在评论区分享经历📚#校招攻略#面经精选 #算法进阶
点赞 评论 收藏
分享
评论
44
289
分享

创作者周榜

更多
牛客网
牛客企业服务