Linu系統開發面試常見問題及學習路線

C/C++相關

  • c++虛函數原理python

  • 智能指針mysql

  • c語言如何實現c++對象以及私有成員react

  • c++多態實現linux

  • new和malloc的區別以及底層實現原理c++

  • STL中的vector怎麼擴容redis

  • 虛函數指針的初始化過程算法

  • c++11原子變量介紹sql

  • c++11特性有哪些,說用過的shell

  • 怎麼理解重載與重寫數據庫

  • 怎麼理解c++中的static關鍵字

  • vector和list 的區別

  • c++的內存分配

  • map與set的底層實現

  • 類靜態變量的初始化

  • 析構函數能夠是虛函數?爲何

  • 深拷貝與淺拷貝

  • 指針常量,常量指針的區別

c語言語法推薦書籍:《c專家編程》《c與指針》
c++語言推薦書籍:《c++ primer》《effect c++》
c++語言stl底層原理:《stl源碼刨析》

計算機網絡

  • 介紹下proactor和reactor
  • reactor的組成
  • TIME_WAIT危害
  • TIME_WAIT時長,爲何?
  • IP爲何要分片
  • 項目中說用到線程池,開多大,爲何運用線程池?
  • select和epoll區別
  • select什麼狀況返回0
  • epoll可讀狀況有哪些
  • 何時須要TCP四次揮手?
  • 如何設置非阻塞
  • 什麼是零拷貝?
  • tcp與udp的區別以及應用場景
  • 如何設計一個可靠的udp
  • 粘包如何解決
  • 講一下擁塞控制和流量控制
  • http和https區別
  • 是否瞭解中間人劫持原理
  • http協議格式,幾種方法,功能是什麼
  • chunked塊瞭解?介紹下
  • 有chunked的時候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.

數據結構相關

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

數據結構書籍 《大話數據結構》

數據庫相關

  • 如何提升查詢速度?

  • 加了索引就快了?

  • 數據庫索引底層結構

  • mysql與memcache的區別

  • mysql常見三種存儲引擎的

  • MySQL B+Tree索引和Hash索引的區別?

  • B+樹索引和哈希索引的明顯區別是:

  • 非關係型數據庫和關係型數據庫區別,優點比較?

  • mysql常見查詢優化方案

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

操做系統

  • 進程與線程的區別
  • 多進程與多線程區別,應用場景
  • volatile和原子變量的區別
  • proc文件系統
  • 自旋鎖與普通鎖的區別
  • 虛擬內存
  • 進程的內存分佈
  • 棧內存爲何由系統自動分配和釋放
  • 守護進程如何建立
  • 進程間的通訊方式及其區別,應用場景
  • 死鎖條件和解除
  • 進程調度方式
  • 對編譯鏈接的理解
  • 共享內存實現原理
  • 殭屍進程是什麼,如何處理
  • 自旋鎖在單cpu與多cpu下的使用
  • 用戶態與內核態

操做系統推薦書籍:《深刻理解操做系統》,《Linux內核設計與實現》

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多線程服務端編程》《高性能Linux服務器編程》 《linux環境編程:從應用到內核》《unix高級環境編程》
補充資料:gdb手冊和makefile詳解

大數問題

  • 有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

手撕算法

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

算法學習書籍推薦《劍指offer》 leetcode分專欄練習幾題,不在多,在於精。

相關文章
相關標籤/搜索