本帖最后由 逸帅 于 2021-5-27 12:00 编辑
Java后端面试题
前言:昨天进行了cvte的一面,应该是凉了,好多的问题搭上来,记录一下没答出来的问题和答得不好的问题
1、对称加密和非对称加密的区别:
- 对称加密中加密和解密使用的秘钥是同一个;非对称加密中采用两个密钥,一般使用公钥进行加密,私钥进行解密。
- 对称加密解密的速度比较快,非对称加密和解密花费的时间长、速度相对较慢。
- 对称加密的安全性相对较低,非对称加密的安全性较高。
2、前端怎么传输公钥
不会...有没有大佬回答一下
3、HTTPS的原理
HTTPS协议 = HTTP协议 + SSL/TLS协议
https传输过程设计到三个秘钥:服务器端的公钥和私钥,进行非对称加密,客户端生成的四级秘钥,进行对称加密
一次https包含两次http传输,具体过程如下:
- 客户端向服务端发送https请求,链接服务器的443端口
- 服务器将公钥发送给客户端
- 客户端收到服务端的证书后进行检查,验证其合法性,如果公钥合格,那么客户端就会生成一个随机的秘钥,然后用公钥对客户端的秘钥进行加密,第一次http结束
- 客户端将加密后的客户端秘钥发给服务器
- 服务端将客户端发过来的客户端秘钥,用私钥进行非对称解密,得到解密后的秘钥,然后用这个解密后的客户端秘钥对数据进行对称加密
- 将对称加密后的数据发送给客户端
- 客户端将整个数据进行对称解密,得到服务器发送的明文数据
4、MySQL数据库与其他数据库的对比
5、对postgre数据库的了解
postgre是一个自由的对象-关系数据库,支持大部分的SQL标准和现代主流数据库特性,如:复杂查询、外键、触发器、视图、事务、mvcc。增加了一些新的拓展,如:新的数据类型、函数、操作符、聚集函数、索引。
优点:
- 开源、免费的一个关系型数据库
- 性能高,速度快,即使是高并发下,速度也很稳定
- 稳定性强,对比innodb等引擎,崩溃、断电等情况,抗击打能力强
- 不仅是一个关系型数据库,还是一个面向对象数据库,支持嵌套等一些功能
缺点:
- mvcc的多版本控制,会产生很多的版本,需要定期清理
- 分布式集群bug很多
- 并发抢占式,大SQL且优先级高,会阻塞其他的进程
- 数据库扩容耗时特别长
6、数据库的存储引擎
|
MyISAM |
InnoDB |
Memory |
Archive |
事务 |
X |
支持 |
X |
X |
全文索引 |
支持 |
X |
X |
X |
外键 |
X |
支持 |
X |
X |
哈希索引 |
X |
X |
支持 |
X |
存储限制 |
256 TB |
64 TB |
取决于RAM |
无限制 |
7、数据库查询快慢的因素
- 没有用到索引
- 磁盘的IO速度瓶颈
- 出现范围查询或其他原因导致索引失效
- 程序内产生了锁时间过长或出现死锁
- 查询的列太多,返回了不必要的列
- 查询语句写的不好,产生了大量的非必要数据
8、聚簇索引和非聚簇索引的区别
- 聚簇索引:(Innodb)
- 将数据和索引(主索引)放到了一块,索引(主索引)的叶子节点保存了行数据
- 默认是主键,若没有主键则选择一个非空的索引代替,没有这样的列,则会隐式定义一个主键作为聚簇索引
- 非聚簇索引:(MyISAM)
- 将数据与索引分开储存,索引的叶子节点指向了数据对应的位置
9、聚簇索引的查询过程
聚簇索引的主索引树中的叶子节点是直接储存数据的真实地址,辅助索引树的叶子节点指向的是主索引的地址,再由主索引树查询到叶子节点对应的值
假如where id = 1,id为主键则直接由主索引树查询到对应的叶子结点,直接获取行数据
假如where name = ‘zs',这时候就由辅助索引树查询到叶子节点,由叶子节点对应的主索引树的地址,从主索引树的叶子结点,查询到对应的真实地址(遍历了两棵树)
10、非聚簇索引的查询过程
主键索引树和辅助索引树没什么不一样的,两棵树的叶子节点都储存数据的真实地址,两颗索引树是独立的,where条件后面是辅助索引,也不需要去遍历主索引树。
|