在上一篇文章 總結一下:運維工程師面試的經曆及面試相關問題(會持續更新) 筆者也講到會持續更新,由于上一篇文章内容有點長,為了便于大家閱讀,是以筆者就另起這篇文章繼續來講述一下筆者的其它面試過程的面試問題。
其實筆者寫這文章的目的很簡單,就是想和大家一起探讨和學習咋們做運維的兄弟如何在面試的時候成功率能大幅度的提高,并且能拿到滿意的待遇,當然自身還是要不斷的學習,提高技術能力。還有就是大家去面試前看一下這篇文章對面試會有所幫助,面試的時候能更加的自信,筆者也想多交些朋友,共同學習和進步。下面分享一下筆者在2018年1月8号和海外面試官司的電話面試是怎麼進行的?
2018年1月8号海外電話面試
一次偶然的機會,筆者在一個招聘平台中(我就不細說哪個平台,免得有打廣告的意思)重新整理崗位的時候突然看到一個新釋出的崗位,仔細一看是海外的崗位,上面寫的待遇、福利、工作内容筆者都有點興趣,由于筆者也沒有嘗試過海外面試的機會和感覺,是以就和釋出這個崗位的獵頭聯系上了。
獵頭問我要了履歷,并把個人資訊詳細豐富了一下,比如有沒有護照、工作了多久、個人職業規劃、期望到手的薪資等等。獵頭就把我的履歷和詳細的個人資訊推薦出去了,過了幾天時間,獵頭通知我履歷篩選通過了,約個時間可以進行技術面試(電話面試),然後就這樣約在了2018年1月8号上午。
雖然這次是海外面試,但是面試官是我們華人,和面試官在電話中将近聊了2個小時左右,筆者聊的也口幹舌燥。這一次面試官将近問了40個左右的問題,量實大有點大,筆者也沒記住這麼多,大概記住了30多個問題,忘記開錄音了,不然這些問題都能分享出來。别看是海外的面試官,其實這次所問的問題在我們國内的面試中也常常會問到的,我們先來看一下海外的公司的崗位要求吧:
其實這個要求,我在上一篇文章也說到過,大多數公司都寫得差不多,很多公司自己懶的寫,直接照搬别的公司發出來崗位要求,是以我們隻要了解它就可以了,面試的時候不一定會問到這些崗位的要求說明,你看這家公司沒有寫熟悉TCP/IP,其實面試官這一次有問到TCP/IP這個問題的。這次技術面試後總體面試官還是比較滿意,後來獵頭通知我一面過了,準備安排2018年1月11号下午進行二面(跟我談薪資、對海外工作的想法、人生規劃等話題)。好了,不多說了,大家自己慢慢看我和面試官聊的技術問題吧。
1、介紹下自己?
筆者回答:不管是電話面試還是現場面試,自我介紹是避免不了的,上一篇文章我有詳細介紹這塊的内容,這裡不做解釋了,感興趣的朋友參考我上一篇文章:
總結一下:運維工程師面試的經曆及面試相關問題(會持續更新)
2、為什麼想着要離開現在的公司?
筆者回答:雖然是面試技術,但也會有很多面試官會不經意的問你這個問題,看起來很随意的問題,其實這個問題裡面隐藏了很多資訊,最直覺的就是看你這個人對企業的忠誠度、還能看你是不是心浮氣燥的性格等等。如果你曾經頻繁跳過槽,不管出于什麼原因,筆者個人都不建議寫在履歷上,最好能夠合并一些工作時間和機關,企業是很擔心把你招來後會不會短時間你又跳槽了。當然如果都是因為企業經營不善倒閉所至,就沒關系了。說到這裡,就想起了筆者曾經一位同僚,連續在好幾家機關都幹倒閉了,這我也不知道說啥好了。。。好了,咋們接着往下走。
3、TCP/IP原理說一下?TCP有哪幾個狀态,分别是什麼意思?
筆者回答:以tcp/ip協定為核心,分五層。tcp工作在第4層,主要有tcp和udp協定。其中tcp是可靠協定,udp是不可靠協定。 tcp傳輸之前,需要建立連接配接,通過三次握手實作。
TCP三向交握狀态:首先是closed狀态,當發起連接配接後,進入Listen狀态,當三次握手之後,進入EST狀态。三次握手中間還有一個臨時狀态:SYN_SENT。SYN_SENT 當應用程式發送ack之後,進入EST狀态,如果沒有發送,就關閉closed.
總結:大家一定要熟記tcp狀态轉換圖,參考 http://blog.csdn.net/wenqian1991/article/details/40110703 如下圖:
4、有個客戶說通路不到你們的網站,但是你們自己測試内網和外網通路都沒問題。你會怎麼排查并解決客戶的問題?
筆者回答:我們自己測了都沒問題,隻是這個客戶通路有問題,那肯定是要先聯系到這個客戶,能遠端最好,問一下客戶的網絡是不是正常的,通路其它的網站有沒有問題(比如京東、百度什麼的)。如果通路其它網站有問題,那叫客戶解決本身網絡問題。如果通路其它網站都沒問題,用ping和nslookup解析一下我們的網站是不是正常的,讓客戶用IP來通路我們的網站是否可行,如果IP通路沒問題,那就是客戶的DNS伺服器有問題或者DNS伺服器解析不到我們的網站。還有一種可能就是跨營運商通路的問題,比如我們的伺服器用的是北方聯通、而客戶用的是南方移動,就也有可能突然在某個時間段通路不到,這種情況在龐大的中國網絡環境中經常發生(一般是靠CDN解決)。還有可能就是我們的網站沒有SSL證書,在公網是使用的是http協定,這種情況有可能就是沒有用https協定網站被營運商劫持了。
5、redhat 6.X版本系統 和 centos 7.X版本有啥差別?
筆者回答:桌面系統(6/GNOE2.x、7/GNOME3.x)、檔案系統(6/ext4、7/xfs)、核心版本(6/2.6x、7/3.10x)、防火牆(6/iptables、7/firewalld)、預設資料庫(6/mysql、7/mariadb)、啟動服務(6/service啟動、7/systemctl啟動)、網卡(6/eth0、7/ens192)等。
6、你會用什麼方法檢視某個應用服務的流量使用情況?
筆者回答:如果是單一應用的伺服器,隻需要用iftop、sar等工具統計網卡流量就可以。如果伺服器跑了多個應用,可以使用nethogs工具實作,它的特别之處在于可以顯示每個程序的帶寬占用情況,這樣可以更直覺擷取網絡使用情況。
7、說一下你們公司怎麼發版的(代碼怎麼釋出的)?
筆者回答:我說什麼來着,這個問題又問到了。釋出:jenkins配置好代碼路徑(SVN或GIT),然後拉代碼,打tag。需要編譯就編譯,編譯之後推送到釋出伺服器(jenkins裡面可以調腳本),然後從分發伺服器往下分發到業務伺服器上。
8、elk中的logstash是怎麼收集日志的,在用戶端的logstash配置檔案主要有哪些内容?
筆者回答:input、output兩大塊配置;input中指定日志(type、path)等,output指定日志輸出的目标(host、port)等。
9、ansible你用過它的哪些子產品,ansbile同時分發多台伺服器的過程很慢(它是逐台分發的),你想過怎麼解決嗎?
筆者回答:用過ansible的(copy file yum ping command shell)等子產品;ansible預設隻會建立5個程序,是以一次任務隻能同時控制5台機器執行.那如果你有大量的機器需要控制,或者你希望減少程序數,那你可以采取異步執行.ansible的子產品可以把task放進背景,然後輪詢它.這使得在一定程序數下能讓大量需要的機器同時運作起來.
10、nginx有哪幾種排程算法,解釋一下ip hash和輪詢有啥不一樣?
筆者回答:常用的有3種排程算法(輪詢、ip hash、權重)。
輪詢:upstream按照輪詢(預設)方式進行負載,每個請求按時間順序逐一配置設定到不同的後端伺服器,如果後端伺服器down掉,能自動剔除。
ip hash:每個請求按通路ip的hash結果配置設定,這樣每個訪客固定通路一個後端伺服器,可以解決session的問題。
權重:指定輪詢幾率,權重(weight)和通路比率成正比,用于後端伺服器性能不均的情況。
11、nginx你用到了哪些子產品,在proxy子產品中你配置過哪些參數?
筆者回答:用到過(負載均衡upstream、反向代理proxy_pass、location、rewrite等)。
proxy子產品中配置過:proxy_set_header、proxy_connect_timeout、proxy_send_timeout、proxy_buffer_*
12、說一下iptables的原理,有哪些表、哪些鍊?怎麼修改預設政策全部為DROP?
筆者回答:iptables是工作在TCP/IP的2、3、4層。你要說它的原理也不是幾話能概括的,當主機收到一個資料包後,資料包先在核心空間中處理,若發現目的位址是自身,則傳到使用者空間中交給對應的應用程式處理,若發現目的不是自身,則會将包丢棄或進行轉發。
4張表(raw表、mangle表、net表、filter表)
5條鍊(INPUT鍊、OUTPUT鍊、PORWARD鍊、PREROUTING鍊、POSTROUTING鍊)。
全部設定為DROP:
#iptables -P INPUT DROP
#iptables -P OUTPUT DROP
#iptables -P FORWARD DROP
小結:iptables遠不止這幾句話就能描述清楚的,也不是随便在網上趴些資料就能學好的,需要自己用起來,經過大量的實驗和實戰才能熟悉它,iptables真的很考驗運維人員的技術水準,大家一定要用心學好這個iptables。
13、如何開啟linux伺服器路由轉發功能?
筆者回答:echo "1" > /proc/sys/net/ipv4/ip_forward
14、nginx中rewrite有哪幾個flag标志位(last、break、redirect、permanent),說一下都什麼意思?
筆者回答:
last : 相當于Apache的[L]标記,表示完成目前的rewrite規則
break : 停止執行目前虛拟主機的後續rewrite指令集
redirect : 傳回302臨時重定向,位址欄會顯示跳轉後的位址
permanent : 傳回301永久重定向,位址欄會顯示跳轉後的位址
301和302不能簡單的隻傳回狀态碼,還必須有重定向的URL,這就是return指令無法傳回301,302的原因了。這裡 last 和 break 差別有點難以了解:
last一般寫在server和if中,而break一般使用在location中
last不終止重寫後的url比對,即新的url會再從server走一遍比對流程,而break終止重寫後比對
break和last都能組織繼續執行後面的rewrite指令
總結:關于nginx rewrite用法,筆者看到一篇文章總結的挺不錯 ,可以參考一下 https://www.jianshu.com/p/a1fce9358d44
15、你在shell腳本中用過哪些文法,case文法會用到哪些地方?
筆者回答:一般會用到if語句、for語句、while語句、case語句以及function函數的定義;case語句為多選擇語句,可以用case語句比對一個值與一個模式,如果比對成功,執行相比對的指令。最典型的case文法會用到啟動服務腳本的處理。
16、linux系統中你會用到什麼指令檢視硬體使用狀态資訊?
筆者回答:這個指令就很多了,比如:lscpu(檢視cpu資訊)、free -m(檢視記憶體資訊)、df -h(檢視硬碟分區資訊)、top(還可以動态檢視cpu、記憶體使用情況的資訊),/proc/目錄下也可以檢視很多硬體資訊。
17、我要過濾一段文本(test.txt)中第二列的内容?如果這段檔案有很多特殊符号,比如用:(冒号)怎麼過濾它的第二段?如果我要過濾這段文本中,其中有一行隻有7個符如何實作?
筆者回答: awk '{print $2}' tset.txt
awk -F':' '{print $2}' tset.txt
18、比如開發想找你檢視tomcat日志,但是catalia.out特别大,你不可能用vi打開去看,你會怎麼檢視?如果你用 grep -i"error" 過濾隻是包含error的行,我想同時過濾error上面和下面的行如何實作?
筆者回答:grep -i "error" catalia.out
grep -C 1 -i "error" catalia.out
參數-C:是比對前後的行,後面1是比對前後各1行
19、 怎麼編寫一個定時計劃任務?裡面用到的最小機關是什麼?
筆者回答:crontab -e,最小機關是分鐘
20、zabbix如何修改其中監控的一台伺服器中記憶體門檻值資訊,比如正常記憶體使用到了80%報警,我想修改為60%報警?
筆者回答:正常來說,一般會把監控的伺服器統一加入到一個模闆中,修改模闆的其是某一項的監控項參數和告警門檻值後,加入模闆中的所有主機都會同步。如果單獨想修改其中某一台伺服器記憶體告警門檻值,需要進入這台主機,單獨建立一個告警Triggers,關聯這台主機監控記憶體的項,配置好告警的門檻值為60%即可實作。其實,zabbix一切都為圖形化操作,如果沒有接觸過zabbix的朋友,可能聽起來不太清楚。
21、mysql主從複制原理說一下?
筆者回答:mysql支援三種複制類型(基于語句的複制、基于行的複制、混合類開進的複制)。
如果你記不住太多内容,可以簡單說明一下原理:
(1) master将改變記錄到二進制日志(binary log)中(這些記錄叫做二進制日志事件,binary log events);
(2) slave将master的binary log events拷貝到它的中繼日志(relay log);
(3) slave重做中繼日志中的事件,将改變反映它自己的資料。
如果你能詳細記住它的原理,可以這麼回答:
該過程的第一部分就是master記錄二進制日志。在每個事務更新資料完成之前,master在二日志記錄這些改變。MySQL将事務串行的寫入二進制日志,即使事務中的語句都是交叉執行的。在事件寫入二進制日志完成後,master通知存儲引擎送出事務。
下一步就是slave将master的binary log拷貝到它自己的中繼日志。首先,slave開始一個工作線程——I/O線程。I/O線程在master上打開一個普通的連接配接,然後開始binlog dump process。Binlog dump process從master的二進制日志中讀取事件,如果已經跟上master,它會睡眠并等待master産生新的事件。I/O線程将這些事件寫入中繼日志。
SQL slave thread(SQL從線程)處理該過程的最後一步。SQL線程從中繼日志讀取事件,并重放其中的事件而更新slave的資料,使其與master中的資料一緻。隻要該線程與I/O線程保持一緻,中繼日志通常會位于OS的緩存中,是以中繼日志的開銷很小。
22、用什麼指令可以檢視上一次伺服器啟動的時間、上一次誰登入過伺服器?
筆者回答:w指令檢視上次伺服器啟動時間。last指令 檢視登入。
23、redis叢集原理說一下,正常情況下mysql有多個庫,redis也有多個庫,我怎麼進入redis叢集中的第2個庫?還有,我想檢視以BOSS開頭的值?redis持久化是如何實作(一種是RDS、一種是AOF),說一下他們有啥不一樣?
筆者回答:這個redis原理的問題又問到了,看樣子很多面試官都很關心這個redis,在上一篇文章筆者的一次面試也有這個面試問題。
【叢集原理】:其實它的原理不是三兩句話能說明白的,redis 3.0版本之前是不支援叢集的,官方推薦最大的節點數量為1000,至少需要3(Master)+3(Slave)才能建立叢集,是無中心的分布式存儲架構,可以在多個節點之間進行資料共享,解決了Redis高可用、可擴充等問題。叢集可以将資料自動切分(split)到多個節點,當叢集中的某一個節點故障時,redis還可以繼續處理用戶端的請求。
【切庫】:單機情況下用select 2可以切換第2個庫,select 1可以切換第1個庫。但是叢集環境下不支援select。可參考https://yq.aliyun.com/articles/69349
【redis持久化】:持久化通俗來講就是将記憶體中的資料寫入硬碟中,redis提供了兩種持久化的功能(RDB、AOF),預設使用RDB的方式。
RDB:全量寫入持久化,而RDB持久化也分兩種(SAVE、BGSAVE)。
SAVE是阻塞式的RDB持久化,當執行這個指令時redis的主程序把記憶體裡的資料庫狀态寫入到RDB檔案(即上面的dump.rdb)中,直到該檔案建立完畢的這段時間内redis将不能處理任何指令請求。
BGSAVE屬于非阻塞式的持久化,它會建立一個子程序專門去把記憶體中的資料庫狀态寫入RDB檔案裡,同時主程序還可以處理來自用戶端的指令請求。但子程序基本是複制的父程序,這等于兩個相同大小的redis程序在系統上運作,會造成記憶體使用率的大幅增加。
AOF:與RDB的儲存整個redis資料庫狀态不同,AOF的持久化是通過指令追加、檔案寫入和檔案同步三個步驟實作的。AOF是通過儲存對redis服務端的寫指令(如set、sadd、rpush)來記錄資料庫狀态的,即儲存你對redis資料庫的寫操作。
為了大家能夠更好的了解redis持久化,筆者建議大家可以看下這兩篇文章會比較好了解:
https://www.cnblogs.com/Fairy-02-11/p/6182478.html
http://blog.csdn.net/mishifangxiangdefeng/article/details/48977269
24、你在工作的過程中,遇到過你映像最深的是什麼故障問題,你又是如何解決?
筆者回答:這個問題主要也是考你排查故障的思路及用到的相關指令工具,其每個人在工作中都會遇到各種各樣的問題(不管是網絡問題、應用配置問題、還是APP打開慢/網站打開慢)等等。你隻要記住一個你映像最為深刻、最為典型的故障就行。筆者也遇到過各種問題,我在這裡就是寫出來,怕誤導了大家。
25、在linux伺服器上,不管是用rz -y指令還是tftp工具上傳,我把本地的一個檔案上傳到伺服器完成後,伺服器上還是什麼都沒有,這有可能是什麼問題?
筆者回答:根據這種現象有可能是:伺服器磁盤滿了;檔案格式破壞了;或者你用的是普通使用者上傳,正好上傳的目錄沒有權限;還有可能就是你上傳的檔案大小超出了該目錄空間的範圍。
26、你在工作中都寫過什麼腳本?
筆者回答:這個問題的回答别把話說得太大了,要結合實際情況來回答。寫過mysql、redis、mongodb等資料庫備份的腳本;伺服器檔案備份的腳本;日常代碼釋出的腳本;之前用nagios的時候寫過一些nagios插件的腳本。
27、rsync+inotify是實作檔案實時同步的,加什麼參數才能實作實時同步,--delete參數又是什麼意思?
筆者回答:rsync是遠端同步工具、inotify是一種強大的異步檔案系統系統監控機制。通過inotifywait 中的-m參數可以實作“始終保持事件監聽狀态”。rsync中的-delete參數是指“ 删除那些DST中SRC沒有的檔案”。
28、我想檢視access.log中哪個IP通路最多?
筆者回答:awk '{print $1}' access.log| sort | uniq -c |sort -rn -k 1 | head -1
上面的具體參數如果有不知道的,大家可以自行百度一下,這裡不說參數這麼細節的問題
29、在linux系統中,一般都會有swap記憶體,你覺得使用swap記憶體有什麼好處,在什麼情況下swap記憶體才會被使用?你覺得在生産環境中要不要用swap記憶體?
筆者回答:好處:在記憶體不夠用的時候,将部分記憶體上的資料交換到swap空間上,以便讓系統不會因為記憶體不夠用而導緻oom或者更緻命的情況出現。
什麼情況下會用swap:當系統的實體記憶體不夠用的時候,就需要将實體記憶體中的一部分空間釋放出來,以供目前運作的程式使用。那些被釋放的空間可能來自一些很長時間沒有什麼操作的程式,這些被釋放的空間被臨時儲存到swap空間中,等到那些程式要運作時,再從swap中恢複儲存的資料到記憶體中。這樣,系統總是在實體記憶體不夠時,才進行swap交換。
30、怎麼檢視兩台伺服器之間的網絡是不是正常的,伺服器是禁ping的?
筆者回答:不能用ping,那可以用telnet對方伺服器的端口、或者互相通路對方打開的服務。其它的測試方法筆者也沒想到,要是哪位朋友有好的方法不訪在下面留言讨論。
31、比如我通路百度網站,有什麼方法可以跟蹤經過了哪些網絡節點?
筆者回答:這個太簡單了吧,幹運維必備的網絡排查技能。用tracert指令就可以跟蹤,主要是查詢本機到另一個主機經過的路由跳數及資料延遲情況。然後你也可以把具體跟蹤後輸出的資訊也說出來,你能說出來都是為你加分的。
32、如果你們公司的網站通路很慢,你會如何排查?
筆者回答:看到沒有,又問到了這個問題,筆者在上一篇文章 2017年2月14号的面試中面試官也問到同樣的問題。其實這種問題都沒有具體答案,隻是看你回答的内容與面試官契合度有多高,能不能說到他想要的點上,主要是看你排查問題的思路。我是這麼說的:問清楚反應的人哪個服務應用或者頁面調取哪個接口慢,叫他把頁面或相關的URL發給你,首先,最直覺的分析就是用浏覽器按F12,看下是哪一塊的内容過慢(DNS解析、網絡加載、大圖檔、還是某個檔案内容等),如果有,就對症下藥去解決(圖檔慢就優化圖檔、網絡慢就檢視内網情況等)。其次,看後端服務的日志,其實大多數的問題看相關日志是最有效分析,最好用tail -f 跟蹤一下日志,當然你也要點選測試來通路接口日志才會打出來。最後,排除sql,,找到sql去mysql執行一下,看看時間是否很久,如果很久,就要優化SQL問題了,expain一下SQL看看索引情況啥的,針對性優化。資料量太大的能分表就分表,能分庫就分庫。如果SQL沒啥問題,那可能就是寫的邏輯代碼的問題了,一行行審代碼,找到耗時的地方改造,優化邏輯。
33、我需要檢視某個時間段的日志(比如access.log日志),如何實作?
筆者回答:方法有很多種,比如我要看查的時間是2018年1月9号--1月10号的日志吧。
比如可以用sed指令,格式為:sed -n '/起始時間/,/結束時間/p' 日志檔案,如下:
sed -n '/09\/Jan\/2018/,/10\/Jan\/2018/p' access.log
比如可以用grep,格式為:grep -E '起始時間|結束時間' 日志檔案,如下:
grep -E '09/Jan/2018|10/Jan/2018' access.log
當然,你還可以結合cat、grep 、awk這些指令一起來使用都行。
2018年1月17号:更新1月8号海外面試的結果
博友們,這段時間筆者有點忙,沒有及時更新1月8号那天海外面試的結果,實在抱歉了,大家肯定也都蠻期待我上次海外的面試結果。好了,長話短說,上次說了接下來會有二面,具體是哪個國外和哪個公司我就是在這裡就不寫出來了,感興趣的朋友可以單點傳播我加我QQ或微信都行。
過了兩天,在下午3點鐘左右,筆者接到海外的二面來的電話,我們大概将近又聊了1個小時,聽面試官的聲音,他說他是做java的,要跟我二面聊一下。我心裡想,二面不是人資跟我談薪資待遇、談人生理想嗎?也不管那麼多了,聊就聊吧,别看這小哥是做java的,還挺能聊,幾乎把我履歷上寫的那些技能問了個遍(什麼cdn原理?、docker是什麼?),這些問題我就不寫出來了,因為聊得比較粗,不像一面問的技術都那麼細。聊完了相關技術之後,我就問他在那邊幹了多久,生活如何。
二面的面試官在那邊生活了有3年多了,看樣子他還是比較滿意,那邊包吃包住,吃飯時間比較自由,住得還不錯,安排了單間住。地方就像國内的二線城市那麼大,環境也都很好,就是消費挺高的,比北京的消費高的不是一點點,就拿我們吃的蔬菜來說,我們國内一斤蕃茄也就幾塊錢,那邊賣60元左右人民币1斤,什麼水果都一樣,動不動60、70、80一斤,看着這消費挺吓人的。總體來講,聊得還不錯,對我印象也蠻好,他說後面會安排人和我三面,總算是談錢了。第二天就接到三面的電話,聊了啥也沒啥可說的,我就直接把福利待遇和薪資分享出來吧:
吃住:包吃住,也是住單間、吃公司食堂
薪資:到手2W人民币/月,13薪,年底在分點紅啥的
工作時間:跟國内一樣,也是雙休
年假:一年有20天左右帶薪年假,可以回國
五險一金:國外都不繳五險一金,你要自己找回内公司代繳
機票:去工作的機票和簽證的費用報帳
最後,我要把這些情況跟媳婦反應一下,畢竟要商量着來,單身漢就無所謂可以自己做主。分析了一下利弊和自己2018年的計劃之後就委婉的拒絕了海外那邊的工作。
好了,先到這裡吧,總結了這麼多、打了這麼多字也挺累的,希望大家可以給點鼓勵點個贊讓我更有動力寫下去。
有需要的朋友可以轉載或者收藏起來一起讨論。
祝大家過年後都能找到滿意的工作,有找的自己滿意的工作一定要跟筆者留言分享、或者加我QQ分享給筆者哦。
未完待續,計劃在過完年後筆者好好的投些履歷出去,共同期待、共同進步吧博友們!!!
喜歡我的文章,請點選最上方右角處的《關注》支援一下!