Skip to content

2023-07-14

线程池的作用

提前创建线程,减轻压力

三次握手、四次挥手

TCP通过什么保证可靠连接的

HTTPS 的流程、加密原理

流程:

①客户端的浏览器向服务器传送客户端SSL 协议的版本号,加密算法的种类,产生的随机数,以及其他服务器和客户端之间通讯所需要的各种信息。

②服务器向客户端传送SSL 协议的版本号,加密算法的种类,随机数以及其他相关信息,同时服务器还将向客户端传送自己的证书。

③客户利用服务器传过来的信息验证服务器的合法性,服务器的合法性包括:证书是否过期,发行服务器证书的CA 是否可靠,发行者证书的公钥能否正确解开服务器证书的“发行者的数字签名”,服务器证书上的域名是否和服务器的实际域名相匹配。如果合法性验证没有通过,通讯将断开;如果合法性验证通过,将继续进行第四步。

④用户端随机产生一个用于后面通讯的“对称密码”,然后用服务器的公钥(服务器的公钥从步骤②中的服务器的证书中获得)对其加密,然后传给服务器。

⑤服务器用私钥解密“对称密码”(此处的公钥和私钥是相互关联的,公钥加密的数据只能用私钥解密,私钥只在服务器端保留。然后用其作为服务器和客户端的“通话密码”加解密通讯。同时在SSL 通讯过程中还要完成数据通讯的完整性,防止数据通讯中的任何变化。

⑥客户端向服务器端发出信息,指明后面的数据通讯将使用的步骤⑤中的主密码为对称密钥,同时通知服务器客户端的握手过程结束。

⑦服务器向客户端发出信息,指明后面的数据通讯将使用的步骤⑤中的主密码为对称密钥,同时通知客户端服务器端的握手过程结束。

⑧SSL 的握手部分结束,SSL 安全通道的数据通讯开始,客户和服务器开始使用相同的对称密钥进行数据通讯,同时进行通讯完整性的检验。

MySQL 的索引,底层数据结构,为什么使用B+树

hashmap底层的数据结构,链表和红黑树是为了解决什么问题呢?

hashmap线程安全吗?

ConcurrentHashMap了解过吗?它是怎么保证线程安全的?可以详细说说jdk1.8前后的区别吗?

innodb和myisam的区别?

有优化过SQL吗?有看过执行计划吗?它有多少字段?

有解决慢查询吗?大概用过什么方法?

为啥有了http还要用rpc?

HTTP和RPC各有优缺点,具体取决于应用程序的需求和设计。

HTTP优点: 1. 简单易用:HTTP是一种简单易用的协议,可以轻松地在不同的平台和语言之间进行交互。 2. 可扩展性:HTTP支持RESTful API设计风格,可以通过URL来表示资源,并使用标准化的方法来访问和操作资源。 3. 安全性:HTTP支持SSL或TLS加密,可以保证数据传输的安全性。

HTTP缺点: 1. 性能:由于HTTP是一种面向文档的协议,它需要在每个请求和响应中传输大量的头部信息。这可能会导致网络延迟和带宽浪费。 2. 可靠性:HTTP是一种无状态协议,它不能保证消息传输的可靠性和顺序性。 3. 功能限制:HTTP主要用于Web应用程序中,它对于构建复杂的分布式系统可能不够灵活。

RPC优点: 1. 性能:RPC是一种面向过程的协议,它可以直接调用远程服务器上的函数或方法,并返回结果。这可以避免网络延迟和带宽浪费。 2. 可靠性:RPC通常支持消息传输的可靠性和顺序性,并且可以使用事务处理来保证数据的一致性。 3. 功能丰富:RPC可以支持异步调用、批处理和事务处理等功能,并且可以使用IDL来定义接口和参数。

RPC缺点: 1. 复杂性:RPC通常需要使用IDL来定义接口和参数,并且需要选择合适的序列化方式。这可能会增加开发人员的工作量和学习成本。 2. 语言限制:RPC通常需要使用特定语言或框架来实现客户端和服务器端,这可能会限制应用程序的可移植性。 3. 安全性:RPC通常需要使用SSL或TLS加密来保证数据传输的安全性,但这可能会影响性能。

选择合适的协议

在选择合适的通信协议时,需要考虑应用程序的需求和设计。如果应用程序主要是Web应用程序,并且需要支持RESTful API设计风格,那么HTTP可能是更好的选择。如果应用程序需要支持复杂的分布式系统,并且需要高性能和可靠性,那么RPC可能是更好的选择。

当然,在实际应用中,我们也可以将HTTP和RPC结合起来使用。例如,在一个大型分布式系统中,可以使用HTTP作为外部API,而使用RPC作为内部服务之间的通信方式。这样既可以满足外部用户对API简单易用的需求,又可以满足内部服务之间高性能和可靠性的需求。