滴滴、北京合链、小米、Klook 校招golang工程师面筋
滴滴出行
一面先聊项目,二叉树非递归遍历、快排、实现一下智能指针;
二面redis底层及相关知识;
-
对golang的测试问的很久,性能调优方面的;
-
redis库的场景问题还有些底层的实现问题;
-
问等待所有goroutine结束,怎么做?
答使用sync.WaitGroup。 -
map的底层实现。
-
redis集群?一致性hash?
-
go的测试?
三面聊人生理想。
北京合链共赢科技有限公司
-
gorintine是怎么调度;
-
gc算法;
-
io模型;
-
考察切片比较,深拷贝的问题;
-
合并两个有序数组;
-
考察for ... range 陷阱。
总体评价面试官很大气,不揪小节不放。
小米
-
切片和数组差别、go多协程之间怎么同步;
-
通道;
-
sql的锁;
-
left join和inner join的区别;
-
怎么看goroutine之类的。
最后面试完后,直接问我期望工资多少,我报了个数,然后他说他不是技术总监,技术总监出差了。
Klook 客路旅行
限制你半小时内做完6道题,题目做对了,就走技术面了。
-
你在开发中碰到什么技术难点;
-
有个兔子的问题,一对兔子第三个月后就开始繁殖,不考虑死亡,求兔子数。
答:其实就是一个斐波那契数列,我是用循环解决的,当然你也可以用递归: func rabbitCount(m int) int { sum:= 1 for m >=3 { m-=3 sum+=m } }; -
百万级Mysql怎么处理。
答:1-主备 2-读写分离 3-集群 4-负载均衡 5-查询缓存 6-raid -
怎么用go实现一个栈。
答:其实就是一个切片的问题,注意pop的时候一定要注意切片长度检查,否则会panic。 -
有个考察defer和panic执行顺序的问题。
答:defer是先注册后调用(最后注册的最先被执行)。所有defer都执行完后,才会显示panic里面的东西。