資本寒冬,應屆生被裁,親身經歷從被裁到上岸,咱們該如何自渡?如何保持核心競爭力?

少點代碼,多點頭髮java

上篇給你們寫了 應屆生工做一年不到,從被裁到上岸,咱們該如何自渡?如何保證本身的核心競爭力? 反響很好。可是吧,我犯了一個錯誤,敖丙提醒個人。web

太難了,失業這幾天沒發原創,連個原創都忘記標了,真是傻🐶。 因此我今天又放了一次次條,此次可標了原創。沒看的趕忙看看,穩穩的有幫助。面試

大大小小也面試了快十家公司了,有些很是重要的面試題和麪試經驗必須給你們整出來。算法

首先聲明,我投的崗位是搜索方向、後端開發(偏底層、高性能)、java後臺(這個崗位是阿里面試官看我簡歷讓我試試的)。編程

面試的問題主要分爲幾塊去說,C&C++&STL、數據結構與算法(含編程)、操做系統、多線程問題、場景題目、項目。後端

項目在社招面試中佔據的分數很高,因此面試講項目的時間會多。項目細節就不給你們透漏了,會把項目中的知識點穿插到對應的知識模塊。性能優化

項目這塊

這一塊必定是面試最重要的地方。在整個社招面試的時候,自我介紹歷來都是從項目提及,不會像校招那樣會介紹來自哪裏,叫什麼名字,會什麼技術。網絡

每次自我介紹都是這樣說的:數據結構

  • 作了什麼項目
  • 若是項目是獨立設計和開發,要描述爲何作這個項目,設計思路
  • 我在項目中扮演什麼角色(若是是團隊項目,必定描述清楚本身作了什麼功能,起到什麼做用)
  • 項目包括哪幾個模塊,每一個模塊實現什麼功能
  • 項目用了哪些技術,爲何選擇用這些
  • 項目中那些點是很是有意義的,爲何

基本就是這些,在講項目的時候注意要埋伏一些重要的伏筆,好比項目亮點,直說這些亮點很是好,至於緣由能夠鋪墊下,引發面試官的好奇。多線程

阿里面試官給過我一些建議,很是中肯的,也給你們說說。

不得不說大佬的建議很是有力量的。看完大佬給的建議趕忙從新梳理了一遍項目、看看項目有哪些亮點技術和設計、那些難點、產生什麼價值。

這是說項目的方式和準備項目方面。面試過程當中,面試官問項目是真的問到你不少都是想不到的。

你可能以爲是個很簡單的問題,平時不會在乎那種,但面試官深深的挖,總感受下面有礦同樣。

可能面試官老是能經過這種細節撂倒你,你也以爲就是你的問題,沒掌握好。

舉個例子,高效的網絡IO底層大多都是epoll實現的。

面試官先是問我epoll的原理,底層用什麼實現?爲何高效?紅黑樹結構中epoll結構體怎麼樣的?回調使用什麼觸發的?epoll的邊緣觸發和水平觸發?操做系統怎麼管理信號的?爲何這裏用紅黑樹不用哈希表?等等。

就這樣一層一層的往下挖,一直挖穿爲止。有時候你都說道操做系統,硬件中斷層面了。

可是面試官仍是如飢似渴,難道還須要說說高低電平,載波脈衝麼?

因此項目真的要細節掌握透徹,就連有時候用的一些依賴庫什麼的,你都的知道爲啥用這個,有沒有更好的?

項目問的是一方面,還有一方面就是問的

舉個例子,當時說項目中用了一種高效的內存分配器,沒有用原生的ptmalloc(也就是malloc)。

不要說new了,new的底層仍是mallloc。是由於減小多線程狀況下的鎖開銷,每次malloc都會進行加鎖和解鎖的過程。

面試官緊接着就問,那你用了tcmalloc的確減小了在多線程狀況下的鎖性能問題。若是我讓你繼續優化你有什麼方法?也是在多線程狀況下,內存分配問題。

緊接着又問,你剛剛說減小鎖的性能開銷,那你知道操做系統層面,鎖的代價是多大麼?你知道操做系統是怎麼加鎖的麼(鎖的原理是什麼)?

我是真的服,面試官什麼都懂。🐂,遇到不會的只能說這塊我沒掌握,說下個人理解吧。

社招,項目這塊說的好能夠佔據很高的分,具體多大比例看面試項目契合度了。若是你的項目恰好對方公司也用到了,那就是基本聊項目聊完。

