Devops(1)


    前几天爱奇艺面了十几分钟,昨天HR又打电话来结果我才知道只是北京的,可我实在不想跑那么远,就算进去了,工做压力我就不说了,主要是一我的实在没法生活,我从实习的那段日子在我父母的帮助下就知道有多不易了,若是是上海爱奇艺就行了。唉,以前是没作好准备放弃去面苏宁云商,咱还能从事openstack,如今是一点可能性都没了。机会都有,可我都心里不强大放弃了,真不知道关了这扇门,还有没有另外一扇窗,不过这样挺好的,我至少不堕落,凭我如今的实力,拿到小公司的offer没有一点问题。但仍是内心空落落的,我如今也不太可能实习了,重修课呀,2门!html

    值得一提是,个人博客搬家了,哦不对,是我把学习笔记放在了博客园上面,这上面的东西我是放给面试官看的,因此说话确定比51CTO当心点。接下来重心都在Python上,我只想说运维太累了,你看招聘网上阿猫阿狗的招聘都称之运维,还让懂开发、会安全。呜呼,个人将来会是什么样??前端



一、sed命令删除换行符?(彻底看不懂啊)node

答:sed ':label;N;s/\n//;t label' 1.txt python

参考文档:http://www.cnblogs.com/lykm02/p/4479098.htmlmysql


二、查看系统启动时每一个服务的耗时时间,以及查看mariadb服务是否开启自启?linux

答:[root@controller ~]# systemd-analyze blamegit

[root@controller ~]# systemctl list-unit-files|grep mariadbweb

mariadb.service                               enabled 面试

mariadb@.service                              disabled算法

[root@controller ~]# ls /lib/systemd/system ##服务启动脚本路径

[root@controller ~]# journalctl -b ##查看系统的启动日志

参考文档:http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html


三、centos7相比centos6作了哪些改进?(其实这个问题真的很差答,很是考验我的的使用经历)

答:(1)systemd取代了init,成为系统的第一个进程,而且init是串行启动,而systemd是并行启动

(2)内核版本的升级,系统安全补丁获得加强。

(3)文件系统由ext4升级到xfs,XFS比EXT4更适合大文件处理,但消耗的CPU资源是EXT4的两倍

(4)防火墙firewalld代替了iptables


四、python读取文件的read,readline和readlines有何区别?

答:(1)read() 每次读取整个文件,它一般将读取所有文件内容放到一个字符串变量中,也就是说 read() 生成文件内容是一个字符串类型

(2)readline()每次只读取文件的一行,一般也是读取到的一行内容放到一个字符串变量中,返回str类型

(3)readlines()每次按行读取整个文件内容,将读取到的内容放到一个列表中,返回list类型



五、如何查看Linux中的哪一个进程具体占用多少内存?

答:事实上,linux没法直接看出哪一个进程所占内存的多少状况,只能经过总内存的百分比来计算出来。

找出CPU使用最多的5个进程:ps aux|sort -k3nr|head -5 或使用top 命令,敲入P

找出内存使用最多的5个进程:ps aux|sort -k4nr|head -5,或使用top命令,敲入M


六、什么叫作单例模式?有几种方法?

答:单例模式:一个类有且仅有一个实例,而且自行实例化向整个系统提供。4种方法:使用__new__方法、共享属性、装饰器版本、import方法


七、对于zabbix如何从3.2升级到3.4有何想法?(这个我还没看完官方文档,确定会有标准作法,我先猜测一下)

答:(1)只须要升级zabbix server或zabbix proxy,至于zabbix-agent无需升级,由于版本通常都是向后兼容的,若是被监控主机过多,升级

agent可能会有点小麻烦(不过如今saltstack搞起来也快)

(2)先停掉zabbix-sever进行升级,若是zabbix-proxy有多台,那么先停掉某一台zabbix proxy,升级完毕后重启proxy服务再停掉第2台zabbix-proxy,这样停机一台升级一台直到全部proxy升级完毕,最后才开始重启zabbix-server服务,保证proxy和server的版本必须一致!

