PingCAP春招实习面经,123面已OC。
认识PingCAP
听说PingCAP,是在我加的一个实习互助群里看到有大佬提起的。那时我还在JD实习,做着自己不太喜欢的工作内容,正想换一个方向试试。
当时的第一印象是:一个做分布式数据库的很NB的公司,交大巨佬迟先生就之前就在里面实习。
很好奇的我就去Google了这家公司。了解了一下之后发现PingCAP真的是一家很酷的公司,能够在基础架构做开源、做出盈利、去年还融到D轮2.7E刀,在国内真的凤毛麟角。我只能说一句:tql。
准备面试
了解完PingCAP的工作内容之后,我对他们的工作内容和工作文化都非常的好奇。
我开始搜索怎么才能去PingCAP实习。
在知乎上看到了黄东旭大神的一个回答,里面有一句话:"如果你做完了6.824,对自己有自信的话,就试着来实习吧。"
于是我就开始去做6.824了,一开始的时候想法很单纯,就是想通过对这个课程的学习,能够达到到PingCAP实习的要求。学习了这个课程之后,发现分布式系统和数据库这块知识真的很有意思,现在也成为我的兴趣所在了,算是意外的收获了。
在经过差不多一个月的折腾之后,我把6.824做到了Lab3B。(论文只读了5篇,差不多把所有的时间都投入到Lab上了。)
在三月下旬,我通过某乎找到了一位PingCAP的工程师,请他帮我内推。经过几天忐忑地等待,我的面试开始了。
2021.3.24 一面
1.面试官介绍了他们组目前的工作。
2.我自我介绍。
3.申请一个10kb大小的数组,操作系统发起了什么系统调用?
4.内存管理,页表。
5.一个程序从加载到运行,中间发生了什么?
6.给定10k个任务,1%低优先级,每个需要运行10s;另外99%高优先级,每个需要运行10ms。有一台双核机器,设计一种调度算法,让它们都不用等太久就能被执行。
-
分析得出低优先级的任务有100个,总共需要运行1000s。高优先级总共需要运行约100s,完全可以先执行高优先级任务,再去执行低优先级。
-
第二问:如果事先不了解高低优先级任务的数量要怎么做?
-
可以让给低优先级任务设置一个优先度0,高的设置为8;优先度低的任务会被优先度高的任务抢占,此时被抢占的任务就会进入等待队列里面去等待cpu,每等待1s它的优先度就会加1。这样低优先度任务就不会永远等待下去;此时,为了让高优先低时长的任务依然能得到比较快速的响应,我们可以只在一个核中采取以上策略,另一个核仍然优先分配给高优先级任务执行。
7.Raft figure8。为什么Leader不能直接commit前一个任期留下了的log?如果这样做会出现什么问题?
8.二叉树的最近公共子树。
9.反问阶段,还有面试官给了我一些学习方面建议。(例如,要多读论文,广泛了解分布式系统的历史发展脉络和概念。)
2021.3.26 二面 技术主管面
1.讲一下上次面试的收获。
-
raft figure8 那一块内容更深入的理解
-
回去对OS的内存管理和程序加载运行这一块知识进行了学习
-
面试官推荐了6.828和CSAPP,让我回去有时间好好学习一下这两个部分的内容。(我读过一部分CSAPP)
2.讲一讲OS内存管理。
3.讲一讲一个程序,是怎么从源代码到真正的执行起来的。从编译开始讲。(一面的问题,让我重新回答)
4.进一步讲一下程序的加载和链接这部分。
5.讲一讲你了解的IO多路复用,他们有什么区别。(selec, poll, epoll)
6.一个RPC的调用,从发出调用到接收到对方发过来的reply; 中间OS做了什么,用户态和内核态发生了怎样的变化,有什么中断产生?数据包在网络中经过怎样的传输,经历了几层协议栈?
7.追问,TCP属于哪一层协议,链路层协议了解哪些。
8.讲一讲ACID。(中间产生了多次追问,具体到场景,以及如何实现和如何解决某个问题;还有MVVC等内容)
9.讲一讲CAP。为什么会有CP、CA的抉择?
10.分布式事务和普通事务有什么区别吗?
11.算法题:给定一个n*n的 0 1矩阵,你只能进行两行交换的操作,求让其变成右上三角全为0的最少操作次数。
例子:
0 0 0 1
1 1 0 0
0 1 1 0
1 0 0 0 // 输出1 (0行和4行换)
这道题我不会,但是面试官给了我很多引导,让我尽量表达出自己的思考过程,不至于让我卡在那很难受。
12.反问阶段,聊一聊自己的学习生活和对实习的期待。(核心问题:一般上班时间? 答:10 6 5 )
2021.3.31 HR面
HR姐姐非常Nice,就是聊聊天,问一问我的面试体验和对公司的看法、还有我的一些基本情况。
最后就愉快地定下了OC的时间。
面试总体感觉
整个面试流程走下来,给我都是非常良好的体验。
首先,内推简历通过筛选之后,先有一个招聘助理小姐姐加我,跟我沟通定好面试时间,在这一点上我就感觉自己是得到的一定的尊重的。并且整个面试期间,招聘助理都有持续跟进和跟我反馈面试的情况,我有什么问题问她都能很及时得到回答。这种顺畅的沟通和及时的反馈,减少了等待的焦虑,给人感觉非常棒。
然后,每次技术面试都会持续大概一个小时左右,面试官在提问的时候也不是一味地发问,而是在有些地方会给我引导和参与讨论,我觉得模糊的知识点会在跟面试官的讨论中变得清晰,每个问题也会因此说得更深入一点。
并且面试官会给我足够的思考时间,愿意花时间去听我自己对问题的看法(非标准答案),让我有更多展现自己的机会。
面试官还给了我许多进一步学习的建议,并且会在最后的反问阶段跟我聊一聊他自己对我此次面试表现的看法,有哪些可以提高的地方。这些都是有别于我的其他面试体验的,总体感受就是比较和谐,而没有紧张和焦虑。
我个人觉得实习的面试真的不算很难,比起之前面过的大厂来说,在技术层面上的考察可能就半斤八两,八股文问的不是很多。问的问题大部分在CSAPP上都能找到答案。可能更多的是看候选人对这个领域的学习热情和沟通能力吧。
#实习##PingCAP##Java工程师#