01

1、如何将二进制文件添加到 $PATH 变量中?

$ export PATH=$PATH:/path/to/the/binary/file

2、& 和 && 有什么区别

&  - 希望脚本在后台运行的时候使用它
&& - 当前一个脚本成功完成才执行后面的命令/脚本的时候使用它

3、简述网络文件系统NFS,并说明其作用

网络文件系统是应用层的一种应用服务,它主要应用于Linux 和Linux 系统、Linux 和Unix系统之间的文件或目录的共享。对于用户而言可以通过 NFS 方便的访问远地的文件系统,使之成为本地文件系统的一部分。采用NFS 之后省去了登录的过程,方便了用户访问系统资源。

4、ftp服务有几种模式,有什么区别?

分为主动模式与被动模式。主动为服务器发起21端口去访问客户端的随机端口,并通过服务器的20端口来传数据•被动模式正好相反,由客户端发起连接服务器的21端口,然后服务器随机开启一个数据连接端口来传数据。

5、如何使用grep命令查找包含特定字符串的行,并忽略大小写?

# grep -i "特定字符串" 文件名

6、如何备份某个用户的任务计划?

将/var/spool/cron/⽬录下指定⽤户的任务计划拷⻉到备份⽬录cron_bak/下即可:

# cp /var/spool/cron/rachy /tmp/bak/cron_bak/

7、磁盘空间满了,删除一部分Nginx日志后,但是磁盘空间还是满的,为什么?

删除的日志信息,一部分可能还是被进程调用,因此,需要重启nginx服务来释放进程;
或者实际生产环境中使用>/log/access.log清空文件

8、bin-log 日志如何恢复 mysql 数据?

例如 bin-log 文件名为:mysql-bin.0001
 
mysqlbinlog mysql-bin.0001 > backup.sql
 
source backup.sql;

9、Linux 常见的系统日志文件都有哪些,各自的用途?

/var/log/messages 内核及公共消息日志
 
/var/log/cron 计划任务日志
 
/var/log/dmesg 系统引导日志
 
/var/log/maillog 邮件系统日志
 
/var/log/secure 记录与访问限制相关日志

10、请描述 http 及 https 分别是什么协议、作用及端口号?

HTTP:超文本传输协议,用于传输 Internet 浏览器使用的普通文本、超文本、音频和视频等数据,端口号为 TCP的 80。
 
HTTPS:安全超文本传输协议,基于 HTTP 开发,提供加密,可以确保消息的私有性和完整性,端口号为443 工作区子系统。

02

1、什么是 MySQL 多实例,如何配置 MySQL 多实例?

在一台服务器上,mysql 服务开启多个不同的端口,运行多个服务进程,这些 mysql 服务进程通过不同的 socket 来监听不同的数据端口,进而互不干涉的提供各自的服务。

2、如何开启从库的 binlog 功能?

在 my.cnf 文件中写入 log-bin=mysql-bin

3、简述什么是 LNMP架构?

LNMP 是网站运行平台
 
L:操作系统(Linux)
 
N:网站服务软件(Nginx)
 
M:数据库服务软件(MySQL)
 
P:网站开发语言(PHP、perl、python)

4、解释下什么是 GPL,GNU,自由软件?

GPL:(通用公共许可证):一种授权,任何人有权取得、修改、重新发布自由软件的权力。
 
GNU:(革奴计划):目标是创建一套完全自由、开放的的操作系统。
 
自由软件:是一种可以不受限制地自由使用、复制、研究、修改和分发的软件。主要许可证有 GPL 和 BSD 许可证两种。

5、简述预定义变量$$、$?、$0、$#、$*、$!的作用

$$ 保存当前运行进程的(PID)号
 
$? 保存命令执行结果的(返回状态)
 
$0 保存当前运行的(进程名)或(脚本名)
 
$# 保存位置变量的(个数)
 
$* 保存所有位置变量的(值)
 
$! 保存后台(最后一个进程)的 PID 号

6、suid,sgid,sticky bit 的作用?

suid, 以属主的身份运行程序
 
sgid, 在目录中创建的文件继承所在目录的属主
 
sticky bit 用户只能修改,删除自己的文件

7、编译源码包过程介绍

采用源码包编译的方式安装软件包时,有哪些基本过程、各自的作用是什么?

tar 解包:解压、释放安装包内的文件
 
./configure 配置:针对当前系统环境指定安装目录、选择功能等设置。
 
make 编译:将源代码编译成二进制的可执行程序、库文件等数据。
 
make install:将编译好的程序文件、配置文档等复制到对应的安装目录。

8、Linux 目录结构介绍

Linux 系统的根目录下主要包括哪些文件夹,各自的作用是什么?

/boot:存放 Linux 内核、引导配置等启动文件。
 
/bin:存放最基本的用户命令,普通用户有权限执行。
 
/dev:存放硬盘、键盘、鼠标、光驱等各种设备文件。
 
/etc:存放各种配置文件、配置目录。
 
/home:存放普通用户的默认工作文件夹(即宿主目录、家目录)。
 
/root:Linux 系统管理员(超级用户)root 的宿主目录。
 
/sbin:存放最基本的管理命令,一般管理员用户才有权限执行。
 
/usr:存放额外安装的应用程序、源码编译文件、文档等各种用户资料。
 
/var:存放日志文件、用户邮箱目录、进程运行数据等变化的文档。
 
/tmp:存放系统运行过程中使用的一些临时文件。

9、MySQL 主从原理

从库生成两个线程,一个I/O线程,一个SQL线程。
 
I/O 线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中。
 
主库会生成一个 log dump 线程,用来给从库 I/O 线程传binlog。
 
SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致。

10、软链接和硬链接的区别

软链接可以跨分区链接,软链接支持目录同时也支持文件的链接。软链接源文件与目标文件 Inode 不相同,从某种意义上来,会消耗省 inode 空间。
 
硬链接不能跨分区链接,硬链接只能对文件生效,对目录无效,也即是目录不能创建硬链接。硬链接源文件与目标文件共用一个inode 值,从某种意义上来,节省 inode 空间。

03

1、防火墙的种类

从物理上讲,防火墙可以分为硬件防火墙和软件防火墙。

  • 硬件防火墙:在硬件级别实现部分防火墙功能,另一部分功能基于软件实现,性能高,成本高。

  • 软件防火墙:以软件的⽅式模拟防火墙功能,运行在操作系统上,性能不高,成本较低。

2、什么是iptables

iptables 其实不是真正的防火墙,就是一个代理程序,用户通过 iptables 这个代理程序,将安全规则执行到对应的"安全框架"中,这个"安全框架"才是真正的防火墙,这个安全框架叫 netfilter ,是内核代码中不可缺少的一部分; iptables 位于操作系统的用户空间,我们是通过 iptables 命令工具操作 netfilter 内核框架。

3、什么是链

防火墙的作用就在于对经过的数据报文进行"规则"匹配,然后执行规则对应的"动作",所以当报文经过这些关卡的时候,则必须匹配这个关卡上的规则,但是,这个关卡上可能不止有一条规则,而是有很多条规则,当我们把这些规则串到一起的时候,就形成了"链"。

4、iptables有哪些链

当我们启用了防火墙功能时,报文需要经过很多关卡,也就是说,根据实际情况的不同,报文经过"链"可能不同,大体分为如下三类:

  • 请求本机会经过哪些链 (PREROUTING-->INPUT-->Local Process) ;

  • 经过本机又会经过哪些链(PREROUTING-->FORWARD-->POSTROUTING);

  • 从本机发出又会经过哪些链(Local Process-->OUTPU-->POSTROUTING) ;

5、什么是表

当我们把具有相同功能的规则集合在一起叫做"表",所以说,不同功能的规则,我们可以放置在不同的表中进行管理,而 iptables 已经为我们定义了5种表,每种表对应了不同的功能。

6、表的功能

5个核心表(Tables),每个表负责特定类型的流量处理

表名称

核心功能

典型应用场景

包含的链

filter