(3)备份数据库(若是以前有主从复制结构,直接停掉从库的IO线程就好),备份/etc/zabbix配置目录,若是源码包安装,mv更名就OK,若是是RPM包安装仍是要进行拷贝备份,虽然只是在原有基础上进行更新,可是为了方便进行版本回滚也最好备份一下。


八、__new__和__init__方法的区别?

答:(1)这两个方法是用来建立object的子类对象,静态方法__new__()用来建立类的实例,而后再调用__init__()来初始化实例。

(2)__new__方法会返回一个建立的实例,而__init__什么都不返回.

(3)只有在__new__返回一个cls的实例时后面的__init__才能被调用.


九、云主机的快照有什么做用?能够对什么进行快照?如何用脚本实现周期性的快照灾难恢复?作快照需不须要关机?

答:snapshot(快照)能够把虚拟机某个时间点的内存、磁盘文件等的状态保存为一个镜像文件。经过这个镜像文件,能够在之后的任什么时候间来恢复虚拟机在当时建立snapshot的状态,这个在使用虚拟机来作测试的时候颇有用。

需注意在虚拟机运行时建立快照不会报错,但会出现一些莫名其妙的问题,像恢复快照失败、快照名为空等,关机的时候也能作快照,这时候压根不存在内存的状态一说。恢复快照一样既能够关机也能够不关机。

参考文档:http://blog.csdn.net/liukuan73/article/details/46457439


十、Centos7的firewalld和iptables有什么关系?(真不知道这些软件防火墙有没有在生产环境中使用,麻烦死了!)

答:(1)firewalld自身并不具有防火墙的功能,而是和iptables同样须要经过内核的netfilter来实现,也就是说firewalld和 iptables同样,他们的做用都是用于维护规则,而真正使用规则干活的是内核的netfilter,只不过firewalld和iptables的结构以及使用方法不同罢了

(2)firewalld在使用上要比iptables人性化不少,即便不明白“五张表五条链”并且对TCP/IP协议也不理解也能够实现大部分功能。

(3)firewalld能够动态修改单条规则,而不须要像iptables那样,在修改了规则后必须得所有刷新才能够生效;

参考文档:http://www.cnblogs.com/excelib/p/5150647.html


十一、如何为下列多主复制galera集群的文本前面添加序列号?

World’s most advanced features

Synchronous replication

Active-active multi-master topology

Read and write to any cluster node

Automatic membership control, failed nodes drop from the cluster

Automatic node joining

True parallel replication, on row level

Direct client connections, native MySQL look & feel

Un-seen benefits

No slave lag

No lost transactions

Both read and write scalability

Smaller client latencies

答:[root@kvm ~]# sed 's/^/#/' file.txt   ##我还觉得是替换呢



十二、如何使用saltstack对多个minion端进行修改/etc/default/gurb的timeout改成0,假设minion端的grub文件可能不全相同?

答:[root@salt-master ~]# salt '*' cmd.run ' sed -i 's/GRUB_TIMEOUT=5/GRUB_TIMEOUT=0/' /etc/default/grub '


1三、如何把saltstack 2015.8.8.2升级到2016.11.1?(master和minion版本的差别可能让彼此认证不经过)

答:# curl -L https://bootstrap.saltstack.com -o install_salt.sh ##值得一提的是,salt版本不一样应该也能够完成工做,通常都是向后兼容的

[root@target ~]#  sh install_salt.sh -i Minion  ##升级软件后,之前的配置文件没有改变,看来这个脚本能够啊


1四、saltstack的特色?

答:Salt的核心功能:

(1)使命令发送到远程系统是并行的而不是串行的

(2)使用安全加密的协议AES

(3)使用最小最快的网络载荷ZeroMQ

(4)提供简单的编程接口

参考官网文档:http://docs.saltstack.cn/topics/index.html#the-30-second-summary


