天天看點

一份高品質的背景開發面經,注意收藏二 面試情況三 相關知識點彙總

來源:我是程式員小賤

作者:LJ

前言

這篇文章來源于我的一位朋友,和我一樣參加了去年了秋招,這份面經我看了下,很多問題都是高頻面試題,而且總結的挺全,在此分享給大家。先看下大緻目錄

一 自我介紹

二 面試情況

三 相關知識點彙總

1 c/c++相關

2 計算機網絡

3 資料結構相關

4 資料庫相關- mysql常見查詢優化方案

5 作業系統

6 Linux基礎知識及應用程式設計(背景必備!)

7 大數問題

8 手撕算法(遞歸非遞歸)

9 針對項目相關

10 場景題

11 架構/分布式/中間件相關

12 總結

一 自我介紹

本人小碩,秋招期間參加了不少安全類相關公司(深信服,綠盟等),另外參加了京東,小米,滴滴等網際網路公司面試,同時也面試了幾個研究所和一個銀行,下面總結下秋招相關情況。

二 面試情況

公司名稱 面試崗位 面試情況
小米 Linux核心開發 三面!挂
深信服 c/c++開發 四面 拿到offer
bigo c/c++開發 四面 拿到口頭offer
滴滴 網絡研發工程師 三面 挂場景
人大金倉 c語言開發工程師 三面 拿offer
京東 c++研發工程師 二面!挂
綠盟科技 防火牆開發工程師 沒有去參加二面
浦發 軟體開發工程師 拿到offer
中國網安(30所) c防火牆開發 拿到offer
映客直播 背景開發工程師(go) 二面挂(印象很深刻)
鼎橋(網上怎麼變成了華為鼎橋。。) c/c++軟體開發 拿到offer

這是小藍整理的Linux背景開發面試高頻題目(除了語言部分,其他部分差别應該不大),并提供相關知識的書籍或視訊資源。

帥地玩程式設計注:雖然是Linux背景開發,但是面試時,問語言特性地部分還是很少地,是以除語言特性部分外,其他基本差不多。

三 相關知識點彙總

1 c/c++相關

  • c++虛函數原理
  • 智能指針
  • c語言如何實作c++對象以及私有成員
  • c++多态實作
  • new和malloc的差別以及底層實作原理
  • STL中的vector怎麼擴容
  • 虛函數指針的初始化過程
  • c++11原子變量介紹
  • c++11特性有哪些,說用過的
  • 怎麼了解重載與重寫
  • 怎麼了解c++中的static關鍵字
  • vector和list 的差別
  • c++的記憶體配置設定
  • map與set的底層實作
  • 類靜态變量的初始化
  • 析構函數可以是虛函數?為什麼
  • 深拷貝與淺拷貝
  • 指針常量,常量指針的差別

c語言文法推薦書籍: 《c專家程式設計》《c與指針》

c++語言語言推薦書籍:《c++ primer》《effect c++》

c++語言stl底層原理:《STL源碼剖析》

2 計算機網絡

  • 介紹下proactor和reactor
  • reactor的組成
  • TIME_WAIT危害
  • TIME_WAIT時長,為什麼?
  • IP為什麼要分片
  • 項目中說用到線程池,開多大,為什麼運用線程池?
  • select和epoll差別
  • select什麼情況傳回0
  • epoll可讀情況有哪些
  • 什麼時候需要TCP四次揮手?
  • 如何設定非阻塞
  • 什麼是零拷貝?
  • tcp與udp的差別以及應用場景
  • 如何設計一個可靠的udp
  • 粘包如何解決
  • 講一下擁塞控制和流量控制
  • http和https差別
  • 是否了解中間人劫持原理
  • http協定格式,幾種方法,功能是什麼
  • chunk塊了解?介紹下
  • 有chunk的時候contentlength是什麼樣子
  • 半連接配接在哪個階段
  • 三次握手四次握手詳細過程,越詳細越好
  • libevent結構,内部實作
  • tcp的可靠性展現在哪裡
  • ARP協定工作流程
  • epoll中的ET和LT模式
  • 介紹下滑動視窗
  • 指針與引用的差別
  • Accept發生在三次握手哪個階段
  • Udp的接收緩沖區和發送緩沖區和tcp的差別
  • http長連接配接與短連接配接的差別
  • udp包長度
  • 一次url通路會經曆哪些過程
  • 資料包亂序會處理?
  • seq為1000,發送了1000個資料,下一個seq是多少?
  • syn如果丢了,重傳多少次

