C++面试

目录

1.如何理解链表

2.如何理解栈和队列,应用场景

3.如何理解二叉树和图

4.OSI七层协议,各自功能和常见协议

5.TCP和UDP区别

6.HTTPS如何实现加密


1.如何理解链表

链表(Linked List)是一种线性表数据结构,它通过指针将一组零散的内存块(节点)串联起来,形成一条链子。

每个节点包含两个部分:数据域和指针域。数据域存放节点的信息,比如链表中存储的整数、字符串等,而指针域则会指向下一个节点的地址。

链表有两种常见的类型:单向链表和双向链表。单向链表中,每个节点只有一个指针域,指向下一个节点;而双向链表则每个节点包含两个指针域,一个指向前一个节点,一个指向后一个节点。

相对于数组,链表的优势在于可以动态地分配内存空间,而不需要预先知道数据的大小。此外,链表支持在 O(1) 的时间复杂度内进行插入和删除操作,而这在数组中会很困难。

不过链表的缺点也比较明显,它无法随机访问一个特定的元素,需要遍历整个链表才能找到。而且由于节点之间的关系是通过指针建立的,所以在插入、删除节点时需要特别小心,确保指针关系不出错。

2.如何理解栈和队列,应用场景

栈和队列是两种常见的数据结构,在计算机科学中被广泛应用。它们都是线性数据结构,对其中的数据进行顺序存储。栈和队列的主要区别在于数据存储和访问的方式:

  • 栈是一种“后进先出”(LIFO)的数据结构,即最后压入栈中的元素最先弹出。栈中的数据只能在栈顶进行插入、删除等操作;
  • 队列是一种“先进先出”(FIFO)的数据结构,即最早进入队列的元素最先弹出。队列中的数据只能在队尾进行插入,在队首进行删除操作。

例如,我们可以用栈来实现函数调用与返回的过程,在计算中也可以使用栈来进行括号匹配的检查。而队列可以用来构建缓冲和消息队列等应用场景,例如在多个服务之间传输数据时,使用队列可以保证数据的按序处理。

3.如何理解二叉树和图

二叉树和图都是计算机科学中常见的数据结构,它们具有不同的特点和应用场景。

二叉树是一种树形数据结构,它由一组节点和连接它们的边组成,每个节点最多有两个子节点。二叉树通常有两个特殊的子树,称为左子树和右子树,这些子树中的每个节点都比其父节点小或大。二叉树常被用于实现搜索和排序算法,例如二分查找算法。二叉树在操作和存储上的效率较高。

而图是一种更通用的数据结构,它可以包含任意数量的节点和边,每个节点可以与任意其他节点相连。与二叉树不同,图中的节点之间可以有多个连接。图常被用于模拟现实世界中的复杂关系,例如社交网络,交通路线和网络拓扑。图的特点是复杂性高,但是可以描述更广泛的现实世界模型。

总之,二叉树和图是计算机科学中最常见的数据结构之一,二叉树通常用于搜索和排序算法,而图主要用于模拟现实世界的复杂关系。直观上,可以把二叉树看作是一种局限性较小的图。

4.OSI七层协议,各自功能和常见协议

各层的功能和常见协议如下:

  1. 物理层(Physical Layer):负责传输比特流,即物理传输媒介相关的传输;
    常见协议:ISO12182协议,RS-232接口

  2. 数据链路层(Data Link Layer):负责传输一个节点到另一个节点之间的帧,检错、流量控制等都是在这一层完成的;
    常见协议:以太网、PPP协议、帧中继

  3. 网络层(Network Layer):负责不同网络间的数据包交换,以及处理这些数据包的路径选择和逻辑寻址等;
    常见协议:IP协议、ICMP协议、ARP协议

  4. 传输层(Transport Layer):提供可靠的端到端的报文传输和数据框重组;
    常见协议:TCP协议、UDP协议

  5. 会话层(Session Layer):管理用户会话,建立、断开会话,以及可能由应用需要的功能;
    常见协议:NetBIOS、RPC协议

  6. 表示层(Presentation Layer):将数据格式化并正确解释,即数据格式转换和编码;
    常见协议:ASCII码、JPEG图片格式、MPEG格式等

  7. 应用层(Application Layer):为用户提供特定的应用程序和与用户的接口;
    常见协议:HTTP协议、SMTP协议、FTP协议等

5.TCP和UDP区别

TCP (Transmission Control Protocol) 和 UDP (User Datagram Protocol) 是两种常见的互联网传输协议。它们有以下的特点和区别:

  1. 连接方式不同:TCP 是面向连接的协议,UDP 是无连接的协议。在 TCP 中,要先建立连接,数据才能发送;而 UDP 不需要建立连接,直接发送数据包即可。

  2. 数据传输方式不同:TCP 是面向字节流的协议,UDP 是面向报文的协议。在 TCP 中,数据被拆成一些固定大小的 TCP 分段,通过网络逐个发送并单独确认。而在 UDP 中则直接把应用程序发来的数据封装成数据报发送给网络。

  3. 可靠性和实时性不同:TCP 提供可靠的数据传输,确保数据的准确性和完整性,但会影响实时性。UDP 不能保证可靠的数据传输,但在实时应用中,如视频、音频数据的传输,UDP 可以提供更好的实时性和效率。

  4. 消息大小限制不同:TCP 协议没有大小限制,而 UDP 数据报仅限于 65535 字节以内。

总的来说,TCP 提供了可靠的数据传输,适用于大量数据传输、需要数据确认、重传等要求较高的应用场景;而 UDP 适用于实时性要求高的应用场景,如视频、音频数据传输等。

6.HTTPS如何实现加密

HTTPS (Hyper Text Transfer Protocol Secure) 是在传输层和应用层之间添加了一个安全层,来确保数据的安全传输。HTTPS 的加密主要是通过 SSL/TLS (Secure Sockets Layer/Transport Layer Security) 协议实现的。

SSL/TLS 协议是一种加密通信协议,使用对称加密和非对称加密方式来加密通信数据。在 SSL/TLS 握手过程中,浏览器和服务器之间通过非对称加密方式交换公钥和私钥,然后使用对称加密方式来加密通信数据。

以下是 HTTPS 的加密过程:

  1. 客户端向服务器发出请求,并申请 SSL/TLS 通信。

  2. 服务器向客户端发送证书。证书包括服务器公钥和服务器的信息。

  3. 客户端接收证书后,使用内置的公钥来解密证书,获得服务器公钥。

  4. 客户端生成一个随机的对称密钥,使用服务器公钥加密后发送给服务器。

  5. 服务器接收到客户端发送的密钥后,使用服务器私钥进行解密,获得客户端发送的对称密钥。

  6. 客户端和服务器使用对称密钥进行加密通信。

以上过程中,非对称加密用于证书的签发和验证,确保证书的真实性;对称加密用于实际的数据加密和解密,确保通信数据的保密性和完整性。

通过 SSL/TLS 协议的加密方式,HTTPS 可以提供更高的安全性,保护用户的隐私信息和数据不被窃取和篡改。

你可能感兴趣的:(面经,数据结构,链表,算法,c++,面试)