十二、如何让salt-minion在1分钟以后重启?

答:service salt-minion restart | at now + 1 minute ##安装at包,启动atd服务,使用at在指定时间执行一次的计划任务


1四、KVM部署windows和linux有什么区别?

答:windows须要额外的virtio驱动程序


1五、Saltstack的SLS文件的require和watch有何区别?

答:(1)require语句用来安装某个软件包的时候,保证服务之间彼此之间的依赖关系能够顺利解决,才进行下一步操做

(2)watch语句用来观察服务配置的文件是否发生改变,若是发生改变,就重启或重置该服务软件


1六、如何用tcpdump判断Linux的网络故障?

答:(1)流量过大,能够用tcpdump保存文件,而后用wireshark进行分析,统计某一段时间包的数量是否是陡增

(2)丢包现象,若是丢包了,那么按理来讲,TCP就会重传数据段,一重传的话,序列号就会降低,能够根据序列号是否降低判断有无丢包严重的现象

(3)出现广播地址,有可能遭受***了。


1七、__init__.py有何做用?

答:一个包若是须要被其余模块导入,那么在这个包目录下必须有一个__init__.py的文件,它表明包的属性和方法,若是该包还有子目录,一样须要定义一个能够为空的__int__.py文件。总而言之,__init__.py 文件的做用是将文件夹变为一个Python模块。

import 一个目录时,该目录下的__init__.py 中的内容可用,该目录下的其余文件(.py)模块需额外import;


1八、代码错误出如今哪?super()函数有什么做用?

class A:

    def __init__(self):

        self.namea="aaa"

 

    def funca(self):

        print "function a : %s"%self.namea

 

class B(A):

    def __init__(self):

        self.nameb="bbb"

 

    def funcb(self):

        print "function b : %s"%self.nameb

 

b=B()

print b.nameb

b.funcb()

b.funca()

答:子类重写了父类的构造函数后,可是没有显示调用父类的构造函数,致使父类的属性namea并无被子类继承,全部子类的实例b能够访问父类方法funca()可是没法访问父类的属性namea。解决办法:在子类方法中使用父类调用其构造函数,即A.__init__(self)。或者使用super函数调用超类(由于类A须要继承object类,因此超类应该理解为object类)的方法,super(B,self).__init__()。

综上,super()函数用来解决子类继承的父类又继承了同一个公共父类,这时就有可能会出现父类构造方法被调用屡次的状况,super保证子类的实例能够顺利继承每个父类的属性和方法。

参考文档:http://www.crazyant.net/1303.html


1九、有一个字符串str1 = 'I have a pet cat',如何让str1变为'I have a lot of pet cat'

答:字符串类型的数据没法直接修改,只能经过拼接形式来完成,能够利用切片完成一些操做。

>> len(str1)

16

>> str1[:9]+'lot of '+str[9:]

'I have a lot of pet cat'


20、如何识别Linux系统中指定文件(好比/etc/fstab)的关联包?

答:[root@client-2 ~]# rpm -qf /etc/fstab 

setup-2.8.71-6.el7.noarch


2一、Linux系统中的/proc文件系统有什么用?(这个问题我总结过,感受仍是会问的)

答:/proc文件系统是一个基于内存的文件系统,其维护着关于当前正在运行的内核状态信息,其中包括CPU、内存、分区划分、I/O地址、直接内存访问通道和正在运行的进程。这个文件系统所表明的并非各类实际存储信息的文件,它们指向的是内存里的信息。/proc文件系统是由系统自动维护的


2二、tee过滤器有什么做用?

答;把前一个命令的执行结果保存到另外一个文件中。


2三、XFS文件系统的特色?(真特么记不住,比ext4还复杂)

答:XFS文件系统是SGI开发的高级日志文件系统,XFS极具伸缩性。而且在CentOS7上已是默认的文件系统。主要特性包含一下几点:

