周一
1、事务四大特征 并详细说明
① 原⼦性(Atomicity):⼀个事务中的所有操作,要么全部执⾏成功,要么全部执⾏失败。
原⼦性是事务最重要的特性,全部执⾏失败并不是不执⾏,⽽是通过逆操作 rollback(回滚)数据。
② ⼀致性(Consistency):⼀个事务在执⾏前后数据必须保持⼀种合法的状态,事务总是从⼀个⼀致状态到另⼀个⼀致状态。
③ 隔离性(Isolation):多个事务并发访问时,事务之间是相互隔离的,⼀个事务不应该被其他事务⼲扰,多个并发事务之间要相互隔离。
④ 持久性(Durability):事务执⾏完成之后,它所做的所有修改都是永久的(不会丢失)。
2、脏读 幻读 不可重复读
①脏读:⼀个事务读取到了另⼀个事务修改的数据之后,后⼀个事务⼜进⾏了回滚操作,从⽽导致第⼀个事务读取的数据是错误的。
②不可重复读:在⼀个事务中,两次查询同⼀条数据得到了不同的结果就是不可重复读。在⼀个事务两次查询中间,另⼀个事务把这条数据修改了。
③幻读:当同⼀查询在不同时间产⽣不同的结果,就是事务中的幻读问题。
3、索引的优点缺点
- 优:
协助快速查询、更新数据库表中数据。 - 缺:
增加了数据库的存储空间
在插入和修改数据时要花费较多的时间(因为索引也要随之变动)。
4、索引失效的场景 五条至少
- 不满足最左匹配原则
- 使用了select *
- 索引列上有计算
- 索引列用了函数
- 字段类型不同
- like左边包含%
- 列对比
- 使用or关键字
- not in和not exists
原文:https://blog.csdn.net/guoqi_666/article/details/122484441?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168950643316800197048528%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=168950643316800197048528&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-122484441-null-null.142v88control_2,239v2insert_chatgpt&utm_term=%E7%B4%A2%E5%BC%95%E5%A4%B1%E6%95%88%E7%9A%84%E5%9C%BA%E6%99%AF&spm=1018.2226.3001.4187
5、SQL优化方案 五条至少
- SQL语句中IN包含的值不应过多
- SELECT语句务必指明字段名称
- 当只需要一条数据的时候,使用limit 1
- 如果排序字段没有用到索引,就尽量少排序
- 如果限制条件中其他字段没有索引,尽量少用or
- 尽量用union all代替union
- 不使用ORDER BY RAND()
- 区分in和exists, not in和not exists
原文:https://blog.csdn.net/qq_20161461/article/details/107745821?ops_request_misc=&request_id=&biz_id=102&utm_term=%E7%B4%A2%E5%BC%95%E4%BC%98%E5%8C%96%E6%96%B9%E6%A1%88&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-1-107745821.142v88control_2,239v2insert_chatgpt&spm=1018.2226.3001.4187
6、final关键字的作用
final关键字可以修饰类、方法和属性。
- 当final修饰类的时候,表明这个类不能被继承。final 类中的所有成员方法都会被隐式地指定为 final方法。
- 当final修饰方法的时候,表明这个方法不能被重写。
- 当final修饰属性的时候,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。
7、instanceof关键字作用
instanceof关键字是Java中的一个运算符,用于检查一个对象是否是某个类的实例,或者是否实现了某个接口。它的作用是判断一个对象是否属于某个特定类型,或者是该类型的子类的实例。
使用instanceof关键字可以进行类型检查,可以在运行时判断对象的类型,以便根据实际情况进行相应的处理。这在编写多态的代码时非常有用。
8、重写和重载的区别
1、重载发生在本类,重写发生在父类与子类之间;
2、重载的方法名必须相同,重写的方法名相同且返回值类型必须相同;
3、重载的参数列表不同,重写的参数列表必须相同。
9、接口和抽象类的区别
抽象类和接口都是Java中的重要概念,它们都可以用来定义抽象的数据类型。但是它们之间有一些区别,具体如下:
-
抽象类可以包含非抽象方法,而接口只能包含抽象方法。
-
类只能继承一个抽象类,但可以实现多个接口。
-
抽象类可以有构造方法,而接口不能有构造方法。
-
抽象类可以有成员变量,而接口只能有常量。
-
抽象类的方法可以有public、protected和default访问修饰符,而接口的方法只能有public访问修饰符。
-
抽象类的子类必须实现所有抽象方法,而实现接口的类必须实现所有接口中的方法。
-
抽象类可以有普通方法,而接口不能有普通方法。
总之,抽象类和接口都是用来定义抽象的数据类型,但是它们的使用场景和语法有所不同。抽象类适合用于定义一些具有共性的类,而接口适合用于定义一些具有相似功能的类。在实际开发中,我们需要根据具体的需求来选择使用抽象类还是接口。
10、String StringBuilder StringBuffer区别
- string是不可变的,一旦创建就不能修改,每次修改都会创建一个新的对象,因此在频繁修改字符串时,效率较低。
- stringbuilder和stringbuffer都是可变的,可以在原有对象上进行修改,因此在频繁修改字符串时,效率较高。
- stringbuilder是线程不安全的,而stringbuffer是线程安全的,因此在多线程环境下,应该使用stringbuffer。
- stringbuilder是JDK1.5之后新增的类,而stringbuffer是早期就存在的类。