微软面试题总结

 

一面:

1. 反转单链表

2. 剑指offer 第一题 二维数组查找(二分优化)

3. leetcode1314

 

二面:

一个逗号分割的csv文件 转化成二维矩阵

考虑各种情况(双引号里有双引号,一行没有正常结束等) 状态机

 

三面:

文件1有两列,p和k string 类型,用\t隔开

文件2有两列,p1,p2,,,,pn和k1,k2,,,,kn 每列多个字符串用,隔开,两列用\t隔开

输出文件2中包含文件1行的所有行   哈希建索引

 

四面:

项目问题

剑指offer二叉树下一个节点,测试场景

T级别文件,M级别内存空间,全排序


 

一面

  1. 自我介绍

  2. 你觉得情感分析方向的难点在哪

  3. 介绍一下数学建模的工作

  4. 写题:扑克牌打乱顺序,要求空间O(1)

  5. 了解动态链接库和静态链接库吗?了解虚函数么?

  6. 假如我有一个exe,这个exe是根据一个cpp文件得到的,cpp文件里面有一个main函数,main里面有一句print函数,main函数之前会有一些变量,说一下从我的鼠标点击运行开始到这个main的return之后的全部过程。

  7. 写题:链表深拷贝(可能有环,可能无环)

  8. 反问

二面:

  1. 自我介绍(英文)

  2. 你的project中代码量多少(英文)

  3. 写题:给定一个sorted array,整型,要求输出缺失的数字。比如输入[5,6,7,11,13],输出8,9,10,12

  4. 反问

三面:

  1. 自我介绍

  2. 聊项目

  3. 说一个机器学习算法吧(说了决策树)说一下决策树的构建过程

  4. 做题:剑指offer 46,输出是所有的可生成的字符串,但是a是对应的1,所以要考虑字符串以0开头和连续两个0的情况

  5. 做题:判断一个输入字符串是不是有效的ipv4地址(要考虑很多情况返回False的,c++还有大数问题)

  6. 设计:假设我现在要设计一个扫雷程序,你觉得你要怎么设计?就是假如你要设计类要设计几个,分别有什么功能?

  7. 反问

  8. 你随便说一分钟英语吧,说什么都行

AA面

  1. 自我介绍(英文)

  2. 聊项目,也没深入

  3. 你比较看重公司的哪些性质

  4. 你对于backend的工作有什么倾向

  5. 你的strength,weakness,举个例子

  6. 你觉得你在team里面期待1~3年有什么收获

  7. 你的idea公司

  8. 写一个lock/mutex

  9. 两个sorted array,写找第K大的数,分析复杂度

  10. 反问

 

 

1)中序遍历二叉树非递归实现

2)整型数组中找出所有目标和三元组

不得不说微软的面试真的太舒服了,表白面试官小姐姐!超级无敌温柔,声音也太好听了

 

1)二叉树的最近公共祖先


 

一面:自我介绍,问项目,问python的一些知识,装饰器,import等,出题,二叉搜索树中求大于target的第一个数,用了多种解法做

 

中序遍历,发现当前节点大于target就返回,(递归,或者非递归)

 

 

二面:自我介绍,问项目,代码实现矩阵乘,GEMM中的一些优化,算法题:最大数组和

 

做题

LeetCode 124. 二叉树中的最大路径和

设计测试用例

 

有n个二维平面上的点和距离d,将它们分成k组。

若两点间的距离小于等于d,则这两个点在一组;如果点A和点B在一组,点B和点C在一组,则点A和点C在一组。

算法返回每个点所在组的编号(0..k-1)

 

第一道题:字符串流,判断是否是合法的IPV4地址

第二道题:数组中出现次数超过一半的数字(剑指offer原题)


 

一面的话是自我介绍然后面试官对其中哪个点感兴趣的话会打断一下详细问一下

然后开始做题, 题目是找到一组柱状图中最大矩形的面积

我先说了一个思路把面试官绕了进去,然后他说好像可行,那你写代码吧

我代码写到最后一个栈操作的时候面试官说,我觉得你这个思路有反例,好像不行

我:嗷,那就分治法吧balabalbala。仿佛再一次把他绕了进去

他:好像确实能行,就是有点麻烦

我:嗷嗷

 

然后邮件通知一面过了,第二天下午13:00二面lead面,如果二面通过就15:00老板面,如果二面通不过就没力

我:嗷

lead面先自我介绍然后开白板做题目
第一题是数字三角形找最大和路径
动态规划写的
第二题是二叉树中找两个节点的最近公共祖先节点
用前序遍历然后对比找最后一个相同的节点
 

三面AA面

