不容錯(cuò)過(guò)的 Github萬(wàn)星程序員面試寶典
本文轉(zhuǎn)自雷鋒網(wǎng),如需轉(zhuǎn)載請(qǐng)至雷鋒網(wǎng)官網(wǎng)申請(qǐng)授權(quán)。
馬上就是秋招啦,相信很多小伙伴現(xiàn)在都在緊張的泡圖書館備戰(zhàn)和刷題。今天,我們要給大家推薦的是一份包含了阿里巴巴、華為、百度、騰訊、美團(tuán)、字節(jié)跳動(dòng)、滴滴、京東等知名互聯(lián)網(wǎng)公司技術(shù)面試題的 github 項(xiàng)目。截止目前,該項(xiàng)目已獲得 16000+ star。
項(xiàng)目的 github 地址為:https://github.com/0voice/interview_internal_reference
這份面試題庫(kù)共分為 20 個(gè)篇章,其中,前面 8 篇(第一部分)是以公司為區(qū)分,總結(jié)了各大互聯(lián)網(wǎng)公司的技術(shù)面試題和答案,后面部分(第二部分)是按照面試題的知識(shí)點(diǎn)進(jìn)行了專題總結(jié)。
在第一部分,我們不僅可以看到這些知名互聯(lián)網(wǎng)公司的面試題,還可以看到出題人和參考答案。以排在最前面的阿里巴巴為例子,我們可以看到,這里面收集了 37 個(gè)面試題。
上圖的字比較小,為了方便大家閱讀,我們把這些題目貼在下面:
阿里篇
________________________________________
1.1.1 如何實(shí)現(xiàn)一個(gè)高效的單向鏈表逆序輸出?
1.1.2 已知 sqrt(2) 約等于 1.414,要求不用數(shù)學(xué)庫(kù),求 sqrt(2) 精確到小數(shù)點(diǎn)后 10 位
1.1.3 給定一個(gè)二叉搜索樹 (BST),找到樹中第 K 小的節(jié)點(diǎn)
1.1.4 LRU 緩存機(jī)制
1.1.5 關(guān)于 epoll 和 select 的區(qū)別,以下哪些說(shuō)法是正確的
1.1.6 從 innodb 的索引結(jié)構(gòu)分析,為什么索引的 key 長(zhǎng)度不能太長(zhǎng)
1.1.7 MySQL 的數(shù)據(jù)如何恢復(fù)到任意時(shí)間點(diǎn)?
1.1.8 NFS 和 SMB 是最常見的兩種 NAS(Network Attached Storage)協(xié)議,當(dāng)把一個(gè)文件系統(tǒng)同時(shí)通過(guò) NFS 和 SMB 協(xié)議共享給多個(gè)主機(jī)訪問(wèn)時(shí),以下哪些說(shuō)法是錯(cuò)誤的
1.1.9 輸入 ping IP 后敲回車,發(fā)包前會(huì)發(fā)生什么?
1.2.0 請(qǐng)解釋下為什么鹿晗發(fā)布戀情的時(shí)候,微博系統(tǒng)會(huì)崩潰,如何解決?
1.2.1 現(xiàn)有一批郵件需要發(fā)送給訂閱顧客,且有一個(gè)集群(集群的節(jié)點(diǎn)數(shù)不定,會(huì)動(dòng)態(tài)擴(kuò)容縮容)來(lái)負(fù)責(zé)具體的郵件發(fā)送任務(wù),如何讓系統(tǒng)盡快地完成發(fā)送?
1.2.2 有一批氣象觀測(cè)站,現(xiàn)需要獲取這些站點(diǎn)的觀測(cè)數(shù)據(jù),并存儲(chǔ)到 Hive 中。但是氣象局只提供了 api 查詢,每次只能查詢單個(gè)觀測(cè)點(diǎn)。那么如果能夠方便快速地獲取到所有的觀測(cè)點(diǎn)的數(shù)據(jù)?
1.2.3 如何實(shí)現(xiàn)兩金額數(shù)據(jù)相加(最多小數(shù)點(diǎn)兩位)
1.2.4 關(guān)于并行計(jì)算的一些基礎(chǔ)開放問(wèn)題
1.2.5 請(qǐng)計(jì)算 XILINX 公司 VU9P 芯片的算力相當(dāng)于多少 TOPS,給出計(jì)算過(guò)程與公式
1.2.6 一顆現(xiàn)代處理器,每秒大概可以執(zhí)行多少條簡(jiǎn)單的 MOV 指令,有哪些主要的影響因素
1.2.7 請(qǐng)分析 MaxCompute 產(chǎn)品與分布式技術(shù)的關(guān)系、當(dāng)前大數(shù)據(jù)計(jì)算平臺(tái)類產(chǎn)品的市場(chǎng)現(xiàn)狀和發(fā)展趨勢(shì)
1.2.8 對(duì)大數(shù)據(jù)平臺(tái)中的元數(shù)據(jù)管理是怎么理解的,元數(shù)據(jù)收集管理體系是怎么樣的,會(huì)對(duì)大數(shù)據(jù)應(yīng)用有什么樣的影響
1.2.9 你理解常見如阿里,和友商大數(shù)據(jù)平臺(tái)的技術(shù)體系差異以及發(fā)展趨勢(shì)和技術(shù)瓶頸,在存儲(chǔ)和計(jì)算兩個(gè)方面進(jìn)行概述
1.3.0 在云計(jì)算大數(shù)據(jù)處理場(chǎng)景中,每天運(yùn)行著成千上萬(wàn)的任務(wù),每個(gè)任務(wù)都要進(jìn)行 IO 讀寫。存儲(chǔ)系統(tǒng)為了更好的服務(wù),經(jīng)常會(huì)保證高優(yōu)先級(jí)的任務(wù)優(yōu)先執(zhí)行。當(dāng)多個(gè)作業(yè)或用戶訪問(wèn)存儲(chǔ)系統(tǒng)時(shí), 如何保證優(yōu)先級(jí)和公平性
1.3.1 最大頻率棧
1.3.2 給定一個(gè)鏈表,刪除鏈表的倒數(shù)第 N 個(gè)節(jié)點(diǎn),并且返回鏈表的頭結(jié)點(diǎn)
1.3.3 如果讓你設(shè)計(jì)一個(gè)通用的、支持各種數(shù)據(jù)庫(kù)秒級(jí)備份和恢復(fù)的系統(tǒng),你會(huì)如何設(shè)計(jì)
1.3.4 如果讓你來(lái)設(shè)計(jì)一個(gè)支持?jǐn)?shù)據(jù)庫(kù)、NOSQL 和大數(shù)據(jù)之間數(shù)據(jù)實(shí)時(shí)流動(dòng)的數(shù)據(jù)流及處理的系統(tǒng),你會(huì)考慮哪些問(wèn)題?如何設(shè)計(jì)?
1.3.5 給定一個(gè)整數(shù)數(shù)組和一個(gè)整數(shù),返回兩個(gè)數(shù)組的索引,這兩個(gè)索引指向的數(shù)字的加和等于指定的整數(shù)。需要最優(yōu)的算法,分析算法的空間和時(shí)間復(fù)雜度
1.3.6 假如給你一個(gè)新產(chǎn)品,你將從哪些方面來(lái)保障它的質(zhì)量?
1.3.7 請(qǐng)?jiān)u估一下程序的執(zhí)行結(jié)果?
打開這些面試題,我們可以看到出題人和參考答案。如打開第一題:「如何實(shí)現(xiàn)一個(gè)高效的單向鏈表逆序輸出?」我們看到的內(nèi)容如下:
問(wèn)題:如何實(shí)現(xiàn)一個(gè)高效的單向鏈表逆序輸出?
出題人:阿里巴巴出題專家:昀龍/阿里云彈性人工智能負(fù)責(zé)人
參考答案:下面是其中一種寫法,也可以有不同的寫法,比如遞歸等。供參考。
- typedef struct node{
- int data;
- struct node* next;
- node(int d):data(d), next(NULL){}
- }node;
- void reverse(node* head)
- {
- if(NULL == head || NULL == head->next){
- return;
- }
- node* prev=NULL;
- node* pcur=head->next;
- node* next;
- while(pcur!=NULL){
- if(pcur->next==NULL){
- pcur->next=prev;
- break;
- }
- next=pcur->next;
- pcur->next=prev;
- prev=pcur;
- pcur=next;
- }
- head->next=pcur;
- node*tmp=head->next;
- while(tmp!=NULL){
- cout<<tmp->data<<"\t";
- tmp=tmp->next;
- }
- }
第二部分分為了 12 個(gè)技術(shù)專題,分別是 MySQL 篇、Redis 篇、MongDB 篇、Zookeeper 篇、Nginx 篇、算法篇、內(nèi)存篇、cpu 篇、磁盤篇、網(wǎng)絡(luò)通信篇、安全篇和并發(fā)篇。這里面針對(duì)每個(gè)專題,整理了一些經(jīng)常會(huì)遇到的面試題。
例如,MySQL 篇包含的題目如下:
和前面一樣,這里也給出了參考答案。打開上圖的第一個(gè)題目,我們看到如下內(nèi)容:
題目:主鍵 超鍵 候選鍵 外鍵是什么
定義
超鍵 (super key): 在關(guān)系中能唯一標(biāo)識(shí)元組的屬性集稱為關(guān)系模式的超鍵
候選鍵 (candidate key): 不含有多余屬性的超鍵稱為候選鍵。也就是在候選鍵中,若再刪除屬性,就不是鍵了!
主鍵 (primary key): 用戶選作元組標(biāo)識(shí)的一個(gè)候選鍵程序主鍵
外鍵 (foreign key):如果關(guān)系模式 R 中屬性 K 是其它模式的主鍵,那么 k 在模式 R 中稱為外鍵。
舉例
比如有如下數(shù)據(jù):
學(xué)號(hào) | 姓名 | 性別 | 年齡 | 系別 | 專業(yè) |
20020612 | 李輝 | 男 | 20 | 計(jì)算機(jī) | 軟件開發(fā) |
20060613 |
張明 | 男 | 18 | 計(jì)算機(jī) | 軟件開發(fā) |
20060614 |
王小玉 | 女 |
19 |
物理 |
力學(xué) |
20060615 | 李淑華 | 女 |
17 |
生物 |
動(dòng)物學(xué) |
20060616 | 趙靜 | 男 |
21 |
化學(xué) |
食品化學(xué) |
20060617 | 趙靜 | 女 |
20 |
生物 |
植物學(xué) |
1.超鍵
在關(guān)系中能唯一標(biāo)識(shí)元組的屬性集稱為關(guān)系模式的超鍵。
于是我們從例子中可以發(fā)現(xiàn) 學(xué)號(hào)是標(biāo)識(shí)學(xué)生實(shí)體的唯一標(biāo)識(shí)。那么該元組的超鍵就為學(xué)號(hào)。
除此之外我們還可以把它跟其他屬性組合起來(lái),比如:
(學(xué)號(hào),性別)
(學(xué)號(hào),年齡)
這樣也是超鍵。
2.候選鍵
不含多余屬性的超鍵為候選鍵。
根據(jù)例子可知,學(xué)號(hào)是一個(gè)可以唯一標(biāo)識(shí)元組的唯一標(biāo)識(shí),因此學(xué)號(hào)是一個(gè)候選鍵,實(shí)際上,候選鍵是超鍵的子集,比如(學(xué)號(hào),年齡)是超鍵,但是它不是候選鍵。因?yàn)樗€有了額外的屬性。
3.主鍵
用戶選擇的候選鍵作為該元組的唯一標(biāo)識(shí),那么它就為主鍵。
簡(jiǎn)單的說(shuō),例子中的元組的候選鍵為學(xué)號(hào),但是我們選定他作為該元組的唯一標(biāo)識(shí),那么學(xué)號(hào)就為主鍵。
4.外鍵
外鍵是相對(duì)于主鍵的,比如在學(xué)生記錄里,主鍵為學(xué)號(hào),在成績(jī)單表中也有學(xué)號(hào)字段,因此學(xué)號(hào)為成績(jī)單表的外鍵,為學(xué)生表的主鍵。
總結(jié)
主鍵為候選鍵的子集,候選鍵為超鍵的子集,而外鍵的確定是相對(duì)于主鍵的。
雖然這只是一個(gè)非常簡(jiǎn)單的概念題,但由此我們也可以看到,這份題庫(kù)給出的答案特別非常詳細(xì),不僅對(duì)問(wèn)題中提出的概念進(jìn)行了解釋,還用具體的例子進(jìn)行了說(shuō)明,方便同學(xué)們的容易理解和記憶。
還在等什么,趕快收藏這份資源開始學(xué)習(xí)吧~一分耕耘一分收獲,相信同學(xué)們接下來(lái)一定會(huì)拿到心儀的 offer,加油!