Linux运维面试题整理-----(持续更新中)

1、mysql和Oracle的区别是什么?
一、本质的区别
MySQL是一个开源的关系数据库管理系统(RDBMS)。它是世界上使用最多的RDBMS,作为服务器运行,提供对多个数据库的多用户访问。它是一个开源、免费的数据库
Oracle数据库是一个对象关系数据库管理系统(ORDBMS)。它通常被称为Oracle RDBMS或简称为Oracle,是一个收费的数据库。
​
二、数据库安全性
MySQL使用三个参数来验证用户,即用户名,密码和位置
Oracle使用了许多安全功能,如用户名,密码,配置文件,本地身份验证,外部身份验证,高级安全增强功能等
​
三、SQL语法的区别
Oracle的SQL语法与MySQL有很大不同。Oracle为称为PL / SQL的编程语言提供了更大的灵活性。Oracle的SQL * Plus工具提供了比MySQL更多的命令,用于生成报表输出和变量定义
​
四、对事务的提交
MySQL默认是自动提交,
Oracle默认不自动提交,需要用户手动提交,需要在写commit;指令或者点击commit按钮
​
五、存储上的区别
与Oracle相比,MySQL没有表空间,角色管理,快照,同义词和包以及自动存储管理。
​
六、分页查询
MySQL是直接在SQL语句中写"select… from …where…limit x, y",有limit就可以实现分页
Oracle则是需要用到伪列ROWNUM和嵌套查询
​
七、MySQL和Oracle的字符数据类型比较
两个数据库中支持的字符类型存在一些差异。对于字符类型,MySQL具有CHAR和VARCHAR,最大长度允许为65,535字节(CHAR最多可以为255字节,VARCHAR为65.535字节)
​
Oracle支持四种字符类型,即CHAR,NCHAR,VARCHAR2和NVARCHAR2; 所有四种字符类型都需要至少1个字节长; CHAR和NCHAR最大可以是2000个字节,NVARCHAR2和VARCHAR2的最大限制是4000个字节。可能会在最新版本中进行扩展
​
八、事务隔离级别
​
MySQL是repeatable read的隔离级别
Oracle是read commited的隔离级别,同时二者都支持serializable串行化事务隔离级别,可以实现最高级别的读一致性。每个session提交后其他session才能看到提交的更改。Oracle通过在undo表空间中构造多版本数据块来实现读一致性,每个session查询时,如果对应的数据块发生变化,Oracle会在undo表空间中为这个session构造它查询时的旧的数据块MySQL没有类似Oracle的构造多版本数据块的机制,只支持repeatable read的隔离级别。一个session读取数据时,其他session不能更改数据,但可以在表最后插入数据。session更新数据时,要加上排它锁,其他session无法访问数据
​
九、MySQL和Oracle中的备份类型
MySQL有mysqldump和mysqlhotcopy备份工具。在MySQL中没有像RMAN这样的实用程序。
Oracle提供不同类型的备份工具,如冷备份,热备份,导出,导入,数据泵。Oracle提供了最流行的称为Recovery Manager(RMAN)的备份实用程序。使用RMAN,我们可以使用极少的命令或存储脚本自动化我们的备份调度和恢复数据库。
​
十、字符串的模糊比较
​
MySQL里用 字段名 like ‘%字符串%’
Oracle里也可以用 字段名 like ‘%字符串%’ 但这种方法不能使用索引, 速度不快,用字符串比较函数 instr(字段名,‘字符串’)>0 会得到更精确的查找结果
​
​
​
十一、并发性
MySQL以表级锁为主,对资源锁定的粒度很大,如果一个session对一个表加锁时间过长,会让其他session无法更新此表中的数据。虽然InnoDB引擎的表可以用行级锁,但这个行级锁的机制依赖于表的索引,如果表没有索引,或者sql语句没有使用索引,那么仍然使用表级锁
​
​
​
Oracle使用行级锁,对资源锁定的粒度要小很多,只是锁定sql需要的资源,并且加锁是在数据库中的数据行上,不依赖与索引。所以Oracle对并发性的支持要好很多
​
​
​
十二、性能诊断
MySQL的诊断调优方法较少,主要有慢查询日志。
Oracle有各种成熟的性能诊断调优工具,能实现很多自动分析、诊断功能。比如awr、addm、sqltrace、tkproof等
​
​
​
十三、日期字段的处理转换
MySQL中有2种日期格式DATE和TIME
Oracle只有一种日期格式DATE。
​
​
​
十四、 空字符的处理
MySQL的非空字段也有空的内容
Oracle里定义了非空字段就不容许有空的内容。按MySQL的NOT NULL来定义Oracle表结构, 导数据的时候会产生错误。因此导数据时要对空字符进行判断,如果为NULL或空字符,需要把它改成一个空格的字符串
2、mysql数据类型有多少种?
数值类型:
整数类型:TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT
浮点数类型:FLOAT、DOUBLE、DECIMAL
​
字符串类型:
字符串:CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM、SET
​
日期和时间类型:
DATE、TIME、DATETIME、TIMESTAMP、YEAR
​
布尔类型:BOOL、BOOLEAN
​
集合类型:
SET:表示一个无序的字符串集合,可以存储多个值
ENUM:表示一个有序的字符串集合,只能存储列表中的某个值。
​
​
​
二进制类型:
BLOB:存储二进制大对象,如图像、音频、视频等。
VARBINARY:存储可变长度的二进制字符串。
3、mysql约束条件有多少种
约束条件                        说明
PRIMARY KEY (PK)        标识该字段为该表的主键,可以唯一的标识记录,不可以为空 UNIQUE + NOT NULL
​
FOREIGN KEY (FK)        标识该字段为该表的外键,实现表与表之间的关联
​
NULL                    标识是否允许为空,默认为NULL。
​
NOT NULL                标识该字段不能为空,可以修改。
​
UNIQUE KEY (UK)         标识该字段的值是唯一的,可以为空,一个表中可以有多个UNIQUE KEY
​
AUTO_INCREMENT          标识该字段的值自动增长(整数类型,而且为主键)
​
DEFAULT                 为该字段设置默认值
​
UNSIGNED                无符号,正数
4、Mysql5.7版本和Mysql 8.0版本的区别
MySQL 5.7和MySQL 8.0之间有以下几个主要区别:
版本功能区别:
MySQL 5.7版本已经是一个非常稳定的成熟的版本,在安全性和性能方面进行了很多的改进,但而MySQL 8.0版在高并发、数据库复杂查询、在线备份恢复等方面有很大的提升。
​
性能改进:MySQL 8.0版本在IO密集型工作负载与高竞争工作负载时相比MySQL 5.7有更好的性能。
​
功能改进:MySQL 8.0版本在高并发、数据库复杂查询、在线备份恢复等方面有很大的提升,比如支持窗口函数、隐藏索引、按降序排序等功能。
​
数据库架构改变:从5.7升级到8.0需要对数据库的整个架构进行大幅度的调整,包括表的结构、索引的调整、数据文件的位置等,这个过程需要谨慎和细致的设计和实施,否则可能会导致数据不一致等问题。
​
安全性改进:MySQL 8.0版本在安全性支持多种安全策略、强化了用户权限管理、增强了数据加密和备份恢复等功能,提高了数据库的安全性和可靠性。
​
​
社区支持:从版本历史来看,8.0版本相对于5.7版本来说更加成熟和活跃,拥有更多的高手和专家在社区中提供帮助和支持。
​
综上所述,MySQL 5.7和MySQL 8.0之间在功能、性能、安全性、数据库架构和社区支持等方面都有很大的区别,开发者需要根据实际情况和需求选择合适的版本。
5、Mysql日志类型有多少种?都记录的是什么?
6种
1 、错误日志 :启动,停止,关闭失败报错。rpm安装日志位置 /var/log/mysqld.log #默认开启
2 、通用查询日志:所有的查询都记下来。 #默认关闭,一般不开启
3 、二进制日志(bin log):实现备份,增量备份。只记录改变数据,除了select都记。
4 、中继日志(Relay log):读取主服务器的binlog,在slave机器本地回放。保持与主服务器数据一致。
5 、slow log:慢查询日志,指导调优,定义某一个查询语句,执行时间过长,通过日志提供调优建议给开发人员。
6 、DDL log: 定义语句的日志。
6、Mysql binlog日志格式有几种?有什么区别?
MySQL的binlog日志格式有三种:Statement格式、Row格式和Mixed格式。
​
Statement格式:以SQL语句的形式记录每个被执行的语句,包括INSERT、UPDATE、DELETE等操作。其优点是易于理解和解析,日志文件相对较小。但是当涉及到非确定性函数、存储函数等复杂的语句时,可能会导致不一致的结果。此外,在某些情况下,由于默认隔离级别的不同,从主库复制到从库的结果可能会有所不同。
​
Row格式:以具体行数据的形式记录每个被执行的语句,包括被修改的行的完整内容。这种格式可以确保从主库复制到从库的数据一致性,因为行数据的变化完全被记录下来。但与Statement格式相比,Row格式生成的日志文件更大,因为需要记录每行的变化
​
Mixed格式:是Statement格式和Row格式的混合使用。在Mixed格式中,根据具体情况选择使用哪种格式。大多数情况下,使用Statement格式,但对于无法正确复制的语句,则会使用Row格式。这样既可以保证性能,又可以确保数据的一致性。
7、Mysql数据库备份方式有几种?有什么区别?
物理备份
完全备份-----完整备份:
每次对数据进行完整的备份,即对整个数据库的备份、数据库结构和文件结构的备份,保存的是备份完成时刻的数据库,是差异备份与增量备份的基础。
优点:备份与恢复操作简单方便,恢复时一次恢复到位,恢复速度快
缺点:占用空间大,备份速度慢
​
增量备份: 每次备份上一次备份到现在产生的新数据
只有那些在上次完全备份或者增量备份后被修改的文件才会被备份。以上次完整备份或上次的增量备份的时间为时间点,仅备份这之间的数据变化.
特点:因而备份的数据量小,占用空间小,备份速度快。但恢复时,需要从上一次的完整备份起按备份时间顺序,逐个备份版本进行恢复,恢复时间长,如中间某次的备份数据损坏,将导致数据的丢失。
​
差异备份:只备份跟完整备份不一样的
备份那些自从第一次次完全备份之后被修改过的所有文件,备份的时间起点是从第一次的完整备份起,且以后每次备份都是和第一次完整备份进行比较(注意是第一次,不是上一次),备份自第一次完整备份以来所有的修改过的文件。备份数据量会越来越大。
特点:占用空间比增量备份大,比完整备份小,恢复时仅需要恢复第一个完整版本和最后一次的差异版本,恢复速度介于完整备份和增量备份之间。
​
逻辑备份
备份方式:备份数据库建表、建库、插入sql语句
优点:备份文件相对较小,只备份表中的数据与结构
缺点:恢复速度较慢(需要重建索引,存储过程等)
8、Mysql的binlog日志里面存放的都有什么内容?
# 日志的起始位置
BEGIN
# 数据库的更改操作
UPDATE/INSERT/DELETE
# 操作中受到影响的行记录
ROW DATA
# 操作结束的标识符
COMMIT/ROLLBACK
# 日志的结束位置
END
9、Mysql主从复制的原理是什么?
1、主库对数据的更改写到主库的bin log 日志中
2、从库发起连接,连接主库并创建binlog dump thread线程,把binlog的内容发送到从库中
3、从库创建IO线程将从主库的bin log日志中写入到自己 的relay log (中继日志)中
4、从库创建一个SQL线程,将自己的中继日志里的命令读出来写入到slave的db中
10、Mysql主从失败该如何处理?
先看是io线程的问题还是SQL线程的问题
检查一下主从服务器是否联通(域名解析) 
检查防火墙状态
如果是sql线程的问题就重新刷新slave
11、Mysql多源复制怎么做?什么情况下需要做多源复制
MySQL多源复制是指将一个MySQL服务器作为主服务器,同时从多个主服务器复制数据到一个从服务器的过程。这样的复制方案通常在以下情况下使用:
​
数据合并:当需要将来自不同主服务器的数据合并到一个从服务器时,可以使用多源复制。这对于数据集成和报表生成非常有用。
​
负载均衡:当主服务器负载过高时,可以通过多源复制将数据复制到多个从服务器上,以平衡负载。
​
要实现MySQL多源复制,需要进行以下步骤:
配置主服务器:对于每个主服务器,需要确保log-bin选项在主服务器的配置文件中启用,并为每个主服务器配置一个唯一的server-id。
配置从服务器:在从服务器的配置文件中,启用log-slave-updates选项,并为从服务器配置一个唯一的server-id。
设置复制通道:在从服务器上设置每个主服务器的复制通道。使用CHANGE MASTER TO语句来指定主服务器的主机名/ IP地址、端口、用户和密码等详细信息。
启动复制过程:启动从服务器上的复制过程,使用START SLAVE语句开始复制。
​
需要注意的是,在多源复制中,可以配置每个主服务器的优先级,以确定复制数据的顺序。可以使用CHANGE MASTER TO语句中的PRIORITY选项来设置主服务器的优先级。
​
总结起来,要实现多源复制,需要在每个主服务器上进行配置并设置唯一的server-id,在每个从服务器上设置复制通道,然后启动复制过程。通过这种方式,可以将来自多个主服务器的数据复制到一个从服务器上,以满足数据合并或负载均衡的需求
12、http协议的三大特性是什么
无连接:限制每次连接只处理一个请求,当服务端处理完客户的请求并收到客户的应答后就立即断开连接,节省传输时间
​
媒体独立:只要客户端和服务器知道如何处理的数据内容,任何数据都可以通过HTTP传输。客户端以及服务器指定使用适合的MIME-type内容类型。
​
无状态:对于事物的处理没有记忆能力,如果后续处理需要前面的信息,则它必须重传,这样导致每次连接传送的数据量增大。另外,在服务器不需要先前信息时它的应答就较快。(下载后暂停并能接着下载是由于tcp起的作用)
13、传输层有几种协议?什么区别?
TCP  UDP
TCP:面向连接的协议 可靠  时延大  适用于大文件
三次握手,四次挥手(只要哪一次中断将无法连接)
​
​
UDP:一个无连接的简单的面向数据报的传输层协议。
特点:
面向无连接:不用先与对方建立连接,不握手。因此传输速度很快。
不可靠的:没有确认机制,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。
UDP传输数据时有大小限制,每个被传输的数据报必须限定在64KB之内
​
因为它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。
udp一般用于
1. 即时通信:qq聊天 对数据准确性和丢包要求比较低,但速度必须快
2. 在线视频:速度一定要快,保证视频连续,但是偶尔花了一个图像帧,人们还是能接受的
3. 网络语音电话:语音数据包一般比较小,需要高速发送,偶尔断音或串音也没问题
14、OSI七层模型是哪七层? 每一层有什么作用
物、物理层:实现实际终端信号的传输,码流通过物理介质传输(以二进制数据形式在物理媒体上传输数据)。常用设备有:集线器、中继器、网线、双绞线等
​
数、数据链路层:提供介质访问和链路管理。把位元合并为字节,然后将字节合并到帧中,以使媒体能够通过数据链路层访问  (arp  parp)
​
网、网络层:IP选址及路由选择 (icmp igmp)
​
通过IP选址了解两个端的连接,为源端运输层送来分组。选择合适的路由和交换节点,按照地址,准确地送到目的端的传输层
​
传、传输层:建立、维护、管理端到端的区别(tcp udp )
​
会、会话层:建立、管理和维护表示层实体的会话 (ssl  fls)
​
表、表示层:数据格式转化,对数据进行加密  (lpp)
​
应、应用层:为应用程序提供服务 (http ftp)
15、http请求头、响应头里面都包含什么
http请求头:
服务器发送给客户端的响应信息,例如响应状态码、响应头部字段、响应消息体等等。
​
http响应头:
客户端发送给服务器的请求信息,例如请求方法(GET、POST等)、请求URL、请求头部字段、请求消息体等等
16、nginx是什么,有什么功能?
Nginx是一个开源的web服务器和反向代理服务器**,它也可以用作负载均衡器和HTTP缓存。想象一下,一个餐厅的厨师和顾客之间有一个非常高效的服务员,这个服务员就像Nginx一样。在餐厅中,服务员负责接收顾客的订单,把订单传给厨师,然后在菜品准备好后把菜品端给顾客。这个过程就像Nginx处理HTTP请求一样。
​
当有很多顾客同时在餐厅就餐时,服务员可以快速地为每位顾客提供服务,让他们不用等待太久。同样地,Nginx也可以处理大量并发的请求,提高网站的性能和稳定性。
​
Nginx是一个轻量级、高性能、稳定性高、并发性好的HTTP和反向代理服务器。
nginx的优点:
1、速度更快
单词请求或者高并发请求的环境下,Nginx都会比其他的web服务器相应的速度更快。一方面在正常情况下,单次请求会得到更快的相应,另一方面在高峰期(如有数以万计的并发请求),Nginx比其他web服务器更快的响应请求。Nginx之所以有这么高的并发处理能力和这么好的性能原因在于Nginx采用了多线程和I/O多路复用(epoll)的底层实现。
并发更高 
2、配置简单,扩展性强
Nginx的设计极具扩展性,它本身就是由很多模块组成,这些模块的使用可以通过配置文件的配置来添加。这些模块有官方提供的也有第三方提供的模块,如果需要完全可以开发服务自己业务特性的定制模块。
3、高可靠性 
Nginx采用的是多进程模式运行,其中有一个master主进程和N多个worker进程,worker进程的数量我们可以手动设置,每个worker进程之间都是相互独立提供服务,并且master主进程可以在某一个worker进程出错时,快速去"拉起"新的worker进程提供服务。
4、热部署
现在互联网项目都要求以7*24小时进行服务的提供,针对于这一要求,Nginx也提供了热部署功能,即可以在Nginx不停止的情况下,对Nginx进行文件升级、更新配置和更换日志文件等功能。
nginx的功能(三大功能 反向代理、负载均衡、动静分离)
补充:
1、作为Web服务器
2、作为邮件代理服务器
3、虚拟主机(基于IP、基于域名、基于端口)
4、防盗链配置
5、rewrite地址重写
6、平滑升级
7、流量限制
17、Nginx与Apache的区别
nginx是轻量级,作为web服务器,相比apache使用更少的资源,支持更多的并发连接,体现更高的效率
nginx配置简洁,apache更复杂,nginx的静态处理性能比apache高3倍以上但是nginx的动态处理性能则比较弱
最核心的区别在于apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接可以对应一个进程
nginx可以作为负载均衡服务器,支持7层负载均衡
---18、为什么做动静分离,怎么做?
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。 在动静分离的tomcat的时候比较明显,因为tomcat解析静态很慢,其实这些原理的话都很好理解,简单来说,就是使用正则表达式匹配过滤,然后交给不同的服务器。
怎么做:
​
19、负载均衡的算法
A、轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器;
B、ip_hash:每个请求按访问IP的hash结果分配,同一个IP客户端固定访问一个后端服务器。可以保证来自同一ip的请求被打到固定的机器上,可以解决session问题;
C、url_hash:按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器。后台服务器为缓存的时候效率;
D、fair:这是比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持 fair的,如果需要使用这种调度算法,必须下载Nginx的 upstream_fair模块;
20、http常见的状态码的含义
200-请求成功
301-资源被永久转移到其他URL
302-资源被临时转移到其他URL
403-服务器理解客户的请求但是拒绝执行此请求
404-请求的资源不存在
500-内部服务器错误
502-作为网关或者代理服务器尝试执行请求时,从远程服务器接收到了一个无效的请求
503-由于常在或者系统维护,服务器暂时无法处理客户端的请求
21、正向代理与反向代理的区别
正向代理:
正向代理的过程隐藏了真实的请求客户端,服务器不知道真实的客户端是谁,客户端请求的服务都被代理服务器代替请求。我们常说的代理也就是正向代理,正向代理代理的是请求方,也就是客户端;比如我们要访问youtube,可是不能访问,只能先安装个FQ软件代你去访问,通过FQ软件才能访问,FQ软件就叫作正向代理。 
​
反向代理:
反向代理的过程隐藏了真实的服务器,客户不知道真正提供服务的机器是哪台,客户端请求的服务都被代理服务器处理。反向代理代理的是响应方,也就是服务端;我们请求www.baidu.com时,这www.baidu.com就是反向代理服务器,真实提供服务的服务器有很多台,反向代理服务器会把我们的请求分/转发到真实提供服务的各台服务器。Nginx就是性能非常好的反向代理服务器,用来做负载均衡
22、MySQL事务隔离级别
| 事务隔离级别                 | 脏读 | 不可重复读 | 幻读 |
| ---------------------------- | ---- | ---------- | ---- |
| 读未提交(read-uncommitted) | 是   | 是         | 是   |
| 不可重复读(read-committed) | 否   | 是         | 是   |
| 可重复读(repeatable-read)  | 否   | 否         | 是   |
| 串行化(serializable)       | 否   | 否         | 否   |
​
23、事务的基本要素(ACID)
一般来说,事务是必须满足4个条件(ACID)::原子性(**A**tomicity,或称不可分割性)、一致性(**C**onsistency)、隔离性(**I**solation,隔离性)、持久性(**D**urability)。
原子性
一个事务(transaction)中的所有操作,要么全部完成,要么失败回滚。事务不可分割
​
一致性
指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态
​
隔离性
数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
​
持久性
事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失;
24、事务的并发问题
脏读/脏数据
事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据
​
不可重复读
事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。
​
幻读
系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。  
​
总结:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表
25、nginx会话保持的作用
确保用户在多次请求中的会话数据和状态都保存在同一个服务器上,避免了在不同服务器之间同步
会话数据的问题。通过会话保持,用户可以在多次请求中保持登录状态、购物车数据等,提升用户体验。
​
防止负载失衡
Nginx可以通过一些策略将同一个客户端的请求都分发给同一个后端服务器处理,从而保持会话的连续性。
nginx会话保持主要有以下几种实现方式:
1、ip_hash使用源地址哈希算法,将同一客户端的请求总是发往同一个后端服务器,除非该服务器不可用
ip_hash简单易用,但有如下问题:
当后端服务器宕机后,session会话丢失;
同一客户端会被转发到同一个后端服务器,可能导致负载失衡;
​
2、sticky_cookie_insert
使用sticky_cookie_insert启用会话亲缘关系,这会导致来自同一客户端的请求被传递到一组服务器的同一台服务器。与ip_hash不同之处在于,它不是基于IP来判断客户端的,而是基于cookie来判断。因此可以避免上述ip_hash中来自同一客户端导致负载失衡的情况。(需要引入第三方模块才能实现)
​
3、 jvm_route
​
jvm_route的原理
1.  一开始请求过来,没有带session信息,jvm_route就根据轮询(round robin)的方法,发到一台tomcat上面。 
2.  tomcat添加上session 信息,并返回给客户。 
3.  用户再次请求,jvm_route看到session中有后端服务器的名称,它就把请求转到对应的服务器上。
26、nginx防盗链的作用
不想让别人盗用自己的资源
27、什么时候用地址重定向?
不想人别人看到真实地址信息时
28、last与break的区别
1.、last 和 break 当出现在location 之外时,两者的作用是一致的没有任何差异。
​
注意一点就是,他们会跳过所有的在他们之后的rewrite 模块中的指令,去选择自己匹配的location
​
2、last 和 break 当出现在location 内部时,两者就存在了差异。
last: 使用了last 指令,rewrite 后会跳出location 作用域,重新开始再走一次刚刚的行为。
​
break: 使用了break 指令,rewrite后不会跳出location 作用域。它的生命也在这个location中终结。
​
3、通俗易懂:
last:重新将rewrite后的地址在server标签中执行
break:将rewrite后的地址在当前location标签中执行
29、负载均衡与反向代理的区别
代理一台时反向代理,代理多台就是负均衡了
30、nginx作为web服务器有什么作用
解析静态页面,处理静态请求
31、Nginx如何做平滑升级
可以对版本进行升级或者对配置功能进行升级
32、对称加密与非对称加密的区别
对称加密
A要给B发送数据
1、A做一个对称密钥
2、使用密钥给文件加密
3、发送加密以后的文件和密钥
4、
加密和解密都是使用的同一个密钥。 
​
非对称加密 ----  公钥加密,私钥解密(密钥对:公钥,私钥)
A要给B发送数据
1、B做一对非对称的密钥(公钥、私钥)
2、发送公钥给A
3、A拿公钥对数据进行加密
4、发送加密后的数据给B
5、B拿私钥解密 
33、ssh协议的作用过程
依靠密钥进行安全验证
​
必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。
34、Nginx如何优化?优化的这些参数有什么作用?
work进程
​
实时监控
​
实时监控是指对 Nginx 的运行状态进行监控和管理,及时发现和处理异常情况。可以使用 Nginx 的 status 模块来实时查看 Nginx 的连接数、请求数、流量等数据。还可以使用第三方的监控工具,如 Munin、Graphite 等,对 Nginx 的性能指标进行图形化展示和告警
​
资源压缩
gzip:启用或调整gzip压缩功能,可以减小传输数据量,提高页面加载速度。有九个级别 级别数越小 压缩的文件越小 服务器在压缩过程中压力越大
​
worker_processes:设置Nginx启动的worker进程数。可以根据服务器的CPU核心数来设置,以最大限度地利用服务器资源。
worker_connections:设置每个worker进程的最大连接数。这个参数的值应根据服务器的硬件资源和预计的并发连接数进行调整。
keepalive_timeout:设置客户端与Nginx之间的长连接超时时间。适当调整这个值可以减少频繁建立和关闭连接的开销。
server_tokens:控制Nginx在响应中显示服务器版本信息。将其设置为off可以增加服务器的安全性。
open_file_cache:启用文件缓存,提高对静态资源的访问速度。
client_header_buffer_size和client_max_body_size:分别设置客户端请求头缓冲区大小和客户端上传文件大小限制。适当调整这两个值可以防止恶意请求和减少上传文件的问题。
proxy_buffering:控制代理请求是否启用缓冲。适当调整这个参数可以提高代理请求的性能。
resolver:配置DNS解析器地址,以确保Nginx在处理反向代理时能够快速解析域名。
35、如何配置SSL证书,说下流程
客户端对服务端发起请求
​
服务端给客户端发一个ssl证书----客户端对证书真伪进行校验
先看证书的所有者与有效期,再对比证书的发布机构,然后客户端用自己受信任的CA的公钥对证书的签名进行解密对比 证明时合法证书,最后客户端与服务端协商对称加密算法,客户端生成一个对称加密密钥并使用服务端的公钥加密 发送给服务端 服务端使用自己的私钥解密。使用对称加密密钥传输数据,并校验数据的完整性
​
客户端使用对称加密方式发送请求给服务端
服务端使用对称加密方式响应请求
34、Tomcat 如何优化?
1、增加 Tomcat 的内存分配:可以通过调整 Tomcat 的启动脚本来增加其分配的内存,比如在 catalina.sh 或 catalina.bat 中设置环境变量 CATALINA_OPTS 为 -Xms512m -Xmx1024m,其中 -Xms 表示 Tomcat 启动时分配的最小内存, -Xmx 表示 Tomcat 允许使用的最大内存。
​
2、调整 Tomcat 的线程池设置:Tomcat 默认使用的线程池是 org.apache.tomcat.util.threads.ThreadPoolExecutor,可以通过修改 server.xml 中的 Connector 节点下的 maxThreads、minSpareThreads 和 acceptCount 参数来调整线程池的大小和性能。
​
3、优化 Tomcat 的缓存设置:可以通过调整 server.xml 中的 Connector 节点下的 enableLookups、maxKeepAliveRequests 和 keepAliveTimeout 等参数来优化 Tomcat 的缓存设置,减少网络连接的开销。
​
4、启用压缩:可以在 server.xml 中的 Connector 节点下启用压缩来减少网络传输的数据量,提高网站的响应速度,比如设置 compression 参数为 on、compressionMinSize 参数为 2048 等
​
5、启用静态资源缓存:可以通过在 web.xml 中配置 filter,启用静态资源缓存,减少服务器的负载,提高访问速度。
35、JVM如何优化?
1、内存分配:根据应用程序的需求调整JVM的内存分配。如果应用程序需要处理大量数据,则可以增加JVM的堆内存和非堆内存。
​
2、垃圾回收:JVM的垃圾回收是一项重要的任务,它可以释放无用的对象并回收内存。通过选择不同的垃圾回收器、调整垃圾回收器的参数和设置合适的内存阈值等,可以提高垃圾回收的效率。
​
3、线程管理:JVM中的线程是Java应用程序的核心组成部分。通过调整线程的数量、设置线程的优先级和使用线程池等方式,可以提高Java应用程序的并发性能。
​
4、类加载:Java应用程序需要在运行时动态加载类。通过优化类的加载过程,可以提高应用程序的启动速度和响应性能。
​
5、编译优化:JIT编译器可以将Java代码编译为本机代码,从而提高应用程序的执行速度。通过设置JIT编译器的参数和选择适当的编译器,可以提高编译器的性能和效率。
​
6、I/O优化:I/O操作是Java应用程序中常见的性能瓶颈之一。通过使用缓冲区、选择合适的I/O库、减少I/O操作次数等方式,可以提高I/O操作的效率。
36、java的中间件都有哪些?除了Tomcat之外还有哪些
1.Web中间件
Web中间件是一种基于Java技术的中间件,主要用于构建Web应用程序和服务。提供HTTP服务和Web应用程序部署支持,常见的Web中间件有:Apache Tomcat、Jetty、 GlassFish、 JBOSS 等。
​
2.消息中间件
消息中间件是-种基于Java技术的中间件,主要用于实现异步通信和解耦,使得应用程序能够通过发送和接收消息来实现分布式的交互。
常见的消息中间件有: ActiveMQ、 RabbitMQ、 Kafka、 RocketMQ、 Pulsar等。
​
3.分布式缓存中间件
分布式缓存中间件是-种基于Java技术的中间件,主要用于提供分布式缓存服务。分布式缓存中间件:提供一种分布式的缓存机制,能够存储大量数据并加快应用程序的访问速度。分布式缓存中间件通常包括缓存节点、数据分片、数据同步、失效策略等组件。常见的分布式缓存有Memcached、Redis、 Ehcache 等。
​
4.分布式事务中间件
分布式事务中间件是一种基于Java技术的中间件,主要用于保证分布式环境下的事务一致性和可靠性。分布式事务中间件通常包括事务管理器、资源管理器、事务协调器等组件。常见的Java分布式事务中间件包括Atomikos、Bitronix、 Narayana 等。
​
5.数据库中间件
数据库中间件可以简化对读写分离以及分库分表的操作,并隐藏底层实现细节,可以像操作单库单表那样操作多库多表。
- -些常见的数据库中间件如下:
●MyCat: 开源数据库中间件,目前更新了MyCat2版本;
●Atlas: Qihoo 360公司Web平台部基础架构团队开发维护的一-个基于MySQL协议的数据中间层项目; 
●tddl: 阿里巴巴自主研发的分布式数据库服务; 
5.数据库中间件
数据库中间件可以简化对读写分离以及分库分表的操作,并隐藏底层实现细节,可以像操作单库单表那样操作多库多
表。
- -些常见的数据库中间件如下:
●MyCat: 开源数据库中间件,目前更新了MyCat2版本;
●Atlas: Qihoo 360公司Web平台部基础架构团队开发维护的一-个基于MySQL协议的数据中间层项目; 
●tddl: 阿里巴巴自主研发的分布式数据库服务; 
●Sharding-JDBC: ShardingShpere的一-个子产品,- -个轻量级Java框架;
​
6.RPC中间件
RPC中间件是- -种基于Java技术的中间件,主要用于实现远程过程调用和服务治理。
RPC中间件通常包括序列化、反序列化、传输协议、服务注册、服务发现等组件。
常见的Java RPC中间件包括: Dubbo、 gRPC、 Thrift、 Spring Cloud、Spring Cloud Alibaba等。
37、jdk里面都有什么?
jvm :java虚拟机
jre:java运行环境
java类库
JVM:是Java程序的执行环境,它负责解释和执行Java字节码,并提供内存管理和垃圾回收等功能。
JRE:JRE包含了Java虚拟机(JVM)和Java类库,用于执行Java程序。JRE提供了Java程序所需的运行环境
Java类库:Java类库是一组预定义的类和方法,提供了各种功能和工具,使Java开发更加方便和高效
38、jvm有哪三个区?
1、新生区:比如一些刚定义的变量就存放在新生区
2、永久区:比如一些经常被调用的变量就会被存在永久区
3、老年区:比如一些长时间不被调用的变量就会被存在这里,慢慢的就会被释放掉
39、tomcat干什么的?
Tomcat是一个开源的Java Servlet容器,它的主要作用是提供一个运行Java Web应用程序的环境
---40、讲述一下Tomcat8005、8009、8080三个端口的含义
8005 关闭时使用
​
8009为AJP端口,即容器使用,如Apache能通过AJP协议访问Tomcat的8009端口来实现功能
​
8080 一般应用使用
41、nignx常用模块
upstream
rewrite
location
proxy_pass
42、四层负载均衡与七层负载均衡的区别
7层负载均衡:用的7层http协议,
4层负载均衡:用的是tcp协议加端口号做的负载均衡
1、四层负载均衡基于ip与端口的类似于路由器,而七层负载均衡基于url或ip的类似于代理服务器;
2、四层比七层复杂度低,因为它不需要解析内容 而七层需要算法识别url与http head等信息,当然这样会更安全。
3、四层在网络吞吐量及处理能力上会相对比较高,而七层的优势则体现在功能多,控制灵活强大。
43、LVS的四种工作模式的区别?
NAT:网络地址转换模式-进站/出战的数据流量经过分发器/负载均衡器-三层功能。lvs必须在linux系统,RS可以在任意系统。
DR:直接路由模式-只有进站的数据流量经过分发器/负载均衡器-二层功能mac地址。lvs和各RS上都配置有VIP,RS的VIP配置在回环网卡(lo)上。
TUN:隧道模式-只有进站的流量经过分发器/负载均衡器
FULL-NAT:双向转换-通过请求报文的源地址为DIP,目标为RIP来实现转发:对于响应报文而言,修改源地址为VIP,目标地址为CIP来实现转发
44、LVS和Nginx的区别?
1、nginx既可做四层负载均衡,也可做七层负载均衡,LVS主要做四层负载均衡由于机制过于庞大,不适合小规模应用
2、nginx可以针对HTTP应用本身做分流策略、对网络的依赖小、安装配置比较简单,测试起来也很方便,  Lvs负载能力强、配置性低、工作稳定、无流量、能支持所有应用,做四层负载时一般选lVs
nginx不仅可以做负载均衡还可以做反向代理、动静分离、作Web服务器、虚拟主机(基于IP、基于域名、基于端口)、防盗链配置、rewrite地址重写、平滑升级、流量限制等
45、高可用你们用的什么软件?什么原理?
nginx+keepalived    
lvs+keepalived    
haproxy+keepalived 
46、你都给什么做过高可用?说一下步骤和注意事项
nginx+keepalived    
lvs+keepalived    
haproxy+keepalived 
47、keepalived的工作原理
云服务器不能做keepalived因为删除了VRRP协议模块)
keepalived是以VRRP协议为实现基础的,VRRP即虚拟路由冗余协议。是实现高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。
48、ansible的shell模块与commend模块的区别
command模块不是调用的shell的指令,所以没有bash的环境变量,也不能使用shell的一些操作方式,其他和shell没有区别
49、如何查看目录的大小
du  -sh  /opt
查看磁盘大小
lsblk
50、Asnible的工作原理是什么?
ansible是自动化运维工具,基于Python开发,分布式,无需客户端,轻量级,实现了批量系统配置、批量程序部署、批量运行命令等功能,ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。Ansible可以简化管理员的自动化配置管理和流程控制方式。它利用推送方式对客户系统配置,这样所有的工作都可以在主服务器上完成
51、Ansible的模块,你都使用过哪些?举例说一下
ping模块、shell模块、commend模块、copy模块、yum模块、service模块、file模块、setup模块
52、你都用Ansible做过什么?举例说明一下
ping模块:测试连通性
shell模块给节点创建用户,重定向输出等
commend模块、
copy模块:备份文件
yum模块:安装于卸载软件包
service模块:启动或关闭服务
file模块:给节点创建文件并指定相关权限等
setu模块:收集信息
53、Ansible运行依赖与什么文件
基于SSH协议进行工作,依赖于主机清单文件与主配置文件
54、Ansible的主机清单都有什么信息
所添加的主机或主机组,还有为主机组指定的变量
55、Ansible相比其他的自动化运维工具的优势

