[关闭]
@yangwenbo 2023-07-31T10:03:29.000000Z 字数 27609 阅读 508

面试笔记(技术)

运维基础知识

一、运维130题

1、Rsync有几种模式?

共有3种模式:
1. 使用rsync在本地备份传输数据
2. 借助ssh通道在不同主机之间传输数据
3. 以socket进程的方式传输数据

rsync的流氓属性:我复制给你你所没有的文件,同时删除你有我没有的文件(保存两台服务器数据的完全同步)

2、Rsync的socket模式的监听端口号?

端口号: 873

3、Rsync的限速参数?

--bwlimit=rate

4、Rsync+inotify每秒支持的并发传输文件数?(小于1秒)

200个文件(10-100k)

5、NFS挂载原理?

  1. 首先服务端启动RPC服务,默认监听端口号:111
  2. 其次服务端启动NFS服务,并向RPC注册端口信息
  3. 客户端启动RPC服务,然后向服务端的RPC服务发送请求,索要NFS服务的端口号
  4. 服务端的RPC把NFS的端口号告诉客户端的RPC ,同时进行标记
  5. 客户端通过获得的端口号与NFS服务端进行连接

6、NFS服务的监听端口号?

NFS服务本身不监听任何端口,服务端的rpc服务监听111端口,nfs服务向rpc服务进行端口注册,由rpc服务向客户端提供nfs连接端口

7、NFS在/etc/fstab里配置开机自动挂载失败了。为什么?

因为/etc/fstab会优先于网络被Linux系统加载。网络没启动时,执行fstab会导致无法连接NFS服务器端,从而无法实现开机挂载。
解决方法:
1. 开启开机自启动netfs服务,将挂载命令放入/etc/fstab里可以实现开机挂载
2. 将nfs客户端挂载命令放在/etc/rc.local中 。

8、企业自定义yum源的命令叫什么?请手写一个简单的自定义yum源文件(包路径:/root/rpm/)

答:createrepo

  1. [test]
  2. name=test
  3. baseurl=file:///root/rpm/
  4. gpgcheck=0
  5. enabled=1

9、mysql默认端口号

端口号:3306

10、新安装的mysql设置root密码的命令

  1. mysqladmin -uroot password '密码';

11、创建一个叫做yunjisuan的库?

  1. create database yunjisuan;

12、删除一个叫做yunjisuan的库?

  1. drop database yunjisuan;

13、查看mysql.user表里的user,host,password字段的所有数据

  1. select user,host,password from mysql.user;

14、MySQL插入一条数据(写语句的架构即可)

insert into 表名(字段1,字段2,…) values(‘字段1的值’,’字段2的值’…)

  1. insert into yun.hou (user_name, password) values('zhangsan', password('123123'));
  2. insert into yun.hou values('zhangsan', password('123123'));

15、MySQL更新一条数据(写语句的架构即可)

update 表名 set 字段1=’字段1的值’, 字段2=’字段2的值’ where 条件表达式;

  1. update yun.hou set user_name='wangwu', password=password('333333') where user_name='zhangsan';

16、MySQL删除一条数据(写语句的架构即可)

delete from 表名 where 条件表达式;

  1. delete from yun.hou where user_name='wangwu';

17、授 权账号yunjisuan拥有192.168.200.0/24网段的所有登陆和修改权限,密码333333

  1. grant all on `*.*` to 'yunjisuan'@'192.168.200.%' identified by '333333';
  2. flush privileges;

18、让mysql的设置立刻生效(刷新)。

  1. flush privileges

19、查看当前用户的权限记录

  1. show grants

20、查看yunjisuan@'192.168.200.%'账号的权限记录

  1. show grants for 'yunjisuan'@'192.168.200.%';

21、修改账户yunjisuan@'192.168.200.%'的密码为:666666

  1. update mysql.user set password=password('666666') where host='192.168.200.%' && user='yunjisuan';
  2. flush privileges;

22、什么叫慢查询日志,它用来做什么的?如何打开慢查询日志(配置文件命令)

就是一条语句执行的时间过长,会被记录答慢查询日志。

  1. Long_query_time=5
  2. Log-solw-queries=mysql_slow.log

23、索引的五种分类

  1. 普通索引
  2. 唯一索引
  3. 主键(特殊的唯一索引)
  4. 全文索引
  5. 单列索引与多列索引

24、事务的四个属性

  1. 原子性(Atomicity)
  2. 一致性(Consistency)
  3. 隔离性(Isolation)
  4. 持久性(Durability)

25、查看系统内置变量 autocommit的信息

show variables like '%autocommit%';

26、mysql数据库的全备命令(备份所有的库所有的表)

  1. mysqldump -u账号 -p密码 --opt --all-databases > 文件路径

27、msyql数据库备份指定库(benet,yunjisuan)的命令

  1. mysqldump -u账号 -p密码 --databases benetyunjisuan > 文件路径

28、开启MySQL中继日志的配置文件参数

  1. Relay-log=relay-bin

29、MySQL数据库开启二进制日志的配置文件的参数是什么?

  1. log-bin=mysql-bin

30、控制MySQL二进制日志大小的参数是什么?

  1. max_binlog_size=102400

31、MySQL数据库强制刷新binlog日志的配置文件参数

  1. flush logs;

32、MyISAM引擎的特点(五条)

  1. 不支持事物,功能单一
  2. 表级锁定,不支持并发读写
  3. 读的速度非常快,读写互斥
  4. 只缓存索引,不缓存数据
  5. 内存占用少,对服务器要求低

33、InnoDB引擎的特点(五条)

  1. 支持事物,支持4个事务隔离级别
  2. 行级锁定但是全表扫描仍然会是表级锁定,单表支持并发写,写支持好
  3. 读写阻塞与事务隔离级别相关
  4. 能缓存索引也能缓存数据
  5. 内存、CPU占用大,对服务器的要求比较高

34、MySQL主从复制原理详解

准备工作:

  • Master(主库):
    • 开启binlog日志log-bin=mysql-bin
    • 创建主从复制账号及密码
    • 在主库的MySQL配置文件/etc/my.cnf中的[mysqld]模块中设置
      Server-id = 1
  • Slave(从库):
    • 关闭binlog日志,开启中继日志relay-log = relay-bin
    • 告诉从库:主库IP地址和端口号、主从复制账号及密码、当前binlog日志名及在当前binlog日志中所处的位置
    • 在从库的MySQL配置文件/etc/my.cnf中的[mysqld]模块中设置
      Server-id = n (注:n不为1)
    • 开启从库start slave

