1.从页面点击到接口收到请求之间,spring的运行过程是怎样的
2.分布式事务
3.线程池
4.乐观锁悲观锁
5.数据库索引的原理
6.http协议
7.微服务的注册发现的了解
-----------------------------------------------------------------------------------
1.从页面点击到接口收到请求之间,spring的运行过程是怎样的
用户发送请求到前端控制器,前端控制器根据url找到并生成处理对象,再调用处理器生成modelAndview,再视图解析、页面渲染,返回给用户
2.分布式事务
3.线程池
参数:
核心线程数、最大连接数、存活时间、时间单位、工作队列、拒绝策略、使用的工厂
工作队列:阻塞队列(数量在核心线程数和最大连接数之间)、无界队列(没有最大连接,可以一直创建)、无缓存(一超过最大直接拒绝线程)
拒绝策略(当超过最大连接数时):直接丢弃并抛异常、直接丢弃、丢弃最早的把当前任务加入、线程池没有关闭则直接调用线程的run方法
4.乐观锁悲观锁
乐观锁:觉得别人不使用,没加锁,所以只要在更新的时候加上当前状态的判断,根据更新条数判断结果。读多写少时使用
悲观锁: 每次读写都加锁,sychronized
5.数据库索引的原理
将索引字段的键存在BTree中,不需要再全表数据扫描。
缺点是占用空间,并且增删改的效率会降低
6.http协议
建立连接----三次握手:
第一次 A将位码和随机数据包发送给B,让B知道A要求建立连接
第二次 B收到后确认后,将A的随机码加1,再生成一个随机码发送给A
第三次 A收到确认自己的随机码,再将B的随机码+1传给B,B确认通过后建立连接。
断开连接---四次挥手:
第一次:客户端向服务端发送连接释放报文
第二次:服务端向客服端发送应答报文
第三次:服务端向客户端发送释放连接报文
第四次:客户端向服务端发送应答报文
为什么建立连接要三次 而断开连接要四次?
因为客户端只要想建立连接,服务端随时准备着,而客户端想要断开连接时,服务端需要确认数据已经全部发送给客户端,所以多一次。
7.微服务的注册发现的了解,注册中心崩了会怎样
8.mybatis的$和#的区别
#是传入成字符串(加双引号),$是传入什么就是什么
#可以防止sql注入,能用#就用#,$主要用在数据库字段比如表名,ORDER BY 变量必须使用$
9.count(1)、count(*)、count(列名)的区别
count(1)和count(*)不忽略null值;count(列名)忽略null值 如果列名为主键count(列名)效率高
count(*),自动会优化指定到那一个字段。所以没必要去count(1)