声明:本文首发在同名公众号:王中阳Go,未经授权禁止转载。
先听TA的故事
投稿的主人公是一名工作5年的后端开发工程师,最近2年用Golang,之前其他语言。去年春节前被裁员了,各种心酸史,好愁人啊。
刚开始找的特别费劲,简历已读不回,也不知道怎么做准备更好。在撞了很多南墙之后,终于摸到了门道,开始能约到面试了。
然后更难顶的事情发生了:经过各种努力和约面,我拿到了北京的两个offer,但是深圳一个都没拿到,我自己更倾向在深圳工作的,实在实在没办法才会去北京。
深圳这边的工作很卷,越面试考察越难,刚开始那几家我还扛得住,主要是八股和算法,后来不少公司更多的是考察各种各样的场景题,甚至还有公司问我如果让我带一个5~10人小团队做项目会考虑哪些事情?
我真是服气了,我只是一个想找20K工作的gopher程序员,要求已经这么高了吗?太卷了。。。。
在各种学习各种突击、踏踏实实提高自己之后,目前已经成功上岸深圳的公司了,在这里真心分享一个靠谱的经验:别想着速成,踏踏实实的提高自己才是王道。
秉承着好人有好报的原则:我授权阳哥把我最近面试了十几家公司,将近30场面试的面经和经验都分享出来,希望对大家有帮助,希望阳哥的粉丝们都能顺利上岸!把我这份好运传递下去!!!
下面开始秀一下最新面经:
北京外包-掌阅科技
面试题:
- 自我介绍
 - 介绍一下你参与的模块的业务以及架构设计 交易流程
 - 说一下微信支付流程
 - 介绍一下你最了解的业务的技术实现 做了哪些业务封装?解决了哪些问题?
 - mongodb的集合是什么?文档是什么?
 - mongodb的底层数据结构是什么?怎么实现的?怎么存储的?
 