二、技术特性比较

名称 Puppet SaltStack Ansible
开发语言RubyPythonPython
客户端
二次开发不支持支持支持
通信验证
加密方式标准SSL协议AES加密OpenSSH
平台支持AIX,BSD,HP-UX,Linux,Mac OS X,Solaris,WindowsBSD,Linux,Mac OS X,Solaris,WindowsAIX,BSD,HP-UX,Linux,Mac OS X,Solaris
配置文件格式Ruby语法格式YAMLYAML
Web UI提供提供提供(商业版本)
命令执行不支持(配置模块可实现)支持支持

111111111111111111111111111111111111111111111111111111111111111111

三、优缺点对比

名称 优势 劣势 成本
Puppet模块由Ruby或Ruby子集编写push命令可以即可触发变更Web界面生成处理报表、资源清单、实时节点管理代理运行端进行详细、深入的报告和对节点进行配置相对其他工具较复杂,需学习Puppet的DSL或Ruby安装过程缺少错误校验和产生错误报表开源软件免费SaltStack企业版每年内个节点花费约¥100
Saltstack状态文件可用简单YAML配置模块或复杂的Python/PyDSL脚本与客户端可以基于SSH或在被管节点安装代理Web界面可看到运行的工作、minion状态、事件日志、可在客户端执行命令扩展能力极强Web界面像毒药竞争产品不稳定与相对不完善缺乏生成深度报告的能力开源软件免费SaltStack企业版每年内个节点花费约¥150,随着数量增加相应的会有折扣
Ansible模块可以用任何语言开发备管节点不需要安装代理软件有Web管理界面、可配置用户、组、资源清单和执行Playbook安装、运行极其简单对备管理节点为Windows有待加强Web管理界面是内置的Ansible的一部分需导入资源清单执行效率较低开源版本免费Ansible Tower小于10台被管理节点免费超过10太后没年每台需支付¥100~$250的支持服务费用