默认表 • 包过滤(允许/拒绝流量) • 管理 INPUT/OUTPUT/FORWARD链• 负责过滤功能

防火墙基础规则 (如开放端口、IP黑白名单)

INPUT、OUTPUT、FORWARD

nat

网络地址转换 • SNAT(源地址转换) • DNAT(目标地址转换) • MASQUERADE(动态IP伪装)• 负责网络地址转换功能

路由器网关 端口转发 负载均衡

PREROUTING、INPUT、OUTPUT、POSTROUTING

mangle

高级包修改 • 修改 IP 头信息(TTL、TOS) • 设置 MARK 标记 • 连接跟踪(conntrack)干预• 负责修改数据包内容

QoS流量标记 VPN隧道处理 特殊路由策略

INPUT,OUTPUT、 FORWARD、POSTROUTING、PREROUTING

raw

连接跟踪豁免 • 绕过 Netfilter 连接跟踪机制 • 最高优先级处理• 关闭nat表上启用的连接追踪机制

高性能场景(如游戏服务器) 自定义跟踪逻辑

PREROUTING、OUTPUT

security

强制访问控制(MAC) • 集成 SELinux 安全上下文标记

多级安全系统 合规性审计(如金融、政府)

INPUT、OUTPUT、FORWARD

04

1、检查服务器是否正常工作

1. ping 服务器ip
2. ss -antul|grep 服务端口
3. ps aux|grep 服务名
4. systemctl status 服务名

2、MySQL数据库版本不一致怎么解决?

1. 强制同步
2. 如果数据不一致,比较少的时候可以插入数据使一致
3. 如果数据库比较小,可以将数据库导出并重新导入一次

3、如何让一个命令在后台运行?

# nohup your_command > /dev/null 2>&1 &
 
your_command 是要在后台运行的命令,&符号表示后台执行
执行上述命令后,会立即返回命令行提这里,示符,输出会被重定向到 nohup.out 文件中。如果不想生成这个文件加上 > /dev/null 2>&1 

4、什么是SSH?它在Linux安全中的作用是什么?

SSH是一种安全、加密的远程访问协议,它在Linux安全中扮演了重要的角色。使用SSH,用户可以安全地登录远程主机并执行命令。
SSH可以防止未经授权的访问和数据泄露,并确保数据的完整性。

5、服务器有哪些组件?

CPU、内存、硬盘、主板、电源、⻛扇、RAID卡等

6、请简要描述常见的MySQL数据库集群架构(如主从复制、主主复制)及其特点,分别适用于哪些场景?

1、主从复制:
一个主库负责写操作,多个从库从主库同步数据,可用于读写分离,分担读压力,适用于读多写少的场景
 
2、主主复制:
两个或多个主库都可以进行读写操作,数据相互同步,可实现高可用性和负载均衡,但对数据一致性要求较高,配置和管理相对复杂,适用于对写操作也有较高并发需求的场景

7、如何将一个MySQL集群中的数据迁移到另一个MySQL集群中?请描述具体的迁移步骤和可能遇到的问题及解决方法

1、备份源集群数据:可以使用mysqldump等工具对源集群的数据进行备份,确保数据的一致性和完整性
 
2、准备目标集群:在目标集群上创建好相应的数据库和表结构,确保与源集群的结构一致
 
3、恢复数据到目标集群:将备份的数据恢复到目标集群中,可以使用mysql命令行工具或其他数据导入工具
 
4、验证数据一致性:在数据迁移完成后,对源集群和目标集群的数据进行一致性校验,确保数据的准确性
 
可能遇到的问题及解决方法:
数据丢失或不一致:在备份和恢复过程中,可能会出现数据丢失或不一致的情况
可以通过多次备份和校验来确保数据的完整性;在恢复数据时,注意检查是否有错误提示,并及时处理

05

1、简述编译源码包的过程

采用源码包编译的方式安装软件包时,有哪些基本过程、各自的作用是什么?

tar 解包:解压、释放安装包内的文件

./configure 配置:针对当前系统环境指定安装目录、选择功能等设置。

make 编译:将源代码编译成二进制的可执行程序、库文件等数据。

make install:将编译好的程序文件、配置文档等复制到对应的安装目录。

2、详述MySQL主从复制原理及配置主从的步骤

1 主:binlog线程,记录所有改变了数据库数据的语句,放进master上的binlog中
2 从:IO线程,在使用start slave之后,负责从master上拉取binlog内容,放进自己的relay log中
3 从:SQL执行线程,执行relay log中的语句。
​
配置步骤:
1 主库开启binlog日志功能
2 全备数据库,记录好binlog文件和相应的位置
3 从库上配置和主库的连接信息
4 将全备数据导入从库
5 从库启动slave
6 在从库上查看同步状态,确认是否同步成功

3、在bash中,export命令的作用是什么?

为其它应用程序设置环境变量

4、如何在不重启系统前提下,尝试挂载,新加入/etc/fstab中的文件系统?

mount -a

5、Shell 脚本是什么?

一个 Shell 脚本是一个文本文件,包含一个或多个命令。作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件(Shell 脚本)来完成这些日常工作任务。

6、什么是默认登录 Shell ?

在 Linux 操作系统,"/bin/bash" 是默认登录 Shell,是在创建用户时分配的。 使用 chsh 命令可以改变默认的 Shell 。示例如下所示:

# chsh <用户名> -s <新shell>
# chsh xiaom -s /bin/sh

7、可以在 Shell 脚本中使用哪些类型的变量?

在 Shell 脚本,我们可以使用两种类型的变量:

系统定义变量

系统变量是由系统系统自己创建的。这些变量通常由大写字母组成,可以通过 set 命令查看。

用户定义变量

用户变量由系统用户来生成和定义,变量的值可以通过命令 "echo $<变量名>" 查看。

8、如何规划一台 Linux 主机,步骤是怎样?

1、确定机器是做什么用的,比如是做 WEB 、DB、还是游戏服务器 2、确定好之后,就要定系统需要怎么安装,默认安装哪些系统、分区怎么做 3、需要优化系统的哪些参数,需要创建哪些用户等等的

9、如何取消变量或取消变量赋值?

unset 命令用于取消变量或取消变量赋值。语法如下所示:

# unset <变量名>

10、Bourne Shell(bash) 中有哪些特殊的变量?

内建变量      解释
 $0     命令行中的脚本名字
 $1     第一个命令行参数
 $2     第二个命令行参数
 $9     第九个命令行参数
 $#     命令行参数的数量
 $*     所有命令行参数,以空格隔开


06

1、什么是中间件?什么是jdk?

中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源
中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯
是连接两个独立应用程序或独立系统的软件。相连接的系统,即使它们具有不同的接口
但通过中间件相互之间仍能交换信息。执行中间件的一个关键途径是信息传递
通过中间件,应用程序可以工作于多平台或OS环境。
jdk:jdk是Java的开发工具包
它是一种用于构建在 Java 平台上发布的应用程序、applet 和组件的开发环境

2、故障案例

步骤

内容

问题现象

touch/mkdir no space left on device 磁盘空间不足,操作服务器(创建目录、文件等)时日志提示该错误

解决步骤 1

df -h #查看 block 是否满,du -sh 逐层查看

解决步骤 2

df -i #查看 inode 是否满

解决步骤 3

df -h 显示满但 du -sh 显示没满,说明文件未被彻底删除,存在进程调用

解决步骤 4

`lsof

grep delete` #找出对应进程,重启服务

故障排查结果

排查出故障,因文件没有被彻底删除导致问题


3、请给出/tmp/目录默认权限是什么,为什么如此设置?

/tmp/的权限位为1777
使任何用户均可以向该目录写入文件,但仅允许修改该用户自己创建的文件,防止被非法修改

4、如何在不重启系统前提下,尝试挂载,新加入/etc/fstab中的文件系统?

mount -a

5、你新建了一批用户,出于安全考虑,要求这些用户在第一次登录的时候 就必须要更改密码,怎么实现?

