每天一套面试题-Day27-八股高频(8)

链接题目来自牛客

我的每日一套面试题专栏,每天更新一起打卡

43.请你说一下抽象类和接口的区别

区别:1、抽象类定义的关键字是abstract class,接口定义的关键字是interface;2、属性上,抽象类可以有静态变量、常量和实例变量,接口只能有常量; 3、抽象类可以定义类的全部普通成员,接口只能定义常量和抽象方法抽。抽象类可以有普通方法,而接口jdk1.8之前只能有抽像方法(1.8之后,增加了静态方法和默认方法,JDK9之后增加了私有方法);4、抽象类可以有构造方法,接口不可以有构造方法。5、一个类只能单继承一个父类,而一个接口可以继承多个父接口,同时,一个类可以实现多个接口却没有实现多个父类这一说法;6、抽象类在业务编程上更像一个模板,有自己的功能,同时也可以有优化补充的多种形式,而接口更像是一种规范和要求,实现就要按照要求来进行。接口更适合做功能的解耦合,解耦合性更强

———————————————— 链接:https://blog.csdn.net/2301_80096362/article/details/142644397

44.什么是数据库事务?

数据库事务是由一组不可分割的数据库操作序列组成的逻辑单元,确保操作要么全部成功(提交),要么全部失败(回滚),以维护数据的完整性和一致性。 事务有四大特性,ACID 我的博客 alt

45.HTTPS 的「秘钥交换 + 证书校验」全流程

alt alt HTTPS 的 TLS 握手流程,其核心目标就是两个:第一,通过证书校验来验证服务器的身份,防止中间人攻击;第二,通过密钥交换算法,安全地协商出一个只有双方知道的对称会话密钥,用于后续的高效加密通信

第一步:建立连接与协商基础

TCP 连接建立: 首先,客户端(比如浏览器)会和服务器通过 TCP 三次握手,建立一个可靠的网络连接。这是所有通信的基础。” ClientHello & ServerHello: “接着,客户端会发送一个 ClientHello 消息,里面主要包括:一个客户端生成的随机数(Client Random)、以及客户端支持的密码套件列表(比如 RSA 或 ECDHE)。 服务器回应一个 ServerHello 消息,从中选出双方都支持的最强密码套件,并也生成一个服务器随机数(Server Random)发给客户端。” (至此,双方有了两个随机数,并确定了加密算法组合。)

第二步:核心环节一 —— 证书校验

“接下来就是身份验证的关键环节。服务器会将自己的 数字证书 发送给客户端。 客户端收到后,会进行严格的证书校验:

验证证书链:我会检查证书是否由可信的颁发机构签发。浏览器和操作系统里预置了受信任的根CA证书。会用根CA的公钥去验证中间CA的签名,再用中间CA的公钥去验证服务器证书的签名,只要有一环验证失败,就认为身份不可信。 验证内容:还会检查证书的有效期是否过期,以及证书上绑定的域名是否与正在访问的网站一致。 只有所有这些校验都通过,才会信任这个服务器,并使用证书里携带的服务器公钥进行后续操作。 如果失败,浏览器就会给用户显示警告。”

第三步:核心环节二 —— 密钥交换

“身份确认后,双方就要安全地协商出后续通信用的对称密钥了。以两种常见的密钥交换方式为例:

如果是 RSA 算法: “客户端会生成第三个随机数,叫做 预备主密钥。然后,用刚才证书里拿到的服务器公钥加密这个预备主密钥,通过 ClientKeyExchange 消息发送给服务器。只有拥有对应私钥的服务器才能解密它。这样,双方就都拥有了客户端随机数、服务器随机数和预备主密钥。”

如果是现在更推荐的 ECDHE 算法: “服务器会在证书发送后,发送一个 ServerKeyExchange 消息,包含它的椭圆曲线参数和公钥。客户端也生成自己的参数和公钥,通过 ClientKeyExchange 发送回去。然后,双方利用迪菲-赫尔曼密钥交换协议的原理,各自在本地计算,最终得到一个相同的共享密钥,这个共享密钥就作为预备主密钥。这种方式的好处是提供了前向保密,即使服务器私钥未来泄露,过去的通信也无法被解密。”

“无论哪种方式,现在客户端和服务器都拥有了三个共同的随机要素:Client Random, Server Random, 和 Premaster Secret。它们会通过一个伪随机函数(在握手过程中,当密码套件被确认时,双方也就明确了将使用哪一种伪随机函数(在TLS 1.2中)或为固定的伪随机函数提供了哪个参数(在TLS 1.3中)),共同计算出最终的 主密钥 和 会话对称密钥。”

第四步:收尾与安全通道建立

为了确认握手过程没有被篡改,并且密钥已经协商成功: 客户端和服务器会互相发送一个 Finished 消息。这个消息是用刚刚生成的会话密钥加密的,并且包含了之前所有握手消息的摘要。 对方收到后,会尝试解密并验证摘要。如果验证成功,就说明整个握手过程是安全且一致的。在这之前,双方会先发送 ChangeCipherSpec 消息,通知对方:‘从现在起,我们之后所有的通信都要用刚才商量好的密钥来加密了’。

至此,TLS 握手全部完成。一个安全的加密通道就建立起来了,之后所有的 HTTP 请求和响应都会在这个加密通道里进行。

**证书体系解决了‘你是谁’的身份问题,非对称加密的密钥交换解决了‘如何安全地传小纸条’的问题,最后再由高效的对称加密来负责‘之后的大量秘密通信’。

46.说说Redis的缓存淘汰策略。

alt

47.ThreadLocal 的用法和实现原理。

我的博客

#面试真题#
每日一套面试真题 文章被收录于专栏

记录刷过的面试真题

全部评论

相关推荐

notbeentak...:孩子,说实话,选择很重要,可能你换一个方向会好很多,但是现在时间不太够了,除非准备春招
点赞 评论 收藏
分享
淬月星辉:专利是什么?至少描述一下吧,然后把什么计算机二级、普通话这种拉低格调的证书删掉,不然hr以为你没东西写
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务