简单说下自己的情况:本人普通小硕一枚,本211/硕985,非科班,自学一年Java, 没有项目,平时只有刷题,有幸在牛客上看到了内推,感谢这位学长,让我感受了一波微软的面试。提前一周就约好了面试时间,连续的三轮面试(下午两点一直到五点,真心累)。
一面
一面是个工程师小哥哥,非常Nice,很会鼓励人,不会的也会讲解,一直说非科班自学还能这样不错了,真是好感谢他!
- 一来就请做个英文的自我介绍
请第一要提前准备,平时练练口语最好 - 介绍一下项目
(因为我没项目,就问了我的论文)
首先具体讲一下论文做什么,是不是一个人完成的?会涉及到哪些方法(爬数据什么的) - 讲一下GC
- 了解多线程吗?Java中创建线程的方法,callable和runnable有什么区别(callable有返回值)。
- 设计模式有了解多少
- 白板写算法(二叉树返回每层的最大值-层次遍历)
二面
二面是个小姐姐
- 也是自我介绍
- 问论文还有比赛
- 看我也没项目就问计算机基础,TCP/IP有哪几层,涉及到哪些协议。
- 线程和进程的区别,不单单是定义
- 进程是怎么通信的?(我记着明明有共享内存的方式来着,小姐姐说并没有,看来得好好理解)
- 乐观锁,CAS机制,java中有哪些地方用到CAS机制
- 线程死锁,死锁的四个必要条件并解释
- 白板写算法
第一道是链表复制,可能回答的和答案一样?还是回答的太快,小姐姐问是不是看过这道题(尴尬,如实回答)然后就有写了第二道题 第二道是找二叉树的最近公共祖先(艰难地写了出来,LeetCode也有原题)
ps: 偷偷地想问一下是不是同性相斥,感觉小姐姐不太喜欢我。
三面
三面看得出来是个大boss,本来我以为可能就是HR面,聊聊人生完了,结果还是技术占多。 依然是看我没项目,然后硬想往那上面问,他们真的不要我这种没经验的吗,我太难了,又要科研又要学java, 计算机基础,自己去实现项目的时间只能往后搁置了,后面一定要去实现一个什么项目,才能和面试官聊起来。
- 因为本科是做硬件的,就聊我本科做硬件项目的事情,主要看怎么团队合作,遇到什么问题,怎么解决。
- 对软件开发有什么想法,你认为的软件开发应该有哪些步骤?(我真的是一点都没接触过,然后就自己YY了,各位肯定比我优秀能答好)
- 设计一个算法,一个100GB的文件,4GB的内存, 怎么把100GB的文件排好序存到另外一个文件中去。可以利用外存的。(我答的分组归并排序)然后又问你认为这其中最消耗的是哪里? 自然是IO磁盘读取压力大,哪又怎么优化呢?(我扯到了多路数去降低数的高度,可是我感觉一直没get到面试官提示的哪个点,这个问题就这样结束了,后来知道原来就是个外部排序-多路归并而已)
- 面试官又给了一个算法题(判断String是否符合科学计数法,我记得好像剑指上有)时间不够了就只说了思路,微软还是蛮看重时间的。
总结:人生第一次三面,微软很会尽力挖你的知识点,算法题也会做些提示去引导你,面试官都很好的,感谢给我内推机会的北大学长大佬!还有各位面试官,这么有耐心,真的非常好!虽然就这样凉了(我真的是为什么手残投了上海岗....)