tcp/ip相關推薦書籍:《tcp/詳解:1》

熟悉使用wireshark捕包工具,加深印象可以使用python的一個庫,scapy/dpkt.

3 資料結構相關

  • hash處理沖突的方法
  • 二分查找及其變種
  • 數組與連結清單的差別
  • redis資料結構用過哪些,了解跳表?
  • 紅黑樹比平衡二叉樹有哪些優點
  • 二叉樹,b+樹,hash,二叉查找樹差別
  • 說說紅黑樹的特性
  • 各種樹,排序的時間複雜度
  • 資料庫索引,事務,事務級别
  • 不考慮事務的隔離性會出現什麼問題
  • 事務隔離級别
  • 索引的類型
  • AC自動機時間複雜度

資料結構書籍《大話資料結構》

極客時間王大佬/譚大佬專欄

4 資料庫相關

  • 如何提高查詢速度?
  • 加了索引就快了?
  • 資料庫索引底層結構
  • mysql與memcache的差別
  • mysql常見三種存儲引擎的
  • MySQL B+Tree索引和Hash索引的差別?
  • B+樹索引和哈希索引的明顯差別是:
  • 非關系型資料庫和關系型資料庫差別,優勢比較?

- mysql常見查詢優化方案

mysql書籍推薦:《mysql必知必會》,《高性能Mysql》

5 作業系統

  • 程序與線程的差別
  • 多程序與多線程差別,應用場景
  • volatile和原子變量的差別
  • proc檔案系統
  • 自旋鎖與普通鎖的差別
  • 虛拟記憶體
  • 程序的記憶體分布
  • 棧記憶體為什麼由系統自動配置設定和釋放
  • 守護程序如何建立
  • 程序間的通信方式及其差別,應用場景
  • 死鎖條件和解除
  • 程序排程方式
  • 對編譯連接配接的了解
  • 共享記憶體實作原理
  • 僵屍程序是什麼,如何處理
  • 自旋鎖在單cpu與多cpu下的使用
  • 使用者态與核心态
作業系統推薦書籍:《深入了解作業系統》,《Linux核心設計與實作》

6 Linux基礎知識及應用程式設計(背景必備!)

  • 如何檢視程序打開的檔案
  • 介紹下nm與ldd指令
  • shell指令查記憶體,端口 ,io通路量,讀寫速率
  • awk grep具體應用
  • 硬連結與軟連接配接,目錄可不可以用硬連結
  • 常見指令netstat iptable tcpdump top
  • makefile介紹下(cmake介紹下)
  • gdb檢視堆棧中所有周遊
  • gdb檢視shared_ptr

    指向的内容

  • gdb如何調試多程序多線程
  • g++和gcc編譯出來有什麼差別
  • 死鎖怎麼調試
  • core檔案中是什麼,gdb調試core檔案
  • 如何讀取一個10G檔案,cat一個10g檔案會發生什麼

Linux基礎指令推薦書籍:《Linux就該這麼學》

Linux應用程式設計推薦書籍《背景開發應用與實踐》《Linux多線程服務端程式設計》

補充資料:gdb手冊和makefile詳解

