後端面試知識點

知識點準備+數據結構與算法+面試技巧java

知識點準備

主要包括:計算機網絡、操做系統、關係型數據庫、非關係型數據庫、linux、編程語言、項目及實習mysql

這一部分只要是認真準備,通常問題不會太大。linux

數據結構與算法

這個比較突出硬實力,面過的每一個公司都是須要手擼幾個算法題,因此須要儘早刷題準備。(之因此單獨列爲一項,是由於樓主就是有幾家公司死在這裏的)ios

面試技巧

第一點,每一次面試後認真總結,極可能下一次面試又碰上此次不會的原題(親身經歷);面試

第二點,遇到本身研究比較好的知識點,能夠引導面試官問,往底層說(可是千萬要本身有把握),這樣若是一次面試有1到2個問題能夠說的比較深刻,面試官對你的印象會很好(屢試不爽);算法

第三點,放低身段,面對面試官的嘲諷之類的(好比嫌你low、對你的研究方向一片否認),儘可能解釋,不要懟面試官,要忍得住;實在忍不住,就懟個痛快(我試過,順利掛了)。sql

第四點,自信、自信、自信。相信本身,勇敢的去面試,便是被虐。相信本身,並且面試技巧也都是在一次次被虐中成長起來的。shell

計算機網絡

  • OSI七層協議、TCP/IP四層協議數據庫

  • 各層對應的網絡設備(路由器、交換機、網關、網橋、集線器等等),各層對應的協議編程

  • 數據鏈路層的CSMA/CD協議,筆試可能會用到

  • IP地址分類,子網劃分(筆試經常使用)

  • TCP和UDP的區別

  • TCP三次握手和四次揮手,爲何三次握手,爲何四次揮手

  • TCP精髓問題:中止等待協議、連續ARQ協議、滑動窗口、流量控制、擁塞控制(慢開始、擁塞避免、快重傳、快恢復)

  • 從瀏覽器輸入www.baidu.com到加載出頁面發生了什麼

  • GET和POST區別

  • HTTP狀態碼,HTTP1.0和HTTP1.1區別

  • HTTP緩存機制(cache-control、Expires之類的一系列請求與相應報頭字段)

  • session和cookie的區別,禁用cookie後怎麼辦

  • DNS解析的過程

  • 經常使用協議的端口

推薦:計算機網絡(謝希仁)、TCP/IP詳解、HTTP權威指南,大神能夠看一下RCF2616之類的 數據庫:

Mysql

  • 數據庫三範式及判斷、E-R圖

  • innodb和myisam存儲引擎的區別

  • 索引分類(主鍵、惟一索引、全文索引、覆蓋索引等等),最左前綴原則,哪些條件沒法使用索引

  • B樹、B+樹區別,索引爲什麼使用B+樹

  • 彙集索引與非彙集索引(使用非彙集索引的查詢過程)

  • 事務的ACID(原子性、一致性、隔離性、持久性)

  • 事務隔離級別和各自存在的問題(髒讀、不可重複讀、幻讀)和解決方式(間隙鎖及MVCC)

  • 樂觀鎖和悲觀鎖、行鎖與表鎖、共享鎖與排他鎖(inndob如何手動加共享鎖與排他鎖)

  • MVCC(增長兩個版本號)及delete、update、select時的具體控制

  • 死鎖斷定原理和具體場景

  • 查詢緩慢和解決方式(explain、慢查詢日誌、show profile等)

  • drop、truncate、delete區別

  • 查詢語句不一樣元素(where、jion、limit、group by、having等等)執行前後順序

  • mysql優化,讀寫分離、主從複製

  • 數據庫崩潰時事務的恢復機制(REDO日誌和UNDO日誌)

Redis

  • 發佈訂閱

  • 數據淘汰機制(好幾種)

  • 字典及漸進式rehash

  • RDB與AOF

  • 爲什麼高效(內存數據庫、非阻塞IO、IO多路複用、單線程、hash表、跳錶等)

  • Redis的幾種數據結構

推薦:MySQL數據庫應用從入門到精通(王飛飛,雖然名字很low)、高性能Mysql、Redis設計與實現、Redis實戰