原理:

  • 在Slave服务器上执行start slave命令开启主从复制开关,开始进行主从复制
  • 此时,Slave服务器的I/O线程会通过在Master上已经授权的复制用户权限请求连接Master服务器,并请求从指定binlog日志文件的指定位置(日志文件名和位置就是在配置主从复制服务时执行change master命令指定的)之后开始发送binlog日志内容。
  • Master服务器接收到来自Slave服务器的I/O线程的请求后,其上负责复制的I/O线程会根据Slave服务器的I/O线程请求的信息分批读取指定binlog日志文件指定位置之后的binlog日志信息,然后返回给Slave端的I/O线程。返回的信息中除了binlog日志内容外,还有在Master服务器端记录的新的binlog文件名称,以及在新的binlog中的下一个指定更新位置。
  • 当Slave服务器的I/O线程获取到Master服务器上I/O线程发送的日志内容,日志文件及位置点后,会将binlog日志内容依次写到Slave端自身的Relay Log(即中继日志)文件(MySQL-relay-bin.xxxx)的最末端,并将新的binlog文件名和位置记录到master-info文件中,以便下一次读取Master端新binlog日志时能够告诉Master服务器从新binlog日志的指定文件及位置开始请求新的binlog日志内容。
  • Slave服务器端的SQL线程会实时检测本地Relay Log中I/O线程新增加的日志内容,然后及时地把Relay Log文件中的内容解析成SQL语句,并在自身Slave服务器上按解析SQL语句的位置顺序执行应用这些SQL语句,并在relay-log.info中记录当前应用中继日志的文件名及位置点。

35、MySQL临时锁表只读命令

  1. flush table with read lock

36、MySQL解除临时锁表只读命令

  1. unlock tables

37、输入命令临时跳过一条sql线程的解析的命令

  1. set global sql_slave_skip_counter=1;

38、MySQL主从复制延迟时间,在哪里查看?(具体参数)

在从库输入show slave status\G;看从库的信息
具体的参数second_behind——master=0

39、MySQL主从复制延迟时间大,都有哪些可能的原因及你建议的解决办法?

慢语句过多,优化慢速语句,还有就是主库的并发数太多,从库是一条一条的执行,优化建议升级到5.7以上。

40、假如MySQL的binlog日志把系统盘空间占满了,你如何在不影响数据安全的情况下解决这个问题?

每周一次全备,可以将之前的二进制日志删了,还有就是在配置文件里直接现在二进制日志的大小,让他不至于太大

41、MySQL5.6x版和MySQL5.7x版本的数据库有什么新特性?

mysql 5.6版本以后都变成了一个小库一个线程。
5.7开始变成了一组一组的解析。解决了主从复制延迟时间的问题

42、MHA故障切换转移原理

MHA由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。MHA Manager可以独立部署在一台独立的机器上管理多个Master-Slave集群,也可以部署在一台Slave上。把主库master的binlog日志复制,当Master出现故障时,系统会找出relay-log日志最全的从库slave,然后将其relay-log同步到其它从库,提升此从库slave为新的主库,并让所有其余的从库重新指向新的主库,同时把复制出来的binlog日志放到新的主库中。

43、MySQL的从库的relay-log日志如果太大了怎么办?

备份binlog日志,使用全备方式,只保留一个月的数据,超过一个月的数据删除

44、MHA的MySQL高可用架构,如何解决MHA管理端的单点问题?

在每一个mysql服务器上加一个mha管理端

45、用户访问网站的基本流程

  1. 浏览器输入域名
  2. DNS进行域名解析,解析出IP地址
  3. 浏览器发起一个http协议请求
  4. web响应用户发的请求,发了一个响应包
  5. 用户浏览器解析http协议的响应包,出现了网站的具体内容

46、DNS域名解析流程(DNS递归查询,DNS迭代查询)

DNS递归查询:

  1. 系统先去自己的缓存查找,有没有要访问的IP
  2. 缓存里没找到,再找本地映射文件hosts
  3. 如没有就去找本地的LDNS,LDNS先查看自己的缓存记录
  4. 如没找到,LDNS再去找自己的映射文件
  5. 接着LDNS去找域名记录本,如果还LDNS找不到域名解析信息,就会请求外援进行迭代查询

迭代查询:

  1. LDNS会从DNS系统的(.)根服务器开始请求域名的解析,如www.baidu.com。DNS根
    服务器先会把.com对应的DNS服务器地址返回给LDNS。
  2. LDNS获取到.com对应的DNS服务器地址后,就会去.com服务器请求www.baidu.com域名的解析,.com服务器会把baidu.com对应的DNS服务器地址返回给LDNS
  3. LDNS再去baidu.com服务器请求www.baidu.com域名的解析,baidu.com服务器会反馈www.baidu.com对应的IP解析记录,如果此时没有,就表示企业的域名人员没有为www.baidu.com域名做解析,即网站还没架设好。
  4. LDNS把获取到的www.baidu.com对应的IP解析记录反馈给客户端浏览器,同时LDNS会进行解析记录。至此,整个DNS的解析流程就完成了。

47、http和https的默认端口号?

80与443

48、返回码:200、301、302、304、403、404、500、502、503、504的含义

  • 200成功
  • 301永久跳转
  • 302暂时跳转
  • 304拿的是缓存的
  • 403权限拒绝
  • 404找不到服务器
  • 500服务器内部问题
  • 502找不到路由
  • 503服务器当前不可用
  • 504响应超时

49、http协议里GET和POST请求的区别?

GET:读请求,明文。POST:写请求,加密传输。

50、什么是静态网页,什么是动态网页?

静态网页(.htm、.html等常见后缀扩展名形式)是只能看,不能交换数据的网页,动态网页(.asp、.php、.js等形式作为后缀的)就是能交换数据,有数据库支持的网页。

51、伪静态网页的本质是什么?

伪静态网页就是将内存中临时生成的动态网页写入到硬盘中,当用户下次有相同的访问请求时,直接以静态网页的形式返回给用户。

52、前端语言的种类,后端语言的种类