111111111111111111111111111111111111111111111111111111111111111111111111111111111111

四、推荐场景**
​
**4.1 Puppet**
​
  Puppet也许是四款工具中最深入人心的。就可用操作、模块和用户界面而言,它是最全面的。Puppet呈现了数据中心协调的全貌,几乎涵盖每一个运行系统,为各大操作系统提供了深入的工具。初始设置比较简单,只需要在需要加以管理的每个系统上安装主服务器和客户端代理软件。
​
  命令行接口(CLI)简单直观,允许通过puppet命令下载和安装模块。然后,需要对配置文件进行更改,好让模块适合所需的任务;应接到指令的客户端与主服务器联系时,会更改配置文件,或者客户端通过立即触发更改配置文件的推送(push)来进行更改。
​
  还有一些模块可以提供和配置云服务器实例和虚拟服务器实例。所有模块和配置都使用基于Ruby的Puppet专属语言或者Ruby本身构建而成,因而除了系统管理技能外,还需要编程专业知识。
​
  Puppet企业版拥有最全面的Web用户界面,允许使用主服务器上的预制模块和菜谱(cookbook),实时控制被管理的节点。Web用户界面很适合用于管理,但是不允许对模块进行诸多配置。报告工具非常完善,提供了详细信息,以便了解代理软件运行如何、已做出什么样的变更。
