面试常考知识点总结——面试必看

时间:2022-07-24
本文章向大家介绍面试常考知识点总结——面试必看,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1.计算机网络:ISO标准的7层模型都是哪些?为什么要分层?

答: 7层:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层 4层:应用层、传输层、网络层、链路层 为什么分层: ①多层之间相互独立,灵活性好 ②结构上可分割开来,易于实现和维护 ③促进标准化工作

2.STL库的容器都有哪些?vector是如何动态开辟内存?如何申请两个空间的容器?

答: (1) vector:数组 list:双向链表 deque:一个中央控制器和多个缓冲队列,就是多个堆,每个堆存储一些元素,各个堆之间又用指针相连。 stack:底层用list或deque实现–不用vector的原因是vector有容量限制,扩容耗时。 queue:底层实现也是list或deque。 priority_queue:底层有vector实现,堆heap为规则来管理底层容器的实现。 set、munltiset、map、multimap;底层为红黑树。 (2)vector定义时不分配空间,第一次插入元素分配一个空间,之后空间不够则进行扩容,扩容的倍数由编译器决定。 (3)resize()可以自定义空间大小。

list的find()函数的时间复杂度是多少?

答:list底层实现是双向链表,查找时间复杂度为O(N)。

hashmap的底层是用什么实现的?哈希表是如何映射的?怎么解决哈希冲突?哈希表查询时的时间复杂度为多少?

答:数组+链表,主干为数组,当某个节点出现多次时,则用链表组织这些相等的节点。 首先可以在O(1)时间复杂度下在数组中找指定元素,找到之后还需要判断是否有重复元素,如果有,则需要继续遍历链表。 解决哈希冲突的方法:1.再定址法2.再哈希法3.链地址法 时间复杂度:普通O(1)最差O(N)

Mysql事务的四个特点

答:原子性、稳定性、隔离性、可靠性

虚函数?C++中的多态?组合和继承的区别?

答:虚函数是指经过virtual关键字修饰的函数,其实现依赖于虚函数表,虚函数表中存有函数的入口地址。 多态是基于虚函数的一种功能,可以做到动态的调用基类或者派生类的函数。 继承强调的是is-a关系,是指子类继承父类的特征和行为。 组合强调的是has-a关系,是通过对现有对象进行拼装形成更复杂的功能。

三次握手的过程?每一次都携带什么数据?为什么要给确认报文中的ack值加1,为什么不是2,3,4?

答(1)①客户端请求建立连接,发送序列号②服务端确认连接,发送确认报文,并发送自己的序列号③客户端发送确认报文 (2)如果在建立连接的过程中,那么这仅仅是一个规定,三次握手的协议也就是如此说明的。在数据收发的过程中,确认号也表示了在次字节之前的数据已经收到的确认,可以放心发送后边的数据,加1可以确认下一次发送应该起始的位置。

四次挥手最后主动断开方为什么要等待2MSL?TIME_WAIT状态是什么?

答:(1)保证安全的断开连接,假设被动断开方第一次发送的断开请求报文在网络滞留了,收不到确认又重新发了一次,第二次收到了确认则连接断开,如果此时滞留的报文又到达了,此时主动断开方有可能已经重新建立TCP连接,就会收到一个错误的报文 (2)保证迟到的报文被丢弃。

如何判断一个满二叉树?

答:(1)计算深度 (2)计算叶子节点数 (3)判断深度和叶子节点数满足满二叉树的关系

进程间通信方式有哪些?使用同一块共享内存的进程使用的虚拟地址相同吗?为什么?

答:(1)信号、信号量、共享内存、消息队列、管道、套接字 (2)有可能相同有可能不同,共享内存实际上已相当于文件,对于共享内存的文件映射到内存,如果两个进程完全相同的话,虚拟地址就是相同的,比如fork出来的进程和父进程访问同一共享内存虚拟地址就可能相同。而进程如果有一点细微的不同,那么虚拟地址就会有差异。

socketpair和管道的区别有哪些?

答:管道是半双工、socket是全双工

虚拟地址空间如何映射到物理地址空间?

答:虚拟地址空间通过页表映射到物理内存,以32位操作系统为例,首先通过前10位确定其在哪一个页表,中间10位确定再也表中的哪一页,最后12位给定该地址在这一页的偏移量即可定位物理内存。

32位的寻址范围?内存?

答:寻址范围是0~4G 内存为4G

TCP和UDP的区别?如何处理TCP粘包问题?

答:TCP是面向连接的可靠的流式服务 UDP是无连接的不可靠的数据包服务 粘包问题的解决方法: ①暴力解决,每次需要发数据时再建立TCP连接,发送结束就断开连接。 ②定长数据结构,如果规定每次发送的数据报长度是一定的,那么接收方每次读取固定长度的报文即可。 ③不定长数据结构:多数情况下使用不定长数据结构,第一种方法可以规定一个特殊的符号作为结束符,每当遇到这个结束符才认为该报文接收结束,但是该方法只适用于字符数据,因为对其他二进制数据无法确定是结束符还是要发送的数据;第二种方法是,在固定的偏移位置写入报文长度,接收方每次读取先获取到报文的长度,再接收该长度大小的报文即可。

