总面试题
一.简单Linux基础问题
二.数据库问题
1.mysql和Oracle的区别是什么?
Oracle是大型数据库,而MySQL是中小型数据库。但是MySQL是开源的,但是Oracle是收费的,而且比较贵。
Oracle的内存占有量非常大,而mysql非常小
MySQL支持主键自增长,指定主键为auto increment,插入时会自动增长。Oracle主键一般使用序列。
MySQL字符串可以使用双引号包起来,而Oracle只可以单引号
MySQL分页用limit关键字,而Oracle使用rownum字段表明位置,而且只能使用小于,不能使用大于。
MySQL中0、1判断真假,Oracle中true false
MySQL中命令默认commit,但是Oracle需要手动提交
MySQL在windows环境下大小写不敏感 在unix,linux环境下区分大小写,Oracle不区分
2.mysql数据类型有多少种?
常用的数据类型有整型、浮点数型、字符串类型、定点数类型、日期类型、枚举型
整型:tinyint smallint mediumint int bigint
浮点型:float double
定点数类型:DEC
字符串类型:char varchar
枚举类型 enum
日期类型:year、date、time、datetime、timestamp
3.mysql约束条件有多少种
主键:primary key
自增:auto_increment
唯一约束:UNIQUE KEY
是否允许为空:null 与 not null
不允许负值,正整数:unsigned
指定字符集:default charset=utf8
默认约束:default
外键:foreign key
4.Mysql5.7版本和Mysql 8.0版本的区别
MySQL 8.0与5.7的区别主要体现在:1、性能提升:包括查询优化、增加了性能架构以及事务处理等;2、新的默认字符集:从5.7的utf8mb3(即utf8)变更为utf8mb4,支持更多的字符;3、更好的错误日志:使问题更加容易被定位和解决;4、提供了角色的概念:使权限管理更加方便;5、增强的JSON支持:增加了 JSON_TABLE函数,可以更方便地将JSON数据转换为关系表。
5.Mysql日志类型有多少种?都记录的是什么?
7种
- 错误日志Error log: 启动,停止,关闭失败报错。默认开启
- 通用查询日志 General query log:所有的查询都记下来,默认关闭,一般不开启
- 二进制日志(bin log):实现备份,增量备份。只记录改变数据,除了select都记。
- 中继日志(Relay log):读取主服务器的binlog,在slave机器本地回放。保持与主服务器数据一致。
- 慢查询日志slow log:指导调优,定义某一个查询语句,执行时间过长,通过日志提供调优建议给开发人员。
- 定义语句的日志 DDL log
- 事务日志(Transaction Log):事务日志,也称为redo日志,记录了数据库引擎内部正在处理的所有更改操作。
6.Mysql binlog日志格式有几种?有什么区别?
三种格式:row、statement、mixed
区别:row格式文件比较大,statement比较小,row格式保存的是一行一行的数据,statement保存的是sql语句,mixed格式介于二者之间,statement容易丢数据,row格式则不会。
Statement: 每一条会修改数据的sql都会记录在binlog中。
Row:不记录sql语句上下文相关信息,仅保存哪条记录被修改。
Mixedlevel: 是以上两种level的混合使用,一般的语句修改使用statment格式保存binlog
7.Mysql数据库备份方式有几种?有什么区别?
两种 包括物理备份和逻辑备份, 物理备份中包括完全备份、增量备份和差异备份。
区别:不同备份方式的区别主要在于备份速度、备份文件大小、备份的选择性和恢复的复杂度等方面。物理备份通常比逻辑备份更快速,适合大规模数据库备份,但无法选择性地备份和恢复单个表或记录。逻辑备份相对较慢,但备份文件可读性高,可以按需选择备份和恢复数据库中的特定数据。
8.Mysql的binlog日志里面存放的都有什么内容?
DDL语句:包括创建、修改或删除数据库、表、索引等的操作。DML语句:包括插入、更新和删除数据的操作。事务信息:包括事务的开始、提交或回滚等信息。用户信息:包括执行操作的用户的身份信息。SQL语句:记录执行的原始SQL语句。binlog日志只记录了对数据的变更操作,不包含查询操作的日志。
9.Mysql主从复制的原理是什么?
实现整个主从复制,需要由slave服务器上的IO进程和Sql进程共同完成.要实现主从复制,首先必须打开Master端的binary log(bin-log)功能,因为MySQL主从复制过程实际上就是Slave从Master端获取相应的二进制日志,然后再在自己slave端完全按照顺序执行日志中所记录的各种操作。
主库上的数据更改记录到二进制日志上,在slave服务器上从库I/O线程将主库的日志复制到中继日志上,从库SQL线程读取中继日志中的事件,将其执行到从数据库之上。
10.Mysql主从失败该如何处理?
先检查网络连接是否正常、防火墙是否关闭、ip地址是否改变,确定主从服务器可以互相访问。网络延迟会导致biglog文件传输时造成数据不一致。
检查主服务器和从服务器的MySQL配置文件(my.cnf)中的主从复制相关配置项,确保配置正确。
检查主服务器状态,在主服务器上执行命令show master status,查看bin-log日志文件名和位置信息,确定bin-log日志处于可复制状态,在从服务器上执行命令 show slave status,查看从服务器的复制状态信息,检查复制线程是否运行,了解从服务器的运行状态。
根据从服务器上的错误信息,采取相应的处理措施。常见的处理方法包括修复表、重置复制进程、重新同步数据等。
解决方法:方法一:stop slave;先停止主从复制set global sql_slave_skip_counter=1 跳过这一步错误;然后开启主从复制,查看状态是否正常。
方法二:重新做主从:先锁表,让数据保持同步,重新做主从
11.Mysql多源复制怎么做?什么情况下需要做多源复制
首先有多台服务器,对主从服务器进行配置,从服务器的MySQL配置文件(my.cnf)中,根据需求配置多个主服务器的连接信息,并指定不同信道(channel)。
开启服务器,从服务器连接到多个主服务器通过命令行参数或SQL语句中的复制通道名称指定连接的主服务器。有多台主服务器先配置主服务器,再配置所有从服务器连接所有主服务器。
当需要将多个数据库的数据汇总到一个集中的数据库中进行统计分析时,可以使用多源复制将多个源数据库的数据复制到目标数据库中。实现数据一致性和集中管理时,可以使用多源复制。有很多数据库很多主从服务器时需要多源复制。
12.mysql的读写分离作用:
让主服务器只进行写操作,让从服务器只进行读操作,减轻服务器的压力,提高系统的处理效率。增加冗余,提高服务的可用性。当一台数据库服务器宕机后可以调整另外一台从库以最快速度恢复服务。
13.mysql事务的四大特性
原子性、一致性、隔离性、持久性
原子性:是指一个事务不可分割,一个事务要么全部完成,要么都不完成。事务处理的最小单位如果中间一个操作失败,数据就会回滚到初始状态,就像从没执行一样。
一致性:在事务开始之前和结束以后,数据的完整性没有被破坏。
隔离性:多个事务可以并发执行,互不影响,不会由于事务的交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读已提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
持久性:事务处理结束后,对数据的修改是永久的。
14.事务隔离级别和能解决的问题
四个级别:读未提交,不可重复读,可重复读,串行化
读未提交:(脏读) 事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据。
不可重复读(读已提交): 事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果不一致。
可重复读: 在事务处理结束前,事务A每次查看的数据都是一样的,但有可能数据已经被更改了。如果已经被修改,那么该事务在执行SQL语句时,会使用已修改过的数据。
串行化:能够解决脏读、不可重复读、幻读问题,安全性比较高。
幻读:管理员A在更改数据时,管理员B插入或者删除了一条数据,当管理员A更改结束后,发现还有一条数据没有更改成功或者缺少一条数据,就像发生了幻觉一样,这就叫幻读。
不可重复读侧重于修改,幻读侧重于新增或删除。
15.mysql索引类型
主键索引 唯一索引 普通索引 全文索引
16.mysql优化如何做
主要有两个主要方面:安全、性能、还有参数、架构、sql语句等方面
(1) 安全方面:可以把默认端口3306改为其他的,对用户降权,以普通用户运行mysql即可,开启二进制日志文件,最好在禁止一下root账户远程访问
(2) 性能方面:升级硬件设备,可以给主机选择合理的cpu,内存调大,增加硬盘,可以对Linux系统内核参数优化,数据库优化的话可以对执行计划,索引,sql改写等等优化
(3) 参数优化: innodb的buffer参数调大,连接数调大,缓存的参数优化
- 架构优化: 主从,读写分离,一主多从,架构调整。
- sql语句优化: 协助开发优化,开启慢查询sql,查看是否没有索引,是否需要借助redis缓存,es等。
17.mysql数据库恢复怎么做
查看是否开启binlog日志,查看binlog文件,移动binlog文件,并导出为sql文件,将binlog文件以vim编辑它,删除其中drop语句,最后读取修改过的sql文件即可。
三.nginx相关问题
1.http协议的三大特性是什么
无连接性:限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省时间,降低服务器的压力。
无状态性:http协议是一种无状态协议。该协议没有记忆能力,不会记录客户端的状态信息,服务器不能凭借之前的请求状态来处理当前的请求,如果后期处理需要前面的信息,则需要重传,另一方面,在服务器不需要之前的信息时它的响应就比较快。
媒体独立性:任何数据类型都可以通过http协议传输。
2.传输层有几种协议?什么区别?
有两种协议TCP/UDP(传输控制协议/用户数据报协议)
区别:TCP是一种面向连接的协议,提供可靠的数据传输。通过确认和重传机制确保数据的完整性和正确性。UDP是一种无连接的协议,提供了一种简单的数据传输机制。它不关心数据传输的可靠性和顺序性,数据包直接发送到目标地址,数据传输不可靠,有可能丢失部分或全部数据。TCP适用于对数据准确性要求较高、容忍一定延迟的应用,例如网页浏览、文件传输和电子邮件等。UDP适用于实时性要求高、数据准确性要求较低的应用,例如音频和视频流,直播。
3.OSI七层模型是哪七层? 每一层有什么作用?
(1)物理层:负责传输数据的物理介质以及数据信号的传输方式,如电缆、光纤、无线电等。
(2)数据链路层:在相邻节点之间可靠地传输数据帧,通过物理地址(MAC地址)进行寻址。
(3)网络层:负责在不同网络之间的数据路由选择和分组传输,实现数据包的寻址和转发。(4)传输层:提供端到端的可靠数据传输,负责数据的分段、传输控制和错误恢复,常用的协议有TCP和UDP。
(5)会话层:建立和管理会话(Session)以及数据交换的控制和同步,包括会话的开始、终止和恢复等。
(6)表示层:负责数据的格式化、加密和解密、数据压缩和解压缩等操作,以便不同系统能够理解和交换数据。
(7)应用层:提供应用程序之间的网络服务,并向用户提供服务,包括文件传输、电子邮件、域名解析等。
4.http请求头、响应头里面都包含什么
请求头包含:包括请求行、请求头部、空行和请求数据四个部分组成GET /hello.txt HTTP/1.1 # 请求方式与URL和版本协议。Host:指定请求的主机名和端口号。
User-Agent:指定发送请求的用户代理(通常是浏览器)的信息。
Accept:指示客户端可以接受的内容类型。
Content-Type:指定请求主体的数据类型。
Referer:指示请求的来源页面的URL。
响应头包含:状态行、消息报头、空行和响应正文四个部分组成Allow :服务器支持哪些请求方法(如GET、POST等)。
Content-Encoding 文档的编码(Encode)方法。
Content-Length:表示内容长度。
Content-Type:指定相应主体的数据类型。
Date:当前的时间。
Location:表示用户要去哪里提取文档。
Refresh:表示浏览器应该在多长时间刷新一次。
5.http主要状态码有哪些
200:请求成功,服务器成功返回请求的数据。
301:资源(网页等)被永久转移到其它URL。
302:资源(网页等)临时转移到其它URL。
403:服务器理解请求,但是拒绝授权访问。客户端没有访问资源的权限。
404:服务器无法根据客户端的请求找到资源。资源不存在。
500:服务器在执行请求时发生了错误,服务器内部错误。
502:服务器收到无效的响应。
503:因系统超载或系统维护,服务器暂时无法处理客户端的请求。
6.http请求方法有哪些
GET:单纯获取数据(获取一个index.html页面)
POST:上传/创建文件(产生新的数据)
PUT:保存数据(覆盖/更新文件、图片等,不会产生新的数据)
DELETE:删除当前页面/数据
7.http和https的区别:
http协议是明文传输,不加密,https是通过ssl协议进行加密传输。
http的默认端口是80,https的默认端口是443。
8.Nginx和Apache的区别?
apache :稳定、对动态请求处理强,但同时高并发时性能较弱,耗费资源多,但功能模块比nginx多。
nginx:高并发处理能力强、擅长处理静态请求、反向代理、均衡负载。使用更少的资源,支持更多的并发连接,体现更高的效率。
nginx配置简单,Apache配置比较复杂。
9.nginx负载均衡的算法:
(1)轮询(默认)
每个请求逐一分配到不同的后端服务器。
(2)ip_hash
按照IP的hash值结果分配,同一个IP客户端固定访问同一个后端服务器,可以解决session的问题。
(3)url_hash
按照访问的url的hash值结果分配,让同一个url定向到同一个后端服务器。
(4)fair
可以根据页面的大小和加载时间的长短进行负载均衡,响应时间短的优先分配。
10.nginx为什么要做会话保持:
Nginx进行会话保持可以确保用户在与网站进行交互时保持与同一后端服务器的连接,从而保持用户状态信息的一致性和可靠性。
11.nginx会话保持的方式有几种?
基于客户端IP地址的会话保持(ip_hash):根据IP的hash值结果分配,将同一个IP地址指向同一个服务器。
基于URL重写的会话保持(url_hash):根据URL的hash值结果分配,将同一个URL定向到同一个服务器。
基于Cookie的会话保持:通过记录客户的Cookie值,并且根据Cookie值将请求发送到相应的服务器。
jvm_route:jvm_route 是一个第三方 nginx 扩展模块第一次用户发送请求,会采用轮询的方式发送给服务器,然后服务器会添加一个session信息,客户再次请求时,会根据session值发送到相应的服务器。
12.nginx rewrite地址重写的作用:
实现网站地址跳转,例如当用户访问网站80端口时,可以跳转到443端口。 从安全角度上讲,如果在URL中暴露太多的参数,可能会遭到破坏,所以静态化URL地址可以带来更高的安全性。 对搜索引擎的访问进行优化,利于搜索引擎抓取页面。
13.rewrite的相关指令:
Nginx Rewrite 相关指令有 if、rewrite、set、return
set 指令:是用于定义一个变量,并且赋值。
return指令:用于返回状态码给客户端。
14.redirect(302) 和 permanent(301)区别是什么?
对于客户来说,两种方式并没有什么区别,但对于搜索引擎来说,301的重定向更加友好,如果我们把一个地址采用301跳转方式跳转的话,搜索引擎会把老地址的相关信息带到新地址,同时在搜索引擎索引库中彻底废弃掉原先的老地址。
使用302重定向时,搜索引擎(特别是google)有时会查看网站跳转前后哪个网址更直观,然后决定显示哪个,如果它觉得跳转前的URL更好的话,可能地址栏就不会更改。
15.nginx中last和break的区别:
last 标记是指在本条规则执行完后,会对其所在的 server { … } 标签重新发起请求。
break 是指在本条规则匹配完成后,停止匹配,不再做后续的匹配。
16.nginx中root和alias的区别:
root:是默认发布页面的目录。 alias:是一个目录别名的定义。
17.nginx虚拟主机的类型:
基于不同IP的虚拟主机
基于不同端口的虚拟主机
基于不同域名的虚拟主机
18.nginx做动静分离的作用:
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,降低原来单个服务器的压力。通常用nginx做静态页面的处理,用tomcat做动态页面的处理。
19.防盗链的概念:
为了防止其他网站盗取本网站的资源。
20.nginx的rewrite_log存放:
rewrite_log属于notice级别。只会记录在error_log中,那么记得将error_log的级别设置为notice;
21.nginx的平滑升级原理:
(1)在不停掉老进程的情况下,启动新进程。
(2)老进程负责处理仍然没有处理完的请求,但不再接受新请求。
(3)新进程接受新请求。
(4)老进程处理完所有请求,关闭所有连接后,停止。
22.nginx流量限制的作用:
可以用来限制用户在一定时间内HTTP请求的数量。流量限制可以用作安全目的,比如可以减慢暴力密码破解的速率。可以用来抵御 DDOS 攻击。
23.Nginx如何限流:
可以使用漏桶算法和令牌桶算法。
漏桶算法:服务器接受请求和处理请求达到一个平衡,如果接受请求的速度大于处理请求的速度,则会溢出,溢出的请求就会被丢弃。
令牌桶算法:令牌桶以固定的速率生成令牌,并将这些令牌存放在桶中。
每当有一个请求过来时,它需要从令牌桶中获取一个令牌。如果桶中没有足够的令牌,则请求被拒绝或延迟处理。
24.处理突发和无延迟的排队:
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=2r/s; burst=2(队列) nodelay(无延迟的排队)
burst:可以将接收的请求放在队列里等待,当服务器处理完当前的请求,会处理队列中的请求。
nodelay:这个参数可以让队列中的请求无需等待,可以使服务器暂时溢出请求,但是在处理时请求还是会占用队列的位置。比如这个可以同时处理4个请求。
25.nginx的访问控制
基于IP的访问控制,指定location拒绝哪些请求。
基于用户的信任登录。
26.Nginx如何优化?优化的这些参数有什么作用?
在nginx主配置文件中对参数进行修改优化
worker processes auto:该参数可以指定nginx的子进程数他可以提高nginx的并发性能。
worker connections 1024:该参数可以指定nginx的工作进程的最大连接数。增加该值可以提高系统的并发能力。
tcp nopush on:该指令必须在 sendfile 打开的状态下才会生效,主要是用来提升网络包的传输效率。
keepalive timeout 65:长连接的等待时间,可以根据需求进行优化。
gzip on:开启gzip 压缩可以减小传输文件的大小,加快传输速度,减轻网络带宽的负担。
worker rlimit nofile 10240: 更改一个nginx进程能打开的最大文件数可以提高Nginx的并发连接数。
27.Nginx如何做平滑升级:
1.我们需要先下载并解压一个新的nginx版本。
2.进入到新的nginx所在目录执行configure命令,将原有的模块添加上去,再将需要添加的模块添加到后面。
3.使用make进行编译。
4.可以备份原二进制启动文件,然后将编译后的新的二进制文件复制到源码包安装目录中。
5.利用USR2参数启动新的主进程,实现热升级。此时会出现nginx.pid.oldbin
6.利用winch逐步关闭旧的Nginx进程。
7.利用hup重新加载配置文件,使用的新的配置启动工作进程,并逐步关闭旧进程。 8.最后利用QUIT等待请求结束后再退出。
28.如何配置SSL证书,说下流程
首先需要有一个公网ip 和一个域名,然后进行申购 SSL证书。申购成功后,将证书下载并进行解压。在解压之后会看到两个证书文件,将两个证书文件复制到服务器中,通常将证书放在/etc/nginx/ssl/目录下,在证书复制完成之后,需要对 nginx配置文件进行更改,需要添加两个重要配置,一个是 ssl 证书文件的存放路径,另一个是私钥文件的存放路径,在配置完成之后,重启nginx。在server里的配置:
listen 443 ssl;
ssl_certificate /etc/nginx/ssl/example.crt; # 替换为你的证书文件路径
ssl_certificate_key /etc/nginx/ssl/example.key; # 替换为你的私钥文件路径
29.Https加密算法:
对称加密:服务器和客户端加密解密都是同一个加密密钥。
例如:A向B发送数据,A需要先创建一个对称密钥,然后利用密钥对文件进行加密,再将加密后的文件和对称密钥发给B,B收到后利用密钥进行解密。
非对称加密:公钥加密,私钥解密。或者私钥加密,公钥解密。
例如:A向B发送数据,B需要创建一个非对称密钥,然后将公钥发送给A。A拿公钥对文件进行加密,加密之后发送给B,B用私钥进行解密。
30.SSL协议可以分为几层:
SSL协议分为SSL握手协议和SSL记录协议。 SSL握手协议:通信双方进行身份认证,协商加密算法,交换加密密钥等,相当于连接。
SSL记录协议:提供数据封装、解密加密、压缩等一些基本功能的支持。相当于通信。
31.nginx的功能有什么?
正向代理和反向代理,作为web服务器,可以做负载均衡,可以做地址重写,图片压缩,动静分离,可以做流量限制,访问控制,防盗链,会话保持。
32.gzip有多少级别?有什么区别?
有9个级别,分别是1-9,级别越高,压缩比越大,压缩后的文件越小,传输速度更快,但是会消耗nginx服务器的cpu和内存。
33.gzip怎么用的?
gzip on; 开启nginx服务的gzip压缩功能。
gzip_min_length 1k; 设置允许压缩的页面最小字节。
gzip_buffers 4 16k; 设置gzip申请内存的大小,其作用是按块大小的倍数申请内存空间。这里设置以16k为单位,按照原始数据大小以16k为单位的4倍申请内存。
gzip_http_version 1.1; 识别http协议的版本
gzip_comp_level 2; 设置gzip压缩等级
gzip_types text/plain application/x-javascript text/css application/xml;
设置需要压缩的类型,非设置值不进行压缩,即匹配压缩类型
34.Nginx都有哪些功能?有什么作用
静态资源服务(web服务器):Nginx可以快速地提供静态文件的访问,例如HTML、CSS、JavaScript、图片等。
反向代理:作为反向代理服务器,Nginx可以接收客户端请求并将其转发给后端服务器,从而隐藏后端服务器的真实IP地址,并实现负载均衡、高可用性和性能优化。
负载均衡:Nginx支持多种负载均衡算法,如轮询、IP哈希、最少连接数等,可以将请求均匀地分发到多个后端服务器,提高系统的并发处理能力和响应速度。
HTTP缓存:Nginx可以缓存具有相同URL的HTTP请求的响应结果,并在后续请求中直接返回缓存结果,减轻后端服务器的负载,提高请求的响应速度。
SSL/TLS加密:Nginx支持HTTPS协议,并可以配置SSL/TLS证书来加密客户端与服务器之间的通信,提高数据传输的安全性。
动态请求代理:Nginx可以将动态请求(如PHP、Python等脚本语言)转发给后端应用服务器进行处理,并将处理结果返回给客户端。
邮件代理服务器: Nginx 也是一个非常优秀的邮件代理服务器。
35.Nginx 是如何实现高并发的?
异步非阻塞,nginx采用一个master进程,多个woker进程的模式
36.Nginx怎么做负载均衡?
nginx的负载均衡是通过配置文件下的upstream模块下添加ip地址。
37.为什么选择nginx,它的优缺点有哪些?
Nginx 是一个高性能轻量级的 Web 服务和反向代理服务器,相比 于Apache,Nginx 占用更少的资源,支持更多的并发连接,体现更高的效率,nginx安装配置简单,bugs非常少。
缺点是:动态处理差,nginx处理静态文件好,耗费内存少,但是处理动态页面则很鸡肋。
38.nginx正向代理与反向代理的区别,为什么使用反向代理?
区别:正向代理代替客户端发送请求,正向代理服务器和客户端对外表现为一个客户端,所以正向代理隐藏了真实的客户端,保护客户端隐私,服务端接受请求不知道客户端的ip。
反向代理代替服务端接受请求,反向代理服务器和真实服务器对外表现为一个服务端,所以反向代理服务器隐藏真实的服务端,保护服务端隐私,不知道服务端的ip。
使用反向代理服务器可以隐藏IP地址,比较安全
39.为什么做nginx动静分离
静态由Nginx处理, 动态由PHP处理或Tomcat处理,可以提升资源的利用率,效率更高
40.什么是负载均衡?
负载均衡是高可用架构的一个关键组件,主要用来提高性能和可用性,通过负载均衡将流量分发到多个服务器 。
四.Tomcat相关问题
1.Tomcat的默认端口是多少,默认发布目录在哪?怎么修改?
默认端口8080
默认发布目录:tomcat安装目录下的webapps/ROOT
找到tomcat的安装目录,有个conf文件夹,里面有个server.xml。
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> 把这个8080改成你需要的就可以了
2.Tomcat如何优化
采用动静分离节约性能;调整Tomcat的线程池(Executor);调整Tomcat的连接器(Connector);修改tomcat的运行模式(protocol);
增加 Tomcat 的内存分配;调整 Tomcat 的线程池设置,调整线程池的大小和性能;优化 Tomcat 的缓存设置,减少网络连接的开销;启用压缩;启用静态资源缓存。
3.JDK包含什么?jvm三个区
JDK是包含JVM、JRE、JAVA库。
JVM:Java Virtual Machine,Java虚拟机
jre:Java Runtime Environment ,java运行环境
java库:存放一些模块
jvm三个区:新生代,永久代,老年代
4.JVM如何优化?
调整堆栈内存的大小。 在catalina.sh中,可以通过调整 -Xms 和 -Xmx 参数设置初始堆内存和最大堆内存的大小,以平衡内存使用和垃圾回收的效率。 选择合适的垃圾回收器。设置合理的线程数。
5.java的中间件都有哪些?除了Tomcat之外还有哪些?
消息中间件: Active MQ,Rabbit MQ,Rocket MQ,Kafka。
分布式缓存中间件:Memcached、redis、Ehcache。
数据储存中间件:hive。 mycat
五.LVS四层负载相关问题
1.四七层负载均衡的区别
四层负载均衡是基于IP+端口的负载均衡,类似于路由器
七层负载均衡是基于虚拟的URL或主机ip的负载均衡,类似于代理服务器
总之最大的区别就是效率与功能的区别,四层负载架构设计比较简单,无需解析具体的消息内容,在网络吞吐量及处理能力上会相对比较高。而七层负载均衡的架构相对复杂,需要解析用户的URL和请求头信息,性能相对来说会低一些,但是支持的功能比较多,可以做会话保持,图片压缩,防盗链,访问控制,流量限制,地址重写等。根据具体情况考虑对具体业务架构设计。
2.LVS的四种工作模式的区别?
LVS四种工作模式包括:NAT模式、DR模式、 隧道模式(TUN)和双向转换模式。
NAT模式:网络地址转换模式,进站/出站的数据流量都必须经过负载均衡器。
原理:LVS会将客户端请求头中的目的IP改为RS的IP,发给RS,然后RS处理后发给LVS代理服务器,LVS再将源IP改为自己的VIP然后发给客户。无论是进来的流量还是出去的流量,都必须经过负载均衡器。
优缺点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址。但扩展性有限,当服务器节点过多时,大量的数据包都交汇在负载均衡器那,速度就会变慢!
DR 模式:直接路由模式,只有进站的数据流量经过负载均衡器。
原理:网关会把对这个服务的请求全部定向给DB(负载均衡器),而DB收到后根据调度算法,找出对应的RS,把目的MAC地址改为RS的MAC并将请求分发给这台RS。这时RS收到这个数据包,处理完成之后,因为负载均衡器和RS都使用同一个IP,可以直接将数据返给客户。进来的流量需要经过负载均衡器,出去的流量不需要,直接返回客户端。
优缺点:负载均衡器只需要做分发请求,减轻压力,提高效率,但要求负载均衡器的网卡必须与物理网卡在一个物理段上。
IP隧道(Tunnel)模式:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。隧道模式的RS节点需要合法IP,服务器可能只局限在部分Linux系统上。
FULL-NAT模式(双向转换模式):客户端对VIP发起请求,Director接过请求发现是请求后端服务。
3.LVS与Nginx的区别?
nginx工作在网络的第7层,对网络的依赖较小,安装和配置比较简单,内存消耗小。
lvs就比较依赖网络环境,工作在4层,不支持7层规则修改,但是lvs可以对所有应用做负载均衡。
功能:LVS支持多种负载均衡算法和工作模式,可以实现高可用性和可扩展性。而NGINX是一款高性能的Web服务器和反向代理服务器,它可以实现HTTP和HTTPS请求的负载均衡、反向代理、静态文件服务等功能。
层次:LVS主要工作在网络层,做四层负载均衡,是基于IP和端口的负载均衡。NGINX则工作在应用层,通常做七层负载均衡,可以根据HTTP请求的URL和请求头等进行路由选择和负载均衡。
配置和管理:LVS配置相对更复杂,需要通过一些命令行工具或配置文件进行设置和管理。NGINX具有更简单和灵活的配置语法,可以通过编辑配置文件进行详细的管理。
总体来说:LVS更适用于四层负载均衡,适合分发TCP/UDP流量;而Nginx更适用于七层负载均衡,适合分发HTTP请求。选择使用哪种负载均衡技术取决于具体的应用场景和需求。
4.LVS优势和不足
优势:高并发连接、稳定性强、成本低、支持多种算法和多种工作模式、应用范围广可以对所有应用做负载均衡,包括http、数据库、DNS、ftp服务等等。
不足:工作在4层,不支持7层规则修改,机制过于庞大,不适合小规模应用。
六.高可用问题
1.高可用用的什么软件,什么原理?
高可用我们用的是keepalived软件,主要是用来防止单节点故障。keepalived是基于VRRP协议为实现基础的。VRRP是路由冗余协议,它支持多个相同功能的路由器组成一个路由器组,这个路由器组会向客户端提供一个VIP供客户访问,这个路由器组中可以有一个master和多个backup,master负责处理客户的请求,其他backup处于备份状态,master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master,保证路由器的高可用。这就是高可用原理。
2.都给什么做过高可用,说一下步骤和注意事项
给nginx,Ivs和haproxy做过高可用
nginx:使用keepalived做七层的负载均衡,首先要有两台机器做代理服务器,一台做主服务器,一台做备用。对主服务器的配置文件进行配置做负载均衡,配置成功后将配置文件拷贝到备用机器上,测试备用机器是否可以做负载均衡,然后两台机器都下载keepalived服务,对两台机器的keepalived服务的配置文件进行配置,主要配置心跳检测和创建一个vip,并对优先级进行修改,主服务器的优先级比备份的高,配置完成后启动服务。还可以加入检测服务脚本,检测nginx服务是否可用,如果nginx不可用,keepalived的会停止服务,然后备用服务器就会使用vip继续进行服务。
注意事项:要注意添加的vip要在同一网段内,主服务器和备用的定义的名字要不一样,优先级主服务器比备份高,集群的调度器要一致。
lvs:对DR模式:因为lvs和keepalived的适配度很高,所以不用单独对lvs做分配规则和负载均衡,可以直接在keepalived的配置文件里进行配置,安装好keepalived之后,修改配置文件,配置文件里先进行集群配置,还是设置一个vip进行访问,然后对Ivs进行配置,比如启用几个进程,用什么调度算法,用什么协议等,备用机器的配置文件基本一致,就是更改优先级。把用到的vip添加到后端服务器lo网卡上,然后忽略arp广播,匹配精确ip地址回包,然后进行测试即可。
对NAT模式:两台机器做keepalived集群,其中一台作为备用,添加两个桥接模式的网卡,我们需要做两个虚拟ip,一个网卡上添加一个vip,然后修改keepalived的配置文件,首先配置桥接网卡的vip,注意在在一个网段即可,然后配置集群,在配置ens33的vip两台代理服务器配置好了之后,要开启路由转发,然后把ens33的vip添加到使用到的后端服务器上,开启服务即可。
注意事项:给后端服务器设置相同的网关,给服务器做心跳检测和检测服务。
Haproxy:与nginx的类似,也是两台服务器都做负载均衡,都下载keepalived服务,在keepalived的配置文件将IP转发路径改为服务器的IP,主服务器优先级比备份高。
七.Ansible自动化运维相关问题
1.Ansible的工作原理
Ansible是一种自动化工具,可以用于自动化部署、配置管理和编排任务。它基于Python语言开发,使用SSH协议与被管理的主机进行通信。
Ansible通过SSH连接到被管理的主机,并在主机上安装一个称为Ansible的控制节点。使用Ansible模块在被管理主机上执行任务。控制节点上的Ansible将任务以Playbook的形式定义,Playbook是一个YAML文件,描述了需要执行的任务和主机的分组。Ansible通过解析Playbook来确定应该在哪些主机上执行任务,并在被管理主机上逐个执行任务。
ansible 是通过主机清单来控制多台机器,它是一个无代理的架构,通过SSH远程连接,无需在目标主机上安装额外的服务。在进行远程连接时,需要知道目标主机的IP、SSH端口、用户名和密码,需要通过密钥来建立无密码登录。通过SSH连接和使用远程主机上的python解释器来实现配置管理和自动化任务的执行。
主机清单:主机清单中可以写一些分组,在组中写IP地址,定义一个变量组,在组中需要写目标主机的SSH端口号,用户名,还有一些key相关信息。
2.Ansible怎么完成对目标主机的控制
可以先解析IP地址。需要做对目标主机无密码登录。将远程主机的公钥发给目标主机。通过ssh连接目标主机
对ansible目录下的主机清单hosts进行配置:配置一些分组,在组中写目标主机的IP地址,定义一个变量组,在组中需要写目标主机的SSH端口号,用户名,还有一些key相关信息。配置完成后用Ping模块测试是否能连通。
3.Ansible模块都使用过哪些,举例说明?
ansible 被控节点主机名或组名 -m 指定的模块 -a 参数
copy:主要用来复制移动文件
Shell:主要用来在被控制节点执行命令(需要在被控制节点启用一个新的shell处理结束后就直接关闭)
Commod:也是用来在被控制节点执行命令
Yum:主要用来安装rpm包
Service:主要用来管理被控制节点服务的一些启动,停止等
Template:用来调用模板文件
file:主要用来新建文件
4.Ansible在执行前都执行哪些操作?
解析ip地址,关闭防火墙和slinux,ssh连接被控主机,使对目标主机无密码登录,安装ansible,对主机清单文件进行修改,把目标主机地址写到主机清单中,主机清单有主机组和子组还有变量的设置,最后ping一下,使用ping模块检查ansible节点的连通性。
5.你都用Ansible做过什么,举例说明?
批量部署jdk+tomcat+jenkins
我们需要编写一个剧本,将压缩包复制到目标主机,先部署jdk环境,把jdk加入到环境变量中,因为tomcat是基于Java编写的,所以tomcat在启动时需要依赖环境变量,但是在ansible剧本中source无法直接使用,需要加入到tomcat启动文件中,在我们启动tomcat时,环境变量会自动加载,如果jenkins压缩包是以.WAR结尾的,我们只需要将jenkins解压后放入到tomcat的webapps目录下,在启用tomcat时会自动解压,我们可以通过ip+端口+/jenkins访问。这样就部署完成了。
6.Ansible中的shell模块与command模块的区别
command 模块:该模块用于在远程主机上执行不依赖于 Shell 环境的命令。它直接调用可执行程序,不会启动一个临时的 shell。这种直接执行命令的方式可能会导致某些特殊 Shell 功能不可用。例如,通配符展开、输入和输出重定向等对于 command 模块而言是无效的。
示例使用 command 模块执行命令:
- name: 使用 command 模块执行命令
command: /path/to/executable --option argument
shell 模块:该模块用于在远程主机上执行需要在 Shell 中运行的命令。它通过远程 shell 执行命令,会启动一个临时的 Shell 进程,并在该 Shell 中执行指定的命令。这使得可以使用 Shell 的功能,例如通配符展开、管道操作符、变量替换等。
示例使用 shell 模块执行命令:
- name: 使用 shell 模块执行命令
shell: /path/to/executable --option argument
需要注意的是,使用 command 模块在大多数情况下更可靠且高效,因为它避免了启动临时的 Shell 进程。只有当需要使用特定的 Shell 功能时,才应该使用 shell 模块。
7.Ansible相对于其他运维工具的优势
简单易用:Ansible可以使用YAML语法来完成自动化任务,易于理解和编写。
无需代理:Ansible 采用 SSH 协议与远程主机通信,无需在远程主机上安装额外的代理程序,减少了配置和维护的复杂性。
高扩展性:Ansible 可以轻松地扩展到数千台主机,并且具有良好的性能。
自动化编排:Ansible 具有强大的编排能力,可以将多个任务按照顺序或并行执行。
8.查看一个目录的大小
du -sh
9.Ansible都用来做什么?
实现了批量系统配置;批量程序部署;批量运行命令;自动化运维工具
10.Ansible的优缺点有什么?
优点:模块工作基于ssh连接,不需要服务器端,使用时直接运行命令即可。
轻量级不用安装客户端分布式的
缺点:二次开发难,ssh如果拷贝公钥不成功,无法实现批量管理。
如果控制的机器少不适合用ansible
八.关系型与非关系型数据库(redis)
1.关系与非关系的区别:
有以下几个主要区别:
数据结构:关系型数据库采用表格的结构来组织数据,数据之间通过键值关联。而非关系型数据库则采用更灵活的数据模型,如键值对、文档、图形等。(视频,音频)
数据一致性:关系型数据库通常支持 ACID(原子性、一致性、隔离性、持久性)事务,确保数据在任何时间点都保持一致性。非关系型数据库一般不支持 ACID,但可以提供更高的可扩展性和性能。
可扩展性:非关系型数据库通常具有良好的可扩展性,可以轻松地处理大规模数据集和高并发访问。关系型数据库在面对大规模数据和高并发时可能遇到性能瓶颈,需要进行优化。
灵活性:非关系型数据库对于数据结构的修改和扩展更加灵活,可以轻松地适应不同的数据模型和需求变化。关系型数据库在数据结构变更时需要进行严格的模式更改和数据迁移。
根据应用场景和需求,选择合适的数据库类型是很重要的。关系型数据库适合需要强一致性和复杂查询的应用,如传统的企业应用;非关系型数据库适合需要高可扩展性和灵活性的应用,如大数据、实时分析和社交网络。
2.redis的优势有哪些,特点是什么?(为什么选择redis)
高性能:Redis将数据存储在内存中,通过直接读写内存来提高读写速度。可以处理大量并发请求,并且具有非常低的延迟。
丰富的数据类型:可以支持多种数据结构,比如键值对、字符串、列表、图片、音频等。
支持持久化:可以将数据进行永久保存。
支持事务:能够保证数据的完整性和一致性。
支持主从:可以冗余备份,提高读性能,可以降低主服务器的压力。
内置的数据缓存:可以将经常访问的数据存储在redis中,提高读写性能,减轻后端服务器的压力。
高并发:Redis采用了单线程的模型,通过队列和事件驱动等机制实现高并发的处理能力。
分布式支持:Redis提供了多种分布式方案,包括主从复制、哨兵机制和集群模式等。这些机制可以提供高可用性和容错能力,保证系统的稳定运行。
特点:丰富的数据结构,支持持久化,支持事务,支持主从,高并发能力强,分布式支持。
3.redis数据持久化的方式有哪些,有什么区别?
redis两种持久化的方式,分别是RDB(Redis DataBase)和AOF(Append Only File)
RDB:是在不同的时间点,将redis存储的数据生成快照并存储到磁盘等介质上
特点:周期性,在备份是不影响数据写入,RDB会启动子进程,备份所有数据。高效性,一次性还原所有数据。完整性较差,故障点到上一次备份,之间的数据无法恢复。
AOF方式:实现持久化的方式是将redis执行过的所有写指令记录下来,在下次重启redis时,就会把这些指令从前到后再重复执行一遍,这样就实现了数据恢复。
特点:实时性、完整性较好、体积大(数据多,记录数据的指令,删除的指令也会被记录下来)RDB:写入速度速度慢。AOF:写入速度快。
4.redis相比于memcached有哪些优势?
memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型
redis可以持久化其数据
5.redis常见性能问题与解决方案
(1) Master最好不要做任何持久化工作,如RDB内存快照和AOF日志文件
(2) 如果数据比较重要,某个Slave开启AOF备份数据,策略设置为每秒同步一次
(3) 为了主从复制的速度和连接的稳定性,Master和Slave最好在同一个局域网内
(4) 尽量避免在压力很大的主库上增加从库
(5) 主从复制不要用树状结构,用单向链表结构更为稳定,即:Master(写) <- Slave1(读) <- Slave2(读) <- Slave3(读)...
这样的结构方便解决单点故障问题,实现Slave对Master的替换。如果Master挂了,可以立刻启用Slave1做Master,其他不变。
6.redis集群的工作原理
多主多从+哨兵模式
7.redis哨兵的作用
(1)对master状态进行检测。
(2)如果master异常,就会发生主从切换。
(3)主从切换之后,sentinel监控目标也会发生改变。
8.redis哨兵的工作原理
哨兵会向主机发送ping命令,当哨兵得不到回复达到设置的发送数量时,则会随机顶上一个哨兵作为主机。
Sentinel哨兵是为了检测redis集群中master的状态的工具。哨兵会向master做心跳检测,当master的响应时间超过设置的值,master就会被标记为主观下线,这时候其他从服务的setinel实例会向master做心跳检测,如果有足够数量的sentinel实例确认master进入了主观下线状态,这时候master就会被标记为客观下线,然后会将其中一个slave作为master,实现主从切换,sentinel的监控目标也会发生改变。
9.redis主从复制的原理?
从服务器会向主服务器发送SYNC指令,当主服务器收到后,主服务器会调用BGSAVE来进行持久化工作,将数据写入到RDB文件中,在数据持久化期间,如果有其他数据写入,就会先缓存到内存中,在BGSAVE命令执行完成后,主服务器会将RDB文件发送给从服务器,从服务器收到后将其存入磁盘中,然后再读取到内存中,这个过程完成之后,主服务器再将内存中的数据以redis协议的格式发送给从服务器,然后从服务执行一遍保存到磁盘中。
10.redis有几种集群模式?
有三种,主从复制,哨兵模式,redis-cluster集群
主从复制(Master-Slave Replication):这是最简单的集群模式,其中一个Redis实例作为主节点(Master),负责处理写操作,并将数据同步到一个或多个从节点(Slave)。从节点负责处理读操作,并复制主节点的数据。如果主节点故障,可以从从节点中选举出一个新的主节点。
哨兵模式(Redis Sentinel):Sentinel是Redis自带的高可用性解决方案,它通过监控Redis实例的健康状态,自动进行故障转移和故障恢复。Sentinel集群由多个Sentinel节点组成,它们通过选举一个主节点和若干个从节点来提供服务。
去中心化集群(Redis Cluster):Redis Cluster是Redis官方推荐的分布式集群方案。它将数据分片存储在多个节点上,并通过节点间的相互协作来提供高可用性和扩展性。每个节点都存储分片的一部分数据,并负责处理对应分片的读写请求。
这些是Redis的常见集群模式,选择适合自己需求的集群模式需要考虑数据一致性、可用性、性能和扩展性等因素。
11.redis缓存穿透?redis缓存雪崩?redis缓存击穿?
缓存穿透:请求根本不存在的资源,恶意或频繁请求一个不存于缓存的数据,导致请求直接访问后端数据库,导致压力过大,从而卡死或宕机。
解决方法:对空值进行缓存,对redis进行实时监控,使用布隆过滤器(用户访问的时候判断该资源是否存在,不存在则直接拒绝访问),使用接口校检(类似于用户权限的拦截)
缓存雪崩:redis中大量的key集体过期,使大量缓存失效或过期同时发生,从而导致所有请求都去访问后端数据库DB,导致数据库CPU和内存负载过高,甚至宕机。
解决方法:合理设置缓存的过期时间,通过分散缓存的过期时间,避免同时发生大量缓存失效。使用多级架构,设置缓存标记,使用锁或者队列的方式。
缓存击穿:redis中的某个热点key过期,但是此时有大量的用户访问该过期key
解决方法:提前对热点数据进行设置,监控数据,适时调整,使用锁机制。
12.redis是什么?
Redis(Remote Dictionary Server) 是一个使用 C 语言编写的,开源的(BSD许可)高性能非关系型(NoSQL)的键值对数据库。
Redis 可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。
与传统数据库不同的是 Redis 的数据是存在内存中的,所以读写速度非常快,因此 redis 被广泛应用于缓存方向,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。
13.你都了解哪些关系型数据库和非关系型数据库?
关系型数据库(sql):Oracle ,Microsoft SQL Server ,MySQL ,MariaDB
Oracle:占内存大,收费的大型数据库,具有广泛的应用场景和功能
SQL Server:支持windows和linux平台
Mysql:社区的是开源免费,常用于Web应用程序和小型企业应用
MariaDB:MySQL的分支,是一个由社区支持的开源项目,提供高可用性和可扩展性。
非关系型数据库(nosql):redis ,MongDB,HBase
Redis:是最著名的键值存储。Redis是用C语言编写的。它是根据BSD授权的。
MongoDB:是一个面向文档的开源NoSQL数据库。
HBase:是谷歌为BigTable数据库设计的分布式非关系数据库。
14.如何解决redis,mysql双写一直性?
最经典的缓存+数据库读写的模式:
读的时候,先读缓存,缓存没有的话,就读数据库,然后取出数据后放入缓存,同时返回响应。更新的时候,先更新数据库,然后再删除缓存。
给缓存设置过期时间,这种方案下,可以对存入缓存的数据设置过期时间,所有的写操作以数据库为准,也就是说如果数据库写成功,缓存更新失败,那么只要到达过期时间,则后面的读请求自然会从数据库中读取新值然后回填缓存。
15.redis缓存并发是什么?
指的是多个redis的客户端(client)同时set key引起的并发问题。其实redis自身就是单线程操作,多个client并发操作,按照先到先执行的原则,先到的先执行,其余的阻塞。
16.redis缓存预热是什么?
是指系统上线后,将相关的缓存数据直接加载到缓存系统中。
这样就可以避免在用户请求的时候,先查询数据库,然后再将数据缓存的问题!这样用户就会直接查询事先被预热的缓存数据!
解决方法:直接写个缓存刷新页面,上线时手工操作下;数据量不大,可以在项目启动的时候自动进行加载;目的就是在系统上线前,将数据加载到缓存中。
关于redis的其他面试:
1.Redis官方为什么不提供Windows版本?
因为目前Linux版本已经相当稳定,而且用户量很大,无需开发windows版本,反而会带来兼容性等问题。
2.一个字符串类型的值能存储最大容量是多少?
512M
3.Redis集群方案什么情况下会导致整个集群不可用?
有A,B,C三个节点的集群,在没有复制模型的情况下,如果节点B失败了,那么整个集群就会以为缺少5501-11000这个范围的槽而不可用。
4.说说Redis哈希槽的概念?
Redis集群没有使用一致性hash,而是引入了哈希槽的概念,Redis集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽,集群的每个节点负责一部分hash槽。
5.Redis集群之间是如何复制的?
异步复制
6.Redis集群最大节点个数是多少?
16384个。
7.Redis集群如何选择数据库?
Redis集群目前无法做数据库选择,默认在0数据库。
8.怎么测试Redis的连通性?
ping
9.如何与Redis互动?
安装服务器后,您可以运行redis安装提供的Redis客户端,也可以打开命令提示符并使用以下命令:redis-cli
10.使用Redis有什么好处?
Redis非常快。它支持服务器端锁定。它有一个丰富的客户端库。这是一个很好的反击。它支持原子操作。
11.使用Redis有哪些缺点/限制?
它是单线程的。它对一致哈希的客户端支持有限。它具有很大的持久性开销。它没有广泛部署。
12.Redis和RDBMS有什么区别?
Redis是NoSQL数据库,而RDBMS是SQL数据库。
Redis遵循键值结构,而RDBMS遵循表结构。
Redis非常快,而RDBMS相对较慢。
Redis将所有数据集存储在主存储器中,而RDBMS将其数据集存储在辅助存储器中。
Redis通常用于存储小型和常用文件,而RDBMS用于存储大文件。
Redis仅为Linux,BSD,Mac OS X,Solaris提供官方支持。它目前没有为Windows提供官方支持,而RDBMS提供对两者的支持
13.什么是redis的事务?
a)事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
b)事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。
14.Redis单点吞吐量
单点TPS达到8万/秒,QPS达到10万/秒,补充下TPS和QPS的概念
1.QPS: 应用系统每秒钟最大能接受的用户访问量
每秒钟处理完请求的次数,注意这里是处理完,具体是指发出请求到服务器处理完成功返回结果。可以理解在server中有个counter,每处理一个请求加1,1秒后counter=QPS。
2.TPS: 每秒钟最大能处理的请求数
每秒钟处理完的事务次数,一个应用系统1s能完成多少事务处理,一个事务在分布式处理中,可能会对应多个请求,对于衡量单个接口服务的处理能力,用QPS比较合理。
15.Redis的多数据库机制,了解多少?
正常:Redis支持多个数据库,并且每个数据库的数据是隔离的不能共享,单机下的redis可以支持16个数据库(db0 ~ db15)
集群: 在Redis Cluster集群架构下只有一个数据库空间,即db0。因此,我们没有使用Redis的多数据库功能!
16.Redis集群机制中,你觉得有什么不足的地方吗?
假设我有一个key,对应的value是Hash类型的。如果Hash对象非常大,是不支持映射到不同节点的!只能映射到集群中的一个节点上!还有就是做批量操作比较麻烦!
17.懂Redis的批量操作么?
正常: 比如mset、mget操作等
集群: 我们在生产上采用的是Redis Cluster集群架构,不同的key会划分到不同的slot中,因此直接使用mset或者mget等操作是行不通的。
18.你们有对Redis做读写分离么?
正常:没有做
集群:不做读写分离。我们用的是Redis Cluster的架构,是属于分片集群的架构。而redis本身在内存上操作,不会涉及IO吞吐,即使读写分离也不会提升太多性能,Redis在生产上的主要问题是考虑容量,单机最多10-20G,key太多降低redis性能.因此采用分片集群结构,已经能保证了我们的性能。其次,用上了读写分离后,还要考虑主从一致性,主从延迟等问题,徒增业务复杂度。