不論是校招還是社招都避免不了各種面試、筆試,如何去準備這些東西就顯得格外重要。不論是筆試還是面試都是有章可循的,我這個“有章可循”說的意思只是說應對技術面試是可以提前準備。 我其實特別不喜歡那種臨近考試就提前背啊記啊各種題的行爲,非常反對!我覺得這種方法特別極端,而且在稍有一點經驗的面試官面前是根本沒有用的。建議大家還是一步一個腳印踏踏實實地走。
運籌帷幄之後,決勝千里之外!不打毫無準備的仗,我覺得大家可以先從下面幾個方面來準備面試:
- 自我介紹。(你可千萬這樣介紹:“我叫某某,性別,來自哪裏,學校是那個,自己愛幹什麼”,記住:多說點簡歷上沒有的,多說點自己哪裏比別人強!)
- 自己面試中可能涉及哪些知識點、那些知識點是重點。
- 面試中哪些問題會被經常問到、面試中自己改如何回答。(強烈不推薦背題,第一:通過背這種方式你能記住多少?能記住多久?第二:背題的方式的學習很難堅持下去!)
- 自己的簡歷該如何寫。
“80%的offer掌握在20%的人手中” 這句話也不是不無道理的。決定你面試能否成功的因素中實力固然佔有很大一部分比例,但是如果你的心態或者說運氣不好的話,依然無法拿到滿意的 offer。運氣暫且不談,就拿心態來說,千萬不要因爲面試失敗而氣餒或者說懷疑自己的能力,面試失敗之後多總結一下失敗的原因,後面你就會發現自己會越來越強大。
另外,大家要明確的很重要的幾點是:
- 寫在簡歷上的東西一定要慎重,這可能是面試官大量提問的地方;
- 大部分應屆生找工作的硬傷是沒有工作經驗或實習經歷;
- 將自己的項目經歷完美的展示出來非常重要。
筆主能力有限,如果有不對的地方或者和你想法不同的地方,敬請雅正、不捨賜教。
面試可能會問哪些問題?
希望通過這些問題,能夠讓大家學習更有方向,而不是單純把這些問題都背會了!
另外,內容會繼續完善,歡迎你在評論區說出你遇到的高頻面試題!
Java
“ Java 基礎這部分一些簡單的問題就直接沒有放上來。
基礎:
- Java 反射?反射有什麼缺點?你是怎麼理解反射的(爲什麼框架需要反射)?
- 談談對 Java 註解的理解,解決了什麼問題?
- 內部類瞭解嗎?匿名內部類瞭解嗎?
- BIO和NIO區別,4核cpu,100個http連接,用BIO和NIO分別需要多少個線程
- 假如我們需要存500個數需要多大的HashMap?
- HashMap的負載因子。
jvm:
- jvm 內存結構
- jvm 調優參數
- 什麼是類加載?
- 何時類加載?
- java的類加載流程?
- 知道哪些類加載器。類加載器之間的關係?
- 類加載器之間的關係?
- 類加載器的雙親委派 (結合tomcat說一下雙親委派)
- 爲什麼需要雙親委派
- Java內存模型
- 棧中存放什麼數據,堆中呢?
- 大對象放在哪個內存區域
- 堆區如何分類
- 垃圾回收有哪些算法
- GC的全流程
- GC中老年代用什麼回收方法?
多線程:
- Java線程池有哪些參數?阻塞隊列有幾種?拒絕策略有幾種?
- 死鎖
設計模式:
- 閱讀Spring源碼的時候什麼設計模式最讓你影響深刻?如何使用?
- 單例模式,單例模式的使用場景
- 觀察者模式,觀察者模式的使用場景
Spring
- spring boot和spring的區別
- ioc 和 aop(ioc流程、aop實現原理)、spring aop異常處理、當一段代碼被try catch後再發生異常時,aop的異常通知是否執行,爲什麼?
- spring bean的生命週期說一下
- spring data jpa底層是什麼?
- hibernate和mybatis區別
- spring boot 過濾器
- spring boot 攔截器
- Spring動態代理默認用哪一種
- 寫出spring jdk動態代理的實現。
- 畫出spring boot處理一個http請求的全過程
權限認證(答案已經完成)
- 認證 (Authentication) 和授權 (Authorization)的區別是什麼?
- 什麼是Cookie ? Cookie的作用是什麼?如何在服務端使用 Cookie ?
- Cookie 和 Session 有什麼區別?如何使用Session進行身份驗證?
- 如果沒有Cookie的話Session還能用嗎?
- 爲什麼Cookie 無法防止CSRF攻擊,而token可以?
- 什麼是 Token?什麼是 JWT?如何基於Token進行身份驗證?
- 什麼是OAuth 2.0?
- 什麼是SSO(單點登錄)
微服務/分佈式(答案已經完成)
- 爲什麼要網關?
- 限流的算法有哪些?
- 爲什麼要分佈式 id ?分佈式 id 生成策略有哪些?
- 瞭解RPC嗎?有哪些常見的 RPC 框架?
- 如果讓你自己設計 RPC 框架你會如何設計?
- Dubbo 瞭解嗎?Spring Cloud 瞭解嗎?
數據庫
- 非關係型數據庫和關係型數據庫的區別?
- 事務的四大特性
- MySQL 事務隔離級別?默認是什麼級別?
- 樂觀鎖與悲觀鎖的區別
- 數據庫兩種存儲引擎的區別
- 最左前綴匹配原則及它的原因
- 大表優化的思路
- where和having的區別
- 分庫分表
- explain 命令
索引
- 如何加快數據庫查詢速度
- 聚集索引和非聚集索引的區別
- 什麼時候不該使用索引?
- 索引底層的數據結構?
- B+樹做索引比紅黑樹好在哪裏?
Redis:
- 項目中 redis 是怎麼用的?解決了什麼問題?
- 說一下有緩存情況下查詢的流程以及有緩存情況下修改的流程。
- redis有哪些數據結構
- redis內存滿了怎麼辦
- redis內存淘汰算法除了lru還有哪些
- 分佈式緩存可能出現的問題
- 緩存穿透問題
網絡
- 計算機網絡的一些常見狀態碼
- ping 所使用的協議
- TCP的三次握手與四次揮手的內容
- TCP爲什麼連接是三次握手而斷開是四次握手
- TCP與UDP的區別及使用場景
- 一次完整的HTTP請求所經的步驟
- http 如何保存登錄信息(沒太搞懂意思)
- Cookie 和 Session的關係
算法和數據結構
算法
- LRU 算法瞭解嗎?你能實現一個嗎?
- 寫排序算法(快排、堆排)
數據結構
- 布隆過濾器瞭解嗎?
設計題
- 假如有10億個數,只有一個重複,內存只能放下5億個數,怎麼找到這個重複的數字?
- 如何設計一個秒殺系統(服務端、數據庫、分佈式)?分佈式系統的設計?
- 有一個服務器專門接收大量請求,怎麼設計?
- 如果讓你自己設計 RPC 框架你會如何設計?
- 怎麼快速出現一個stackoverflow錯誤?
其他問題
- 自我介紹。
- 說說你的項目中的亮點有哪些。
- 畫一下你的項目的架構圖。
- Restful 瞭解嗎?簡單說一下自己對它的認識,如果我要返回一個 boolean 類型的數據怎麼辦?
經驗總結
- 多面試,不要害怕失敗,多總結經驗。
- 儘早準備,不論是找工作前、面試前還是面試後。
- 熟悉自己的簡歷。
- 電話和視頻面試很平常,面試前提前準備一下。
- 堅持!offer 雖然可能會遲到,但是隻要不放棄,就一定不會缺席。
初中級 Java 程序員必須掌握的知識。
具體的技能要求要看你應聘的公司!
- 熟練掌握數據結構、算法、操作系統、計算機網絡等基礎知識
- 熟練掌握Java編程、熟悉Java高併發開發手段、對JVM 虛擬機(Java內存區域、虛擬機垃圾算法、虛擬垃圾收集器、JVM內存管理)有一定研究
- 熟練掌握SOA分佈式系統開發,具有優化系統性能、提高系統併發量以及系統可用性的實際經驗
- 熟練掌握Struts2、Spring、Hibernate、Mybatis 等框架的使用,熟悉 Spring 原理
- 熟練掌握Dubbo、Zookeeper、常見的消息隊列(比如ActiveMq)的使用
- 熟悉Linux 系統的使用,在Linux系統下具有實際的開發經驗
- 熟悉MySQL數據庫的使用、常見SQL語句的書寫以及常見的優化手段
- 掌握 Spring Boot +Spring Cloud +Docker
- 瞭解Hadoop 生態相關技術中的 HDFS、Storm、MapReduce、Hive、Hbase
推薦一個學習過程中看的倉庫
筆主自己開源的一個Java學習與面試項目,目前已經幾個月是JavaTrending榜第一名了,目前已經有 65k+ star,我自己有點不那麼實至名歸,我也只是靠平時業餘時間來維護,大家可以看一下,因該對大家學習Java有一點沒有幫助。
這個倉庫裏面有常見知識點總結(目前還在繼續完善中)、常見面試題、備戰面試系列文章以及BATJ真實面經等內容。
- 對於 Java 初學者來說: 本文檔傾向於給你提供一個比較詳細的學習路徑,讓你對於Java整體的知識體系有一個初步認識。另外,本文的一些文章 也是你學習和複習 Java 知識不錯的實踐;
- 對於非 Java 初學者來說: 本文檔更適合回顧知識,準備面試,搞清面試應該把重心放在那些問題上。要搞清楚這個道理:提前知道那些面試常見,不是爲了背下來應付面試,而是爲了讓你可以更有針對的學習重點。