这里有个小插曲,HR哥哥忘了给我发新的面试链接,吓到了我幼小的心灵(不是
先问个人毕业后规划以及方向
然后 开屏幕共享写代码题,这次不是发网页让我写代码了我凑,是直接让你开本地IDE啊啊啊啊啊啊啊啊
我开了vscode用c写了查找给定二叉树中的特定节点中序遍历后的下一个节点
先讲思路,思路出错的话面试官会和你一起梳理,一半思路讲得清楚另一半思路讲错了(日)
然后梳理完觉得没问题就让你写
我vscode的c/cpp配置有问题…导致了逻辑写完没法测试🤦‍♀️啊哈哈

然后面试官让我面试结束后把程序和测试程序邮件发她
然后问下个题目:如果你是软件工程师,有顾客反应问题说某个web的load速度太慢等待时间太长,你觉得可能是什么问题导致,怎么判断,怎么改进?
我:?
我:不是,等等,不是看了简历后默认我非cs专业不会问特别技术的问题的么
乱答,凉了呢

 



4.22 苏州onsite 平行面
一面
面试官是个很温柔的小姐姐。
1. 先简单的自我介绍

2. 直接开始写题--最大子序列和(Leetcode原题)之前有做过
所以10min左右写完,在小姐姐的引导下开始考虑一些边界情况:讨论过程中
有涉及到防御式编程的一些技巧类似断言和错误处理(当时忘了提barricade好像)。
第二道题--最大序列乘积(依旧原题):和上一道题一样用动态规划,很快能注意到和上道题的区别所在但是花了很久没有找出解决办法
不过小姐姐一直在循循善诱最后勉强用两个dp方程做了出来。

二面

1. 依旧自我介绍
2. 介绍项目(需求、分工、challenge、如何解决challenge)
3. 写题
反转单链表(双指针就ok,可恶的我最后返回错了指针...)
然后面试官就着我的错误问了关于内存泄漏的问题:对象在堆上分配还是栈上?/会不会内存泄漏?(虽然我是用java写的)
然后开始写测试用例:考虑一下分支覆盖和环形链表就行。
顺着问了环形链表怎么解决:快慢指针
然后问可以边反转边检测环形链表(未答出)
4. 开始问了我感兴趣的业务领域
结束了起身准备走的时候又问我对操作系统感不感兴趣
然后又问了10min左右操作系统的基础问题:
内核态和用户态的区别?
什么时候会陷入内核态?
c访问空指针会不会陷入内核态?

面完等了一个小时以为还会有三面,结果告诉我leader下班了,约了第二天的线上面试。
回南京的路上收到了邮件链接。

4.23上午 线上 leader面
脸比较黑的我遇到了全英面试。
1. self-intro
2. introduce your project
3. From the perspective of tech, what is you strength?
4. 第三个问题我答了自己会比较在意代码质量
5. What do you think is important for high quality of you code?
6. If you receive the code which is not live up to the standards you mentioned, what will you do?
7. 开始写题:
given a log file, scrub all the ip addresses from it.
写个函数就是删掉一个字符串中的所有IP地址。

面完一身冷汗...
过了一个小时收到hr电话,说要加试,leader拿捏不准我的情况...问下午两点有没有时间?
无奈之后有课...约了4.25上午

4.25上午 线上 leader面

1. 问了一些琐碎的信息(学校、课程、之前做的一些学生工作)
2. 直接写题:
通配符模式的匹配(Leetcode原题,做过...不过最优的解法忘了记得当时做的时候看了好久才看懂dp的做法)
面试的时候还是通过遍历来做的,一开始还没用递归。
后来面试官去拿电源去了让我再想一下特殊情况, 最后提出来用递归来处理特殊的匹配情况。
面试官这才说:这就对了,到点子上了。
 

一面(3.19):

一面是在中午,面试官是个很温柔的哥哥?,感觉很年轻。因为一些原因面试官上线迟到了20分钟,所以整个过程很紧凑,惯例做题:

1、单向链表交换奇偶节点

比较简单,考虑了一些边界情况,还特意美化了一下代码hhh,面试官看了一下就过了

2、TopK问题,没有时间了就不用写代码,口述思路

从简单到复杂:先说了冒泡排序和插入排序,随口说时间复杂度是O(kN);然后说堆排序和快速排序;最后扯了并行计算。

说完后面试官问了TopK快排的时间复杂度,我写了算式,算到最后一步脑子抽筋等比数列求和都没算出来,紧张的不行,面试官安慰我说没关系,还跟我说其实有公式(这两天上课我才知道有主定理这个东西,后悔ads去年没选上/捂脸)

最后的最后聊了会儿天,没有怎么介绍微软,倒是给了我一些读研和工作的建议(我以为挂了结果过了)

Lead面(3.26):

Lead面据说是最终工作的组的老板,感觉很耐心很专业,惯例做题:

1、最大子序列和

非常非常经典的题,如实说自己做过,10分钟写完了

2、取整问题

例如3.14取整到3.1,3.15取整到3.2,3.25取整到3.2,3.2500001取整3.3。先说规则以及为什么要这么取整。然后码代码,给float和取整位数n。

一开始说float乘10幂次判断,两个问题是超过范围以及float不能比较,超过范围很快说了解决思路,不能比较面试官说这里忽略这个问题。最后写的时候有个小技巧最高位进位不处理,面试官指出了这个问题,我说明了我的思路(不处理进位也没关系hhh心机)。然后边界情况也是照例考虑。

两道题做完才30分钟,面试官说太快了哈哈就问我有什么问题,然后聊了研究生本科生的差异之类的,最后40分钟面试结束。

 

 

 

 

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值