编程题写代码
使用go实现1000个并发控制并设置执行超时时间1秒
1  | go复制代码func worker(c context.Context, wg *sync.WaitGroup, id int) {  | 
北京自研-小刀万维
- 了解基础信息 学历、年龄、经验、老家哪里、为什么来北京、为什么离职
 - 自我介绍
 - 说一下你负责最多模块的业务?用户中心和交易中心业务
 - 技术团队多少人?
 - 项目上线了吗?用户群体多少人?是tob项目?
 - 介绍一下你涉及的技术栈
 - go是怎么分配内存的?go启动的时候怎么去划分的?划分为几个区域
 - 碰到过内存泄露没有?什么情况下会内存泄露?如何去定位排查?
 - 怎么通过go控制并发数?
 - 原子操作了解过吗?
 - map数据结构了解过吗?如何实现数据扩容?
 - map是不是并发安全的?
 - map删除一个key 内存会不会释放?
 - 你平常是怎么学习的?看过什么go相关的书没有吗?
 - 你短期的目标和长期目标是怎么规划的?计划在哪里定居?
 - 你还有什么想问的吗?技术团队组成
 - 你对公司有没有什么要求?
 
杭州晶绮信息科技有限公司
- 自我介绍
 - 说一个你做的/遇到的一个比较有意思的功能聊一下
 - 除了偏移量还有什么其它优化的方式吗?
 - 覆盖索引在mysql如何实现的?底层原理是什么?
 - 聚簇索引和非聚簇索引在B+树里面存储有什么区别?
 - B+树里面叶子节点的数据结构是怎么样的?
 - 联合索引在什么场景下会失效?大概有哪几种情况会失效会违背最左原则?
 - 做过哪些场景下做过哪些SQL优化
 - 会使用EXPLAIN?怎么使用的?你会关注哪些指标?重点哪些指标出现异常你会比较注重?
 - 你项目中kafka中主要的应用场景是什么?
 - kafka中Partition有了解吗?
 - kafka如何做幂等处理的?
 - kafka里面的offset概念你了解吗?
 - 你们Redis用来做什么的?
 - 缓存和数据库的一致性如何做的?
 - 你们有做熔断、限流、降级相关的操作吗?你们业务中哪些地方用到了这些?怎么做的?底层原理是怎么样的?
 - mongodb有做分片吗?
 - mongodb设计索引会考虑什么?会考虑分片来设计索引吗?
 - map的底层数据结构可以说一下吗?
 - slice底层数据结构是怎么样的?如何扩容?
 - 程序写完之后你们如何做测试的?
 - 你们项目搞完之后如何部署的?有了解吗?如何做热更新?如何优雅启停?
 
编程题
- 说下打印顺序
 
1  | go复制代码func main() {  | 
- 使用go实现一个set 为什么要使用struct{}来做map 的value
 - 启动3个goroutine 循环100次顺序打印123
 - 编写一个程序限制10个goroutine执行,每执行完一个goroutine就放一个新的goroutine进来
 
深圳自研线下万领钧
- 自我介绍
 - 如何部署
 - jwt
 - gc
 - redis用来做什么
 - http和grpc的区别
 
杭州云智创心
- grpc底层用的什么协议?http2.0和1.1有什么区别?
 - RPC有几种请求模式?同步请求和异步请求
 - protobuf了解过吗?和json有什么区别?对比json有什么优势?压缩率对比json来说能达到多少?
 - 数组和slice的区别是什么?
 - 使用var 定义一个slice不make能使用吗?
 - go里面有几种方式可以解决并发安全问题?
 - mysql 单值索引和联合索引 各自的优缺点?
 - 如何判断一个字段是否不适合建立索引?
 - 如果让你去设计一个消息队列你会怎么去设计?
 - 分布式的环境下需要做数据一致性的话,你有几种设计方案?
 - 我说了TCC,他继续问这个是强一致性,如果需要最终一致性需要怎么处理?
 - 服务熔断、限流、治理是怎么使用的?用的第三方框架还是自己去做的
 - 如果让你去设计一个限流器你怎么去设计?
 
北京易诚高科推易车网
编程题:
写代码实现两个 goroutine,其中一个产生随机数并写入到 go channel 中,另外一个从 channel 中读取数字并打印到标准输出。最终输出五个随机数。
- 如何优化MySQL的?除了索引和锁还有其它优化方式吗?
 - 索引失效的场景?
 - redis用到了什么数据类型?应用在项目什么地方?
 - slice切片扩容说一下
 - 说一下go里面的内存回收?
 - 说一下GMP并发模型
 - docker什么地方用到了,会哪些命令,了结的流程
 - 介绍一下你项目,说下你负责的地方
 - 说一下库存超卖的设计思路
 
北京兆殷特集团外包推易鑫集团
- 自我介绍
 - 介绍简历第一个项目,深入挖掘里面的业务细节聊了接近20分钟
 - 分布式项目你缓存数据更新怎么做?本地的cache如何更新的
 - kafka如何确认消息消费成功了?如果ack出问题了呢?如果没确认成功
 - 一个订单被多次消费有吗?如何解决?消费消息的代码逻辑是怎么样的?
 - redis数据类型一般用的什么?go里面redis用的第三包用的哪个?
 - 哈希的过期时间怎么做的?面试管一直说他用的包没有设置过期时间的功能 这块需要了解下过期时间底层如何设计的
 - 分库分表有用吗? 这边答用了mongodb自动扩展 没有用mysql所以避免了分库分表相关问题
 - 项目中ES是怎么用的?ES如何优化的?ES的的数据类型
 - 介绍一下你第二个项目
 - 说下你文章表的表结构是怎么样的?文章内容如何存储?
 - 文章内容搜索功能有做吗?怎么做的
 - protobuf中怎么存储数组切片的?
 - 文章中点赞数是怎么做的? 针对点赞数设计方案问细节
 - 你们项目有没有做一些防爬的机制?怎么做的?
 - redis有遇到丢数据的情况?如何解决?
 - 切片的底层数据结构是怎么样的?底层数据是存储在堆上还是栈上?
 - map的底层数据结构是怎么样的?
 - 空interface的底层数据结构是怎么样的?
 - 问了下平常用的一些web框架,但没有深入问框架里面的细节?
 - 框架中的熔断是怎么做的?
 - mysql的数据库事务隔离级别
 - mysql事务的的原子性是什么
 - 一条SQL的具体执行过程可以说说吗?
 - 去日志文件搜索错误信息 linux命令说下
 
杭州默安科技
- 自我介绍
 - 介绍一下你的项目,说一下你负责的模块,说里面你觉得设计的比较好的地方 说了一个微服务之间一致性问题,又接着问还有没有,又继续说了 高并发下避免库存超扣 这两个场景追问细节
 - go map底层 sync.map底层实现
 - go 有map哈希冲突的可能性?你会怎么解决?
 - 互斥锁和读写锁区别?读写优先级一堆扯底层原理 一直有goroutine占有读锁/写锁 是不是会有读锁/写锁被阻塞 这个是挖坑题目 然后聊到后面让我结合GMP讲这个锁
 - 将GMP的东西大致都讲了一遍,后面一直问是不是先进先出然后我说了分片执行,得根据场景来判断
 - 自旋和GMP结合来讲?自旋解决了什么问题?
 - mysql索引执行顺序 多个索引mysql如何选择哪个索引先执行
 - 删除索引会怎么处理?会重构索引树吗?
 - 索引为什么快?
 - 有大量的IP格式数据?假如让你设计高效查询,你会怎么设计
 - mongodb为什么比mysql快,从哪些方面体现出来
 
杭州稻壳网络
- gorm的使用 锁怎么用 sqlx那些用过没
 - 分布式数据一致性的问题怎么处理?问细节
 - ES的使用
 - go-zero和kratos的区别
 - mysql存储json数据
 
北京蓝标传媒
- 自我介绍
 - 介绍项目负责模块,深挖业务,分布式事务一致性场景 下单和其它服务数据一致性
 - 假如你去设计订单服务的时候,你是怎么去组织你代码的一个结构的,如何如何代码会考虑哪些点
 - 重复支付怎么设计处理
 - 你们用的kratos,代码是怎么分层的,详细问data层做了些内容
 - 说下你的职业规划
 - 设计模式有了解过吗
 
杭州爱果酱
- 自我介绍
 - 介绍下项目背景,难点,方案 一直抠项目细节
 - 库存超卖问题设计思路?库存如何更新
 - 库存更新怎么做的呢?分布式锁
 - 分布式锁如何设计?setnx和setex有什么区别?如何续期
 - map、channel底层原理
 
北京 Runner建霖家居
- 自我介绍
 - 二级缓存cache 数据一致性如何保证 reids呢,如何保持数据一致性?
 - 分布式锁如何设计的?追问细节,问的很细,实现细节
 - 你用mongodb的过程中有没有遇到什么问题? mysql和mongodb你觉得有什么区别?你觉得mongodb和mysql哪个性能更好,你怎么看待?mongodb你们这边最大并发怎么样 追问细节
 - 分布式下单场景数据一致性 如何设计? 追问细节
 - 社区项目中文章是怎么存储的?内容怎么存储
 - 文章如何做缓存的?全部缓存进去吗?
 - 然后介绍第三个项目业务,简历三个项目都问到了
 - 数组和切片的区别
 - 说一下内存逃逸?
 - 函数入参的话,你觉得什么时候适合传值类型什么时候时候传指针类型?
 - 进程、线程、协程的区别
 
深圳及刻
- nacos是AP还是CP,你们项目中如何使用的?
 - 说下你们微服务框架的执行流程?
 - 介绍下你负责模块的业务流程?如何实现的
 - 库存超卖设计思路说一下 问的超细
 - 表数据多大?用什么存储?mongodb支持事务吗?
 - 分布式数据一致性设计思路 问的超细
 - 微服务限流怎么做?有没有了解底层实现
 - 消息幂等性如何设计?
 - 消息队列宕机之后重启怎么知道它上次消费到哪里?offset记录?offset数据存储在哪里?
 - 用kafka有遇到什么问题?消息堆积 业务流程
 - 微信支付流程说下 追问里面一些细节 回调方法逻辑 加锁处理
 - 分布式锁设计思路
 - 提高QPS你会从哪些方面去设计
 - mongodb索引底层数据结构是什么?
 - B树和B+树的区别?
 - 回表是什么意思?如何减少回表?除了覆盖索引和索引下推还有其它方式吗? 使用主键查询
 - 使用二级缓存的流程是怎么样的?有了解过go-cache底层用什么数据结构存储的吗?
 - 你们接入了多个第三方平台?什么设计的? 应该是想问下使用策略模式来实现
 - ES使用场景?数据怎么放入到ES中的去?如何保证数据一致性的问题
 - 假如在不影响业务的情况下,让你来设计一个数据迁移的方案你怎么设计?老数据要同步新进来的数据也要考虑
 - channel了解过吗?项目中哪些场景用到了?你认为channel是个什么东西?channel有几种?channel关闭之后再去读会怎么样?如何知道channel关闭了呢?
 - 一个主服务同时去调用多个子服务,其中一个服务关闭之后 就中断所有子服务执行 你如何设计实现这个需求
 - channel底层数据结构是什么?问细节
 - Mutex底层实现原理?是公平锁还是非公平的锁?饥饿模式下数据是通过什么存储的?
 - 队列和栈有什么区别?如果让你来实现一个栈你怎么实现?
 - git的命令、linux命令
 - redis的持久化如何实现的?redis有遇到什么问题?
 - redis的淘汰策略什么?你们用的哪个?lru和lfu的区别
 - 如何做一个切片去重?
 - 项目中nginx怎么用的?反向代理 负载均衡怎么做的?负载均衡里面的原理有了解吗?
 - mysql事务隔离级别?你们用的是哪个?有什么问题?RR如何解决可重复读
 
深圳线上Ximmerse
- 自我介绍
 - go并发有哪些同步机制
 - channel什么情况下什么时候会发生死锁
 - 协程泄露是指什么?如何排查协程泄露
 - 代码调优的手段?代码层面如何做协程调优
 - mysql调优说一下?覆盖索引和单列索引的优缺点?
 - mongodb如何存储大文件
 - nginx和apisit的区别
 - k8s如何去做路由
 - 如何大数据导出?导数据把服务拖垮了你会怎么办?怎么定位到具体的代码行?
 
深圳线上网心科技
- 自我介绍 && 个人职业规划 && 最近在看什么书
 - http每个版本更新的点有了解吗?http状态码了解吗
 - https如何做中间人攻击
 - 数据库事务隔离级别讲一下
 - 在使用mysql的过程中需要注意哪些问题?表设计、索引设计、事务使用、更新表结构、sql注入预编译
 - redis哪些数据结构用的多一些?跳表了解?redis主从复制了解过吗
 - redis使用的过程中有些什么需要注意的点? 一直问还有吗
 - go的内存管理了解吗?针对这个内存管理在实际编码中有什么需要避开的吗? 一直问还有吗
 - channel缓存和无缓冲区别
 
一起上岸!
我们搞了一个免费的后端面试真题共享群,互通有无,一起刷题进步。
没准能让你能刷到自己意向公司的最新面试题呢。
感兴趣的朋友们可以加我微信:wangzhongyang1993,备注:面试群。
本文首发在我的同名公众号:王中阳Go,未经授权禁止转载。
本文转载自: 掘金