【c++面试总结】

前几周还电话面试了某大厂,遗憾挂了,不过题目还是不错的,记录下来。

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)

原文地址:https://www.cnblogs.com/corineru/p/11266893.html