前言
金三銀四的跳槽黃金季,一貫不愛挪窩的程序員也活躍起來,要說面試程序員煩,公司也煩,面試官也煩,但沒辦法,魚龍混雜的人太多,理論好寫不了代碼的程序員着實讓公司頭疼,於是面試的題目也愈來愈刁鑽!java
不過凡事都有兩面性,面試也是激勵程序員多看面試題,掌握知識不是嗎?程序員
![](http://static.javashuo.com/static/loading.gif)
我這裏整理了互聯網公司面試常問的一些面試題,後文有提供【答案在末尾獲取,以及更多面試專項資料領取】面試
本文將要講到的主題:如何準備Java高級的技術面試。算法
![](http://static.javashuo.com/static/loading.gif)
一. 換位思考下,若是你面試官,你會怎麼作
- 只能經過簡歷和麪試來衡量,別無他法。若是某位大牛確認能力很行,但面試時沒法充分地自證能力,那對不起了,過不了,現實就這樣。
- 若是面試官因爲能力不行,招進來一個大忽悠,那估計會被領導罵。並且不再會被讓面試了,給領導的印象就很差了。因此不能評主觀印象,而是會有些客觀標準,具體而言,就是從多個方面問些題目,答好答壞就看候選人的。
二. 整體上說下準備面試的幾個方面點
在面試時,應當綜合準備 java Core,數據庫,框架,分佈式等方面的題目。我發現很多面試者走了彎路,他們或者乾脆不許備,準備時可能方法不到位,單準備一個方面。好比只准備了算法題,在這方面回答很好,但其它方面就一無所知了。數據庫
因此說,沒有所謂的必定能成功的面試祕籍,但有能夠幫助提高成功率的準備方法。編程
切記,面試前必定得準備,不然成功的可能性很低,準備時,得綜合看各方面的點。至於每一個點要到什麼程度,後文會講到。設計模式
面向對象編程的基本理念與核心設計思想瀏覽器
- 解釋下多態性(polymorphism),封裝性(encapsulation),內聚(cohesion)以及耦合(coupling)。
- 繼承(Inheritance)與聚合(Aggregation)的區別在哪裏。
- 你是如何理解乾淨的代碼(Clean Code)與技術負債(Technical Debt)的。
- 描述下經常使用的重構技巧。
- 闡述下SOLID 原則。
- 其餘的譬如 KISS,DRY,YAGNI 等原則又是什麼含義。
- 什麼是設計模式(Design Patterns)?你知道哪些設計模式?
- 你有了解過存在哪些反模式(Anti-Patterns)嗎?
- 你會如何設計登錄艦/數學表達式計算程序/一條龍?
- 你知道哪些基本的排序算法,它們的計算複雜度如何?在給定數據的狀況下你會傾向於使用哪一種算法呢?
- 嘗試編寫以下代碼:
- 計算指定數字的階乘
- 開發 Fizz Buzz小遊戲
- 倒轉句子中的單詞
- 迴文字符串檢測
- 枚舉給定字符串的全部排列組合
Java 核心概念
- equals 與 hashCode 的異同點在哪裏?Java 的集合中又是如何使用它們的。
- 描述下 Java 中集合(Collections),接口(Interfaces),實現(Implementations)的概念。LinkedList 與 ArrayList 的區別是什麼?
- 基礎類型(Primitives)與封裝類型(Wrappers)的區別在哪裏?
- final 與 static 關鍵字能夠用於哪裏?它們的做用是什麼?
- 闡述下 Java 中的訪問描述符(Access Modifiers)。
- 描述下 String,StringBuilder 以及 StringBuffer 區別。
- 接口(Interface)與抽象類(Abstract Class)的區別在哪裏。
- 覆蓋(Overriding)與重載(OverLoading)的區別在哪裏。
- 異常分爲哪幾種類型?以及所謂的handle or declare原則應該如何理解?
- 簡述垃圾回收器的工做原理。
- 你是如何處理內存泄露或者棧溢出問題的?
- 如何構建不可變的類結構?關鍵點在哪裏?
- 什麼是 JIT 編譯?
- Java 8 / Java 7 爲咱們提供了什麼新功能?即將到來的 Java 9 又帶來了怎樣的新功能?
Hibernate / 數據庫
- 請解釋下 ORM。
- 簡述下 Hibernate 的優劣特性。
- Hibernate 與 JPA 區別在哪?
- Hibernate 最新版提供了哪些特性?
- 什麼是懶加載(Lazy Loading)?
- 什麼是 N+1 難題?
- 介紹一些熟悉的 Hibernate 註釋。
- 簡介下 Hibernate Session 與 SessionFactory。
- Entity Beans 的狀態有哪些。
- Hibernate 中的緩存分爲幾層。
- Hibernate 中事務的支持分爲幾級?
- 什麼是樂觀鎖(Optimistic Locking)?
- 簡述下 ACID 原則。
- 簡述下數據庫正則化(Normalizations)。
- 請介紹下你平常工做中優化慢查詢(Slow Query)的策略。
Spring
- 新版的 Spring 中有哪些新特性?
- 介紹下 Spring 的優點與缺陷。
- 什麼是控制反轉(Inversion of Control)與依賴注入(Dependency Injection)?
- 你用過哪些 Spring 的模塊?
- Spring 中是如何使用依賴注入的?
- Spring 中提供了幾種自動注入的機制?
- 介紹下 Spring MVC。
- Spring 中 Scopes 有哪些?
- Spring 中 Bean 的生命週期包含哪些步驟?
- Spring Bean 與 EJB Bean 的區別在哪裏?
其餘主題
- 介紹下切面編程(Aspect Oriented Programming)。
- 概述下 GET 與 POST 的區別。
- Web Server、Web Container 與 Application Server 的區別是什麼?
- 簡要介紹下從瀏覽器輸入 URL 開始到獲取到請求界面以後 Java Web 應用中發生了什麼。
- 什麼是 N 層架構?
- 微服務(MicroServices)與巨石型應用(Monolithic Applications)之間的區別在哪裏?
- 你知道哪些商業級設計模式?
- 你是如何測試一個應用的?知道哪些測試框架?
- 你是如何測試單個方法的?
- 在你的職業生涯中,算得上最困難的技術挑戰是什麼?
- 什麼是領域驅動開發(Domain Driven Development)?
- 介紹下一些你最愛的 IDE 的經常使用插件。
- 除了 IDE 以外,你的平常工做中還會用到哪些工具?
- 你使用什麼版本管理工具?
- 分支(Branch)與標籤(Tag)之間的區別在哪裏?
- 你經常使用的持續集成(Continuous Integration)、靜態代碼分析(Static Code Analysis)工具備哪些?
最後
針對於上面的面試題我總結出了互聯網公司java程序員面試涉及到的絕大部分面試題及答案作成了文檔和架構視頻資料免費分享給你們(包括Dubbo、Redis、Netty、zookeeper、Spring cloud、分佈式、高併發等架構技術資料),但願能幫助到您面試前的複習且找到一個好的工做,也節省你們在網上搜索資料的時間來學習,也能夠關注我一下之後會有更多幹貨分享。緩存
資料領取方式:架構
歡迎加入個人私人QQ羣架構華山論劍:836442475【點擊領取面試資料】(大牛彙集地)一塊兒交流學習探討!
一塊兒學習Dubbo、Redis、Netty、zookeeper、Spring cloud、分佈式、高併發等架構技術的能夠來一下個人QQ羣架構華山論劍:836442475,好友都會在裏面交流,分享一些學習的方法和須要注意的小細節,天天準時講10年架構師分享經驗,Dubbo、Redis、Netty、zookeeper、Spring cloud、分佈式、高併發等架構技術
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)