少點代碼,多點頭髮java
上篇給你們寫了 應屆生工做一年不到,從被裁到上岸,咱們該如何自渡?如何保證本身的核心競爭力? 反響很好。可是吧,我犯了一個錯誤,敖丙提醒個人。web
太難了,失業這幾天沒發原創,連個原創都忘記標了,真是傻🐶。 因此我今天又放了一次次條,此次可標了原創。沒看的趕忙看看,穩穩的有幫助。面試
大大小小也面試了快十家公司了,有些很是重要的面試題和麪試經驗必須給你們整出來。算法
首先聲明,我投的崗位是搜索方向、後端開發(偏底層、高性能)、java後臺(這個崗位是阿里面試官看我簡歷讓我試試的)。編程
面試的問題主要分爲幾塊去說,C&C++&STL、數據結構與算法(含編程)、操做系統、多線程問題、場景題目、項目。後端
項目在社招面試中佔據的分數很高,因此面試講項目的時間會多。項目細節就不給你們透漏了,會把項目中的知識點穿插到對應的知識模塊。性能優化
這一塊必定是面試最重要的地方。在整個社招面試的時候,自我介紹歷來都是從項目提及,不會像校招那樣會介紹來自哪裏,叫什麼名字,會什麼技術。網絡
每次自我介紹都是這樣說的:數據結構
基本就是這些,在講項目的時候注意要埋伏一些重要的伏筆,好比項目亮點,直說這些亮點很是好,至於緣由能夠鋪墊下,引發面試官的好奇。多線程
阿里面試官給過我一些建議,很是中肯的,也給你們說說。
不得不說大佬的建議很是有力量的。看完大佬給的建議趕忙從新梳理了一遍項目、看看項目有哪些亮點技術和設計、那些難點、產生什麼價值。
這是說項目的方式和準備項目方面。面試過程當中,面試官問項目是真的問到你不少都是想不到的。
你可能以爲是個很簡單的問題,平時不會在乎那種,但面試官深深的挖,總感受下面有礦同樣。
可能面試官老是能經過這種細節撂倒你,你也以爲就是你的問題,沒掌握好。
舉個例子,高效的網絡IO底層大多都是epoll實現的。
面試官先是問我epoll的原理,底層用什麼實現?爲何高效?紅黑樹結構中epoll結構體怎麼樣的?回調使用什麼觸發的?epoll的邊緣觸發和水平觸發?操做系統怎麼管理信號的?爲何這裏用紅黑樹不用哈希表?等等。
就這樣一層一層的往下挖,一直挖穿爲止。有時候你都說道操做系統,硬件中斷層面了。
可是面試官仍是如飢似渴,難道還須要說說高低電平,載波脈衝麼?
因此項目真的要細節掌握透徹,就連有時候用的一些依賴庫什麼的,你都的知道爲啥用這個,有沒有更好的?
項目問的細是一方面,還有一方面就是問的深。
舉個例子,當時說項目中用了一種高效的內存分配器,沒有用原生的ptmalloc(也就是malloc)。
不要說new了,new的底層仍是mallloc。是由於減小多線程狀況下的鎖開銷,每次malloc都會進行加鎖和解鎖的過程。
面試官緊接着就問,那你用了tcmalloc的確減小了在多線程狀況下的鎖性能問題。若是我讓你繼續優化你有什麼方法?也是在多線程狀況下,內存分配問題。
緊接着又問,你剛剛說減小鎖的性能開銷,那你知道操做系統層面,鎖的代價是多大麼?你知道操做系統是怎麼加鎖的麼(鎖的原理是什麼)?
我是真的服,面試官什麼都懂。🐂,遇到不會的只能說這塊我沒掌握,說下個人理解吧。
社招,項目這塊說的好能夠佔據很高的分,具體多大比例看面試項目契合度了。若是你的項目恰好對方公司也用到了,那就是基本聊項目聊完。
說的很差,那就有點難了。
總結一下,項目到底該如何準備?如何說?
準備方面,幾個核心點。
如何說,其實簡單。只要你準備好了,說清楚,說精彩。最好還能說得跌宕起伏,在穿插幾個故事。
其實項目再怎麼準備都不爲過,不論是從項目的深度,項目的細節。
這個問題我很清楚,是阿里問的。這就是說編譯原理了,雖然說不是科班出身,可是書仍是略微看過。
不用驚訝,都是爲了修行。
其餘還有一些簡單問題,好比問你sizeof是編譯期仍是運行期決議的?函數調用約定是什麼?等等
直接問你數據結構的很少,通常會搭配着項目問。
問你設計時爲何選用這種數據結構?
常見數據結構以及底層實現?
樹形結構和哈希結構的各自優缺點?
有些會問你圖結構一些問題
算法也不是直接讓你寫一個快排什麼的,都是給你場景題,讓你本身選擇用什麼算法。
不排除直接讓你寫快排,好比我此次在面試某家公司的時候,讓我寫一個單鏈錶快排,不能交換數值,必須交換數據節點的地址。
查找算法和排序算法考的多。
查找算法的話就那幾種。
排序算法也就那麼幾種(從以前的博客中拷貝的圖)
鏈表類的問題考的特別多,寫算法題目也常常讓寫鏈表類的題目。我此次面試寫算法基本都是在寫鏈表類的題目。
這塊也會根據項目中的問,個人項目是搜索引擎,問操做系統的問題天然多。
這塊題目是真的難以準備,都是隨機應變的。大多數場景題目都是看思惟,有些是看你思惟完了,再讓你對某個模塊擼個代碼。
說說我此次遇到的幾個深入得場景問題。
題目:
問題:
面試官:你怎麼解決性能問題,從那些方面去考慮?
我:先看服務內部是否須要優化,看看具體哪些地方消耗rt,針對該模塊優化,在看資源是否能夠擴容等等
面試官:緊接着說,資源是固定的不能擴容?怎樣保證服務正常?
我:思考了一會,表示驚訝。
其實這道題,我思路錯了,一直在糾結服務性能優化上。面試官說的很清楚,要保證服務正常。
因此必定是限流,優先保證服務穩定性。
說實話,工做中的服務不算嚴格意義上的限流,採用的是TCP鏈接隊列限流的。
TCP隊列大小固定,當隊列滿了,接下來全部新連接都會被reset,當隊列有空餘時才能夠接受新鏈接。
題目:
問題:
面試官:100個同時IO耗費時間很長,大多數線程都在等待,你怎麼優化?
我:能夠採用批量IO,用一個單獨的線程專門負責IO工做
面試官:IO線程什麼時候去進行批處理?
我:io線程使用阻塞等待,滿一批就進行IO;或者work線程每次寫數據時檢測下隊列滿了就去喚醒IO線程
面試官:那IO線程完了怎麼通知那一批work線程?
我:信號通知
面試官:信號通知不能攜帶數據結構,假設IO完了以後必須給每一個對應的work線程返回一個數據結構,怎麼辦?
我:用一個全局隊列保存IO返回的數據結構,work線程去阻塞等待返回的數據結果。
入門以前我以爲寫代碼應該挺難的,屬於技術活。如今我發現,面試是個技術活,比寫代碼難度大多了。不光要有實力,也必需要有運氣。
反正你如何準備,面試官都會問到你懷疑人生。大多數時候咱們都是順着面試官的反問去思考,結合本身的經歷回答。
三個小點提示下:
差很少了,今天分享就到這裏了。不是全部面試題,挑選了一些重要的問題說說。
今天開始在陸陸續續拒絕一些公司了,對於那些很還不錯的公司,對你滿滿誠意,拒絕起來仍是有些傷心的。
同時我在想,無論怎麼樣最終都只能選擇一家公司工做。可是在面試的時候又不得很少嘗試。
嘗試的越多,意味着作出選擇的越多。可是,在職業選擇上,是真的不是很好選。
每一個人對於工做回報的預期不一樣,有的人把工做當作所有,是實現理想價值的地方,是實現夢想的地方;有的人把工做知識當作能力鍛鍊的地方,爲了之後更大的夢想;也有人是爲了賺錢。
總結一下就是三點
在選擇職業時你們能夠根據這三方面仔細思考。要是三個條件都能知足,那就太好了。
更多時候都是有取捨的,你們自行取捨。
下一篇文章給你們總結下本次招工作中的一些總結和須要注意哪些問題。固然個人全部總結都是基於本身的經歷,若是有什麼異議,歡迎你們探討。
俊男靚女們的點贊就是龍叔創做的最大動力,奧利給!!!