前端:html、Css、安卓;后端:java、Python

53、uri是什么?请求是什么?

uri:即统一资源标识符,表示页面的存储路径和资源的具体地址。
请求: URL,即网页地址,是Internet上用来描述信息资源的字符串。

54、报头是什么?主体是什么?

报头:即http数据包头部,记录了访问用户和服务端的属性信息。
主体:网页内容,装载了返回给客户端的数据。

55、什么是IP,PV,UV?

  • ip是独立ip每个链接web服务器的ip地址。
  • Pv是用户点击一次网页就记录一个pv。
  • Uv是没个用户访问网页的时候都会发一个cookie,一个cookie是一个uv,有的就不记录,没有的就新发一个并记录一个uv

56、Nginx服务三大功能?

  • Web服务;
  • 反向代理负载均衡;
  • 前端业务数据缓存服务

57、apache和nginx的网络模型是什么?

Apache是select同步阻塞模型,Nginx是epoll异步模型

58、同步阻塞I/O和异步非阻塞I/O的含义?

  1. 阻塞:一个调用过程必须完成才返回。对于IO操作,如果IO没有准备好,读取或者写入等函数将一直等待。
  2. 非阻塞:一个调用过程会立即返回,无论结果怎样。对于IO操作,读取或者写入函数总会立即返回一个状态,要么读取成功,要么读取失败(没有数据或被信号中断等)。
  3. 同步阻塞:所有动作依次顺序执行。单线程可完成。
  4. 异步非阻塞:Callback模式,注册回调,等待其他线程利用回调执行后续处理。

59、什么叫做连接保持,它的作用是什么?

一次数据传输完成后,服务器不是立即断开连接,而是会保持数据传输状态一段时间以等待新的数据,不需要进行tcp三次握手四次挥手,这个时间称为联络保持。可避免频繁的socket创建,节省服务器资源。

60、如果用户是通过IP地址访问网站的,如何让它只能看指定的server网站?

在域名的后面加上default_server;的字段

61、nginx的location五种优先级过滤规则

  • 精确匹配(=)
  • 特殊匹配(^~)
  • 普通匹配(~*,~)
  • 字符串
  • 默认匹配(/)

62、nginx的403访问报错有可能是什么原因?

  • Nginx配置文件里没有配置默认首页参数,或者首页文件在站点目录下没有如下内容:
    index index.php index.html index.htm;
  • 站点目录或内部的程序文件没有Nginx用户访问权限
  • Nginx配置文件中设置了allow,deny等权限控制,导致客户端没有访问权限。
  • return 403

63、nginx的404访问报错有可能是什么原因?

服务器找不到客户端请求的指定页面,可能是客户端请求了服务器上不存在的资源导致。

64、LNMP服务器运行原理?

  1. 用户通过浏览器输入域名请求Nginx Web服务,如果请求是静态资源,则由Nginx解析返回给用户;
  2. 如果是动态请求(.php结尾),那么Nginx就会把它通过FastCGI接口发送给PHP引擎服务(FastCGI进程php-fpm)进行解析;
  3. 如果这个动态请求要读取数据库数据,那么PHP就会继续向后请求MySQL数据库,以读取需要的数据,并最终通过Nginx服务把获取的数据返回给用户。

65、fastcgi是什么?它的客户端和服务端名字叫啥?

FastCGI是一个可伸缩的,高速地在HTTP服务器和动态脚本语言间通信的接口,主要优点是把动态语言和HTTP服务器分离出来。
客户端:fastcgi-pass
服务端:php-fpm

66、fastcgi服务端监听什么端口

9000

67、在nginx配置文件里,哪行代码体现了fastcgi客户端和服务端的数据传输过程?

  1. fastcgi_pass 127.0.0.1:9000;

68、什么叫做高可用?什么叫做单点故障?

  • 集群中一个节点发生故障,导致整个集群服务停止叫做单点故障。
  • 高可用:在集群中,任意一个节点出现故障,该节点上的所有任务会自动转移到其他正常的节点上,确保集群不受影响,主要预防单点故障发生。

69、lvs四层负载均衡和nginx七层反向代理的本质区别?

  • lvs四层负载均衡本质是完全转发
  • nginx七层反向代理是代替用户重新发起请求

70、手写一个简单的负载均衡配置文件(必须包含server模块和upsteam模块内容)

  1. 服务池的名字www_pools
  2. RS节点俩个,IP地址为:192.168.200.100 192.168.200.200
  1. worker_processes 1;
  2. events {
  3. worker_connections 1024;
  4. }
  5. http {
  6. include mime.types;
  7. default_type application/octet-stream;
  8. sendfile on;
  9. keepalive_timeout 65;
  10. upstream www_server {
  11. server 192.168.200.100 weight=1;
  12. server 192.168.200.200 weight=1;
  13. }
  14. server {
  15. listen 80;
  16. server_name www.yunjisuan.com;
  17. location / {
  18. proxy_pass http://www_server;
  19. }
  20. }
  21. }

71、新搭建的nginx反向代理,但后方节点RS的访问日志里没有用户的真实来源IP.请问这是为什么?以及如何让后方Web访问日志记录用户的真实来源IP地址。

  1. 用户发送的请求是由nginx代理转发的,所以访问日志里的IP地址是nginx反向代理的IP;
  2. 反向代理的配置文件里的location里添加以下代码:
    Proxy_set_header x-forwarded-for $remote_addr;

72、新搭建的nginx反向代理,后边RS虚拟了两个网站,bbs和www。但是,我们发现无论用bbs还是www域名访问反向代理时,只能看到RS的第一个bbs网站。请问这是为什么?以及要如何避免这种问题?

当用户访问域名时确实是携带了www.yunjisuan.com主机头请求Nginx反向代理服务器,但是反向代理向下面节点重新发起请求时,默认并没有在请求头里告诉节点服务器要找哪台虚拟主机,所以,Web节点服务器接收到请求后发现没有主机头信息,因此,就把节点服务器的第一个虚拟主机发给了反向代理了。解决这个问题的方法,就是当反向代理向后重新发起请求时,要携带主机头信息,以明确告诉节点服务器要找哪个虚拟主机。在Nginx代理www服务虚拟主机配置里增加如下一行配置
proxy_set_header host $host;
在代理向后端服务器发送的http请求头中加入host字段信息后,若后端服务器配置有多个虚拟主机,它就可以识别代理的是哪个虚拟主机。

