微软亚洲研究院实习生面试
上周微软亚洲研究院(MSRA)提到了网络面试的事宜。由于无法连接上而导致需要重新安排面试的时间。周五 HR 给我回电,并约定了今天中午 1:00 至 3:00 的时间段进行第二次面试。于是乎,在开始前充分做好了各项准备,在搬进了带宽稳定的 ADSL Modem 所在的宿舍里上网,并且随后便使用了一台自带摄像头的笔记本电脑进行操作。还好这次一切都进展顺利
MSRA的网络化考核通过Office Live Meeting平台进行,在线进行考核被认为是相当正式的一种即时通讯工具。在一个下午内连着参加两次技术面考核每个环节持续一个小时内容虽大体相似但由不同的考核官进行评估因此是否意味着只要获得过一次拒绝就无法参与后续环节?
一面:
一面开始深入探讨了C++语言中的虚函数。询问了C++虚函数的作用、实现方式以及采用多态的原因等技术细节。
然后涉及到了数据结构的知识。具体来说,在编程之美第二章第五节中提到过如何从数组中提取出最大的k个元素。接着提出了一个更具挑战性的问题:如何在只遍历一次的情况下找到前k大的元素?其中给我留下深刻印象的是,在面试中提出自己的算法时总会被问及其实现的时间复杂度是什么。感到有些不安的是,在面试过程中有时甚至无法清晰地解释自己算法的时间复杂度状况。
第三步:仍然是与之前的问题存在相似之处。面试官表示这是一个他近期遇到的实际挑战。具体来说,在无需对无限长的单向链表进行一次完整的遍历的情况下,并从该链表中以等概率随机选取k个元素作为样本。
总体来说,一面磨来磨去还是把所有的问题都答得差不多了,感觉还好。
一泡尿的工夫时候之后是二面:
这个问题确实有点沮丧……问长度为n的数组,在遍历过程中找到最小值的那个临时变量被更新的期望次数是多少?其实这是一道数学题。为了得出答案我不得不反复计算了几遍最终在面试官的一番提醒下终于找到了正确的解答方法——原来这个问题并没有想象中那么复杂!
探讨进程与线程之间的差异有哪些?此外,请阐述进程间以及线程间的通信机制分别是如何运作的?
探讨进程中断与资源分配的关系;在多态继承中类型转换的作用是什么?
3. 虚拟内存的概念是什么?为什么要引入虚拟内存?当申请的空间超出内存剩余容量时会发生什么
4. 怎样判断无向图中的两个点是连通的,要求写代码。
面对这种情况确实让人感到遗憾,在多次提醒后仍未能达到理想的状态。中间阶段的小问题处理得并不出色,在最终提交的代码质量不高时显得尤为明显。
上周微软工程院的面试到现在还没个结果,
确实让人感到失望,
昨天那场MSRA面试同样不顺利,
毕竟自己的实力还有待提升。
