2018年企業運維開發經典面試題

【崗位職責】
負責DevOps業務線項目的實施交付工做
負責idc機房、私有云、公有云的私有化部署工做
負責公司產品的測試、生產環境搭建、維護
完善各環境中服務穩定性、監控、日誌、部署、安全等需求

【任職要求】
計算機相關專業本科畢業,2年以上的工做經驗
深刻理解Linux操做系統、體系結構
優秀的腳本語言的開發能力(bash,python)
熟悉經常使用的持續集成工具(例如Jenkins等)
熟悉Linux操做系統,熟悉經常使用的CentOS/Ubuntu/RedHat,熟悉網絡知識
熟悉Linux下經常使用的應用集羣、高可用和負載均衡技術
熟練使用常見開源監控工具者優先,如zabbix、Nagios、elk等
熟練使用常見關係型數據庫Mysql、Postgresql,或Nosql數據庫
熟悉Hbase 相關原理和最佳實踐
熟悉Redis 相關原理及高可用的最佳實踐
熟練使用阿里雲、aws、騰訊雲相關產品
熟練掌握docker相關知識
掌握git相關原理,github,gitlab
具有紮實的系統集成和運維技術能力
認同DevOps文化,認同「Automate Everything You Can」的原則,在開源社羣活躍並有積極貢獻者優先。
有技術熱情和探索精神,有較強的快速學習能力和自驅能力,有良好的全局意識和系統風險識別能力
具有良好的英文閱讀能力和快速學習能力
能夠接受臨時的出差工做
積極主動、責任心強、現場協調能力強、富有團結精神;有人際溝通能力和團隊合做能力;性格開朗外向,作事認真細緻,有責任感和風險意識;;

【加分項】
有微服務相關使用經驗
有kafka、elk相關使用經驗
有springcloud、nodejs 微服務部署相關經驗
有Docker/k8s/Mesos/Swarm生產環境的使用經驗
阿里雲/aws 命令行工具的開發使用經驗node

有海量設備監控系統/自動化平臺/服務管理/自動化部署/日誌收集等系統開發設計經驗python

面試題以下:
2018年企業運維開發經典面試題linux

2018年企業運維開發經典面試題

2018年企業運維開發經典面試題

2018年企業運維開發經典面試題

2018年企業運維開發經典面試題

一、描述Hbase中scan和get的功能以及實現的異同
HBase的查詢實現只提供兩種方式: 一、按指定RowKey獲取惟一一條記錄,get方法(org.apache.hadoop.hbase.client.Get) 二、按指定的條件獲取一批記錄,scan方法(org.apache.hadoop.hbase.client.Scan) 實現條件查詢功能使用的就是scan方式ios

二、redis的併發競爭問題如何解決
方案一:可使用獨佔鎖的方式,相似操做系統的mutex機制。(網上有例子,http://blog.csdn.net/black_ox/article/details/48972085 不過實現相對複雜,成本較高)git

方案二:使用樂觀鎖的方式進行解決(成本較低,非阻塞,性能較高)github

三、爲何redis須要把全部數據放到內存中
redis爲了達到最快的讀寫速度將數據都讀到內存中,並經過異步的方式將數據寫入磁盤。因此redis具備快速和持久化的特徵。若是不將數據放在內存中,磁盤I/O速度會嚴重影響redis的性能。若是使用了最大使用的內存,則數據已有記錄數達到內存限值後不能繼續插入新值。golang

四、redis支持的數據類型
Redis支持五種數據類型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。web

五、處理中文時出現錯誤‘ascil’ 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)redis

六、python裏面match()和search()的區別
match()函數只檢測RE是否是在string的開始位置匹配,search()會掃描整個string查找匹配;
也就是說match()只有在0位置匹配成功的話纔有返回,若是不是開始位置匹配成功的話,match()就返回none。
例如:
print(re.match('super', 'superstition').span()) 會返回(0, 5)
而print(re.match('super', 'insuperable')) 則返回None
search()會掃描整個字符串並返回第一個成功的匹配:
例如:print(re.search('super', 'superstition').span())返回(0, 5)
print(re.search('super', 'insuperable').span())返回(2, 7)
其中span函數定義以下,返回位置信息:
span([group]):
返回(start(group), end(group))。

七、python裏面如何實現tuple和list的轉換
Python中,tuple和list均爲內置類型,
以list做爲參數將tuple類初始化,將返回tuple類型
tuple([1,2,3]) #list轉換爲tuple
以tuple做爲參數將list類初始化,將返回list類型
list((1,2,3)) #tuple轉換爲list

