微软Explore Program面经
背景
岗位名称:Software Engineer - Explore Program(官方介绍为针对非应届低年级学生的项目,比如今年就是2023.9之后毕业,应该不是培养转正那种岗位类型)
时间线:1.18内推 ——> 1.21笔试——>3.14面试通知——>3.21 IC面——>3.23 Leader面
更新:
3.29 网站状态更新为Completed
3.30 收到Data Collection邮件
4.2 Offer邮件
一、投递
ms需要中英文简历,注意简历不要写一些不会的东西上去,因为面试很大部分围绕简历上的项目,比如我的面试中基本没有被提问基础知识(OS, Network, 语言…)
二、笔试
好像三个题,第三个图没做出来,我好废物…但这进面是个玄学,投递早最要紧
开始wait…就当没投过好了,不要问,没结果,等一个多月心很累
三、面试
EP的面试时间很短,每次30min,两个面试官都是准时结束(甚至提前几分钟让你反问那种
1. IC面
第一次面试软件teams不好用,只能临时找了个腾讯文档写,前后耽误了五分钟。虽然面试官表示理解,但还是不太好…
Part 1: 项目
包括项目做什么,遇到的问题,实现思路……反正一定不要写一些自己不清楚的放在介绍里。
比如我的简历中一个项目介绍写了结合模拟退火,但其实最后并没使用这条解决路线,导致说不清楚模拟退火的思路和在项目中的使用(是美团面试的经历…
Part 2: 算法题
Q: 找到最长非连续递增子数组
A: dp[]+pre[],然后逆着pre找
时间不够所以没写完,但是面试官应该觉得我会,问我是不是经常刷算法题…其实这题写起来还是有点麻烦,毕竟要找子数组本身而不是问最大长度
打扰了,我是个傻子,这不是遍历一遍就完事儿了吗,遇到递减就更新为0,要不然就+1,记录全局最大
Part 3: 反问
没问,又对teams没提前调试好向面试官抱歉…时间到
2. Leader面
说是Leader面但其实是和IC面一样…也是项目+代码+反问
Part 1: 项目
不做赘述,和一面的模式基本差不多,问了研究生阶段的研究内容
Part 2: 代码
吸取教训调好teams,共享写代码
- BST的性质(左侧小于等于,右侧大于;中序遍历有序),查找复杂度(O(log2n))
- BST搜索目标值所在节点(递归写了一个)
- BST搜索目标值的最接近的值
(1) 先说中序遍历(可以提前结束,但还是最差还是O(n))
(2) 最接近的数值一定在查找路径上…如果hit直接返回,否则在树上对target进行查找并更新nearestVal
p.s. 一是全局变量虽然在leetcode中好用,但是工程中要考虑是不是多处调用等问题;二是这代码其实不需要运行,思路在注解中写清楚
// int nearestVal = INT_MAX; // 面试官提醒:别用全局变量,否则不能多处调用 ⇒ 引用传递
int searchNearest(TreeNode* root, int target, int& nearestVal){
if(root==NULL)
return -1;
if(root->val == target)
return root->val;
// 判断,更新最近值
if(abs(root->val-target) < abs(nearestVal - target)){
nearestVal = root->val;
}
// 递归左子树
if(root->val >= target){
return searchNearest(root->left, target);
}
// 递归右子树
else {
return searchNearest(root->right, target);
}
return nearestVal;
}
Part 3: 反问
Q: 面试官对面试的建议
A: 项目介绍有点沉闷,抓不住重点(因为只求不被难住就好,但这点确实是沟通能力的体现,非常有道理,几次面试大概知道了会被问到哪些,回头好好整理准备
总结
微软面试就是那种…不好不坏的体验,30分钟的时长,还有十分钟写代码,基本考察不到知识储备,而是重点考察解决问题和解释思路的能力,要组织好语言,不求最优解,要体现思考,maybe…
最后,Wish me good luck.