(1)数据完整性:采用XFS文件系统时,若是发生宕机现象,因为文件系统开启日志功能,磁盘上的文件会记录到日志,而且能够短期内恢复磁盘数据。

(2)传输性:XFS文件系统采用优化算法,日志记录对于IO影响小,而并不映像查询与分配的性能。XFS文件系统可以连续提供快速的反映时间。

(3)可扩展性:XFS是一个64bit的文件系统,能够支持上百万T字节的存储空间。对特大文件及小尺寸文件的支持很是好,支持大数量目录。XFS文件系统使用表结构(B+树)保证文件系统能够快速搜索及快速分配空间。XFS文件系统可以持续提供高速操做,文件系统性能不受目录及文件数量限制。

(4)传输带宽:XFS文件系统能以接近裸设备的IO的性能存储数据,在单个文件系统测试中,吞吐量能够达到7GB每妙,对单个文件的读写操做达到4GB每秒。

参考文档:http://www.tuicool.com/articles/YZN3qi

 

2四、Cobbler的工做原理?(跟Kickstart差很少)

答:(1)客户机的PXE(预启动执行环境)网卡广播DHCP discover包请求DHCP server分发IP地址

(2)DHCP server而后会进行应答,分发出IP地址告知tftp服务器所在地址,让客户端去找tftp服务器

(3)那么客户端就去问tftp服务器那个引导文件在哪,tftp服务器从本身的相应目录下去找到vmlinuz压缩内核以及initrd.p_w_picpath内存文件系统返回给客户端。

(4)那么接下来,客户端就会在内存中加载内核引导系统启动,接下来客户端又去tftfp服务器目录下相应的pxelinux.cfg目录下的default文件,这个文件告诉了kickstart文件在web服务器的哪一个地方。

(5)接着客户端去访问web服务器的ks.cfg文件,这个ks.cfg文件又告诉了你应该怎么安装这个系统,好比键盘、分区、语言、root密码,以及原生操做系统镜像,你该×××?

(6)接着客户端就要下载镜像,下载镜像的方式能够是http、nfs、ftp。由于已经Cobbler已经部署好了http服务器,通常都是客户端从http服务器下载镜像的,接着客户端就去安装软件包了,而后重启便可进入用户登陆界面。


2五、Nginx中root与alias的用法及区别?

答:(1)alias是当访问a目录下的文件c的时候,其实跳转到b目录找c文件并返回;而root是当访问a目录下的c文件的时候,实际上是找b目录下的a目录下的c文件,也就是root目录是访问文件所在目录的上一级目录。

(2)在Location /的时候使用root根目录,在location 定位其余目录的时候,使用alias跳转其余目录,alias目录后面必定要加/。

参考文档:http://blog.csdn.net/kinginblue/article/details/50748683


2六、lvs工做模式的区别?(我尼玛这个知识点我竟然卡壳了,不复习就会忘掉的)

答:

nat类型的特性:

一、RS应用使用私有地址;RS的网关必须指向DIP;

二、请求和响应都要通过Director;高负载场景中,Director易成为性能瓶颈;

三、支持端口映射;

四、RS可使用任意OS;

dr类型的特性:

一、保证前端路由将目标地址为VIP的报文通通发往Director,而不能是RS;

解决方案:

(1) 静态地址绑定:在前端路由器上操做

问题:未必有路由操做权限

(2) aprtables

(3) 修改RS上内核参数,将RS上的VIP配置在lo接口的别名上,并限制其不能响应对VIP地址解析请求;

二、RS可使用私有地址;但也可使用公网地址,此时可经过互联网经过RIP对其直接访问;

三、RS跟Director必须在同一物理网络中;

四、请求报文经由Director,但响应报文必须不能通过Director;

五、不支持端口映射;

六、RS能够是大多数常见的OS;

七、RS的网关毫不容许指向DIP;

tun类型的特性:

一、RIP、VIP、DIP所有是公网地址;

二、RS的网关不会也不可能指向DIP;

三、请求报文经由Director,但响应报文必须不能通过Director;

