最近忙于找工作,总结下自己的面试经历,勉励自己不断学习不断进步吧。人,不管从事什么样的职业和做何种工作,都要保持一种不断探索和回头总结的习惯,好记性不如烂笔头。
面经1
一面
题
直接上题,如图,拿到这张卷子,第一反应是粗略扫了下三个题,第一题一看就会;第二题让我联想到了动态规划,最后也是用动态规划解出来的;第三题任意三个数之后为30,我首先联想到的是Hash,实际编码过程中遇到了问题,致使该题没能完全编码完成时间就到了。
晚上熄灯背靠枕头思索,恍然大悟,求一个数组中的任意三个数之和为某一个值,直接就可以用LeetCode 15 3sum实现,而且第三题的关键也就是这一步,只要这一步能想到这个算法,基于规则比较都不能算是这个题的难点。这让我不由得又开始厌恶自己起来,3sum这个题自己之前也刷了,为啥就想不起来,记性为何如此差。
第二天上午HR告诉我笔试通过了,第三题编码没做出来,这里也给各位同学一点建议,不管面试还是笔试过程中,一定要有一个好的代码规范,不一定要完完整整的编码出来,但是逻辑思路一定要清晰,一定要有自己的推理和思考。
解
如下答案都是自己独立想出的解法,没有运行也没有测试,重点在于思路,如果有问题,欢迎留言评论。
1 | class C1st{ |
二面
首先是自我介绍,然后问了下项目,最后出了个题:现有一棵二叉搜索树T,有N个线程都向T中插入节点,如何保证多线程安全性和并发性的对树T进行操作。
题与解
分析:因为是二叉搜索树,所以新插入的节点肯定是位于树中的某节点(该节点的左孩子为空或者右孩子为空,或者左右孩子均为空),我提出的思路是给树的每个节点添加两把锁leftMutex,rightMutex。
1 | struct TreeNode { |
三面
这一面不是HR面,没问技术,主要是职业规划,从毕业到现在的每个工作和每个空档期都干了些啥,为什么转行等等,从本科毕业到现在的每个时间节点问的很细,最后问我期望薪资,我作答后,然后问我之前的薪资。这一面面完后,HR加了我微信。
面经2
一面
题与解答
首先是自我介绍,然后问我为什么转行,踏入互联网的动机是什么。接着就是问项目,问的很细。最后出了一个题:输入一个字符串,写代码实现,把字符串中的所有字母A放在最前面,C放在最后,其他字符放在中间。
首先想到的就是荷兰国旗问题,使用三个指针实现,不过我用这种方法实际编码的时候,没写出来,于是我赶紧换了次一点的空间复杂度为O(n)的方法实现了,然后和面试官讲了可以用三个指针的办法进行优化,在纸上画图描述了下三个指针的思路。
最后问我有没有什么问题需要问的,我问了下面向这个职位的主要工作内容和技术栈。
1 | class CStrSort{ |
二面
这一面没有自我介绍,也没有深挖项目细节,感觉这一面主要是在挖掘我的技术广度,回忆了下,问的问题大致涉及如下:
- Http,我讲了请求和响应的组成,并说之前工作经常接触,把1到5开头的状态码含义,然后说了下301,302,500,403,404,200的含义;
- 问我熟悉shell和linux不,我说之前工作经常用,可以熟练运用;
- 问我会不会gdb,问我自己平时遇到程序崩溃的时候怎么定位的,我举了个例子,访问空指针发生段错误时,通过gdb进入调试,问我怎么监视一个变量(watch),如何查看堆栈(bt),如何调试指定线程(thread threadnumber)等;
- 问我了解curl命令不,我说实际没去研究,但是知道有这个命令,是用来抓去网页内容的;
- 问我多线程下怎么定位死锁,我说我会着重关注临界区和线程之间同步的点;
- 问我会看top命令不,我解释了大致都有哪些参数及其含义;
- 问我进程地址空间的构成,堆和栈区别,问动态库、共享内存、mmap位于进程地址空间中的哪个位置;
- 问我知道消息队列不,我说开源的有kafka,RabbitMQ,我说我自己实际没看过源代码,也没用过,但是我在自己的项目中封装和模拟了一个消息队列的实现;
- 还问了Rpc;
- 问我UML,我说自己经常用,然后解释哪些项目用过,我说从我的githuub都能看到;
- 问我熟悉mysql不,然后我说自己在项目中完全设计过mysql数据库,然后说了是哪个项目,说在我的github能够看到;
- 问熟悉redis不,我说没有看过源码,然后继续说了下redis与mysql的区别,然后罗列了redis key的类型和含义,说了下RDB和AOF,redis配置文件和redis集群;
- 问我熟悉PHP,Python不,我说我用PHP自己写过一个前后端的项目,然后说用Python写过爬虫项目,说Python也经常在用,最后说我主要还是C++;
- 问IPC,我罗列共享内存,MMAP,管道,TCP,并说自己实际都编码用过。
三面
没有自我介绍,问我和前两位面试官聊的怎么样,我说面试官挺亲和的,聊的挺投缘的。问我听说过zookeeper,Hdfs没,我说实际没用过也没去深入研究过,但是知道有这么个东西,并说了两个都是干啥的,然后说自己简单搭建过Hadoop;然后问我最近关注的开源技术都有哪些,我说linux内核源码,libevent,stl,redis。然后补充了下说还没看redis源码,只是通过网上视频、博客和教程,说后面也会慢慢关注下源码;还问了我对行业和公司有什么要求没,我说没具体限制。问我住哪里,要不要搬家,我说找工作了肯定得重新找房子。
HR面
三面后,公司小姐姐给我重新倒了杯水,说不好意思,HR忙还没赶过来,让我等会;最后HR到了后,说几位面试官对我比较认可,说我学习能力强,潜力大,然后问我期望薪资,我作答后,然后HR说他要回头反馈给用人部门,他说因为他也要看用人部门对我的一个评估,说因为目前有几个候选人,然后就是说了下薪资福利,公积金缴纳情况等,最后加了微信。