今日面经分享

秋招部分问题记录

最近在参加秋招,前前后后大概面试了十几家公司吧,恰逢今天是10.24程序员节,我将最近面试C/C++被问到的部分问题分享出来,仅做记录。

1.为什么构造函数不能是虚函数。
1.1对象创建时调用构造函数,而虚函数的使用是在运行时通过对象去查找使用那个虚函数的。
1.2每个虚函数都有一个虚函数表,每个虚表都有指向这个虚表的虚指针,虚指针是存在对象的内存空间的,如果构造函数是虚的,就需要用虚指针对调用对应的虚表,但是对象还未被实例化,造成矛盾。

2.STL容器的底层实现。
2.1 vector底层是什么,是数组,初始分配给vector一片连续的内存空间,当发现其空间已经满了的时候,重新申请一个2倍大的空间、将原空间内容拷贝过来,并将原空间内容进行释放,将内存交还给操作系统。Map、Set的底层是红黑树(增加了性质的二叉查找树),List底层为链表,优先队列底层是一个具有优先级的单向队列。Queue是单向队列,Deque是双向队列。

3.什么是稳定的算法?排序算法里那些是不稳定的,那些是稳定的?
3.1指在待排序记录序列中,存在多个具有相同关键字的记录,如果经过排序后这些记录的序算法是稳定的)相对次序保持不变(如在原序列中,ri在rj前面,排完序后ri依然在rj前,那么就称这种排
3.2排序算法中冒泡排序、插入排序、归并排序、基数排序是稳定的。选择排序、快速排序、希尔排序、堆排序不是稳定的。

4.怎么解决hash冲突。
4.1开放地址法,一旦产生冲突就去寻找下一个空的哈希地址,只要散列表够大,空的哈希地址就能找到,公式为:fi(key) = (f(key)+di) MOD m (di=1,2,3,……,m-1) 。
4.2链地址法。每个哈希表节点都有一个next指针,多个哈希表节点可以用next指针构成一个单向链表。(若键值对A,B和键值对C,D的索引值都是2,这时产生冲突,就可以用next指针将A,C节点连接起来)
4.3再哈希法。一旦发生冲突,就用第二个哈希函数。
4.4建立公共溢出区。将哈希表分为基本表和溢出表两部分,凡是和基本表发生冲突的元素一律填入溢出表。

5.某网络的IP地址空间为192.168.5.0/24,采用定长子网划分,子网掩码为255.255.255.248,则该网络的最大子网个数,每个子网内的最大可分配地址个数为各为多少?
6.大小端序的问题,网络七层和它们具体是那些作用。
7.一颗完全二叉树节点为n,则叶子节点为?

8.不能被继承的条件:构造函数和析构函数被设置为私有
{构造函数设置为私有:因为创建子类时需要访问父类的构造函数
析构函数设置为私有:因为销毁子类时需要访问父类的析构函数
所以一个类不能被继承需要将析构函数和构造函数设置为私有的。
但是两个函数被设置为私有后,这样一来这个类在其他地方不能实例化,没有存在的意义。}

9.5种IO模型分别是:阻塞IO模型、非阻塞IO模型、IO复用模型、信号驱动的IO模型和异步IO模型。

10.一个类里面不能同时存在函数名相同的虚函数和静态函数。

以上问题是一部分问题的记录,来自部分央企和中型厂。面试开始大致套路就是介绍自己,介绍项目,回答面试官根据项目内容挑出来的问题,要注重八股的复习,除了自己使用的哪门语言的相关问题,计算机网络、操作系统、数据库相关知识尤为问的较多,在面试前多看看各家公司的面经,可以很有效的缓解焦虑,希望大家都能拿到自己满意的offer。
今日面经分享_第1张图片

你可能感兴趣的:(c,c++,1024程序员节)