前幾天愛奇藝面了十幾分鐘,昨天hr又打電話來結果我才知道隻是北京的,可我實在不想跑那麼遠,就算進去了,工作壓力我就不說了,主要是一個人實在無法生活,我從實習的那段日子在我父母的幫助下就知道有多不易了,如果是上海愛奇藝就好了。唉,之前是沒做好準備放棄去面蘇甯雲商,咱還能從事openstack,現在是一點可能性都沒了。機會都有,可我都内心不強大放棄了,真不知道關了這扇門,還有沒有另一扇窗,不過這樣挺好的,我至少不堕落,憑我現在的實力,拿到小公司的offer沒有一點問題。但還是心裡空落落的,我現在也不太可能實習了,重修課呀,2門!
值得一提是,我的部落格搬家了,哦不對,是我把學習筆記放在了部落格園上面,這上面的東西我是放給面試官看的,是以說話肯定比51cto小心點。接下來重心都在python上,我隻想說運維太累了,你看招聘網上阿貓阿狗的招聘都稱之運維,還讓懂開發、會安全。嗚呼,我的未來會是什麼樣??
1、sed指令删除換行符?(完全看不懂啊)
答:sed ':label;n;s/\n//;t label' 1.txt
參考文檔:http://www.cnblogs.com/lykm02/p/4479098.html
2、檢視系統啟動時每個服務的耗時時間,以及檢視mariadb服務是否開啟自啟?
答:[root@controller ~]# systemd-analyze blame
[root@controller ~]# systemctl list-unit-files|grep mariadb
mariadb.service enabled
[email protected] disabled
[root@controller ~]# ls /lib/systemd/system ##服務啟動腳本路徑
[root@controller ~]# journalctl -b ##檢視系統的啟動日志
參考文檔:http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html
3、centos7相比centos6做了哪些改進?(其實這個問題真的不好答,非常考驗個人的使用經曆)
答:(1)systemd取代了init,成為系統的第一個程序,并且init是串行啟動,而systemd是并行啟動
(2)核心版本的更新,系統安全更新檔得到增強。
(3)檔案系統由ext4更新到xfs,xfs比ext4更适合大檔案處理,但消耗的cpu資源是ext4的兩倍
(4)防火牆firewalld代替了iptables
4、python讀取檔案的read,readline和readlines有何差別?
答:(1)read() 每次讀取整個檔案,它通常将讀取全部檔案内容放到一個字元串變量中,也就是說 read() 生成檔案内容是一個字元串類型
(2)readline()每次隻讀取檔案的一行,通常也是讀取到的一行内容放到一個字元串變量中,傳回str類型
(3)readlines()每次按行讀取整個檔案内容,将讀取到的内容放到一個清單中,傳回list類型
5、如何檢視linux中的哪個程序具體占用多少記憶體?
答:事實上,linux無法直接看出哪個程序所占記憶體的多少情況,隻能通過總記憶體的百分比來計算出來。
找出cpu使用最多的5個程序:ps aux|sort -k3nr|head -5 或使用top 指令,敲入p
找出記憶體使用最多的5個程序:ps aux|sort -k4nr|head -5,或使用top指令,敲入m
6、什麼叫做單例模式?有幾種方法?
答:單例模式:一個類有且僅有一個執行個體,并且自行執行個體化向整個系統提供。4種方法:使用__new__方法、共享屬性、裝飾器版本、import方法
7、對于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包安裝還是要進行拷貝備份,雖然隻是在原有基礎上進行更新,但是為了友善進行版本復原也最好備份一下。
8、__new__和__init__方法的差別?
答:(1)這兩個方法是用來建立object的子類對象,靜态方法__new__()用來建立類的執行個體,然後再調用__init__()來初始化執行個體。
(2)__new__方法會傳回一個建立的執行個體,而__init__什麼都不傳回.
(3)隻有在__new__傳回一個cls的執行個體時後面的__init__才能被調用.
9、雲主機的快照有什麼作用?可以對什麼進行快照?如何用腳本實作周期性的快照災難恢複?做快照需不需要關機?
答:snapshot(快照)可以把虛拟機某個時間點的記憶體、磁盤檔案等的狀态儲存為一個鏡像檔案。通過這個鏡像檔案,可以在以後的任何時間來恢複虛拟機在當時建立snapshot的狀态,這個在使用虛拟機來做測試的時候很有用。
需注意在虛拟機運作時建立快照不會報錯,但會出現一些莫名其妙的問題,像恢複快照失敗、快照名為空等,關機的時候也能做快照,這時候壓根不存在記憶體的狀态一說。恢複快照同樣既可以關機也可以不關機。
參考文檔:http://blog.csdn.net/liukuan73/article/details/46457439
10、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
11、如何為下列多主複制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 ##我還以為是替換呢
12、如何使用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 '
13、如何把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 ##更新軟體後,以前的配置檔案沒有改變,看來這個腳本可以啊
14、saltstack的特點?
答:salt的核心功能:
(1)使指令發送到遠端系統是并行的而不是串行的
(2)使用安全加密的協定aes
(3)使用最小最快的網絡載荷zeromq
(4)提供簡單的程式設計接口
參考官網文檔:http://docs.saltstack.cn/topics/index.html#the-30-second-summary
12、如何讓salt-minion在1分鐘之後重新開機?
答:service salt-minion restart | at now + 1 minute ##安裝at包,啟動atd服務,使用at在指定時間執行一次的計劃任務
14、kvm部署windows和linux有什麼差別?
答:windows需要額外的virtio驅動程式
15、saltstack的sls檔案的require和watch有何差別?
答:(1)require語句用來安裝某個軟體包的時候,保證服務之間彼此之間的依賴關系可以順利解決,才進行下一步操作
(2)watch語句用來觀察服務配置的檔案是否發生改變,如果發生改變,就重新開機或重置該服務軟體
16、如何用tcpdump判斷linux的網絡故障?
答:(1)流量過大,可以用tcpdump儲存檔案,然後用wireshark進行分析,統計某一段時間包的數量是不是陡增
(2)丢包現象,如果丢包了,那麼按理來說,tcp就會重傳資料段,一重傳的話,序列号就會下降,可以根據序列号是否下降判斷有無丢包嚴重的現象
(3)出現廣播位址,有可能遭受攻擊了。
17、__init__.py有何作用?
答:一個包如果需要被其他子產品導入,那麼在這個包目錄下必須有一個__init__.py的檔案,它代表包的屬性和方法,如果該包還有子目錄,同樣需要定義一個可以為空的__int__.py檔案。總而言之,__init__.py 檔案的作用是将檔案夾變為一個python子產品。
import 一個目錄時,該目錄下的__init__.py 中的内容可用,該目錄下的其他檔案(.py)子產品需額外import;
18、代碼錯誤出現在哪?super()函數有什麼作用?
class a:
def __init__(self):
self.namea="aaa"
def funca(self):
print "function a : %s"%self.namea
class b(a):
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
19、有一個字元串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
21、linux系統中的/proc檔案系統有什麼用?(這個問題我總結過,感覺還是會問的)
答:/proc檔案系統是一個基于記憶體的檔案系統,其維護着關于目前正在運作的核心狀态資訊,其中包括cpu、記憶體、分區劃分、i/o位址、直接記憶體通路通道和正在運作的程序。這個檔案系統所代表的并不是各種實際存儲資訊的檔案,它們指向的是記憶體裡的資訊。/proc檔案系統是由系統自動維護的
22、tee過濾器有什麼作用?
答;把前一個指令的執行結果儲存到另一個檔案中。
23、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
24、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伺服器下載下傳鏡像的,接着用戶端就去安裝軟體包了,然後重新開機即可進入使用者登入界面。
25、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
26、lvs工作模式的差別?(我尼瑪這個知識點我居然卡殼了,不複習就會忘掉的)
答:
nat類型的特性:
1、rs應用使用私有位址;rs的網關必須指向dip;
2、請求和響應都要經過director;高負載場景中,director易成為性能瓶頸;
3、支援端口映射;
4、rs可以使用任意os;
dr類型的特性:
1、保證前端路由将目标位址為vip的封包統統發往director,而不能是rs;
解決方案:
(1) 靜态位址綁定:在前端路由器上操作
問題:未必有路由操作權限
(2) aprtables
(3) 修改rs上核心參數,将rs上的vip配置在lo接口的别名上,并限制其不能響應對vip位址解析請求;
2、rs可以使用私有位址;但也可以使用公網位址,此時可通過網際網路通過rip對其直接通路;
3、rs跟director必須在同一實體網絡中;
4、請求封包經由director,但響應封包必須不能經過director;
5、不支援端口映射;
6、rs可以是大多數常見的os;
7、rs的網關絕不允許指向dip;
tun類型的特性:
1、rip、vip、dip全部是公網位址;
2、rs的網關不會也不可能指向dip;
3、請求封包經由director,但響應封包必須不能經過director;
4、不支援端口映射;
5、rs的os必須支援隧道功能;
27、sed指令删除以空格或則tab鍵開頭的字段,但不是删除整個行。
答:[root@kvm ~]# sed 's/^[[:space:]]*//g' file.txt ##不要這個*還不會成功了。
28、如何查找僵屍程序并殺死?
答:[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
28、如何往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_0 | 1k | 網管 |
看來是python的問題,暫時不管了。
29、介紹下裝飾器?
答:(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