說的很差,那就有點難了。

總結一下,項目到底該如何準備?如何說?

準備方面,幾個核心點。

  • 爲何要作這個項目?
  • 怎麼作的?
  • 項目中那些亮點、難點、價值?
  • 項目完成,有沒有解決當初的問題?收益怎麼樣?

如何說,其實簡單。只要你準備好了,說清楚,說精彩。最好還能說得跌宕起伏,在穿插幾個故事。

其實項目再怎麼準備都不爲過,不論是從項目的深度,項目的細節。

C&C++&STL問題

程序編譯問題

  • 程序編譯整個過程?每一個步驟都幹了什麼?
  • 詞法分析,分析什麼?語法分析,分析什麼?語義分析,分析什麼?

這個問題我很清楚,是阿里問的。這就是說編譯原理了,雖然說不是科班出身,可是書仍是略微看過。

不用驚訝,都是爲了修行

  • 每一個過程怎麼用GCC編譯的?
  • 如何進行反彙編?

對象模型問題

  • C++有哪幾種對象模型,C++如今使用的那一種?
  • 普通繼承的對象模型是怎麼樣的?存在虛函數的繼承對象模型是怎樣?
  • 虛繼承的對象模型是怎樣的?爲何須要虛繼承?解決什麼問題?
  • 多重繼承對下模型?
  • 成員變量會內存對齊麼?爲何須要內存對齊?底層怎麼實現的?
  • 爲何對象模型須要這樣存放?

智能指針問題

  • 智能指針有哪幾種?
  • 循環引用怎麼解決,爲何用weak_ptr就能解決?
  • 智能指針每一種的使用場景?
  • 智能指針底層怎麼支持的,怎麼作到的?

STL問題

  • STL有哪幾部分組成?
  • 爲何須要迭代器?
  • vector非尾結點刪除,和插入會有什麼問題?迭代器失效問題?
  • 優先級隊列怎麼實現的?
  • 本身實現序列式容器須要實現哪些成員函數?關聯式容器呢?
  • 配置器是幹嗎用的?
  • 仿函數使用在什麼場景?
  • boost庫使用過麼?使用過哪些函數?

多態問題

  • 爲何須要多態?
  • 多態有哪幾種?靜態多態是什麼?動態多態呢?
  • 多態如何實現的?
  • 虛表指針是什麼?虛表裏面怎麼存的?順序是什麼?爲何須要按照聲明的順序?
  • 虛表第一個位置存放的type_info是幹什麼用的?RTTI機制是幹什麼的?爲何須要RTTI機制?
  • 使用多態中遇到哪些問題?

其餘還有一些簡單問題,好比問你sizeof是編譯期仍是運行期決議的?函數調用約定是什麼?等等

數據結構與算法

直接問你數據結構的很少,通常會搭配着項目問。

  • 問你設計時爲何選用這種數據結構?

  • 常見數據結構以及底層實現?

  • 樹形結構和哈希結構的各自優缺點?

  • 有些會問你圖結構一些問題

算法也不是直接讓你寫一個快排什麼的,都是給你場景題,讓你本身選擇用什麼算法。

不排除直接讓你寫快排,好比我此次在面試某家公司的時候,讓我寫一個單鏈錶快排,不能交換數值,必須交換數據節點的地址。

查找算法和排序算法考的多。

查找算法的話就那幾種。

  • 遍歷查找
  • 樹形查找
  • 二分查找
  • 插值查找
  • 哈希查找
  • 圖的遍歷查找

排序算法也就那麼幾種(從以前的博客中拷貝的圖)

常見排序算法
常見排序算法

鏈表類的問題考的特別多,寫算法題目也常常讓寫鏈表類的題目。我此次面試寫算法基本都是在寫鏈表類的題目。

操做系統&計算機網絡

這塊也會根據項目中的問,個人項目是搜索引擎,問操做系統的問題天然多。

  • mmap如何映射?mmap在那些場景中使用?有哪些優勢?
  • 物理地址和虛擬地址如何映射?swap區是幹嗎的?4g的內存能夠運行8g的程序麼?
  • 32位系統和64位系統區別是啥?爲何32位系統地址是4字節,64位是8字節?
  • 信號槽機制是怎麼實現的?
  • 信號和信號量的區別?
  • 鎖的性能開銷,鎖的實現原理?
  • 進程和線程管理?
  • 多線程資源競爭問題?死鎖經典問題(哲學家就餐問題)?
  • io這塊問的不少,包括文件IO/網絡IO/映射IO,都是要講原理和細節?
  • 三次握手和四次揮手必問的?
  • 三次握手和四次揮手的狀態轉移?
  • socket編程每一個函數對應握手那個過程?有家面試官居然問函數參數表明的意思。
  • 網絡io的全過程,發生多少次數據拷貝?