73、什么叫做会话保持?Nginx反向代理服务器实现会话保持的三种方法?

就是验证的时候,是一个节点发的验证,回来的时候负载均衡可能会发给别的节点,连接不上就是会话保证不了,回来的时候能验证了就是会话保持。
Ip_hash cookie共享 session共享。

74、简单描述网站图片盗链的本质是什么?

本质就是将别人的资源服务器的url写到自己的主页里,浏览器读图片的时候回去别人的资源服务器找资源

75、NginxWeb服务器图片访问基本流程原理?

Nginxweb服务器接到用户请求,先去获取所请求数据中文字的信息和图片的URL,接着Nginxweb会根据之前获取的URL去存储服务器中把图片取出来返回给用户。

76、lvs有几种模式,模式之间的本质区别在哪里

LVS有四种工作模式:NAT模式、TUN模式、DR模式、FULLNAT模式。

  • NAT模式:LVS开始把用户请求包作DNAT转换为后方RS节点的IP,后来通过LVS把RS节点的响应包作SNAT转换发给网关。(两次经过LVS)
  • FullNAT模式:请求数据包来回都经过LVS,并同时作DNAT和SNAT地址转换,不过来回经过的是不同的LVS负载均衡器。
  • TUN模式:通过IP隧道技术在LVS转发数据包给后方节点时在数据包前边封装一个IP头部,响应包不经过LVS。(只经过一次LVS,并通过IP隧道技术给数据包加装IP头部)
  • DR模式:通过修改请求数据包的目标Mac地址,将请求发给RS服务器,RS服务器响应包直接发给网关,而不经过LVS。(只经过一次LVS,通过修改数据包的Mac地址找后方节点)

77、lvs负载均衡器上有几块网卡,他后边的web节点,在什么模式下也需要双网卡

LVS上有两块网卡,它后方的web节点在DR模式下也需要双网卡。

78、lvs的dr模式的原理

  1. 用户请求找到网关的公网IP,网关把请求数据包作DNAT地址转换成VIP;
  2. 网关通过ARP协议获取到LVS负载均衡器的MAC地址,把请求数据包转发到LVS负载均衡器上;
  3. 负载均衡服务器LVS根据调度算法选出一台RS服务器,通过ARP协议获取RS服务器的MAC地址,并将数据包发送给RS服务器。
  4. 需要在RS服务器的lo网卡上绑定VIP,同时抑制RS服务器对VIP做出ARP响应。
  5. RS服务器将用户的请求数据包处理后,把处理结果直接发给网关;
  6. 由网关返还数据包给用户

79、Keepalived三大功能?

  • 管理LVS负载均衡软件 高可用
  • 实现对LVS集群节点健康检查功能
  • 作为系统网络服务的高可用功能

80、Keepalived是基于什么协议实现的故障转移?此协议的作用是什么?

vrrp 虚拟路由冗余协议,此协议的出现就是为了解决静态路由的单点问题,它利用IP多播的方式实现高可用之间的通信。

81、Keepalived故障切换转移原理完整描述?

  1. Keepalived高可用服务之间的故障切换转移,是通过VRRP协议来实现的。
  2. 在Keepalived服务正常工作时,主Master节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备Backup节点自己还活着,当主Master节点发生故障时,就无法发送心跳消息,备节点也就因此无法继续检测到来自主Master节点的心跳了,于是调用自身的接管程序,接管主Master节点的IP资源及服务。而当主Master节点恢复时,备Backup节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。
  3. 备节点可以有多个,通过优先级竞选,但一般Keepalived系统运维工作中都是一对。

82、keepalived高可用对上是有脚本的。分别都是什么脚本?描述一下脚本的作用和设计思路?

主节点:
1.守护进程脚本。当Nginx业务有问题时,就停掉本地的Keepalived服务,实现IP漂移到对端继续提供服务。此脚本的基本思想是若没有80端口存在,就停掉Keepalived服务实现释放本地的VIP。
2.可以使用Keepalived的配置文件参数触发写好的监测服务脚本。当停掉Nginx的时候,Keepalived 2秒钟内会被自动停掉,VIP被释放,由对端接管,这样就实现了即使服务宕机也会进行IP漂移,业务切换。
备节点:防脑裂脚本(如果可以ping通主节点并且备节点有VIP就报警)

83、为何keepalived高可用对之间要用专门的心跳线进行连接?

因为同一局域网中,可能有多组keepalived高可用队。如果不用专门的心跳线,当有keepalived主机发生宕机时,备份服务器却还会收到同网段其他高可用主机发送的广播报,而不会启动接管程序,从而导致服务中止,所以必须要专门的心跳线进行连接,以避免出现上述情况。

84、安装squid硬件和系统要求

  • 操作系统环境:Squid可以运行在几乎所有的常见Unix及Linux系统上,也可以在Microsoft Windows上运行。尽管squid的Windows支持在不断改进,但在Unix及Linux系统上运行Squid依然是更简单,安全,更有效率,本章我们就使用Centos6.4 x86_64来运行Squid。
  • 服务器硬件环境
    • 第一重要资源:内存
      squid对硬件的要求最主要的是内存资源。内存短缺会严重影响性能。因为所有的对象都会尽可能的被缓存到内存中,这样才能更快的提升用户的响应及返回数据。
    • 第二重要资源:磁盘
      磁盘空间也是另一个squid能够高效运行的重要因素。更多的磁盘空间意味着更多的缓存目标和更高的命中率。快速的磁盘介质也是必要的。例如:用ssd,sas替代sata磁盘,除了使用过raid外,可以指定多个磁盘路径缓存。
    • 其他:磁盘与内存的关联
      因为squid对每个缓存响应使用少数内存,因此在磁盘空间和内存要求之间有一定联系。基本规则是,每G磁盘空间需要32M内存。这样,512M内存的系统,能支持16G的磁盘缓存。你的情况当然会不同。内存需求依赖于如下事实:缓存目标大小,CPU体系(32位或64位),同时在线的用户数量,和你使用的特殊功能。

85、反向代理服务原理

