内联函数
内联函数是C和C++编程语言中的一种优化机制,用于提高程序的执行效率。
内联函数的特点:
- 减少函数调用开销:内联函数的主要优点是避免了函数调用的开销。每次调用内联函数时,编译器会将函数体直接插入到调用点,这样就不需要进行实际的函数调用。
- 提高执行效率:通过内联函数,减少了函数调用的栈操作和参数传递,进而提高了程序的执行效率。
- 内联函数不适合太复杂或代码量大的函数,会增加代码的体积,导致指令缓存效率降低。
- 内联函数的定义必须在调用之前可见,通常定义在头文件中。
构造函数可以是内联函数。
排序
快速排序是选中一个元素,将比其小的元素放在其左边,比其大的元素放在右边,然后递归处理。
归并排序是将有序的子序列合并成有序的序列。
插入排序是每次将一个元素插入到已经有序部分中,直到序列有序。
通信系统必须具备的三个基本要素是:
- 信源
- 通信媒体
- 信宿
GET和POST区别
- 对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据)。
- 对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
- get参数通过URL传递,post放在request body中。
- get请求在URL中传递的参数是有长度限制的,而POST没有。
- get比post更不安全,因为参数直接暴露在url中,所以不能用来传递敏感数据。
- get请求只能进行URL编码,post请求支持多种编码方式。
- get请求参数会被完整保留在浏览历史记录里,而posr中的参数不会被保留。
- GET和POST本质上就是TCP连接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。
- GET产生一个TCP数据包,POST产生两个TCP数据包。
堆
堆是一种完全二叉树。
完全二叉树是一种特殊的二叉树,其中所有层都是完全填满的,除了最后一层,其节点都是从左到右排列的。
堆是一种特殊的完全二叉树,它满足以下条件:
- 最大堆:每个节点的值都大于或等于其子节点的值。
- 最小堆:每个节点的值都小于或等于其子节点的值。
完全二叉树和堆的关系
由于堆的结构特性,它必须是一颗完全 二叉树,以保证高效的插入和删除操作。
具体来说:
- 插入操作:新节点总是被插入到最后一层的最左边的位置,以保持完全二叉树的性质,然后通过向上调整(上浮)来维护堆的性质。
- 删除操作:通常删除的是堆顶元素(最大堆中的最大值或最小堆中的最小值),然后将最后一个节点移到堆顶,并通过向下调整维护堆的性质。
这两个操作都完全依赖于完全二叉树的性质,保证时间复杂度为O(log n)。
友元
友元关系是单向的,不是对称的,不能传递。
关于传递性:父亲的朋友不一定是儿子的朋友。
关于对称性:他把她当朋友,她却不把他当朋友。
完全图的边数
有向完全图的边数:n(n-1)
无向完全图的边数:n(n-1)/2;
C语言的标识符
- C语言中的标识符只能由字母,数字,下划线组成,并且第一个字符必须是字母或下划线。
- C语言中区分大小写。
- 不能与C语言中的关键字、预定义标识符等重名。
在退出unix系统账户之后还需要继续运行某个进程,可以用nohup。
二级文件目录
二级文件目录结构指的是一种文件系统的组织方式,其中目录和文件被分成两级层次:顶级目录和子目录。
每个顶级目录下可以有多个子目录和文件,而子目录本身也可以包含文件,但不包含进一步的子目录。
二级文件目录结构有助于解决不同用户间的文件命名冲突。通过将用户的文件分配到不同的顶级目录或子目录中,可以避免文件名冲突。例如,每个用户都有自己的目录,这样即使不同用户使用相同的文件名,也不会冲突。
/ (根目录)
├── userA (用户A的目录)
│ ├── file.txt
├── userB (用户B的目录)
│ ├── file.txt
一个文件只能有一个FCB。
曼彻斯特编码
曼彻斯特编码是一种用于数字信号传输的编码方法,常用于局域网(LAN)技术中,尤其是以太网中。它通过电平的变化来表示数据位,从而实现同步传输。
静态成员
C++中,静态成员指的是用static关键字修饰的类成员变量和类成员函数。
静态成员与普通成员的区别在于它们是属于整个类的,而不是属于某个具体的对象。
静态成员变量在所有对象之间共享,而静态成员函数只能访问静态成员变量和其他静态成员函数。
静态成员变量
静态成员变量在类的所有实例中共享,意味着只有一个实例存在于内存中,无论创建了多少个类的对象。
- 在类中声明,但必须在类外定义和初始化。
- 静态成员变量存储在全局数据区,而不是在堆或栈中。
- 访问:可以通过类名直接访问,也可以通过对象访问。
网络划分
- 局域网(LAN):一般限定在较小的区域内,通常用有线的方式连接起来。
- 城域网MAN:规模局限在一座城市的范围内。
- WAN:广域网:网络跨越国界、洲界,甚至遍及全球范围。
- PAN:个人区域网:一般指家庭一台或多台电脑使用的网络。
- 无线局域网(WLAN):是指通过无线设备建立的,给支持无线通信的设备使用的,比如无线网卡,或手机上的WIFI.
设备独立性是指用户不指定特定的设备,而指定逻辑设备,使得用户作业和物理设备独立开来,再通过其他途径建立逻辑设备和物理设备之间的对应关系的特性;用户程序独立于具体使用的物理设备的一种特性。
假设一个应用程序每秒钟产生60字节的数据块,每个数据块封装在一个TCP报文段,然后再封装在IP数据报中。这时数据报文中包含的数据量占60%。
TCP报文段首部的前20个字节固定,后面的4n字节是根据需要而增加的选项(n是整数)。
一个IP数据包首部的长度也是20字节,再加上60字节的数据,一共100字节。
在UNIX系统中,若磁盘块大小为1KB,每个块号32位,则直接寻址,一次寻址的范围为:
UNIX文件系统采用多级索引结构,每个文件的索引表为13个索引项,每项2个字节。
- 前10个索引项直接存放文件信息的物理块号,最多寻址10个物理块。
- 如果文件大于10块,利用第11项指向一个物理块,该物理块中存放256个文件物理块的块号。
数组元素基本有序
数组元素基本有序的情况下,快速排序是最慢的,因为会退化成冒泡排序,选择排序时间复杂度都是O(N2),堆排序都是O(nlogn),但是基本有序对插入排序是最好的,因为这样只需要比较大小,不需要移动,时间复杂度趋近于O(n)。
交换机与路由器
- 传统交换机从网桥发展而来,属于OSI第二层即数据链路层设备,主要根据MAC地址来转发数据帧。
- 路由器属于OSI第三层即网络层设备,它根据IP地址进行寻址,进行数据包的转发,依赖路由表和路由协议。
- 交换机不隔离广播域,广播帧在同一个广播域内会被所有交换机端口转发。因此,广播报文可以通过交换机继续广播。
- 三层交换机在第一次处理数据流时会执行路由操作,并建立相应的MAC地址与IP地址映射表,当同样的数据流再次通过时,可以直接在二层转发,提高效率。
无向图的邻接矩阵
无向图的邻接矩阵是对称的。
矩阵中的一半非零元素个数等于 图中的边数。
不稳定排序有:
- 快速排序
- 希尔排序
- 堆排序
- 选择排序
虚拟局域网
虚拟局域网是建立在局域网交换技术基础上的。
虚拟局域网可以将局域网上的结点划分为若干个逻辑工作组,一个逻辑工作组就是一个虚拟网络。
逻辑工作组的结点不受物理位置的限制。
逻辑工作组的结点不受物理位置的限制。