乐趣区

关于面试:Linux运维工程师面试题4

Linux 运维工程师面试题(4)

祝各位小伙伴们早日找到本人心仪的工作。
继续学习才不会被淘汰。
地球不爆炸,咱们不放假。
机会总是留给有有筹备的人的。
加油,打工人!

1 redis 罕用的数据类型

  • String:字符串,最根底的数据类型
  • List:列表
  • Hash:哈希对象
  • Set:汇合
  • Sorted Set:有序汇合,Set 的根底上加了个分值

2 redis 数据长久化有几种,区别是什么,如何抉择

rdb 和 aof 两种

aof 相似于 mysql 的二进制日志,它把所有的操作都记录在日志里。而 rdb 就是真正存储的数据,相当于把内存中 redis 的所有数据快照到了磁盘中。

如果次要充当缓存性能,或者能够接受数分钟数据的失落,通常生产环境个别只需启用 RDB 即可,此也是默认值;如果数据须要长久保留,一点也不能失落,能够抉择同时开启 RDB 和 AOF,个别不倡议只开启 AOF。

3 redis 有哪些架构模式

  • 主从复制
  • 哨兵(Sentinel)
  • Redis Cluster

4 什么是缓存雪崩?如何解决?

定义:如果缓存数据设置的过期工夫是雷同的,就会导致在某段时间内缓存同时生效,申请全副走数据库,会导致数据库宕机。

解决办法:

在缓存的时候给过期工夫加上一个随机值,这样就会大幅度的缩小缓存在同一时间过期。

5 什么是缓存穿透?如何解决?

定义:缓存穿透是指查问一个肯定不存在的数据。因为缓存不命中,并且出于容错思考,如果从数据库查不到数据则不写入缓存,这将导致这个不存在的数据每次申请都要到数据库去查问,失去了缓存的意义,申请的数据在缓存大量不命中,导致申请走数据库。

解决办法:

因为申请的参数是不非法的(每次都申请不存在的参数),于是咱们能够应用布隆过滤器(BloomFilter)或者压缩 filter 提前拦挡,不非法就不让这个申请到数据库层!

当咱们从数据库找不到的时候,咱们也将这个空对象设置到缓存里边去。下次再申请的时候,就能够从缓存里边获取了。

这种状况个别会将空对象设置一个较短的过期工夫。

6 什么是缓存击穿?如何解决?

定义:某一个热点 key,在不停地扛着高并发,当这个热点 key 在生效的一瞬间,继续的高并发拜访就击破缓存间接拜访数据库,导致数据库宕机。

解决办法:

设置热点数据 ” 永不过期 ” 加上互斥锁。下面的景象是多个线程同时去查询数据库的这条数据,那么咱们能够在第一个查问数据的申请上应用一个互斥锁来锁住它,其余的线程走到这一步拿不到锁就等着,等第一个线程查问到了数据,而后将数据放到 redis 缓存起来。前面的线程进来发现曾经有缓存了,就间接走缓存。

总结:
雪崩是大面积的 key 缓存生效;穿透是 redis 里不存在这个缓存 key;击穿是 redis 某一个热点 key 忽然生效,最终的受害者都是数据库。

7 redis 为什么这么快

  1. 齐全基于内存,绝大部分申请是纯正的内存操作,十分疾速。数据存在内存中,相似于 HashMap,HashMap 的劣势就是查找和操作的工夫复杂度都是 O(1);
  2. 数据结构简略,对数据操作也简略,Redis 中的数据结构是专门进行设计的;
  3. 采纳单线程,防止了不必要的上下文切换和竞争条件,也不存在多过程或者多线程导致的切换而耗费 CPU,不必去思考各种锁的问题,不存在加锁开释锁操作,没有因为可能呈现死锁而导致的性能耗费;
  4. 应用多路 I/O 复用模型,非阻塞 IO;
  5. 应用底层模型不同,它们之间底层实现形式以及与客户端之间通信的利用协定不一样,Redis 间接本人构建了 VM 机制,因为个别的零碎调用零碎函数的话,会节约肯定的工夫去挪动和申请

8 Redis 常用命令

  • INFO:显示以后节点 redis 运行状态信息
  • SELECT:切换数据库,相当于在 MySQL 的 USE DBNAME 指令
  • KEYS:查看以后库下的所有 key,此命令慎用!
  • BGSAVE:手动在后盾执行 RDB 长久化操作
  • DBSIZE:返回以后库下的所有 key 数量
  • FLUSHDB:强制清空以后库中的所有 key,此命令慎用!
  • FLUSHALL:强制清空以后 redis 服务器所有数据库总的所有 key,即删除所有数据,此命令慎用!

9 SQL 语句分类

  • DDL:Data Defination Language 数据定义语言
    CREATE,DROP,ALTER
  • DML:Data Manipulation Language 数据操纵语言
    INSERT,DELETE,UPDATE
  • DQL:Data Query Language 数据查询语言
    SELECT
  • DCL:Data Control Language 数据管制语言
    GRANT,REVOKE,COMMIT,ROLLBACK

软件开发人员称说:CRUD,对应增查改删

10 多表查问

  • 子查问:在 SQL 语句嵌套着查问语句,性能较差,基于某语句的查问后果再次进行的查问
  • 联结查问:UNION
  • 穿插连贯:笛卡尔乘积,cross join
  • 内连贯:
    等值连贯:让表之间的字段以 ” 等值“建设连贯关系
    不等值连贯
    天然连贯:去掉反复列的等值连贯
  • 外连贯:
    左外连贯:FROM tb1 LEFT JOIN tb2 ON tb1.col=tb2.col
    右外连贯:FROM tb1 RIGHT JOIN tb2 ON tb1.col=tb2.col
    自连贯:本表和本表进行连贯查问

例:

# 子查问,罕用在 WHERE 子句中的子查问
SELECT Name,Age FROM students WHERE Age>(SELECT avg(Age)FROM teachers);

# 联结查问
SELECT Name,Age FROM students UNION SELECT Name,Age FROM teachers;

# 穿插连贯,即笛卡尔乘积,利用 cross join 实现
select stuid,s.name st_name,s.age st_age,tid,t.name te_name,t.age te_age from teachers t cross join students s;

# 内连贯 inner join
select * from students s inner join teachers t on s.teacherid=t.tid;

# 左外连贯,outer 能够省略
select s.stuid,s.name,s.age,s.teacherid,t.tid,t.name,t.age from students s left outer join teachers t on s.teacherid=t.tid;

# 右外连贯
select * from students s right outer join teachers t on s.teacherid=t.tid;

# 自连贯
# 构建表
create table emp (id int auto_increment primary key,name varchar(20),leader_id int);
# 实现自连贯
select e.name,l.name from emp e inner join emp l on e.leader_id=l.id;

对于我
全网可搜《阿贤 Linux》
CSDN、知乎、哔哩哔哩、博客园、51CTO、掘金、思否、开源中国、阿里云、腾讯云、华为云、今日头条、百家号、GitHub、集体博客
公众号:阿贤 Linux
集体博客:blog.waluna.top
https://blog.waluna.top/


原文链接: Linux 运维工程师面试题(4).

退出移动版