3.2 模拟面试

1,用new分配对象失败后有什么后果

答:如果调用失败的话会首先访问用户实现的 set_new_handle函数,一般该函数是去释放些无用的内存,然后再去尝试申请,然后反复调用该函数直到申请成功,主要还是看用户实现的函数怎么样

然后退出的话会抛出bad_alloc异常,异常会直接让程序崩溃,可以选择在 new (nothrow) 这样就不会抛出异常了,或者使用 try catch捕获异常

2访问一个私有成员函数 有什么方法

答:使用友元,友元类和友元函数都可以去访问类的私有属性,友元不可以被继承,友元一般少用,因为会破坏封装性

3 static修饰类成员 访问是如何访问的 必须实例化吗

答:不一定要实例化,因为static申明的变量在全局变量区,是类所有的,所有对象共有这个内存空间,所以可以直接通过类访问,也可以实例化区访问

4怎么样用两个队列实现一个栈

答:呃,不是我说,这个官方做法真滴蠢,就是把如果push的话就一直push进当前队列,如果要取当前的值,就只要把前面所有的都装进另一个队列,留下最后一个,然后pop就可以了

另一个问题就是两个栈实现一个队列,将一个栈实现出一个实现进,然后如果出的那个队列当前为空的话,那么将进队列的所有数都放入出队列中,然后进行操作,复杂度O(n)

5 vector底层是怎么实现的?

答:核心要点主要是vector所谓的动态数组怎么实现的,vector底层 有三个标志       元素起始位     元素末尾位     内存末尾位   ,如果元素满了容量的话,那么就会扩充内存容量,是之前的

两倍,要经历三个步骤,  重新构建内存,    把之前的值赋值过来       销毁之前的内存

6 哈希表怎么实现?哈希冲突解决办法

答:哈希表其实也就是一种映射关系,用哈希函数产生出一个值,然后去映射,哈希函数通常都是%的值,有开放地址法,链地址法,再哈希法等等

7 构造函数可不可以是虚函数?析构函数呢

答:构造函数不可以是虚函数,因为虚函数调用需要有虚函数指针,但是虚函数指针存在于具体对象中,产生对象需要构造函数,所以矛盾

析构函数可以是虚函数,一般用于多态,父类指针指向子类,如果调用析构,那么就会调用的其实是子类的析构函数,子类析构函数默认会调用父类析构函数达到一起释放内存,如果不是虚函数,那么只会

释放掉父类部分

 8 两个链表有公共交点,如何找到一个公共交点?

 

答:

第一种:类似快慢指针求入口的思想,p1,p2,指针同时移动,p1走完后从p2链表头开始走,p2走完后从p1链表头开始走,迟早会相遇,核心思想两个指针都走一个一样的路就会相遇

也就是第一个指针走的       A链表不重合部分+重合部分+B链表不重合部分,    第二个指针走的      B链表不重合部分+重合部分+A链表不重合部分

第二种:使用unorder_map  遍历第一个链表所有,保存地址,然后遍历第二个链表,如果出现了代表是当前位置

9,给定字符串 S,找出最长重复子串的长度

答:我想的做法是预处理出哈希,然后n2遍历所有区间,还没去写,没得到验证

网友说他们想的二分 和  DP做法

总结:总的来说今天,2,4没答出来,2的话emmmm,一时脑抽忘了,4,e没想到官方做法都这么蠢,答是答得上来,只是没想到正解就是这样

猜你喜欢

转载自www.cnblogs.com/Lis-/p/12399017.html
3.2
今日推荐