Java面试核心知识点笔记
其中囊括了JVM、锁、并发、Java反射、Spring原理、微服务、Zookeeper、数据库、数据结构等大量知识点。
Java中高级面试高频考点整理
最后分享Java进阶学习及面试必备的视频教学
6、抽象方法只能申明,不能实现,接口是设计的结果 ,抽象类是重构的结果
7、抽象类里可以没有抽象方法
8、如果一个类里有抽象方法,那么这个类只能是抽象类
9、抽象方法要被实现,所以不能是静态的,也不能是私有的。
10、接口可继承接口,并可多继承接口,但类只能单根继承。
当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。
抽象类的功能要远超过接口,但是,定义抽象类的代价高。因为高级语言来说(从实际设计上来说也是)每个类只能继承一个类。在这个类中,你必须继承或编写出其所有子类的
所有共性。虽然接口在功能上会弱化许多,但是它只是针对一个动作的描述。而且你可以在一个类中同时实现多个接口。在设计阶段会降低难度的。
接口的使用
接口:interface
在PHP中,我们可以规定,一个对象应该具有哪些公共的外部操作,即可使用interface来规定。
公共的方法就是接口。用于规定一个对象应该用于哪些公共的操作方法(接口),这个也叫接口(公共操作方法的集合)
即:接口(interface结构,公共方法集合)
公共方法(接口方法)
定义:用于限定某个对象所必须拥有的公共操作方法的一种结构,称之为接口(interface)
语法:定义接口结构,使用interface关键字。接口内定义的都是一些公共方法。
2.脏读与幻读
关于脏读,幻读,不可重复读的理解
1.什么是脏读
脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交 到数据库中,这时,另外一个事务也访问了这个数据,然后使用了这个数据
例子
1.Mary的原工资为1000, 财务人员将Mary的工资改为了8000(但未提交事务) 2.Mary读取自己的工资 ,发现自己的工资变为了8000,欢天喜地! 3.而财务发现操 作有误,回滚了事务,Mary的工资又变为了1000 像这样,Mary记取的工资数8000是 一个脏数据。
2. 什么是幻读
是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的 数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也 修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会 发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了 幻觉一样。
例子
目前工资为1000的员工有10人。
事务1,读取所有工资为1000的员工。
这时事务2向employee表插入了一条员工记录,工资也为1000
事务1再次读取所有工资为1000的员工 共读取到了11条记录
解决办法:如果在操作事务完成数据处理之前,任何其他事务都不可以添加 新数据,则可避免该问题
不可重复读的重点是修改 :
同样的条件, 你读取过的数据,再次读取出来发现值不一样了
幻读的重点在于新增或者删除
同样的条件, 第 1 次和第 2 次读出来的记录数不一样
3.什么是不可重复读
是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外 一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间, 由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一 样的。这样在一个事务内两次读到的数据是不一样的,因此称为是不可 重复读
例子
在事务1中,Mary 读取了自己的工资为1000,操作并没有完成
在事务2中,这时财务人员修改了Mary的工资为2000,并提交了事务.
在事务1中,Mary 再次读取自己的工资时,工资变为了2000
解决办法:如果只有在修改事务完全提交之后才可以读取数据,则可以避免该问题。
3.隔离级别
事务的四大特性分别是:原子性、一致性、隔离性、持久性
幻读和不可重复读都是在同一个事务中多次读取了其他事务已经提交的事务的数据导致每次读取的数据不一致,所不同的是不可重复读读取的是同一条数据,而幻读针对的是一批数据整体的统计(比如数据的个数)
以MYSQL数据库来分析四种隔离级别
第一种隔离级别:Read uncommitted(读未提交)
如果一个事务已经开始写数据,则另外一个事务不允许同时进行写操作,但允许其他事务读此行数据,该隔离级别可以通过“排他写锁”,但是不排斥读线程实现。这样就避免了更新丢失,却可能出现脏读,也就是说事务B读取到了事务A未提交的数据
解决了更新丢失,但还是可能会出现脏读
第二种隔离级别:Read committed(读提交)
如果是一个读事务(线程),则允许其他事务读写,如果是写事务将会禁止其他事务访问该行数据,该隔离级别避免了脏读,但是可能出现不可重复读。事务A事先读取了数据,事务B紧接着更新了数据,并提交了事务,而事务A再次读取该数据时,数据已经发生了改变。
解决了更新丢失和脏读问题
第三种隔离级别:Repeatable read(可重复读取)
可重复读取是指在一个事务内,多次读同一个数据,在这个事务还没结束时,其他事务不能访问该数据(包括了读写),这样就可以在同一个事务内两次读到的数据是一样的,因此称为是可重复读隔离级别,读取数据的事务将会禁止写事务(但允许读事务),写事务则禁止任何其他事务(包括了读写),这样避免了不可重复读和脏读,但是有时可能会出现幻读。(读取数据的事务)可以通过“共享读镜”和“排他写锁”实现。
解决了更新丢失、脏读、不可重复读、但是还会出现幻读
第四种隔离级别:Serializable(可序化)
提供严格的事务隔离,它要求事务序列化执行,事务只能一个接着一个地执行,但不能并发执行,如果仅仅通过“行级锁”是无法实现序列化的,必须通过其他机制保证新插入的数据不会被执行查询操作的事务访问到。序列化是最高的事务隔离级别,同时代价也是最高的,性能很低,一般很少使用,在该级别下,事务顺序执行,不仅可以避免脏读、不可重复读,还避免了幻读
解决了更新丢失、脏读、不可重复读、幻读(虚读)
4.事务四大特性
如果一个数据库声称支持事务的操作,那么该数据必须具备以下四个特性:
原子性、一致性、隔离性、持久性
原子性(Atomicity)
一次事务中如果进行多个数据操作的业务,最终的结果要么所有操作都成功,要么所有操作都失败
DEMO:转账
A转账给B,转了1000元,最终的结果要求:A的账户减少1000元,B的账户增加1000元,不能出现A账户减少了,但是B没有增加
1
一致性(Consistency)
一致性就是数据表的数据更新要求合乎逻辑的特性,满足了原子性不一定满足一致性。
DEMO:转账
A转账给B1000元,最终结果:A账户减少1000元,但B账户增加100元,此时事务是满足原子性的,但是不合乎逻辑,就不满足事务的一致性了
1
隔离性(Isolation)
隔离性是当多个用户并发访问数据库时,此时同时操作一条数据,数据库为每一个用户开启的事务(为该数据上锁,其它事务在上一个事务操作完毕之前是不能操作该数据的),不能被其它事务的操作所干扰,多个并发事务之间要互相隔离
持久性(Durability)
持久性是指一个事务一旦被提交(COMMIT)了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
5.mybatis dao中的xml标签
写在最后
还有一份JAVA核心知识点整理(PDF):JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算…
,JAVA算法,数据结构,加密算法,分布式缓存**,Hadoop,Spark,Storm,YARN,机器学习,云计算…
[外链图片转存中…(img-qYDhnl2W-1715785415835)]