字节春招基架面经
一面
做了简单的自我介绍, 然后面试官让我介绍一下项目
照着字节开源的netpoll做的一个自定义epoll IO库, 我大致介绍了一下实现, 投屏给他讲了下怎么实现对自定义协议和protobuf支持的.
为什么用LT, 讲了下LT的缺点, 所以里面制定了可配置ET
项目里面用到了spinLock, 面试官让我讲一下我的spinLock的实现,以及go 标准库mutex的实现
问了go的gc, 影响gc的条件是内存开辟大小吗
闲聊了下另一个项目, 秋招的时候面试官技术上已经问了够多了, 这次面试官就好奇了一下日活, 怎么做推广的
算法题:
两两翻转链表
第二天二面:
二面基本上是聊天
我简历里有开源项目贡献的经历, 就让我讲了讲开源贡献, 大致上是给两个高star go IO库和rpc库修复做了点内存溢出的问题
问go中内存溢出怎么检查
有哪些内存溢出
问go和nodejs的区别
其他基本在闲聊
面试官最后介绍了下部门做的内容, 还是挺感兴趣的
算法题:
二叉树的序列化和反序列化
九天后三面
(中间因为北京疫情,还有三面leader很忙的样子, 拖了很久才面)
偏向聊天
问我为什么从字节前端基架实习跑路了, 为什么秋招拿了字节的offer没来 (尴尬..不知道咋说)
问我go 的协程栈怎么增长的
go 的netpoller如何封装epoll的
自定义epoll能有多少用 , 问我有没有具体的benchmark数据, 我没做过, 只说了鸟窝大佬有篇博客做过百万websocket连接的对比
面试官可能对自定义epoll这种做法一直持怀疑态度吧, 觉得开的goroutine内存不是无谓开的,
多次追问, 我不太能get他的点, 我只说在大量连接proxy(转发)场景下, IO框架的性能是最大瓶颈, 所以还是有用的
问10核CPU开10个goroutine死循环会怎么样
问知道goroutine切换的开销吗, 做过pprof吗
项目里用到了heaptimer , 问知道其他的做法吗, 为什么不用, (我说timingwheel时间复杂度稍低, 但是做起来很麻烦)
提到heap ,让我说一下heap怎么删除任意节点
绷, 一下蒙了, 一直调库没关心过这个,,,
卡了半天, 问我怎么删除堆顶, 想了会儿答出来了,
但是一直说不对怎么删除任意节点, 主要是这种基础问题没答上来很慌
最后放弃了, 面试官挽尊让我写下heapify, 默写完了
后面稍微聊了下工作强度之类的, 就结束了
看面试官的意思, 估计凉了, 栽在基础数据结构上, 还是水平差了点.
3-15更新
刚刚hr面了, 还混了个sp, 感觉挺幸运的, 腾讯wxg那边还没挂, 但是流程也还没推进
唉, 看来wxg要失去我了😂
许愿offer~