​
**4.2 Ansible**
​
  Ansible极其类似Salt,而不太类似Puppet或Chef。Ansible关注的重点是力求精简和快速,而且不需要在节点上安装代理软件。因此,Ansible通过SSH执行所有功能。Ansible基于Python;相比之下,Puppet和Chef基于Ruby。
​
  Ansible可以通过Git软件库克隆,安装到Ansible主服务器上。安装完毕后,需要管理的节点被添加到Ansible配置环境,SSH授权密钥被附加到每个节点上,这与运行Ansible的用户有关。一旦完成了这步,Ansible主服务器可以通过SSH与节点进行通信,执行所有必要的任务。为了与默认情况下不允许根SSH访问的操作系统或发行版协同运行,Ansible接受sudo登录信息,以便在那些系统上以根用户的身份运行命令。
​
  Ansible可以使用Paramiko(基于SSH2协议的Python实现)或标准SSH用于通信,不过还有一种加速模式,允许更快速、更大规模的通信。
​
  针对确保服务在运行,或者触发更新和重新启动之类的简单任务,Ansible可以从命令行来运行,不需要使用配置文件。至于比较复杂的任务,Ansible配置通过名为Playbook的配置文件中的YAML语法来加以处理。Playbook还可以使用模板来扩展其功能。
