00-运维面试问题汇总¶
系统相关¶
DNS系统架构与解析原理¶
参考答案:
TCP/IP的3次握手和四次断开原理¶
参考答案:
RAID原理,特点,性能相关问题¶
请描述 raid 0 1 5 10原理、特点、性能区别?
raid0
1容量损失一半
2.磁盘的冗余为50% 磁盘总容量的一半
3.写入数据的时候很略慢,因为两个磁盘要相互同步
4.读取速度可能是单盘的读取速度
适用场景:数据十分重要,但是访问量不是很大的情况
raid1
raid5
1.RAID-5的冗余为1块盘
2.做RAID-5最少需要3盘以上的磁盘
3.通过奇偶效验的方式来对数据进行保存,保证数据的安全性。
4.读取写入的速度相对于RAID1块很多
5.RAID-5的技术应用的范围很广泛
应用场景:数据量很重要,但是也需要读取写入要求很高的情况下。
raid10
1.RAID-10可以认为是RAID-1与RAID-0的结合,它继承了这两个RAID的优点。
2.继承了RAID-0的读取写入速度,和RAID-1的安全性。
3.使用奇偶效验的方式存储数据
4.读取写入速度比RAID-5快
5.安全性比较高
6.但是相对于RAID-5来说RAID-10比较贵,企业用的比较少。
关于不同RAID之间的区别于差别¶
解答:
(1)raid0工作原理及特点:
假如3块磁盘做raid0的情况下
优点:
1.容量是所有硬盘之和
2.理论上读取写入速度是所有磁盘IO之和
缺点:
1.没有冗余,只要一个磁盘损坏,磁盘中的数据全部丢失。(对于数据来说很不安全)
(2)raid1工作原理及特点:
1容量损失一半
2.磁盘的冗余为50% 磁盘总容量的一半
3.写入数据的时候很略慢,因为两个磁盘要相互同步
4.读取速度可能是单盘的读取速度
适用场景:数据十分重要,但是访问量不是很大的情况
(3)raid5工作原理及特点:
1.RAID-5的冗余为1块盘
2.做RAID-5最少需要3盘以上的磁盘
3.通过奇偶效验的方式来对数据进行保存,保证数据的安全性。
4.读取写入的速度相比RAID1快很多
5.RAID-5的技术应用的范围很广泛
应用场景:数据量很重要,但是也需要读取写入要求很高的情况下。
解析 | 分布式奇偶校验的独立磁盘结构 | 即带区结构外加一个镜像结构。RAID10是RAID1+0,RAID 1在这里就是一个冗余的备份阵列,而RAID 0则负责数据的读写阵列。 | 无差错控制的带区组,将N快硬盘当1块来用,将数据平均分成两部分,分别写在两块硬盘上 | 即镜像结构。需要偶数盘,一半空间存储,一半备份 |
---|---|---|---|---|
优点 | 读取效率很高,块式集体访问效率不错。可靠性高,允许单个磁盘出错 | 继承RAID0的快速,RAID1的安全 | 极大提升读写速度 | 磁盘全部有备份,一块磁盘坏了,数据不受影响 |
缺点 | 写入效率一般 | 价格高,RAID5的两倍,可扩充性不好,CPU占用高,磁盘利用率低 | 硬盘之间数据无校验功能,任何一块出问题,整个数据不能恢复 | 成本最高 |
使用率 | N-1 | 50% | 最大化接近100% | 50% |
磁盘数量 | >3 | 偶数 | N | 偶数 |
冗余 | 有1块硬盘冗余 | 50% | 特别少 | 50% |
校验 | 奇偶校验 | 奇偶校验 | 无校验 | 无校验 |
读写速度 | 读取快,写入一般 | 读取速度较快,比RAID5快 | 非常快 | 正常读写 |
安全性 | 高,将数据段的校验码交互存放于各个盘上,任何一个硬盘损坏,都可根据其它盘的校验位来重建损坏 | 较高 | 差 | 安全性最高 |
适用场景 | 广泛应用 | 用于容量不大,但要求速度和差错控制的数据库中 | 用于要求读写速度比较快的情况,如图像(包括动画)编辑应用 | 数据要求高的场合,不计成本 |
请描述linux开机启动流程¶
1.开机BIOS自检
2.启动MBR
3.启动GRUB系统引导程序
4.加载系统内核
5.启动init进程
6.读取/etc/inittab配置文件,确定系统运行级别
7.执行/etc/rc.d/rc.sysinit脚本,执行/etc/rc.d/rc系统对应级别的脚本,并依次启动相应的开机启动服务
8.启动系统的mingetty进程
9.输入账号密码进入系统
磁盘没有满但是写不进去数据,分析一下原因¶
磁盘没有满但是写不进去数据,分析一下原因
解答:
(1)可能是由于inode数量或者block数量被占满所导致
(2)如果inode被用尽的话,可能原因是系统中出现大量的小文件,将inode的数量消耗完了。
Linux系统运行级别有哪些¶
运行级别:Linux运行时的一种状态标识,这个表示一般使用数字来进行表示,
0关机状态
1 单用户状态 (使用范围:密码丢失可以通过进入单用户级别找回密码)
2 多用户状态,但是没有NFS网络文件系统
3 文本模式,完整的命令行模式(重点)工作模式
4 unused 系统未使用,保留给用户使用
5 图形化桌面模式,X11(服务器端不需要使用)
6 重启模式
常用的运行级别是3和5,要修改运行的级别可以在文件/etc/inittab里面修改,方法见1中修改默认进入界面。
这里如果设置成0开机即会关机,设置成6则会一直重新启动
软链接与硬链接的区别¶
2.描述 linux 下软链接和硬链接的区别
解答:
请描述下软链接和硬链接的区别(面试题)
(1)硬链接使用ln 源文件 硬链接文件格式创建,软链接可以ln -s 源文件 硬链接文件 格式创建
(2)硬链接与源文件的inode节点相同,而软链接则不同
(3)目录无法创建硬链接,但可以创建软链接,而且生产环境中经常用到
(4)删除软链接文件对于源文件及硬链接文件无任何影响
(5)删除文件的硬链接文件,对源文件及软链接文件无任何影响
(6)删除链接文件的源文件,对硬链接文件无影响,会导致其软链接失效(红底白字闪烁状)
(7)同时删除源文件及其硬链接文件,整个文件才会被真正的删除。
(8)很多硬件设备中的快照功能,使用的就类似硬链接的原理
(9)软链接可以跨文件系统,硬链接不可以跨文件系统
企业面试题答题思路:
1.介绍软硬链接的概念
2.如何创建软硬链接
3.对于文件的软硬链接的区别
4.对于目录的软硬链接的区别
Buffer与cached的区别¶
3.如何查看swap分区,内存大小及使用情况?Buffer与cached的区别?
解答:
方法1:
[root@oldboy ~]# free -h ß查看系统内存的使用情况
total used freeshared buffers cached
Mem: 988M 111M 877M 220K 11M 34M
-/+ buffers/cache: 64M 923M
Swap: 1.5G 0B 1.5G
方法2:
[root@oldboy ~]# cat /proc/swaps
Filename Type Size UsedPriority
/dev/sda2 partition 1535996 0 -1
Buffer:写缓冲,
cached:读缓存,
如何查看系统端口与进程¶
解答:
小问1
方法1:通过端口查服务
[root@oldboy ~]# lsof -i :80
方法2:通过使用端口查服务
[root@oldboy ~]# netstat -ltnp|grep "80"
方法3:
[root@oldboy ~]# ss -tunlp|grep 80
小问2:
方法1:
[root@oldboy ~]# netstat -ltnp|grep "sshd"
方法2:
[root@oldboy ~]# ps -ef|grep sshd
方法3:
[root@oldboy ~]# telnet 10.0.0.7 80
方法4:
[root@oldboy ~]# pstree|grep sshd
linux root忘记密码怎么办呢¶
1.使用单用户模式恢复重制密码
2.使用救援模式恢复重制密码
shell相关¶
单引号双引号反引号¶
' ' | 单引号,原样输出内容,所见即所得 |
---|---|
" " | 双引号,会将解析的变量输出 |
|
反引号,会将命令的执行结果输出 |
shell中特殊符号的作用¶
$0: 脚本本身文件名称
$1: 命令行第一个参数,$2为第二个,以此类推
$*: 所有参数列表
$@: 所有参数列表
$#: 参数个数
$$: 脚本运行时的PID
$?: 脚本退出码
shell中如何取某个文本的某行¶
sed命令
shell中如何取某个文本的某列¶
awk命令
监控相关¶
请描述你们公司用zabbix怎么监控服务的¶
结合所在公司进行解答发挥即可
请描述zabbix监控主动模式和被动模式得区别¶
被动模式:server端主动向agent端请求数据(效率低)
主动模式:agent端主动向server端发送数据(效率高)
服务相关¶
请描述Lvs的的4种模式得工作原理¶
- dr:直接路由模式
- tun:隧道模式
- nat:路由转发模式
- fullnat模式
请描述keepalived使用的通信协议¶
答案:Vrrp协议
请描述你们公司得nginx 都做了哪些优化¶
1.1隐藏nginx header里版本号信息
1.2更改源码隐藏软件名称及版本号
1.3更改掉nginx默认用户及用户组(worker进程服务用户优化)
1.4配置nginx worker进程个数
1.5根据cpu核数进行nginx进程优化
1.6nginx事件处理模型优化
1.7调整nginx worker单个进程允许的客户端最大连接数
1.8配置nginx worker进程最大打开文件数
1.9开启高效的文件传输模式
1.10设置连接超时时间
1.11上传文件大小限制(动态应用)
1.12fastcgi调优(配合PHP引擎动态服务)
1.13配置nginx gzip压缩功能(重要)
1.14配置nginx expires缓存功能(重要)
1.15nginx日志相关优化与安全
1.16nginx站点目录及文件URL访问控制(重要:防止恶意解析)
1.17配置nginx图片及目录防盗链
1.18nginx错误页面优雅显示
1.19nginx防爬虫优化
请描述nginx如何开启负载均衡功能¶
答案:通过upstream模块实现负载均衡功能
请描述HAProxy的常见负载均衡算有哪些¶
答案: roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的; static-rr,表示根据权重,建议关注; leastconn,表示最少连接者先处理,建议关注; source,表示根据请求源IP,这个跟Nginx的IP_hash机制类似,我们用其作为解决session问题的一种方法,建议关注; ri,表示根据请求的URI; rl_param,表示根据请求的URl参数’balance url_param’ requires an URL parameter name; hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求; rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。
请描述你们公司得nginx 都做了哪些优化
请描述nginx如何使用负载均衡功能
数据库相关¶
请描述你们公司得数据库都做了哪些优化¶
1、库表的设计优化(三种范式)
2、库表添加合适的索引(普通索引+主键索引+唯一索引+全文索引)
3、分表技术-水平分割与垂直分割
4、读写分离(add/delete/update与select分开)
5、多用存储过程和触发器(模块化编程)
6、优化MqSql配置(配置最大并发数,调整缓存大小,my.ini)
7、SQL优化与慢查询
8、定时清楚垃圾数据,定时进行碎片整理(MyISAM)
https://www.cnblogs.com/huasky/p/10500126.html
请描述mysql主从复制原理¶
请描述数据库逻辑备份和物理备份得区别¶
1.逻辑备份是备份sql语句,在恢复的时候执行sql语句实现数据库数据的重现
2.物理备份就是备份数据文件,比较形象点就是复制数据文件,但是真正备份是就不只是复制那么简单
防火墙相关¶
iptables中具体配置过滤规则一共有几表几链¶
iptables中具体配置过滤规则一共有几表几链、各表链的功能和作用分别是什么
答案:
4表:FILTER、NAT、MANGLE、RAW
5链:INTPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING
1)FILTER表(INPUT+OUTPUT+FORWARD)
FILTER表:主要负责流入主机的数据包过滤,是Linux主机真正的防火墙功能实现地方
a.INPUT链:负责过滤所有目标地址是本机地址的数据包
b.OUTPUT链:处理所有源地址是本机的数据包
c.FORWARD链:负责转发流经主机的数据包,起转发作用,和NAT关系很大,LVS负载均衡中也有涉及到
2)NAT表(OUTPUT+PREROUTING+POSTROUTING)
NAT表:负责网络地址的转换,即来源地址与目的地址或者port的转换
a.PREROUTINGA链:在数据包到达防火墙时进行路由判断之前的规则,作用是是否改变目的地址或者目的端口
b.POSTROUTING链:在数据包离开防火墙时进行路由判断,是否要改变源地址、源端口等
c.OUTPUT链:和主机发出去的数据包有关,改变主机发出去的数据包目的地址
3)Mangle表(主要负责修改数据包中特殊的路由标记,如TTL、TOS、MARK等,企业较少用到)
4)Raw表(有限级最高,设置raw时一般是为了不再让iptables做数据包的链接跟踪处理,提高性能)
批量管理相关¶
请描述ansible批量管理服务器是使用得什么协议进行通信¶
答案:SSH协议
请描述你工作中经常使用哪些常用得ansible模块¶
command模块
shell模块
user模块
group模块
cron模块
copy模块
file模块
ping模块
yum模块
service模块
script模块
lineinfile模块
iptables模块
mysql相关模块
synchronize模块
unarchive
setup模块
请描述ansible中 handlers tags meta vars分别代表¶
Handlers:用于当关注的资源发生变化时采取一定的操作,
Tags: 用作打标签,用于让用户选择运行或跳过playbook中的部分代码,ansible具有幂等性,因此会自动跳过没有变化的部分,即便如此,有些代码为测试其确实没有发生变化的时候依然会比较长,此时确信其没有变化,就可以通过tags跳过这些代码。
meta:元数据
vars:ansible 角色变量的管理
请解读ansible palybook代码¶
hosts: webservers,webservers2
vars:
http_port: 80
max_clients: 200
remote_user: root
tasks:
- name: ensure apache is at the latest version
yum: pkg=httpd state=latest
remote_user: yourname
- name: write the apache config file
template: src=/srv/httpd.j2 dest=/etc/httpd.conf
notify:
- restart apache
- name: ensure apache is running
service: name=httpd state=started
handlers:
- name: restart apache
service: name=httpd state=restarted
请描述saltstack得角色中master和monion分别代表什么¶
master:管理端
monion:被控端
请描述saltstack一共有几种运行模式可以批量管理服务器?分别是?¶
1.本地模式 local
2.远程模式 Master/Minion
3.ssh模式 ssh
openstack相关¶
请描述openstack常用组件与作用¶
Nova – 用于在计算级别管理虚拟机,并在计算或管理程序级别执行其他计算任务。
Neutron – 为虚拟机、计算和控制节点提供网络功能。
Keystone – 为所有云用户和 OpenStack 云服务提供身份认证服务。换句话说,我们可以说 Keystone 是一个提供给云用户和云服务访问权限的方法。
Horizon – 用于提供图形用户界面。使用图形化管理界面可以很轻松地完成各种日常操作任务。
Cinder – 用于提供块存储功能。通常来说 OpenStack 的 Cinder 中集成了 Chef 和 ScaleIO 来共同为计算和控制节点提供块存储服务。
Swift – 用于提供对象存储功能。通常来说,Glance 管理的镜像是存储在对象存储空间的。像 ScaleIO 这样的外部存储也可以提供对象存储,可以很容易的集成 Glance 服务。
Glance – 用于提供镜像服务。使用 Glance 的管理平台来上传和下载云镜像。
Heat – 用于提供编排服务或功能。使用 Heat 管理平台可以轻松地将虚拟机作为堆栈,并且根据需要可以将虚拟机扩展或收缩。
Ceilometer – 用于提供计量与监控功能。
什么服务通常在控制节点上运行¶
答: 以下服务通常在控制节点上运行:
- 认证服务(KeyStone)
- 镜像服务(Glance)
- Nova 服务比如 Nova API、Nova Scheduler 和 Nova DB
- 块存储和对象存储服务
- Ceilometer 服务
- MariaDB / MySQL 和 RabbitMQ 服务
- 网络(Neutron)和网络代理的管理服务
- 编排服务(Heat)
什么服务通常在计算节点上运行¶
答: 以下服务通常在计算节点运行:
- Nova 计算
- 网络服务,比如 OVS
计算节点上虚拟机的默认地址是什么?¶
答: 虚拟机存储在计算节点的 /var/lib/nova/instances
。
Glance 镜像的默认地址是什么?¶
答: 因为 Glance 服务运行在控制节点上,所以 Glance 镜像都被存储在控制节点的 /var/lib/glance/images
文件夹下。
说一下如何使用命令行启动一个虚拟机?¶
答: 我们可以使用如下 OpenStack 命令来启动一个新的虚拟机:
# openstack server create --flavor {flavor-name} --image {Image-Name-Or-Image-ID} --nic net-id={Network-ID} --security-group {Security_Group_ID} –key-name {Keypair-Name} <VM_Name>
如何在 OpenStack 中显示用户的网络命名空间列表?¶
答: 可以使用 ip net ns
命令来列出用户的网络命名空间。
~# ip netns list
qdhcp-a51635b1-d023-419a-93b5-39de47755d2d
haproxy
vrouter
如何在 OpenStack 中执行网络命名空间内的命令?¶
答: 假设我们想在 qdhcp-a51635b1-d023-419a-93b5-39de47755d2d
网络命名空间中执行 ifconfig
命令,我们可以执行如下命令。
命令格式 : ip netns exec {network-space} <command>
:
~# ip netns exec qdhcp-a51635b1-d023-419a-93b5-39de47755d2d "ifconfig"
在 Glance 服务中如何使用命令行上传和下载镜像?¶
答: Glance 服务中云镜像上传可以使用如下 OpenStack 命令:
~# openstack image create --disk-format qcow2 --container-format bare --public --file {Name-Cloud-Image}.qcow2 <Cloud-Image-Name>
下载云镜像则使用如下命令:
~# glance image-download --file <Cloud-Image-Name> --progress <Image-ID>
更多问题可参考¶
https://linux.cn/article-10328-1.html?pr
docker/k8s问题¶
1.docker本地镜像文件放在哪 /var/lib/docker
2.将容器的80端口映射到宿主机的8000端口上 docker run -p 8000:80 -it ubuntu /bin/bash
3.如何控制容器占用系统资源(cpu、内存)的份额 在使用 docker create 命令创建容器或使用 docker run 创建并启动容器的时候,可以使用 -c|--cpu-shares[=0] 参数来调整容器使用 CPU 的权重;使用 -m|--memory[=MEMORY] 参数来调整容器使用内存的大小。
4.查看ops这个命名空间下的所有pod,并显示pod的IP地址 kubectl get pods -n ops -o wide
5.查看test命名空间下的pod名称为test-1的日志,并显示最后30行 kubectl logs test-1 -n test|tail -n 30
6.如何查看test命名空间下的所有endpoints kubectl get ep -n test
7.如何设置节点test-node-10为不可调度以及如何取消不可调度 kubectl cordon test-node-10 #设置test-node-10为不可调度 kubectl uncordon test-node-10 #取消
8.集群如何预防雪崩,简要写出必要的集群优化措施 为每个pod设置资源限制 设置Kubelet资源预留
9.pod亲和性作用是什么?
10.在运维k8s生产环境中都遇到过什么问题?
Django问题¶
1.Django中想验证表单提交是否格式正确需要用到Form中哪个函数 is_valid()函数方法,用于检查表单提交是否正确
2.DRF中模型类必须继承哪个类 django.db.models.model
3.django的Model中的ForeignKey字段中的on_delete参数有什么作用? 删除关联表中的数据时,当前表与其关联的field的操作 django2.0之后,表与表之间关联的时候,必须要写on_delete参数,否则会报异常
4.多对多关联的表,如何插入数据?如何删除数据?如何更新数据?
5.django路由系统中include是干嘛用的?
6.你的Django项目是怎么进行调试的?
python面试题¶
如何删除指定的键的键值对?
pop()
简述一下python的深拷贝和浅拷贝?
浅拷贝只是对另外一个变量的内存地址的拷贝,这两个变量指向同一个内存地址的变量值。 浅拷贝的特点: 共用一个值 这两个变量的内存地址一样 对其中一个变量的值改变,另外一个变量的值也会改变
深拷贝是一个变量对另外一个变量的值拷贝 深拷贝的特点: 两个变量的内存地址不同 两个变量各有自己的值,且互不影响 对其任意一个变量的值的改变不会影响另外一个 如果是不可变类型,则深浅拷贝只拷贝引用,如果是可变类型,浅拷贝只拷贝第一层引用,深拷贝无论多少层引用都拷贝
如何在函数中设置一个全局变量?
在函数中使用global关键字定义变量
简述一下装饰器
装饰器是一个以函数作为参数,并返回一个替换函数的可执行函数,是闭包的一种应用,通常用来给一个函数添加功能
简述实例变量和类变量的区别?
· 实例变量是对于每个实例都独有的数据
· 类变量是该类所有实例共享的属性和方法
简述一下面向对象编程中super的作用?
当子类中的方法与父类中的方法重名时,子类中的方法会覆盖父类中的方法,那么,如果我们想实现同时调用父类和子类中的同名方法,就需要使用到super()这个函数,用法为super().函数名()
简述进程,线程,协程的区别以及应用场景?
区别: 线程是资源分配的单位 线程是操作系统调度的单位 进程切换需要的资源很大,效率很低 线程切换需要的资源一般,效率一般(在不考虑GIL的情况下 协程切换任务资源很小,效率高 多进程,多线程根据cpu核数不一样可能是并行的,但是协程是在一个线程中,所以是并发。)
应用场景 协程:当程序中存在大量不需要cpu的操作时,适用协程 计算密集型,用进程。IO密集型,用线程。
go语言¶
1.在go语言中,new和make的区别?
new 的作用是初始化一个指向类型的指针(*T)
new函数是内建函数,函数定义:func new(Type) *Type
使用new函数来分配空间。传递给new 函数的是一个类型,不是一个值。返回值是 指向这个新分配的零值的指针。
make 的作用是为 slice,map 或 chan 初始化并返回引用(T)。
make函数是内建函数,函数定义:func make(Type, size IntegerType) Type
· 第一个参数是一个类型,第二个参数是长度
· 返回值是一个类型
make(T, args)函数的目的与new(T)不同。它仅仅用于创建 Slice, Map 和 Channel,并且返回类型是 T(不是T*)的一个初始化的(不是零值)的实例。
2.在go语言中,Printf()、Sprintf()、Fprintf()函数的区别用法是什么?
都是把格式好的字符串输出,只是输出的目标不一样:
Printf(),是把格式字符串输出到标准输出(一般是屏幕,可以重定向)。
Printf() 是和标准输出文件(stdout)关联的,Fprintf 则没有这个限制.
Sprintf(),是把格式字符串输出到指定字符串中,所以参数比printf多一个char*。那就是目标字符串地址。
Fprintf(), 是把格式字符串输出到指定文件设备中,所以参数笔printf多一个文件指针FILE*。主要用于文件操作。Fprintf()是格式化输出到一个stream,通常是到文件。
3.go语言中的协程?
协程和线程都可以实现程序的并发执行;
通过channel来进行协程间的通信;
只需要在函数调用前添加go关键字即可实现go的协程,创建并发任务;
关键字go并非执行并发任务,而是创建一个并发任务单元;
\4. 说说go语言中的for循环?
for循环支持continue和break来控制循环,但是它提供了一个更高级的break,可以选择中断哪一个循环
for循环不支持以逗号为间隔的多个赋值语句,必须使用平行赋值的方式来初始化多个变量
5.go语言的同步锁?
(1) 当一个goroutine获得了Mutex后,其他goroutine就只能乖乖的等待,除非该goroutine释放这个Mutex
(2) RWMutex在读锁占用的情况下,会阻止写,但不阻止读
(3) RWMutex在写锁占用情况下,会阻止任何其他goroutine(无论读和写)进来,整个锁相当于由该goroutine独占