快手秋招正式批 Golang后端 一二三四面面经
三面四面全程被拷打,还是约了HR面。但感觉排序排不出来了。
1面(50min)
- 让我自己介绍觉得不错的项目(导致全程都没在聊实习)
- 我说的IM项目,问我心跳怎么解决周期短,链接多(没答好)
- 当连接数很多,全部都在高频率发消息,会影响什么系统指标
- 时间轮算法的优点
- context用过没 咋用的
- map为什么不安全 安全该用啥呢
- 说一下GMP
- select 如果都触发了,golang如何选择执行哪个case分支
- ch := make(chan int) ch<-1 fmt.Println(<-ch) 会不会死锁 为什么
- mysql为什么b+树,对比b,b-树的优势
- 虚拟内存,物理内存是什么
- 进程间的通信方式
- 算法:
- 链表相加
- 删除链表倒数第n个节点
2面(60min)
- 自我介绍
- 成长最大/复杂度最高的项目
- 重复消息,漏消息,你偏好哪个
- 项目亮点
- 算法:
- 实现一个中序遍历的迭代器(不能提前遍历好,少加了个*搞了我二十多分钟...)
3面(40min)
- 实习介绍,聊天
- 下面的流程你可以做哪些优化?假设执行10ms,qps是多少?
- 从kafka读出一个消息
- parse消息
- 根据parse的消息去磁盘文件A加载数据
- 根据加载的数据进行计算
- 将算出来的数据append到文件B
- 内存排序10亿个数据,要多少ms?(我直接崩溃,完全不会)
- 反问,如何学习
4面(60min)
- IM项目里goroutine怎么用的
- IM项目性能如何,如何测试的
- 有栈协程和无栈协程的区别(完全没听过)
- Protobuf压缩原理
- 你自己设计一个int压缩算法,如何设计(不考虑protobuf的实现)
- 算法设计题
- 有一个包含10亿条(User到Query)记录的大文件,如何在机器数量不限的情况下,尽可能快地找到“热门Query”(即出现频次最高的前1000个Query)?
- 给定两个正整数N和M(M≤N,N≤3),从1到N中选M个不重复的数,输出所有不重复的组合(如123、124,排除132、231这类重复排列),请设计实现方案,并分析时间复杂度和空间复杂度。