查看密码和账户过期信息:chage -l username
将密码设置为过期,用户登陆必须要更改密码:chage -d0 username 或 passwd -e username

6、常见HTTP状态码

200--请求已成功,请求所希望的响应头或数据体将随此响应返回
301--被请求的资源已永久移动到新位置
302--请求的资源临时从不同的 URI响应请求
401--当前请求需要用户验证
403--服务器已经理解请求,但是拒绝执行
404--请求的网页不存在
500--服务器内部错误
503--服务器暂时不可用

7、如何用 MySQL 命令进行备份和恢复?以test 库为例,创建一个备份,并再用此备份进行恢复

备份:mysqldump -u root -p test > test.sql
恢复:mysql < test.sql

8、MySQL主从复制的优点

<1> 如果主服务器出现问题,可以快速切换到从服务器提供的服务;
<2> 可以在从服务器上执行查询操作,降低主服务器的访问压力;
<3> 可以在从服务器上执行备份,以避免备份期间影响主服务器的服务。

9、如何授权test1用户172.16.1.0/24访问数据库

mysql> grant all on *.* to test1@'172.16.1.%' identified by '123456';

10、什么是MySQL多实例,如何配置MySQL多实例?

在一台服务器上,mysql服务开启多个不同的端口,运行多个服务进程,这些mysql服务进程通过不同的
socket来监听不同的数据端口,进而互不干涉的提供各自的服务

11、Shell中 = 和 == 有什么区别

= 用于为变量赋值
== 用于字符串比较

12、什么是SSH?它在Linux安全中的作用是什么?

SSH是一种安全、加密的远程访问协议,它在Linux安全中扮演了重要的角色。使用SSH,用户可以安全地登录
远程主机并执行命令。
SSH可以防止未经授权的访问和数据泄露,并确保数据的完整性。

13、服务器有哪些组件?

CPU、内存、硬盘、主板、电源、⻛扇、RAID卡等

14、给你⼀台最⼩化安装的linux机器,如何进⾏基础优化?

(1)更新yum官⽅源
(2)关闭不需要的服务
(3)关闭不需要的TTY
(4)对TCP/IP⽹络参数进⾏调整。例如:优化Linux下的内核TCP参数以提⾼系统性能、禁ping
(5)设置时间同步
(6)优化最⼤⽂件数限制
(7)关闭SELINUX
(8)修改SSH登录配置
(9)清理登陆的时候显示的系统及内核版本
(10)删除不必要的系统⽤户和群组
(11)关闭重启ctl-alt-delete组合键
(12)设置⼀些全局变量
(13)设置history历史记录
(14)最⼩化安装后启动⽹卡
(15)添加普通⽤户,设置sudo权限
(16)禁⽌root远程⽤户登录
(17)sed修改远程端⼝
(18)防⽕墙iptables配置。
(19)修改默认DNS
(20)安装必要软件,更新yum源 [epel源]
(21)更新内核和软件到最新版本
(22)去除上次登录的信息

07

1、Raid 的种类及区别

2、简述 TCP 三次握手的过程

第一次握手,建立连接,客户端收送 SYN 包到服务器,并进入 SYN_SEND 状态,等待服务器确认;

第二次握手,服务器收到 SYN,同时自己也収送一个 SYN 包和一个 ACK 包来确认客户端的 SYN,并进

入SYN_RECV;

第三次握手,客户端收到服务器収来的 SYN+ACK 后,回复服务器端一个 ACK 确认,収送完毕后,双方

进入ESTABLISHED 状态。

三次握手成功后,开始传输数据。

3、Linux 常见的系统日志文件都有哪些,各自的用途?

/var/log/messages 内核及公共消息日志

/var/log/cron 计划任务日志

/var/log/dmesg 系统引导日志

/var/log/maillog 邮件系统日志

/var/log/secure 记录与访问限制相关日志

4、nohup和screen的区别是什么?

nohup 忽略挂起信号,输出到 nohup.out
screen 支持多窗口会话管理

5、为什么需要域名

在互联⽹中,使⽤ IP 地址与服务器进⾏通信根本⾏不通,原因如下:
1、不好记忆,如:学校官⽹的 IP 地址是 "39.104.16.126" ,难以记忆;
2、 IP 地址会经常发⽣变更,所以通过 IP 地址去访问某台机器就容易出现⽆法访问的情况;

6、什么是DNS

域名系统 DNS(Domain Name System) 主要功能是将⽤户请求的域名转换为 IP 地址; DNS 就像⼀

位 ”翻译官“,它的基本⼯作原理可以⽤下图来表示;

7、DNS查询原理

下⾯的示例则概述了本地解析器没有域名对应的缓存, DNS 查询所需的步骤:

1、⽤户在浏览器中输⼊ example.com , 则由本地域名服务器开始进⾏递归查询。

2、本地域名服务器采⽤迭代查询的⽅法,向根域名服务器进⾏查询。

3、根域名服务器告诉本地域名服务器,下⼀步应该查询的顶级域名服务器. TLD 的IP地址。

4、本地域名服务器向顶级域名服务器 .com TLD 进⾏查询。

5、 .com TLD 服务器告诉本地域名服务器,下⼀步查询 example.com权威域名服务器的IP地址。

6、本地域名服务器向 example.com 权威域名服务器发送查询。

7、 example.com 权威域名服务器告诉本地域名服务器所查询的主机IP地址。

8、本地域名服务器最后把查询的 IP 地址响应给浏览器。

8、DNS查询方式

递归查询:

是指 DNS 服务器在收到⽤户发起的请求时,必须向⽤户返回⼀个准确的查询结果。

如果 DNS 服务器本地没有存储与之对应的信息,则该服务器需要询问其他服务器,并将返回的查询结构

提交给⽤户。

迭代查询:

是指 DNS 服务器在收到⽤户发起的请求时,并不直接回复查询结果,⽽是告诉另⼀台DNS服务器的地

址,⽤户再向这台DNS服务器提交请求,这样依次反复,直到返回查询结果。

9、DNS记录类型

A记录:

A 记录可实现将域名指向 IP 地址,也称为正向解析;

正向解析:域名--> DNS 服务返回 IP

PTR记录:PTR记录可以实现IP查找域名,也称为反向解析;

反向解析: IP-->DNS 服务返回域名;

CNAME记录:

当需要将域名指向另⼀个域名,再由另⼀个域名提供 IP 地址,就需要添加 CNAME 记录;

NS记录:

1.客户端查询 DNS 服务,如当前 DNS ⽆法提供权威解析,则返回⼀条 NS 记录;

2.客户端在通过 NS 记录中提供的 DNS 权威服务器进⾏解析;

10、DNS客户端检测⼯具

08

1、什么是主从复制?

主从复制可以实现将数据从一台数据库服务器(master)复制到一台到多台数据库服务器(slave)
默认情况下,属于异步复制,所以无需维持长连接
解决问题:① 数据实时备份 ② 缓解服务器压力(读操作可以分散到slave服务器)=> MyCAT(读写分离软件)
简单来说,master将数据库的改变写入二进制日志,slave同步这些二进制日志,并根据这些二进制日志进行数据重演操作,实现数据异步同步。

2、MySQL复制原理

前提:主服务器开启binlog二进制日志,从服务器开启relaylog中继日志。
① slave端的IO线程发送请求给master端的binlog dump线程
② master端binlog dump线程获取二进制日志信息(文件名和位置信息)发送给slave端的IO线程
③ salve端IO线程获取到的内容依次写到slave端relay log里,并把master端的bin-log文件名和位置记录到master.info里
④ salve端的SQL线程,检测到relay log中内容更新,就会解析relay log里更新的内容,并执行这些操作,从而达到和master数据一致
master:主服务器;slave:从服务器。
注:主从复制也是备份的一种,属于在线热备。

3、基于binlog点位主从复制痛点分析

