這些年面試了各種水平不一的Java開發(fā)程序員,現(xiàn)在就是感覺現(xiàn)在做Java開發(fā)的人,內(nèi)心過于浮躁,大部分的人都是急于求成,或許現(xiàn)在這個時代就是這個樣子,每一個人都想要用最少的付出,得到最快的回報。尤其是現(xiàn)在的90后!技術(shù)一般,要求還很高。
德令哈網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、APP開發(fā)、成都響應式網(wǎng)站建設等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)建站自2013年起到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設就選創(chuàng)新互聯(lián)建站。
其實很多剛想要入職的人,根據(jù)不懂的面試是什么,至于面試技巧之類的,更是一無所知,所以就導致面試受到了嚴重的打擊,甚至有的人就放棄了。所以我從這篇文章中,想要總結(jié)一些面試技巧和一些坑,做好準備才能面試成功。
我是咋面試Java的?
一、簡歷
找工作無非就是兩個步驟,首先是簡歷,其次是面試。先說簡歷的問題,一般情況公司肯定是從簡歷高的從上往下進行選擇,因為學歷其實本身就是代表了能力。但不是說學歷代表了一切。在我們不了解面試者的實際情況下,我們只能從上往下面進行選擇。無論是hr還是我們做技術(shù)的,都有自己的一個標準,所以你首先是簡歷要寫的讓別人映入眼簾。而不同職能的人撈簡歷的方式也千差萬別。
我選擇簡歷的角度有自己的看法,當然,不同的面試官有不同的選擇。
1. 我看簡歷中所提的技術(shù)需求是否滿足我的要求,我看重簡歷中他善于的技術(shù),如果一點技術(shù)詞匯沒有提到,那么這個人有以下幾種可能:
NO.1很水
NO.2很牛但是概率很小
NO.3不會寫簡歷
在第一關(guān)中,很多人會因為簡歷不行,所以喪失了面試的機會。
大家肯定會問,我應該怎么在簡歷中體現(xiàn)自己的實力呢?
你現(xiàn)在面試個公司,他們的主要技術(shù)是SSM技術(shù)的工程師,你的簡歷里面只有 SSM這個名詞是不夠的,最好能體現(xiàn)出 SSM的生態(tài)來以及你對于SSM的理解。
二、個人介紹
如果簡歷通過了篩選,下面就是見真章的時候了,面試環(huán)節(jié)。首先一定要準備好一段5分鐘的個人介紹。
遇見過這樣的面試者,個人介紹說不完,廢話太多,別人聽的很煩,從高中時代說起,然而面試官并沒有那么多的耐心和時間。這樣會留下不太好的初次印象。正確的做法是:
言簡意賅的說明自己的工作時間,擅長技術(shù)棧和自己的工作預期。
三、技術(shù)名詞
我是通過技術(shù)名詞來篩選簡歷,這就成為了我面試的重點部分。簡歷都是技術(shù)名詞也是一把雙刃劍:
1. 不寫技術(shù)名詞,簡歷不容易通過;
2. 寫上,需要充分的準備,否則你的技術(shù)能力可能會面試失??;
四、詢問項目的深度
項目經(jīng)驗是面試中“最”重要環(huán)節(jié),要對于面試者有全面的認識,我會用很多時間去詢問面試者做過的項目。
不會有人只有一個項目,我的問題就變成了:看出來你做過不少項目,有沒有哪個項目是你做的最好,你可以拿出來說一說。
如果大家對于學習Java有任何問題(學習方法,學習效率,如何就業(yè)),可以隨時來咨詢我,這是我的Java交流學習扣扣qun:前面是六一五,中間是七四一,后面是六三六。 多多交流問題,互幫互助,qun里有不錯的學習教程和開發(fā)工具。
當面試者講自己項目的同時,作為面試官,有幾件事情需要確定:
1. 首先要確定項目是否是自己做的,即確定項目的真實性;
舉個例子:你的項目是 SSM搭建的,是否可以告知搭建項目的過程和需要注意的地方是什么嗎?
這時候有人就懵逼了,什么都說不出來。
細問之下,告訴我項目是其他同事搭建的,自己只負責開發(fā)業(yè)務。
2. 項目的缺陷
架構(gòu)項目的時,想太多會過度設計,想的少會出現(xiàn)業(yè)務增長而造成的種種問題。企業(yè)在探索某個技術(shù)領(lǐng)域的最佳實踐,其實并沒有行業(yè)通用標準,只是思想可以借鑒罷了。
不過,經(jīng)驗豐富的話,還可以不斷重構(gòu),確實可以修復項目的缺陷。所以呢?我的問題來了:在項目中碰到過一些問題,你是如何解決的?
這是考察你實際處理問題的能力,還有你這個人是否會獨立思考,是否有腦子在運轉(zhuǎn),這個真正的個人能力。
3. 項目的深度
項目做到一定規(guī)模后,想要得到更大的提升,一定會去深挖原理。
項目深度的考察其實比較難,總會有一些行業(yè)通用問題需要去解決,這也就是 BAT,TMD 這些公司經(jīng)常會去制定一些行業(yè)標準,開源一些技術(shù)方案的原因。
當然,很多公司還是達不到這個層次,所以項目深度也是因人而異,并沒有通用標準。
所以考察方向就成了對這個項目的持續(xù)開發(fā),垂直領(lǐng)域以及深度思考。
五、程序基礎(chǔ),手寫代碼,算法
如果面試要求手寫代碼的面試官是不是都很傻叉?
當然不是,我們通過寫代碼就可以看出一個人的編程功底和編程思想。我們很多時候都在閱讀別人的代碼,所以能迅速的看出你代碼問題的人,在我看來,能力是在你之上的。
六、是否熱愛技術(shù)
一句話,即使你沒有那么熱愛技術(shù),你也要表現(xiàn)的很熱愛技術(shù)。
七、個人職業(yè)規(guī)劃
最開始,我認為所謂的個人規(guī)劃其實就是空談,一切不切實際的東西。但是當接觸的人多了,我慢慢發(fā)現(xiàn)。有職業(yè)規(guī)劃的人和沒有職業(yè)規(guī)劃的人真的不一樣。我會發(fā)現(xiàn)有些人之后的幾年毫無進展,完全是在混資歷,技術(shù)一塌糊涂。
為什么會有這種現(xiàn)象,我猜測大概有如下幾點原因:
1. 沒有個人規(guī)劃,走哪算哪,混日子型;
2. 忙于管理,疏于技術(shù);
3. 長期在一個崗位,做著千篇一律的事情,永遠在寫CRUD;
八、面試者反饋
面試接近尾聲的時候,作為尊重,這時候我都會去問這樣一個問題:大概情況我都了解了,有沒有你覺得自己擅長而又沒被問到的東西?
每個人都會有自己的思維,甚至是偏見,所以面試的時候一定要去得到面試者的互動和反饋,從而映證自己的觀點。報著一個人才都不放過的心態(tài),去全方位了解面試者。
九、你有什么問題想問我?
面試官一定要放低姿態(tài),不要一副高高在上的樣子,尤其是做技術(shù)的。如果覺得面試者稍微有些緊張,可以先聊點其他,如:所學專業(yè),住在哪里,上下班時間之類無關(guān)痛癢的問題,緩解一下緊張氣氛。
至于最后一個問題為什么要問:你有什么問題想問我?有以下幾點理由:
1. 確定面試反饋;
2. 給面試者一個溝通的機會;
3. 看看面試者對應試部門的了解或者是對公司的興趣;
下面是10道java基礎(chǔ)面試題,后附答案
1.什么是 Java 虛擬機?為什么 Java 被稱作是“平臺無關(guān)的編程語言”?
Java 虛擬機是一個可以執(zhí)行 Java 字節(jié)碼的虛擬機進程。Java 源文件被編譯成能被 Java 虛擬機執(zhí)行的字節(jié)碼文件。
Java 被設計成允許應用程序可以運行在任意的平臺,而不需要程序員為每一個平臺單獨重寫或者是重新編譯。Java 虛擬機讓這個變?yōu)榭赡埽驗樗赖讓佑布脚_的指令長度和其他特性。
2.“static”關(guān)鍵字是什么意思?Java 中是否可以覆蓋(override)一個 private 或者是static 的方法?
“static”關(guān)鍵字表明一個成員變量或者是成員方法可以在沒有所屬的類的實例變量的情況下被訪問。
Java 中 static 方法不能被覆蓋,因為方法覆蓋是基于運行時動態(tài)綁定的,而 static 方法是編譯時靜態(tài)綁定的。static 方法跟類的任何實例都不相關(guān),所以概念上不適用。
3.JDK 和 JRE 的區(qū)別是什么?
Java 運行時環(huán)境(JRE)是將要執(zhí)行 Java 程序的 Java 虛擬機。它同時也包含了執(zhí)行 applet 需要的瀏覽器插件。Java 開發(fā)工具包 (JDK)是完整的 Java 軟件開發(fā)包,包含了 JRE,編譯器和其他的工具(比如:JavaDoc,Java 調(diào)試器),可以讓開發(fā)者開發(fā)、編譯、執(zhí)行 Java 應用程序。
4.是否可以在 static 環(huán)境中訪問非 static 變量?
static 變量在 Java 中是屬于類的,它在所有的實例中的值是一樣的。當類被 Java 虛擬機載入的時候,會對 static 變量進行初始化。如果你的代碼嘗試不用實例來訪問非 static 的變量,編譯器會報錯,因為這些變量還沒有被創(chuàng)建出來,還沒有跟任何實例關(guān)聯(lián)上。
5.Java 支持的數(shù)據(jù)類型有哪些?什么是自動拆裝箱?
Java 語言支持的 8 中基本數(shù)據(jù)類型是:
?byte
?short
?int
?long
?float
?double
?boolean
?char
自動裝箱是 Java 編譯器在基本數(shù)據(jù)類型和對應的對象包裝類型之間做的一個轉(zhuǎn)化。比如:把 int 轉(zhuǎn)化成 Integer,double 轉(zhuǎn)化成 double,等等。反之就是自動拆箱。
6.Java 支持多繼承么?
不支持,Java 不支持多繼承。每個類都只能繼承一個類,但是可以實現(xiàn)多個接口。
7.Java 中,什么是構(gòu)造函數(shù)?什么是構(gòu)造函數(shù)重載?什么是復制構(gòu)造函數(shù)?
當新對象被創(chuàng)建的時候,構(gòu)造函數(shù)會被調(diào)用。每一個類都有構(gòu)造函數(shù)。在程序員沒有給類提供構(gòu)造函數(shù)的情況下,Java 編譯器會為這個類創(chuàng)建一個默認的構(gòu)造函數(shù)。
Java 中構(gòu)造函數(shù)重載和方法重載很相似??梢詾橐粋€類創(chuàng)建多個構(gòu)造函數(shù)。每一個構(gòu)造函數(shù)必須有它自己唯一的參數(shù)列表。
Java 不支持像 C++中那樣的復制構(gòu)造函數(shù),這個不同點是因為如果你不自己寫構(gòu)造函數(shù)的情況下,Java 不會創(chuàng)建默認的復制構(gòu)造函數(shù)。
8.Java 中的方法覆蓋(Overriding)和方法重載(Overloading)是什么意思?
Java 中的方法重載發(fā)生在同一個類里面兩個或者是多個方法的方法名相同但是參數(shù)不同的情況。與此相對,方法覆蓋是說子類重新定義了父類的方法。方法覆蓋必須有相同的方法名,參數(shù)列表和返回類型。覆蓋者可能不會限制它所覆蓋的方法的訪問。
9.接口和抽象類的區(qū)別是什么?
Java 提供和支持創(chuàng)建抽象類和接口。它們的實現(xiàn)有共同點,不同點在于:
?接口中所有的方法隱含的都是抽象的。而抽象類則可以同時包含抽象和非抽象的方法。
?類可以實現(xiàn)很多個接口,但是只能繼承一個抽象類
?類如果要實現(xiàn)一個接口,它必須要實現(xiàn)接口聲明的所有方法。但是,類可以不實現(xiàn)抽象類聲明的所有方法,當然,在這種情況下,類也必須得聲明成是抽象的。
?抽象類可以在不提供接口方法實現(xiàn)的情況下實現(xiàn)接口。
?Java 接口中聲明的變量默認都是 final 的。抽象類可以包含非 final 的變量。
?Java 接口中的成員函數(shù)默認是 public 的。抽象類的成員函數(shù)可以是 private, protected 或者是 public。
?接口是絕對抽象的,不可以被實例化。抽象類也不可以被實例化,但是,如果它包含 main 方法的話是可以被調(diào)用的。
10.什么是值傳遞和引用傳遞?
對象被值傳遞,意味著傳遞了對象的一個副本。因此,就算是改變了對象副本,也不會影響源對象的值。
對象被引用傳遞,意味著傳遞的并不是實際的對象,而是對象的引用。因此,外部對引用對象所做的改變會反映到所有的對象上。
最后祝你面試順利!
1、談談你對 Java 平臺的理解?“Java 是解釋執(zhí)行”,這句話正確嗎?考點分析:對于這類籠統(tǒng)的問題,你需要盡量表現(xiàn)出自己的思維深入并系統(tǒng)化,Java 知識理解得也比較全面,一定要避免讓面試官覺得你是個“知其然不知其所以然”的人。畢竟明白基本組成和機制,是日常工作中進行問題診斷或者性能調(diào)優(yōu)等很多事情的基礎(chǔ),相信沒有招聘方會不喜歡“熱愛學習和思考”的面試者?;貧w正題,對于 Java 平臺的理解,可以從很多方面簡明扼要地談一下,例如:Java 語言特性,包括泛型、Lambda 等語言特性;基礎(chǔ)類庫,包括集合、IO/NIO、網(wǎng)絡、并發(fā)、安全等基礎(chǔ)類庫。對于我們?nèi)粘9ぷ鲬幂^多的類庫,面試前可以系統(tǒng)化總結(jié)一下,有助于臨場發(fā)揮。2、對比Hashtable、HashMap、TreeMap有什么不同?考點分析:上面的回答,只是對一些基本特征的簡單總結(jié),針對Map相關(guān)可以擴展的問題很多,從各種數(shù)據(jù)結(jié)構(gòu)、典型應用場景,到程序設計實現(xiàn)的技術(shù)考量,尤其是在Java 8里,HashMap本身發(fā)生了非常大的變化,這些都是經(jīng)??疾斓姆矫?。很多朋友向我反饋,面試官似乎鐘愛考察HashMap的設計和實現(xiàn)細節(jié),所以今天我會增加相應的源碼解讀,主要專注于下面幾個方面:理解Map相關(guān)類似整體結(jié)構(gòu),尤其是有序數(shù)據(jù)結(jié)構(gòu)的一些要點。從源碼去分析HashMap的設計和實現(xiàn)要點,理解容量、負載因子等,為什么需要這些參數(shù),如何影響Map的性能,實踐中如何取舍等。理解樹化改造的相關(guān)原理和改進原因。除了典型的代碼分析,還有一些有意思的并發(fā)相關(guān)問題也經(jīng)常會被提到,如HashMap在并發(fā)環(huán)境可能出現(xiàn)無限循環(huán)占用CPU、size不準確等詭異的問題。我認為這是一種典型的使用錯誤,因為HashMap明確聲明不是線程安全的數(shù)據(jù)結(jié)構(gòu),如果忽略這一點,簡單用在多線程場景里,難免會出現(xiàn)問題。理解導致這種錯誤的原因,也是深入理解并發(fā)程序運行的好辦法。對于具體發(fā)生了什么,你可以參考這篇很久以前的分析,里面甚至提供了示意圖,我就不再重復別人寫好的內(nèi)容了。3、Java 提供了哪些 IO 方式? NIO 如何實現(xiàn)多路復用?考點分析:在實際面試中,從傳統(tǒng) IO 到 NIO、NIO 2,其中有很多地方可以擴展開來,考察點涉及方方面面,比如:基礎(chǔ) API 功能與設計, InputStream/
1.java異常機制的原理與應用\x0d\x0a答:每當程序出現(xiàn)異常之后,如果程序沒有進行相應的處理,則程序會出現(xiàn)中斷現(xiàn)象。\x0d\x0a實際上,產(chǎn)生了異常之后,JVM會拋出一個異常類的實例化對象,如果此時使用了try語句捕獲的話,則可以進行異常的處理,否則,交給JVM進行處理。當try語句捕獲異常之后,將與catch語句的異常類型進行匹配,如果匹配成功則執(zhí)行catch內(nèi)的語句。簡單的應用:在所以throws語句的地方加入try-catch。標準應用:try-catch-finally-throw-throws一起使用。 \x0d\x0a\x0d\x0a2. 垃圾回收機制的優(yōu)點\x0d\x0a答:釋放無用的對象所占用的空間。方式:自動回收,手動回收。使用System.gc(),實際上調(diào)用Runtime.getRuntime().gc()\x0d\x0a\x0d\x0a3. Error與Exception區(qū)別\x0d\x0a答:Error是jvm進行處理,是jvm出錯\x0d\x0aexception是可以由程序處理的,可以用try-catch捕獲的\x0d\x0a\x0d\x0a4. final,finally,finallize\x0d\x0a答:final定義的變量的值不能改變,定義的方法不能被覆蓋,定義的類不能被繼承\(zhòng)x0d\x0afinally是異常的統(tǒng)一出口,finallize是垃圾回收前的收尾工作,是Object類定義的\x0d\x0a\x0d\x0a5. Anonymous Inner Class是否可以extends,是否可以implements Interface\x0d\x0a答:允許繼承和實現(xiàn),因為匿名內(nèi)部類就是在抽象類和接口的基礎(chǔ)上發(fā)展起來的\x0d\x0a\x0d\x0a6. Static Nested Class 與Inner Class的區(qū)別\x0d\x0a答:使用Static定義的Class就是外部類,可以通過外部類. 內(nèi)部類直接訪問\x0d\x0a而Inner Class是不能被外部訪問的,只能通過外部類的實例再找到內(nèi)部類實例。\x0d\x0a\x0d\x0a7. HashMap and HashTable?\x0d\x0a答:HashMap:1) released in jdk 1.2,new Class 2)采用異步處理方式,性能較高,是非線程安全的 3)允許null\x0d\x0aHashTable:\x0d\x0a1)released in jdk 1.0 ,old Class \x0d\x0a2)采用同步處理方式,性能低,是線程安全的\x0d\x0a3)不允許null\x0d\x0a\x0d\x0a8. assert代表什么?\x0d\x0a答:asserts是jdk 1.4之后發(fā)布的新關(guān)鍵字,表示斷言,即程序執(zhí)行到某個地方肯定是預計的值,一般開發(fā)很少使用。要使用assert,必須加上 -ea參數(shù)\x0d\x0a\x0d\x0a9. gc是什么?\x0d\x0a答:gc是garbage collection,垃圾回收,使用gc可以進行垃圾空間的釋放\x0d\x0a\x0d\x0a10. String s = new String("xyz")產(chǎn)生了幾個對象?\x0d\x0a答:一個匿名對象xyz,在??臻g內(nèi)。一個new實例化的對象,在堆空間內(nèi)。\x0d\x0a\x0d\x0a11. sleep() and wait()?\x0d\x0a答:sleep()是Thread類定義方法,表示線程的休眠,可以自動喚醒\x0d\x0await()方法是Object類定義的方法,需要手動notify()和notifyAll()//sleep()不釋放資源,wait()釋放資源\x0d\x0a\x0d\x0a12. Overload與Override的區(qū)別\x0d\x0a答:Overload:重載\x0d\x0a |- 在一個類中定義的若干方法\x0d\x0a |- 所有的方法名相同,但參數(shù)類型或個數(shù)不同\x0d\x0a |- 只有參數(shù)有關(guān),與返回類型無關(guān)\x0d\x0aOverride:覆寫\x0d\x0a |- 在繼承的關(guān)系中\(zhòng)x0d\x0a |- 子類定義了父類同名的方法,參數(shù)類型或個數(shù)最好完全一樣。\x0d\x0a |- 訪問權(quán)限不能更嚴格\x0d\x0a\x0d\x0a13. abstract class 和 interface有什么區(qū)別?\x0d\x0a答:抽象類:\x0d\x0a |-由抽象方法和常量、變量、全局常量、構(gòu)造方法、普通方法組成\x0d\x0a |-使用abstract聲明\x0d\x0a |-子類要通過extends繼承抽象類,子類如果不是抽象類,則必須覆寫抽象類的全部抽象方法\x0d\x0a |-存在單繼承的局限\x0d\x0a |-抽象類可以實現(xiàn)若干個接口\x0d\x0a接口:\x0d\x0a |-由抽象方法和全局常量組成\x0d\x0a |-使用interface關(guān)鍵字\x0d\x0a |-子類要通過implements實現(xiàn)接口,子類如果不是抽象類,則必須覆寫抽象類的全部抽象方法\x0d\x0a |-一個子類可以實現(xiàn)多個接口\x0d\x0a |-接口不能繼承一個抽象類,但允許繼承多個接口