答: 7层:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层 4层:应用层、传输层、网络层、链路层 为什么分层: ①多层之间相互独立,灵活性好 ②结构上可分割开来,易于实现和维护 ③促进标准化工作
答: (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底层实现是双向链表,查找时间复杂度为O(N)。
答:数组+链表,主干为数组,当某个节点出现多次时,则用链表组织这些相等的节点。 首先可以在O(1)时间复杂度下在数组中找指定元素,找到之后还需要判断是否有重复元素,如果有,则需要继续遍历链表。 解决哈希冲突的方法:1.再定址法2.再哈希法3.链地址法 时间复杂度:普通O(1)最差O(N)
答:原子性、稳定性、隔离性、可靠性
答:虚函数是指经过virtual关键字修饰的函数,其实现依赖于虚函数表,虚函数表中存有函数的入口地址。 多态是基于虚函数的一种功能,可以做到动态的调用基类或者派生类的函数。 继承强调的是is-a关系,是指子类继承父类的特征和行为。 组合强调的是has-a关系,是通过对现有对象进行拼装形成更复杂的功能。
答(1)①客户端请求建立连接,发送序列号②服务端确认连接,发送确认报文,并发送自己的序列号③客户端发送确认报文 (2)如果在建立连接的过程中,那么这仅仅是一个规定,三次握手的协议也就是如此说明的。在数据收发的过程中,确认号也表示了在次字节之前的数据已经收到的确认,可以放心发送后边的数据,加1可以确认下一次发送应该起始的位置。
答:(1)保证安全的断开连接,假设被动断开方第一次发送的断开请求报文在网络滞留了,收不到确认又重新发了一次,第二次收到了确认则连接断开,如果此时滞留的报文又到达了,此时主动断开方有可能已经重新建立TCP连接,就会收到一个错误的报文 (2)保证迟到的报文被丢弃。
答:(1)计算深度 (2)计算叶子节点数 (3)判断深度和叶子节点数满足满二叉树的关系
答:(1)信号、信号量、共享内存、消息队列、管道、套接字 (2)有可能相同有可能不同,共享内存实际上已相当于文件,对于共享内存的文件映射到内存,如果两个进程完全相同的话,虚拟地址就是相同的,比如fork出来的进程和父进程访问同一共享内存虚拟地址就可能相同。而进程如果有一点细微的不同,那么虚拟地址就会有差异。
答:管道是半双工、socket是全双工
答:虚拟地址空间通过页表映射到物理内存,以32位操作系统为例,首先通过前10位确定其在哪一个页表,中间10位确定再也表中的哪一页,最后12位给定该地址在这一页的偏移量即可定位物理内存。
答:寻址范围是0~4G 内存为4G
答:TCP是面向连接的可靠的流式服务 UDP是无连接的不可靠的数据包服务 粘包问题的解决方法: ①暴力解决,每次需要发数据时再建立TCP连接,发送结束就断开连接。 ②定长数据结构,如果规定每次发送的数据报长度是一定的,那么接收方每次读取固定长度的报文即可。 ③不定长数据结构:多数情况下使用不定长数据结构,第一种方法可以规定一个特殊的符号作为结束符,每当遇到这个结束符才认为该报文接收结束,但是该方法只适用于字符数据,因为对其他二进制数据无法确定是结束符还是要发送的数据;第二种方法是,在固定的偏移位置写入报文长度,接收方每次读取先获取到报文的长度,再接收该长度大小的报文即可。
答:HTTP协议的报头是用来区分报文的类型,比如客户端发送一个请求报文,那么该报文是请求报文就要在报头中说明,是响应报文也要在报头中说明。 GET/POST
引用时别名;指针是地址
程序为指针变量分配内存区域,而不为引用分配内存区域。指针使用时要在前加 * ,引用可以直接使用。引用在定义时就被初始化,之后无法改变;指针可以发生改变。 即引用的对象不能改变,指针的对象可以改变。没有空引用,但有空指针。这使得使用引用的代码效率比使用指针的更高。因为在使用引用之前不需要测试它的合法性。相反,指针则应该总是被测试,防止其为空。对引用使用“sizeof”得到的是变量的大小,对指针使用“sizeof”得到的是变量的地址的大小。理论上指针的级数没有限制,但引用只有一级。即不存在引用的引用,但可以有指针的指针。 int **p //合法 int &&p //非法 ++引用与++指针的效果不一样。 例如就++操作而言,对引用的操作直接反应到所指向的对象,而不是改变指向;而对指针的操作,会使指针指向下一个对象,而不是改变所指对象的内容。基本特性:实时性、有线程优先级、多种中断级别
有区别。
全局变量保存在内存的全局存储区,占用静态的存储单元;局部变量保存在栈中,只有在所在函数被调用时才动态地为变量分配存储单元。平衡树(BT) 指的是,任意节点的子树的高度差都小于等于1。
(1)不能被继承的函数。 (2)不能被重写的函数。
普通函数:普通函数不属于成员函数,是不能被继承的。普通函数只能被重载,不能被重写,因此声明为虚函数没有意义。友元函数:友元函数不属于类的成员函数,不能被继承。对于没有继承特性的函数没有虚函数的说法。构造函数:多态是通过基类指针指向子类对象来实现多态的,在对象构造之前并没有对象产生,因此无法使用多态特性,这是矛盾的。因此构造函数不允许继承。内联成员函数:内联函数是在编译时展开的,而虚函数是为了实现多态,是在运行时绑定的。因此内联函数和多态的特性相违背。静态成员函数:首先静态成员函数理论是可继承的。但是静态成员函数是编译时确定的,无法动态绑定,不支持多态,因此不能被重写,也就不能被声明为虚函数。TCP/IP协议,叫做传输控制/网际协议,又叫网络通讯协议,这个协议是Internet国际互联网络的基础。
网络ID+主机ID。
网络ID就是网络地址,它是供路由器在路由表中寻址使用的。主机ID就是在局域版网中的主机号;