面试题总结
面试题
- 分类
- 网络基础类面试题
- Linux系统管理类面试题
- shell编程类面试题
- Linux网络服务类面试题
- 数据库管理类面试题
网络基础
简述ISO/OSI七层模型的分层与作用
- 应用层
- 为用户提供服务,给用户一个操作界面
- 表示层
- 数据提供表示(0101010——>ABCD)
- 加密(对称、非对称)
- 压缩
- 会话层
- 确定数据是否需要进行网络传递(来分流)
- 传输层
- 对报文进行分组(标准大小)、组装
- 提供传输协议的选择
- TCP(传输控制协议):可靠的,面向连接的传输协议
- UDP(用户数据协议):不可靠的,面向无连接的传输协议
- 端口封装(确定源端口、目标端口)
- 差错校验
- 网络层
- IP地址编址(源IP,目的IP)
- 路由选择
- 静态路由(由管理员静态设置)(对路由器消耗最小)
- 动态路由(由路由协议决定)
- 数据链路层
- MAC地址编址
- MAC地址寻址
- 差错校验
- 物理层
- 数据实际传输
- 电气特性定义
TCP/IP四层模型与作用:
- 应用层
- 传输层
- 网络层
- 网络接口层(数据链路层+物理层)
TCP/IP协议族的组成
- 应用层:HTTP FTP TFTP SMTP SNMP DNS
- 传输层:TCP UDP
- 网络层:ICMP IGMP IP ARP RARP
- 数据链路层/物理层:PPP PPPOE
简述TCP三次握手的过程
Seq序号
ACK序号(确认号)
SYN:(信)发起一个新连接
FIN:释放一个连接
- 客户端与服务端
- A给B发送一个SYN标为1,seq序号=J(随机),A变为SYN_SEND状态
- B给A发送一个SYN=1,ACK=1,ack序号=J+1,seq=K,B变为SYN_RCVD
- A接收到报文后变为ESTABLISHED状态,给B发送一个ACK=1,ack=K+1,B进入ESTABLISHED,连接建立。
简述TCP报头
- 源端口、目的端口、标志、Seq序号、ACK序号、数据、校验和
简述TCP四次挥手过程
- 客户端与服务端
- 客户端发送FIN=1,Seq=m(随机)报文,进入FIN_WAIT_1状态
- 服务端接收后进入CLOSE_WAIT状态,发送一个ACK=1,Seq=m+1给客户端
- 客户端进入FIN_WAIT_2状态
- 服务端没有需要传输的数据后进入LAST_ACK状态,发送FIN=1,ACK=1,ack=m+1,seq=n的报文给客户端
- 客户端进入TIME_WAIT状态,发送ACK=1,ack=n+1的报文给服务端
- 服务端进入CLOSED状态。
IP地址运算
172.22.141.231/26,该IP位于哪个网段?该网段拥有多少可用IP地址?广播地址是多少
- 网络地址: .0(起始ip) .255(广播地址)不可以配
- 广播地址:有效子网掩码中,有几个0就把IP地址的后几位换成1
- 子网个数:有效子网掩码中,有几个1,子网数就是2的几次方
- 主机个数:有效子网掩码中,有几个1,子网数就是2的几次方减2
IP地址分类
- A: IP地址二进制位必须以0开头
- 1.0.0.0 126.255.255.255 127.0.0.1作为环回地址
- B:128.0.0.0 191.255.255.255
- C:192.0.0.0 223.255.255.255
- D:224.0.0.0 239.255.255.255 组播地址
私有IP
- A类 10.0.0.0 10.255.255.255
- B类 172.16.0.0 172.31.255.255
- C类 192.168.0.0 192.168.255.255
系统管理类
权限优化
简述Linux权限划分原则
- 注意权限分离(Linux系统权限、数据库权限不要掌握在同一个部门)
- 权限在满足使用的情况下,最小优先
- 减少使用root用户,尽量用“普通用户 +sudo提权” 进行日常操作
- 重要系统文件,如/etc/passwd /etc/shadow /etc/fstab /etc/sudoers等,日常建议使用chattr锁定,需要操作时再打开
- 使用脚本检测系统中新增的SUID、SGID文件
- 可以利用工具(chkrootkit)检测rootkit脚本
- 开启SSH服务密钥登录,修改SSH服务端口
备份策略
-
重要系统目录
- /etc/
- /home/
- /root/
- /var/spool/mail/
- /var/spool/cron/
- /var/spool/at/
-
Mysql数据库
- RPM包:/var/lib/mysql/
- 源码包安装的MYSQL:/usr/local/mysql/data/
-
Apache服务
- yum/rpm 源码安装
- 网站内容: /var/www/html/ /usr/local/apache2/htdocs/
- 配置文件:/etc/httpd/conf/httpd.conf /usr/local/apache2/conf/httpd.conf
- 日志文件:/var/log/httpd/ /usr/local/apache2/logs
-
如果有其他服务,也需要重要备份
-
完整备份(直接备份整个文件)
- 实现命令: cp、tar、dump、xfsdump
-
增量备份:每次备份以前一次参考作为参照,只备份新加的内容
- 实现命令: CentOS 6.x:dump工具
- 实现命令: CentOS 7.x:xfsdump工具
-
差异备份:每次备份以第一次备份作为参照物
- 实现命令:同上
备份频率
- 实时备份:如mysql主从同步
- 定时备份:如每天,每周备份,一般通过“脚本+定时任务”实现
备份存储位置
基本原则:不要把鸡蛋放在同一个篮子中
- 本地备份
- 异地备份
网站服务器(APACHE)每天产生的日志数量较大,请问如何备份?
- 系统日志管理工具:logrotate
- 日志切割
- 日志轮替
- Apache服务配置文件自带日志切割功能,但是需要通过脚本进行轮替
RAID
简述RAID0,1,5,01,10
RAID0(独立磁盘冗余阵列)
- 必须使用两块或两块以上硬盘组成
- 每块硬盘的大小必须一致
- 是所有动态磁盘中,数据读写最快的
- 损坏几率相对最高
- 没有磁盘容错功能
RAID1
- 由两块或2的倍数硬盘组成
- 每块硬盘大小必须一致
- 硬盘使用率只有50%,写入速度最慢
- 拥有磁盘冗余
RAID5
- 由三块或三块以上硬盘组层
- 每块盘拿出n(总共n个盘)分之一来做奇偶校验
- 每块盘大小必须一致
- 磁盘利用率是n-1快盘
- 利用奇偶校验,拥有磁盘容错功能(只支持1块硬盘损坏)
奇偶校验:异或校验(同为0,异为1)
RAID6:
- 是RAID 5的增强版
- 由4块或以上硬盘组成
- 每块盘大小必须一致
- 磁盘利用率是n-2快盘
- 支持磁盘容错,可以支持2块硬盘损坏
RAID10
- 两两硬盘先组成RAID1,再组成RAID0
软RAID和硬RAID区别
- 软RAID:由操作系统模拟的RAID,一旦硬盘损坏,操作系统就会损坏,RAID会丧失作用
- 硬RAID:是由独立于硬盘之外的,硬件RAID卡组成,就算硬盘损坏,也不会导致RAID卡损坏,磁盘容错才能起作用
资源查看
Linux中有许多系统资源需要监控,请问有哪些命令可以查看
综合监控工具dstat
yum -y install dstat 需要手动安装
启动流程
简述LINUX启动过程?
-
服务器加电,加载BIOS进行系统检测
-
加载启动引导程序(grub2)
-
由grub2加载系统内核
-
由grub2加载inintamfs虚拟文件系统
-
内核初始化,以加载动态模块的形式加载部分硬件的驱动
-
内核启动系统的第一个进程,也就是systemd
-
systemd开始调用默认单元组(default.target),并按照默认单元组开始运行子单元组
- systemd调用sysinit.target,初始化系统
- systemd调用basic.target单元组,准备操作系统
- systemd调用multi-user.target单元组,启动字符界面所需程序
- systemd调用multi-user.target单元组中的/etc/rc.d/rc.local文件,执行文件中的命令
- systemd调用multi-user.target单元组中的getty.target单元组,初始化本地终端(tty)及登录界面,如果是字符界面启动,到此启动完成。
系统优化
如何进行Linux系统优化?
- 禁用不需要的服务
- ntsysv命令最为方便
- 避免直接使用root用户,普通用户通过sudo授权操作
- 通过chattr锁定重要系统文件
- /etc/passwd
- /etc/shadow
- /etc/group
- /etc/gshadow
- /etc/inittab
- 配置国内yum源,加快下载速度
- 配置系统的同时打开最大文件数
- vi /etc/profile
- ulimit -SHn 65535
- 同步时间服务器
- ntpdate ntp1.aliyun.com
- 通过crond定时任务,让时间同步命令每5分钟执行一次
- 更改SSH服务的默认端口,配置SSH密钥登录
- 配置合理的IPtables防火墙规则
- 配置合理的SELinux安全上下文
- 指定合理的监控策略
- 定时备份系统重要文件(异地)
SHELL
文本截取
有一个b.txt文本,要求将所有域名截取出来,并统计重复域名出现的次数
- cat b.txt | cut -d "/" -f 3 | sort | uniq -c | sort -nr
- cut -d "/" -f 3 用/作为分隔符,截取第三段字
- sort第一次排序
- uniq -c 显示该行重复次数
- sort -nr 按照数值从大到小排序
统计处于ESTABLISHED的ip地址并以重复数排序
- netstat -an | grep ESTABLISHED | awk '{print $5}' | cut -d ":" -f 1 | sort | uniq -c | sort -nr
随机字符串
在/atguigu目录下创建10个txt文件,要求文件名由6位随机小写字母加固字符串(_gg)组成,例如:pzjegg_gg.txt
- /dev/random 以来系统中断生成随机字符串,可以保证数据的随机性,但是生成数据慢,会占用系统进程资源
- /dev/urandom 不依赖系统中断生成随机字符串,生成数据速度快,但数据随机性不足
- tr命令:可以对来自标准输入的字符进行替换、压缩和删除,它可以将一组字符变成另一组字符。
#!/bin/bash
if[!-d /atguigu]
then
mkdir /atguigu
fi
cd /atguigu
for ((i=1;i<=10;i++))
do
filename=$(tr -dc 'A-Za-z0-9' < /dev/urandom |head -c 6)
touch "$filename"_gg.txt
done
生成随机数字
$RANDOM 默认生成0-32767的数字
echo $(($RANDOM%1000))
生成1000以内的随机数
网站监测
批量监测多个网站是否可以正常访问,要求用shell数组实现,监测尽量模拟用户真实访问模式(cur -w %{http_code})。
数组
array_n=(1 2 3)
array_n[0]=1
#!/bin/bash
web=(
http://www.baidu.com
http://www.bilibili.com
)
for i in ${web[*]}
do
code=$(curl -o /dev/null -s --connect-timeout 5 w '%{http_code}'$i grep -E "200|302")
if["$code"!=""]
then
echo "$i is ok" >> /root/ok.log
else
sleep 10
code=$(curl -o /dev/null -s --connect-timeout 5 w '%{http_code}'$i grep -E "200|302")
if ["$code"!=""]
then
echo "$i is ok" >> /root/ok.log
else
echo "$i is error" >> /root/error.log
fi
fi
done
网络服务
提高ssh远程管理的安全等级
- ssh的登录验证方式
- 用户密码(口令)
- 秘钥对
- 非对称加密
- ssh的登录端口和监听设置
- /etc/ssh/sshd_config
-
Port 22 #ssh服务端默认监听端口
- ListenAddress 0.0.0.0(修改为内网的网段) #ssh默认监听IP地址
-
- /etc/ssh/sshd_config
- ssh的登录用户限制
- /etc/ssh/sshd_config
-
PermitRootLogin yes #是否允许root远程登录
-
- /etc/ssh/sshd_config
- ssh的登录超时设置
- /etc/profile
- export TMOUT=300
- ssh登录失败尝试次数
- /etc/ssh/sshd_config
-
MaxAuthTries 6 #设置客户端登录失败尝试次数为6次
ssh连接过长
/etc/ssh/sshd_config
UseDns yes 取消掉注释改为no反向解析
scp和rsync进行远程文件复制有什么区别
- scp 全量备份,文件及传输,加密传输,资源消耗低
- rsync 差异对比,增量备份 分块校验,部分传输 非加密传输 资源消耗高(零散文件较多)
DHCP
请描述通过DHCP服务器获取IP地址的过程
- DHCPDISCOVER DHCPOFFER DHCPREQUEST DHCPACK
- 客户端发送DHCP Discover广播报文
- 服务器寻找一个可用的IP地址,广播一个指定mac地址的DHCP Offer包
- 客户端在局域网中广播一个DHCPREQUEST包,告诉DHCP服务器我要使用IP资源
- 服务端反回一个ACK,表示同意并签订租约。
- 当客户端申请的资源以及被使用时,返回一个NACK包
DHCP续租
- 客户端使用IP资源租约到一半时间时
- 客户端向服务器发送一个DHCP Request包
- 服务端返回ACK包或NACK包
如果DHCP客户机无法找到DH
FTP
简述FTP的主动模式和被动模式的区别
FTP登录与数据传输是两套连接(21:控制端口,20:数据端口)
- 21端口一直监听
- 主动模式:服务器主动开启20端口来进行数据传输
- 被动模式:服务器开放一个随机端口告诉客户端,让客户端主动连接服务器
集群环境中,如何保证所有服务器之间的时间误差较小
手动测试同步:ntpdate 时间服务器IP地址
自动同步:可以将命令写入计划任务
DNS
请描述DNS解析过程
域名:www.baidu.com
根域:.
顶级域:com
二级域:baidu
三级域:www
- 客户机先查看本地hosts文件,有则直接用来访问web server
- 没有则向网卡中记录的首选DNS发起查询请求
- 本地DNS诺有记录则返回给客户端,客户端收到后直接访问web server
- 若没有,则本地DNS向根域名服务器发起请求,请求解析对应顶级域的IP地址
- 本地DNS得到顶级域名服务器IP后,再向顶级域名服务器发起请求,请求解析权威DNS服务器的IP地址
- 本地DNS服务器获取到权威DNS服务器IP地址后,再向其查询具体的完整域名的对应解析记录
- 最终本地DNS将查询到的对应域名的解析记录发送给客户端,并在本地记录一份
Apache
公司里有一台服务器,需要在上面跑两个网站,并且其中一个网站需要更新域名,请问如何处理?
网站1:www.a.com
网站2:www.b.com www.d.com
- 虚拟主机
- rewrite地址重写
http:80
https:443
80→443要使用rewrite
- 基于IP的虚拟主机
- 1个网站对应1个IP地址
- 创建网卡的子接口或者添加新的网卡
- 编写hosts文件
- 修改httpd配置文件 /etc/httpd/conf/httpd.conf
- 文件最尾部 <VirtualHost 192.168.88.20:80>
- 创建网页地址的目录和文件
- 重启httpd服务
- 基于IP+端口的虚拟主机
- IP一样但是端口不一样
- 同上
- 但是要增加 Listen (接口)
- 基于域名的虚拟主机
- 基于用户发送的数据包
- 修改/etc/httpd/conf/httpd.conf的配置文件
- 修改hosts文件
- 同上,添加NameVirtualHost:80 一定要开启
- 在b的虚拟主机设定里开启mod_rewrite.c模块
简述Apache的三种工作模式
- prefork模式
- 主进程事先开启n个子进程,每个子进程启动一个线程
- 优点:稳定,稳定
- 缺点:需要开启大量的进程,大量消耗系统资源,不擅长高并发请求
- worker模式
- 开启n个子进程,每个子进程启m个线程 一对多
- 优点:并发能力更强
- 缺点:具有线程安全问题
- event
- worker模式的升级版
- 多了一个Keepalived(TCP长连接)功能
- 查看方式
-
httpd -V | grep -i "server mpm"
-
简述Apache常见的优化策略
-
利用apache自带的rotatelogs工具进行日志切割,保证单个日志文件不过大
- Customlog
-
美化错误页面
- 可以将404,500等错误信息重新定向到网站首页或其他页面,提升用户体验。
-
配置静态缓存
- 打开Mod_expires.c模块
- 此模块一般写到指定的某一个网站标签中
有哪些技术又可以提高网站的安全和效率?
- CDN
NIGNX
Apache和Nginx各有什么优点,应该如何选择
-
Apache
- 优点:
- Apache的rewrite功能比nginx的要强大
- 模块特别多,基本想要的功能都能找到模块
- 存在时间较长,文献较全,bug也相对较少
- 动静态解析都超稳定
- 缺点:
- 由于工作模式是同步阻塞型,导致资源消耗高,并发能力较差
- 优点:
-
Nginx
- 优点
- 轻量级服务,比apache占用更少的内存及资源
- 并发能力强,niginx处理请求是异步非阻塞的,而APACHE则是阻塞型的,在高并发下nginx,能保持低资源低消耗高性能
- 高度模块化的设计,编写模块相对简单
- 社区活跃各种高性能模块产出迅速
- 缺点:
- 动态处理(解析PHP、寻求后台数据库服务)上需要使用fastcgi连接php的fpm服务,相比Apache不占优势不是特别稳定
- 优点
-
Ningx适合做静态处理,简单,效率高
-
Apache适合做动态处理,稳定,功能高
-
在并发较高的情况下优先选择nginx,并发要求不高的情况下两者都可以,规模稍大的可以使用Nginx作为反向代理,然后将动态请求负载均衡到后端Apache上
-
轮询算法
为什么nginx的并发能力较强
同步和异步:
- Nginx以异步非阻塞方式进行工作
- 客户端发送request,服务器分配Work进程来处理
- 能立即处理完的,处理后work进程释放资源,进行下一个request的处理
- 不能立即处**理完的work进程注册返回事件,然后接着去处理其他request
- 当之前的request结果返回后,触发返回事件,由空闲work进程接着处理通过这种快速处理,快速释放请求的方式,达到同样的配置可以处理更大的并发量的目的
写出几个Nginx的常用模块,并描述其功能
-
http_ssl_module
- 实现服务器加密传输的模块,部署完成后可使用https://协议进行数据传输,保证数据传输过程的安全
- https:443端口
-
http_image_filter_module
- 通过该模块可以实现图片裁剪,将过大的图片裁剪为指定大小的图片,生成缩略图,保证传输速率,该选项默认不开启,需要人为指定
-
http_rewrite_module
- 地址重写模块,功能同APACHE一样
-
http_proxy_module
- Nginx的反向代理功能,由于Nginx的高并发特性,很多时候我们都选择使用Nginx作为网站的前置服务器,一般会和upstream模块一起使用,完成压力分摊工作
-
http_upstream_module
- Nginx的负载均衡模块,一般和http_porxy模块一起使用,用来对后台服务器的任务调度及分配,分配原则可以通过算法进行控制
HTTP状态码
写出几个常见的HTTP状态码,并解释出现原因
- 1**:信息,服务器收到请求
- 100:客户端应继续其请求
- 101:切换协议
- 2**:成功,操作被成功接受并处理
- 200:ok,请求成功
- 201:已创建,成功请求创建了新的资源
- 202:已接受,但未处理完成
- 204:请求是空的
- 205:重置内容
- 206:部分内容,服务器成功处理了部分GET请求
- 3**:重定向
- 300:多种选择,请求的资源可以包括多个位置,需要进一步的操作以完成请求,相应可返回一个资源特征与地址的列表用于用户终端选择。
- 301:永久重定向
- 302:临时重定向
- 303:查看其它地址,使用GET和POST请求查看
- 305:使用代理,所有请求的资源必须通过代理访问
- 4**:客户端错误,请求包含语法错误或无法完成请求
- 400:客户端语法错误
- 401:请求用户的身份认证
- 402:保留,将来使用
- 403:服务器理解客户端的请求,但是拒绝此请求
- 404:服务器无法根据客户端的请求找到资源
- 405:客户端请求中的方法被禁止
- 5**:服务器错误,服务器在处理请求的过程中发生错误
- 500:服务器内部错误,无法完成请求
- 501:服务器不支持请求的功能,无法完成请求
- 502:网关不可用
- 503:由于超载或系统维护,服务器无法处理客户端的请求
- 504:充当网关或代理服务器,未及时从远端服务器获取请求
MYSQL
MYSQL一主多从,主库宕机,如何合理切换到从库,其他从库如何处理?
- 让从服务器对主服务器进行备份
- bin-log日志
- 开启主服务器的bin-log日志记录功能,将主服务器的bin-log日志传到从服务器,从服务器根据日志内容将数据还原到本地
- 主从故障切换
- 登录所有从库查看post信息,使用POST最大的新作为新的主库,然后将从提升为新的主库,登录从库执行stop slave
- 修改my.cnf配置文件,开启log-bin并重启数据库服务,登录数据库执行restat master,show master status\G;查看主库信息,最后创建授权同步用户与权限和网站使用数据库的用户与权限,最后修改对应服务器的IP地址等信息
- 登录其他从库,执行change master操作,查看同步状态
单台mysql达到性能瓶颈时,如何击碎性能瓶颈?
- 数据库代理工具:Amoeba
- 反向代理、负载均衡
Mysql什么时候创建索引
- 什么是索引
- 索引本质是数据结构,排好序的快速查找数据结构,可以提高查找效率数据分身之外,数据库还维护者一个满足特定查找算法的数据结构,这些数据结构可以在这些数据结构的基础上实现高级查找算法,这种数据结构就是索引
- 索引的分类
- 主键索引
- 单值索引,一个索引只包含单个列,一个表可以有多个单列索引
- 复合索引,一个索引包含多个列,如电话浦上姓+名字,最好不超过五个字段
- 唯一索引,所有列的值必须唯一,但是允许有空值
- 普通索引和唯一索引可以称为辅助索引
- 索引的劣势是什么
- 实际上索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录,索引列也是要占用空间的。
- 虽然索引大大提高了查询速度,但是会降低更新表的速度,如对表进行INSERT,UPDATE,DELETE。因为更新表示,MYSQL不仅要保存数据,还要保存一下索引文件每次更新添加了索引列表的字段,都会调整因为更新所带来的键值变化后的索引信息
- 索引知识提高效率的一个因素,如果Mysql有大数据量的表,就需要花时间研究建立最优秀的索引,或优化查询
- 什么时候需要创建索引
- 主键自动建立唯一索引
- 频发作为查询条件的字段应该创建索引
- 查询中与其他表关联的字段,外键关系建立索引
- 频繁更新的字段不适合创建索引,因为每次更新不单单是更新了记录还会更新索引
- Where条件里用不到的字段不创建索引
- 单键\组合索引的选择问题,在高并发下倾向创建组合索引
- 查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度。
- 查询中统计或者分组字段(group by)
- 什么时候不需要创建索引
- 表记录太少
- 频繁更新的字段
- 性别、国籍字段。
误操作drop语句导致数据库数据破坏,请给出恢复的实际大体步骤
- 通过二进制日志恢复数据 bin-log
Redis
如何保证Redis能永久保存数据?
- 数据持久化
- Redis是一个key-value存储系统,支持的value类型相对较多
- 原子性
RDB
- 在Redis运行时,RDB程序将当前内存中的数据库快照保存到磁盘中。
- RDBSave
- RDBRead
AOF
- 将所有对数据库进行的写入命令记录到AOF文件中
AOF重写流程
- AOF重写流程
- AOF重写完成会向主进程发送一个完成的信号
- 会将AOF重写缓存中的数据全部写入到文件中
- 用新的AOF文件,覆盖原有的AOF文件

浙公网安备 33010602011771号