痛点 1:首次开启主从复制的步骤复杂
- 第一次开启主从同步时,要求从库和主库是一致的。
- 找到主库的 binlog 位点。
- 设置从库的 binlog 位点。
- 开启从库的复制线程。
​
痛点 2:恢复主从复制的步骤复杂
- 找到从库复制线程停止时的位点。
- 解决复制异常的事务。无法解决时就需要手动跳过指定类型的错误,比如通过设置 slave_skip_errors=1032,1062。当然这个前提条件是跳过这类错误是无损的。(1062 错误是插入数据时唯一键冲突;1032 错误是删除数据时找不到行)
不论是首次开启同步时需要找位点和设置位点,还是恢复主从复制时,设置位点和忽略错误,这些步骤都显得过于复杂,而且容易出错。所以 MySQL 5.6 版本引入了 GTID,彻底解决了这个困难。

4、MySQL主从延迟比较高通常有哪些原因,如何解决?

可能原因
1. 网络延迟:
  - 网络不稳定或带宽不足会导致从库接收主库的复制数据缓慢。
2. 磁盘I/O性能:
  - 从库磁盘I/O性能差,导致SQL线程写入数据耗时较长。
3. 从库负载高:
  - 从库处理大量查询导致SQL线程的同步速度减缓。
4. 大事务处理:
  - 主库上的大事务会导致生成二进制日志速度过快,从库无法及时应用这些更改。 
5. 主库变更频率高:
  - 主库频繁的写入操作诱发过多的数据需复制。
解决方案
1. 优化网络配置:
  - 增加网络带宽,减少主从之间的网络延迟。
2. 提高硬件性能:
  - 升级从库的硬件配置,例如使用SSD提高磁盘I/O。
3. 减少从库负载:
  - 使用多个从库实现读写分离如mycat读写分离操作,保证复制线程不受查询处理影响。
4. 优化事务处理:
  - 尽量减少主库大事务频率,将操作分解成多个小事务。
  - 例如:如果需要插入大量记录,可将其拆分为多个较小的批量插入。
5. 调优MySQL配置:
  - 调整innodb_flush_log_at_trx_commit等参数以提高写入效率,增加复制线程数量,如调整slave_parallel_workers。
  - innodb_flush_log_at_trx_commit 参数调整
    - 默认值为1,表示每次事务提交都会同步日志到磁盘。为了降低磁盘I/O,提高性能,可以设置为2,表示在事务提交时只写入日志缓存,定期刷入磁盘。
  - 增加复制线程数量 (slave_parallel_workers) 
    - MySQL 5.7及以上版本支持并行复制。通过增加从库复制线程数可以加速从库应用事务。
    - 在/etc/my.cnf中设置 slave_parallel_workers=4  # 根据服务器性能调整(最小为4,一般可以设置为CPU核心数的1/2或1/4),16核CPU => 4/8,32核CPU => 8/16

5、你是怎么备份数据的,包括数据库备份?

在生产环境下,不管是应用数据、还是数据库数据首先在部署的时候就会有主从架构、或者集群,这本身就是属于数据的热备份;其实考虑冷备份,用专门一台服务器做为备份服务器,比如可以用rsync+inotify配合计划任务来实现数据的冷备份,如果是发版的包备份,正常情况下有台发布服务器,每次发版都会保存好发版的包

6、从运维角度讲一下怎么预防cc攻击和ddos攻击

CC主要是用来攻击页面的,通过模拟多个用户进行大并发访问,导致网页打开的速度比较慢。防御CC攻击可以通过多种方法,比如,可以分析攻击的请求头信息,针对这些请求做一些限制。也可以分析请求的ip,利用iptables来限制ip。将网站做成静态页面,也可以有效降低服务器资源使用。另外,还可以限制连接数量,修改最大超时时间等。
​
ddos攻击就是利用合理的服务请求来占用过多的服务资源,从而使合法用户无法得到服务的响应。当攻击量很大,这时候只能临时在上层网络把目标IP封掉,这样牺牲单个ip而保全大局。也可以接入第三方的防ddos攻击的cdn。

7、网站打不开,排查故障的思路?(网络-服务端口-流量-负载-进程-配置-抓包)

A. 先ping一下域名,看看网络是否通
B. Telnet 一下服务器的80端口,看是否通
C. 用sar命令查看服务器流量是否正常
D. 用w查看服务器是否有负载,ps查看服务是否开启
E. 查看配置是否正确
F. 用tcpdump抓包查看数据包是否正常,看是否有攻击


09

1、HTTP工作原理

2、什么是PV

PV即页面浏览量:比如用户访问一个网站算1个 pv ,刷新一次页面则累计 pv+1 ,如果多次打开或刷新

同一页面则浏览量累计。

3、什么是UV

UV即独立访客,访问网站的一台电脑客户端为一个访客。可以理解成访问某网站的电脑的数量。

4、什么是IP

IP 即独立公网 IP 数,是指1天内多少个独立的 IP 浏览了页面,比如你在家通过拨号上网访问某个网

站,此时网站会记录你的公网 IP 地址。

5、什么是并发

并发:指的是同时,我们可以理解为一段时间内(比如 10 秒),网站支持同时访问的人数

6、什么是进程

进程是运行中的程序

7、内存泄漏:Memory Leak

指程序中用malloc或new申请了一块内存,但是没有用free或delete将内存释放,导致这块内存一直处

于占用状态。

8、内存溢出:Memory Overflow

指程序申请了10M的空间,但是在这个空间写入10M以上字节的数据,就是溢出。

9、内存不足:OOM

OOM 即 Out Of Memory,“内存用完了”,这种情况在java程序中比较常见。

10、进程的基本状态

创建状态:进程在创建时需要申请一个空白PCB(process control block进程控制块),向其中填写控制和

管理进程的信息,完成资源分配。如果创建工作无法完成,比如资源无法满足,就无法被调度运行,把

此时进程所处状态称为创建状态;

就绪状态:进程已准备好,已分配到所需资源,只要分配到CPU就能够立即运行;

执行状态:进程处于就绪状态被调度后,进程进入执行状态;

阻塞状态:正在执行的进程由于某些事件(I/O请求,申请缓存区失败)而暂时无法运行,进程受到阻

塞。在满足请求时进入就绪状态等待系统调用;

终止状态:进程结束,或出现错误,或被系统终止,进入终止状态。无法再执行;

10

1、什么是linux系统负载load average,系统负载满负荷如何解决?

Linux系统的负载平均值(load average)是指⼀段时间内系统上运⾏的进程数量的平均值。具体来说,它是系统处于不可中断(uninterruptible)状态和可中断(interruptible)状态下的进程数量之和与逻辑CPU核⼼数的⽐值。通常来说,load average数据中显示的数字分别代表了过去1分钟、5分钟和15分钟内的平均负载。
​
如果系统负载满负荷,那么可能会导致系统响应变慢,进程需要更⻓的时间才能完成。常⻅的解决问题的思路包括以下⼏个⽅⾯:
1. 增加硬件资源:⽐如增加CPU、内存等,以提⾼系统处理能⼒。
2. 优化进程:⽐如调整CPU占⽤率⾼的进程的CPU优先级、降低某些进程的I/O优先级等。
3. 调整系统参数:⽐如提⾼⽂件描述符限制、使⽤⼤⻚⽀持等,以提⾼整个系统的性能。
4. 使⽤容器化技术:⽐如Docker、Kubernetes等技术,可以为应⽤程序提供更好的资源隔离和管理机制。
​
在进⾏以上操作之前,还需要先识别系统负载满负荷的情况。通常,当load average超过CPU物理核⼼的数量时,可以认为系统已经达到满负荷状态。可以使⽤命令"top"或"htop"来查看系统负载,在CPU使⽤率%⼀栏中找到load average相关的数据。

2、什么是Linux系统负载均衡?如何使⽤它来优化系统性能?

Linux系统负载均衡是⼀种将⼯作负载分布在多个计算资源上的技术。它可以通过多种⽅法实现,如使⽤硬件F5设备(如负载均衡器)或使⽤软件(如HAProxy或Nginx)。通过使⽤负载均衡,可以提⾼系统的可⽤性,增强系统的扩展性,减少单个服务器上的压⼒,从⽽优化系统性能。

