全运维工程师应聘面试题总结.docx
《全运维工程师应聘面试题总结.docx》由会员分享,可在线阅读,更多相关《全运维工程师应聘面试题总结.docx(30页珍藏版)》请在冰点文库上搜索。
全运维工程师应聘面试题总结
运维工程师应聘面试题总结
一、linux
1.linux系统启动流程
∙第一步:
开机自检,加载BIOS
∙第二步:
读取MBR
∙第三步:
BootLoader grub引导菜单
∙第四步:
加载kernel内核
∙第五步:
init进程依据inittab文件夹来设定运行级别
∙第六步:
init进程执行rc.sysinit
∙第七步:
启动内核模块
∙第八步:
执行不同运行级别的脚本程序
∙第九步:
执行/etc/rc.d/rc.lo
2.linux文件类型
∙-常规文件,即file
∙d 目录文件
∙b blockdevice即块设备文件,如硬盘;支持以block为单位进行随机访问
∙ccharacterdevice即字符设备文件,如键盘支持以character为单位进行线性访问
∙l symboliclink即符号链接文件,又称软链接文件
∙p pipe即命名管道文件
∙s socket即套接字文件,用于实现两个进程进行通信
3.centos6和7怎么将源码安装的程序添加到开机自启动?
∙通用方法:
编辑/etc/rc.d/rc.local文件,在文件末尾添加启动服务命令
∙centos6:
①进入到/etc/rc.d/init.d目录下,②新建一个服务启动脚本,脚本中指定chkconfig参数,③添加执行权限,④执行chkconfig--add添加服务自启动
∙centos7:
①进入到/usr/lib/systemd/system目录下,②新建自定义服务文件,文件中包含[Unit][Service][Install]相关配置,然后添加下执行权限,③执行systemctlenable服务名称
4.简述lvm,如何给使用lvm的/分区扩容?
∙功能:
可以对磁盘进行动态管理。
动态按需调整大小
∙概念:
①PV-物理卷:
物理卷在逻辑卷管理中处于最底层,它可以是实际物理硬盘上的分区,也可以是整个物理硬盘,也可以是raid设备。
②VG-卷组:
卷组建立在物理卷之上,一个卷组中至少要包括一个物理卷,在卷组建立之后可动态添加物理卷到卷组中。
一个逻辑卷管理系统工程中可以只有一个卷组,也可以拥有多个卷组。
③LV-逻辑卷:
逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态地扩展和缩小空间。
系统中的多个逻辑卷可以属于同一个卷组,也可以属于不同的多个卷组。
∙给/分区扩容步骤:
①添加磁盘
②使用fdisk命令对新增加的磁盘进行分区
③分区完成后修改分区类型为lvm
④使用pvcreate创建物理卷
⑤使用vgextend命令将新增加的分区加入到根目录分区中
⑥使用lvextend命令进行扩容
⑦使用xfs_growfs调整卷分区大小
5.为何du和df统计结果不一致?
∙用户删除了大量的文件被删除后,在文件系统目录中已经不可见了,所以du就不会再统计它。
∙然而如果此时还有运行的进程持有这个已经被删除的文件句柄,那么这个文件就不会真正在磁盘中被删除,分区超级块中的信息也就不会更改,df仍会统计这个被删除的文件。
∙可通过lsof命令查询处于deleted状态的文件,被删除的文件在系统中被标记为deleted。
如果系统有大量deleted状态的文件,会导致du和df统计结果不一致。
6.如何升级内核?
∙方法一
#添加第三方yum源进行下载安装。
Centos6YUM源:
http:
//www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm
Centos7YUM源:
http:
//www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
#先导入elrepo的key,然后安装elrepo的yum源:
rpm-importhttps:
//www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm-Uvhhttp:
//www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
#查看可用的内核相关包
yum--disablerepo="*"--enablerepo="elrepo-kernel"listavailable
yum-y--enablerepo=elrepo-kernelinstall
∙方法二
#通过下载kernelimage的rpm包进行安装。
官方Centos6:
http:
//elrepo.org/linux/kernel/el6/x86_64/RPMS/
官方Centos7:
http:
//elrepo.org/linux/kernel/el7/x86_64/RPMS/
#获取下载链接进行下载安装即可
wgethttps:
//elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-lt-4.4.185-1.el7.elrepo.x86_64.rpm
rpm-ivhkernel-lt-4.4.185-1.el7.elrepo.x86_64.rp
#查看默认启动顺序
[root@localhost~]#awk-F\''$1=="menuentry"{print$2}'/etc/grub2.cfg
CentOSLinux(5.2.2-1.el7.elrepo.x86_64)7(Core)
CentOSLinux(4.4.182-1.el7.elrepo.x86_64)7(Core)
CentOSLinux(3.10.0-957.21.3.el7.x86_64)7(Core)
CentOSLinux(3.10.0-957.10.1.el7.x86_64)7(Core)
CentOSLinux(3.10.0-327.el7.x86_64)7(Core)
CentOSLinux(0-rescue-e34fb4f1527b4f2d9fc75b77c016b6e7)7(Core)
由上面可以看出新内核(4.12.4)目前位置在0,原来的内核(3.10.0)目前位置在1
#设置默认启动
[root@localhost~]#grub2-set-default0 //0代表当前第一行,也就是4.12.4版本
#重启验证
7.nginx日志访问量前十的ip怎么统计?
awk'{array[$1]++}END{for(ipinarray)printip,array[ip]}'access.log|sort-k2-rn|head
8.如何删除/var/log/下.log结尾的30天前的日志?
find/var/log/-typef-name.*.log-mtime30|xargsrm-f
9.ansible有哪些模块?
功能是什么?
∙copy:
拷贝文件到被控端
∙cron:
定时任务
∙fetch:
拷贝被控端文件到本地
∙file:
文件模块
∙group:
用户组模块
∙user:
用户模块
∙hostname:
主机名模块
∙script:
脚本模块
∙service:
服务启动模块
∙command:
远程执行命令模块
∙shell:
远程执行命令模块
∙yum:
安装包组模块
∙setup:
查看主机系统信息
10.nginx为什么比apache快?
∙nginx采用epoll模型
∙apache采用select模型
11.四层负载和七层负载区别是什么?
∙四层基于IP+端口进行转发
∙七层就是基于URL等应用层信息的负载均衡
12.lvs有哪些工作模式?
哪个性能高?
∙dr:
直接路由模式,请求由LVS接受,由真实提供服务的服务器直接返回给用户,返回的时候不经过LVS。
(性能最高)
∙tun:
隧道模式,客户端将访问vip报文发送给LVS服务器。
LVS服务器将请求报文重新封装,发送给后端真实服务器。
后端真实服务器将请求报文解封,在确认自身有vip之后进行请求处理。
后端真实服务器在处理完数据请求后,直接响应客户端。
∙nat:
网络报的进出都要经过LVS的处理。
LVS需要作为RS的网关。
当包到达LVS时,LVS做目标地址转换(DNAT),将目标IP改为RS的IP。
RS接收到包以后,仿佛是客户端直接发给它的一样。
RS处理完,返回响应时,源IP是RSIP,目标IP是客户端的IP。
这时RS的包通过网关(LVS)中转,LVS会做源地址转换(SNAT),将包的源地址改为VIP,这样,这个包对客户端看起来就仿佛是LVS直接返回给它的。
客户端无法感知到后端RS的存在。
∙fullnat模式:
fullnat模式和nat模式相似,但是与nat不同的是nat模式只做了两次地址转换,fullnat模式却做了四次。
13.lvsnginxhaproxykeeplived区别,优缺点?
这个自行XX吧,我就不信在这细说了
14.如下url地址,各个部分的含义
∙https:
使用https加密协议访问
∙请求地址
∙?
word&ie=utf-8:
get请求的参数,多个参数&连接
15.tomcat各个目录含义,如何修改端口,如何修改内存数?
∙bin存放tomcat命令
∙conf存放tomcat配置文件
∙lib存放tomcat运行需要加载的jar包
∙log存在Tomcat运行产生的日志
∙temp运行过程中产生的临时文件
∙webapps站点目录
∙work存放tomcat运行时的编译后的文件
∙conf/server.xml修改端口号
∙bin/catalina.sh修改jvm内存
16.nginx反向代理时,如何使后端获取真正的访问来源ip?
在location配置段添加以下内容:
proxy_set_headerHost$http_host;proxy_set_headerX-Real-IP$remote_addr;proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;proxy_set_headerX-Forwarded-Proto$scheme;
17.nginx负载均衡算法有哪些?
∙rr轮训
∙weight加权轮训
∙ip_hash静态调度算法
∙fair动态调度算法
∙url_hashurl哈希
∙leat_conn最小连接数
18.如何进行压力测试?
例如:
模拟10个用户,对XX首页发起总共100次请求。
测试命令:
ab-n100-c10
19.curl命令如何发送https请求?
如何查看response头信息?
如何发送get和post表单信息?
∙发送https请求:
curl--tlsv1'
∙response头信息:
curl-I
∙get:
curl请求地址?
key1=value1&key2=value2&key3=value3
∙post:
curl-d"key1=value1&key2=value2&key3=value3"
二、mysql
1.索引的为什么使查询加快?
有啥缺点?
默认的方式是根据搜索条件进行全表扫描,遇到匹配条件的就加入搜索结果集合。
如果我们对某一字段增加索引,查询时就会先去索引列表中一次定位到特定值的行数,大大减少遍历匹配的行数,所以能明显增加查询的速度
缺点:
·创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加
·索引需要占物理空间,除了数据表占用数据空间之外,每一个索引还要占用一定的物理空间,如果需要建立聚簇索引,那么需要占用的空间会更大
·以表中的数据进行增、删、改的时候,索引也要动态的维护,这就降低了整数的维护速度
2.sql语句左外连接右外连接内连接全连接区别
3.mysql数据备份方式,如何恢复?
你们的备份策略是什么?
∙物理完全备份
备份所有数据库文件:
/var/lib/mysql/*
备份所有binlog文件:
/var/lib/mysql/mysql-bin.*
备份选项文件:
/etc/f
∙mysqldump逻辑备份
mysqldump-uroot-p--all-databases>/backup/mysqldump/all.db
∙物理备份恢复
mv/var/lib/mysql/var/lib/mysql.old#先把原来的数据目录改名
cp-a/backups/mysql/var/lib
∙逻辑备份数据恢复
mysql>usedb_name
mysql>source/backup/mysqldump/db_name.db
4.如何配置数据库主从同步,实际工作中是否遇到数据不一致问题?
如何解决?
为每个服务器配置唯一值的server-id
∙主库
开启binlog日志
创建主从复制用户
查看master的状态
∙从库
changemasterto设置主库信息
startslave开始复制
5.mysql约束有哪些?
∙非空约束
∙唯一约束
∙主键约束
∙外键约束
6.二进制日志(binlog)用途?
BINLOG记录数据库的变更过程。
例如创建数据库、建表、修改表等DDL操作、以及数据表的相关DML操作,这些操作会导致数据库产生变化,开启binlog以后导致数据库产生变化的操作会按照时间顺序以"事件"的形式记录到binlog二进制文件中
7.mysql数据引擎有哪些?
∙常用的myisam、innodb
∙区别:
InnoDB支持事务,MyISAM不支持,这一点是非常之重要。
事务是一种高级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原,而MyISAM就不可以了;
MyISAM适合查询以及插入为主的应用,InnoDB适合频繁修改以及涉及到安全性较高的应用;
InnoDB支持外键,MyISAM不支持;
MyISAM是默认引擎,InnoDB需要指定;
InnoDB不支持FULLTEXT类型的索引;
InnoDB中不保存表的行数,如selectcount(*)fromtable时,InnoDB;需要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。
注意的是,当count(*)语句包含where条件时MyISAM也需要扫描整个表;
对于自增长的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中可以和其他字段一起建立联合索引;
清空整个表时,InnoDB是一行一行的删除,效率非常慢。
MyISAM则会重建表;
InnoDB支持行锁(某些情况下还是锁整表,如updatetableseta=1whereuserlike'%lee%'
8.如何查询mysql数据库存放路径?
mysql>showvariableslike'datadir%';
+---------------+------------------------+
|Variable_name|Value|
+---------------+------------------------+
|datadir|/usr/local/mysql/data/|
+---------------+------------------------+1rowinset(0.00sec)
9.mysql数据库文件后缀名有哪些?
用途什么?
∙myisam
.frm文件:
保护表的定义
.myd:
保存表的数据
.myi:
表的索引文件
∙innodb
.frm:
保存表的定义
.ibd:
表空间
10.如何修改数据库用户的密码?
∙mysql8之前
setpasswordfor用户名@localhost=password('新密码');
mysqladmin-u用户名-p旧密码password新密码
updateusersetpassword=password('123')whereuser='root'andhost='localhost';
∙mysql8之后
#mysql8初始对密码要求高,简单的字符串不让改。
先改成:
MyNewPass@123;
alteruser'root'@'localhost'identifiedby'MyNewPass@123';
#降低密码难度
setglobalvalidate_password.policy=0;
setglobalvalidate_password.length=4;
#修改成简易密码
alteruser'root'@'localhost'IDENTIFIEDBY'1111';
11.如何修改用户权限?
如何查看?
∙授权:
grantallon*.*touser@'%'identifiedby'passwd'
∙查看权限
showgrantsforuser@'%';
三、nosql
1.redis数据持久化有哪些方式?
∙rdb
∙aof
2.redis集群方案有哪些?
∙官方cluster方案
∙twemproxy代理方案
∙哨兵模式
∙codis客户端分片
3.redis如何进行数据备份与恢复?
∙备份
redis127.0.0.1:
6379>SAVE
创建redis备份文件也可以使用命令BGSAVE,该命令在后台执行。
∙还原
只需将备份文件(dump.rdb)移动到redis安装目录并启动服务即可
redis127.0.0.1:
6379>CONFIGGETdir
1)"dir"
2)"/usr/local/redis/bin"
4.MongoDB如何进行数据备份?
mongoexport/mongoimport
mongodump/mongorestore
5.kafka为何比redisrabbitmq快?
这个大家自行XX,在这就不赘述了
四、docker
1.dockerfile有哪些关键字?
用途是什么?
2.如何减小dockerfile生成镜像体积?
∙尽量选取满足需求但较小的基础系统镜像,例如大部分时候可以选择debian:
wheezy或debian:
jessie镜像,仅有不足百兆大小;
∙清理编译生成文件、安装包的缓存等临时文件;
∙安装各个软件时候要指定准确的版本号,并避免引入不需要的依赖;
∙从安全角度考虑,应用要尽量使用系统的库和依赖;
∙如果安装应用时候需要配置一些特殊的环境变量,在安装后要还原不需要保持的变量值;
3.dockerfile中CMD与ENTRYPOINT区别是什么?
∙CMD和ENTRYPOINT指令都是用来指定容器启动时运行的命令。
∙指定ENTRYPOINT指令为exec模式时,CMD指定的参数会作为参数添加到ENTRYPOINT指定命令的参数列表中。
4.dockerfile中COPY和ADD区别是什么?
∙COPY指令和ADD指令都可以将主机上的资源复制或加入到容器镜像中
∙区别是ADD可以从远程URL中的资源不会被解压缩。
∙如果是本地的压缩包ADD进去会被解压缩
5.docker的cs架构组件有哪些?
6.docker网络类型有哪些?
∙host模式
∙container模式
∙none模式
∙bridge模式
7.如何配置docker远程访问?
∙vim/lib/systemd/system/docker.service
∙在ExecStart=后添加配置,注意,需要先空格后,再输入-Htcp:
//0.0.0.0:
2375-Hunix:
///var/run/docker.sock
8.docker核心namespaceCGroups联合文件系统功能是什么?
∙namespace:
资源隔离
∙cgroup:
资源控制
∙联合文件系统:
支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下
9.命令相关:
导入导出镜像,进入容器,设置重启容器策略,查看镜像环境变量,查看容器占用资源
∙导入镜像dockerload-ixx.tar
∙导出镜像dockersave-oxx.tarimage_name
∙进入容器dockerexec-it容器命令/bin/bash
∙设置容器重启策略启动时--restart选项
∙查看容器环境变量dockerexec{containerID}env
∙查看容器资源占用dockerstatstest2
10.构建镜像有哪些方式?
∙dockerfile
∙commit提交为镜像
11.docker和vmware虚拟化区别?
五、kubernetes
1.k8s的集群组件有哪些?
功能是什么?
2.kubectl命令相关:
如何修改副本数,如何滚动更新和回滚,如何查看pod的详细信息,如何进入pod交互?
∙修改副本数kubectlscaledeploymentredis--replicas=3
∙活动更新kubectlsetimagedeploymentsmyapp-deploymyapp=myapp:
v2
∙回滚kubectlrolloutundodeploymentsmyapp-deploy
∙查看pod详细信息kubectldescribepods/
∙进入pod交互kubectlexec-it-cbash
3.etcd数据如何备份?
∙etcdctl--endpoints="https:
//192.168.32.129:
2379,https:
//192.168.32.130:
2379,192.168.32.128:
2379"--cacert=/etc/kubernetes/cert/ca.pem--key=/etc/etcd/cert/etcd-key.pem--cert=/etc/etcd/cert/etcd.pemsnapshotsavesnashot1.db
∙Snapshotsavedatsnashot1.db
4.k8s控制器有哪些?
∙副本集(ReplicaSet)
∙部署(Deployment)
∙状态集(StatefulSet)
∙Daemon集(DaemonSet)
∙一次任务(Job)
∙计划任务(CronJob)
∙有状态集(Stateful