7 大數問題

  • 有200億qq,但實際隻有25億使用者,找到重複的qq
  • 25億qq占用記憶體多大
  • 1-100萬,計算找出所有的質數(計算密集型任務),用單線程與多線程怎麼處理
  • 1個G的檔案寫程式,從A機器發送到B機器,怎麼發?
  • 100G的文本,每行80k還是80字元,提示用多個機器,多程序,多線程,求出重複最多的行。一個機器記憶體8G,計算每個機器大概分多少?能讀取100G的文本嗎?找重複率前十的文本
  • 三個有序的序列,查找公共的部分,第一次我說用哈希表,他說序列太大,空間複雜度要低點,我說了二分查找,他問三個序列查找的順序和時間複雜度。(時間複雜度為N*logN *logN)
  • 100WURL,如何存儲
  • 10台伺服器,100w使用者,如何進行負載均衡,如何有個伺服器挂掉了咋辦
  • 10000個資料查找最小的100個?時間複雜度?
  • 場景題:QQ的伺服器會儲存登入使用者的QQ号,隻要有登入,檔案裡面就會有記錄,現在需要統計哪些QQ号登入過,怎麼做?(先說了分治用小檔案,他說除了這個了,我說bit數組,他就問需要多大記憶體?)
大數問題通常的套路是hash,分治,布隆,bitmap,如果推薦的話還是上面資料結構相關資料.當然如果能了解下比如hdfs檔案系統,mapreduce,spark/flink流式計算最佳哈

8 手撕算法(遞歸非遞歸)

  • 連結清單有無環判斷
  • 實作一個單例模式
  • 給一個字元串判斷單詞數
  • 開方算法
  • 青蛙跳台階
  • 常用排序(快排和歸并要寫吐)
  • 反轉連結清單
  • 兩個連結清單,尋找公共節點
  • 查找字元串中不重複的最長子串
  • LRU
  • 手寫求樹的深度的代碼
  • 手寫生産者消費者
  • 程式設計實作string類
  • 兩個數組A,B,A有的B都有,求B-A;
  • 輸入一個字元串,輸出它的全排列
  • 統計完全二叉樹多少個節點
  • memcpy實作

算法學習書籍推薦《劍指offer》,建議三遍哈。

leetcode分專欄練習幾題,不在多,在于精。

9 針對項目相關

  • 介紹一個你做的比較的項目,幾個人做的,擔任什麼角色
  • 項目的技術點在哪裡
  • 項目不足在哪裡
  • 你在項目中學到了什麼
  • 讓你優化項目中的一點,如何做
  • 項目什麼架構
  • 測過系統性能嗎,挂掉怎麼辦?
最好是自己做過的項目,即時不是也需要弄明白其架構,為什麼這麼做,有什麼優點,什麼優化方案?

10 場景題

  • 給一個場景,設計一下定時對url進行爬蟲,比如對新浪1個小時爬蟲n次,然後某些部落格可能1個星期爬蟲1次。
  • 給一個場景,設計伺服器實作爬蟲的url去重,如何讓多個伺服器對一個url爬蟲指定次數
  • 好多小檔案,設計一個伺服器來實作如何存儲
  • 設計兩地高效傳檔案

11 架構/分布式/中間件相關

  • 常用負載均衡政策
  • 一緻性hash原理
  • 緩存容災中資料一緻性問題
  • 了解cap理論嗎
  • 介紹下高可用,高性能,可伸縮基本概念。。
  • 了解微服務?docker?k8s?
  • Nginx了解到什麼程度,nginx配置更新實作,事件模型
推薦書籍:《redis設計與實作》《從0開始學架構》《docker入門到實踐》《大型網站技術架構-核心原理與案例分析》

12 總結

帥地玩程式設計注:在面試中,特别是大廠面試,基礎真的特别重要,在這裡祝大家此次春招都能收割自己心儀的 offer,還有就是上面列舉的那些書籍,大部分都可以在我之前整理的那個 GitHub 上找到哦,點選閱讀原文,即可直達(電腦打開更合适)