3、你如何确定服务器的瓶颈所在?有哪些⼯具可以⽤于分析系统瓶颈?

确定服务器的瓶颈所在,需要通过⼀系列的检查和分析来确定,以下是⼀些可能的检查和分析⽅法:
1. 检查系统资源利⽤率:使⽤top或htop等⼯具,查看系统中CPU、内存、磁盘I/O等资源的利⽤情况,寻找可能的瓶颈所在
2. 检查进程负载情况:使⽤ps或pidstat等⼯具,查看系统中运⾏的进程的情况,寻找相关进程的负载情况,找到可能的瓶颈所在
3. 检查系统⽇志和监控信息:使⽤系统⽇志和监控⼯具,查看系统中的异常信息和活动情况,发现可能的性能瓶颈
4. 进程跟踪:使⽤strace或perf等⼯具,跟踪进程的系统调⽤和性能⾏为,发现可能的性能瓶颈
​
通过以上检查和分析⽅法,就能发现系统中潜在的性能瓶颈所在,然后根据具体情况来确定采⽤哪些⼯具进⾏优化。以下是⼀些常⻅的系统瓶颈分析⼯具:
1. vmstat:⽤于报告虚拟内存(VM)统计信息,包括CPU负载、内存使⽤情况、磁盘I/O等
2. iostat:⽤于报告磁盘 I/O 统计信息,包括磁盘吞吐量、读写请求平均响应时间等指标
3. sar:⽤于收集和分析系统活动和性能指标,包括CPU利⽤率、内存利⽤率、⽹络带宽等
4. netstat:⽤于报告⽹络连接和接⼝统计信息,包括⽹络带宽、连接数、错误数等
5. tcpdump:⽤于捕获和分析⽹络数据包,可以检查⽹络流量和连接状况,找到⽹络瓶颈所在
6. strace:⽤于跟踪进程的系统调⽤和传递参数的⾏为,⽤于调试、分析和诊断程序中的问题
7. perf:⽤于对Linux系统进⾏系统性能分析,包括CPU事件分析、线程调度⾏为、内存访问等

4、常见的网络协议有哪些?

常⻅的⽹络协议包括:TCP/IP协议、HTTP协议、HTTPS协议、FTP协议、SMTP协议、DNS协议、SSH协议、Telnet协议、ICMP协议等。

5、什么是 FTP 协议?

FTP(File Transfer Protocol)是⼀种⽤于在⽹络中传输⽂件的协议。它使⽤客户端-服务器架构,允许⽤户通过FTP客户端与FTP服务器进⾏交互,并在两者之间传输⽂件。FTP协议默认使⽤21号端⼝进⾏控制连接,使⽤20号端⼝进⾏数据连接。

6、什么是 SMTP 协议?

SMTP(Simple Mail Transfer Protocol)是⼀种⽤于发送和接收电⼦邮件的协议。它定义了邮件的传输⽅式和格式,以及邮件服务器之间的通信⽅式。SMTP协议默认使⽤25号端⼝进⾏邮件传输。

7、什么是 DNS 协议?

DNS(Domain Name System)协议是⼀种将域名转换为IP地址的协议。它允许⽤户使⽤易于记忆的域名来访问Internet上的各种资源,如⽹站、电⼦邮件服务器等。DNS协议使⽤UDP协议进⾏通信,默认使⽤53号端⼝。

8、什么是 ARP 协议?

ARP(Address Resolution Protocol)协议是⼀种⽤于将IP地址转换为MAC地址的协议。在本地⽹络中,计算机通常使⽤MAC地址来唯⼀标识⾃⼰,⽽IP地址⽤于寻址。ARP协议允许计算机使⽤IP地址查询⽬标计算机的MAC地址,以便进⾏通信。


11

1. Nginx 是什么?

Nginx 是一款高性能的 Web 服务器和反向代理服务器,也可作为负载均衡器、邮件代理服务器和 HTTP 缓存服务器使用。

2. Nginx 如何配置虚拟主机?

  1. 在 Nginx 的配置文件中使用 server 指令,定义虚拟主机的监听地址和端口号。

  2. 配置虚拟主机的域名或 IP 地址。

  3. 配置虚拟主机的访问权限。

  4. 配置虚拟主机的根目录和其他相关参数。

3. 用户访问网站过程

关键时间节点

  • startTime:开始时间

  • connectStart:开始创建链接

  • redirectStart:开始跳转

  • fetchStart:fetch 开始

  • domainLookupStart:域名解析开始

  • secureConnectStart:开始创建安全链接(可选)

  • requestStart:开始发送请求

  • responseStart:开始接收返回

  • redirectEnd:跳转结束

  • domainLookupEnd:域名解析结束

  • connectEnd:创建链接结束

  • responseEnd:结束接收返回

完整流程

跳转 → 应用缓存 → DNS 查找 → 创建 TCP 链接 → 发送请求 → 接收响应

4. Nginx 工作模型

Master 进程

  • 启动过程:启动 Nginx 时,Master 进程先启动,读取配置文件、初始化全局资源,再创建指定数量的 Worker 进程。

  • 创建 Worker 进程:生成处理实际客户端请求的 Worker 进程,各 Worker 进程独立互不影响。

  • 管理 Worker 进程:监控 Worker 进程状态,若 Worker 进程异常退出,会重新启动新的 Worker 进程,保障服务可用性。

Worker 进程

  • 处理客户端请求:单线程进程,通过多进程方式实现高并发请求处理。

  • 事件驱动和异步处理:采用事件驱动异步模型,利用事件循环和非阻塞 I/O 操作,高效切换连接处理大量并发请求。

  • 负载均衡:配置负载均衡后,多个 Worker 进程可分担负载,均衡分配请求,提升系统整体性能。

Master 进程与 Worker 进程的联系

  • Master 进程监控 Worker 进程状态,异常退出时重启新进程,确保服务稳定。

  • 两者通过信号通信,例如重新加载配置时,Master 进程向 Worker 进程发送信号,实现配置热加载无需停止服务。

5. Nginx 多虚拟主机的三种实现方式

  • 基于 IP 地址实现多虚拟主机

  • 基于端口号实现多虚拟主机

  • 基于域名实现多虚拟主机

6. HTTP 协议的各个版本和区别

  • HTTP 1.0:使用短连接,建立一次 TCP 连接,发起一次 HTTP 请求后,TCP 连接断开。

  • HTTP 1.1:使用长连接,建立一次 TCP 连接,可发起多次 HTTP 请求,请求结束后 TCP 连接断开。

7. 常见状态码

状态码

说明

200

客户端成功接收到服务端返回的数据,是最常见的状态码

206

服务端仅返回部分数据,例如大文件未下载完成时出现

301

永久重定向,常见场景如 HTTP 协议转为 HTTPS 协议

302

临时重定向

400

客户端请求语法错误,服务端无法理解

401

服务端开启用户认证,客户端未提供正确验证信息

403

服务端不允许客户端访问,或未找到默认返回页面(默认通常为 index.html,可调整为 app.html 等)

404

客户端请求的资源不存在(可能是路径错误或服务端确实无该资源)

413

客户端上传的文件大小超过服务端限制(默认常为 1MB)

500

服务端出现内部错误,需人工排查(如数据库连接异常等)

502

服务器作为代理时,后端被代理的服务器不可用或未正常回应

503

服务当前不可用,因服务器超载或系统维护,暂时无法处理客户端请求

504

服务器作为代理时,后端服务端未按时返回数据,发生超时

8. 响应码 200 但仍无法访问的原因

  • 内容问题:服务器返回空白页面、存在致命 JavaScript 错误或 HTML 结构损坏。

  • 客户端问题:浏览器缓存错误页面,或广告拦截器等插件干扰页面加载。

  • 网络干扰:中间代理或防火墙返回了 200 状态码的拦截页面。

  • 前端技术问题:单页应用路由配置错误,或关键 CSS/JS 资源加载失败。

