复习总结 2023.5.21

一、进程和线程的区别?

1、进程:是操作系统进行资源分配和调度的基本单位,一个进程中至少有一个线程,同一个进程中的多个线程共享进程中的内存空间和系统资源。一个进程中只有一个主线程,如果一个进程中只有一条线程,这条线程就叫做主线程。通常main方法所在的线程叫作主线程,run方法所在的线程叫作子线程。
2、线程:操作系统是把资源分配给进程的,但是CPU资源是被分配给线程的,所以线程是CPU分配的基本单位

二、可重复读和读已提交隔离级别表现的现象是什么,区别是什么样的?

读已提交:指一个事务提交之后,它做的变更才能被其他事务看到,会有不可重复读、幻读的问题
可重复读:指一个事务执行过程中看到的数据,一直跟这个事务启动时看到的数据是一致的,是MySQL InnoDB 引擎的默认隔离级别,解决了不可重复读的问题,并且以很大程度上避免幻读现象的发生。

三、MySql日志文件分为哪几种?

1、redo log 重做日志,确保事务的持久性
2、undo log 回滚日志,确保事务的原子性,用于回滚事务,同时提供mvcc下的非锁定读
3、bin log 二进制日志,用于主从复制场景下,记录master做过的操作
4、relay log 中继日志,用于主从复制场景下,slave通过io线程拷贝master的bin log后本地生成的日志
5、慢查询日志,用于记录执行时间过长的sql,需要设置阈值后手动开启

四、MVCC机制的原理?

MVCC就是多版本并发控制,实现了读写的并发控制,在MySql通过readview 隐藏字段和undolog实现了,比如在可重复读里面,比如开启了一个事务,就生成了一个readview,然后记录现在active的事务,判断查询的数据在这个事务可不可读
索引的类型有哈希索引,B+树索引,而hash索引的时间复杂度是o1,那为什么我们一般情况下不使用哈希索引,而使用b+树索引呢?
因为hash索引只能做一个等值查询,像范围查询是做不到的。还有哈希可能会出现hash碰撞的问题。

五、怎么排查一个慢sql?

如果是在项目中,可以通过SpringAOP去查询这个接口运行的时间,如果是一个sql,可以通过explain的指令去查这个sql的执行计划,可通过开启mysql的慢日志查询,设置好时间阈值,进行捕获

七、SQL注入?

sql注入问题的主要原因就是使用了拼接形式的sql语句,使用预处理对象PrepareStatement可以有效防止sql注入,它使用的是?来动态的设置参数占位符的值,PrepareStatement接口继承了Statement接口
1、PrepareStatement接口:预编译sql对象,动态的设置参数占位符的值,执行效率更快,防止sql注入
2、Statement接口:执行的是静态的sql,也就是一条完整的sql语句

七、http协议的报文的格式?

HTTP 的请求报文分为三个部分:请求行、首部行、实体主体。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个射手座的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值