2024 届秋招 Golang 面经
纯面经帖,供后人参考,非经验贴,发完准备卸载牛客安心搞论文。
个人基本情况:
- BG双非硕(非知名双非)
- 混杂型开发:Go/Java + 前端(Vue) + 移动端 (Flutter/Swift) 都有真实项目(或开源项目)
- Leetcode 500+ 题
- 三段小厂实习,Github 700+ Star,博客访问量 100w+
- 国际级、国家级、省级竞赛都有(特等、一等、二等、三等都有)
学校 BG 问题,进面的不多,大多能走完技术面,但是最后不一定能开出来(唉)
- 部分工资会因为 BG 压薪资,也有不压的。开出来的薪资从 20- 到 50+ 的都有
主要整理一些知名厂。对于一些零零碎碎的中小厂,要么流程很奇怪,要么面试很简单,就不记录了
- 比如:格力电器、海信、点点互动等
第一个中大厂 offer 是得物,大概在 11 月左右拿到(工资非常香),后面很多中小厂面试就拒了
最后去了百度
得物
岗位职责:
参与相关业务开发及维护工作,参与技术方案设计;参与容器化相关开发及维护工作;
参与Golang相关框架及中间件的开发及维护工作;
编写相关业务、技术文档等。
任职要求:
2024届毕业生,本科及以上学历,计算机类、软件类、通信类等相关专业;
扎实的编程基础,至少掌握一门开发语言,熟悉Golang优先;
CET4及以上,能够看懂技术相关的英文文档优先;
有扎实的计算机基础知识功底,掌握常见数据结构和算法;
有Docker、Kubernetes开发或使用经验者优先。
笔试 08-23
- 试卷名称: golang开发工程师
- 考试时长: 120 分钟
- 开始时间: 2023-08-23 19:00 星期三
- 结束时间: 2023-08-23 22:00 星期三
- 20选择 + 2编程 + 1问答
编程题:100 + 81
一面 08-27
面试官人比较和善,每说几句话都会点头肯定,压力比较小
- 自我介绍
- 浏览器输入 URL 的一个过程
- TCP 三次握手,四次握手的过程
- TCP 释放连接为什么要等待 2MSL 时间
- TCP 如何保证它的数据的顺序性
- TCP 进行拥塞控制的手段有哪些
- 进程、线程、协程的区别
- Golang 的 GMP 调度
- 说下 GMP 的整个过程
- M 发生系统调用了 G 和 P 会怎么样
- M 系统调用结束以后会怎么样
- 介绍一下自己的项目
- 介绍一下使用 JWT 进行鉴权的过程
- 说一下 Gin 的拦截器的原理
- 说一下 Gin 的路由怎么实现的
- Gin 的路由使用的数据结构(字典树),介绍一下字典树
二面 09-16
一个女面试官,人比较和善 自我介绍 介绍一下项目中的亮点和难点
- 任务调度器是如何实现的?
- 流量控制是如何实现的?
- 垃圾邮件的检测是如何做的?
- 邮件发送失败会怎么样
- 如果发送邮件的过程中突然项目宕机了,重新开始会重新走流程吗?优雅启动 + 优雅重启
- .... (一大堆项目追问,具体忘了)
Nginx 的反向代理原理是什么?没答出来,说了下应用场景
Nginx 的负载均衡方案有哪些?
Docker 相比物理机进行部署有什么好处?
Redis 持久化有几种?
Redis 的主从架构有哪些?
和同事一起解决一个问题,有不同的解决方案会怎么办?
和同事一起完成一个任务,同事能力比较差怎么办?
对未来的职业规划是什么?
三面 09-17
主管应该是,压力较大 自我介绍 深挖项目
- 亮点
- 垃圾邮件如果是怎么做的?用的开源项目 rspamd
- 有了解过这个开源项目的内部实现吗?无
- 邮件任务调度器如何实现的?
- 流量控制成怎么做的?超时重发怎么做?
- 知道哪些邮件接收协议?
- SMTP 细节,除了 SMTP 还知道哪些邮件传输协议?
- 怎么判断是不是垃圾邮件?
- 有具体的优化前后的数值指标吗?无
- ...
说说 Go 新特性 K8S 的架构?
360
工作职责
1、负责360搜索旗下多个重点业务的web服务端开发和维护工作
2、负责360搜索新业务方向的web服务端开发工作
3、持续对产出的代码进行优化和升级4、参与需求分析,方案设计,配合业务测试等工作
任职资格
1、计算机相关专业毕业
2、有使用过go或者php做过实际的开发项目经验
3、扎实的算法和数据结构,操作系统的基础知识
4、熟悉linux环境下的开发,熟悉常用的linux命令
5、优秀的学习能力和执行力
笔试 09-23
40 选择 + 2 编程(100 + 80)
一面 10-10
都是经典八股
说说 Linux 常用操作,ps 是干嘛的
Go map 为什么是无序的?
MySQL 索引分类,索引的优点和缺点
分库分表
Cookie 和 Session 的区别和应用,分布式 Session 的实现
TCP三次握手/四次挥手
Redis 的数据类型及其数据结构,Bitmap 是什么
Redis 的雪崩效应 ,是什么,怎么解决
线程,进程,协程区别
算法:用 Go 手撕快速排序
二面 10-16
挖掘项目
HR 面 11-02
15分钟左右
自我介绍
想从事的技术方向
介绍实习项目,有什么难点
觉得自己在哪些方面有不足
自己的性格和工作风格
哪里人,为什么投北京
目前的秋招进度
期望薪资多少
反问:
- 工作作息:早9晚6,双休
- 技术栈:全部是 Golang
- 后续:等通知
闪送
【职位描述】
1、参与闪送运力业务线核心模块,如调度、生态等业务相关开发工作;
2、参与闪送运力业务线架构设计和规划,设计合理、扩展性强的系统模型,提升需求迭代速度与系统能力;
3、保障系统稳定性,通过系统设计、编码实现系统自我保护,提升系统可用性及可维护性;
4、确保自身编码能达到高质量交付,且可以协同QA共同改进测试流程,实时优化系统性能,排除线上故障,确保系统稳定;
5、积极主动协调团队成员完成项目,信守承诺,言出必行。
【任职资格】
1、全日制统招本科及以上学历,计算机相关专业;
2、具有扎实的数据结构、操作系统、算法、网络等计算机基础知识;
3、掌握Golang编程语言,掌握面向对象的编程思想,会使用常用的shell命令;
4、熟悉Mysql数据库的基本使用,熟练使用SQL语句,了解数据库索引结构、事务隔离机制、锁等;
5、优秀的逻辑思维能力,善于从复杂系统表象拆解分析问题,有较强解决问题能力;
6、善于交流,有良好的团队合作精神和协调沟通能力,有一定项目推动能力。
具备以下经验者优先:
1、有参加各种计算机竞赛并获奖的经历;
2、有原创的技术博客或者参与过知名的开源项目或者某开源项目作者;
3、有在知名公司核心部门实习经历且实习时间不少于6个月。
笔试 10-08
编程题2道:100 + 100
一面 10-13
50min,无手撕
项目挖掘 GO:
- slice 和 array 的区别
- map, slice 未初始化,操作会怎么样。发生 panic 应该怎么办
- recover 怎么使用的,defer 相比普通的在函数最后执行操作,其优势是什么
- channel 相关操作
- map 有序无序,为什么?map 是否并发安全?如何保证并发安全?map 并发读写都是不安全的。
- 如何控制 GMP 中 M 的数量?(???)
- 如何控制 goroutine 的生命周期,channel 的作用,context 的作用
- select 如何使用?
- new 和 make 的区别?
MySQL 的事务隔离级别,可重复读解决什么,幻读是什么? MySQL 修改数据库某个表的字段用什么指令?
TCP 三次握手,两次握手会怎么样,TCP 和 UDP 的区别,什么时候用 UDP
Redis 的数据结构有哪些?GEO 怎么用的?
Redis 如何实现分布式锁?
CAP 理论,举个场景,为什么只满足一个就不能满足另外两个
Linux 的常用命令说说
git 创建分支的指令,git 合并分支的命令,git 如果提交了想撤回使用什么
docker 容器之间无法访问可能是什么原因
项目中遇到的问题
反问:
- 语言:Go 和 Java 都有,你面的部门的业务线是 Go
- 技术栈:web 框架是自研的
二面 10-25
面试官人很好很诚恳,也给出了很多有用的建议
语言层面:
- Go 和 Java 对比
- Go 的并发模型
- Go 的错误处理和 Java 的异常处理对比
- 设计模式,写开源项目有没有特地用过设计模式
数据库:
- 跳表的实现原理
- Redis 跳表 和 MySQL B+ 树的对比
- MySQL 的 MVCC 机制
- Redis 的分布式锁
- Redis 的分布式锁和 Zookeeper 的分布式锁的区别?(???)
其他:
- 用过哪些消息队列?
- 为什么需要消息队列?
- 一个完整的链路中,因为消息队列异步的业务,如何做链路追踪?(???)
未来的职业规划?
对哪个方面的技术比较感兴趣?
反问:
- 常用技术栈?
- 对应届生的要求?1、耐心 2、保持好奇
HR面 10-31
基本就是HR面常见问题,聊了40分钟左右,记录几个还有印象的
学业情况都完成了吗?
是哪里人?为什么选择投北京的?
对闪送公司本身和业务的理解?
竞赛经历,挑了个最大的问在其中做了什么,收获了什么?
实习经历?每段实习做什么,收货了什么?
说一说有没有通过自己的逻辑能力来解决某些复杂的系统问题?
认为国内技术最好的互联网公司是哪家?面过吗?自己分析下是为什么挂了?
职业规划?
反问:
- 闪送就一个业务部门,只是可能会做不同的事情
- 闪送的作息相比其他互联网会比较轻松
中国移动信息技术中心
任职要求:
1.熟悉掌握Java、Go其中至少一种开发语言,熟练掌握Linux系统;
2.有良好的研究背景和成果,对云计算领域兴趣浓厚;
3.具备创造性思维,对工作充满热情,具备良好的团队合作精神和沟通能力,有良好的文档和PPT撰写能力;
4.熟练使用主流数据库及中间件(Mysql、Redis、Rabbitmq、Kafka、Zookeeper等);
5.有Kubernetes、Docker、Container等技术相关经验者优先;
工作职责:
1、负责云计算PaaS平台相关模块的研发工作,参与平台架构设计、方案编写等工作;
2、跟踪云计算领域技术发展趋势,推动平台整体架构规划持续演进;参与开源组件架构、源码解读,跟进开 源技术,参与开源组件的定制化开发、改造及优化
3、参与项目管理,协助推进项目设计、建设,确保项目的顺利上线,参与需求分析和沟通工作,协助形成需求设计文档
4、负责平台部分模块的代码修改、设计、研发、持续迭代等自主研发工作;
5、开发技术栈包括但不限于Java、Golang、前端相关语言等;
6、参与DevOps、云原生开发、K8s等关领域的前沿技术研究;
笔试 10-28
一面 10-19
自我介绍
介绍开源,项目
会参与开源项目吗,一般是个人项目,还是团队项目
PaaS 是什么?
用过哪些 CI/CD 的工具
- Jekins 的部署流程
- 镜像仓库是推送到哪里
用过哪些 NoSQL
MySQL 和 MongoDB 应用场景
【绝杀】如果大厂和我们同时给你发 Offer,会怎么选?
- 应届生应该会优先选大厂吧【注意以后回这种问题要尽量挖掘该公司,该岗位的优势】
二面 11-01
2个面试官轮流问,还有1个应该是HR小姐姐
自我介绍
问开源项目,Star数量,写的哪些项目,为什么写,具体如何实现(拷打项目细节)
问竞赛细节,参加哪些竞赛,有哪些是自发参加的
问实习情况,除了个人项目还有哪些项目,学校里和导师做过科研项目吗
问对 K8S 的了解,有哪些概念和组件,如何编写自动化部署脚本(没研究过,让我说自己的理解)
问是哪里人,为什么选择投北京的
未来三到五年的职业规划
对于团队合作和个人做项目更偏向于哪个
会想要担当团队中的领导人吗
反问:
- 业务
- 技术栈
- 流程:就两面,后续等通知
金山
笔试 09-24
15基础选择题 + 5Go选择题 + 3编程题(100 + 100 + 100)
一面 10-18
时长:45 min,项目占一大半时间,八股比较少
自我介绍
项目:
- 简历上三个项目都问了,还出了很多场景题
- 文件存储用的什么?用的 key 是什么?有考虑过相同文件重复的问题吗?
- 你的开源项目的出发点是什么?怎么想到这个思路的?项目存在的问题?屏幕共享进行演示和代码讲解
八股:
- Go GMP 调度机制
- Go string 和 []byte 的区别
- 操作系统中零拷贝
- MySQL InnoDB 的存储结构,B+树
- K8S 的金丝雀部署
其他:
- 实习时项目开发的流程是什么?
反问:
- 服务端技术栈:主要就是 Go
- 流程:两轮面试 + HR
二面 10-27
聊项目
每日互动
一面 10-19
时长:1 小时,无手撕,基本全程项目
自我介绍 屏幕共享,讲解开源项目,讲解博客
- 开源组件库的实现思路,有没有什么参考
- 博客开源项目,有没有什么参考
- 权限模块是怎么实现的
用户发现访问速度比较慢,有哪些排查思路(前后端)
负载均衡有哪几种?
Web 开发需要考虑的安全性有哪些方面
mkdir /a/b/c 爆错,怎么解决?加 -p
对函数式编程有所了解吗
Java 和 Go 的区别
说说你认识的设计模式
说说知道的排序算法
介绍一下 Docker 和 K8S 相关
栈和队列的区别
CSS 垂直居中
Node 了解多少
个人优势和缺点
推荐两本书籍(技术 + 非技术)
一块砖的作用(1分钟)
未来的职业发展方向
反问:
- 技术栈:后端 Java/Go/Node,前端 Vue
- 业务:面向政企
二面 10-23
有点偏 HR,都是比较宽泛的技术问题
- 学校、竞赛问了下
- Java 和 Go 的区别
- 对全栈的理解,以及为什么当全栈
- 用过的语言
- 个人性格怎么样,优缺点
- 后续职业规划
反问:
- 公司业务:手机推送 SDK(个推)+ 面向政企提供信息化服务
- 公司技术栈:Nodejs 为主,Java
- 公司位置:杭州市西湖区
HR面 10-25
聊天
百度
一面 12-07
二面 12-13
三面 12-14
字节跳动
一战 timeline
一面 09-04
1、自我介绍
2、聊项目
3、项目聊的很深,甚至面试官理解业务后还出了针对原项目的场景题
- 怎么保证发送并发情况下发送多个邮件导致的邮件攻击问题
- 如果因为网络问题导致邮件发送失败会怎么处理?(如何知道邮件发送失败了)
4、聊到 Redis,问了些分布式锁相关的问题
- SETNX 和 SET NX 区别
- 如何使用分布式锁解决前面项目中某个问题
- 自旋锁的本质是什么?(如何实现的?)
5、聊着聊着聊到 MySQL 慢 SQL 的查询
- 索引有哪些分类
- 聚簇索引和非聚簇索引
- 回表是什么
- 如何减少回表次数来优化
- 如何排查慢 SQL
- 如何最直观的查看慢 SQL
- EXPLAIN 执行计划要关注的字段
- 如果设置了索引速度还是很慢怎么办
6、聊到 MySQL 数据量大的问题
- MySQL 数据量非常大了以后要怎么做
- 分库分表有几种思路
- 说说适合你的业务的分库分表方案
算法题:删除链表的倒数第 K 个元素(要求一次遍历,不能使用快慢指针)
- 递归写完后,还加问了一句,堆和栈的区别是什么?
二面 09-18
体验不好
面试官要求手撕一道竞赛题,撕完直接结束了
可以看之前发的动态
二战 timeline
一面 11-07
二面 11-10
三面 11-28
四面 12-01
好未来
09-09 一天三面(二面挂)
一面:
- 说下四次挥手的过程
- 为什么需要 2MSL?2MSL 会产生什么问题?
- 使用 gorm 遇到过哪些坑
- _更新时用结构体更新,不会更新零值,需要用 map 数组
- _time.Time日期格式默认是 ISO 8601 格式,想要更改格式需要自定义时间结构体
- MySQL 的事务隔离级别说一下
- 默认隔离级别是什么,解决了幻读吗
- 为什么没有完全解决幻读?说个 case
- 说一下 Redis 和 Memcached 的区别?
- Redis 的 的数据可能会丢失吗?(操作系统层面)
- 生成 RDB 文件期间,如果 Redis 奔溃,数据会丢失
- RDB 后台进程刷盘,操作系统层面可能会丢失
- AOF 默认每秒同步一次文件,这秒内 Reids 奔溃,数据会丢失
- Redis 两种持久化方式
- Redis 实现排行榜使用什么数据结构?
- 说一下对 MySQL 的 事务的理解
- 为什么 MySQL 使用 B+ Tree,Redis 使用跳表?
- 虚拟内存的作用?
- Swap 机制是什么?作用是什么?
- 通过 Swap 交换的内存比一般磁盘 IO 更快吗?
- 线程、进程、协程的区别?
- 协程为什么是 2~4kb?
算法题:
- 顺时针打印矩阵
二面:(挂了?)
- 自我介绍
- 说说个人项目中的亮点和技术
- 说说从新考虑架构和设计项目会怎么设计
平安金服
一面 11-02
二面 忘了
当时晚上 8点左右在跑步,突然接到通知面试,回去随便面了面
帷幄匠心
09-25 一天三面(二面挂)
一面:
- 八股 + 简单叙述项目
- 跳表的实现原理?查询和新增?
- Java 中非线程安全的数据结构
- 算法:有效的括号 + 最长回文子串
二面:(挂了)
- 八股
- 算法:无重复的最长子串 + 某个改编题(树相关)
peropero
小公司,当场表示面试通过,愿意来就发 offer
小厂面试很轻松,聊天局:
- Go 的垃圾回收和 Java 的 垃圾回收的区别?Java的没背
- Go 的 CSP 并发编程介绍一下?
- Go 中的内存逃逸现象是什么?
- Nginx 的四层负载均衡和七层负载均衡
- Redis 的常用数据结构有哪些?
- Redis 实现一个同分数按时间戳的功能?
- 游戏开发和常规开发的区别?
- 未来的职业规划?
下面完全就是聊天了。。。。
公司技术,加班情况 ,业务分布,团队人手
中金所
一面 10-17
自我介绍
实习项目:
- 点赞功能如何实现
- 监听在线用户如何实现
- 实习中负责哪些功能模块
- 为什么不留在实习公司
Restful 和 RPC 的区别?
哈夫曼树是如何实现的?(??早忘了)
用栈如何实现队列?
MySQL 新增一列字段的语句?(具体忘了,只答了用 Alter)
家在哪里?怎么知道我们公司的?
反问:
- 语言技术栈
- 业务是什么
最后:"感谢你参与今天的面试"