1. 程式人生 > >後臺開發面試問題整理

後臺開發面試問題整理

最近實習招聘又開始了,被一些師弟問了面試會問到的問題,於是想把之前實習、校招被問過的問題整理出來,希望對需要的人有幫助。雖然下面很多問題,但面試時可以問的問題是一個無限集,而且因人而異,只能作為一定的參考,如果把所有知識面都掌握得很牢固那問什麼都沒問題 :)這裡的問題也不是說要所有都能答得上來,能答大部分我覺得 BAT 就沒啥問題了。

個人背景:本科,偏工程,技術棧 C++,接觸過 Python、Java、PHP、Go
面試職位:後臺開發、C++工程師等
問題來源:包括但不限於阿里、騰訊、百度、網易遊戲,均為實際中遇到的。

後續再看有沒有必要標註哪些問得比較頻繁,需不需要回答參考。

C++

  • static 關鍵字有哪些用法
  • 說說繼承和組合的概念?什麼時候應該用繼承?什麼時候應該用組合
  • C++ 的菱形繼承會發生什麼問題?畫出對應的記憶體佈局
  • 說說對 C++ 智慧指標的瞭解
  • 說說虛擬函式實現機制
  • 如果父類中僅有方法,子類有一個 int 變數,這時候 sizeof 是多大
  • 指標一定是 4 個位元組嗎
  • #define 和 inline 函式的區別是什麼
  • const static 在哪裡初始化
  • 派生類的建構函式和解構函式執行順序
  • 什麼情況下基類的解構函式沒有被呼叫
  • 如何生成靜態庫?如何生成動態庫
  • 如何用 gdb 除錯
  • coredump 檢視,core 檔案分析
  • 如何除錯執行中的程式
  • 運行了幾天的程式崩掉,如何分析錯誤
  • 如何編寫 makefile
  • 編譯器的編譯過程?連結的時候做了什麼事?在中間層優化時怎麼做?
  • STL 各容器如何實現
  • 介面卡是用來做什麼的
  • queue 如何實現
  • map 用什麼實現
  • 如何實現 vector?優化 O(n) 的複製
  • 紅黑樹插入資料發現不平衡應該怎麼做
  • debug 模式和 release 模式編譯的區別
  • 如何檢視連結的動態庫

Python

  • Python 的裝飾器是什麼
  • 什麼是閉包
  • 說說 Tornado 的架構
  • 說說 flask 的架構
  • Python 的生成器是什麼?底層怎麼實現

演算法

  • 瞭解哪幾種排序方式?有沒有 O(n) 的排序
  • 平衡二叉樹的插入
  • 二叉查詢樹
  • 10個 G 的最高訪問 Ip 統計
  • 倒排索引
  • 常用快取置換演算法
  • Lru 演算法的實現及優化
  • 堆和棧的區別
  • 常用 hash 演算法
  • md5、sha1 的實現
  • 一萬個 url 的快速查詢
  • 兩個有序陣列找並集的優化
  • 10億個整數中找最大的 100 個,用 O(n)

網路

  • HTTP 和 TCP 有什麼關係
  • TCP 的三次握手過程
  • TCP 和 UDP 的區別
  • TCP 包為什麼需要 Seq
  • 包為什麼會亂序
  • 說說 HTTP 協議
  • HTTP 1.0 和 HTTP 1.1 的差別
  • HTTP 頭部有哪些欄位
  • 為什麼 HTTP 是無連線的
  • 有沒有保持長連線的 HTTP
  • TCP 的擁塞控制是怎樣的
  • TCP 中客戶端傳送 SYN 後客戶端和伺服器分別處在什麼狀態
  • 伺服器呼叫 send 後返回傳送資料大小,是否可以認為客戶端已收到?如何確保客戶端收到資料
  • 304 狀態碼的意義?在 HTTP 協議中的實現
  • 如何判斷伺服器檔案是否已修改?知道瀏覽器快取的檔案與伺服器檔案不一致?在 HTTP 中哪個欄位
  • A 類地址和 B 類地址的區別
  • 區域網沒有 ip 時如何通訊?如何得知 mac 地址
  • tcp ip 層的意義?
  • 程序 accept 時在哪裡取得套接字
  • 什麼是網路虛擬化
  • vpn 工作原理
  • TCP 對網路擁堵的判斷
  • TCP 幾種擁塞機制的重傳機制

