缓存的常见面试题I

上周一位面试官问我,“什么是缓存渗透?”我回答道:“缓存入侵就是请求数据库中没有的数据,每次请求都直接穿透缓存层,直接访问数据库,给数据库带来压力。

然后他问:“那怎么解决呢?”我说:“这个问题可以通过缓存空值来解决。
当数据库查询结果为空时,将key对应的值设置为零,并将过期时间设置为短。
再次查询时,直接返回空值,避免再次访问数据库。

然后他问:“如何使用布隆过滤器?”我回答道:“布隆过滤器使用多个哈希函数将一个键映射到一个位图,并在初始化时标记位图中所有存在的键。
在查询时,如果一个位图被标记为不存在,则直接返回;如果被标记为存在,则必须执行进一步的数据库查询。

他又问,“如何处理布隆过滤器误判?”我说:“允许误判是可能的,比如在推荐系统中,或者使用多级过滤结合其他数据结构来存储一些高频的key,以降低误判率。

然后他问:“缓存入侵、缓存崩溃、缓存雪崩有什么区别?”我回答道:“缓存入侵是请求不存在的数据。
缓存命中是热点key过期,同时有大量查询同时访问数据库。
缓存雪崩是大量key同时过期或者缓存服务宕机。

最后他问我,“在实际场景中如何选择缓存穿透方案?”我说:“低频和不存在的键可以直接返回空值或者使用生存期短的缓存空值。
高频和不存在的键可以使用布隆过滤器+缓存值为零。
如果严禁误估,可以使用规则过滤+数据库查询。
”算了,你自己解决吧。

数据库面试题1

1 . 续订条件不正确且给定的表格必须匹配。
我上周刚刚处理了类似的情况,不得不改变条件所在。

2 默认安装。
预言机默认的顺序是ASC,需要DESC来降序。

3 为团队命名并获得第一个。
row_number 非常有用,我经常使用它。

4 update语句有问题。
这里必须更改e.name=t.name,否则会产生错误。

5 两个选择的语法不正确。
rownum是行号,但是这样写不行。
您必须使用分析功能。

说白了,这些问题考验的是你对Oracle函数的熟悉程度。
你自己看看吧。

MySQL面试题-数据库基础知识

1 . 为什么使用数据库? 直接使用数据库来高效管理数据并简化查询。
内存速度很快,但断电后就会丢失,文件速度很慢且难以查看。
数据库将两者结合起来,使用SQL可以方便地检查和修改数据,并且还可以进行备份权限管理。

上周我刚刚在做一个项目。
我是直接写文件,没有数据库。
我花了很长时间通过代码更改数据,最后我直接在MySQL中更改。

2 什么是 SQL? SQL是查询数据库的命令语言。
可以进行增、删、改、查、建表、修改结构等操作。
说白了:就是普通话与数据库通信。

3 什么是 MySQL? MySQL是企业使用的数据库软件,现在由Oracle管理。
它特别适合创建网站,免费且速度快。
我正在做的项目使用MySQL。

4 三种主要的数据库范式是什么? 第三范式是避免重复数据并保持数据干净。
第一范式:列不能拆分,所有数据都是独立的。
第二范式:非主键只能基于主键,而不是部分。
第三范式:非主键不依赖于其他非主键。

但有时,为了快速,我们很容易违反这三个范式。
我还在看这里的细节。

5 MySQL中哪些表与权限相关? MySQL 使用权限表来管理用户可以执行的操作。
用户表:管理全局权限以及谁可以连接到服务器。
DB表:哪个库可以做什么? table_priv表:它控制哪个表可以做什么。
columns_priv表:哪一列可以做什么。
主机表:控制可以连接哪台计算机。

6 MySQL的Binlog有几种输入格式? Binlog有三种格式: Statement(SQL语句):记录SQL命令,节省空间,但可能会导致错误。
行(Line Record):记录每一行的变化,但文件较大。
混合(mixed):语句用于一般用途,行用于特殊用途。

我通常建议使用混合来平衡性能和准确性。
您尝试过哪些?