结尾
这不止是一份面试清单,更是一种”被期望的责任“,因为有无数个待面试者,希望从这篇文章中,找出通往期望公司的”钥匙“,所以上面每道选题都是结合我自身的经验于千万个面试题中经过艰辛的两周,一个题一个题筛选出来再次对好答案和格式做出来的,面试的答案也是再三斟酌,深怕误人子弟是小,影响他人仕途才是大过,也希望您能把这篇文章分享给更多的朋友,让他帮助更多的人,帮助他人,快乐自己,最后,感谢您的阅读。
由于细节内容实在太多啦,在这里我花了两周的时间把这些答案整理成一份文档了,在这里只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
关于脏读,幻读,不可重复读的理解
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标签
6.cookie和session 的区别失效时间
1.cookie数据存放在客户端浏览器上,session数据存放在服务器上
2.cookie不是很安全,别人可以分析存放在本地cookie并进行cookie欺骗,考虑到安全应使用session
3.session会在一定时间内保存在服务器上,当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie
4.单个cookie保存数据不能超过4k,很多浏览器都限制一个站点最多保存20个cookie
5.建议:
将登陆信息等重要信息存放在session
其他信息如果需要保存,可以放在cookie中
8.redis
9.spring controller 用的__什么注解
10.分页的方法
分页工具
https://blog.csdn.net/CHENCHENCHU2018/article/details/79794965?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522158383837619724846412634%2522%252C%2522scm%2522%253A%252220140713.130056874…%2522%257D&request_id=158383837619724846412634&biz_id=0&utm_source=distribute.pc_search_result.none-task
分页方法
https://blog.csdn.net/sp308036654/article/details/44081455?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522158384702819725211932180%2522%252C%2522scm%2522%253A%252220140713.130056874…%2522%257D&request_id=158384702819725211932180&biz_id=0&utm_source=distribute.pc_search_result.none-task
总结
就写到这了,也算是给这段时间的面试做一个总结,查漏补缺,祝自己好运吧,也希望正在求职或者打算跳槽的 程序员看到这个文章能有一点点帮助或收获,我就心满意足了。多思考,多问为什么。希望小伙伴们早点收到满意的offer! 越努力越幸运!
金九银十已经过了,就目前国内的面试模式来讲,在面试前积极的准备面试,复习整个 Java 知识体系将变得非常重要,可以很负责任的说一句,复习准备的是否充分,将直接影响你入职的成功率。但很多小伙伴却苦于没有合适的资料来回顾整个 Java 知识体系,或者有的小伙伴可能都不知道该从哪里开始复习。我偶然得到一份整理的资料,不论是从整个 Java 知识体系,还是从面试的角度来看,都是一份含技术量很高的资料。
份整理的资料,不论是从整个 Java 知识体系,还是从面试的角度来看,都是一份含技术量很高的资料。**
[外链图片转存中…(img-5d3GWbIZ-1715785482050)]