目录
1.如何理解链表
链表(Linked List)是一种线性表数据结构,它通过指针将一组零散的内存块(节点)串联起来,形成一条链子。
每个节点包含两个部分:数据域和指针域。数据域存放节点的信息,比如链表中存储的整数、字符串等,而指针域则会指向下一个节点的地址。
链表有两种常见的类型:单向链表和双向链表。单向链表中,每个节点只有一个指针域,指向下一个节点;而双向链表则每个节点包含两个指针域,一个指向前一个节点,一个指向后一个节点。
相对于数组,链表的优势在于可以动态地分配内存空间,而不需要预先知道数据的大小。此外,链表支持在 O(1) 的时间复杂度内进行插入和删除操作,而这在数组中会很困难。
不过链表的缺点也比较明显,它无法随机访问一个特定的元素,需要遍历整个链表才能找到。而且由于节点之间的关系是通过指针建立的,所以在插入、删除节点时需要特别小心,确保指针关系不出错。
2.如何理解栈和队列,应用场景
栈和队列是两种常见的数据结构,在计算机科学中被广泛应用。它们都是线性数据结构,对其中的数据进行顺序存储。栈和队列的主要区别在于数据存储和访问的方式:
- 栈是一种“后进先出”(LIFO)的数据结构,即最后压入栈中的元素最先弹出。栈中的数据只能在栈顶进行插入、删除等操作;
- 队列是一种“先进先出”(FIFO)的数据结构,即最早进入队列的元素最先弹出。队列中的数据只能在队尾进行插入,在队首进行删除操作。
例如,我们可以用栈来实现函数调用与返回的过程,在计算中也可以使用栈来进行括号匹配的检查。而队列可以用来构建缓冲和消息队列等应用场景,例如在多个服务之间传输数据时,使用队列可以保证数据的按序处理。
3.如何理解二叉树和图
二叉树和图都是计算机科学中常见的数据结构,它们具有不同的特点和应用场景。
二叉树是一种树形数据结构,它由一组节点和连接它们的边组成,每个节点最多有两个子节点。二叉树通常有两个特殊的子树,称为左子树和右子树,这些子树中的每个节点都比其父节点小或大。二叉树常被用于实现搜索和排序算法,例如二分查找算法。二叉树在操作和存储上的效率较高。
而图是一种更通用的数据结构,它可以包含任意数量的节点和边,每个节点可以与任意其他节点相连。与二叉树不同,图中的节点之间可以有多个连接。图常被用于模拟现实世界中的复杂关系,例如社交网络,交通路线和网络拓扑。图的特点是复杂性高,但是可以描述更广泛的现实世界模型。
总之,二叉树和图是计算机科学中最常见的数据结构之一,二叉树通常用于搜索和排序算法,而图主要用于模拟现实世界的复杂关系。直观上,可以把二叉树看作是一种局限性较小的图。
4.OSI七层协议,各自功能和常见协议
各层的功能和常见协议如下:
-
物理层(Physical Layer):负责传输比特流,即物理传输媒介相关的传输;
常见协议:ISO12182协议,RS-232接口 -
数据链路层(Data Link Layer):负责传输一个节点到另一个节点之间的帧,检错、流量控制等都是在这一层完成的;
常见协议:以太网、PPP协议、帧中继 -
网络层(Network Layer):负责不同网络间的数据包交换,以及处理这些数据包的路径选择和逻辑寻址等;
常见协议:IP协议、ICMP协议、ARP协议 -
传输层(Transport Layer):提供可靠的端到端的报文传输和数据框重组;
常见协议:TCP协议、UDP协议 -
会话层(Session Layer):管理用户会话,建立、断开会话,以及可能由应用需要的功能;
常见协议:NetBIOS、RPC协议 -
表示层(Presentation Layer):将数据格式化并正确解释,即数据格式转换和编码;
常见协议:ASCII码、JPEG图片格式、MPEG格式等 -
应用层(Application Layer):为用户提供特定的应用程序和与用户的接口;
常见协议:HTTP协议、SMTP协议、FTP协议等
5.TCP和UDP区别
TCP (Transmission Control Protocol) 和 UDP (User Datagram Protocol) 是两种常见的互联网传输协议。它们有以下的特点和区别:
-
连接方式不同:TCP 是面向连接的协议,UDP 是无连接的协议。在 TCP 中,要先建立连接,数据才能发送;而 UDP 不需要建立连接,直接发送数据包即可。
-
数据传输方式不同:TCP 是面向字节流的协议,UDP 是面向报文的协议。在 TCP 中,数据被拆成一些固定大小的 TCP 分段,通过网络逐个发送并单独确认。而在 UDP 中则直接把应用程序发来的数据封装成数据报发送给网络。
-
可靠性和实时性不同:TCP 提供可靠的数据传输,确保数据的准确性和完整性,但会影响实时性。UDP 不能保证可靠的数据传输,但在实时应用中,如视频、音频数据的传输,UDP 可以提供更好的实时性和效率。
-
消息大小限制不同: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 的加密过程:
-
客户端向服务器发出请求,并申请 SSL/TLS 通信。
-
服务器向客户端发送证书。证书包括服务器公钥和服务器的信息。
-
客户端接收证书后,使用内置的公钥来解密证书,获得服务器公钥。
-
客户端生成一个随机的对称密钥,使用服务器公钥加密后发送给服务器。
-
服务器接收到客户端发送的密钥后,使用服务器私钥进行解密,获得客户端发送的对称密钥。
-
客户端和服务器使用对称密钥进行加密通信。
以上过程中,非对称加密用于证书的签发和验证,确保证书的真实性;对称加密用于实际的数据加密和解密,确保通信数据的保密性和完整性。
通过 SSL/TLS 协议的加密方式,HTTPS 可以提供更高的安全性,保护用户的隐私信息和数据不被窃取和篡改。