9. 响应码 499 的原因、502 和 504 的区别

499 状态码原因

  • 定义:客户端在服务器返回响应前关闭了连接。

  • 常见场景:用户或前端代码因等待时间过长主动取消请求。

  • 本质:Nginx 定义的日志状态码,并非 HTTP 标准状态码。

502 与 504 的区别

502 Bad Gateway

  • 问题位置:代理服务器(如 Nginx)从上游服务器(如 PHP-FPM)收到无效响应。

  • 根本原因:上游服务挂了、崩溃或端口无法连接。

504 Gateway Timeout

  • 问题位置:代理服务器等待上游服务器响应时超时。

  • 根本原因:上游服务处理过慢,但连接本身正常。

核心区别

502 是连接上游服务器失败(收到无效响应),504 是连接成功但未在规定时间内收到响应(超时)。

要不要我帮你整理一份带目录跳转的 PDF 版本,方便你面试时快速查阅重点内容?

12

1. Nginx 如何配置访问控制?

Nginx 可通过两种核心方式实现访问控制:

  • 使用 allow/deny 指令直接允许或拒绝特定访问。

  • 基于 HTTP 身份验证,实现更细粒度的权限管控。

2. Nginx 如何支持动静分离?

动静分离是将动态请求与静态请求拆分给不同服务器处理,提升效率。

  • 把图片、JS、CSS 等静态资源存放于独立目录。

  • 在 Nginx 配置文件中设置虚拟路径,映射到静态资源目录,实现静态资源直接访问。

3. Nginx 如何提高安全性?

  • 采用 HTTPS 协议加密数据传输,防止信息泄露和篡改。

  • 配置访问控制机制,如 IP 白名单、用户认证,限制非法访问。

  • 搭配防火墙,拦截非法 IP 访问。

  • 配置限速、防刷机制,抵御 DDoS 攻击。

4. Nginx 如何配置多域名?

通过 server_name 指令在配置中设置多个域名,实现多域名对应同一服务或不同服务的需求。

5. Nginx 如何处理错误页面?

Nginx 有默认错误页面(如 404),可通过以下配置自定义替换:

nginx

server {
    error_page 404 /404.html;  # 指定 404 错误对应页面
    location = /404.html {
        root /usr/share/nginx/html;  # 自定义页面所在目录
        internal;  # 仅允许内部跳转访问
    }
}

6. 如何配置 Nginx 的日志记录?

Nginx 日志分为访问日志和错误日志,默认分别记录到 access.logerror.log,配置方式如下:

nginx

access_log /var/log/nginx/access.log;  # 配置访问日志路径及文件名
error_log /var/log/nginx/error.log;    # 配置错误日志路径及文件名

可自定义日志文件路径、名称及日志格式。

7. 如何配置 Nginx 反向代理?

使用 proxy_pass 指令实现反向代理,示例如下:

nginx

location /api {  # 匹配所有 /api 开头的请求
    proxy_pass http://localhost:8080;  # 代理到本地 8080 端口服务
}

8. 如何使用 Nginx 实现 URL 重定向?

通过 returnrewrite 指令实现,示例(HTTP 重定向到 HTTPS):

nginx

server {
    listen 80;  # 监听 80 端口(HTTP)
    server_name example.com;  # 目标域名
    return 301 https://$server_name$request_uri;  # 301 永久重定向到 HTTPS
}

9. Nginx 的 location 块的优先级是如何确定的?

location 块按以下优先级匹配 URL:

  1. 精确匹配:使用 = 符号,如 location = /test,优先级最高。

  2. 普通字符串匹配:前缀匹配,如 location /test

  3. 正则表达式匹配:使用 ^~ 符号,如 location ^~ /test

  4. 通用匹配(默认):location /,优先级最低,未匹配其他规则时生效。

10. 如何在 Nginx 中配置 HTTP 基础认证?

依赖 ngx_http_auth_basic_module 模块,配置步骤如下:

  1. 创建存储用户名和密码的文件,例如 /etc/nginx/.htpasswd

  2. 在 Nginx 配置文件中添加如下内容:

nginx

location / {
    auth_basic "Restricted Area";  # 认证提示信息
    auth_basic_user_file /etc/nginx/.htpasswd;  # 指定认证文件路径
}

13

1. Linux 主机 CPU 负载中 user 和 system 比例升高的场景(含实例)

通过 top 命令可查看 CPU 负载相关指标,核心场景如下:

  • user(us)比例升高:用户进程消耗 CPU 资源过多时触发。例如 PHP 后端服务处理大量并发接口请求、PERL 脚本执行复杂数据计算,若 us 长期超 50%,需优化程序算法或提升执行效率。

  • system(sy)比例升高:内核进程消耗 CPU 资源过多时触发,非良性表现。例如频繁的系统调用(如大量文件 IO 操作导致的内核态资源调度)、进程上下文切换过于频繁,需排查具体内核操作原因。

补充指标:

  • wa:IO 等待消耗 CPU 时间百分比,过高可能是磁盘随机访问频繁或磁盘瓶颈。

  • id:CPU 空闲时间百分比,若持续为 0 且 sy 是 us 的两倍,说明 CPU 资源短缺。

2. 不 umount 情况下重新设置 mount 参数

直接使用 remount 选项执行挂载命令,示例(重新挂载为可读可写模式):

bash

运行

mount -o remount,rw /

3. ps aux 中 VSZ 和 RSS 的含义

  • VSZ(虚拟内存集):进程占用的虚拟内存空间大小。

  • RSS(物理内存集):进程实际占用的物理内存空间大小。

4. 并行与并发的区别

  • 串行:一次只能获取并执行一个任务,任务按顺序依次完成。

  • 并行:通过多进程 / 多线程同时获取多个任务,且同时执行这些任务,依赖 CPU 核心数支持。

  • 并发:多个程序或任务需同时被处理的现象,任务可能并行执行也可能串行执行,与 CPU 核心数无关,通过操作系统进程调度和 CPU 上下文切换实现。

5. 排查 Linux 系统中端口被占用的方法

  1. 核心命令:

    • netstat -tlnp:-t 表示 TCP 协议,-l 表示监听状态,-n 以数字显示地址和端口,-p 显示进程 ID 和名称,可列出所有监听的 TCP 端口及对应进程。

    • ss -tlnp:netstat 的替代命令,新系统中性能更优,功能一致。

  2. 释放端口:根据命令查询到的进程 ID,使用 kill 进程ID 杀死对应进程,需谨慎操作,避免终止关键进程。

6. 公司网站访问速度变慢的排查思路

  1. 先通过 wuptime 命令查看系统负载,判断是否存在负载过高问题。

  2. 若负载高,用 top 命令检查 CPU、内存占用情况,定位是否因 CPU 繁忙或内存不足导致。

  3. 若 CPU、内存正常,通过 sar 命令分析网卡流量,排查是否遭遇网络攻击(如 DDoS)。

  4. 根据排查结果采取对应措施,如杀死非必要占用进程、禁止非法访问等。

7. 让作业运行于后台(剥离终端)

三种常用方式:

bash

运行

nohup COMMAND &>/dev/null &  # 忽略输出并后台运行,断开终端不影响
screen COMMAND                # 通过 screen 会话运行,可重新连接会话
tmux COMMAND                  # 通过 tmux 会话运行,功能与 screen 类似,更灵活

8. TCP 三次握手的过程

  1. 第一次握手:客户端发送 SYN 包给服务器,进入 SYN_SEND 状态,等待服务器确认。

  2. 第二次握手:服务器收到 SYN 包后,发送 SYN 包 + ACK 包(确认客户端 SYN),进入 SYN_RECV 状态。

  3. 第三次握手:客户端收到 SYN+ACK 包后,回复 ACK 确认包,双方均进入 ESTABLISHED 状态,随后开始传输数据。

14