系統

  • 指標對應的地址是不是實體地址
  • 實體地址和虛擬地址通常叫做什麼?縮寫是什麼
  • 作業系統的定址方式
  • linux 中如何計算可用記憶體
  • linux 中如何用 top 命令中檢視虛地址和實地址的資訊
  • 如何用搜索引擎去了解 top 中的虛地址?不用搜索引擎怎麼知道
  • top 的輸出中哪些是表明了記憶體
  • 根據 top 計算可用記憶體有多少
  • 用 top 看耗效能的執行緒
  • 還有哪些命令可以找出效能瓶頸
  • epoll 與 select 比較
  • epoll 的缺點,如何克服缺點
  • epoll 機制中檔案描述符就緒時如何從核心態通知到使用者態的程序
  • epoll 實現
  • 說說同步 非同步的區別
  • 程序間通訊的方式
  • 程序間的通訊有哪些機制?在資源記憶體方面比較如何
  • 同一程序執行緒間的通訊;不同程序執行緒間的通訊;
  • 如何判斷系統在哪些地方耗費效能
  • cpu 排程的單位是什麼
  • 如何讓多核 cpu 更好的利用資源
  • 什麼是缺頁
  • 如何控制兩個程序對一個數據的訪問?怎麼處理加鎖問題
  • 說一說協程
  • 是否瞭解 netstat
  • 在 shell 中用 ./a.out | wc- l 結果是多少?管道的輸入是哪個程序的
  • 談談 Linux 的檔案許可權。讓只有擁有者才能讀寫?讓擁有者只能讀和執行? 刪除檔案需要什麼許可權
  • 假如一個程序在對檔案進行讀寫,管理員把檔案刪除了怎麼辦
  • 協程與程序執行緒比較有什麼優勢
  • 計算機從電源載入開始的啟動過程
  • 什麼是中斷呼叫?中斷程式的分類
  • lsof strace ptrace gdb 使用
  • 核心態和使用者態的區別
  • 為什麼需要核心態
  • 什麼時候進入核心態
  • 多執行緒需要加鎖的變數
  • 程式在記憶體中的佈局

後端元件

  • memcached 的記憶體設計
  • 有哪些伺服器模型
  • tinyhttpd 的基本工作流程
  • cgi 程式是什麼?fastcgi 等等
  • Apache 和 nginx 中分別如何新增一個網站的訪問?如何限制 ip
  • apache 和 nginx 的不同在哪裡
  • nginx 和 apache 的架構分別是怎樣的
  • memcached 和 redis 的差別是什麼
  • 簡述 redis 的幾個操作
  • 知不知道程序池?有沒有用過
  • redis 的用什麼實現持久化?redis 的持久化是否能夠信任
  • memcached 和 redis 為什麼不能作為常用資料庫
  • tinyhttpd 中對 HTTP 請求的處理
  • 記憶體池對不同大小資料結構怎麼儲存
  • RPC 有哪幾種實現方式?如何提供介面呼叫
  • RPC 呼叫中同步、非同步、阻塞、非阻塞的區別

Web

  • cookie 和 session 的區別
  • get 與 post 的區別?訪問安全性是否有區別?如何做到真正的訪問安全
  • 如果發現網路不能訪問會檢查哪些方面?如果只有某個網站不能訪問
  • 沒有登陸後臺的情況猜測伺服器掛掉會是什麼原因?如果你是網站管理員使用者反饋你的網站不能訪問應該怎麼做
  • 在後臺發現執行程式卡時應該怎麼做?檢查哪些方面
  • 介紹 HTTPS。能否截獲 HTTPS 的資料包

資料庫

  • 資料庫之間如何同步
  • 怎麼保證資料庫同時操作幾個表的一致性
  • 怎麼保證主從伺服器中資料庫的同步
  • 資料庫 ACID 是什麼
  • 關係型資料庫和非關係型資料庫的區別
  • MySQL 的鎖的型別
  • 什麼時候 MySQL 會對錶上鎖?對一行上鎖
  • 行級鎖、表級鎖的區別
  • 高併發訪問 MYSQL 時,如何保持資料一致性
  • MySQL 有哪些儲存引擎?為什麼使用 InnoDB
  • MySQL 如何建立索引
  • 建立 A 列和 B 列的索引需要考慮什麼
  • 資料庫查詢過慢的優化
  • 索引實現機制

大資料,高併發

  • 如何設計一個高效能伺服器架構
  • 在叢集之間做快取,一個節點掛了怎麼辦
  • 叢集中 session 的同步
  • 叢集之間的訊息佇列
  • 在叢集之間做快取,一個節點掛了怎麼辦
  • 有哪些高併發的伺服器設計
  • I/O 複用模型有哪些
  • select 和 epoll 的區別
  • 秒殺中多個數據庫伺服器的同步
  • 搶票系統怎麼做?
  • 設計 qq 對應所有屬性的儲存和訪問
  • 什麼是負載均衡?負載均衡的實現

前端

  • 網頁中的 js 事件
  • $( function(){ } ) 是什麼意思?和 window.onload 什麼區別
  • 用兩句話概括 BootStrap
  • 用兩句話概括 Jquery

Docker

(因自己做過 docker 相關)

  • Docker 的適用場景
  • 什麼是無狀態應用
  • Docker 分層映象機制
  • Go 與 C++ 設計比較,優缺點是什麼
  • Go 的 import 機制優缺點
  • cgroup 原理
  • 為什麼要把專案 docker 化
  • 為什麼需要資源隔離和虛擬化

其他

  • 介紹 MVC 模式
  • SVM 原理
  • Java 記憶體回收機制
  • 位元組和字元的區別
  • 什麼時候用字元讀檔案,什麼時候用位元組讀檔案
  • 寫過的最難的程式是什麼
  • 成就感最大的專案
  • 單例模式如何實現
  • 中文的編碼有哪些
  • XSS 攻擊?舉例說明 SQL 注入
  • 用兩條能燃燒一個小時的不均勻的香計算 15 分鐘
  • 7 個工人 7 小時挖了 7 米的洞,50 小時挖 50 米的洞需要多少人?