依图三面 软件开发 面经
10.15 一面 视频面
面试官是个胖胖的小哥,很和气,很有耐心。
- 上来根据简历问项目,问了我简历上写的一个自动驾驶相关的项目。出乎意料的是面试官对我的项目竟然挺懂的,问的比较细节。
- 然后是做题,题目是输出一串阿拉伯数字的英文描述,数字不超过20位,比如“21932902”,应该输出“twenty one million, nine hundred and thirty two thousand,nine hundred and two”,我的思路是先把输入的int用to_string()转换为字符串,然后用substr()进行切分,超过十位的迭代本函数,然后接上billion,然后后面的就是三位三位地进行处理... 面试官说没问题。
- 然后是一道智力题,一枚硬币,抛出正反面的概率都是50%,问现在要用抛硬币定义三个事件,这三个事件发生的概率都是1/3,怎么设计?我一开始想的是看看有没有一串分母是2的n次方的分数之和加起来会是1/3,后来跟面试官一起讨论发现这样是不可能的,然后就是在面试官的提醒下算是答出来了,就是每次连续抛两次硬币,如果抛到“反 反”就重新抛两次,那么,抛出“正 正”、“正 反”、“反正”这三种情况的概率都是1/3.
持续时长1小时多一点。
10.19 二面 上海现场面
- 问实验室项目,抓细节。问项目中的各个模块的通信实现,答借助开源框架实现的,然后就让自己设计多进程通信;项目改进方向;面试官很精,一下子就看出了我的项目中的不足之处,然后问这个怎么办;等等。中间还就这个项目问了许多知识点,比如进程通信与线程通信区别,多进程通信改成多线程通信优劣分析;智能指针;等等。
- 简单问了实习项目,可能因为他不太懂,所以问的不多。首先问了实现过程,可能就是想看下自己了解程度,项目是不是自己做的;然后对简历中写的通过哈希表提升查询性能,在项目中具体的实现;等等。
- 做题,N个数找最大k个数,我以为是送分题,刚说完我就答维护一个k大的最小堆就行了,他说用怎么用堆,我说用STL中定义的priority_queue,然后他说,你把这个priority_queue也就是堆的实现原理跟我说一下,然后就答了建堆、调整堆序过程,然后他说,行,现在不要用priority_queue,自己写堆,然后就写了个void heapify(&vector<int> heap)函数,写完然后讨论了下过程,实现没问题。然后时间差不多了他让我问问题,就随便问了下。
时间持续1h,面完他走,说跟我之前视频面的面试官碰面一起聊一聊,然后给结果,我就在会议室里等结果,十几分钟后,hr过来说恭喜顺利通过二面。然后时间到午饭时间了,就让我自己下楼吃饭,然后四十分钟后是技术负责人的三面,也就是技术面的最后一面。
10.19 三面 上海现场面
三面面试官因为开会原因迟到了大概二十分钟,进来时候我就被他强大的气场镇住了,留着长胡子,拿着折扇,穿着类似打太极穿的那种唐装一样的白色宽松短袖,体型胖胖的。
- 首先还是问项目,这里主要是问了实习项目,我实习项目是用Apache Lucene做的一个搜索联想的项目,然后这个面试官也用过,所以他比较熟,就问了些细节,大家项目都不一样,所以这个没有什么参考性,就不细说了。总之要对自己简历上写的项目非常熟才可以。
- 然后他问我快排原理,我就跟他说了那个递归版本的实现原理,然后他问我,不递归的话怎么做,我想了一下,说不清楚,他说行,没有关系,来,那你来把你知道的快排代码写一下,在白板上写。我凭着记忆写了出来,然后他提示我写的有问题,然后找出来的边界判断有问题,好像这个时候大佬已经有点不满意了。然后他说如果不知道你自己写的这个程序有没有问题,现在要写测试用例,你能不能把所有情况下的测试用例用几个用例表示出来,就是说如果你这几个用例通过了就能证明你代码没问题,能通过所有的例子。我没get到他的点,接着问,您的意思是从哪方面考虑?大佬笑了笑,说,就是说能够把所有的测试用例划分为一些子空间,然后每个子空间可以通过一个例子来表示出来,测试这个例子就相当于测试了整个子空间。等于没说,我是想问一下从哪方面考虑,但是这时候不好意思再问,我就说好的好的,我再想想,然后说搞一个上升的一个下降的,一个先上升后下降,一个先下降后上升的,如果这些例子通过了就可以说明没问题,大佬说为什么,我就说所有的例子都可以划分为这几种情况的组合,就好比任何周期函数都能用三角函数的组合表示出来一样,他又说不对。我说我再想想,哎,当时都要崩溃了,说怎么摊上个这样的面试官和这种不按常理出牌的题目,题目都不懂是什么个意思。然后就想啊想,然后说从代码出发考虑,验证代码的一趟快排和迭代部分分别有没有问题,然后他说算是答上来了一点点,有一点点那么个意思。。然后他就跟我说了答案,说是用长度为4的包含0123的序列就可以测试,组合共4^4种,这些序列测试完了就能代表程序没问题。
- 然后就是聊天,让我问他问题,我问了好多,大概问的有半小时,大佬也很耐心,一一作答,聊得还算融洽。
面试时间约一个半小时后,最后实在没啥问题要问了,他说那行,那就到这,他要出去跟我视频面和二面的面试官再碰面,商量一下,让我等hr消息。十几分钟后,hr进来,说他们可能还要内部再商量商量,让我回去等消息,我说行,那你尽快通知我结果吧,我还有别的Offer下周可能会逼签。他说行,然后就送我下楼。
路费报销。