小米2019笔面复盘(模拟)

小米2019笔面复盘(模拟)

写在前面:这里只摘出一些比较有代表性的题目

小米2019笔面复盘(模拟)
由于好久没用C++,特性有点遗忘


小米2019笔面复盘(模拟)
这里附上一个牛客老哥的图
小米2019笔面复盘(模拟)
快排的数据最好的情况,是每次二分的时候,基准点都是刚好是中位数字。此时的时间复杂度也只是O(N * logN)(总之树的深度是logN,然后每层树的宽度都不超过N,所以取了一个上届)。最差的情况有点难以描述,和最好情况有点类似,但是区别在于,基准点不只是中位数字,中位数两边的数字刚好是整体逆序的。此时每个数都需要进行交换,需要交换 n+(n-1)+(n-2)+…+1 次,因此此时时间复杂度降为O(N*N)。

但是在实际实验中,很少遇到这种最差的情况,因此快排很少有时间很久的情况。


小米2019笔面复盘(模拟)
A选项实际是正确的,具体如这个图所示,摘自guide哥的github总结,可以搜下javaguide,可以看到线程不占有堆空间,而且栈帧也是独立的,因此A选项正确。

小米2019笔面复盘(模拟)
D选项,协程由用户态操控,意思就是说交给程序员来执行,更加*和定制化。


小米2019笔面复盘(模拟)


18题实际上我是用的排除法,对象的内存肯定是在堆中(当然是Java的知识,并不是C++的知识)
小米2019笔面复盘(模拟)


小米2019笔面复盘(模拟)
最后一道题,正确接法是,假设有 k 个任务,使得 k*m+(t-m) = n。其中 t 是 2 台,m是一个小于2但是大于等于1的数字,因此只能等于1。

k*1 + 1 = 4。解得答案是 3。

意思就是,其中3台机器用来做三个任务,然后另外一台机器来轮转分配任务,但是一次只能完成一个任务—— 同时可以执行三个任务。