1. 近期使用的 Nginx 版本及版本区别

  • 生产环境推荐使用 Stable version(最新稳定版)

  • Nginx 官网提供三类版本:

    1. Mainline version:开发版,主力迭代中的版本,包含最新功能但稳定性稍弱。

    2. Stable version:稳定版,生产环境首选,功能成熟且 bug 较少。

    3. Legacy versions:遗留稳定版,针对老系统兼容的旧版稳定版本。

2. Nginx 如何配置限速限流

(1)IP 并发请求限制

nginx

limit_req_zone $binary_remote_addr zone=one:10m rate=50r/s;  # 单 IP 每秒最多 50 个请求
limit_req_zone $server_name zone=perserver:10m rate=50r/s;   # 单服务器每秒最多 50 个请求

(2)IP 连接数限制

nginx

limit_conn_zone $binary_remote_addr zone=addr:10m;          # 基于 IP 的连接数限制存储区
limit_conn_zone $server_name zone=perserverconn:10m;       # 基于服务器的连接数限制存储区

3. Nginx location pattern 匹配优先级排序

优先级从高到低:

location = / {}(精确匹配) > location ^~ /images/ {}(前缀匹配,优先级高于正则) > location ~* \.(gif|jpg|jpeg)$ {}(正则匹配,~ 区分大小写、~* 不区分) > location /documents/ {}(普通前缀匹配) > location / {}(通用匹配,默认)

4. Nginx 代理负载均衡的调度算法及现象

(1)轮询(默认)

  • 现象:请求按时间顺序逐一分配到不同后端服务。

  • 特点:后端服务器死机时自动剔除,不影响用户访问。

(2)weight(轮询权值)

  • 现象:weight 值越大,被分配到的访问概率越高。

  • 适用场景:后端服务器性能不均衡,或主从架构中合理分配资源。

(3)ip_hash

  • 现象:基于访问 IP 的哈希结果分配请求,同一 IP 固定访问一台后端服务器。

  • 优势:有效解决动态网页的 session 共享问题。

(4)fair

  • 现象:智能根据后端服务器响应时间分配请求,响应时间短的优先。

  • 注意:Nginx 默认不支持,需安装 upstream_fair 模块。

(5)url_hash

  • 现象:基于访问 URL 的哈希结果分配请求,同一 URL 定向到一台后端服务器。

  • 优势:提升后端缓存服务器效率,需安装 Nginx hash 软件包(默认不支持)。

5. 前端 Nginx 并发突然增高的排查思路

  1. 查看 Nginx 访问日志和错误日志,分析高并发时段的访问来源、请求路径及报错信息。

  2. 临时配置访问限制(如限流、IP 黑名单),缓解服务器压力。

  3. 优化 Nginx 高并发相关配置(如调整 worker_processes、worker_connections 等参数)。

  4. 排查后端服务是否异常(如响应缓慢、宕机),导致请求堆积。

6. Nginx 状态码 499 的意义及解决方案

(1)意义

表示 “client has closed connection”(客户端关闭连接)。

  • 常见原因:服务器处理请求时间过长,客户端主动断开;或两次 POST 提交过快,Nginx 判定为不安全连接并拒绝。

(2)解决方案

配置参数禁止服务端主动关闭客户端连接:

nginx

proxy_ignore_client_abort on;

7. 反向代理服务器的优点

  • 隐藏源服务器的存在和特征,提升服务安全性。

  • 作为互联网与 Web 服务器的中间层,适配不同场景(如负载均衡、缓存静态资源)。

  • 便于统一管理(如 SSL 卸载、请求过滤),降低源服务器直接暴露的风险。

8. Nginx 服务器的最佳用途

  • 部署动态 HTTP 内容,搭配 SCGI、WSGI 应用程序服务器、FastCGI 处理程序(用于脚本执行)。

  • 作为负载均衡器,分发请求到多台后端服务器。

  • 充当反向代理、静态资源服务器、HTTP 缓存服务器。

9. Keepalived 的工作原理

  • 虚拟路由器中,仅 MASTER 节点持续发送 VRRP 通告信息,BACKUP 节点不抢占 MASTER(除非自身优先级更高)。

  • 当 MASTER 不可用(BACKUP 收不到通告信息),多台 BACKUP 中优先级最高的节点会快速(<1s)抢占为 MASTER,保证服务连续性。

  • VRRP 包通过加密协议传输,提升安全性;BACKUP 节点仅接收通告信息,不主动发送。

15

1. NAT 相关概念、分类及 DNAT 与 SNAT 的区别

(1)NAT 定义

NAT(Network Address Translation,网络地址转换)是将 IP 数据包头中的 IP 地址转换为另一个 IP 地址的过程。

(2)分类

主要分为 DNAT(目的网络地址转换)和 SNAT(源网络地址转换)两类。

(3)区别与应用事例

  • SNAT:用于内网主机通过路由器或网关访问外网,转换源 IP 地址。例如公司内网电脑通过路由器访问互联网,路由器将内网私有 IP 转换为公有 IP。

  • DNAT:将外部地址和端口的访问映射到内部地址和端口,转换目的 IP 地址。例如公网用户访问服务器公网 IP 的 80 端口,通过 DNAT 映射到内网服务器的私有 IP 对应端口。

2. DDoS 攻击的原理、检测及解决办法

(1)攻击原理

分布式拒绝服务攻击(DDoS)通过主服务器控制多台 “肉鸡”,向目标服务器发送大量合法请求,耗尽服务器资源(CPU、带宽、内存等),导致其无法提供正常服务。

(2)常见攻击方式

  • SYN/ACK FLOOD 攻击:利用 TCP 三次握手漏洞,发送大量半连接请求占用资源。

  • TCP 全连接攻击:建立大量完整 TCP 连接,耗尽服务器连接数。

  • CC 攻击:借助代理服务器生成合法页面请求,针对性攻击网站页面。

(3)检测方法

  • 网站无法打开时,尝试用 3389 连接服务器、PING 命令测试、telnet 登录 80 端口,若均无法连接,可能遭受 DDoS 攻击。

  • 若仅 80 端口无法访问,其他端口正常、PING 测试正常,修改 80 端口后可访问,可能遭受 CC 攻击。

(4)防御方案

  1. 选择带宽充足、安全防护能力强的机房,提升抗攻击基础能力。

  2. 部署硬件防火墙(如黑洞、冰盾)或软件防护(如 iptables 限制单 IP 并发、流量及 SYN 攻击)。

  3. 优化网站架构,采用集群、冗余设计、负载均衡及缓存技术,避免单点故障。

  4. 优化服务器系统安全参数,关闭不必要的端口和服务。

  5. 采用高性能网络设备,提升数据转发和处理效率。

3. 让服务器禁止 PING 的实现方式

  • 防火墙层面:通过 ACL 规则封禁 ICMP 协议。

  • 服务器层面:使用 iptables 封禁 ICMP 协议,或修改内核参数:

    bash

    运行

    echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
    

4. 常见 HTTP 状态码(核心汇总)

  • 200:请求成功,服务器返回所需数据。

  • 301:资源永久移动到新位置,永久重定向。

  • 302:资源临时移动,临时重定向。

  • 401:请求需要用户验证,未提供有效凭证。

  • 403:服务器理解请求,但拒绝执行。

  • 404:请求的网页或资源不存在。

  • 500:服务器内部错误,需排查后端问题。

  • 503:服务器暂时不可用(如超载、维护)。

5. CGI 是什么

CGI(Common Gateway Interface,公共网关接口)是客户端与服务器程序间的数据传输标准。

  • 工作流程:动态请求到达 Web 服务器后,服务器 fork 新进程运行外部程序处理请求,处理完毕返回数据给服务器,进程随之退出;新请求到来时重复 fork 进程。

  • 功能:支持客户端通过浏览器经 HTTP 服务器,向网络服务器上的程序传输数据。

6. FastCGI 是什么

FastCGI 是 CGI 的优化版本,解决 CGI 频繁 fork 进程的性能问题。

  • 工作流程:Web 服务器启动时提前开启专用进程,且进程不退出;收到请求后,通过 TCP 方式与该进程通信并传递请求,进程处理后返回结果,继续等待下一个请求。