squid 作为反向代理服务器,通常工作在一个服务器集群的前端,在用户端看来,squid 服务器就是他说要访问的服务器,而实际意义上 squid 只是接受用户的请求,同时将用过户请求转发给内网真正的WEB服务器,如果 squid 本身有用户要访问的内容,则 squid 直接将数据返回给用户,起到了缓存数据的作用,减少了后端服务的压

86、tomcat的端口号是多少?

8080

87、tomcat四种基础的安全优化一种基础性能优化?

安全优化:

  • 降权启动
  • telnet管理端口保护
  • ajp连接端口保护
  • 禁用管理端口

性能优化:

  • 屏蔽DNS查询
  • Jvm调优

88、生产环境下某台tomcat7服务器,在刚发布的时候一切都很正常,在运行一段时间后就出现CPU占用很高的问题,基本上是负载一天比一天高。诸如此类问题。请排查!首先要检查是不是代码出现死循环!解决方法!

1.首先查找进程高的PID号(先找到是哪个PID号的进程导致的)
top –H
2.查看这个进程所有系统调用(再找到是哪个PID号的线程导致的)
strace -p 进程的PID
3.如果是Web应用,可以继续打印该线程的堆栈信息(找出有问题的代码块)
1)将有问题的线程的PID号转换成16进制格式
printf "%x\n" 线程的PID
2)过滤出有问题的线程的堆栈信息,找出问题代码块:
jstack 进程的PID | grep 线程PID号的十六进制格式 -A 30

89、tomcat的日志文件叫什么名字?

  1. catalina.out

90、什么叫做DevOps

DevOps是一组过程、方法和系统的统称,用于促进软件开发(应用程序/软件工程)、技术运营和质量保证(QA)部门之间的沟通、协作和整合。

91、什么叫做CI/CD流水线

CI/CD流水线指的是DevOps自动化的一个持续构建、持续部署和持续交付的流程。
持续集成(CI) : 代码合并、 构建、 部署、 测试都在一起, 不断地执行这个过程, 并对结果反馈。
持续部署(CD) : 部署到测试、 生产环境。
持续交付(CD) : 部署到生产环境, 给用户使用。

92、请描述DevOps自动化CI/CD自动化测试的基本流程(jenkins+svn+ansible实现)

  • 开发上传代码到svn服务器
  • jenkins抓取到svn服务器中新上传的代码 通过jenkins+ansible roles标准化构建测试服务器,并将新代码发送到测试服务器
  • 测试人员在测试服务器上进行测试并将测试结果反馈给开发

93、生产环境服务器自动化代码上线需要ansible吗?

看时间生成情况,如果就是简单的几台就可有可无,效果差不多,如果是多台服务就就必须要ansible来管理了,要不会消耗大量的时间

94、jenkins+svn和jenkins+svn+ansible的区别在哪里?

jenkins+svn 通过命令进行,自动上线,代码更新,只能用于少量服务器代码更新,不能更改测试环境
jenkins+svn+ansible 可以根据ansible选用脚本进行批量代码更新,可以部署测试环境

95、svn的监听端口

3690

96、kvm和docker的本质区别,至少说3点(虚拟化类型,资源占用,程序安全)

kvm是硬件虚拟化,docker是软件虚拟化。kvm的资源占用高,docker资源占用少,kvm的安全级别较高,有防火墙防护,docker是程序级别的,容器与容器之间没有防火墙防护

97、一个完整的Docker有以下几个部分组成:

  • Docker Client 客户端
  • Docker Daemon 守护进程
  • Docker Image 镜像
  • Docker Container 容器

98、 Docker功能特性

  • 隔离环境(系统,网络,文件系统)与应用
  • 解决依赖与版本问题
  • 易于分发,开箱即用
  • 节点与容器快速扩容
  • 镜像制作简单便捷,管理方便