四、不支持端口映射;

五、RS的OS必须支持隧道功能;

                                                                                                                                                                                                                                                                                             

2七、sed命令删除以空格或则TAB键开头的字段,但不是删除整个行。

答:[root@kvm ~]# sed 's/^[[:space:]]*//g' file.txt   ##不要这个*还不会成功了。


2八、如何查找僵尸进程并杀死?

答:[root@kvm ~]# ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]'  ##杀死父进程的PI便可

-A 参数列出全部进程

-o 自定义输出字段 咱们设定显示字段为 stat(状态), ppid(进程父id), pid(进程id),cmd(命令)这四个参数

 ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]' | awk '{print $2}' | xargs kill -9

 参考文档:blog.csdn.net/zhuying_linux/article/details/7336662


 2八、如何往mysql数据库的表table1中批量插入5条甚至500条数据?

答:导入MySQLdb模块,用python编程实现。

MariaDB [(none)]> create database d1 character set utf8;  ##这几部在mysql中作了算了,python里面太麻烦

MariaDB [(none)]> use d1;

MariaDB [d1]> create table t1(Level char(7),Salary varchar(10),Job char(10)) character set utf8;

-----------------------------------

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import MySQLdb  ##事先yum安装


try:

conn = MySQLdb.connect(host='localhost',user='root',passwd='',db='d1',port=3306)

cur = conn.cursor()

except MySQL.Error,e:

print 'Mysql Error Msg: ',e

##假设已经知道表结构,级别、工资、职位

value_list = []

for num in range(1,6):

value_list.append( ('level_%s' %num, str(10 * num)+'K', 'linux 运维') ) ##在列表中嵌套列表

cur.executemany('insert into t1 values(%s,%s,%s)',value_list)  ##执行多条语句用executemany,不然用execute

conn.commit()

cur.close()

----------------------------------------

MariaDB [d1]> select * from t1;

+---------+--------+----------------+

| Level   | Salary | Job            |

+---------+--------+----------------+

| level_1 | 10K    | linux è     |

| level_2 | 20K    | linux è     |

| level_3 | 30K    | linux è     |

| level_4 | 40K    | linux è     |

| level_5 | 50K    | linux è     |

+---------+--------+----------------+

5 rows in set (0.00 sec)

Note:虽然设置了UTF8编码,但依然没法解决中文字符的问题!起初我觉得是数据库的问题,因而乎再插入数据,显示没错

MariaDB [d1]> insert into t1 values('level_0','1K','网管');

| level_5 | 50K    | linux è     |

| level_0 | 1K     | 网管           |

+---------+--------+----------------+

看来是python的问题,暂时无论了。


2九、介绍下装饰器?

答:(1)在函数里面定义另外一个函数,以增添更多的功能(2)代码重用

装饰器是一个很著名的设计模式,常常被用于有切面需求的场景,较为经典的有插入日志、性能测试、事务处理等。装饰器是解决这类问题的绝佳设计,有了装饰器,咱们就能够抽离出大量函数中与函数功能自己无关的雷同代码并继续重用。归纳的讲,装饰器的做用就是为已经存在的对象添加额外的功能。

要了解装饰器,你必须了解Python中的函数都是对象,如下举例颇有意思,之前竟然不知道能够这么用。

>>> def test1():

print ('hello')

>>> test2 = test1

>>> test2()

hello

参考文档:https://taizilongxu.gitbooks.io/stackoverflow-about-python/content/3/README.html


30、Python新式类与经典类(旧式类)的区别?

答:(1)新式类都从object继承,经典类不须要。

(2)新式类的MRO(method resolution order 基类搜索顺序)算法采用C3算法广度优先搜索,而旧式类的MRO算法是采用深度优先搜索

(3)新式类在多继承时对相同父类只执行一次构造函数,经典类重复执行屡次。

参考文档:

http://blog.csdn.net/zimou5581/article/details/53053775

相关文章
相关标签/搜索