八、請寫出一段python代碼實現刪除一個list裏面的重複元素
我寫的代碼:

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

網上給出的答案:
for i in list1:
if i not in list2:
list2.append(i)
else:
continue

九、如何批量刪除或者中止運行的容器
docker rm -f $(docker ps -a)

十、docker本地鏡像文件放在哪

/var/lib/docker

十一、構建docker鏡像應該遵循哪些規則
總體原則上,儘可能保持鏡像功能的明確和內容的精簡,要點包括:
儘可能選取知足需求但較小的基礎系統鏡像,例如docker.io/centos7
清理編譯生成文件、安裝包的緩存等臨時文件
安裝各個軟件是要指定準確的版本號,並避免引入不須要的依賴
應用盡可能使用系統的庫和依賴
使用dockerfile建立鏡像時要添加.dockerignore文件或使用乾淨的工做目錄

十二、容器退出後,經過docker ps 命令查不到,數據會丟失嗎

不會

1三、docker查看日誌
docker logs -f 容器id

1四、如何控制容器佔用系統資源(cpu、內存)的份額
:在使用 docker create 命令建立容器或使用 docker run 建立並啓動容器的時候,可使用 -c|--cpu-shares[=0] 參數來調整容器使用 CPU 的權重;使用 -m|--memory[=MEMORY] 參數來調整容器使用內存的大小。

1五、如何根據容器的名字列出容器狀態
docker status 容器id

1六、docker與LXC有何不一樣
lxc 是 Linux 內核容器虛擬化的一項技術,能夠實現資源的隔離和控制,也就是對 Cgroup 和 Namespace 兩個屬性的控制。對於 docker 而言,它發展到如今不只僅是容器的代名詞了,不過它的基礎技術是須要依賴內核的 Cgroup 和 Namespace 特性。docker 出現之初,即是採用了 lxc 技術做爲 docker 底層,對容器虛擬化的控制。後來隨着 docker 的發展,它本身封裝了 libcontainer (golang 的庫)來實現 Cgroup 和 Namespace 控制,從而消除了對 lxc 的依賴。總結一下,lxc 是早期版本 docker 的一個基礎組件,docker 主要用到了它對 Cgroup 和 Namespace 兩個內核特性的控制。

1七、docker與Vagrant有何不一樣
Vagrant適合用來管理虛擬機,而docker適合用來管理應用環境。

1八、開發環境中docker與vagrant如何選擇
Docker是應用執行環境,不是虛擬機,對於宿主來講只是個隔離的進程;而Vagrant是虛擬機輔助軟件,使用Vagrant既使用虛擬機,所以所運行的是一個完整操做系統。這是最本質的區別。

Docker運行須要依託Linux內核,所以對於Windows, OSX系統而言,須要有一個Linux虛擬機運行起來,纔可使用Docker。所以在這種環境下,從單一虛擬機角度來講,Docker和Vagrant沒有佔用資源的差異。對於 Linux工做環境來講,那就沒有這個問題,使用Docker要比Vagrant輕量級不少。

