【阿里巴巴】Go岗-新鲜的大厂面经~

第一面

1.请说一下mysql的事务隔离级别。

由于我对这里比较熟悉,所以主要讲了一下“write skew“和“Phantom“,以及”repeatable read“和”snapshot isolation“,面试官显然对这部分了解不多,然后我又讲了一下mysql的mvcc和加锁策略,以及tidb的乐观事务模型。接着说了一下数据库如何实现ACID的,以及事务的调度算法。
参考《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

。。。。写了增删改查,扩容不会写。

发表评论

后才能评论