C++专业面试真题(1)学习

发布于:2024-07-05 ⋅ 阅读:(22) ⋅ 点赞:(0)

内联函数

内联函数是C和C++编程语言中的一种优化机制,用于提高程序的执行效率。

内联函数的特点:

  1. 减少函数调用开销:内联函数的主要优点是避免了函数调用的开销。每次调用内联函数时,编译器会将函数体直接插入到调用点,这样就不需要进行实际的函数调用。
  2. 提高执行效率:通过内联函数,减少了函数调用的栈操作和参数传递,进而提高了程序的执行效率。
  3. 内联函数不适合太复杂或代码量大的函数,会增加代码的体积,导致指令缓存效率降低。
  4. 内联函数的定义必须在调用之前可见,通常定义在头文件中。

构造函数可以是内联函数。

排序

快速排序是选中一个元素,将比其小的元素放在其左边,比其大的元素放在右边,然后递归处理。

归并排序是将有序的子序列合并成有序的序列。

插入排序是每次将一个元素插入到已经有序部分中,直到序列有序。

通信系统必须具备的三个基本要素是:

  • 信源
  • 通信媒体
  • 信宿

GET和POST区别

  1. 对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据)。
  2. 对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
  3. get参数通过URL传递,post放在request body中。
  4. get请求在URL中传递的参数是有长度限制的,而POST没有。
  5. get比post更不安全,因为参数直接暴露在url中,所以不能用来传递敏感数据。
  6. get请求只能进行URL编码,post请求支持多种编码方式。
  7. get请求参数会被完整保留在浏览历史记录里,而posr中的参数不会被保留。
  8. GET和POST本质上就是TCP连接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。
  9. GET产生一个TCP数据包,POST产生两个TCP数据包。

堆是一种完全二叉树。

完全二叉树是一种特殊的二叉树,其中所有层都是完全填满的,除了最后一层,其节点都是从左到右排列的。

堆是一种特殊的完全二叉树,它满足以下条件:

  • 最大堆:每个节点的值都大于或等于其子节点的值。
  • 最小堆:每个节点的值都小于或等于其子节点的值。

完全二叉树和堆的关系
由于堆的结构特性,它必须是一颗完全 二叉树,以保证高效的插入和删除操作。

具体来说:

  • 插入操作:新节点总是被插入到最后一层的最左边的位置,以保持完全二叉树的性质,然后通过向上调整(上浮)来维护堆的性质。
  • 删除操作:通常删除的是堆顶元素(最大堆中的最大值或最小堆中的最小值),然后将最后一个节点移到堆顶,并通过向下调整维护堆的性质。

这两个操作都完全依赖于完全二叉树的性质,保证时间复杂度为O(log n)。

友元

友元关系是单向的,不是对称的,不能传递。
关于传递性:父亲的朋友不一定是儿子的朋友。
关于对称性:他把她当朋友,她却不把他当朋友。

完全图的边数

有向完全图的边数:n(n-1)
无向完全图的边数:n(n-1)/2;

C语言的标识符

  1. C语言中的标识符只能由字母,数字,下划线组成,并且第一个字符必须是字母或下划线。
  2. C语言中区分大小写。
  3. 不能与C语言中的关键字、预定义标识符等重名。

在退出unix系统账户之后还需要继续运行某个进程,可以用nohup。

二级文件目录

二级文件目录结构指的是一种文件系统的组织方式,其中目录和文件被分成两级层次:顶级目录和子目录。

每个顶级目录下可以有多个子目录和文件,而子目录本身也可以包含文件,但不包含进一步的子目录。

二级文件目录结构有助于解决不同用户间的文件命名冲突。通过将用户的文件分配到不同的顶级目录或子目录中,可以避免文件名冲突。例如,每个用户都有自己的目录,这样即使不同用户使用相同的文件名,也不会冲突。

/ (根目录)
├── userA (用户A的目录)
│   ├── file.txt
├── userB (用户B的目录)
│   ├── file.txt

