跳转至

00-运维面试问题汇总

系统相关

DNS系统架构与解析原理

参考答案:

DNS解析原理

TCP/IP的3次握手和四次断开原理

参考答案:

TCP三次握手

RAID原理,特点,性能相关问题

请描述 raid 0 1 5 10原理、特点、性能区别?

raid0

image-20211104095259905

1容量损失一半

2.磁盘的冗余为50% 磁盘总容量的一半

3.写入数据的时候很略慢,因为两个磁盘要相互同步

4.读取速度可能是单盘的读取速度

适用场景:数据十分重要,但是访问量不是很大的情况

raid1

image-20211104095345648

raid5

image-20211104095414529

1.RAID-5的冗余为1块盘

2.做RAID-5最少需要3盘以上的磁盘

3.通过奇偶效验的方式来对数据进行保存,保证数据的安全性。

4.读取写入的速度相对于RAID1块很多

5.RAID-5的技术应用的范围很广泛

应用场景:数据量很重要,但是也需要读取写入要求很高的情况下。

raid10

image-20211104095442476

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开机启动流程

image-20211104095604969

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主从复制原理

image-20211104103056407

请描述数据库逻辑备份和物理备份得区别

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独占