MS onsite 归来,新鲜面经,巨长,顺便求祝福# JobHunting - 待字闺中
f*i
1 楼
今天在redmond面试,一共见了6个人,5轮technical interview,一轮PM interview.
时间从早上8点到下午4点半。。。累死,没有签什么保密协议,所以一回来就发面经回
报版上,顺便求祝福。
第一轮: 老中,题目很简单,一个数组,有正有负,求最大连续和,这道题直接用经
典的O(n)就做出来了,然后问test cases。 多谢同胞,有了个好的开始。
第二轮:一个美国人,问两个string 是否是 anagram, 附加条件是abc = a c b,
就是允许空格存在。也不难,三种方法,排序,hash table,还有质数相乘。质数相乘
是看版上牛人的答案,这个很快,而且不要extra space, impressive了他一下。
第三轮:老印,据说是这个组里最nice的老印,是90分钟的lunch interview,问了
string 中reverse word, 就是把how are you => you are how,reverse+reverse,
没有什么tricky的,写程序的时候有点麻烦,不过没有出错。
第四轮:老印,这个人是最tough的,一个人问了我三个问题,而且都超级难。
1. 游戏算法,给定一个N*N格的板块,往上面放不规则的element。
1.1, 如何表达这个板块,用什么数据结构来表达element,这个element有
可能是任何形状,like “—”,“X”,“Y”,“田”(参考俄罗斯方块)
1.2, 如何判断这个element可以放在某个cell里面,放在cell的条件是这个
element可以覆盖这个cell。(element之间不能重叠)。
1.3, 象俄罗斯方块一样,这个element可以rotate四个角度,问如何判断
rotate后可以放入。
很恶心吧,不过这个只是他给我的第一题,要我在20分钟内给出算法,并写出
pseudocode,我看看版上有没有人给出一个好的算法,我的那个实在是太耗时间了,就
不献丑了。
2. 用一个array来实现queue, 只给了5分钟
3. 这个是最恶心的,题目很简单,输入一个integer,12345,output是
5
4
3
2
1
这个不难,我是用java回答的
While(num>0){
System.out.println(num%10);
Num=num/10;
}
恶心的是,他问我num/10如果有小数点怎么办,我一下子楞住了,我说一个int 除以一
个int返回的一定是一个int,他硬要说如果返回是double怎么办,我一下子反应不过来
,因为平时没有考虑这个问题,而且如果没有自找麻烦在前面加double是不可能出现的
,所以有半分钟没有说话,然后他很不耐烦地告诉我是num = (num-num%10)/10.
好吧算你狠,这个我确实没有想到。。。。。
第5轮,和PM聊天,聊了40分钟,没有技术问题,就是了解一下这个group做的东西,比
较放松。
第6轮,又出了妖蛾子了,本来约好的interviewer有事情来不了,临时加了一个老美,
人很nice,问了一个链表,1->2->3->4->5, 每两个交换,2->1->4->3->5,如果单数
情况返回最后一个。要求recursive和iterative两种方法,然后问哪个更好一点,一开
始写的时候犯了一个小错误,在提醒之后写出来了。这个要求是只能指针交换,不能交
换2 和1之间的数据,要通过链表的next来指向。
就是这样了,顺便说一句,ms campus好大啊,8点我在building 111,9点在building
XX,10点15在building YY,11点半在 building XX,2点在building XX, 下午又在
building YY,最后到building 111写回单,赶场了一天。
好希望可以拿到offer。。。。希望一切顺利。
时间从早上8点到下午4点半。。。累死,没有签什么保密协议,所以一回来就发面经回
报版上,顺便求祝福。
第一轮: 老中,题目很简单,一个数组,有正有负,求最大连续和,这道题直接用经
典的O(n)就做出来了,然后问test cases。 多谢同胞,有了个好的开始。
第二轮:一个美国人,问两个string 是否是 anagram, 附加条件是abc = a c b,
就是允许空格存在。也不难,三种方法,排序,hash table,还有质数相乘。质数相乘
是看版上牛人的答案,这个很快,而且不要extra space, impressive了他一下。
第三轮:老印,据说是这个组里最nice的老印,是90分钟的lunch interview,问了
string 中reverse word, 就是把how are you => you are how,reverse+reverse,
没有什么tricky的,写程序的时候有点麻烦,不过没有出错。
第四轮:老印,这个人是最tough的,一个人问了我三个问题,而且都超级难。
1. 游戏算法,给定一个N*N格的板块,往上面放不规则的element。
1.1, 如何表达这个板块,用什么数据结构来表达element,这个element有
可能是任何形状,like “—”,“X”,“Y”,“田”(参考俄罗斯方块)
1.2, 如何判断这个element可以放在某个cell里面,放在cell的条件是这个
element可以覆盖这个cell。(element之间不能重叠)。
1.3, 象俄罗斯方块一样,这个element可以rotate四个角度,问如何判断
rotate后可以放入。
很恶心吧,不过这个只是他给我的第一题,要我在20分钟内给出算法,并写出
pseudocode,我看看版上有没有人给出一个好的算法,我的那个实在是太耗时间了,就
不献丑了。
2. 用一个array来实现queue, 只给了5分钟
3. 这个是最恶心的,题目很简单,输入一个integer,12345,output是
5
4
3
2
1
这个不难,我是用java回答的
While(num>0){
System.out.println(num%10);
Num=num/10;
}
恶心的是,他问我num/10如果有小数点怎么办,我一下子楞住了,我说一个int 除以一
个int返回的一定是一个int,他硬要说如果返回是double怎么办,我一下子反应不过来
,因为平时没有考虑这个问题,而且如果没有自找麻烦在前面加double是不可能出现的
,所以有半分钟没有说话,然后他很不耐烦地告诉我是num = (num-num%10)/10.
好吧算你狠,这个我确实没有想到。。。。。
第5轮,和PM聊天,聊了40分钟,没有技术问题,就是了解一下这个group做的东西,比
较放松。
第6轮,又出了妖蛾子了,本来约好的interviewer有事情来不了,临时加了一个老美,
人很nice,问了一个链表,1->2->3->4->5, 每两个交换,2->1->4->3->5,如果单数
情况返回最后一个。要求recursive和iterative两种方法,然后问哪个更好一点,一开
始写的时候犯了一个小错误,在提醒之后写出来了。这个要求是只能指针交换,不能交
换2 和1之间的数据,要通过链表的next来指向。
就是这样了,顺便说一句,ms campus好大啊,8点我在building 111,9点在building
XX,10点15在building YY,11点半在 building XX,2点在building XX, 下午又在
building YY,最后到building 111写回单,赶场了一天。
好希望可以拿到offer。。。。希望一切顺利。