7. Kickstart 文件的组成部分

Kickstart 文件包含三个核心部分:

  • 命令段:指定安装前配置,如语言、键盘、时区等。

  • 程序包段:明确需要安装的软件包或包组。

  • 脚本段:包含安装前执行的脚本和安装后执行的脚本。

8. PXE 是什么

PXE(Preboot Execution Environment,预启动执行环境)由 Intel 研发,基于 Client/Server 网络模式。

  • 功能:支持远程主机通过网络从远端服务器下载映像,实现网络启动操作系统,可引导安装 Windows、Linux 等多种系统。

9. Nginx 实现高并发的原理

  • 架构基础:1 个 Master 进程(管理配置、创建 Worker 进程)+ 多个 Worker 进程(处理实际请求)。

  • 核心机制:Worker 进程采用事件驱动和非阻塞 I/O 模型,处理请求时遇到阻塞操作(如转发请求到后端服务器),会暂停当前请求处理,转而处理其他请求;待后端服务器返回结果后,触发事件回调,Worker 进程再继续处理原请求。

  • 关键原因:Web 服务属于网络 I/O 密集型应用,请求大部分时间消耗在网络传输中,Worker 进程无需全程阻塞等待,可高效切换处理多个请求,从而实现高并发。

16、LVS 与 Keepalived 相关面试题整理

1. LVS 工作原理

LVS 依赖内核中的 ip_vs 模块实现功能,核心工作在 netfilter 的 INPUT 链上。

  • 管理员需通过 ipvsadm 工具操作配置 LVS,包括设置 LVS 模型、调度方式以及指定后端主机。

2. LVS 在企业架构中的组件位置及作用

  • 位置:位于企业架构最前端,是用户请求的第一个接收节点。

  • 作用:接收用户请求后,根据预设调度算法将请求分配给后端服务器(如 Nginx 代理),充当整个架构的负载均衡核心,分发流量以提升系统可用性和处理能力。

3. LVS 的工作模式及原理

(1)NAT 模式

  • 原理:安全性高,所有请求和响应均通过调度器(网关)转发。

  • 特点:负载能力较低,调度器易成为带宽瓶颈。

(2)TUN 模式

  • 原理:调度器接收用户请求后,将请求转发给分布在互联网中的处理节点,节点直接向用户返回响应。

  • 特点:成本昂贵,依赖公网环境,响应路径跨互联网。

(3)DR 模式(Direct Routing)

  • 原理:性能和成本平衡最优,属于半开式网络架构。调度器与节点处于同一局域网,调度器分发请求后,节点直接通过路由向用户返回响应,无需经过调度器。

  • 特点:高效低成本,是企业常用的 LVS 工作模式。

4. LVS 的管理工具及模块名称

  • 管理工具:ipvsadm(用于配置和管理 LVS 规则)。

  • 核心模块:ip_vs(内核中的负载均衡模块,实现请求分发逻辑)。

5. LVS 和 Nginx 的区别

LVS 的优点

  1. 抗负载能力强:工作在第四层,仅负责请求分发,不产生流量,IO 性能不受大流量影响,是性能最强的负载均衡软件之一。

  2. 稳定性高:支持完整双机热备方案(如 LVS + Keepalived),容错能力强。

  3. 应用范围广:可对所有 TCP/UDP 应用做负载均衡,不局限于 Web 服务。

  4. 配置简单:可配置项少,减少人为操作失误的概率。

LVS 的缺点

  1. 功能局限:不支持正则处理,无法实现动静分离。

  2. 复杂场景部署麻烦:针对大型应用(如包含 Windows 服务器节点),LVS/DR + Keepalived 配置、维护难度较高。

Nginx 的优点

  1. 跨平台:支持 Linux 系统,也有 Windows 移植版本。

  2. 配置简单:上手门槛低,易于快速部署和调整。

  3. 高并发支持:采用非阻塞 IO 模型,官方测试支持 5 万并发连接,生产环境可稳定承载 2-3 万并发。

  4. 自带健康检查:后端服务器宕机后,自动停止向其分发请求。

  5. 带宽优化:支持 Gzip 压缩和浏览器缓存,节省网络带宽。

  6. 网络依赖性低:只要能 ping 通即可实现负载均衡,可区分内外网流量。

  7. 资源消耗低:稳定性高,10 个 Nginx 进程仅消耗约 125M 内存,擅长处理静态资源。

6. 裂脑问题产生的原因

裂脑问题是高可用集群(如 LVS + Keepalived、Nginx + Keepalived)中,主备节点误判对方故障而同时争抢资源的问题,原因包括:

  1. 心跳链路故障:主备节点之间的通信链路中断,无法传递心跳信息。

  2. 防火墙拦截:防火墙规则阻挡了心跳信息的传输。

  3. 配置错误:心跳网卡地址配置不正确,导致心跳无法正常发送或接收。

  4. 其他因素:主备节点心跳检测方式不一致、心跳广播冲突、软件自身 Bug 等。

7. Keepalived 的功能

Keepalived 核心功能是实现高可用(HA),防止单点故障:

  • 通过虚拟 IP(VIP)对外提供服务,用户请求指向 VIP 而非真实节点 IP。

  • 当主节点故障时,VIP 会自动漂移到备用节点,确保服务不中断,实现 “保持存活” 的高可用效果。

17、PHP、网络协议与加密相关面试题整理

1. PHP 与 MySQL 连接的三种方式

  1. mysql 扩展模块:通过 mysql.so 连接数据库,PHP 7.x 版本后已淘汰。

  2. mysqli 扩展:专为 MySQL 设计的扩展,支持面向过程和面向对象两种编程风格,兼容 MySQL 新特性。

  3. PDO(PHP Data Object)扩展:通用数据库连接接口,支持多种数据库(MySQL、PostgreSQL 等),便于切换数据库类型,安全性更高。

2. TCP 三次握手(建立连接过程)

  1. 客户端发送 SYN 包(序号为 j)到服务器,进入 SYN_SEND 状态,等待服务器确认。

  2. 服务器收到 SYN 包后,发送 SYN+ACK 包(确认号为 j+1,自身 SYN 序号为 k),进入 SYN_RECV 状态。

  3. 客户端收到 SYN+ACK 包后,发送 ACK 包(确认号为 k+1),发送完毕后,客户端和服务器均进入 ESTABLISHED 状态,三次握手完成,开始传输数据。

  • 核心目的:前两次握手确保服务器能接收并响应客户端信息,后两次握手确保客户端能接收并响应服务器信息。

3. TCP 四次挥手(关闭连接过程)

  1. 一端(主动关闭方)向另一端发送 FIN 包,表明不再发送数据。

  2. 接收 FIN 包的一端(被动关闭方)回复 ACK 包,确认收到关闭请求。

  3. 被动关闭方完成数据发送后,向主动关闭方发送 FIN 包,表明自身也不再发送数据。

  4. 主动关闭方收到 FIN 包后,发送 ACK 包确认,双方完成连接关闭。

4. 本地 80 端口请求转发到 8080 端口(iptables 配置)

假设本地主机 IP 为 192.168.16.1,网卡为 eth0,命令如下:

bash

运行

iptables -t nat -A PREROUTING -i eth0 -d 192.168.16.1 -p tcp --dport 80 -j REDIRECT --to-ports 8080

5. 对称加密与非对称加密的区别

(1)对称加密(私钥加密)

  • 核心特点:发送方和接收方使用同一个密钥进行加密和解密。

  • 优势:加解密速度快,适合大数据量加密。

  • 劣势:密钥管理困难,安全性较低,仅适用于一对一双向保密通信。

  • 常见算法:DES、AES 等。

(2)非对称加密(公钥加密)

  • 核心特点:使用一对密钥(公钥 + 私钥),公钥公开,私钥保密;发送方用公钥加密,接收方用私钥解密。

  • 优势:功能强大,安全性高,适用于多对一单向保密通信。

  • 劣势:加解密速度远慢于对称加密。

  • 常用算法:RSA 等。