作者:muf
3月8号面试,地点在希尔顿酒店二楼,12点多赶到后扫码排队,我是下午的第二个,但是等了很长时间,期间CVTE这边还提供了菜盒子(很精致的那种),等待期间和周围的人聊天,发现很多是双非院校来面试的(心里有点小失望),然后和之前面试过的人聊天,有人说面试官一直问数据库相关内容,但是我面试的时候那个面试官没有问数据库的内容,这个还是要看面试官的。手机叫号后我就开始了面试,
面试官长得有点萌,看起来没比我大多少,所以当时我就放松了很多,先是介绍项目,面试官也没有就着项目问刁钻的问题,随便聊聊后开始问基础知识,总结如下:
(1)面试官问的第一个问题是关于网络中传输层定时器的定时时间计算问题,几秒之后我回忆起了书上关于定时器的内容,回答道:迭代计算,第i个单位时间的定时时间Ti=a*(Ti-1) (1-a)*ti;其中Ti-1是前一个时间的定时时间,ti是第i个时间的往返时延,那么真正的定时时间应该是Ti再乘一个数字,可能是120%或者130%,因为我们不可能因为往返时间的大小正好确定定时时间,而是要适当扩大一些范围,就好比我上班路程是10分钟,那么领导判断我是否因为其他情况无法到达的计时时间就不可能按照10分钟计算,因为那样就会有一半的可能性是误判,所以要乘上一定的系数进行判断,比如说最长12分钟或者15分钟等等,那么公式中的a一般取值0.8 因为第i时间的往返时延ti具有一定的随机性,不能客观反映整个网络的状况,所以它的权值应该较小,而Ti-1是进行了大量迭代计算的结果,更能反应真个网络的真是情况,所以权值交大。书上的取值一般a取0.8,Ti计算后乘1.2作为真是的定时器时间,答毕。面试官比较满意
(2)紧接着第一题问,传输层如何实现可靠传输,本人答:(摆出一副不屑的表情,给他一个下马威),so easy 依靠超时重传和确认机制,实现可靠传输四个步骤:慢启动,拥塞避免,快重传,快恢复,然后给他每点展开讲,然后画图,然后门限值确定,然后三次冗余ACK,云云,大概答了不到10分钟,连画图再解释,面试官为之拍案叫好。
(3)进程间同步问题如何实现,答:锁,信号量。面试官追问了一个进程间同步互斥的问题,大致类似于三个进程生产产品,缓冲区只能放一个资源,A进程生产后,B进程生产,然后C再加工,然后我很轻松的用信号量写出了过程,面试官又问:如何不使用Semaphore实现,我用int代替信号量实现,面试官不再追问。
(4)C 11中智能指针中的共享指针如何实现,答:共享指针类似于操作系统共享文件硬链接和软链接中的硬链接,不知道您是否了解硬链接,面试官答:不了解(有点小尴尬),我说没关系,share_ptr类似与硬链接,是通过一个计数器实现指向一块地址空间的指针数,只有当指针数目为0时才能释放内存,这样就避免了不同指针指向同一块内存空间进而出现二次释放空间的问题。然后我手写了share_ptr类,实现了计数器,*操作符重载,析构函数重写等功能,面试官比较满意。
(5)多态如何实现,构造函数中能使用多态吗? 老生常谈的问题了。
(6)手撕代码:统计1-M个数中字符1出现的次数,答:(一脸不屑)此题名叫1的传奇,是我们西工大noj题库里面给本科生的作业题,这个题我在给本科生上课的时候讲过多次,是用排列组合的思想进行分析,我们只需要写出一个递推表达式,表示第i位上的数字是d时由1-d*10^i这些数中1出现的次数,然后叠加每一位即可得。当时很多学生都采用传统的解法,每个数字进行判别,那样时间复杂度指数上升,会出现超时,而我的解法时间复杂度仅依赖于M的位数,是O(log10 M),然后开始手写代码,因为时间原因代码没有写完面试官就说可以了。
整个面试谈笑风生轻松愉快。
一面二面是在一起进行的,面试官说晚上8点会出结果,实际上是第二天中午才通知我让我参加终面,通知的时间是下午,我当时还临时有事,所以在网上选了个因路途遥远无法及时赶到,打算放弃CVTE的。
就这样过了一个月,期间又拿了几个offer,对CVTE渐渐淡忘了,没想过3月9号HR打来电话问我是否有时间参加终面,面试地点很好,在我们学校自己的酒店里面,因为我原本就放弃CVTE面试的,所以一点没有紧张的感觉,拿了一个背面都已经作为草稿纸的简历,穿了一个拖鞋就去了,没想到还通过了(没理可讲了),终面就是谈些家常,问一下家庭情况,希望以后的薪资等等,大概不到1个小时吧,就这样顺利拿到CVTE的实习offer。
作者:muf