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

简介: Linux运维工程师面试题(4)1 redis 常用的数据类型2 redis 数据持久化有几种,区别是什么,如何选择3 redis 有哪些架构模式4 什么是缓存雪崩?如何解决?5 什么是缓存穿透?如何解决?6 什么是缓存击穿?如何解决?7 redis 为什么这么快8 Redis 常用命令9 SQL 语句分类10 多表查询

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).

相关实践学习
CentOS 7迁移Anolis OS 7
龙蜥操作系统Anolis OS的体验。Anolis OS 7生态上和依赖管理上保持跟CentOS 7.x兼容,一键式迁移脚本centos2anolis.py。本文为您介绍如何通过AOMS迁移工具实现CentOS 7.x到Anolis OS 7的迁移。
目录
相关文章
|
15天前
|
存储 运维 搜索推荐
|
2月前
|
网络协议 网络架构
OSPF邻居关系建立失败?揭秘网络工程师面试中最常见的难题,这些关键步骤你掌握了吗?网络配置的陷阱就在这里!
【8月更文挑战第19天】OSPF是网络工程中确保数据高效传输的关键协议。但常遇难题:路由器间无法建立OSPF邻居关系,影响网络稳定并成为面试热点。解决此问题需检查网络连通性(如使用`ping`),确认OSPF区域配置一致(通过`show running-config`),校准Hello与Dead计时器(配置`hello`和`dead`命令),及核查IP地址和子网掩码正确无误(使用`ip address`)。系统排查上述因素可确保OSPF稳定运行。
67 2
|
2月前
|
运维 Kubernetes 关系型数据库
云计算运维工程师面试技巧
【8月更文挑战第6天】
304 1
|
3月前
|
弹性计算 运维 Linux
运维工程师必备的摸鱼神器:阿里云智能助手OS Copilot
OS Copilot 概述与体验评测摘要 阿里云的OS Copilot是一款基于大模型的智能操作系统助手,作为高级运维工程师,体验者发现它在系统诊断和性能优化上尤其有用,简化了如重置ECS密码和安全组配置等任务,提升了工作效率。 OS Copilot的易用性和安全性得到肯定,操作手册详细且交互性强,减少了用户在不同页面间切换的需要。在辅助编程方面,它能帮助非专业开发者编写和理解代码,对运维工作中的开发技能补充有很大帮助。与GitHub Copilot等产品相比,OS Copilot的独特之处在于结合了Linux操作的支持。
210 3
运维工程师必备的摸鱼神器:阿里云智能助手OS Copilot
|
3月前
|
算法 网络协议 Linux
|
3月前
|
运维 知识图谱 Python
专为运维工程师设计!阿里藏经阁出品的Python实战手册被我搞来了
Python 可能是极少数既简单又强大的编程语言中的一种。更重要的是,用它来编程是非常快乐的事。 今天给小伙伴们分享的是阿里“藏经阁”出品的专门给运维工程师设计的Python实战手册
|
4月前
|
存储 异构计算 内存技术
【硬件工程师面试宝典】常见面试题其一
- Setup时间:时钟前数据需稳定的最小时间。 - Hold时间:时钟后数据需保持稳定的时间。 - 竞争现象:不同路径信号汇合导致输出不稳定。 - 冒险现象:竞争引起的短暂错误状态。 - D触发器实现2倍分频电路。
83 5
|
4月前
|
运维 数据库 网络架构
详尽分享运维网络面试题101道
详尽分享运维网络面试题101道
178 0
|
4月前
【硬件工程师面试宝典】常见面试题其二
检查单片机上电不运行:电源电压、时钟信号、复位电路、程序烧录。三极管特性:输出特性曲线和转移特性曲线。频率响应指系统对不同频率信号的响应,稳定要求幅度和相位不变。改变响应曲线方法:调整反馈、使用滤波器、改变元件参数。差分运放相位补偿通过在反馈回路加电容,波特图显示补偿效果。基本放大电路类型有共射、共集、共基,差分结构用于抗干扰和提高共模抑制比。电阻电容串联,电容电压为低通滤波,电阻电压为高通滤波。选择电阻考虑阻值、功率、温度系数、精度和尺寸。CMOS电路传递低电平用N管。电流偏置电路通过R1、Q1产生稳定电流。施密特电路回差电压由R1、R2决定。LC振荡器的哈特莱、科尔皮兹、克拉
48 0