數據結構與算法

  • 數組、鏈表(單向、雙向、雙端)、棧和隊列、二叉樹、紅黑樹、哈希表、堆(最大和最小)、圖

  • 我的經驗:棧和隊列、哈希表、鏈表、二叉樹的題較多,圖的較少

  • 查找:二分查找及其變形

  • 二叉樹:前序、中序、後序遍歷,按規定方式打印,兩個節點之間操做(最近公共祖先、距離)等問題。

  • 最大堆和最小堆:大數量級數據找最大幾個等問題、堆如何調整等問題。

  • 圖:深度優先、廣度優先、單源最小路徑Dijkstra,任意兩點間最短路徑Floyd-Warshall,最小生成樹Prime和Kruskal

  • 紅黑樹:特色及如何調整(基本上沒人讓你手擼紅黑樹)

  • 棧和隊列:常常做爲算法題要用到的數據結構

  • 八大排序:3個簡單的:冒泡、選擇、插入及其優化,5個高級的:快速排序、歸併排序、堆排序、希爾排序、桶排序(快排、歸併、堆很重要,常常手擼)

  • 時間複雜度及空間複雜度分析

  • 動態規劃dp:這個比較難,揹包問題以內的

推薦:數據結構C語言版(嚴蔚敏)、java數據結構和算法(Robert Lafore)、劍指offer及leetcode刷題、大神能夠看一下算法導論

Linux:

  • 經常使用命令:用戶控制、權限控制、進程控制、系統狀態查詢之類的

  • Linux狀態分析:CPU(top)、內存(top和free,注意buffer和cache區別)、磁盤(fdisk和df)、IO(iostat)等

  • grep和sed

  • awk(用好awk,腳本寫得好)

  • shell腳本

  • Linux目錄結構(尤爲是/proc很是重要)

  • linux文件系統結構和啓動流程

  • 防火牆iptables(這個比較少)

推薦:鳥哥私房菜、視頻(馬哥的一套 http://pan.baidu.com/s/1pL3HGT1)

操做系統

  • 一個二進制文件運行出結果,操做系統作了什麼(這是一個很全面的題)

  • 死鎖的條件及銀行家算法、資源分配圖之類的

  • 進程間通訊方式

  • linux的五種IO方式(阻塞與非阻塞、同步與異步的理解)

  • linux的select、poll、epoll的區別

  • 進程與線程區別、內核級線程與用戶級線程

  • 頁面置換算法,尤爲是lru

  • 進程調度算法

  • linux中斷響應機制

  • 虛擬內存機制

推薦:現代操做系統

java:(未接觸javaee)

  • java面向對象(一大堆知識點)

  • 多線程實現的幾種方式(Thread、Runnable、Callable、線程池)及各自的特色

  • java線程的狀態及相互轉換

  • 線程同步的幾種方式和線程間通訊

  • 生產者消費者模式

  • volatile關鍵字

  • J.U.C包的JDK源碼(CAS、AQS、ConcurrentHashMap、ThreadLocal、CyclicBarrier、CountDownLatch、Atom、阻塞隊列等等)

  • String、StringBuffer、StringBuilder

  • 異常處理機制

  • 集合框架底層JDK實現(HashMap和Hashtable區別、Set、List等等)

  • IO(writer、reader、InputStream、OutputStream)、NIO等

  • 四種引用及其區別和使用場景

  • 對象序列化與反序列化

  • lambda表達式

  • jvm虛擬機:內存分區、垃圾回收(三種垃圾回收算法、新生代老生代、垃圾回收器、G1優勢等等)、內存溢出、內存泄漏排查、JVM調優、類加載機制、雙親委派、內存模型及線程、鎖優化

  • 設計模式:幾種單例模式實現(手擼)、其餘幾種常見的設計模式(JDK中具體點)、項目中怎麼用了 語言這塊知識點太多了,基礎要紮實。

推薦:設計模式那點事、瘋狂java講義、java併發編程實戰、深刻理解java虛擬機、java編程思想

其餘

  • hadoop:mapreduce、HDFS、yarn等等(推薦:Hadoop權威指南)

  • hive:很經常使用的處理工具(推薦:Hive編程指南) 消息隊列(kafka之類的)、遠程過程調用RPC之類,

寫一些Demo本身試一下,不要被問直接就不知道 負載均衡調度(一致性哈希常常問)等 固然,還有不少其餘知識。

項目和實習

必定要把本身作的東西從頭至尾順一遍。 難點在哪裏,怎麼解決的,學到了什麼,技術亮點在哪裏,這些事常常問的。 常問的問題,像併發量多少,怎麼優化這些也要早測試早做準備。 千萬不要到時候再想,這會讓面試官感受你對本身作的都不熟悉。最好能夠本身畫一下架構圖,講的時候思路更清晰。

相關文章
相關標籤/搜索