今天接到微软电话面试,竟然是个有点口吃的面试官...
感觉微软面试确实不太一样,问的问题还是比较新颖比较有深度的。项目经历方面就从嵌入式项目一直问到并行计算。这是第一个关心MPI比较多的面试官,问了比较多MPI如何使用的问题,包括一个MPI程序架构大概是怎样,怎样用gather等等。然后还问了一些操作系统的问题,包括进程线程的区别,文件系统的组成等和我项目经历有关的问题。
接下来是两道C++和算法的问题:
1. 构造函数和拷贝构造函数有什么区别,实现一个变长数组的类需要哪些非功能性的函数(有点像STL中的vector)
有很多要注意的地方,都是在面试官的大量提醒下才答出来的,以下是一些要注意的地方:
首先,要有构造函数和析构函数,分别要做什么工作。
其次,要有拷贝构造函数!拷贝构造函数要能够判断拷贝的对象为空的情况,还要避免a=a即把一个对象赋给它本身的情况发生。
2. 给N个互不相等的数,给定k,要求找出所有的a+b=k的数对
开始我说先排序再查找,方法时间复杂度大概是O(nlgn)+O(n)(查找的时间复杂度是不是O(n)有待验证)
后来面试官引导我说有没有只遍历一次然后用O(1)的时间复杂度去查找,想来想去,觉得只能用哈希了,可是又不知道该怎么哈 希。不过面试官也没说要怎样哈希,好像他的意思只是要我这种思想...
然后面试官说午饭后发一道代码题到我邮箱,给我一个小时来写代码,通过邮件回复给他。
最后我关心了一下整个面试周期,面试官介绍说如果他所在的team觉得我合适的话会最多再面一次,如果觉得我更合适其它team,则会推荐我到其它team里再重新电话面试,周期可能会稍长。顺便了解了一下面试官所在的Team在做什么,他说是优化windows内核性能(听起来十分nice~)
另附代码题:
一个TXT文件,每一行代表一个树的节点,格式为:
“/Node1/Node2/Num3/.../NodeN”,其中NodeN的格式为{KeyN, ValueN},Key和Value都是32位十进制的整形数字。如/{0, 100}/{2, 200}/{4, 400}
写程序读取该文件,并建立树的数据结构。注意:
1. 要验证树是不是合法的。
2. 如没有时间按,文件读取函数可以省略,可以用getline。
表示各种看不懂...遂回了邮件去问...才得到以下答复(一来一去就占用了20分钟)
按照节点的Key1来建立树啊。比如:
{0,1}
{0,1}/{2,100}
{0,1}/{3,200}
{0,1}/{2,100}/{4,300}
建立的树就是
0
|_3
|_2
|_4
代码写的有点乱,还过了提交的时间,都没有debug就交上去了...不知道会不会被鄙视