做者:守望者1028
連接:https://www.nowcoder.com/discuss/55353
來源:牛客網
面試高頻題:
校招過程當中參考過牛客諸位大佬的面經,可是具體哪一塊是參考誰的我也忘記了,若是您看到有些熟悉,那麼可能就是您的,若是您以爲侵權,請告訴我,我撤回。
1語言基礎(C++)
(1) 指針和引用的區別
(2) 堆和棧的區別
(3) new和delete是如何實現的,new 與 malloc的異同處
(4) C和C++的區別
(5) C++、Java的聯繫與區別,包括語言特性、垃圾回收、應用場景等(java的垃圾回收機制)
(6) Struct和class的區別
(7) define 和const的區別(編譯階段、安全性、內存佔用等)
(8) 在C++中const和static的用法(定義,用途)
(9) const和static在類中使用的注意事項(定義、初始化和使用)
(10) C++中的const類成員函數(用法和意義)
(11) 計算下面幾個類的大小:
class A {};: sizeof(A) = 1;
class A { virtual Fun(){} };: sizeof(A) = 4(32位機器)/8(64位機器);
class A { static int a; };: sizeof(A) = 1;
class A { int a; };: sizeof(A) = 4;
class A { static int a; int b; };: sizeof(A) = 4;
(12) 給一個代碼,求輸出結果
class A
{
public:
A(int x){}
}
問:A a = 1;是否正確, 若是正確, 那麼它調用了哪些函數?
這類題目更常見的是在基類和子類有不一樣實現方法。(虛函數相關,栗子不少,很少說了)
(13) C++的STL介紹(這個系列也很重要,建議侯捷老師的這方面的書籍與視頻),其中包括內存管理allocator,函數,實現機理,多線程實現等
(14) STL源碼中的hash表的實現
(15) STL中unordered_map和map的區別
(16) STL中vector的實現
(17) vector使用的注意點及其緣由,頻繁對vector調用push_back()對性能的影響和緣由。
(18) C++中的重載和重寫的區別:
(19) C ++內存管理(熱門問題)
(20) 介紹面向對象的三大特性,而且舉例說明每個。
(21) 多態的實現(和下個問題一塊兒回答)
(22) C++虛函數相關(虛函數表,虛函數指針),虛函數的實現原理(熱門,重要)
(23) 實現編譯器處理虛函數表應該如何處理
(24) 析構函數通常寫成虛函數的緣由
(25) 構造函數爲何通常不定義爲虛函數
(26) 構造函數或者析構函數中調用虛函數會怎樣
(27) 純虛函數
(28) 靜態綁定和動態綁定的介紹
(29) 引用是否能實現動態綁定,爲何引用能夠實現
(30) 深拷貝和淺拷貝的區別(舉例說明深拷貝的安全性)
(31) 對象複用的瞭解,零拷貝的瞭解
(32) 介紹C++全部的構造函數
(33) 什麼狀況下會調用拷貝構造函數(三種狀況)
(34) 結構體內存對齊方式和爲何要進行內存對齊?
(35) 內存泄露的定義,如何檢測與避免?
(36) 手寫實現智能指針類(34-37我沒碰見過)
(37) 調試程序的方法
(38) 遇到coredump要怎麼調試
(39) 內存檢查工具的瞭解
(40) 模板的用法與適用場景
(41) 成員初始化列表的概念,爲何用成員初始化列表會快一些(性能優點)?
(42) 用過C11嗎,知道C11新特性嗎?(有面試官建議熟悉C11)
(43) C++的調用慣例(簡單一點C++函數調用的壓棧過程)
(44) C++的四種強制轉換
2計算機網絡(TCP/IP)
(1) 創建TCP服務器的各個系統調用
(2) 繼上一題,說明socket網絡編程有哪些系統調用?其中close是一次就能直接關閉的嗎,半關閉狀態是怎麼產生的?
(3) 對路由協議的瞭解與介紹。內部網關協議IGP包括RIP,OSPF,和外部網關協議EGP和BGP.
(4) 路由協議所使用的算法。
(5) TCP和UDP的區別
(6) TCP和UDP相關的協議與端口號
(7) TCP(UDP,IP)等首部的認識(http請求報文構成)
(8) 網頁解析的過程與實現方法
(9) 在瀏覽器中輸入URL後執行的所有過程(如www.baidu.com)
(10) 網絡層分片的緣由與具體實現
(11) TCP的三次握手與四次揮手的詳細介紹(TCP鏈接創建與斷開是熱門問題)
(12) TCP握手以及每一次握手客戶端和服務器端處於哪一個狀態(11種狀態)
(13) 爲何使用三次握手,兩次握手可不能夠?
(14) TIME_WAIT的意義(爲何要等於2MSL)
(15) 超時重傳機制(不過高頻)
(16) TCP怎麼保證可靠性(面向字節流,超時重傳,應答機制,滑動窗口,擁塞控制,校驗等)?
(17) 流量控制的介紹,採用滑動窗口會有什麼問題(死鎖可能,糊塗窗口綜合徵)?
(18) tcp滑動窗口協議
(19) 擁塞控制和流量控制的區別
(20) TCP擁塞控制,算法名字?(極其重要)
(21) http協議與TCP聯繫
(22) http/1.0和http/1.1的區別
(23) http的請求方法有哪些?get和post的區別。
(24) http的狀態碼
(25) http和https的區別,由http升級爲https須要作哪些操做
(26) https的具體實現,怎麼確保安全性
(27) http中瀏覽器一個URL的流程,這個過程當中瀏覽器作了什麼,URL包括哪三個部分?
(28) 一個機器可以使用的端口號上限是多少,爲何?能夠改變嗎?那若是想要用的端口超過這個限制怎麼辦?
(29) 對稱密碼和非對稱密碼體系
(30) 數字證書的瞭解(高頻)
(31) 客戶端爲何信任第三方證書
(32) RSA加密算法,MD5原理(MD5不算加密算法)
(33) 單條記錄高併發訪問的優化
(34) 介紹一下ping的過程,分別用到了哪些協議
(35) TCP/IP的分片粘包過程
(36) 有沒有抓過TCP包,描述一下
(37) 一個ip配置多個域名,靠什麼識別?
(38) 服務器攻擊(DDos攻擊)
3數據庫(MySQL)
數據庫我自身不是特別熟,面試的時候通常也都坦言了,因此面試官都只是問一些基礎題目。
(1) 關係型和非關係型數據庫的區別(各自優勢)
(2) 經常使用SQL語句(DDL,DML,DCL,TCL)
(3) 數據庫中join的類型與區別(inner join, outer join, cross join, natural join, self join),注意適用場景和sql語句的編寫
(4) 數據庫的索引類型
(5) 彙集索引和非彙集索引的區別(葉節點存儲內容)
(6) 惟一性索引和主碼索引的區別
(7) 索引的優缺點,何時使用索引,何時不能使用索引(重點)
(8) 索引的底層實現(B+樹,爲什麼不採用紅黑樹,B樹)
(9) B樹和B+樹具體實現
(10) 索引最左前綴問題
(11) Mysql的優化(高頻,索引優化,性能優化)
(12) 數據庫引擎介紹,innodb和myisam的特色與區別
(13) 數據庫中事務的ACID(四大特性都要可以舉例說明,理解透徹,好比原子性和一致性的關聯,隔離性很差會出現的問題)
(14) 數據庫隔離性設置不一樣會出現的問題(髒讀、不可重複讀、丟失修改、幻讀)
(15) 數據庫的隔離級別,mysql和Oracle的隔離級別分別是什麼
(16) 數據庫鏈接池的做用
(17) Mysql的表空間方式,各自特色
(18) 分佈式事務
(19) 數據庫的範式
(20) 數據的鎖的種類,加鎖的方式
(21) 視圖的做用與使用方法(如何刪除等)
(22) 分庫分表,主從複製,讀寫分離。(我不會,也沒碰到過)
(23) 項目中哪裏用到了數據庫,怎麼用的
4Linux基礎
Linux這一塊若是不太熟,能夠直接說,可是由於開發崗位通常都是在Linux平臺下的,因此幾個基礎問題仍是要會的。
(1) Linux的I/O模型介紹以及同步異步阻塞非阻塞的區別(超級重要)
(2) 文件系統的理解(EXT4,XFS,BTRFS)
(3) 文件處理grep,awk,sed這三個命令必知必會
(4) IO複用的三種方法(select,poll,epoll)深刻理解,包括三者區別,內部原理實現?
(5) Epoll的ET模式和LT模式(ET的非阻塞)
(6) 查詢進程佔用CPU的命令(注意要了解到used,buf,cache表明意義)
(7) linux的其餘常見命令(kill,find,cp等等)
(8) shell腳本用法
(9) 硬鏈接和軟鏈接的區別
(10) 文件權限怎麼看(rwx)
(11) 文件的三種時間(mtime, atime,ctime),分別在何時會改變
(12) Linux監控網絡帶寬的命令,查看特定進程的佔用網絡資源狀況命令
5操做系統
(1) 進程與線程的區別和聯繫
(2) 一個進程能夠建立多少線程,和什麼有關
(3) 一個程序從開始運行到結束的完整過程(四個過程)
(4) 進程通訊方法(Linux和windows下),線程通訊方法(Linux和windows下)
(5) 進程調度方法詳細介紹
(6) 頁面置換方法詳細介紹
(7) 可否實現一個LRU算法
(8) 死鎖的必要條件(怎麼檢測死鎖,解決死鎖問題)
(9) 哲學家就餐,銀行家,讀者寫者,生產者消費者(怎麼加鎖解鎖,僞代碼)
(10) 海量數據的bitmap使用原理
(11) 布隆過濾器原理與優勢
(12) 布隆過濾器處理大規模問題時的持久化,包括內存大小受限、磁盤換入換出問題
(13) 同步IO和異步IO
(14) 文件讀寫使用的系統調用
(15) 線程池的瞭解、優勢、調度處理方式和保護任務隊列的方式
(16) 怎麼回收線程
(17) 殭屍進程問題
(18) 多線程同步(尤爲是若是項目中用到了多線程,很大可能會結合討論)
(19) memcache瞭解
(20) 異常和中斷的區別
(21) 通常狀況下在Linux/windows平臺下棧空間的大小
6設計模式和算法
設計模式通常都不會考太多,除非你明確說本身懂。我基本上就不涉及到設計模式的東西,因此只是簡要說說。固然,單例模式和簡單工廠模式的概念和使用場景仍是要知道的。
(1) 介紹熟悉的設計模式(單例,簡單工廠模式)
(2) 寫單例模式(餓漢模式和懶漢模式),線程安全版本
(3) MVC設計模式
算法這一塊太過龐大,幾乎都有可能,牛油們最好仍是去刷劍指offer(level 1),leetcode(若是可以刷到最高難度,算法對你來講已經不是什麼了,或者說面試對你來講簡直就是吃飯喝水的難度),左神的書《程序源代碼面試指南》(字符串,數組,dp,海量數據問題,搞定它們也就搞定面試的一半)。
下面仍是簡單的列舉一些吧(包括一些數據結構題目,只列舉簡單的,面試的算法一半不會太難,可是如今通常都是須要比較好的思惟,或者曾經接觸過這方面的題,建議就是多刷題,作題感受是刷出來的)
(1) 紅黑樹的瞭解(平衡樹,二叉搜索樹),使用場景
(2) 紅黑樹在STL上的應用
(3) 瞭解並查集嗎?(低頻)
(4) 貪心算法和動態規劃的區別
(5) 判斷一個鏈表是否有環,如何找到這個環的起點
(6) 實現一個strcpy函數(或者memcpy),若是內存可能重疊呢
(7) 實現一個循環隊列
(8) 排序算法(寫快排,歸併排序,堆排序),算法的時間複雜度,空間複雜度,是否穩定等
(9) 快排存在的問題,如何優化
(10) 反轉一個鏈表
(11) Top K問題(能夠採起的方法有哪些,各自優勢?)
(12) Bitmap的使用,存儲和插入方法
(13) 二叉樹的先序、中序、後序遍歷(非遞歸實現)
(14) 二叉樹的公共祖先(簡單地說,劍指offer上的題大都是高頻題)
(15) 1-n中有多少個1
(16) 字典樹的理解以及在統計上的應用
(17) 數組的全排列
(18) N個骰子出現和爲m的機率
(19) 海量數據問題(可參考左神的書)
(20) 一致性哈希
7智力題
我特別把智力題單獨拿出來說,是由於這一塊其實有些公司很看重(例如騰訊),可是我基本上也沒刷過這類題目,接觸很少,牛油們自行補充吧。
(1) 100層樓,只有2個雞蛋,想要判斷出那一層恰好讓雞蛋碎掉,給出策略(滴滴筆試中兩個鐵球跟這個是一類題)
(2) 毒藥問題,n拼毒藥,要快速找出哪一瓶有毒,須要幾隻小白鼠
(3) 博弈論問題
(4) 先手必勝策略問題:n本書,每次可以拿X-X本,怎麼拿必勝
(5) 放n只螞蟻在一條樹枝上,螞蟻與螞蟻之間碰到就各自往反方向走,問總距離或者時間。
(6) 瓶子換飲料問題:多少個瓶子可以換1瓶飲料,問最多能喝幾瓶java