​
  Ansible有一大批模块,可用于管理各种系统以及亚马逊弹性计算云(EC2)和OpenStack等云计算基础设施。可以用几乎任何一种语言来编写自定义Ansible模块,只要模块输出是有效的JSON。
​
  Ansible的Web用户界面以AnsibleWorks AWX的形式出现,但AWX与CLI并不直接联系在一起。这意味着,除非进行了同步过程,否则CLI里面的配置元素不会出现在Web用户界面中。你可以使用那个内置的同步工具,让两者保持一致,但需要按照预定计划运行同步工具。
​
**4.3 SaltStack**
​
  Salt类似Ansible,因为它也是基于CLI的工具,采用了推送方法实现客户端通信。它可以通过Git或通过程序包管理系统安装到主服务器和客户端上。客户端会向主服务器提出请求,请求在主服务器上得到接受后,就可以控制该客户端了。
​
  Salt可以通过普通的SSH与客户端进行通信,但如果使用名为minion的客户端代理软件,可以大大增强可扩展性。此外,Salt含有一个异步文件服务器,可以为客户端加快文件服务速度,这完全是Salt注重高扩展性的一个体现。
​
  与Ansible一样,你可以直接通过CLI,向客户端发出命令,比如启动服务或安装程序包;你也可以使用名为state的YAML配置文件,处理比较复杂的任务。还有“pillar”,这些是放在集中地方的数据集,YAML配置文件可以在运行期间访问它们。
