微软 苏州 两次面试经历
10月22号下午一点 一面 大约 1小时
首先是自我介绍,可以英语可以中文,然后我选了英语自我介绍
然后有一小段英文对话,问我想来微软的理由
接下来是设计一个类中的put方法。
类内部有一个int size属性,然后另个数组,一个是用于存放key的,另一个用于存放value
key需要保持有序
然后如果key相同可以直接覆盖,
index相同但是key不同的话,有元素的value是惰性删除的,所以也可以覆盖
然后我基本用二分写出来了,但是有些细节没写好,有两处错误,
然后代码规范的问题,比如赋值语句的等号前后加上空格等,我平时习惯写完用code format(IDEA系真香)
然后这次是白板网页直接写,没有缩进没有补全,没有高亮,写起来还挺难受的QAQ
最后问了些我想问微软的问题
14:30开始二面 大概80分钟
先自我介绍,自我介绍我还是选了英语,完毕之后,
面试官主动说用中文交流吧hhh
问了些简历里提到的技术和项目,详细介绍了一下,说了些技术可以用到的其他的地方。
然后出了一道练手的,给一个字符串,返回split空格的结果,就是返回字符串数组
空格可能连续多个。
然后我一边写一遍做测试,就自己调了一会调通了,然后面试官给了几个测试用例,比如空字符串,全是空格的,多个空格结尾的字符串。
然后出了新的一个,有十万个元素的数组,还有个数字k,
每个元素有两个属性a,b
然后取k个数,求k个数的属性a的和与属性b的和做差的绝对值最大,即max|sum(a)-sum(b)|
我给出的解法是先每个元素ab元素做差,求出差值的数组,然后排序,头尾各取k个求和,做绝对值比较大小
然后因为这里用到了C++提供的sort,所以面试官问了排序算法有哪些,分别时间复杂度是多少,空间复杂度是多少
我答了包括快排、桶排序(没有答好)、选择、冒泡,然后说完归并,让手写了一下归并(原谅我菜,花了点时间)
然后写完这个之后除了一个给10万个数字的数组,然后想一个方法给他打乱
先提出一个方法,随机生成一个数字index,
然后放在map里面看看有没有出现过,如果出现过了,那么就再取一个随机数
这个的问题就是需要的额外空间还多了个map的空间,
那么考虑直接把新的数组作为map,看那个位置空不空就行了
但是还是不算很好,所以我给的想法是我一个i指针,指着原来的地方,然后随机一个数index,让i位置的数和它交换,然后i++
C++的随机数不熟,所以我切到Python的random了,没几行写完了
最后依旧是反问环节
看在我这么详细的面经上,求求了,给菜鸡一个offer吧QAQ,话说没有连着面是不是凉的概率就大了呀😭