某大厂面经
第一面。
1.请说一下mysql的事务隔离级别。
参考《A Critique of ANSI SQL Isolation Levels》和《数据库设计与实现》。
2.简要说一下kafka。
主要回答了一下broker,分区,isr,储存方式,零拷贝。然后扯了一下zookeeper的设计以及zab协议。
参考《Kafka权威指南》《从Paxos到Zookeeper分布式一致性原理与实践》和《ZooKeeper: Wait-free coordination for Internet-scale systems》
3.算法题,leetcode 中等难度通过率31%
在指导下做出来了。
4.说一下go协程设计
由于自己用c实现过协程,所以答的很随意。讲了一下函数调用约定,栈布局,上下文切换,x86寄存器,又讲了一下用gcc的"-finstrument-functions"。然后讲了一下go的调度思路。
参考go源码runtime.schedule
5.说一下epoll
讲了epoll跟select的区别,然后回答了et和lt的区别以及使用场景。又回答了一下go的设计思路。
参考man 7 epoll和go源码 runtime.netpoll
第二面
1.讲一下raft算法
讲了一下leader选举,日志复制,应用到上层状态机这三部分。
参考《In Search of an Understandable Consensus Algorithm》
2.讲一下cap定理
回答了一下概念。然后结合 mysql(同步复制,异步复制),kafka(isr),etcd(raft),zookeeper(zab)讲了一下各自是什么系统。
参考《ddia》
3.算法题 链表排序
先用插入排序做出来了,
让用快排做,不会做。
然后问时间复杂度,这个回答错了,
接着又让证明,结果又证明出来了个logN...
4.又问了一道算法题
很水的题目,忘记了。
5.讲一下fork原理。
背了几个步骤,回答了一下。
参考《深入理解linux内核》
6.如何设计一个朋友圈。
没啥思路,在指导下写出来了。
第三面
1. zab,raft,paxos协议的区别。
回答了一下raft,然后有点蒙也不知道回答什么。
2.讲一下canal
说了一下binlog的格式。
3.讲一下协程设计
同一面
4。一道算法题
跟数列有关的算法题,可能是想考察dp的,我直接推出了通项公式,代码也没写
5.go的hashmap如何实现的
讲了一下均摊扩容,然后问了一些很细节的问题,估计是看的某个issue。
6.实现一个hashmap
。。。。写了增删改查,扩容不会写。
#社招##golang工程师##面经#