而在OSX, Windows下使用Docker和Vagrant開發,很重要的一個問題在於共享文件目錄上。以前你們在這兩個系統上安裝的Docker環境都是經過Docker Toolbox ( https://docs.docker.com/toolbox/overview/ )來安裝配置的,它使用的是Virtualbox,對於共享主機文件目錄到Docker環境上有一些問題,大多數狀況能用,可是部分狀況會出故障。因此相對於 Docker Toolbox的環境而言,若是須要一些文件目錄監控等高級功能,vagrant更適合開發。

可是,這個問題如今已經解決,Docker剛剛發佈了Docker for Mac/Windows (beta) (https://docs.docker.com/docker-for-mac/),這將不在使用Virtualbox,而是使用 xhype (OSX), Hyper-V (Windows 10) 來運行一個更爲精簡的Linux (Alpine)。因爲使用了操做系統原生虛擬框架,所以共享目錄上的種種問題獲得瞭解決,此外 Alpine 的使用,讓Linux虛擬機加載更爲迅速。因此在這種狀況下,使用 Docker 要比 Vagrant 有更多的優點。

因此,從將來角度看,Docker是大勢所趨。

1九、salt minion配置文件的默認路徑
/etc/salt/minion

20、如何手動刷新pillar
在master端定義,指定給對應的minion。可使用saltuitl.refresh_pillar刷新。

2一、介紹下salt的反射系統

2二、寫一個腳本,判斷192.168.1.0/24網絡裏,當前在線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

2三、描述linux運行級別0-6的含義
0:關機

1:單用戶模式

2:無網絡支持的多用戶模式

3:有網絡支持的多用戶模式(文本模式,工做中最常使用的模式)

4:保留,未使用

5:有網絡支持有X-Window支持的多用戶模式

6:從新引導系統,即重啓

2四、linux開機過程

2018年企業運維開發經典面試題

2五、修改內核如何生效

source /etc/profile

2六、Django中想驗證表單提交是否格式正確須要用到Form中哪一個函數

is_valid()函數方法,用於檢查表單提交是否正確。

2七、Django中如何讀取和保存session,整個session的運行機制是什麼

說到session的運行機制,就必定要先說一下cookie這一段信息。通常狀況下cookies都是咱們的瀏覽器生成的(顯然能夠人爲修改),用於服務器對戶進行篩選和維護,可是這個聽上去很好吃的東西,能存的東西有點少並且容易被別人利用。這時候基於cookies的session的意義就比較明顯了,在客戶端的cookies中咱們只保存session id,而將完整信息以加密信息的形式保存到服務器端,這樣服務器能夠根據session id相對安全的在數據庫中查詢用戶的更細緻的信息和狀態。

2八、kafka查看指定topic信息
bin/kafka-topics.sh --zookeeper node01:2181 --describe --topic t_cdr

2九、git初始化和更新子模塊
git submodule init 初始化子模塊
git submodule update 更新子模塊

30、ubuntu搜索可用包
apt-cache search package-name

3一、在10.0.0.8/8中劃分出3個子網,保證每一個子網有4089個私有ip
略,本人不太精通子網劃分

3二、ip報文格式
版本:IP協議的版本,目前的IP協議版本號爲4,下一代IP協議版本號爲6。

首部長度:IP報頭的長度。固定部分的長度(20字節)和可變部分的長度之和。共佔4位。最大爲1111,即10進制的15,表明IP報頭的最大長度能夠爲15個32bits(4字節),也就是最長可爲15*4=60字節,除去固定部分的長度20字節,可變部分的長度最大爲40字節。

服務類型:Type Of Service。

總長度:IP報文的總長度。報頭的長度和數據部分的長度之和。

標識:惟一的標識主機發送的每一分數據報。一般每發送一個報文,它的值加一。當IP報文長度超過傳輸網絡的MTU(最大傳輸單元)時必須分片,這個標識字段的值被複制到全部數據分片的標識字段中,使得這些分片在達到最終目的地時能夠依照標識字段的內容從新組成原先的數據。

標誌:共3位。R、DF、MF三位。目前只有後兩位有效,DF位:爲1表示不分片,爲0表示分片。MF:爲1表示「更多的片」,爲0表示這是最後一片。

片位移:本分片在原先數據報文中相對首位的偏移位。(須要再乘以8)

生存時間:IP報文所容許經過的路由器的最大數量。每通過一個路由器,TTL減1,當爲0時,路由器將該數據報丟棄。TTL 字段是由發送端初始設置一個 8 bit字段.推薦的初始值由分配數字 RFC 指定,當前值爲 64。發送 ICMP 回顯應答時常常把 TTL 設爲最大值 255。

協議:指出IP報文攜帶的數據使用的是那種協議,以便目的主機的IP層能知道要將數據報上交到哪一個進程(不一樣的協議有專門不一樣的進程處理)。和端口號相似,此處採用協議號,TCP的協議號爲6,UDP的協議號爲17。ICMP的協議號爲1,IGMP的協議號爲2.

首部校驗和:計算IP頭部的校驗和,檢查IP報頭的完整性。

源IP地址:標識IP數據報的源端設備。

目的IP地址:標識IP數據報的目的地址。

3三、keepalived工做原理
Layer3,4,&5工做早IP/TCP協議棧的IP層,TCP層,及應用層
原理:
Layer3:keepalived使用layer3的方式工做時,keepalived會按期向服務器羣中發送一個ICMP的數據包(即咱們平時用的ping程序),若是發現某臺服務器的IP地址沒有激活,keepalived便會報告這臺服務器是小,並將他從服務器羣中剔除。Layer3的方式是以服務器的IP第孩子是否有效做爲服務器工做正常與否的標準。

Layer4:主要以TCP端口的狀態來決定服務器工做正常與否。如web sercer的服務端口通常是80.若是keepalived檢測到80端口沒有啓動,則keepalived將這臺服務器從服務羣中刪除。

Layer5:layer5就是工做載具體的應用層,比layer3,4要複雜一點,載網絡上佔用的寬帶也要打一些。Keepalived將根據用戶的設定檢查服務器的運行是否正常。若是設定不相符,則keepalived將把服務器從羣中踢除。

相關文章
相關標籤/搜索