文章摘要: 結果面試官說還是寫一些比較好也不知道為什麼面試官會問這個問題
前幾天去某大型網際網路公司試試水,大約4點到某公司,hr接見帶到公司旁邊說聯絡下面試的人,大約過了5分鐘左右,來了二個面試官,說找個地方面試,我就跟著走,感覺辦公區還是人多,沒有會議室,就直接在走廊上找三個凳子,說就這裏,開始吧,我說好,開始進入第一輪面試:
面試官二個人,一個比較年輕也不怎麼問,偶爾看下手機,不知道屬於什麼情況,另一個面試官主要發問,上來還是說先介紹下自己,說簡歷還沒看,留點時間給面試官看簡歷,我嘴上說好,不過心裏還是有點不爽,三天前就給我電話讓我去面試,結果連TM我簡歷都沒看,這是招人的態度麼,最起碼尊重下候選人呀,當然這都心裏話,既然來了,就說唄,我介紹完自己,面試官就開始問了些之前的工作,現在的工作啥的,基本都是業務問題,技術問題基本沒有,然後就沒問題了,說可以了,這時候他們起身要走,我這邊趕緊問那個年輕小夥(感覺他是部門直接負責招聘的,後來判斷果然沒錯,這個下面介紹),咱們這是個什麼崗位,具體找什麼的樣的人呀,結果沒回復,說還有面試稍等,就走了,這個真心給差評,什麼呀,連你們招的崗位是什麼都不說呀,我一頭霧水,根本不知道什麼是側重點,正常面試官總得給一個崗位說明,說我們這個崗位打算招什麼人,blabla什麼的,這樣面試者心裏也比較有數,合不合適自己會判斷,總之第一輪就結束了。
大約過了5分鐘左右,那個年輕小夥帶著另一個年輕小夥來了,寒暄幾句後,就坐到了對面低頭看簡歷,然後我就等了大概2分鐘左右,開始了,上來就是技術問題,其他廢話不多說,我這總結下幾個問題:
1、opstack和docker區別是什麼?
這個我直接回復了openstack沒深入研究過,我自己理解是vm比較重帶系統,docker比較輕,在系統層做的資源隔離,啟動速度好快。
2、docker 怎麼做的資源隔離,namespace是什麼?
答覆是cgroup做的資源隔離,隔離cpu,記憶體,namespace保證了每個容器直之間可以使用獨立的資源,這裏我只提到了網路,結果面試官問除了網路呢,我沒有明確回覆,實際上除了網路別的也沒特別研究過,所以說去面試準備一些理論知識還是非常有必要的。回來搜了下正確答案,如下:
Linux核心實現了6種namespace: IPC:隔離system V IPC和POSIX訊息佇列 Network:隔離網路資源 Mount:隔離檔案系統掛載點 PID:隔離程序PID UTS:隔離主機名和域名 User:隔離使用者ID和組ID
3、Image和容器的區別?
這個可能是最簡單的問題了,也不知道為什麼面試官會問這個問題,難道怕我簡歷上忽悠他,實際考察下我用沒用過docker, 好吧,docker環境的自動化釋出我們是三年前就已完成了,這個問題給了完美答案,唯一不好的是我自己沒控制住自己笑了下,在這裏bs下自己,不能太驕傲,不能小看面試官。
4、容器是怎麼作成映象的?
我本來答覆是靠build或者直接在容器裡改然後打一個tag方式,commit生成一個image,結果面試官說不是,問的實現原理,我說是Image是分層實現的,結果被追問,怎麼實現分層的,我懵逼了,想的太深怕說的有問題,就乾脆直接答覆沒研究過,這裏又是同樣的問題,理論知識還是要準備一下的,回來找了下正確答案,發現也很簡單,跟當時想的差不多,想了解的看這裏:
https://www.cnblogs.com/space007/p/6042483.html
5、free命令裡buffer和cache裏面存的什麼?
我以為是問怎麼通過free命令去判斷實際記憶體使用,正打算念公式,結果面試官說不是,說就像瞭解buffer和cache的存的什麼?我說cache裡快取的開啟的檔案,buffter這裏我突然腦袋短路了,回覆的不是太好,感覺面試官不太滿意,然後就接著問了另一個問題,系統裡buffter高,cache低,說這是計算佔資源還是io佔資源,這個我秒級回覆是是IO,這完全是靠經驗,結果面試官沒說對還是錯,就過了,回來我自己搜了下,感覺我回復是正確的,依據如下:
大家都知道在linux下不管有多大記憶體系統都會佔用多大內容,因為每次開啟一個檔案,第一次從磁碟讀取,然後就被快取到了cache裡,第二次在讀取的時候直接從cache裡讀取,不在走磁碟IO, 所以大大提高了系統執行效率,那這裏這說到了cache低,其它情況都沒給,連實際使用記憶體數也不知道,所以我只能判斷cache低可能就是cpu沒有讀取檔案,所以大量檔案沒被快取,因為如果檔案讀取頻繁,按linux記憶體機制,cache會高才對,當然這裏我是假設還有實體記憶體可以使用,因為cache這部分記憶體是可以被釋放的,當然cache也可以通過系統引數進行調整:
這個檔案可以設定的值分別為1、2、3。它們所表示的含義為: echo 1 > /proc/sys/vm/drop_caches:表示清除pagecache。 echo 2 > /proc/sys/vm/drop_caches:表示清除回收slab分配器中的物件(包括目錄項快取和inode快取)。slab分配器是核心中管理記憶體的一種機制,其中很多快取資料實現都是用的pagecache。 echo 3 > /proc/sys/vm/drop_caches:表示清除pagecache和slab分配器中的快取物件。
情況太多不多去考慮,如果按上面假設是因為沒有大量檔案讀寫導致cache低的,那就是IO低,這個也很好理解,沒IO就cache也不升高,但反過來,如果因為是沒法cache, 那就是另一個問題了,因為cache主要是cpu讀取,它高IO就低,因為直接從caceh裡讀取,低IO可能就高,因為要從磁碟裡讀取,那既然人家給的題是cache低,那我就認為有可能是IO高唄,當然也可能不是,這裏是cache,我們就討論到這裏,接下來我們說buffer,其實我感覺這個跟cache作用有很大不同,因為buffer是爲了提高記憶體和磁碟直接數據交換的速度而設計的,說白了就是記憶體裡的資料如果有很多要寫入磁碟,因為磁碟速度不行,所以buffer就來個緩衝,先到buffer,然後慢慢存到磁碟,所以buffer裡的資料就是要寫入磁碟的,到這裏就基本明瞭了,buffer很大,那說明很多資料是沒寫到磁碟呀,這不就是IO問題嗎?結論到這裏就結束了,當然這也是推測,因為很多條件都不具備,另外一個系統管理員也不可能通過一個命令去判斷系統的負載,如果系統性能處理問題,我們排查的工具有太多:sar, iostat,vmstat,free,uptime,top等,系統的負載就綜合來看各項指標。
6、python裡range和xrange區別?
這又是一個非常簡單的題目,我說xrange是個生成器,佔用記憶體更小,range會佔用比較大的記憶體,結果本來感覺就完事了,結果被追問在紙上寫一個range函式的實現,臥槽,當然就懵逼了,這種東西想都沒想過,我說不用寫了吧,我說一下吧,結果面試官說還是寫一些比較好,我說好,稍等下,我想一下,這個問題從沒想過,大概1分鐘多吧,我寫了一個,能實現,結果面試官說range還能傳一個step引數,你沒寫呀,我說剛纔沒考慮,改一下i+step 應該就行,這題完畢。
7、把之前開發過的系統數據流程圖畫一下?
好吧,就把之前的系統模組和後臺邏輯講了一下,不知道是否滿意,總之結束。
技術面就到這裏了。
第三面:
然後最開始那個年輕小夥說跟他下趟樓去一層,再面,再電梯裡我問了下那個年輕小夥是負責什麼的,他說是他們部門招聘(果然我猜的沒錯),剛纔面試官是其它部門的,我真搞不懂為什麼他們部門招聘要其他部門面試,他說這是他們的流程,懵逼,不多問,到1層,總算找了個會議室,做下等面試官,5分鐘後面試官到位,那個年輕小夥不再陪同,前2輪都是陪同面試,這位面試官總體感覺不錯,最起碼很有禮貌的先介紹了自己姓名,工作內容等,然後凱斯問題,也沒問多少技術問題,因為他是開發,面試過程中一直說他其實不太懂運維,好吧,我就把運維大概的工作內容職責給介紹了下,聊到開發部分問的比較細,讓畫流程圖,其它沒什麼了,最後讓提問題,這個我贊一下,總算有個能讓問的了,前二輪就問我了,我什麼都不能說,我就問了這個崗位具體工作內容,運維團隊幾個人等等,他也問了我後續有什麼發展計劃什麼的,我這邊也一一介紹,感覺這個面試官還是比較專業,各方面都比較好,然後結束。
到這裏就算全部完了,走的時候我問了那個年輕小夥面試結果怎麼樣,他答覆還可以,他們還有幾個候選人,讓回去等訊息,說完就離開了,出門買了瓶水,MD二個小時沒喝一口水,嗓子要冒煙的感覺,參加面試也是體力活,不如做在工位敲程式碼舒服,面試結果還不知道,不過即使給offer我也不會太考慮,這裏不是吃不到葡萄就覺得葡萄酸,畢竟還沒有最終結果, 只是因為最後那個面試官給我介紹了崗位,當他說到這個崗位只招一個運維的時候我就決定放棄了,因為我覺得技術類的工作還是有個團隊比較好,還可以做技術交流,如果只是一個人,技術成長的太慢,因為沒法跟別人交流,就沒法互相取長補短,技術這東西大家也都知道,其實就是一層紙,一旦你搞懂某項技術,你就會覺得簡單的不行,但對別人來說卻很高深莫測。