前几周还电话面试了某大厂,遗憾挂了,不过题目还是不错的,记录下来。
1 c++基础题
static关键字的作用。
智能指针的原理。
malloc和new的区别。new和malloc的容错保护是如何实现的(就是假如未新建成功要怎么处理)(malloc分配完成后会返回指针,如果指针为null表示分配失败,new的话失败会抛出bad_alloc异常,要捕获异常)。
函数默认参数的默认值在定义中还是声明中。(声明中)
fork和vfork的区别。
本来面试官还想问网络编程,但是我不会。。于是就没问。
2 算法题
如何找到前K个数,时间复杂度?(堆排序,NlogK)
如何找到排序为第N个数,这个N可以是任意的,但是必须保证时间复杂度为O(logn)(参考快排,先以第一个数A为限,排出小于A的部分,和大于A的部分,然后看A的排序是不是N,如果<N,则继续在前半部分找,如果>N则继续在后半部分找,并递归)
如何判断链表是回文的,要求空间复杂度为O(1),时间复杂度为O(N)。(先用快慢指针找到中间结点,然后把后半部分的链表逆过来,就可以同时往两边遍历了)
3 概率题
抛硬币。A抛出先正后负算赢,B连续抛出两次负算赢,问谁赢的概率大?(答案是A)