不会的东西真多啊,,,
1.幻读的发生条件,现象?
(面试官说我说的不准,我说的是两个事务并发执行,其他事务的数据插入删除引起的问题。我举的例子是两次查询count,结果集不一样,但其实这个不是幻读,是不可重复读的一种。)
幻读,并不是说两次读取获取的结果集不同,幻读侧重的方面是某一次的 select 操作得到的结果所表征的数据状态无法支撑后续的业务操作。更为具体一些:select 某记录是否存在,不存在,准备插入此记录,但执行 insert 时发现此记录已存在,无法插入,此时就发生了幻读。
https://www.jb51.net/article/251790.htm
2.程序的局部性原理?
说到局部性原理,那我们首先要知道什么是局部性原理,局部性原理分为两部分:
- 时间局部性:指的是在程序运行过程中最近被引用到的存储器位置在程序执行后期还会被多次引用到的可能性很大。
- 空间局部性:指的是程序运行过程中如果一个存储器的位置被引用,那么在程序执行后期该存储器附近的位置被引用的可能性很大。
简单来说就是一个变量在程序运行过程中,如果被引用过一次,那后续很有可能会再被引用到;一个变量被访问到过后,这个变量所在的位置附近的位置很有可能在程序后续运行中被访问到。
应用就是,比如cacheline,每次会拿一批数据。
其实我们的局部性原理不单单是上面提到的狭义性的局部性,还可以是广义的局部性。我们系统里面的热点数据,CDN 数据,微博的热点流量等等这些都利用了局部性原理。只是我们可能没有意识到而已,实际上已经在使用了。我们会通过 Redis 缓存热点数据,会通过 CDN 提前加载图片或者视频资源,等等,都是因为这些数据本身就符合局部性原理,合理的利用局部性可以得到了能效、成本上的提升。
缺点就是,常见的数据库单分片热点问题。