“互聯網企業每年校招的技術面試形式類似,大多是對面試者技術基礎的考察。本文面對C++後臺開發崗位,收集總結了百餘道技術基礎題。供大家學習和準備。 ”
C++語言基礎
- c++具有哪些特點和性質,和c有什麼區別
- 指針的作用
- 全局變量的缺點
- c++對象的生命週期
- c和C++中動態分配內存是怎樣實現
- 爲什麼建議多用組合少用繼承
- 編譯語言和解釋語言的區別
- 面對對象的思想,還有什麼其它編程思想
- 多態是什麼,有哪幾種
- doule 和float二進制怎麼存的,double 1.5 和 float 1.5 的大小
- c++的對象模型(內存模型,虛函數表,虛函數指針)
- 有沒有了解智能指針
- dynamic_cast有什麼用
- 智能指針shared_ptr,循環引用的情況怎麼辦,weak_ptr的弱引用什麼意思
- 野指針是什麼
- lambda函數
- rand函數需要注意什麼
- c++模板
- static關鍵字
- 常量指針與指針常量
- 函數參數傳常引用和普通函數參數
- 內存泄漏原因及如何避免
- 深拷貝和淺拷貝
- 右值引用
- 虛表
- 所有類都有虛表嗎
- C++是單繼承還是多繼承,菱形繼承的問題,爲什麼虛繼承能解決
- 強制類型轉換,static_cast和dynamic_cast的區別,爲什麼dynamic_cast能夠向上向下轉
- RTTI的底層實現原理,如何動態獲得類型,怎麼判斷指針對象的繼承關係
- 函數重載?有什麼用?怎麼實現的?爲什麼不能用返回值不同函數名形參列表相同做重載呢?
- 重載和重寫
- 結構體和類的區別
- 拷貝構造和移動構造
- 什麼情況下必須使用拷貝構造函數
- 內存堆棧對比,分配效率
- 全局變量放哪兒
- 碎片會出現在哪內存區域
- malloc底層實現
- volatile作用,寄存器
- new和malloc的區別
- delete的幾種方式
- 面向對象的特點
- 子類和父類在構造和析構的時候有什麼特點嗎,順序
- 基類的析構函數,不是虛函數會造成什麼問題
- 純虛函數和虛函數的區別
- 引用的作用
- 常引用
- 結構體和聯合體,對聯合不同成員賦值,其它的值會改變嗎
- c++是類型安全的嗎
- const和define的區別,哪種更好
- 指針和數組的區別
- 全局變量和局部變量的區別,操作系統和編譯器是怎麼知道的
- 標準模板庫,哪些數據結構,怎麼分類
- 迭代器
- 什麼時候用vector和list,實現的方案
- STL vector擴容怎麼實現
- STL中map和unordered_map的區別,兩種map的底層實現
設計模式
- 設計模式原則
- 單例模式的線程安全實現
- 觀察者模式
- 代理模式
- 爲什麼要採用工廠模式,策略模式,一定要用嗎
數據結構和算法
- 常見排序算法及其複雜度,哪些穩定和非穩定
- 快速排序爲什麼隨機選初始值
- 建堆的過程及建堆後如何排序
- 快速排序和歸併排序的過程
- 數據結構知道哪些,對比下數組和鏈表
- 鏈表的作用
- 紅黑樹和平衡二叉搜索樹
- 哈希表
- 哈希衝突解決辦法
- 如何判斷圖的連通性
- 堆和棧的區別
- b+樹
操作系統
- Linux常用命令,查看系統負載情況,查看端口號,端口號被佔用怎麼辦
- 如何查看服務器運行時間?看是否有重啓和宕機?
- Linux系統的gdb調試
- Linux查看進程的命令
- ping一個ip發生了什麼
- 鎖的概念
- 如何避免死鎖
- 進程和線程的區別
- 線程同步的方式,讀寫鎖
- 進程間的通信方式
- 多線程中對A,B同時加鎖的時候,需要注意什麼問題(死鎖的情況)
- 如何避免死鎖
- epoll和select區別,水平觸發和邊沿觸發
- Reactor模式,調度器、工作線程和請求隊列都會幹什麼,狀態發生什麼改變
- 單進程如何進行IO複用
- epoll的單線程
- select的實現需要多線程嗎
- 虛擬內存和物理內存
- 爲什麼用多線程,不同線程共享棧嗎
- 軟中斷什麼時候發生
- 殭屍進程、孤兒進程
- 操作系統複製粘貼如何實現
- 頁面置換算法
- 進程調度算法
- 線程池怎麼實現
計算機網絡
- TCP的TIME_WAIT 和CLOST_WAIT
- time_wait 和close_wait,客戶端斷開連接了,服務器會怎樣
- TCP的可靠性,超時重傳怎麼實現
- UDP和TCP對比
- http狀態碼
- HTTP和HTTPS
- HTTPS加密過程
- 非對稱加密和對稱加密算法
- 代理
- udp的限制,udp是有序還是無序
- 輸入一個URL,回車後直到渲染出頁面中間發生了什麼?(dns是屬於TCP還是UDP)
- tcp三次握手
- session和cookie的區別
- get和post的區別
- 滑動窗口
- ARP協議,描述一下原理
- 路由器和交換機分別在什麼層
手撕代碼
- 手寫LRU頁面置換算法
- 手寫最小堆
- 從n個數中抽m個出來,按從大到大輸出所有排列組合
- 改編的約瑟夫環問題
- 計算化學分子式每個元素的個數,如HMg2(H2O(P2S3))3NH3,每個元素以大寫字母開頭
- 鏈表操作,奇數位遞增,偶數爲遞減,重新排序爲遞增
- 鏈表每隔k個反轉
- 實現 void* memmove(void* dst, const void* src, size_t n)
- N個數重複3次,一個數重複一次,請找到這個數; 3N+1, int32_t, vector<int32_t>
- 實現一下string類,包括構造函數,拷貝構造函數,析構函數,運算符重載等
- 一顆多叉樹,實現層序遍歷以及元素賦值操作
- 手寫快排
開放性試題
- 手機的指紋識別是如何實現的?
- 抽獎箱設計,三種顏色A,B,C,要求每種顏色的權重(概率)分別爲1:10:100,怎麼產生三種顏色
- 兩個文件有上億個qq號,找重複的
- 大量qq號存儲、查詢和查重
- 1-n,缺失了一個數,找到這個數
- 假設內存不夠,相加溢出,怎麼辦
送命題
- 如何看待加班現象
- 不做技術轉什麼方向
- 看過什麼書,看過什麼庫
- 意向城市
- 有沒有了解顯卡
- 課餘時間都在幹什麼
- 學科課程比較突出的
- 在項目中的優勢和劣勢
- 字節範兒
- 作爲項目負責人要注意到什麼
- 目前爲止經歷最大的挫折是什麼?如何走出來的?
- 平時有什麼興趣愛好?
- 爲什麼不繼續做原來的方向?
- 對工作的誠實有什麼看法?
- 你的職業規劃?
我的個人微信公衆號:【業餘碼農】,裏面有校招經驗分享,還有面經分享;之後還會分享我自己對於互聯網行業的一些看法,有什麼問題也可以在上面問我。感興趣的同學可以關注下。
【關注福利】關注公衆號後臺回覆【秋招】,即可免費獲得面經答案解析一份。