一个文件只能有一个FCB。

曼彻斯特编码

曼彻斯特编码是一种用于数字信号传输的编码方法,常用于局域网(LAN)技术中,尤其是以太网中。它通过电平的变化来表示数据位,从而实现同步传输。

静态成员

C++中,静态成员指的是用static关键字修饰的类成员变量和类成员函数。
静态成员与普通成员的区别在于它们是属于整个类的,而不是属于某个具体的对象。

静态成员变量在所有对象之间共享,而静态成员函数只能访问静态成员变量和其他静态成员函数。

静态成员变量
静态成员变量在类的所有实例中共享,意味着只有一个实例存在于内存中,无论创建了多少个类的对象。

  1. 在类中声明,但必须在类外定义和初始化。
  2. 静态成员变量存储在全局数据区,而不是在堆或栈中。
  3. 访问:可以通过类名直接访问,也可以通过对象访问。

网络划分

  1. 局域网(LAN):一般限定在较小的区域内,通常用有线的方式连接起来。
  2. 城域网MAN:规模局限在一座城市的范围内。
  3. WAN:广域网:网络跨越国界、洲界,甚至遍及全球范围。
  4. PAN:个人区域网:一般指家庭一台或多台电脑使用的网络。
  5. 无线局域网(WLAN):是指通过无线设备建立的,给支持无线通信的设备使用的,比如无线网卡,或手机上的WIFI.

设备独立性是指用户不指定特定的设备,而指定逻辑设备,使得用户作业和物理设备独立开来,再通过其他途径建立逻辑设备和物理设备之间的对应关系的特性;用户程序独立于具体使用的物理设备的一种特性。

假设一个应用程序每秒钟产生60字节的数据块,每个数据块封装在一个TCP报文段,然后再封装在IP数据报中。这时数据报文中包含的数据量占60%。

TCP报文段首部的前20个字节固定,后面的4n字节是根据需要而增加的选项(n是整数)。

一个IP数据包首部的长度也是20字节,再加上60字节的数据,一共100字节。

在UNIX系统中,若磁盘块大小为1KB,每个块号32位,则直接寻址,一次寻址的范围为:

UNIX文件系统采用多级索引结构,每个文件的索引表为13个索引项,每项2个字节。

  1. 前10个索引项直接存放文件信息的物理块号,最多寻址10个物理块。
  2. 如果文件大于10块,利用第11项指向一个物理块,该物理块中存放256个文件物理块的块号。

数组元素基本有序

数组元素基本有序的情况下,快速排序是最慢的,因为会退化成冒泡排序,选择排序时间复杂度都是O(N2),堆排序都是O(nlogn),但是基本有序对插入排序是最好的,因为这样只需要比较大小,不需要移动,时间复杂度趋近于O(n)。

交换机与路由器

  • 传统交换机从网桥发展而来,属于OSI第二层即数据链路层设备,主要根据MAC地址来转发数据帧。
  • 路由器属于OSI第三层即网络层设备,它根据IP地址进行寻址,进行数据包的转发,依赖路由表和路由协议。
  • 交换机不隔离广播域,广播帧在同一个广播域内会被所有交换机端口转发。因此,广播报文可以通过交换机继续广播。
  • 三层交换机在第一次处理数据流时会执行路由操作,并建立相应的MAC地址与IP地址映射表,当同样的数据流再次通过时,可以直接在二层转发,提高效率。

无向图的邻接矩阵

无向图的邻接矩阵是对称的。

矩阵中的一半非零元素个数等于 图中的边数。

在这里插入图片描述
不稳定排序有:

  • 快速排序
  • 希尔排序
  • 堆排序
  • 选择排序

虚拟局域网

虚拟局域网是建立在局域网交换技术基础上的。

虚拟局域网可以将局域网上的结点划分为若干个逻辑工作组,一个逻辑工作组就是一个虚拟网络。

逻辑工作组的结点不受物理位置的限制。

逻辑工作组的结点不受物理位置的限制。