​
  你可以直接通过CLI,向客户端请求配置信息,比如内核版本或网络接口方面的详细信息。只要使用名为“grain”的库存元素,就可以描述客户端;这样一来,管理员可以轻松向某一种类型的服务器发出命令,不需要依赖已配置群组。比如说,只要使用一个CLI命令,你就可以向运行某个内核版本的每个客户端发送命令。
​
  与Puppet、Chef和Ansible一样,Salt也提供了大量的模块,以处理特定的软件、操作系统和云服务。自定义模块可以用Python或PyDSL来编写。除了Unix管理外,Salt的确提供Windows管理功能,但它还是更擅长管理Unix和Linux系统。
​
  Salt的Web用户界面Halite非常新,功能不如其他系统的Web用户界面来得全面。它提供了事件日志和客户端状态的视图,能够在客户端上运行命令,但除此之外乏善可陈。
​
  Salt的较大优点在于可扩展性和弹性。你可以有多个级别的主服务器。上游主服务器可以控制下游主服务器及其客户端。另一个优点在于对等系统,让客户端可以向主服务器提出问题,然后主服务器从其他服务器得到答案,提供全面信息。如果需要在实时数据库中查询数据,以便完成客户端的配置,这个优点就很方便。
56、redis与mysql的区别(即关系型数据库与非关系型数据库的区别)
1、从类型上来说,mysql是关系型数据库是二维表及其之间的联系所组成的一个数据组织,redis是非关系型数据库,存储数据的格式可以是key,value形式、文档形式、图片形式等等,使用灵活。
2、mysql用于持久化的存储数据到硬盘,功能强大,但是速度较慢。redis用于存储使用较为频繁的数据到缓存中,读取速度快。
3、mysql和redis因为需求的不同,一般都是配合使用。
57、redis主从的原理
从服务器会向主服务器发出同步(sync)指令,当主服务器接到此命令后,就会调用BGSAVE指令来创建一个子进程专门进行数据持久化工作,也就是将主服务器的数据写入RDB文件中。在数据持久化期间,主服务器将执行的写指令都缓存在内存中。
在BGSAVE指令执行完成后,主服务器会将持久化好的RDB文件发送给从服务器,从服务器接到此文件后会将其存储到磁盘上,然后再将其读取到内存中。这个动作完成后,主服务器会将这段时间缓存的写指令再以redis协议的格式发送给从服务器。
​
​
另外,要说的一点是,即使有多个从服务器同时发来SYNC指令,主服务器也只会执行一次BGSAVE,然后把持久化好的RDB文件发给多个从服务器。
而在2.8版本之后,redis支持了效率更高的增量同步策略,这大大降低了连接断开的恢复成本。主服务器会在内存中维护一个缓冲区,缓冲区中存储着将要发给从服务器的内容。从服务器在与主服务器出现网络瞬断之后,从服务器会尝试再次与主服务器连接,一旦连接成功,主服务器就会向从服务器发送增量内容。
​
增量同步功能,需要服务器端支持全新的PSYNC指令。这个指令,只有在redis-2.8之后才具有。
58、redis哨兵的作用
1、集群监控:负责监控redis的master和slave进程是否正常工作。当一个哨兵(Sentinel)对某个redis服务器做出的下线判断为客观下线,
多个哨兵(Sentinel)在对Master Server做出SDOWN判断,并且通过 SENTINEL is-master-down-by-addr 命令互相交流之后,得出的Master Server下线为主观下线,
2、消息通知:如果某个redis实例有故障,那么哨兵负责发送消息作为报警通知给管理员。
3、故障转移:如果master node挂掉了,会自动转移到slave node上。
4、配置中心:如果故障转移发生了,通知client客户端新的master地址。
59、redis哨兵的原理
哨兵每秒都会给master发送一个ping指令,若在规定时间内master没有回复,则初步判定master是主观下线状态,在足够多的哨兵确认master是主观下线状态时则标记客观下线状态。此时会进行master与slave切换,哨兵的监控目标也会跟着新的master。若之前的master修复好了,则变为slave,指定master。
60、Redis缓存穿透
概念:缓存与数据库都没有的数据,被用户重复多次访问,每次都会进入数据库,从而对数据库造成不必要的压力,致使数据库崩溃。
​
解决方案:
​
当用户访问一些不存在的数据时,在缓存中设置一个反馈值,不用每次都去数据库查找。若次数据被添加到数据库时,之前设置的反馈值与此数据就行切换即可
61、Redis缓存雪崩
如果缓存数据设置的过期时间是相同的,并且Redis恰好将这部分数据全部删光了。 这就会导致在这段时间内,这些缓存同时失效,全部请求到数据库中。 这就是Redis缓存雪崩。 缓存雪崩会造成数据库直接崩溃,从而导致整个系统瘫痪。 
​
解决方案:
1、在缓存的时候给时间加上一个随机值,设置不同的缓存过期时间,减少缓存在同一时间过期的概率。 
2、或者设置缓存永不过期,数据有更新再主动更新
62、redis缓存穿透与缓存雪崩的区别
缓存穿透指并发查同一条数据,缓存雪崩是不同数据都过期了,很多数据都查不到从而查数据库。
63、redis持久化的方式有几种,分别是什么?
一、redis提供了两种持久化的方式,分别是RDB(Redis DataBase)和AOF(Append Only File)。
======================================================================================
RDB(Redis DataBase):是在不同的时间点,将redis存储的数据生成快照并存储到磁盘等介质上;
特点:
1.周期性
2.不影响数据写入  #RDB会启动子进程,备份所有数据。当前进程,继续提供数据的读写。当备份完成,才替换老的备份文件。
3.高效     #一次性还原所有数据
4.完整性较差 #故障点到上一次备份,之间的数据无法恢复。
======================================================================================
AOF(Append Only File)则是换了一个角度来实现持久化,那就是将redis执行过的所有写指令记录下来,在下次redis重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了。
特点:
1.实时性
2.完整性较好
3.体积大  #记录数据的指令,删除数据的指令都会被记录下来。
=======================================================================================
二、RDB和AOF两种方式也可以同时使用,在这种情况下,如果redis重启的话,则会优先采用AOF方式来进行数据恢复,这是因为AOF方式的数据恢复完整度更高。
三、如何选择方式?
缓存:不用开启任何持久方式
双开:因RDB数据不实时,但同时使用两者时服务器只会找AOF文件,所以RDB留作以防万一的手段。
官方的建议是两个同时使用。这样可以提供更可靠的持久化方案。
写入速度快 ------------AOF
写入速度慢 ------------RDB
64、Git与SVN的区别?
1、定义
git属于分布式版本控制系统,客户端并不只提取最新版本的文件,而是把原始的代码仓库完整地克隆下来。
svn属于集中式版本控制系统,有一个单一的集中管理的服务器,保存所有文件的修订版本,协同工作成员通过客户端连接到这台服务器上进行文件上传与更新。
​
2、存储单元不同
SVN按照原始文件存储,体积较大。SVN是按文件所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。
Git按照元数据方式存储,体积很小,GIT把内容按元数据方式存储,如果你把.git目录的体积大小跟.svn比较,你会发现它们差距很大。因为,.git目录是处于你的机器上的一个克隆版的版本库,它拥有中心版本库上所有的东西,例如标签,分支,版本记录等。
​
3、是否拥有全局版本号
Git没有一个全局版本号,而SVN有——目前为止这是跟SVN相比Git缺少的最大的一个特征。
​
4、内容完整性不同
Git的内容的完整性要优于SVN:GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
​
5、版本库不同
**svn**:SVN只能有一个指定中央版本库。当这个中央版本库有问题时,所有工作成员都一起瘫痪直到版本库维修完毕或者新的版本库设立完成。
​
**git**:Git可以有无限个版本库。或者,更正确的说法,每一个Git都是一个版本库,区别是它们是否拥有活跃目录(Git Working Tree)。如果主要版本库发生了什么事,工作成员仍然可以在自己的本地版本库(local repository)提交,等待主要版本库恢复即可。工作成员也可以提交到其他的版本库。
​
6、克隆目录速度不同
克隆一份全新的目录以同样拥有五个分支来说,git要快于svn,SVN是同时复制5个版本的文件,也就是说重复五次同样的动作。而Git只是获取文件的每个版本的元素,然后只载入主要的分支(master),克隆一个拥有将近一万个提交(commit),五个分支,每个分支有大约1500个文件的 SVN,耗了将近一个小时,而Git只用了区区的1分钟!
​
7、分支不同
**svn**:分支在SVN中一点不特别,就是版本库中的另外的一个目录。如果你想知道是否合并了一个分支,你需要手工运行像这样的命令svn propget svn:mergeinfo,来确认代码是否被合并。
**git**:处理GIT的分支却是相当的简单和有趣。你可以从同一个工作目录下快速的在几个分支间切换。你很容易发现未被合并的分支,你能简单而快捷的合并这些文件。
​
8、创建目录不同
**svn**:在SVN中,我们在每个文件夹中创建.svn目录。
**git**:在 git 中,我们只创建 .git 目录。
​
9、特点不同
**svn**:
- 目录已版本控制
- 复制、删除和重命名。
- 自由格式的版本化元数据 。
- 原子提交。
- 分支和标记。
- 合并跟踪。
- 文件锁定。
​
**git**:
- 分布式系统。
- 分支。
- 兼容性。
- 非线性开发。
- 轻。
- 开源。
65、Gitlab和GitHub、Gitee的区别
Git     是一种版本控制系统,是一个命令,是一种工具,有点像cmd(命令行工具)。
Gitlab  类似 github,一般用于在企业内搭建git私服,要自己搭环境。
Github  是一个基于git实现在线代码托管的仓库,向互联网开放,企业版要收钱。(国外的)
Gitee   即码云,是 oschina 免费给企业用的,不用自己搭建环境,可以建立自己的私有仓库。(国内的)
Git-ce  是社区版,gitlab-ee是企业版,收费的。
66、公有代码仓库和私有代码仓库的区别
公有:即别人可以通过搜索框搜索到你的代码,并查看、克隆等
私有:别人通过搜索栏搜不到你的项目代码【代码更安全】,且理论上别人及时拿到克隆地址也访问不了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值