99、写出至少20个docker命令?

  1. #建立镜像
  2. docker build -t su/centos7:1 . (注意需要在有Dockerfile的目录里输入命令)
  3. #启动容器
  4. docker run -dit su/centos7:1 /bin/bash(可以加/bin/bash,也可以不加)
  5. docker run -dit --name sunan su/centos7:1 (启动的时候给容器器个名字叫sunan)
  6. -d :放在后台运行
  7. -i:可以交互输入命令
  8. -t:启动一个伪终端
  9. -c:指定几个cpu来运行内存
  10. -m:指定几个内容。
  11. 隐形参数--name 给容器起名。
  12. #看容器的日志
  13. docker logs sunan(可以是名字,也可以是id
  14. #看启动的容器
  15. docker ps -a(加a是看所有)
  16. #开始运行容器
  17. docker start xxx(可以是容器的名字,也可以是容器的id
  18. #重启一个容器
  19. docker restart xxx(可以是容器的名字,也可以是id
  20. #停止运行容器时的输出容器的资源使用状况
  21. docker stats xxx --no-stream(容器的名字或者id,类似top命令)
  22. 加参数--no-stream是只输出一次就可
  23. docker stop xxx(可以是容器的名字,也可以是容器的id)
  24. #切进容器的命令
  25. docker attach xxx(可以是容器的名字,也可以是容器的id
  26. exit是退出容器
  27. #杀容器
  28. docker kill xxx (容器的名字,或者容器的id,直接删掉容器的进程,使其处于停止。)
  29. #删除容器
  30. docker rm xxx(容器的名字,或者容器的id,必须先停止容器以后才能删,)
  31. -f 强删
  32. #删除镜像
  33. docker rmi xxx (容器的名字,或者容器的id
  34. -f强删
  35. 将一个更改过的容器封装成一给性的镜像(先进去一个容器,搭建个项目,退出从封装)
  36. docker commit xxx(原来的容器,更改过的) xxx/xxx(新的镜像叫什么名字)
  37. #不进容器,直接发布命令
  38. docker exec (-dit xxx(容器的名字,或者id ls /(想要执行的命令)
  39. 参数
  40. -dit直接可以切进去
  41. #容器和属主机直接的复制文件命令
  42. docker cp /tmp/dockerfile(文件的路径)xxx:/tmp(容器的名字或者ip,冒号后面是地址)(也是吧什么复制到哪里的格式)
  43. #创建一个新的容器,
  44. docker create -it xxx(镜像的名字或者id)(用法跟run一样,只是create不启动容器,想要启动还需要用start命令启动下)
  45. #查看容器进程与源镜像做对比看哪里不一样
  46. docker diff xxx(容器的名字或者id
  47. 返回的结果C是多了什么
  48. A是少了什么
  49. #监控容器的变化
  50. docker events
  51. #导出容器
  52. docker export xxx(容器的名字或者id) > yyyy.tar(导出来的容器叫什么名字)
  53. #将导出的容器创建为一个镜像
  54. docker import yyy.tar(导出来的容器的名字)zzz(导入要创建的镜像叫什么名字)
  55. #查看镜像的历史记录
  56. docker history xxx (镜像的名字或者id
  57. #查看镜像的详细信息
  58. docker inspect xxx(镜像的民族或者id
  59. #导出镜像
  60. docker save xxx(要导出的镜像的名字或者id > yyy.tar(导出来叫什么明教)
  61. #导入镜像
  62. docker load < yyy.tar (需要导入的镜像的名字。有相同的镜像是不让导入的)
  63. #暂停容器的命令(unpause是回复暂停的容器)
  64. docker pause xxx(容器的名字或者id
  65. #查看容器的端口映射协议
  66. docker port xxx(容器的名字或者id
  67. #想要在启动的时候添加容器的映射端口
  68. docker run -dit --name xx -p 80:80 yy(xx容器起名叫,80:80将属主机的80端口映射到容器里的80端口,yy要启动的镜像的名字)
  69. #给容器改名
  70. docker rename xxx yyyxxx原来的名字,yyy想要叫的名字)
  71. #用于克隆镜像的
  72. docker tag xxx xxx1(将什么,克隆成什么,可以当场软连接,要删一起删)
  73. #调整启动以后的容器的cpu和内存
  74. docker update -c 2 xxx(需要调整的)
  75. -c调整cpu
  76. -m调整内存。需要多少直接在后边写就可以了
  77. #监控容器的的退出状态
  78. docker wait xxx(容器的名字或者id
  79. #创建一个自定义网路
  80. docker network creat lnmp (创建个自定义网路叫lnmp
  81. #查看docker网络
  82. docker network ls查看所有网桥网路
  83. brctl show同上
  84. login用于登陆docker hub官方公有的仓库
  85. logout用于登出官方公有的仓库
  86. push将本地的镜像提交到docker hub

100、docker如何限制容器的内存和CPU?如何动态扩展CPU和内存?

答:在启动run的时候参数-c限制cpu,-m限制内存
docker update -c 2 xxx(需要调整的)
-c调整cpu
-m调整内存。需要多少直接在后边写就可以了

101、Zabbix-sever端的Pollers进程和Trappers进程的作用

Pollers进程开启用于ZabbixAgent的被动模式,主动收集agent端数据的进程;
Trappers进程用于ZabbixAgent的主动模式,负责处理agent端推送过来的数据。

102、Zabbix-agent主动模式和被动模式的区别?及在哪修改agent主动模式

  1. Zabbix-agent主动模式:是Agent端主动把数据推送给Server端,Server端通过端口来接收数据;
  2. Zabbix-agent被动模式是Zabbixserver端主动找Agent端要数据,这种模式对Server端的压力非常大。
    Zabbix-agent默认是被动模式,可以在配置主机监控项中的类型设置里进行修改。/etc/zabbix/zabbix_agent.conf

103、Zabbix-server的监控模式有四种,哪四种?分别是做什么用的?

  • Agent监控模式:主要监控操作系统和软件服务的
  • SNMP监控模式:主要监控网络设备,例如路由器,交换机
  • JMX监控模式: 主要监控类似Tomcat的Java容器式的服务
  • IPMI监控模式:主要监控服务器硬件设备的,例如cpu ,mem,radio

104、企业中Zabbix-server的监控频率是如何设定的?

通过监控项设置中的数据更新时间来设置,一般不低于60s,在工作中通常设为90s,在特殊时间内可设置不同的监控频率,空闲时间一般为300s。

105、企业中Zabbix-server的报警频率是如何设定的?

通过配置-动作-创建动作-操作-默认持续步骤持续时间来设置。一般最少设为60s,即每分钟进行发送。同时在操作细节中设定发送次数,即每分钟发送次数,一般设为3次。

106、ZabbixServer如何开启java支持?

在sever端开启Java pollers,在Zabbix_java中开启java_gateway

107、ZabbixServer的java gateway干啥的?监听端口多少?

Java_gateway用来接收Tomcat JMX提供的数据,并把数据给到server。
监听端口为:10052

108、ZabbixServer默认监听端口?ZabbixAgent默认监听端口?

server默认的是10051,agent默认的是10050

109、ZabbixServer的Java Pollers进程的作用?

主要用来接收Java_gateway收集的数据。

110、Prometheus的优点

  • 易于管理
  • 监控服务的内部运行状态
  • 时间序列(time series)
  • 强大的数据模型
  • 强大的查询语言PromQL
  • 高效
  • 可扩展(支持集群)
  • 易于集成
  • 可视化
  • 开放性

111、Prometheus的缺点

  • 学习成本大,尤其是其独有的数学命令行,学习起来很吃力;
  • 对磁盘资源也是耗费的较大,这个具体要看监控的集群量和监控项的多少和保存时间的长短;
  • 有网友称在1.x版本中可能会发生数据丢失的风险,因此生产环境中建议大家使用较新的2.x发行版;

112、zabbix与Prometheus之间的区别

  • 数据模型和查询语言:Zabbix使用关系型数据库来存储数据,Prometheus采用的是TSDB的时间序列数据库。TSDB使用一种称为WAL的写前日志,以确保数据的可靠性。Prometheus是支持外部数据库存储的。
  • 自动化和配置管理:Prometheus具有自动化和自动配置的能力,它可以自动发现服务和指标,并对它们进行监控。Zabbix也提供了类似的功能,但需要手动配置。
  • 可视化和警报:Zabbix和Prometheus都支持可视化和警报功能。Zabbix提供了一个基于Web的前端界面,可以查看监控数据和设置警报。Prometheus通常与Grafana等工具一起使用,以实现更高级的可视化和警报功能。
  • 性能和扩展性:Prometheus在性能和扩展性方面表现良好,能够处理大规模的时间序列数据。Zabbix也具有良好的性能和扩展性,但在大规模监控方面可能需要更多的资源和配置。
  • zabbix 更加适合用于 本地计算机 的监控,而 Prometheus 更适合在现在流行的 云计算 监控上使用。

113、 Git分布式版本控制系统和SVN中央版本控制系统的区别?

  • svn是集中式版本,所有的人都下载同一个版本去更新
    git是分布式的,安全性高,可以拥有自己想要的分支管理
  • svn集中式版本系统不但速度慢,而且必须联网才能使用
    git不仅仅是个版本系统,它也是个内容管理系统,工作管理系统等
  • git把内容按元数据方式存储
    svn是按文件,所有资源控制系统都是把文件的源信息隐藏在一个类似svn.cvs等文件夹里
  • 分支在svn中一点不特别,就是版本库中的另外的一个目录
    git没有一个全局的版本号,而svn有,目前为止svn相比git缺少的最大的特征
  • git内容完整性要优于svn:git的内容储存使用的是哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障时和网络问题是降低对版本库的破环

114、工作区,暂存区,本地仓库,远程仓库代表的含义?

工作区是开发人员在工作的目录,暂存区,可以理解为内存,本地仓库是将内存的代码,写到磁盘上,远程仓库代表是将磁盘的同步到网上

115、git fetch,git merge,git pull的区别?

  • git fetch 是只将内容拉取下来,
  • 在用git merge 将版本内容合并到本地。
  • git pull 是一步到位直接拉取和合并

116、git如何回滚代码到任意版本,请写出大概命令步骤?(详细描述,此题8分)

提示:git refloggit log --pretty=oneline
答:用git reflog 查看所有的历史id编码
在用 git reset --hard 加id编码直接回滚

117、Git分支合并的代码出现冲突如何解决?

冲突了以后,git会给出提示,我们打开冲突的文件,将冲突的2选一,删除一个

118、GitLab私有仓库一共有几种权限设置,他们之间的差别在哪?(详细描述,此题8分)

有5种guest访客

  • 只能发表评论,不能读写
    reporter报告者
  • 只能克隆,不能提交代码,产品测试用的
    developer开发人员
  • 可以进行代码的读写,普通程序员用的
    master主程序员
  • 可以添加项目成员,添加标签,创建和保护分支产品经理用的
    owner所有者
  • 有所有的权限,一般不用

119、GitLab的备份和恢复命令分别是什么?

  • 备份命令:gitlab-rake gitlab:backup:create
  • 恢复命令:gitlab-rake gitlab:backup:restore BACKUP=备份文件编号

120、Git将本地仓库用作远程仓库时的初始化命令?(只初始化本地仓库,不能提交代码)

  1. git --bare init

121、Jenkins的Pipeline流水线发布PHP项目基本构建流程?

先在Jenkins web上建立一个流水线,流水线里需要配置的有参数化构建,在流水线选项里选择是自己写配置脚本还是从服务器里取配置,如果从服务器拉取的话,需要先在服务器上写配置脚本,然后上传到git仓库,在告诉流水线配置,脚本在哪里放置,同时还有配置Jenkins到git的免秘钥,和登陆节点服务器的密码,在配置之前需要告诉Jenkins工具git,java,maven在哪里,指定工作目录

122、Jenkins的Pipeline流水线发布JAVA项目基本构建流程?

先在Jenkins web上建立一个流水线,流水线里需要配置的有参数化构建,在流水线选项里选择是自己写配置脚本还是从服务器里取配置,如果从服务器拉取的话,需要先在服务器上写配置脚本,然后上传到git仓库,在告诉流水线配置,脚本在哪里放置,同时还有配置Jenkins到git的免秘钥,和登陆节点服务器的密码,在配置之前需要告诉Jenkins工具git,java,maven在哪里,指定工作目录

123、分布式存储的最大的两个瓶颈在哪?

网络带宽限制、小文件存储

124、Glusterfs的存储卷的动态(在线)扩容命令?

  1. gluster volume add-brick

125、Glusterfs的磁盘平衡功能的用处是什么?以及命令是什么?

因为磁盘布局结构是静态的,当新的bricks(存储块)加入现有卷,新创建的文件会分布到旧的bricks中,所以需要平衡布局结构,使新加入的bricks生效。
gluster volume rebalance

126、Glusterfs的默认连接端口范围

24007:24011
49152:49162

127、写出五条Glusterfs的优化参数中文版?

  • IP访问授权
  • 条带大小
  • 请求等待时间
  • 关闭NFS服务
  • 剩余磁盘空间阈值
  • 读缓存大小
  • 客户端等待时间
  • IO线程数
  • 缓存校验周期

128、Glusterfs服务器我们通常需要监控哪些选项?

cpu,内存,主机存活,磁盘空间,并发数,系统load,主机运行时间

129、请说出,一台Glusterfs节点服务器爆炸以后,你是如何处理的(恢复数据的步骤)?

配置一台和原Glueterfs故障机一样配置的服务器(包括硬盘数量、硬盘大小、安装的系统,配置的IP),安装gluster软件,并修改uuid号为原Glueterfs节点的uuid,然后复制这个UUID给新的服务器/var/lib/glusterd/glusterd.info,最后添加新服务器中到集群中代替原Glueterfs节点gluster volume heal gs2 full

130、redis的默认监听端口是多少?

6379

131、redis的部署必须做的4种初始调优

启动文件个数,tcp连接数,和ocm开启,巨大化页面缓存关闭

132、redis的两种数据持久化模式

rdb和aof数据流

133、平滑修改redis配置文件的方法

  1. config set config rewrite

134、Redis中必须被屏蔽掉的危险命令都有什么:至少写出3个

  1. keys * flushdb flushall

135、redis手动关闭主从复制命令(只能在从上进行。)

  1. redis-cli slaveof no one

136、我们平时如何分析redis的key和可以的大小,我们为什么要分析。

用到一个pip安装的工具rdbtools,先将文件导出rdb -c memory /data/redis/dump.rdb > /root/memory.csv,然后用命令抓取数据进行分析cat /root/memory.csv | tr ',' ''| sort -k4rn| head

137、elk工作原理?

  • Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。
  • Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。
  • Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
  • redis特性,对小文件支持极高,效率极快,对大文件支持极低,所以我们要关闭内核的大文件缓存,redis是典型的单线程异步模型。

二、你们公司的生产环境的服务器是如何做操作系安全和性能优化?

1. 操作系统安全

2. 性能优化

3. 产环境服务器如何评估CPU的性能好坏

4. 生产环境服务器如何评估mem的性能好坏

三、Nginx优化30条

1. 安全优化,隐藏Nginx版本号

在配置文件里http段内添加

  1. server_tokens off;

2. 安全优化:更改默认的Nginx服务用户

两种方法
1. 在配置文件里添加一下代码

  1. user nginx nginx;

2.直接编译的时候指定用户和组

  1. ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

3. 性能优化:根据硬件配置调整Nginx worker进程数

  1. 输入top命令查看系统资源占用信息,在top命令界面如何查看多颗cpu的信息
  2. worker_processes 1; 几核就修改成几
  3. 查看cpu的方法top 按1。或者看/proc目录下的cpuinfo文件看processor

4. 性能优化:绑定不同的进程到不同的cpu上,资源平均分配

命令如何通过命令调整到不同的进程或服务到不同的cpu上,让资源平均使用cpu?

  1. worker_cpu_affinity 0001 0010 0100 1000;

5. 性能优化:nginx事件处理模型优化为epoll

Nginx epoll 和Apache select的区别?

在events模块里添加代码 use epoll

6. 性能优化:调整每个Nginx worker进程的最大连接数

并发的概念,你的公司网站并发是多大,ip,pv多大?

  1. worker_connections 20480;

7. 性能优化:配置Nginx worker进程最大打开文件数

特别提醒:配置参不是越大越好,最好设置到服务器承受的极限点

  1. worker_rlimit_nofile 65535;

8. 性能优化:开启Nginx高效的传输模式

  1. sendfile on;

9. 性能优化:调整各个超时参数,设置连接超时时间

  1. keepalive_timeout 60;
  2. client_header_timeout 15;
  3. client_body_timeout 15;
  4. send_timeout 25;

10. 安全优化:上传文件大小限制(动态服务器web应用)

  1. client_max_body_size 8m;

11. Nginx FastCGI参数优化(根据http原理给面试官讲解)

  1. fastcgi_connect_timeout 240; #Nginx允许fcgi连接超时时间
  2. fastcgi_send_timeout 240; #Nginx允许fcgi返回数据的超时时间
  3. fastcgi_read_timeout 240; #Nginx读取fcgi响应信息的超时时间
  4. fastcgi_buffer_size 64k; #Nginx读取响应信息的缓冲区大小
  5. fastcgi_buffers 4 64k; #指定Nginx缓冲区的数量和大小
  6. fastcgi_busy_buffers_size 128k; #当系统繁忙时buffer的大小
  7. fastcgi_temp_file_write_size 128k; #Nginx临时文件的大小
  8. fastcgi_temp_path /data/ngx_fcgi_tmp; #指定Nginx临时文件放置路径

12. Nginx expires 缓存优化

在location里添加expires 3650d; d是天,表示缓存3650天

13. 性能优化:Nginx gzip压优化

  1. gzip on #开启gzip压缩功能
  2. gzip_min_length 1k; #容许压缩页面的最小字节
  3. gzip_buffers 4 16K; #缓冲4块,单位16k
  4. gzip_http_version 1.1; #压缩版本
  5. gzip_comp_level 2; #压缩等级
  6. gzip_types text/plain application/x-javascript text/css application/xml; #压缩类型
  7. gzip_vary on; #vary header支持。该选项可以让前端的缓存服务器缓存经过gzip压缩的页面,例如用Squid缓存经过Nginx压缩的数据。

14. 安全优化:更改源码隐藏软件名,及版本号

依次修改3个Nginx源码文件

  1. /usr/src/nginx-1.6.2/src/core/ nginx.h
  2. nginx-1.6.3/src/http/ngx_http_header_filter_module.c
  3. nginx-1.6.3/src/http/nginx_http_special_response.c

第二步是修改后编辑软件,使其生效

15. 性能优化:Nginx 日志相关优化

日志切割,不记录指定元素日志,最小化日志目录权限

16. 安全优化:限制指定目录或指定扩展名的文件被访问

限制上传到资源目录的程序被访问,防止木马入侵

17. 安全优化:限制来源ip客户端访问指定网站或目录

适合内部使用的网址,例如phpmyadmin

18. 用户体验优化:针对错误页面进行优雅显示优化

19. 安全加性能优化:防爬虫优化

robot协议,根据HTTP_USER_AGENT进行控制

20. 性能优化:防盗链优化

21. 安全优化:严格设置集群中读写分离后的web站点目录的权限

22. 安全优化:防止使用ip访问Nginx网站(防非法域名恶意解析)

23. 安全优化:防DDOS攻击

单ip并发连接的控制,与连接效率控制
利用webbench压力测试一个网站,

24. 安全优化:防DDOS攻击策略

25. 安全优化:限制客户端请求的HTTP方法

26. 安全优化:为web服务增加用户验证

适合内部机密网址

27. 安全优化:Nginx加密传输优化(Nginx SSL)

28. 安全优化:上Nginx运行与(A Chroot jail (Containers))监牢模式

29. 安全优化:移除所有不需要的Nginx modules

30. 安全优化:web服务器磁盘挂载及网络问卷系统优化

四、如果面试官问:怎么优化Nginx?

  1. gzip压缩优化
  2. expires缓存优化
  3. 网络IO事件模型优化
  4. 隐藏软件名称和版本号
  5. 防盗链优化
  6. 禁止恶意域名解析
  7. 禁止通过IP地址访问网站
  8. HTTP请求方法优化
  9. 防DDOS攻击单IP并发连接的控制,与连接速率控制
  10. 严格设置Web站点目录的权限
  11. 将Nginx进程以及站点运行于监牢模式
  12. 通过robot协议以及HTTP_USER_AGENT防爬虫优化
  13. 配置错误页面根据错误码指定网页反馈给用户
  14. Nginx日志相关优化
  15. 限制上传到资源目录的程序被访问,防止木马入侵系统破坏文件
  16. FastCGi参数buffer和cache以及超时等的优化
  17. php.ini和php-fpm.conf配置文件的优化
  18. 有关Web服务的linux内核方面深度优化(网络连接,IO,内存等)
  19. Nginx加密传输优化(SSL)
  20. Web服务器磁盘挂载及网络文件系统优化
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注