炸裂!前浪老狗工作這5年遇到的面試題們,建議老鐵們收藏&研讀
掃描二維碼
隨時(shí)隨地手機(jī)看文章
攝于:19年9月廣州飛北京
0.先嘮嘮嗑
Paxos文章跳票了。
最近總是鴿,寫作也鴿,跑步也鴿,更別提擺地?cái)偭?,倒是最近?biāo)題黨的感覺越來越重了,主要是怕各位老鐵錯(cuò)過這篇干貨...
所以就得反思一下為什么最近總鴿?說到底時(shí)間都被我浪費(fèi)了。
根據(jù)以往的經(jīng)驗(yàn),工作時(shí)找個(gè)隔音非常好的耳機(jī),然后把手機(jī)扔得遠(yuǎn)一點(diǎn),睡前也把手機(jī)扔遠(yuǎn)點(diǎn),是可以提高時(shí)間利用效率的。
想起幾年前準(zhǔn)備考研的時(shí)候,就用只能打電話發(fā)短信的手機(jī),充一次電用好幾天,自己對(duì)時(shí)間的把控力也就好很多,現(xiàn)在看還是各種壞習(xí)慣太多了,時(shí)間也都給浪費(fèi)掉了。
但是不要走極端,閉門造成更可怕,所以合理利用時(shí)間是很重要的,好像聞到了雞湯的味道。
每次長(zhǎng)假回到老家,早上6點(diǎn)多就起來,然后忙很久看時(shí)間才10點(diǎn),瞬間覺得時(shí)間被拉長(zhǎng)了很多,感覺賺到了,但是一回北京就繼續(xù)晚睡晚起,但是我還是十分渴望一種健康的田園式作息的。
扯了這么多,只是想當(dāng)個(gè)反面教材,和盆友們共勉一下:早睡早起 遠(yuǎn)離手機(jī) 提高技能 努力賺錢。
所以今天和老鐵們聊聊面試的一些問題和觀點(diǎn),為提高收入做點(diǎn)準(zhǔn)備,題目基本上都是工作這些年自己遇到的或者身邊好友遇到的,所以整理了一下。
先看一張非常有名的圖片暗淡藍(lán)點(diǎn)(維基百科):
暗淡藍(lán)點(diǎn)是旅行者1號(hào)拍下的有史以來第一張?zhí)栂导易逭盏囊徊糠帧?/p>
從距離地球40億英里,黃道上方32°的地方,拍攝了60幅畫面,最后拼接成太陽系照片。
在遙遠(yuǎn)的旅行者1號(hào)眼里,地球只是一個(gè)光點(diǎn),即使在窄角鏡頭里,也小于1個(gè)像素,新月形的地球只有0.12個(gè)像素那么大。
很巧的是,地球正好就在靠近太陽的一道散射光線中間。
1.面試心法
1.1 不打無準(zhǔn)備之仗
知己知彼百戰(zhàn)不殆,面試之前需要在拉勾、BOSS直聘上大致了解一下招聘崗位的工作描述,不排除一些公司虛張聲勢(shì)寫些個(gè)根本用不著的玩意,所以如果覺得崗位對(duì)口卻匹配度低,也不必緊張?jiān)囋囋僬f。
內(nèi)推是了解崗位要求的重要渠道,不過從經(jīng)驗(yàn)看如果不是內(nèi)推人本組的招聘崗位,很難做到深入細(xì)致的了解,總起來說這樣的內(nèi)推和在線投遞差別并不太大,不要以為內(nèi)推就穩(wěn)了,否則筆者內(nèi)推獎(jiǎng)金早拿到手軟了。
另外相同崗位不同級(jí)別考察的側(cè)重點(diǎn)也有很大區(qū)別,因此要根據(jù)意向崗位級(jí)別在深度和廣度上進(jìn)行差異化準(zhǔn)備。
1.2 面試官什么路子
一百場(chǎng)面試就有一百種側(cè)重點(diǎn),但并不能都算得上高質(zhì)量的面試,知乎上有關(guān)于高質(zhì)量面試的話題,感興趣可以看看。
https://www.zhihu.com/question/60911582
作為主導(dǎo)者的面試官,個(gè)人認(rèn)為最重要的原則是:明確在招崗位的職責(zé)內(nèi)容,并以此為出發(fā)點(diǎn)對(duì)候選人進(jìn)行考察,一般來說候選人過往經(jīng)歷和在招崗位很相似的情況比較少,在此情況下就要從候選人的基礎(chǔ)是否扎實(shí)、學(xué)習(xí)能力如何等方面來衡量候選人快速適應(yīng)新崗位內(nèi)容的能力。
舉個(gè)例子:"并不一定要把1TB的硬盤裝滿才能證明這個(gè)硬盤是1TB的"
因此很多時(shí)候面試就像是一場(chǎng)證明500GB硬盤具備1TB空間的過程,至于測(cè)試手段是否科學(xué)就是面試官需要拿捏的了。
如果面試官都不清楚自己?jiǎn)栠@個(gè)問題究竟是為了考察什么,那么這就是一場(chǎng)低質(zhì)量的面試,所以對(duì)于候選人來說成敗與否都不用在意,畢竟這種糊涂面試官如果以后作為同事也是件很糟糕的事情。
1.3 做個(gè)合格的面試者
-
珍惜機(jī)會(huì)切忌裸面
-
理清思路清晰表達(dá)
-
拓展思維勇敢作答
-
相信自己信心滿滿
我對(duì)此深有體會(huì),筆者本碩都非CS專業(yè)且有一定跨度,遙想當(dāng)年校招隔壁實(shí)驗(yàn)室一起打球的CS碩們收割大廠offer,我這邊就算小公司也會(huì)被鄙視一通,所以無論現(xiàn)境如何, 堅(jiān)定信念、找準(zhǔn)方向、持續(xù)發(fā)力、總會(huì)有所斬獲。
2.實(shí)戰(zhàn)題目
2.1 題目分類
-
數(shù)據(jù)結(jié)構(gòu)和算法 -
數(shù)據(jù)庫存儲(chǔ) -
Linux系統(tǒng) -
開源組件 -
工程設(shè)計(jì)
2.2 題目匯總
2.2.1 編程語言
-
闡述如何設(shè)計(jì)一個(gè)C++類?實(shí)現(xiàn)String類。 -
談?wù)剬?duì)C++虛函數(shù)機(jī)制的理解。 -
STL的Vector原理及迭代器失效的理解。 -
設(shè)計(jì)一個(gè)C++HashMap類。 -
使用C++實(shí)現(xiàn)一個(gè)堆的模板類。 -
寫一個(gè)宏定義比較函數(shù)并解釋宏展開過程。 -
談?wù)剆td::move的理解和使用。 -
malloc的內(nèi)存可以用delete釋放嗎?原因? -
簡(jiǎn)述C++11的新特性以及解決了什么問題。 -
STL的Map原理、插入和刪除復(fù)雜度分析。 -
STL的Map基于紅黑樹實(shí)現(xiàn)的原因,為什么不選擇哈希表? -
為什么需要虛析構(gòu)?虛析構(gòu)和普通析構(gòu)函數(shù)的區(qū)別是什么? -
說明C++對(duì)象的內(nèi)存布局模型。 -
聊聊C++臨時(shí)對(duì)象和右值引用,寫個(gè)例子。 -
使用C++寫一個(gè)高效的多維矩陣乘法。 -
談?wù)剬?duì)智能指針的認(rèn)識(shí)并實(shí)現(xiàn)一個(gè)智能指針類。 -
STL中Map的查找時(shí)[]和find區(qū)別是什么?哪個(gè)更快? -
實(shí)現(xiàn)memcpy函數(shù)效率盡可能高。 -
嘗試實(shí)現(xiàn)C/C++中常用字符串庫函數(shù)。 -
談?wù)凜++中強(qiáng)制類型轉(zhuǎn)換的原理和使用,寫個(gè)例子。 -
談?wù)凜++的設(shè)計(jì)模式,重點(diǎn)介紹下單例模式、工程模式等。
2.2.2 數(shù)據(jù)結(jié)構(gòu)和算法
-
求二叉樹節(jié)點(diǎn)和為N的所有路徑。 -
實(shí)現(xiàn)二叉樹的鏡像。 -
實(shí)現(xiàn)兩棵二叉樹相加生成一棵新的二叉樹。 -
實(shí)現(xiàn)單鏈表的遞歸逆置和非遞歸逆置。 -
二分查找變種問題。 -
二叉樹的后序非遞歸遍歷。 -
兩個(gè)無序整型數(shù)組交換元素使得兩數(shù)組和差距最小。 -
給定整型數(shù)組和目標(biāo)數(shù)輸出數(shù)組所有兩數(shù)之和為目標(biāo)數(shù)的組合。 -
找到帶權(quán)重二叉樹中從根到葉子的最大和路徑。 -
最長(zhǎng)公共子序列LCS問題。 -
二叉樹中找到指定兩個(gè)節(jié)點(diǎn)最近公共祖先。 -
實(shí)現(xiàn)堆排序求Top10數(shù)據(jù)。 -
實(shí)現(xiàn)最小棧。 -
簡(jiǎn)述并嘗試設(shè)計(jì)一個(gè)布隆過濾器。 -
外排序的基本實(shí)現(xiàn)過程。 -
常見排序算法的性能對(duì)比。 -
快速排序的非遞歸實(shí)現(xiàn)
2.2.3 數(shù)據(jù)庫存儲(chǔ)
-
談?wù)剬?duì)于Redis的底層數(shù)據(jù)結(jié)構(gòu)的理解。 -
跳表了解嗎?Redis的zset實(shí)現(xiàn)原理以及為什么不用紅黑樹。 -
Redis哨兵原理以及集群版故障轉(zhuǎn)移過程。 -
基于Redis實(shí)現(xiàn)分布式鎖。 -
Redis漸進(jìn)式Rehash的實(shí)現(xiàn)原理。 -
Redis和LevelDB的區(qū)別以及LevelDB的LSM樹和WAL原理。 -
Redis主從同步的實(shí)現(xiàn)原理和過程、產(chǎn)生數(shù)據(jù)丟失的原因。 -
MyISAM和InnoDB的區(qū)別。 -
MySQL索引原理和優(yōu)化。 -
Redis集群版如何實(shí)現(xiàn)一致性Hash算法的。 -
Redis的單線程網(wǎng)絡(luò)框架原理和混合持久化機(jī)制。 -
類Redis數(shù)據(jù)庫Pika了解嗎?基本設(shè)計(jì)架構(gòu)是什么? -
如何設(shè)計(jì)一個(gè)緩存系統(tǒng)以及緩存擊穿的解決方案? -
一致性協(xié)議raft/paxos/2pc/3pc基本原理。 -
Redis的Gossip協(xié)議原理。 -
Redis4.0+版本的BIO線程原理和使用。 -
簡(jiǎn)述如何自己實(shí)現(xiàn)一個(gè)NoSQL,需要考慮什么。
2.2.4 Linux系統(tǒng)
-
LVS實(shí)現(xiàn)負(fù)載均衡的原理。 -
簡(jiǎn)述Linux內(nèi)存管理原理以及伙伴算法和Slab算法。 -
select和epoll的對(duì)比以及epoll實(shí)現(xiàn)的底層原理和數(shù)據(jù)結(jié)構(gòu)。 -
epoll的LT模式和ET模式下讀寫操作,實(shí)現(xiàn)一下ET模式的read/write。 -
使用C++簡(jiǎn)單實(shí)現(xiàn)一個(gè)生產(chǎn)者消費(fèi)者模型。 -
Linux虛擬內(nèi)存和物理內(nèi)存的區(qū)別與聯(lián)系 -
如何使用gdb調(diào)試多進(jìn)程、多線程程序。 -
談?wù)凜10K和C10M問題及大致實(shí)現(xiàn)思路。 -
Linux地址復(fù)用和端口復(fù)用的使用。 -
談?wù)凴eactor和Proactor模式區(qū)別與聯(lián)系。 -
嘗試基于epoll實(shí)現(xiàn)一個(gè)高并發(fā)網(wǎng)絡(luò)框架。 -
Nginx的基本原理以及負(fù)載均衡實(shí)現(xiàn)方法。 -
談?wù)凩inux服務(wù)器內(nèi)存/cpu/磁盤/網(wǎng)絡(luò)帶寬的監(jiān)控命令和問題排查。 -
談?wù)凜AP理論以及分布式一致性算法。 -
了解CpuCache嗎,如何據(jù)此來優(yōu)化代碼。 -
讀寫鎖、RCU鎖、自旋鎖的對(duì)比以及設(shè)計(jì)讀優(yōu)先/寫優(yōu)先的讀寫鎖。 -
自己設(shè)計(jì)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的讀寫鎖。 -
談?wù)刧rpc的使用以及brpc的對(duì)比。 -
對(duì)比協(xié)程和進(jìn)線程,重點(diǎn)說明系統(tǒng)開銷差異和各自優(yōu)缺點(diǎn)。 -
談?wù)剬?duì)線程同步和多線程安全的理解。 -
Https的C/S交互過程、http1.0/2.0/3.0的對(duì)比。 -
多進(jìn)程通信的方法和對(duì)比。 -
多線程同步的實(shí)現(xiàn)和線程安全。 -
實(shí)現(xiàn)一個(gè)基于LRU的本地緩存。 -
TCP/IP的擁塞控制原理和缺陷、BBR算法對(duì)比。 -
使用Python實(shí)現(xiàn)多進(jìn)程和多線程以及談?wù)剬?duì)GIL的理解。 -
網(wǎng)絡(luò)攻擊有哪些?簡(jiǎn)述DDos、CC攻擊。 -
對(duì)比內(nèi)存分配malloc/tcmalloc/ptmalloc。 -
Protobuf協(xié)議的簡(jiǎn)單原理和使用。 -
Coredump的常見原因。 -
死鎖的原理以及寫一個(gè)死鎖。 -
MapReduce的基本原理、寫個(gè)簡(jiǎn)單的map和reduce的程序。 -
同步異步阻塞非阻塞IO的理解。 -
git的基本原理以及常用命令。 -
局部性hash算法simhash的原理。 -
服務(wù)端長(zhǎng)短連接的區(qū)別、優(yōu)勢(shì)和場(chǎng)景。 -
如何避免多線程的虛假喚醒問題。 -
實(shí)現(xiàn)簡(jiǎn)單的線程池和連接池。 -
實(shí)現(xiàn)一個(gè)可以完成C10K+的TCP網(wǎng)絡(luò)框架。 -
嘗試多種方法實(shí)現(xiàn)一個(gè)守護(hù)進(jìn)程,2 magic fork了解嗎? -
驚群?jiǎn)栴}知道嗎?Nginx是如何解決的? -
談?wù)剬?duì)服務(wù)治理和服務(wù)發(fā)現(xiàn)的理解。 -
微服務(wù)接觸過嗎?談?wù)剬?duì)微服務(wù)的理解。 -
服務(wù)異步化編程了解過嗎?
2.2.5 開源組件
-
常用的MQ有哪些以及各自的對(duì)比和場(chǎng)景 -
Kafka的基本原理和實(shí)現(xiàn)要點(diǎn) -
libevent/libuv的基本原理和使用 -
Boost.Asio的原理和使用 -
微信協(xié)程庫libco原理和使用 -
DPDK的基本原理和用戶態(tài)協(xié)議棧的概念 -
Redis和Memcached對(duì)比 -
RPC框架對(duì)比:brpc/grpc/thrift -
STL源碼的理解和閱讀分析 -
Nginx的架構(gòu)、原理、使用
注:開源組件的問題一般都比較寬泛,因此沒有列舉太多具體問題。
2.2.6 工程設(shè)計(jì)
-
詞庫每個(gè)詞都有根據(jù)點(diǎn)擊率來計(jì)算的熱度,實(shí)現(xiàn)一個(gè)系統(tǒng),支持前綴匹配并且返回Top10的熱詞。 -
簡(jiǎn)述如何設(shè)計(jì)一個(gè)支持千萬級(jí)文章相似度去重的程序,來實(shí)現(xiàn)抄襲、洗稿文章的識(shí)別,時(shí)間ms級(jí),準(zhǔn)確率不低于90%。 -
小內(nèi)存機(jī)器有兩個(gè)文件A和B,分別存放5億條均長(zhǎng)64字節(jié)的url,試著找到A和B中所有重復(fù)的url。 -
嘗試實(shí)現(xiàn)一個(gè)簡(jiǎn)單的音樂推薦系統(tǒng),可以不涉及具體算法,主要說明工程部分即可。 -
設(shè)計(jì)一個(gè)黑詞服務(wù)實(shí)現(xiàn)黃反、指令詞、敏感詞等過濾功能,耗時(shí)ms級(jí)。 -
設(shè)計(jì)一個(gè)類似于微信運(yùn)動(dòng)的功能,包含占領(lǐng)封面/七日排行榜等。
工程設(shè)計(jì)題目一般會(huì)是面試官日常遇到的典型問題,類型很多,但是系統(tǒng)設(shè)計(jì)類問題經(jīng)常和海量數(shù)據(jù)問題、堆排序等一起出現(xiàn)。
對(duì)于此類問題,重要的是明確功能點(diǎn)、找準(zhǔn)解題方向、拆解子問題、分步驟合并、各個(gè)擊破、先實(shí)現(xiàn)再提優(yōu)化方案,以此原則來解決工程設(shè)計(jì)問題,基本上就很接近答案了。
這類題目其實(shí)還是很考驗(yàn)架構(gòu)能力的,所以平時(shí)要多思考產(chǎn)品模式和技術(shù)點(diǎn),算是個(gè)好習(xí)慣吧。
3.小結(jié)和感慨
特別推薦一個(gè)分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒關(guān)注的小伙伴,可以長(zhǎng)按關(guān)注一下:
長(zhǎng)按訂閱更多精彩▼
如有收獲,點(diǎn)個(gè)在看,誠摯感謝
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問題,請(qǐng)聯(lián)系我們,謝謝!