本文共 3313 字,大约阅读时间需要 11 分钟。
组件:注册中心eureka,网关zuul,负载均衡ribbon,配置中心config,熔断器…
eureka自我保护机制:不会立马挂掉
负载均衡策略:轮询、权重、一致性hash、最小活跃度
熔断器:
一级缓存:一次查询之后放入一级缓存,下一次直接从缓存中取,能满足日常需求
二级缓存:
开启方式:在mybatis配置文件中开启,并在mybatis.xml中打上cache标签
弊端:不太友好,可使用Redis替代
缓存雪崩:大量请求到达数据库;
发生场景:redis中的key大量同时过期,请求直接到达数据库
解决办法:在给key设置过期时间时,不用固定的时间,可使用随机时间;对于热点key,可设置较长过期时间;
缓存穿透:Redis和数据库都没有该数据,导致每次的恶性循环
发生场景:恶意攻击
解决办法:
select、update、where、if、trim、
sql、include
foreach、when
接口和xml的绑定:
1. xml的namespace指定接口类全路径2. xml中sql的id与接口中方法名一致
#防止sql注入
$相当于拼接,会引起sql注入
### 1. mysql索引底层数据结构是什么样的
答:
索引(.frm文件):
类型:唯一索引、组合索引、聚集索引、非聚集索引
优点:提高查询效率
缺点:牺牲了插入删除等性能,因为每次数据变更都需要重新维护索引结构,所以创建的时候对经常变更的字段不应该建立索引
索引底层数据结构:hash和B+tree
mysql搜索引擎:myisam和innodb,都支持hash和B+tree
默认可重复读
可重复读:
不可重复读:
脏读:
幻读:
count、max、min、
limit(开始索引,条数)
cookie
session
字符串转数组,遍历+1
indexof、substring、split、replace、trim、
加载和实例化——初始化——请求处理——服务终止
http | https(http+ssl) | |
---|---|---|
安全性 | 明文传输,不安全 | 加密传输,使用会话密钥进行对称加密,减少加密耗费时间 |
状态 | 无状态 | 无状态 |
客户端 | 服务端 |
---|---|
1.支持的协议版本,比如TLS 1.0版2.一个客户端生成的随机数,稍后用于生成"对话密钥"3.支持的加密方法,比如RSA公钥加密4.支持的压缩方法 | |
1.确认使用的加密通信协议版本,比如TLS 1.0版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信。2.一个服务器生成的随机数,稍后用于生成"对话密钥"3.确认使用的加密方法,比如RSA公钥加密4.服务器证书 | |
验证服务器证书1.一个随机数pre-master key。该随机数用服务器公钥加密,防止被窃听2.编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥(客户端+服务端+pre-master key)发送3.客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供服务器校验4.发送证书及相关信息(非必须,如果服务器要求的话,会发送客户端证书) | |
1.编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥(客户端+服务端+pre-master key)发送2.服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供客户端校验 |
为什么要有第三个随机数pre-master key的存在?
答:SSL协议不信任每个主机都能产生完全随机的随机数,如果随机数不随机,那么pre master secret就有可能被猜出来,因此必须引入新的随机因素,那么客户端+服务器+pre-master key三个随机数一同生成的密钥就不容易被猜出了
tcp三次握手、四次挥手
挥手:time_wait主动挥手时才有
tcp | udp | |
---|---|---|
共同点 | 同属于tcp/ip协议簇 | |
是否连接 | 通信之前要建立安全连接,三次握手连接 | 无需连接 |
传输可靠性 | 可靠 | 不可靠 |
速度 | 慢 | 快 |
数据量 | 大量 | 少量 |
新建、就绪、运行、阻塞、死亡
思路: 可以说一下jps,top ,jstack这几个命令,再配合一次排查线上问题进行解答。
我的答案:
输入jps,获得进程号。
top -Hp pid 获取本进程中所有线程的CPU耗时性能 jstack pid命令查看当前java进程的堆栈状态 或者 jstack -l > /tmp/output.txt 把堆栈信息打到一个txt文件。 可以使用fastthread 堆栈定位,fastthread.io/https://blog.csdn.net/qq_41701956/article/details/100074023 第10点
线程共享:
方法区:存放字符串常量、静态变量
堆:new的对象
线程私有:
栈:对象的引用地址
本地方法栈:
程序计数器:
单例的懒汉、饿汉模式
懒汉模式:在被调用的时候才创建;
饿汉模式:
有三部分组成:头部+载荷+签名
.
连接组成的字符串,然后通过header中声明的加密方式进行加密 完整的头部就像下面这样的JSON:
{ 'type': 'JWT', 'alg': 'SHS256'}
缺点:消耗性能
使用session,分布式可能存在的问题:
session只有每次请求都在登录的这台服务器上,用户才能认证成功;
解决方式:用Redis集群来存放session