答: 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
引用时别名;指针是地址
int **p //合法
int &&p //非法
基本特性:实时性、有线程优先级、多种中断级别
有区别。
平衡树(BT) 指的是,任意节点的子树的高度差都小于等于1。
(1)不能被继承的函数。 (2)不能被重写的函数。
TCP/IP协议,叫做传输控制/网际协议,又叫网络通讯协议,这个协议是Internet国际互联网络的基础。
网络ID+主机ID。