2018年企业运维开发经典面试题
【崗位職責(zé)】
負(fù)責(zé)DevOps業(yè)務(wù)線項(xiàng)目的實(shí)施交付工作
負(fù)責(zé)idc機(jī)房、私有云、公有云的私有化部署工作
負(fù)責(zé)公司產(chǎn)品的測試、生產(chǎn)環(huán)境搭建、維護(hù)
完善各環(huán)境中服務(wù)穩(wěn)定性、監(jiān)控、日志、部署、安全等需求
?
【任職要求】
計(jì)算機(jī)相關(guān)專業(yè)本科畢業(yè),2年以上的工作經(jīng)驗(yàn)
深入理解Linux操作系統(tǒng)、體系結(jié)構(gòu)
優(yōu)秀的腳本語言的開發(fā)能力(bash,python)
熟悉常用的持續(xù)集成工具(例如Jenkins等)
熟悉Linux操作系統(tǒng),熟悉常用的CentOS/Ubuntu/RedHat,熟悉網(wǎng)絡(luò)知識(shí)
熟悉Linux下常用的應(yīng)用集群、高可用和負(fù)載均衡技術(shù)
熟練使用常見開源監(jiān)控工具者優(yōu)先,如zabbix、Nagios、elk等
熟練使用常見關(guān)系型數(shù)據(jù)庫Mysql、Postgresql,或Nosql數(shù)據(jù)庫
熟悉Hbase 相關(guān)原理和最佳實(shí)踐
熟悉Redis 相關(guān)原理及高可用的最佳實(shí)踐
熟練使用阿里云、aws、騰訊云相關(guān)產(chǎn)品
熟練掌握docker相關(guān)知識(shí)
掌握git相關(guān)原理,github,gitlab
具備扎實(shí)的系統(tǒng)集成和運(yùn)維技術(shù)能力
認(rèn)同DevOps文化,認(rèn)同“Automate Everything You Can”的原則,在開源社群活躍并有積極貢獻(xiàn)者優(yōu)先。
有技術(shù)熱情和探索精神,有較強(qiáng)的快速學(xué)習(xí)能力和自驅(qū)能力,有良好的全局意識(shí)和系統(tǒng)風(fēng)險(xiǎn)識(shí)別能力
具備良好的英文閱讀能力和快速學(xué)習(xí)能力
可以接受臨時(shí)的出差工作
積極主動(dòng)、責(zé)任心強(qiáng)、現(xiàn)場協(xié)調(diào)能力強(qiáng)、富有團(tuán)結(jié)精神;有人際溝通能力和團(tuán)隊(duì)合作能力;性格開朗外向,做事認(rèn)真細(xì)致,有責(zé)任感和風(fēng)險(xiǎn)意識(shí);;
?
【加分項(xiàng)】
有微服務(wù)相關(guān)使用經(jīng)驗(yàn)
有kafka、elk相關(guān)使用經(jīng)驗(yàn)
有springcloud、nodejs 微服務(wù)部署相關(guān)經(jīng)驗(yàn)
有Docker/k8s/Mesos/Swarm生產(chǎn)環(huán)境的使用經(jīng)驗(yàn)
阿里云/aws 命令行工具的開發(fā)使用經(jīng)驗(yàn)
有海量設(shè)備監(jiān)控系統(tǒng)/自動(dòng)化平臺(tái)/服務(wù)管理/自動(dòng)化部署/日志收集等系統(tǒng)開發(fā)設(shè)計(jì)經(jīng)驗(yàn)
面試題如下:
1、描述Hbase中scan和get的功能以及實(shí)現(xiàn)的異同
HBase的查詢實(shí)現(xiàn)只提供兩種方式: 1、按指定RowKey獲取唯一一條記錄,get方法(org.apache.hadoop.hbase.client.Get) 2、按指定的條件獲取一批記錄,scan方法(org.apache.hadoop.hbase.client.Scan) 實(shí)現(xiàn)條件查詢功能使用的就是scan方式
2、redis的并發(fā)競爭問題如何解決
方案一:可以使用獨(dú)占鎖的方式,類似操作系統(tǒng)的mutex機(jī)制。(網(wǎng)上有例子,http://blog.csdn.net/black_ox/article/details/48972085 不過實(shí)現(xiàn)相對(duì)復(fù)雜,成本較高)
方案二:使用樂觀鎖的方式進(jìn)行解決(成本較低,非阻塞,性能較高)
3、為什么redis需要把所有數(shù)據(jù)放到內(nèi)存中
redis為了達(dá)到最快的讀寫速度將數(shù)據(jù)都讀到內(nèi)存中,并通過異步的方式將數(shù)據(jù)寫入磁盤。所以redis具有快速和持久化的特征。如果不將數(shù)據(jù)放在內(nèi)存中,磁盤I/O速度會(huì)嚴(yán)重影響redis的性能。如果使用了最大使用的內(nèi)存,則數(shù)據(jù)已有記錄數(shù)達(dá)到內(nèi)存限值后不能繼續(xù)插入新值。
4、redis支持的數(shù)據(jù)類型
Redis支持五種數(shù)據(jù)類型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
5、處理中文時(shí)出現(xiàn)錯(cuò)誤‘a(chǎn)scil’ codec can't decode byte 0xe9 in position 0:ordinal not in range(128) 解決辦法“UnicodeDecodeError”:'ascli' codec decode byte 0xe9 in posttion 0:ordinal not in range(128)
解決辦法,在該python文件的前面加上如下幾句,問題得到解決。
import sys
default_encoding = 'utf-8'
if sys.getdefaultencoding() != default_encoding:
reload(sys)
sys.setdefaultencoding(default_encoding)
6、python里面match()和search()的區(qū)別
match()函數(shù)只檢測RE是不是在string的開始位置匹配,search()會(huì)掃描整個(gè)string查找匹配;
也就是說match()只有在0位置匹配成功的話才有返回,如果不是開始位置匹配成功的話,match()就返回none。
例如:
print(re.match('super', 'superstition').span()) 會(huì)返回(0, 5)
而print(re.match('super', 'insuperable')) 則返回None
search()會(huì)掃描整個(gè)字符串并返回第一個(gè)成功的匹配:
例如:print(re.search('super', 'superstition').span())返回(0, 5)
print(re.search('super', 'insuperable').span())返回(2, 7)
其中span函數(shù)定義如下,返回位置信息:
span([group]):
返回(start(group), end(group))。
7、python里面如何實(shí)現(xiàn)tuple和list的轉(zhuǎn)換
Python中,tuple和list均為內(nèi)置類型,
以list作為參數(shù)將tuple類初始化,將返回tuple類型
tuple([1,2,3]) #list轉(zhuǎn)換為tuple
以tuple作為參數(shù)將list類初始化,將返回list類型
list((1,2,3)) #tuple轉(zhuǎn)換為list
8、請寫出一段python代碼實(shí)現(xiàn)刪除一個(gè)list里面的重復(fù)元素
我寫的代碼:
list1 = [5,1,3,1,6,2,3]
list2 = []
for i in list1:
if i not in list2:
list2.append(i)
else:
continue
list1=list2
網(wǎng)上給出的答案:
for i in list1:
if i not in list2:
list2.append(i)
else:
continue
9、如何批量刪除或者停止運(yùn)行的容器
docker rm -f $(docker ps -a)
10、docker本地鏡像文件放在哪
/var/lib/docker
11、構(gòu)建docker鏡像應(yīng)該遵循哪些規(guī)則
整體原則上,盡量保持鏡像功能的明確和內(nèi)容的精簡,要點(diǎn)包括:
盡量選取滿足需求但較小的基礎(chǔ)系統(tǒng)鏡像,例如docker.io/centos7
清理編譯生成文件、安裝包的緩存等臨時(shí)文件
安裝各個(gè)軟件是要指定準(zhǔn)確的版本號(hào),并避免引入不需要的依賴
應(yīng)用盡量使用系統(tǒng)的庫和依賴
使用dockerfile創(chuàng)建鏡像時(shí)要添加.dockerignore文件或使用干凈的工作目錄
12、容器退出后,通過docker ps 命令查不到,數(shù)據(jù)會(huì)丟失嗎
不會(huì)
13、docker查看日志
docker logs -f 容器id
14、如何控制容器占用系統(tǒng)資源(cpu、內(nèi)存)的份額
:在使用 docker create 命令創(chuàng)建容器或使用 docker run 創(chuàng)建并啟動(dòng)容器的時(shí)候,可以使用 -c|--cpu-shares[=0] 參數(shù)來調(diào)整容器使用 CPU 的權(quán)重;使用 -m|--memory[=MEMORY] 參數(shù)來調(diào)整容器使用內(nèi)存的大小。
15、如何根據(jù)容器的名字列出容器狀態(tài)
docker status 容器id
16、docker與LXC有何不同
lxc 是 Linux 內(nèi)核容器虛擬化的一項(xiàng)技術(shù),可以實(shí)現(xiàn)資源的隔離和控制,也就是對(duì) Cgroup 和 Namespace 兩個(gè)屬性的控制。對(duì)于 docker 而言,它發(fā)展到現(xiàn)在不僅僅是容器的代名詞了,不過它的基礎(chǔ)技術(shù)是需要依賴內(nèi)核的 Cgroup 和 Namespace 特性。docker 出現(xiàn)之初,便是采用了 lxc 技術(shù)作為 docker 底層,對(duì)容器虛擬化的控制。后來隨著 docker 的發(fā)展,它自己封裝了 libcontainer (golang 的庫)來實(shí)現(xiàn) Cgroup 和 Namespace 控制,從而消除了對(duì) lxc 的依賴。總結(jié)一下,lxc 是早期版本 docker 的一個(gè)基礎(chǔ)組件,docker 主要用到了它對(duì) Cgroup 和 Namespace 兩個(gè)內(nèi)核特性的控制。
17、docker與Vagrant有何不同
Vagrant適合用來管理虛擬機(jī),而docker適合用來管理應(yīng)用環(huán)境。
18、開發(fā)環(huán)境中docker與vagrant如何選擇
Docker是應(yīng)用執(zhí)行環(huán)境,不是虛擬機(jī),對(duì)于宿主來說只是個(gè)隔離的進(jìn)程;而Vagrant是虛擬機(jī)輔助軟件,使用Vagrant既使用虛擬機(jī),因此所運(yùn)行的是一個(gè)完整操作系統(tǒng)。這是最本質(zhì)的區(qū)別。
Docker運(yùn)行需要依托Linux內(nèi)核,因此對(duì)于Windows, OSX系統(tǒng)而言,需要有一個(gè)Linux虛擬機(jī)運(yùn)行起來,才可以使用Docker。因此在這種環(huán)境下,從單一虛擬機(jī)角度來說,Docker和Vagrant沒有占用資源的差別。對(duì)于 Linux工作環(huán)境來說,那就沒有這個(gè)問題,使用Docker要比Vagrant輕量級(jí)很多。
而在OSX, Windows下使用Docker和Vagrant開發(fā),很重要的一個(gè)問題在于共享文件目錄上。之前大家在這兩個(gè)系統(tǒng)上安裝的Docker環(huán)境都是通過Docker Toolbox ( https://docs.docker.com/toolbox/overview/ )來安裝配置的,它使用的是Virtualbox,對(duì)于共享主機(jī)文件目錄到Docker環(huán)境上有一些問題,大多數(shù)情況能用,但是部分情況會(huì)出故障。所以相對(duì)于 Docker Toolbox的環(huán)境而言,如果需要一些文件目錄監(jiān)控等高級(jí)功能,vagrant更適合開發(fā)。
但是,這個(gè)問題現(xiàn)在已經(jīng)解決,Docker剛剛發(fā)布了Docker for Mac/Windows (beta) (https://docs.docker.com/docker-for-mac/),這將不在使用Virtualbox,而是使用 xhype (OSX), Hyper-V (Windows 10) 來運(yùn)行一個(gè)更為精簡的Linux (Alpine)。由于使用了操作系統(tǒng)原生虛擬框架,因此共享目錄上的種種問題得到了解決,此外 Alpine 的使用,讓Linux虛擬機(jī)加載更為迅速。所以在這種情況下,使用 Docker 要比 Vagrant 有更多的優(yōu)勢。
所以,從未來角度看,Docker是大勢所趨。
19、salt minion配置文件的默認(rèn)路徑
/etc/salt/minion
20、如何手動(dòng)刷新pillar
在master端定義,指定給對(duì)應(yīng)的minion。可以使用saltuitl.refresh_pillar刷新。
21、介紹下salt的反射系統(tǒng)
略
22、寫一個(gè)腳本,判斷192.168.1.0/24網(wǎng)絡(luò)里,當(dāng)前在線ip有哪些
#!/bin/bash
for ip in seq 1 255
do
{
ping -c 1 192.168.1.$ip > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo 192.168.1.$ip UP
else
echo 192.168.1.$ip DOWN
fi
}&
done
wait
23、描述linux運(yùn)行級(jí)別0-6的含義
0:關(guān)機(jī)
1:單用戶模式
2:無網(wǎng)絡(luò)支持的多用戶模式
3:有網(wǎng)絡(luò)支持的多用戶模式(文本模式,工作中最常使用的模式)
4:保留,未使用
5:有網(wǎng)絡(luò)支持有X-Window支持的多用戶模式
6:重新引導(dǎo)系統(tǒng),即重啟
24、linux開機(jī)過程
25、修改內(nèi)核如何生效
source /etc/profile
26、Django中想驗(yàn)證表單提交是否格式正確需要用到Form中哪個(gè)函數(shù)
is_valid()函數(shù)方法,用于檢查表單提交是否正確。
27、Django中如何讀取和保存session,整個(gè)session的運(yùn)行機(jī)制是什么
說到session的運(yùn)行機(jī)制,就一定要先說一下cookie這一段信息。一般情況下cookies都是我們的瀏覽器生成的(顯然可以人為修改),用于服務(wù)器對(duì)戶進(jìn)行篩選和維護(hù),但是這個(gè)聽上去很好吃的東西,能存的東西有點(diǎn)少而且容易被別人利用。這時(shí)候基于cookies的session的意義就比較明顯了,在客戶端的cookies中我們只保存session id,而將完整信息以加密信息的形式保存到服務(wù)器端,這樣服務(wù)器可以根據(jù)session id相對(duì)安全的在數(shù)據(jù)庫中查詢用戶的更細(xì)致的信息和狀態(tài)。
28、kafka查看指定topic信息
bin/kafka-topics.sh --zookeeper node01:2181 --describe --topic t_cdr
29、git初始化和更新子模塊
git submodule init 初始化子模塊
git submodule update 更新子模塊
30、ubuntu搜索可用包
apt-cache search package-name
31、在10.0.0.8/8中劃分出3個(gè)子網(wǎng),保證每個(gè)子網(wǎng)有4089個(gè)私有ip
略,本人不太精通子網(wǎng)劃分
32、ip報(bào)文格式
版本:IP協(xié)議的版本,目前的IP協(xié)議版本號(hào)為4,下一代IP協(xié)議版本號(hào)為6。
首部長度:IP報(bào)頭的長度。固定部分的長度(20字節(jié))和可變部分的長度之和。共占4位。最大為1111,即10進(jìn)制的15,代表IP報(bào)頭的最大長度可以為15個(gè)32bits(4字節(jié)),也就是最長可為15*4=60字節(jié),除去固定部分的長度20字節(jié),可變部分的長度最大為40字節(jié)。
服務(wù)類型:Type Of Service。
總長度:IP報(bào)文的總長度。報(bào)頭的長度和數(shù)據(jù)部分的長度之和。
標(biāo)識(shí):唯一的標(biāo)識(shí)主機(jī)發(fā)送的每一分?jǐn)?shù)據(jù)報(bào)。通常每發(fā)送一個(gè)報(bào)文,它的值加一。當(dāng)IP報(bào)文長度超過傳輸網(wǎng)絡(luò)的MTU(最大傳輸單元)時(shí)必須分片,這個(gè)標(biāo)識(shí)字段的值被復(fù)制到所有數(shù)據(jù)分片的標(biāo)識(shí)字段中,使得這些分片在達(dá)到最終目的地時(shí)可以依照標(biāo)識(shí)字段的內(nèi)容重新組成原先的數(shù)據(jù)。
標(biāo)志:共3位。R、DF、MF三位。目前只有后兩位有效,DF位:為1表示不分片,為0表示分片。MF:為1表示“更多的片”,為0表示這是最后一片。
片位移:本分片在原先數(shù)據(jù)報(bào)文中相對(duì)首位的偏移位。(需要再乘以8)
生存時(shí)間:IP報(bào)文所允許通過的路由器的最大數(shù)量。每經(jīng)過一個(gè)路由器,TTL減1,當(dāng)為0時(shí),路由器將該數(shù)據(jù)報(bào)丟棄。TTL 字段是由發(fā)送端初始設(shè)置一個(gè) 8 bit字段.推薦的初始值由分配數(shù)字 RFC 指定,當(dāng)前值為 64。發(fā)送 ICMP 回顯應(yīng)答時(shí)經(jīng)常把 TTL 設(shè)為最大值 255。
協(xié)議:指出IP報(bào)文攜帶的數(shù)據(jù)使用的是那種協(xié)議,以便目的主機(jī)的IP層能知道要將數(shù)據(jù)報(bào)上交到哪個(gè)進(jìn)程(不同的協(xié)議有專門不同的進(jìn)程處理)。和端口號(hào)類似,此處采用協(xié)議號(hào),TCP的協(xié)議號(hào)為6,UDP的協(xié)議號(hào)為17。ICMP的協(xié)議號(hào)為1,IGMP的協(xié)議號(hào)為2.
首部校驗(yàn)和:計(jì)算IP頭部的校驗(yàn)和,檢查IP報(bào)頭的完整性。
源IP地址:標(biāo)識(shí)IP數(shù)據(jù)報(bào)的源端設(shè)備。
目的IP地址:標(biāo)識(shí)IP數(shù)據(jù)報(bào)的目的地址。
33、keepalived工作原理
Layer3,4,&5工作早IP/TCP協(xié)議棧的IP層,TCP層,及應(yīng)用層
原理:
Layer3:keepalived使用layer3的方式工作時(shí),keepalived會(huì)定期向服務(wù)器群中發(fā)送一個(gè)ICMP的數(shù)據(jù)包(即我們平時(shí)用的ping程序),如果發(fā)現(xiàn)某臺(tái)服務(wù)器的IP地址沒有激活,keepalived便會(huì)報(bào)告這臺(tái)服務(wù)器是小,并將他從服務(wù)器群中剔除。Layer3的方式是以服務(wù)器的IP第孩子是否有效作為服務(wù)器工作正常與否的標(biāo)準(zhǔn)。
Layer4:主要以TCP端口的狀態(tài)來決定服務(wù)器工作正常與否。如web sercer的服務(wù)端口一般是80.如果keepalived檢測到80端口沒有啟動(dòng),則keepalived將這臺(tái)服務(wù)器從服務(wù)群中刪除。
Layer5:layer5就是工作載具體的應(yīng)用層,比layer3,4要復(fù)雜一點(diǎn),載網(wǎng)絡(luò)上占用的寬帶也要打一些。Keepalived將根據(jù)用戶的設(shè)定檢查服務(wù)器的運(yùn)行是否正常。如果設(shè)定不相符,則keepalived將把服務(wù)器從群中踢除。
轉(zhuǎn)載于:https://blog.51cto.com/yw666/2119035
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的2018年企业运维开发经典面试题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQLServer存储引擎——05.索引
- 下一篇: Sass--传一个不带值的参数