当前位置: 代码迷 >> 综合 >> 不是很常规的微软面试题
  详细解决方案

不是很常规的微软面试题

热度:85   发布时间:2024-03-09 13:20:31.0

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了,没几行写完了

最后依旧是反问环节

 

  相关解决方案