⑴ java面試應當注意哪些問題
主要是java軟體的應用方面,你的水平如何。當然也會問詢一些其他的知識,你要做好准備:
1、堅持一個原則——面試不僅是他們選擇你,也是你了解對方的過程。雙方是平等的,你和他們一樣都有選擇對方的權利,所以,不用緊張,相反你要保持冷靜,看看他們這個單位究竟怎麼樣,不行的話,你完全可以拒絕他們,另擇高枝。
2、不忘一個關鍵——這個單位給你崗位和薪酬如何,工作時間長短等等,你最關心的這些,一定記得委婉地了解下,不能因為緊張忘了這些。
3、注意一些細節——著裝要大方得體,儀容整潔,這是對對方的尊重;實事求是介紹自己的優缺點、個人學歷閱歷等;注意問好、道別等禮節禮貌這些小節。
⑵ 如果你是一個 Java 面試官,你會問哪些問題
1、談談你對 Java 平台的理解?「Java 是解釋執行」,這句話正確嗎?考點分析:對於這類籠統的問題,你需要盡量表現出自己的思維深入並系統化,Java 知識理解得也比較全面,一定要避免讓面試官覺得你是個「知其然不知其所以然」的人。畢竟明白基本組成和機制,是日常工作中進行問題診斷或者性能調優等很多事情的基礎,相信沒有招聘方會不喜歡「熱愛學習和思考」的面試者。回歸正題,對於 Java 平台的理解,可以從很多方面簡明扼要地談一下,例如:Java 語言特性,包括泛型、Lambda 等語言特性;基礎類庫,包括集合、IO/NIO、網路、並發、安全等基礎類庫。對於我們日常工作應用較多的類庫,面試前可以系統化總結一下,有助於臨場發揮。2、對比Hashtable、HashMap、TreeMap有什麼不同?考點分析:上面的回答,只是對一些基本特徵的簡單總結,針對Map相關可以擴展的問題很多,從各種數據結構、典型應用場景,到程序設計實現的技術考量,尤其是在Java 8里,HashMap本身發生了非常大的變化,這些都是經常考察的方面。很多朋友向我反饋,面試官似乎鍾愛考察HashMap的設計和實現細節,所以今天我會增加相應的源碼解讀,主要專注於下面幾個方面:理解Map相關類似整體結構,尤其是有序數據結構的一些要點。從源碼去分析HashMap的設計和實現要點,理解容量、負載因子等,為什麼需要這些參數,如何影響Map的性能,實踐中如何取捨等。理解樹化改造的相關原理和改進原因。除了典型的代碼分析,還有一些有意思的並發相關問題也經常會被提到,如HashMap在並發環境可能出現無限循環佔用CPU、size不準確等詭異的問題。我認為這是一種典型的使用錯誤,因為HashMap明確聲明不是線程安全的數據結構,如果忽略這一點,簡單用在多線程場景里,難免會出現問題。理解導致這種錯誤的原因,也是深入理解並發程序運行的好辦法。對於具體發生了什麼,你可以參考這篇很久以前的分析,裡面甚至提供了示意圖,我就不再重復別人寫好的內容了。3、Java 提供了哪些 IO 方式? NIO 如何實現多路復用?考點分析:在實際面試中,從傳統 IO 到 NIO、NIO 2,其中有很多地方可以擴展開來,考察點涉及方方面面,比如:基礎 API 功能與設計, InputStream/
⑶ java工程師面試一般有什麼注意事項
多帶幾份簡歷前往面試,留心你自己的身體語言,初步印象和最後印象,要讓人產生好感,富於熱情。
⑷ java的怎麼面試呀
他問你技術問題的時候一定要注意不要牽扯到你不熟悉的技術方面,比如人問你個你寫的程序的登錄怎麼驗證的,如果你對密碼學不熟,千萬不要提一丁點的相關問題,就說簡單的密碼對比就行,不然他可能開始揪著你問,會很蛋疼的,你答也就是蒙,直說不清楚分肯定也不會太高。對java數據結構的一些知識多看看,對幾個排序演算法多看看,其他會面一些什麼非技術類的題,比如你覺得你自身的缺點是什麼啊之類的,千萬不能真的說缺點,說了你就掛,要把「優點」偽裝成缺點來說,基本上注意一點,對自己做過的項目要熟悉就可以了
⑸ java面試要注意什麼
這些年面試了各種水平不一的Java開發程序員,現在就是感覺現在做Java開發的人,內心過於浮躁,大部分的人都是急於求成,或許現在這個時代就是這個樣子,每一個人都想要用最少的付出,得到最快的回報。尤其是現在的90後!技術一般,要求還很高。
其實很多剛想要入職的人,根據不懂的面試是什麼,至於面試技巧之類的,更是一無所知,所以就導致面試受到了嚴重的打擊,甚至有的人就放棄了。所以我從這篇文章中,想要總結一些面試技巧和一些坑,做好准備才能面試成功。
一、簡歷
找工作無非就是兩個步驟,首先是簡歷,其次是面試。先說簡歷的問題,一般情況公司肯定是從簡歷高的從上往下進行選擇,因為學歷其實本身就是代表了能力。但不是說學歷代表了一切。在我們不了解面試者的實際情況下,我們只能從上往下面進行選擇。無論是hr還是我們做技術的,都有自己的一個標准,所以你首先是簡歷要寫的讓別人映入眼簾。而不同職能的人撈簡歷的方式也千差萬別。
我選擇簡歷的角度有自己的看法,當然,不同的面試官有不同的選擇。
1. 我看簡歷中所提的技術需求是否滿足我的要求,我看重簡歷中他善於的技術,如果一點技術詞彙沒有提到,那麼這個人有以下幾種可能:
NO.1很水
NO.2很牛但是概率很小
NO.3不會寫簡歷
在第一關中,很多人會因為簡歷不行,所以喪失了面試的機會。
大家肯定會問,我應該怎麼在簡歷中體現自己的實力呢?
你現在面試個公司,他們的主要技術是SSM技術的工程師,你的簡歷裡面只有 SSM這個名詞是不夠的,最好能體現出 SSM的生態來以及你對於SSM的理解。
二、個人介紹
如果簡歷通過了篩選,下面就是見真章的時候了,面試環節。首先一定要准備好一段5分鍾的個人介紹。
遇見過這樣的面試者,個人介紹說不完,廢話太多,別人聽的很煩,從高中時代說起,然而面試官並沒有那麼多的耐心和時間。這樣會留下不太好的初次印象。正確的做法是:
言簡意賅的說明自己的工作時間,擅長技術棧和自己的工作預期。
三、技術名詞
我是通過技術名詞來篩選簡歷,這就成為了我面試的重點部分。簡歷都是技術名詞也是一把雙刃劍:
1. 不寫技術名詞,簡歷不容易通過;
2. 寫上,需要充分的准備,否則你的技術能力可能會面試失敗;
四、詢問項目的深度
項目經驗是面試中「最」重要環節,要對於面試者有全面的認識,我會用很多時間去詢問面試者做過的項目。
不會有人只有一個項目,我的問題就變成了:看出來你做過不少項目,有沒有哪個項目是你做的最好,你可以拿出來說一說。
如果大家對於學習Java有任何問題(學習方法,學習效率,如何就業),可以隨時來咨詢我,這是我的Java交流學習扣扣qun:前面是六一五,中間是七四一,後面是六三六。 多多交流問題,互幫互助,qun里有不錯的學習教程和開發工具。
1. 首先要確定項目是否是自己做的,即確定項目的真實性;
舉個例子:你的項目是 SSM搭建的,是否可以告知搭建項目的過程和需要注意的地方是什麼嗎?
這時候有人就懵逼了,什麼都說不出來。
細問之下,告訴我項目是其他同事搭建的,自己只負責開發業務。
2. 項目的缺陷
架構項目的時,想太多會過度設計,想的少會出現業務增長而造成的種種問題。企業在探索某個技術領域的最佳實踐,其實並沒有行業通用標准,只是思想可以借鑒罷了。
不過,經驗豐富的話,還可以不斷重構,確實可以修復項目的缺陷。所以呢?我的問題來了:在項目中碰到過一些問題,你是如何解決的?
這是考察你實際處理問題的能力,還有你這個人是否會獨立思考,是否有腦子在運轉,這個真正的個人能力。
3. 項目的深度
項目做到一定規模後,想要得到更大的提升,一定會去深挖原理。
項目深度的考察其實比較難,總會有一些行業通用問題需要去解決,這也就是 BAT,TMD 這些公司經常會去制定一些行業標准,開源一些技術方案的原因。
當然,很多公司還是達不到這個層次,所以項目深度也是因人而異,並沒有通用標准。
所以考察方向就成了對這個項目的持續開發,垂直領域以及深度思考。
五、程序基礎,手寫代碼,演算法
當然不是,我們通過寫代碼就可以看出一個人的編程功底和編程思想。我們很多時候都在閱讀別人的代碼,所以能迅速的看出你代碼問題的人,在我看來,能力是在你之上的。
六、是否熱愛技術
一句話,即使你沒有那麼熱愛技術,你也要表現的很熱愛技術。
七、個人職業規劃
最開始,我認為所謂的個人規劃其實就是空談,一切不切實際的東西。但是當接觸的人多了,我慢慢發現。有職業規劃的人和沒有職業規劃的人真的不一樣。我會發現有些人之後的幾年毫無進展,完全是在混資歷,技術一塌糊塗。
1. 沒有個人規劃,走哪算哪,混日子型;
2. 忙於管理,疏於技術;
3. 長期在一個崗位,做著千篇一律的事情,永遠在寫CRUD;
八、面試者反饋
面試接近尾聲的時候,作為尊重,這時候我都會去問這樣一個問題:大概情況我都了解了,有沒有你覺得自己擅長而又沒被問到的東西?
每個人都會有自己的思維,甚至是偏見,所以面試的時候一定要去得到面試者的互動和反饋,從而映證自己的觀點。報著一個人才都不放過的心態,去全方位了解面試者。
九、你有什麼問題想問我?
面試官一定要放低姿態,不要一副高高在上的樣子,尤其是做技術的。如果覺得面試者稍微有些緊張,可以先聊點其他,如:所學專業,住在哪裡,上下班時間之類無關痛癢的問題,緩解一下緊張氣氛。
至於最後一個問題為什麼要問:你有什麼問題想問我?有以下幾點理由:
1. 確定面試反饋;
2. 給面試者一個溝通的機會;
3. 看看面試者對應試部門的了解或者是對公司的興趣;
⑹ java兩年經驗面試都會問什麼問題
個人介紹:
首先介紹下我面試時的自身條件情況,我把自己的情況分為優勢和劣勢來說可能更有利於你們比較自身情況。
劣勢:
1.15年7月畢業後開始到上海工作,面試的時候是17年3月到4月,一年多的經驗,勉強算兩年經驗。分析:一年多經驗我認為是比較尷尬的,處於一個不上不下的位置,很多公司比較喜歡招三年經驗的,或者直接招應屆生來培養。
2.畢業於一個非985/211,勉強上一本的高校。分析:這個相對影響較小,因為有工作經驗後,公司對學校的要求就沒那麼高了,只要是本科就基本沒問題,但是還是有個別叼毛公司只要985/211。
3.前一家公司是傳統電信行業,加入項目組時,項目已經上線有段時間了,我們的任務就是有需求就開發,有bug就優化,其他時間就聊騷,各干各的,工作一年多跟在養老一樣,用一句話說就是編程5分鍾,扯淡2小時,項目經驗嚴重不足,沒開發過很難的需求。分析:這一點是最傷的,公司招有經驗的就想看你都幹了些什麼牛批的東西,結果你告訴面試官我寫的需求都是垃圾。
優勢:
1.大學時拿過比較多的獎,每年都是校級優秀學生,畢業時是市級優秀畢業生,拿過省級ACM二等獎等。分析:大學的榮譽對一個有工作經驗的人來說,公司不一定會看重,但是可能會對面試官產生微妙的影響,特別是ACM獎,我碰到過有的面試官也是搞過ACM的,有共同的話題聊起來總是比較容易的,但是也要注意不能把這一欄篇幅寫的過於多,只能當作點綴用,我當時是放在簡歷最後一欄,簡要的寫了最主要的幾個獎。
2.良好的溝通交流能力。分析:這個能力不會是關鍵性的,但是可以加分。
3.較強的學習能力和邏輯思維能力。分析:有些公司和面試官還是比較看重一個人的學習能力的,經驗代表著你現在在什麼級別,而學習能力則代表著你將來能到達什麼級別。
學習過程:
看了我的優劣勢介紹,你會發現我的優勢相對於我的劣勢來說,簡直不值一提。我自己對此也有清晰的認識,因此從過完年之後,我就開始抓緊空閑時間學習。學習的過程如下:
1.看面試題
正常人第一步肯定都會看面試題,我也不例外,在看的過程中,我發現有些文章寫的不錯,對我幫助不小值得推薦,如下:
Java面試題全集(上)很多基礎的東西,建議先看。
各大公司Java後端開發面試題總結
面試心得與總結—BAT、網易、蘑菇街
關於Java面試,你應該准備這些知識點
2.深入學習
在看面試題的過程,你會遇到一些自己沒接觸過的或者以前沒深入學習過的知識,例如最常問的HashMap內部實現原理,這就促使你得開始去看jdk的源碼或者是學習一些新的東西。看源碼是很重要的一步,起步很難,但是會讓你收益良多,看源碼的過程如果碰到無法理解的地方,可以網路看下別人的理解。我學習源碼的過程中,看過幾個人的關於源碼的文章寫的很不錯,如下:
五月的倉頡
佔小狼
zhangshixi的Core java系列
3.熟悉項目
找出自己工作以來開發過的最叼的功能,將整個功能的流程和涉及的東西吃透。項目是面試中必問的環節,一般是以一個功能點為基礎展開問,因此你必須對這個功能有很深的認識,不能有模糊的地方。如果有時間,能把涉及到的知識點也搞懂最好。
4.做面試題
有不少公司是有面試的,如果你沒有準備過,很容易在各種小地方犯錯,建議去一些面試題網站多做些題目,我自己是用的牛客網。
5.學習記錄
把自己每天的學習時間和學習內容記錄下來,可以讓自己更有動力的學習,學習是一個枯燥的過程,你必須讓自己時刻保持有動力。
投簡歷、約面試環節
1.在哪些網站投?
拉勾網、BOSS直聘、獵聘網。
2.是否該海投?
投簡歷分為兩個情況。
1)沒有社招面試經驗:建議採取海投的方式,只要職位要求跟自己比較匹配都可以投,累計面試經驗。這個環節可以把投簡歷的網站增加兩家:智聯和無憂。
2)自認為社招面試經驗已經足夠:投那些職位匹配、公司滿意的職位。公司評價可以去看準網、網路、知乎等查詢。
3.一天約幾家面試合適?
最理想的情況為2家面試,上午一般在10點左右,下午一般在2點左右。建議把理想的公司放下午,因為下午的時間比較充足,可以讓公司更充分的了解你。我開始面的時候,每次都是上午面的不好,下午面的不錯。
4.投簡歷經常沒下文?
我當初也沒想到簡歷篩選這關有這么難,可能是我的簡歷確實亮點不多,再者HR很多都不是行內人,因此他們看得最直接的就是你上家的公司和你畢業的學校,如果你不是從牛逼的公司/學校出來,可能會碰到和我一樣的情況,應對的辦法就是多投。
5.是否該裸辭?
我一開始是邊上班邊投,然後利用調休時間,或者請假去面試。後來,面試機會越來越多,請假太頻繁了,自己都不好意思了,並且自己也已經有足夠的信心,這個時候我選擇了裸辭。裸辭還有一個原因是,在面試過程中你會發現,有的公司要人要的緊,如果你的辭職流程過長可能會導致你錯過這個公司。
6.注意事項
1)面試前一天把路線和時間算好,最好別遲到。
2)背個書包,帶好簡歷、充電寶、紙巾、雨傘。
面試環節
1.筆試常見的問題?
面試常見的問題上面給的面試題鏈接基本都有。我只提幾點:1)寫SQL:寫SQL很常考察group by、內連接和外連接。2)手寫代碼:手寫代碼一般考單例、排序、線程、消費者生產者。我建議排序演算法除了冒泡排序,最好還能手寫一種其他的排序代碼。試想:如果一般面試者都寫的冒泡排序,而你寫的是快速排序/堆排序,肯定能給面試官留下不錯的印象。
2.面試流程?
1)讓你自我介紹
2)問Java基礎知識
3)問項目
4)情景問題,例如:你的一個功能上了生產環境後,伺服器壓力驟增,該怎麼排查。
5)你有什麼想問面試官的
3.面試常問的知識點?
1)集合相關問題(必問):
HashMap、LinkedHashMap、ConcurrentHashMap、ArrayList、LinkedList的底層實現。
HashMap和Hashtable的區別。
ArrayList、LinkedList、Vector的區別。
HashMap和ConcurrentHashMap的區別。
HashMap和LinkedHashMap的區別。
HashMap是線程安全的嗎。
ConcurrentHashMap是怎麼實現線程安全的。
2)線程相關問題(必問):
創建線程的3種方式。
什麼是線程安全。
Runnable介面和Callable介面的區別。
wait方法和sleep方法的區別。
synchronized、Lock、ReentrantLock、ReadWriteLock。
介紹下CAS(無鎖技術)。
什麼是ThreadLocal。
創建線程池的4種方式。
ThreadPoolExecutor的內部工作原理。
分布式環境下,怎麼保證線程安全。
3)JVM相關問題:
介紹下垃圾收集機制(在什麼時候,對什麼,做了什麼)。
垃圾收集有哪些演算法,各自的特點。
類載入的過程。
雙親委派模型。
有哪些類載入器。
能不能自己寫一個類叫java.lang.String。
4)設計模式相關問題(必問):
先問你熟悉哪些設計模式,然後再具體問你某個設計模式具體實現和相關擴展問題。
5)資料庫相關問題,針對Mysql(必問):
給題目讓你手寫SQL。
有沒有SQL優化經驗。
Mysql索引的數據結構。
SQL怎麼進行優化。
SQL關鍵字的執行順序。
有哪幾種索引。
什麼時候該(不該)建索引。
Explain包含哪些列。
Explain的Type列有哪幾種值。
6)框架相關問題:
Hibernate和Mybatis的區別。
Spring MVC和Struts2的區別。
Spring用了哪些設計模式。
Spring中AOP主要用來做什麼。
Spring注入bean的方式。
什麼是IOC,什麼是依賴注入。
Spring是單例還是多例,怎麼修改。
Spring事務隔離級別和傳播性。
介紹下Mybatis/Hibernate的緩存機制。
Mybatis的mapper文件中#和$的區別。
Mybatis的mapper文件中resultType和resultMap的區別。
Mybatis中DAO層介面沒有寫實現類,Mapper中的方法和DAO介面方法是怎麼綁定到一起的,其內部是怎麼實現的。
7)其他遇到問題:
介紹下棧和隊列。
IO和NIO的區別。
介面和抽象類的區別。
int和Integer的自動拆箱/裝箱相關問題。
常量池相關問題。
==和equals的區別。
重載和重寫的區別。
String和StringBuilder、StringBuffer的區別。
靜態變數、實例變數、局部變數線程安全嗎,為什麼。
try、catch、finally都有return語句時執行哪個。
介紹下B樹、二叉樹。
ajax的4個字母分別是什麼意思。
xml全稱是什麼。
分布式鎖的實現。
分布式session存儲解決方案。
常用的linux命令。
一些經驗:
1.先投一些普通公司,等面出了心得再去投理想的公司。
2.不熟悉的技術不要主動提。
3.對於那種實習期6個月還打8折的公司,除非你沒有其他選擇了,否則不要去。
4.小公司喜歡在薪水上壓你,開的時候適當提高。
5.不要去參加招聘會,純粹是浪費時間。
6.把面試當作一次技術的交流,不要太在意是否能被錄取。
7.公司一般面完就決定是否錄取了,讓你回去等消息這種情況一般沒戲,無論你自己覺得面的有多好。
8.盡量少通過電話面試,效果不好。
9.在面試的日子裡,要保持每天學習,無論是學習新東西還是復習舊東西。
10.拿到offer了,問問自己這個公司讓自己100%滿意了嗎,如果不是,請繼續努力找更好的。
11.通過面試官可以大概判斷這家公司的情況。
12.拉勾投的簡歷很多會被篩掉,但是拉勾還是面試機會的最主要來源。
13.理想的公司可以多投幾次,我有好幾次都是第一次投被篩掉,多投幾次就過的經驗。
14.問到自己有深入研究過的知識,抓住機會好好表現,不要輕易放過。
⑺ 怎樣從容面對社招的Java面試
作為一名程序員,可能工作一段之後就需要再次奔赴在求職的路上,為了更好的工作機會和平台。如果是本科或研究生畢業,可以獲得校招的機會,當然校招的通過率大一些,但校招更多的是提供畢業生鍛煉的機會,如果想要留下來,也需要面對公司的嚴格考核。而社招雖然機會較多,但面試考核的難度也較大,所以面對每一次Java面試,多應該在技術上、心理上做一些精心准備。那麼,怎樣從容地面對社招的Java面試呢?筆者結合自身經歷談談自己的看法。
在參加各種筆試面試過程中都能感受到基礎知識的重要性, C、C++、Java的語法與數據結構。很多公司的流程基本是一樣的,只有筆試通過了才能夠有面試的機會,所以,盡量不要在以基礎知識為主的筆試中就敗下陣來。
此外,面試中在每個階段做的項目很重要,每個學員都應該認真對待自己所做的項目,只有自己親自經歷過做項目的每一個流程才能對面試官提出的問題對答如流。尚學堂陳老師提到在求職面試過程中最重要的一點就是耐心,認真總結在面試過程中對方問到的問題,放平心態,不合適也不要灰心氣餒。
求職的實質也就是尋求一個適合自己發展的機遇,具有一定的偶然性,很多因素是無法預測的,但是有些因素是可以自己掌握的,例如技術和一定的表達能力。
下面是一些常見的問題:
一、Java的數據結構相關的類實現原理,比如LinkedList,ArrayList,HashMap,TreeMap這一類的。比如,面試官先問你HashMap是不是有序的?肯定回答說,不是有序的。那面試官就會繼續問你,有沒有有順序的Map實現類?你如果這個時候說不知道的話,那這個問題就到此結束了。如果你說有TreeMap和LinkedHashMap。那麼面試官接下來就可能會問你,TreeMap和LinkedHashMap是如何保證它的順序的?如果你回答不上來,那麼到此為止。如果你依然回答上來了,那麼面試官還會繼續問你,你覺得它們兩個哪個的有序實現比較好?如果你依然可以回答的話,那麼面試官會繼續問你,你覺得還有沒有比它更好或者更高效的實現方式?如果你還能說出來的話,那麼就你所說的實現方式肯定依然可以問你很多問題。
這種問題非常符合程序員的思維方式,如果技術不扎實,很快就會被問住。
二、IO包和NIO包中的內容。這部分裡面NIO會是重點,IO包大部分都會比較熟悉,因此可能會直接略過,直接問你NIO的內容。
IO包和NIO包的內容相對來說不是很多,首先NIO模型要熟悉,特別是其中的selector一定要非常清楚它的職責和實現原理。其實NIO的核心是IO線程池,一定要記住這個關鍵點。有的時候,面試官可能也會問你IO包的設計模式(裝飾器模式),為什麼要這樣設計?
有的面試官還會問你有沒有更好的設計,這個時候如果你不知道請果斷說自己現在的水平有限,在回答這種發揮性問題的時候也不用勉強自己。
三、Java的虛擬機的內容。這部分主要包括三部分,GC、類載入機制,以及內存。
首先,面試官可以先問你什麼時候一個對象會被GC?接著繼續問你為什麼要在這種時候對象才會被GC?接著繼續問你GC策略都有哪些分類?你如果說出來了,繼續問你這些策略分別都有什麼優劣勢?都適用於什麼場景?你繼續說出來了以後,給你舉個實際的場景,讓你選擇一個GC策略?你如果選出來了,繼續問你,為什麼要選擇這個策略?
以上是一些常見的面試問題和提問方式,在Java基礎中,可以提出以上問題的內容有很多,所以平時要多復習。
與此同時,面試官也會引導你講述自己的項目,並在中間穿插提問,有點像答辯。這一部分是面試過程中必問,也是聊得最久的一個階段。除非你前面的語言部分非常扎實,扎實到面試官問了一兩個小時,依舊沒有探出你對語言本身的了解到底有多深。否則的話,你一定逃不過自己的項目這一關,而且一般情況下聊得時間不會太短。所以,自己曾經做過的項目在面試的時候都是自己的財富,認真總結思考,要有自己的想法。當你的回答能夠讓面試官眼前一亮時,你距離成功也就不遠了。
希望以上的講述可以幫助你更從容地面對社招的Java面試,在求職的過程中找到自己合適的機會,祝你成功!!
⑻ Java面試技巧和常用問題解答
第一,談談final, finally, finalize的區別。
final 用於聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。finally 是異常處理語句結構的一部分,表示總是執行。
finalize 是Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收,例如關閉文件等。
第二,Anonymous Inner Class (匿名內部類) 是否可以extends(繼承)其它類,是否可以implements(實現)interface(介面)
可以繼承其他類或完成其他介面,在swing編程中常用此方式。
第三,Static Nested Class 和 Inner Class的不同,說得越多越好(面試題有的很籠統)。
Static Nested Class是被聲明為靜態(static)的內部類,它可以不依賴於外部類實例被實例化。而通常的內部類需要在外部類實例化後才能實例化。
第四,&和&&的區別。
&是位運算符,表示按位與運算,&&是邏輯運算符,表示邏輯與(and)。
第五,HashMap和Hashtable的區別。
HashMap是Hashtable的輕量級實現(非線程安全的實現),他們都完成了Map介面,主要區別在於HashMap允許空(null)鍵值(key),由於非線程安全,效率上可能高於Hashtable。
第六,Collection 和 Collections的區別。
Collection是集合類的上級介面,繼承與他的介面主要有Set 和List.Collections是針對集合類的一個幫助類,他提供一系列靜態方法實現對各種集合的搜索、排序、線程安全化等操作。
第七,什麼時候用assert。
Java1.4新增關鍵字(語法),用於測試boolean 表達式狀態,可用於調試程序。使用方法 assert ,表示如果表達式為真(true),則下面的語句執行,否則拋出AssertionError。另外的使用方式assert boolean表達式,表示如果表達式為真,後面的表達式忽略,否則後面表達式的值用於AssertionError的構建參數。注意編譯時要增加 -source 1.4 參數,否則報錯。運行時要增加 –ea參數,否則assert行被忽略。
第八,GC是什麼?為什麼要有GC?
GC是垃圾收集的意思(Gabage Collection),內存處理是編程人員容易出現問題的地方,忘記或者錯誤的內存回收會導致程序或系統的不穩定甚至崩潰,Java提供的GC功能可以自動監測對象是否超過作用域從而達到自動回收內存的目的,Java語言沒有提供釋放已分配內存的顯示操作方法。
第九,String s = new String("xyz"); 創建了幾個String Object?
2個。首先在數據段創建一個"xyz"對象,再根據該對象在堆區創建一個新的對象,在棧區創建變數s,該變數是指向堆區對象的引用。所以一共兩個String對象。
第十,Math.round(11.5)等於多少 Math.round(-11.5)等於多少?
Math.round(11.5)==12
Math.round(-11.5)==-11
round方法返回與參數最接近的長整數,參數加12後求其floor。
第十一,short s1 = 1; s1 = s1 + 1; 有什麼錯?short s1 = 1; s1 += 1; 有什麼錯?
s1 + 1運算結果是int型,需要強制轉換類型。
s1 += 1; 可以正確編譯。
第十二,sleep() 和 wait() 有什麼區別
sleep是線程類(Thread)的方法,導致此線程暫停執行指定時間,給執行機會給其他線程,但是監控狀態依然保持,到時後會自動恢復。調用 sleep不會釋放對象鎖。wait是Object類的方法,對此對象調用wait方法導致本線程放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象發出notify方法(或notifyAll)後本線程才進入對象鎖定池准備獲得對象鎖進入運行狀態。
第十三,Java有沒有goto
沒有
第十四,數組有沒有length()這個方法 String有沒有length()這個方法?
數組沒有length()這個方法,有length的屬性。
String有length()這個方法。 來
第十五,Overload和Override的區別。
Overloaded的方法是否可以改變返回值的類型?
方法的重寫Overriding和重載Overloading是Java多態性的不同表現。重寫Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被「屏蔽」了。如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類型。
第十六,Set里的元素是不能重復的,那麼用什麼方法來區分重復與否呢?是用==還是equals()?它們有何區別?
Set里的元素是不能重復的,那麼用iterator()方法來區分重復與否。equals()是判讀兩個Set是否相等。
equals()和==方法決定引用值是否指向同一對象。equals()在類中被覆蓋,為的是當兩個分離的對象的內容和類型相配的話,返回真值。
第十七,給我一個你最常見到的runtime exception。
NullPointerException或者IndexOutOfBoundsException。
(其它:ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, , DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException,
ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException)
第十八,error和exception有什麼區別?
error 表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說內存溢出。不可能指望程序能處理這樣的情況。
exception 表示一種設計或實現問題。也就是說,它表示如果程序運行正常,從不會發生的情況。
第十九,List, Set, Map是否繼承自Collection介面?
List,Set是
Map不是
第二十,abstract class和interface有什麼區別?
聲明方法的存在而不去實現它的類被叫做抽象類(abstract class),它用於要創建一個體現某些基本行為的類,並為該類聲明方法,但不能在該類中實現該類的情況。不能創建abstract 類的實例。然而可以創建一個變數,其類型是一個抽象類,並讓它指向具體子類的一個實例。不能有抽象構造函數或抽象靜態方法。Abstract 類的子類為它們父類中的所有抽象方法提供實現,否則它們也是抽象類為。取而代之,在子類中實現該方法。知道其行為的其它類可以在類中實現這些方法。
介面(interface)是抽象類的變體。在介面中,所有方法都是抽象的。多繼承性可通過實現這樣的介面而獲得。介面中的所有方法都是抽象的,沒有一個有程序體。介面只可以定義static final成員變數。介面的實現與子類相似,除了該實現類不能從介面定義中繼承行為。當類實現特殊介面時,它定義(即將程序體給予)所有這種介面的方法。然後,它可以在實現了該介面的類的任何對象上調用介面的方法。由於有抽象類,它允許使用介面名作為引用變數的類型。通常的動態聯編將生效。引用可以轉換到介面類型或從介面類型轉換,instanceof 運算符可以用來決定某對象的類是否實現了介面。
第二十一,abstract的method是否可同時是static?是否可同時是native?是否可同時是synchronized?
第二十二,介面是否可繼承介面?抽象類是否可實現(implements)介面?抽象類是否可繼承實體類(concrete class)?
介面可以繼承介面。抽象類可以實現(implements)介面。抽象類是可繼承實體類,但前提是實體類必須有明確的構造函數。
第二十三,啟動一個線程是用run()還是start()?
啟動一個線程是調用start()方法,使線程所代表的虛擬處理機處於可運行狀態,這意味著它可以由JVM調度並執行。這並不意味著線程就會立即運行。run()方法可以產生必須退出的標志來停止一個線程。
第二十四,構造器Constructor是否可被override?
構造器Constructor不能被繼承,因此不能重寫Overriding,但可以被重載Overloading。
第二十五,是否可以繼承String類?
String類是final類故不可以繼承。
第二十六,當一個線程進入一個對象的一個synchronized方法後,其它線程是否可進入此對象的其它方法?
不能,一個對象的一個synchronized方法只能由一個線程訪問。
第二十七,try {}里有一個return語句,那麼緊跟在這個try後的finally {}里的code會不會被執行?什麼時候被執行,在return前還是後?
會執行。在return前執行,但如果return後邊是一個表達式,會先計算表達式,再執行finally。
第二十八,編程題,用最有效率的方法算出2乘以8等於幾?
有C背景的程序員特別喜歡問這種問題。
2 << 3(左位移幾位表示乘以2的幾次方,8為2的3次方,所以左移三位相當於乘以8。同理,右移幾位相當於除以2的幾次方。移位的方式做乘除運算效率最高)。
第二十九,兩個對象x和y,它們的值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對?
不對,對象的值相同,則必然有相同的hash code。
第三十,當一個對象被當作參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,那麼這里到底是值傳遞還是引用傳遞?
是值傳遞。Java 編程語言只由值傳遞參數。當一個對象實例作為一個參數被傳遞到方法中時,參數的值就是對該對象的引用。對象的內容可以在被調用的方法中改變,但對象的引用是永遠不會改變的。
第三十一,swtich是否能作用在byte上?是否能作用在long上?是否能作用在String上?
switch(expr1)中,expr1是一個整數表達式。因此傳遞給 switch 和 case 語句的參數應該是 int、 short、 char 或者 byte。long,string 都不能作用於swtich(Java1.7據說可以為String)
第三十二,編程題,寫一個單例類Singleton出來。
Singleton模式主要作用是保證在Java應用程序中,一個類Class只有一個實例存在。
一般Singleton模式通常有以下兩種種形式:
第一種形式:定義一個類,它的構造函數為private的,它有一個static的private的該類變數,在類初始化時實例話,通過一個public的getInstance方法獲取對它的引用,繼而調用其中的方法。
01. public class Singleton {
02. //第一步,定義一個私有的構造函數
03. private Singleton(){}
04. //第二步,定義一個私有、靜態的該類的實例變數,並調用構造函數初始化
05. private static Singleton instance = new Singleton();
06. //第三步,定義一個公有、靜態的方法,用於供外部取得定義的實例變數
07. public static Singleton getInstance() {
08. //第四步,返回(return)實例變數
09. return instance;
10. }
11. }
第二種形式
01. public class Singleton {
02. //第一步,定義一個私有、靜態的該類的實例變數,並初始化為null
03. private static Singleton instance = null;
04. //第二步,定義一個公有、靜態、線程安全的方法,用於供外部取得定義的實例變數
05. public static synchronized Singleton getInstance() {
06. //第三步,判斷是否是第一次調用(實例變數為空),第一次時需要創建對象
07. if (instance == null) {
08. instance = new Singleton();
09. }
10. //第四步,返回(return)實例變數
11. return instance;
12. }
13. }
⑼ java面試技巧有哪些有什麼需要注意的嗎
Java基礎知識要掌握,很多面試題上都有,能問的一般就是這些,另外就是項目經驗,你做過的哪些模塊,用到哪些技術,有時候會問到怎麼實現等等。面試的時候不要緊張,Java一般分為筆試與面試,偶爾還有碰到機試之類的。最後一點,程序員跳槽概率太大了,職位也是相當的多,不要氣餒,相信你肯定能找到好工作的!