因為一些個人原因,陸陸續續參加了一些校招補招、社招的筆試和面試(BAT),也包括一些國外公司(Spotify, Google, Ericsson),最後有幸被網易收入麾下,拿到了S。下面羅列一些我復習中的要點,如果能以此為一個參考,做好充足的准備,國內BAT這些公司的基礎技術筆試和面試應該沒什麼問題。當然對於一些大公司,基礎知識可能不是最被看重的,關鍵是學習能力,獨立解決問題的能力,是否是一個"靈性"的人,我一直覺得我們程序員是在創造一個新的世界。
當然有一些技術老人,也可以看看這個,當作一個復習點,溫故知新。
Java 常見基礎知識面試點:
- Hashcode()和equals(), 明白背後的原理,包括hashcode()的用法,各自的區別,如何,何時覆蓋,為何覆蓋
- 區別new String()和"" 申明的字符串的區別,String不變量,堆上創建,何時棧上創建,傳遞變量時候的按值傳遞
- Comparable 接口,Comparator類,用來做比較,主要是用於集合中,排序,插入等等
- 類初始化,變量初始化,靜態變量,靜態區,常量區等等
- 繼承多態需要知道的有super, this, 相應的可能涉及到的設計模式
- Java的內部類,有哪幾種聲明方式,有沒有static的區別
- 集合,collection,array。 set, list, queue這些接口間的區別,set不可重復, arraylist的實現和linkedlist的實現區別,HashMap, HashTable。涉及到各種效率問題等,裡面最好閱讀一下源碼
- 集合的遍歷方法和使用iterator來遍歷的區別,集合可否修改,能否刪除其中的一個元素,然後size是否變化等等問題
- JAVA垃圾回收,內存結構
- 異常的種類
- Object類,哪些方法
- 文件讀取, 字節流和字符流, 流的概念, reader, stream等; NIO(通道,緩沖區,選擇器)
Java常見多線程面試點:
- thread, start(), run()
- 多線程裡面的關鍵字,wait, notfiy, 鎖(synchronized), lock接口
- 線程狀態,上下文切換,守護線程
- 消費者和生產者的幾種實現方式,優缺點
- 進程間通信
- 同步容器類,並發容器類之間的區別
- 幾個重要的數據結構,需要了解詳細,最好能看過關鍵代碼, copyOnWrite容器, ConcurrentHashMap
- 信號量, CountDownLatch, CyclicBarrier等類的使用
- 還有一些Future框架等等(這塊我也知道的不多)
Java Web 方向的面試點:
- Servlet init() service() post, get等方法區別
- 重定向,請求轉發,跨域什麼的
- Http各個端口號,返回碼
- Spring框架中的東西 spring MVC Spring web
Java高深一點的東西:
- 反射機制
- Java類加載機制,四種類加載器,加載過程,檢查過程
- 依賴注入
- Spring框架
- AOP面向切面編程
數據結構方向的面試點:
- 數據結構,線性列表,二叉樹,完全二叉平衡樹,B+樹,圖的表示。
- 樹的先序,中序,後序,層序遍歷。能手寫代碼,遞歸和循環實現。 棧的使用
- 排序 常用的排序算法, 選擇,冒泡,快排,堆排序,歸並等。能手寫代碼,知道時間和空間復雜度,能做一些代碼上的改進。
- 動態規劃和分治的區別,能根據題目想到這方面,簡單的例子能寫出來
- 圖的算法
- 最好去leetcode上系統的刷一下題,不需要全部刷完,但是基本的類型都刷到,很有幫助,代碼能力也能提高
數據庫方面的面試點:
- MySQL數據庫的幾種引擎,不同數據庫間的比較
- 數據庫的封鎖協議,各種讀寫鎖
- Java裡面的數據庫連接,driver等等
- SQL語句,insert,select, truncate, drop等
- 索引,聯合索引,自增主鍵的優劣。
- NoSQL和MongoDB, Redis的概念,它的恢復機制,兩種模式(內存快照和命令保存)
計算機網絡和操作系統方面的面試點:
- 擁塞控制,網絡七層模型,各層各種應用,tcp/udp, IP,DNS, FTP. 舉例訪問網站經過的步驟等
- 操作系統裡面的內存替換算法,LRU等
- 網絡安全方向的,數據安全,數字簽名等等
不錯的網站介紹:
leetcode 刷算法題的好地方,但是現在題目越來越多了。都400多道了,看個人能力了
Simple Java 一個講解Java面試中常問到的一些點,誤區等等,適合基礎入門用
阿裡中間件官方博客 有蠻多框架上的東西和一些實際工作的經驗總結,可以長長知識
還有好多個人收藏的網站,你們在搜索上面的知識點的時候差不多都能找到