場景題目

這塊題目是真的難以準備,都是隨機應變的。大多數場景題目都是看思惟,有些是看你思惟完了,再讓你對某個模塊擼個代碼。

說說我此次遇到的幾個深入得場景問題。

題目:

  1. 有一個單機高性能的服務,最大隻能抗qps 3k,如今由於活動qps漲到了5k。

問題:

面試官:你怎麼解決性能問題,從那些方面去考慮?

我:先看服務內部是否須要優化,看看具體哪些地方消耗rt,針對該模塊優化,在看資源是否能夠擴容等等

面試官:緊接着說,資源是固定的不能擴容?怎樣保證服務正常?

我:思考了一會,表示驚訝。

其實這道題,我思路錯了,一直在糾結服務性能優化上。面試官說的很清楚,要保證服務正常。

因此必定是限流,優先保證服務穩定性。

說實話,工做中的服務不算嚴格意義上的限流,採用的是TCP鏈接隊列限流的。

TCP隊列大小固定,當隊列滿了,接下來全部新連接都會被reset,當隊列有空餘時才能夠接受新鏈接。

題目:

  1. 有一個IO場景,100work線程處理完計算服務,把計算結果進行IO操做,IO等待時間長。

問題:

面試官:100個同時IO耗費時間很長,大多數線程都在等待,你怎麼優化?

我:能夠採用批量IO,用一個單獨的線程專門負責IO工做

面試官:IO線程什麼時候去進行批處理?

我:io線程使用阻塞等待,滿一批就進行IO;或者work線程每次寫數據時檢測下隊列滿了就去喚醒IO線程

面試官:那IO線程完了怎麼通知那一批work線程?

我:信號通知

面試官:信號通知不能攜帶數據結構,假設IO完了以後必須給每一個對應的work線程返回一個數據結構,怎麼辦?

我:用一個全局隊列保存IO返回的數據結構,work線程去阻塞等待返回的數據結果。

入門以前我以爲寫代碼應該挺難的,屬於技術活。如今我發現,面試是個技術活,比寫代碼難度大多了。不光要有實力,也必需要有運氣。

反正你如何準備,面試官都會問到你懷疑人生。大多數時候咱們都是順着面試官的反問去思考,結合本身的經歷回答。

三個小點提示下:

  • 不必定順着面試官的思路想,要更多的有本身的思路,適當的時候記得反問面試官?
  • 不必定全部問題都答出來,可是必定你答的問題很精彩。
  • 遇到不會的或者比較難的問題,先說本身的思路,再去詢問下面試官的思路,探討的方式面試。

差很少了,今天分享就到這裏了。不是全部面試題,挑選了一些重要的問題說說。

題外話

今天開始在陸陸續續拒絕一些公司了,對於那些很還不錯的公司,對你滿滿誠意,拒絕起來仍是有些傷心的。

同時我在想,無論怎麼樣最終都只能選擇一家公司工做。可是在面試的時候又不得很少嘗試。

嘗試的越多,意味着作出選擇的越多。可是,在職業選擇上,是真的不是很好選

每一個人對於工做回報的預期不一樣,有的人把工做當作所有,是實現理想價值的地方,是實現夢想的地方;有的人把工做知識當作能力鍛鍊的地方,爲了之後更大的夢想;也有人是爲了賺錢。

總結一下就是三點

  • 積累我的能力
  • 積累經濟財富
  • 實現我的價值或者夢想

在選擇職業時你們能夠根據這三方面仔細思考。要是三個條件都能知足,那就太好了。

更多時候都是有取捨的,你們自行取捨。

下一篇文章給你們總結下本次招工作中的一些總結和須要注意哪些問題。固然個人全部總結都是基於本身的經歷,若是有什麼異議,歡迎你們探討。

俊男靚女們的點贊就是龍叔創做的最大動力,奧利給!!!

相關文章
相關標籤/搜索