个人情况:双非本、双非硕,科班研一在读。技术栈:golang、云原生、linux网络编程,研一上学期期末考试结束后投递字节后端实习岗位,已经入职。
下面是我的面经,也欢迎加入我的QQ内推群进行讨论:884072118,通过我的链接内推的同学可以随时询问内推进展。
内推链接:https://job.toutiao.com/referral/mobile/lightning-referral?category=&location=&token=MzsxNjQ0ODQ1NzUyNzg0OzcwNTM5ODc5OTg1NDY3ODk5MDI7MA&type=3
我的内推码:9NP9NCR
⼀⾯
golang的特点(逃逸分析,GMP,-race,接⼝设计⾮侵⼊式)
详细说⼀下GMP
make,new区别
golang⾼并发,sync包,CAS
golang写web都⽤过什么包,(原⽣http)
Cookie 和 Session区别
tcp和udp区别和应⽤场景
http包头都有什么,我说了host和keepalive,其他不清楚
http状态码
了解websocket吗(不知道)
mysql存储引擎,innodb知道什么,wal、mvcc
B+树有什么优点
事务隔离级别
MVCC原理
redis数据结构,我只说了string,zset,字典,set,还有⼀个忘了
redis集群的部署,我说了RDB和AOF,然后扯了⼀下主从,和哨兵(他说有⼀个cluster模式,没听过)
跳表实现原理
docker技术和VM技术的区别
docker ns、cgroup,union fs,详细说⼀下ns、cgourp
docker两种⽹络模型,host和⽹桥,这个没懂⾯试官想问什么,我扯了k8s flannel组件(跨pod通信),说了⽹桥相当于局域⽹,host没⽤过
说⼀下kubernetes架构,我扯了很⻓时间
说了⼀下如何查看⼀个pod信息,我说了exec进⼊,然后-owide,describe,他说可以
然后问我如果部署⼀个mysql应⽤,我说这是有状态服务,可以 ⽤Statefulset,但具体没试过
题⽬:打印最⻓公共⼦串,忘了dp咋写,写了⼆分时间复杂度更低了
⼀⾯总结
问的⽹络应⽤层⽐较多没答好,平时没有对这部分知识进⾏积累,问了http header有什么内容,我只说了有http1.1引⼊的keepalive还有host,昨天看了cache-control(⽤于CDN),Range⽤于下载⼀个⼤⽂件的部分内容,还有⽤于代理的⼀些key⽐如resp:【origin,via】,request:【"X-Forwarded-For"和"X-Real-IP"。】然后redis没⼤⽤过,不过⼤体重要的⽐如跳表数据结构,集群只说了主从和哨兵,然后有个cluster没说出来然后问了如何在k8s上部署mysql,我之前只看过书,所以细节没记住,⽤stateful没有实际操作过,昨天我试了⼀下在⾃⼰的集群上部署了。
⼆⾯
先问k8s、怎么理解k8s的(我说k8s跟操作系统很像)、四层⽹络模型,和七层⽹络模型,不知道k8s⽹络模型啥意思,讲了pod和pod通信⽅式和service原理,然后问了ingress,我说跟nginx很像,可以根据路URL找服务然后问了⼆层⽹络模型和三层模型,我问了确认⼀下是问计算机⽹络吗,⾯试官说是。我就直接把三层路由的过程讲了⼀遍(回来查了⼀下overlay⽹络(tun、vxlan)技术可以实现跨主机pod通信,就是在应⽤层把虚拟出的⽹络再弄出来)
然后问了TCP为什么能实现可靠连接,我说了连接可靠,传输可靠(说了ack、seq序列号、拥塞控制、流量控制),断开可靠
为什么TCP需要三次握⼿
为什么TCP需要四次挥⼿
问了⼀堆项⽬相关,具体怎么实现的,⽐如缓存淘汰机制,⼀致性hash,布隆过滤器,然后说了线程池该怎么设计,我说了与GMP的不同,然后⾯试官说不要说别⼈的设计,让我说应该怎么设计,我说了设计⼀个init接⼝,然后add接⼝,传函数指针(⼼虚)
做题:dfs求联通块
反问部⻔⽤什么技术,为啥⼀⼆⾯都没问操作系统,⾯试官⼜问了COW。
三⾯
拥塞控制,为什么要这么设计
TCP沾包问题(不会)
BIO、NIO
epoll、poll、select
平衡⼆叉树
跳表
红⿊树
B+树
内核态和⽤户态
协程和线程的区别
raft为什么能保证⼀致性
raft选举过程raft分区后恢复会怎么样
算法题:判断⼀棵树是否是平衡⼆叉树,说⼀下思路并实现
反问:我的表现咋样,有什么需要改进的,⼀个优秀的实习⽣应该能在三个⽉内有怎样的进步