HTTP协议的报头是什么?请求方法?

答:HTTP协议的报头是用来区分报文的类型,比如客户端发送一个请求报文,那么该报文是请求报文就要在报头中说明,是响应报文也要在报头中说明。 GET/POST

static有什么用途?

  • 函数体static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值
  • 在模板内的static全局变量可以被函数内所有函数访问,但不能模板外其他函数访问
  • 在模板内的static函数只可被这一模块内的其他函数调用,这个函数的适用范围被限制在声明他的模板内
  • 在类中static成员变量属于整个类所拥有,对象的所有对象只有一份复制
  • 在类中static成员函数属于整个类所拥有,这个函数不接收this指针,因而只能访问类的static成员变量

引用和指针有什么区别?

引用时别名;指针是地址

  • 程序为指针变量分配内存区域,而不为引用分配内存区域。
  • 指针使用时要在前加 * ,引用可以直接使用。
  • 引用在定义时就被初始化,之后无法改变;指针可以发生改变。 即引用的对象不能改变,指针的对象可以改变。
  • 没有空引用,但有空指针。这使得使用引用的代码效率比使用指针的更高。因为在使用引用之前不需要测试它的合法性。相反,指针则应该总是被测试,防止其为空。
  • 对引用使用“sizeof”得到的是变量的大小,对指针使用“sizeof”得到的是变量的地址的大小。
  • 理论上指针的级数没有限制,但引用只有一级。即不存在引用的引用,但可以有指针的指针。
int **p //合法
int &&p //非法
  • ++引用与++指针的效果不一样。 例如就++操作而言,对引用的操作直接反应到所指向的对象,而不是改变指向;而对指针的操作,会使指针指向下一个对象,而不是改变所指对象的内容。

描述实时系统的基本特性

  • 实时操作系统是保证在一定时间限制内完成特定功能的操作系统。

基本特性:实时性、有线程优先级、多种中断级别

全局变量和局部变量在内存中是否有区别?如果有,是什么区别?

有区别。

  • 全局变量保存在内存的全局存储区,占用静态的存储单元;
  • 局部变量保存在栈中,只有在所在函数被调用时才动态地为变量分配存储单元。

什么是平衡二叉树?

平衡树(BT) 指的是,任意节点的子树的高度差都小于等于1。

堆栈溢出一般是什么原因导致的?

  1. 函数调用层次太深。函数递归调用时,系统要在栈中不断保存函数调用时的现场和产生的变量,如果递归调用太深,就会造成栈溢出,这时递归无法返回。再有,当函数调用层次过深时也可能导致栈无法容纳这些调用的返回地址而造成栈溢出。
  2. 动态申请空间使用之后没有释放。由于C语言中没有垃圾资源自动回收机制,因此,需要程序主动释放已经不再使用的动态地址空间。申请的动态空间使用的是堆空间,动态空间使用不会造成堆溢出。
  3. 数组访问越界。C语言没有提供数组下标越界检查,如果在程序中出现数组下标访问超出数组范围,在运行过程中可能会内存访问错误。
  4. 指针非法访问。指针保存了一个非法的地址,通过这样的指针访问所指向的地址时会产生内存访问错误。

什么函数不能声明为虚函数?

(1)不能被继承的函数。 (2)不能被重写的函数。

  1. 普通函数:普通函数不属于成员函数,是不能被继承的。普通函数只能被重载,不能被重写,因此声明为虚函数没有意义。
  2. 友元函数:友元函数不属于类的成员函数,不能被继承。对于没有继承特性的函数没有虚函数的说法。
  3. 构造函数:多态是通过基类指针指向子类对象来实现多态的,在对象构造之前并没有对象产生,因此无法使用多态特性,这是矛盾的。因此构造函数不允许继承。
  4. 内联成员函数:内联函数是在编译时展开的,而虚函数是为了实现多态,是在运行时绑定的。因此内联函数和多态的特性相违背。
  5. 静态成员函数:首先静态成员函数理论是可继承的。但是静态成员函数是编译时确定的,无法动态绑定,不支持多态,因此不能被重写,也就不能被声明为虚函数。

Internet采用哪种网络协议?该协议的主要层次结构?

TCP/IP协议,叫做传输控制/网际协议,又叫网络通讯协议,这个协议是Internet国际互联网络的基础。

IP地址的编码分别为哪两部分?

网络ID+主机ID。

  • 网络ID就是网络地址,它是供路由器在路由表中寻址使用的。
  • 主机ID就是在局域版网中的主机号;

不能做switch参数的类型有哪些?

  • 支持baibyte,char,short,int,long,bool,整数类型和du枚举类型。
  • 不支持zhifloat,double,string