前言
昨天我的交流群里,有位宝藏群友分享了自己的面试经历:一天约了4个线上面试,收获满满。
群友为大家分享了面试题和每个公司给出的薪酬范围。
简单说下这位群友的情况:3年开发经验,最近2年做Go语言开发,还有1年Java/PHP工作经验。手撕CSAPP选手,每天打卡分享手写的学习笔记。
也有群友反馈,网上有人说海投200多份简历没人回复,boss直聘上都是已读不回。对比宝藏群友一天约4个面试可以说是云泥之别。
约不到面试很重要的一个原因,就是简历不行。或者海投的公司都不靠谱,如果海投200家都是已读不回,大概率不是这200家公司的问题......
群友面经分享
再次感谢宝藏群友的分享,给了大家刷题的方向、市场的薪酬行情、更重要的是给了大家信心。
在求职市场哀鸿遍野的情况下,还能做到一天能约到4个面试,不说别人,起码给了我很大的信心,对市场还是看好的。(如果这篇文章能给10个人带来信心,我就心满意足了)
(相同的事情,不同的人看会有不同的反馈:比如对于这件事情我是看到了市场的信心,还是有不少公司在招聘的,并且待遇不差,要求确实不低,没有像网传中说只读不会连面试机会都没有那么悲观;有的群友看到面试题的反馈是太卷,会的不多;有的群友看到的反馈是找开发岗位,Docker CNI 的实现都要考吗.....)
20K-30K 深圳
Docker 底层、多阶段构建、原子指令你怎么理解、CSP和Actor分布式模型的区别、内存对齐、Channel 和select的基本用法、赋值你认为有多少条汇编指令、比较出名的开源项目pr、Redis持久化、GMP模型、一致性算法
13-20K * 13 深圳
3个算法题,暴力1道,2道有思路,一个贪心、一个动态规划、一个冒泡。聊异步、业务、持久化
13-20K * 13 厦门
TCP 粘包怎么解决、同步控制 waitgroup 、数据库索引优化、TCP 如何实现可靠性、队列,树,栈的应用场景和区别、TCP 在 linux 中一些参数的含义、一些十进制转换二进制、十六进制、如何定位死锁,链表简单题
16-20K 上海
战争迷雾怎么实现、共识算法、Channel、Make和New的区别、GMP、数组类型算法、UDP实现可靠协议、分布式模型、Panic没被Recover怎么处理、切片扩容、Docker CNI 的实现、数据落盘怎么做的、Lua
看到这里大家心里应该有个数了,可以看看自己的期望薪资,再看看目前市场上考察的这些知识点,查漏补缺。
也欢迎大家关注我的公众号,后面会持续更新面试题、面试复盘相关的文章,希望对大家有帮助,更欢迎大家的投稿分享。
需要做简历指导的也可以关注公众号,加我微信。
大厂面经
受高启强的影响,我也在读《孙子兵法》,分享这段话给大家:求其上,得其中;求其中,得其下,求其下,必败。
映射一下目前互联网的就业市场,道理简单明了:如果你想进中厂,就要做进大厂的准备。如果你想找到月薪1W+的工作,就需要做月薪1W5+的准备。如果你的目标就是找到工作,起码要做冲洗中小厂的准备。如果你的目标就是找个小公司混日子,大概率找不到工作。
为了更好的帮助到大家,我还整理了网络上很有价值的大厂面经:字节、腾讯、滴滴、腾讯云、小米、小米游戏。
希望对大家有帮助,建议收藏,并且转发给好朋友。
下面先分享一下我 知识星球 里字节嘉宾关于求职面试的答疑,大厂更看重的是什么? 给大家指指方向,少走弯路。
星球有问必答
星友提问
大佬好,最近我要去面试试水了,想问一下 有没有关于java或者go遇到的生产案例分享 最好是关于jdk或者第三方包的bug,容易加分。感谢!
嘉宾回答
你是面校招还是社招?一般面试官会根据你的简历中项目经历、实现细节来展开逐层递进,你说的生产案例最好还是自己实战经历过的,不然很容易就发现不是你的项目或者会被打上项目参与不深入的标签。
每一次面试都尽量准备充分,不要抱着水水的心态,大公司面试都会留痕和面评的,如果你是想丰富下面试经验,建议你先找一些小公司或者不太想去的公司面一面找找感觉,自己心仪的公司和岗位一定要准备充分再去发起面试流程!
星友
我是属于社招,一般面试官会问处理过的最亮的技术点,目前是游戏平台后端开发 但实话实说 所用技术和闪光点太普通。
不是项目造假的意思,就是准备几个 生产上处理过的几个难度较高的技术问题
嘉宾
建议你可以仔细盘一盘负责项目的文档、代码等资源,即使很多东西不是从0到1自己做的,也可以借鉴和领悟下其中的技术实现细节;平时也可以多写写技术文章,输出些自己工作内容中有技术特色的地方。
星友
我负责的项目就是我从0到1弄好的,包括文档和代码,里面确实没有拿高薪的技术亮点。
嘉宾
技术亮点是客观的项目经历,除非面试官也做过类似东西,能和你产生互动否则是不太感兴趣和深入聊的,技术栈是共同语言也便于考察个人技术能力,面试的时候也要学会主导话题,扬长避短多聊自己的优势点。说到“拿高薪”,这里说一句大白话:有多大本事拿多少钱。能力和薪资是正相关匹配的,一家公司招聘人才的能力模型会参考专业知识、工作阅历、个人性格等多方面,而面试的招聘过程双向是有信息差的,最终影响你薪酬水平的是面试结果(带有信息差的能力评价)+ 你当前的薪资水平、职级(自身当前的社会客观能力反馈)+ HR可操作的涨幅空间。
星友
理解,谢谢大佬的诚恳的解答,我还是从技术栈下功夫,这样和面试官的共鸣会高一些,也不再执迷于某个技术亮点。
嘉宾
不客气,加油!技术栈扎实绝对没问题💪
重点干货已经加粗标记了,上面这个问答建议再看一遍,很经典的问题。
以下面经来自网络,感谢大佬们的分享,非本人,我只是做了面经的搬运工,希望对大家有帮助。
字节面经
一面
自我介绍+算法题:
- https://leetcode-cn.com/problems/find-peak-element/
- https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/ 3. https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii/
问答
- 索引,倒排索引,切词,如何根据 doc id 有没有出现某个 token
- 服务高可用是怎么做的
- MySQL 可重复读、读提交区别、原理
- 爬虫 URL 去重,设计存储结构(FST,前缀树+后缀树) MySQL (a,b,c) 索引,几条 SQL 走索引的情况
- 思考题:概率 p 生成 0,1-p 生成 1,如何 1/2 概率生成 1
二面
算法题:
- https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/
- https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii/
- https://leetcode-cn.com/problems/coin-change-2/
技术问题
- 讲一下 es 索引的过程
- 切词怎么切,切词算法,降噪
- 让你带应届生,怎么带,
- 有什么工程经验可以分享
- Redis 缓存淘汰有哪些
三面
自我介绍
算法题:
- https://leetcode-cn.com/problems/first-missing-positive/
技术面
- 文章下面的评论,按点赞数排序,SQL 怎么写
- 把所有评论放到内存里,怎么设计数据结构,存储并排序
- select * 会有什么问题
- 缓存热 key 怎么解决
- 职业发展
- 领导如何评价你
- 项目难点,亮点
滴滴面经
一面
- 介绍项目
- 问我为什么选择GO,看我有Java从业经历。
- 介绍一下java 和 go 区别,我猜是让我说一些他们的不同点,go 比java 哪里好。我说了一些 特性 3.1 问我协程比进程好在哪里? 我自己顺便说了进程线程 协程三者关系 4. 问我想从事什么
- 项目中有bloom介绍了一下怎么使用的,精度,损失
- GPM模型
- redis使用模式 主从 哨兵 巴拉巴拉
- 接着聊项目,然后问了算法
- 渐进式的聊面试,很轻松
- 问我能不能接受看php? 反问时候,聊了一下GORM,应用情况。他们的go-spring,还有他们的夜莺系统。因为看过一点点所以想问问。有培养体系,教我如何写GO(这个我很欣慰),说有大佬内部课程。
二面
- 自我介绍(面试官也不看我,一脸严肃我特害怕。然后自我介绍磕磕绊绊的)
- 问我看源码吗?
- 问了问GC 发展史,都怎么玩的 每次优化了啥
- 问了问我go 内存 优化了哪些东⻄(这题我忘了咋问的了)
- 问了一下我项目里nodejs 升级为 java 为啥会快了那么多。6.问了红黑树特性,哪个数据结构用到了。我介绍了一下 红黑树 一些特性 比如 平均查找时间 低 插入删除需要 左旋右旋调平衡。我想到 java里 hashmap 用到了这个结构 7.问了一下map的底层结构 顺便介绍了一下 sync map
- 找出两个大文件交集
- 算法 leetcode 两棵树 b 是 a子集那道题思路 怎么做 dfs 然后比较 值和 指针
- 聊了一下 我的项目 召回相关的 和 nodejs java 迁移 效率提升问题
- 聊了一下 go-spring 夜莺 还有 didi 有个 写sql的github 项目 想问一下应用情况。问我能不能 接受 看看php 之类的
- 问了问我为啥离职
腾讯面经
一面
- 算法题二选一
https://leetcode-cn.com/problems/permutations/
https://leetcode-cn.com/problems/sorted-merge-lcci/
- MySQL 隔离级别
- MySQL 锁
- MySQL 存储结构(b+树)
- 索引 回表 是什么
- 消息队列,rabbitmq
- rabbitmq 如何保证可靠性(生产者可靠性、消费者可靠性、存储可靠性) - rabbitmq 几种模式
- es 索引的过程
- 线上是如何分表分库的,用什么做分表分库的策略,跨表查询
- MySQL 如何同步到 es
- 线上 Redis 用的是什么模式
- 缓存热 key 怎么办
二面
- 介绍项目
- defer 、go 继承,手写快排
- 登录流程,JWT、session、cookie
三面
- 缓存一致性
- Redis key 统计
- Redis 单线程,io 多路复用
- 算法题 https://www.nowcoder.com/practice/35119064d0224c35ab1ab612bffee8df
- Redis slowlog 原理
四面(面委)
- 项目为主
- tcp quick_ack 、 nodelay ,socket 编程
- 职业规划
- 为什么换工作
五面(GM)
- 项目
- go 协程机制
腾讯云
这个面经来源于网络,这位朋友主要技术方向是k8s、容器、云计算。
有服务上云的实践经历,了解cicd基本流程,求知意向是容 器研发、基础架构研发、运维研发之类的(主要还是研发方向)。
项目方向:
项目的话我不多说什么,就是自己的项目细节自己肯定清楚,如果项目中不是自己做的 部分,建议不要在简历上写太多,写清楚自己做了什么,容易被抠细节问,项目一般都会抠细节,特别细的那种!!!
语言栈:
因为主要语言栈是go,所以一般都比较少问python。
golang
1、gin框架路由怎么实现的,具体正则怎么匹配?限流中间件怎么实现? 2、go的slice 与数组的区别,slice的实现原理,源码? 3、golang的协程调度,gpm模型。协程调度 过程中的锁。4、golang的channel实现,channel有缓存和无缓存,一般会直接撸码 (三个goroutine顺序打印)。5、golang的关键字defer、recover、pannic之类的实现 原理。6、sync包里面的锁、原子操作、waitgroup之类的。7、make和new的区别, 引用类型和非引用类型,值传递之类的。
python
1、python多线程、多进程。2、python的装饰器怎么实现的?
操作系统
1、进程、线程、协程间的区别以及他们间的切换之类的,有时候会问到语言级别的协 程。2、io复用、用户态/内核态转换 3、awk命令 4、linux查看端口占用 5、top命 令,free命令中的各个参数表示什么,buff/cache都表示什么?
k8s & 容器:
1、简单聊一下什么是云原生、什么是k8s、容器,容器与虚机相比优势。2、k8s组 件,pod创建的过程,operator是什么? 3、docker是怎么实现的,底层基石 namespace和cgroup。4、k8s的workload类型,使用场景,statefulset你们是怎么用 的? 5、limit和request,探针,一般怎么排查pod问题,查看上次失败的pod日志。6、sidecar是什么,怎么实现的? 7、pv,pvc,动态pv怎么实现 8、k8s的声明式api 怎么实现的,informar源码。9、cicd,发布模式。10、svc的负载均衡、服务发现, ipvs与iptables。以上基本是会被问的点(虽然有一些问题我也不是很熟),另外很多 会被问k8s的网络之类的,因为我比较菜,这块被问的比较少。
计算机网络:
1、tcp三次握手四次挥手,为什么不能是两次握手,三次挥手?握手和挥手过程中的状 态。2、time_wait作用,为什么是2msl,close_wait作用,time_wait过多怎么办? 3、http请求的过程,浏览器输入网址请求过程?dns解析的详细过程? 4、https与http 的区别,https第一次服务端回传是否加密? 5、tcp与udp区别,tcp怎么保证可靠性。6、http请求头、分隔符、⻓连接怎么实现
数据库:
1、mysql的事务,事务使用场景。2、mysql的索引,什么情况下索引失效,聚簇索引 与非聚簇索引,索引的存储b+树与b-树区别。3、join的内外连接,最左匹配原则。4、redis的数据结构,hmap怎么实现的,持久化怎么做,go操作redis的方式。数据库 方向有被问到,我基本没答上来(一般都告诉他只会基础,开发直接使用gorm)。
数据结构与算法:
1、倒排索引和B+树 2、判断链表是否有环,时间复杂度要求0(1) 3、LeetCode上合并 区间的题 4、leetcode的股票买卖的题 5、二叉树的最近公共祖先 6、有序数组合并 7、什么是平衡二叉树、最小堆 8、大文件的top10问题 9、golang实现栈、队列
其他:
1、git 的相关操作,合并commit,合并之类的。2、场景设计(比较多)
小米面经
一面
- innodb MVCC实现
- b+树是怎么组织数据的,数据的顺序一定是从左到右递增的么
- ⻚分裂伪代码,b+树的倒数底层层可以⻚分裂么
- 合并k个有序链表
- redis的hashtable是怎么扩容的
- select poll epoll,epoll具体是怎么实现的
- GMP是怎么调度,channel是怎么收发消息的,channel的recq和g是怎么建立关系 的
- innodb二次写是什么
- undo里面具体存的是什么
- b+树节点具体存的是什么
- mysql一⻚最大能存多少数据
- myisam和innodb索引上的区别
- innodb commit之前,redo 的prepare然后binlog commit,然后redo再commit有 什么缺点?5.6之后是怎么优化的? 14. redo和binlog的区别
- 读锁和写锁区别
二面
- 蛇形打印二叉树
- myisam为什么不支持事务,如果要支持事务要怎么做
- 函数只能返回1-7的随机数,请用这个函数返回1-5,要求平均 4. 聊项目
三面
- go的协程调度和os的线程调度有什么区别
- 只有写锁实现读写锁
- go的调度是怎么实现的
- go的网络IO为什么快?还有优化空间么
- epoll为什么这么快,还有优化空间么?如果要你实现一个网络IO应该怎么实现
- 设计一个每秒80万qps的过滤器
- 过滤器用redis实现,宕机期间数据怎么恢复
- 设计一个下单 扣减库存的分布式应用,请求超时了怎么办,一直重试超时了怎么办
- 数组A1 2和数组B2 3是一个关系圈,A能通过2找到3,数组A1 2和数组B2 3和数组 C 3 5也是一个关系圈,给一个二维数组求关系数
小米游戏面经
一、 介绍连接池项目
- 介绍连接池常用的参数,最大连接数,最小存活数这些意义,为什么要有这些
- 当链接超过最大连接数怎么处理,等待有空闲连接还是创建一个继续给出,比较两 者的优劣
- 连接池清理链接的逻辑,如何优化的
- 当连接池中有一些链接不可用了怎么办,如何保证这些连接的可用
- 当出现下游某个实例挂掉了,连接池应该怎么处理
- 对比 mysql redis http 连接池的实现
二、 介绍负载均衡算法
- 介绍平滑负载均衡算法,实现
- 当出现下游出现不可用,负载均衡算法怎么处理
三、 介绍聊天室项目
- 介绍实现原理的,互相通信的逻辑
- 聊天室服务端如何把消息下发给用户
- 介绍websocket包的字段
- 当有用户掉线怎么处理
四、 redis相关
- redis的数据结构
- 各个数据结构的操作
- 各个数据结构的使用场景
- 如何保证 Redis 的高可用
- 当有一个key读取的频率非常高怎么办
五、 算法相关
- 介绍快速排序 优先队列的实现
本文转载自微信公众号「 程序员升级打怪之旅」,作者「王中阳Go」,可以通过以下二维码关注。
转载本文请联系「 程序员升级打怪之旅」公众号。