前幾天愛奇藝面了十幾分鍾,昨天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)新式類在多繼承時對相同父類只執行一次構造函數,經典類重複執行屢次。
參考文檔: