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工程师#
全部评论
真的tql
1 回复
分享
发布于 2021-04-03 11:37
请问楼主是哪年毕业的?
点赞 回复
分享
发布于 2021-04-03 18:35
联易融
校招火热招聘中
官网直投
疯狂膜拜江神
点赞 回复
分享
发布于 2021-04-03 19:56
大佬tql
点赞 回复
分享
发布于 2021-04-07 23:24
咦,老哥没问项目?
点赞 回复
分享
发布于 2021-07-07 18:07

相关推荐

选择题跳过。编程题三题T1 签到,排序去重即可。T2 问刚好等于x。考虑01背包(下标从1开始)。dp[i][j][k]表示到第i个数,总共选取了j个,k=0表示[1~i]都没多次操作(都没加倍)。k=1表示[1~i]存在加倍的情况,可能是i,也可能是之前的某次。列出状态转移方程:dp[i][j][0] = min(dp[i-1][j][0], dp[i-1][j-a[i]/2][0]+1) 表示不选和选的情况。dp[i][j][1] = min(dp[i-1][j][1], dp[i-1][j-a[i]/2][1]+1, dp[i-1][j-a[i]][0]+1) 表示不选、选择但是不多次操作、选择并多次操作的情况。最后输出min(dp[n][x][0],dp[n][x][1])即可,若为inf则输出-1.第一维可以优化掉,空间O(x),时间O(nx)。T3 样例给的比较号是<和>这种,很神秘,最后发现直接改成都行。也考虑dp。先把等号去掉,那个不影响答案。假设有len个运算符dp[i][j]表示到第i个运算符右侧的数,选择j,所得到的方案数。如果第i个运算符是 > ,说明右侧的数更小,则 dp[i][j] = dp[i-1][j+1] + dp[i-1][j+2] + ... + dp[i-1][m]如果第i个运算符是 初始化dp[0][1~m] = 1,表示最左侧的数取任何数的方案数都是1最后对dp[len][1~m]求和即可。当然直接算会超时,毕竟要求和。实际上如果第i个运算符是 >,那么由于dp[i][j+1] = dp[i-1][j+2] + ... + dp[i-1][m],因此dp[i][j] = dp[i][j+1] + dp[i-1][j+1]。同理如果第i个运算符是 由于i只用到2个,因此可以压缩一维到大小为2.最后空间复杂度O(2*m) = O(m),时间复杂度O(n*m)#笔试##小红书#
投递小红书等公司9个岗位
点赞 评论 收藏
转发
大厂处女面 29号人才库,这几天事比较多加上心态有点崩没记录,现在补一下1. 自我介绍2. 讲讲项目大概做了什么3. 看你写了保证一致性,怎么保证的4. 那要是没删掉错误的缓存呢?5. 还有别的方案吗6. 缓存热点信息怎么做的,redis淘汰策略7. 你是所有店铺信息都缓存了吗8. 那你是怎么判断哪个店铺是热点数据9. 设置有效期的语句怎么写10. 怎么合理设置缓存数据的有效期11. 项目用到了哪些redis数据结构12. zset什么结构?13. 为什么要用跳表实现zset14. 查数据时间复杂度?那插数据呢?15. 看你写了解决http无状态,怎么解决的?16. 为什么token要放在redis17. 有了解jwt不18. 为什么不用session19. 讲到分布式session不共享、那n年前的前辈是怎么解决的(后面他想了一会说这个方案太老了没必要了解)20. redis事务有了解吗?21. 缓存穿透是什么22. 你怎么解决的?缓存击穿?缓存雪崩?23. 有用过redis集群?24. 项目有用mysql吗?怎么用的?25. 你讲到了索引,索引的结构是什么26. 所有索引都是b+树结构吗27. mysql事务的几个特性28. 怎么实现读提交?(这个我记不太清楚有没有问)29. 有试过分库分表吗30. 一道简单sql 三个字段(学生姓名、科目、分数)找到所有科目超过80分的学生31. 项目用到了java哪些集合(Arraylist、linkedlist、map)32. arraylist和linked区别33. 他们的线程安全类怎么实现,有用过吗34. 怎么开启一个线程35. run和start有什么区别36. 有用过线程池吗?参数怎么设置的?讲讲几个参数的意思37. 核心线程数是什么?最大线程数是什么?(后面还有几个问题,我记不太清)38. 讲讲垃圾回收(我以为是问算法,他说回收器,看我讲的不太好没继续问)39. 怎么判断对象要被回收40. lc 14341. 反问应该还有一些问题,不过我记不清了,脑子不太清楚见谅。#暑期##你收到了团子的OC了吗##牛客解忧铺##实习,投递多份简历没人回复怎么办#
点赞 评论 收藏
转发
12 84 评论
分享
牛客网
牛客企业服务