- Java高級工程師面試題及答案 推薦度:
- 相關(guān)推薦
Java工程師面試題及答案
在學(xué)習(xí)和工作的日常里,我們最不陌生的就是試題了,試題可以幫助參考者清楚地認(rèn)識自己的知識掌握程度。一份什么樣的試題才能稱之為好試題呢?下面是小編整理的Java工程師面試題及答案,歡迎大家借鑒與參考,希望對大家有所幫助。
Java工程師面試題及答案 1
1. 如何判斷一個(gè)數(shù)是2的冪。
個(gè)人認(rèn)為,數(shù)字轉(zhuǎn)化為二進(jìn)制,符號位為0,余下部分有且只有最左邊一位是1,其余位都是0,才是2的冪。原理是 乘二則向左進(jìn)一位。
2.陷阱面試題:
在Java中,Throwable是一個(gè)接口還是抽象類?
3.Javascript 題目
4. 二進(jìn)制算法以及思維陷阱題
現(xiàn)有一千瓶藥水,其中九百九十九瓶是完全一樣的,只有一瓶里面是毒藥,但是外觀上分辨不出來。毒藥如果給小白鼠喝一點(diǎn),一星期后這只小白鼠會(huì)突然死亡,但之前一點(diǎn)癥狀也沒有,F(xiàn)需要在一星期內(nèi)找出哪瓶是毒藥,問至少需要幾只小白鼠?
5.Java數(shù)據(jù)范圍
在Java中, 有一個(gè)數(shù)字,比如100億,可以使用 int 來存儲(chǔ)嗎?
100億 * 100億呢,可以用什么類型來存儲(chǔ)?
這樣計(jì)算, int 類型是32位,4個(gè)字節(jié),2的10次方是 1024,大約是1K,2^20 = 1M,約100萬, 2^30= 1G,大約是10億,所以整數(shù)只能存大約40億個(gè)數(shù)字,正數(shù)22E個(gè),所以 100億可以使用long來存儲(chǔ),但不能使用 int來存儲(chǔ)。
long是64位,因?yàn)?32位存放不下100億,所以64位也存放不下 100億 * 100億,只能使用特殊的類型啦,比如K神所說的 BigInteger,或者 BigDecimal來存放。
一個(gè)測試程序:
6. Java面試題: 如何在一個(gè)interface 中執(zhí)行一些操作
7.MySQL中UUID做主鍵如何變得有序呢?
返回的.結(jié)果如下所示:
8.為什么JSON定義的標(biāo)準(zhǔn)中,屬性名需要用引號引起來呢,像下面的name一樣?
應(yīng)該考慮到各種系統(tǒng),各種關(guān)鍵字以及標(biāo)識符的組成不同,而且會(huì)有Map等情況
9.關(guān)于JVM
有個(gè)萬(wu)能(lai) 的面試技巧,你可以問求職者,這個(gè)背后的思想是什么,你理解他的原理嗎,為什么要這樣實(shí)現(xiàn),如果讓你自己寫,多長時(shí)間做一個(gè)基礎(chǔ)版本出來?
GC 有哪幾種, 每個(gè)JDK版本中有什么區(qū)別, 哪幾種算法比較好, 適合什么情況, 其回收的思想是什么,怎么實(shí)現(xiàn)的,優(yōu)缺點(diǎn)是什么,你要如何調(diào)優(yōu)。。
10.面試題: Java 中, 下面的這種用法有什么問題?
Date nextMonth = new Date(newDate().getTime() + 30*24*60*60*1000);
當(dāng)然,這種用法是很不好的,加一個(gè)月應(yīng)該使用的是Calendar 類,Calendar是Java的標(biāo)準(zhǔn)工具類,在 java.util 包下面.
Date today = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(today);
cal.add(Calendar.MONTH, 1); // 加一個(gè)月
cal.add(Calendar.DATE, -1); // 減一天
//
Date nextM = cal.getTime();
System.out.println(nextM);
更坑的在這里:
long n = 30*24*60*60*1000;
long nl = 30*24*60*60*1000L;
System.out.println("n="+n);
System.out.println("nl="+nl);
可以參考下面的輸出結(jié)果:
n=-1702967296
nl=2592000000
提示: int 值可以放下多大的值?
Java工程師面試題及答案 2
第一,談?wù)刦inal, finally, finalize的區(qū)別。
final?修飾符(關(guān)鍵字)如果一個(gè)類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個(gè)類不能既被聲明為 abstract的,又被聲明為final的。將變量或方法聲明為final,可以保證它們在使用中不被改變。被聲明為final的變量必須在聲明時(shí)給定初值,而在以后的引用中只能讀取,不可修改。被聲明為final的方法也同樣只能使用,不能重載
finally?再異常處理時(shí)提供 finally 塊來執(zhí)行任何清除操作。如果拋出一個(gè)異常,那么相匹配的 catch 子句就會(huì)執(zhí)行,然后控制就會(huì)進(jìn)入 finally 塊(如果有的話)。
finalize?方法名。Java 技術(shù)允許使用 finalize 方法在垃圾收集器將對象從內(nèi)存中清除出去之前做必要的清理工作。這個(gè)方法是由垃圾收集器在確定這個(gè)對象沒有被引用時(shí)對這個(gè)對象調(diào)用的。它是在 Object類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize 方法以整理系統(tǒng)資源或者執(zhí)行其他清理工作。finalize 方法是在垃圾收集器刪除對象之前對這個(gè)對象調(diào)用的。
第二,HashMap和Hashtable的區(qū)別。
都屬于Map接口的類,實(shí)現(xiàn)了將惟一鍵映射到特定的值上。
HashMap 類沒有分類或者排序。它允許一個(gè) null 鍵和多個(gè) null 值。
Hashtable 類似于 HashMap,但是不允許 null 鍵和 null 值。它也比 HashMap 慢,因?yàn)樗峭降摹?/p>
第三,String s = new String("xyz");創(chuàng)建了幾個(gè)String Object?
兩個(gè)對象,一個(gè)是“xyx”,一個(gè)是指向“xyx”的引用對象s。
第四,sleep 和 wait 有什么區(qū)別? 搞線程的最愛
sleep方法是使線程停止一段時(shí)間的方法。在sleep 時(shí)間間隔期滿后,線程不一定立即恢復(fù)執(zhí)行。這是因?yàn)樵谀莻(gè)時(shí)刻,其它線程可能正在運(yùn)行而且沒有被調(diào)度為放棄執(zhí)行,除非(a)“醒來”的線程具有更高的優(yōu)先級
(b)正在運(yùn)行的線程因?yàn)槠渌蚨枞?/p>
wait是線程交互時(shí),如果線程對一個(gè)同步對象x 發(fā)出一個(gè)wait調(diào)用,該線程會(huì)暫停執(zhí)行,被調(diào)對象進(jìn)入等待狀態(tài),直到被喚醒或等待時(shí)間到。
第五,short s1 = 1; s1 = s1 + 1;有什么錯(cuò)? short s1 = 1; s1 += 1;有什么錯(cuò)?
short s1 = 1; s1 = s1 + 1;有錯(cuò),s1是short型,s1+1是int型,不能顯式轉(zhuǎn)化為short型?尚薷臑閟1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正確。
第六,Overload和Override的區(qū)別。Overloaded的方法是否可以改變返回值的類型?
方法的重寫Overriding和重載Overloading是Java多態(tài)性的不同表現(xiàn)。重寫Overriding是父類與子類之間多態(tài)性的一種表現(xiàn),重載Overloading是一個(gè)類中多態(tài)性的一種表現(xiàn)。如果在子類中定義某方法與其父類有相同的名稱和參數(shù),我們說該方法被重寫 (Overriding)。子類的對象使用這個(gè)方法時(shí),將調(diào)用子類中的定義,對它而言,父類中的定義如同被“屏蔽”了。如果在一個(gè)類中定義了多個(gè)同名的`方法,它們或有不同的參數(shù)個(gè)數(shù)或有不同的參數(shù)類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類型。
第七,Set里的元素是不能重復(fù)的,那么用什么方法來區(qū)分重復(fù)與否呢? 是用==還是equals? 它們有何區(qū)別?
Set里的元素是不能重復(fù)的,那么用iterator方法來區(qū)分重復(fù)與否。equals是判讀兩個(gè)Set是否相等。
equals和==方法決定引用值是否指向同一對象equals在類中被覆蓋,為的是當(dāng)兩個(gè)分離的對象的內(nèi)容和類型相配的話,返回真值。
第八,error和exception有什么區(qū)別?
error 表示恢復(fù)不是不可能但很困難的情況下的一種嚴(yán)重問題。比如說內(nèi)存溢出。不可能指望程序能處理這樣的情況。
exception 表示一種設(shè)計(jì)或?qū)崿F(xiàn)問題。也就是說,它表示如果程序運(yùn)行正常,從不會(huì)發(fā)生的情況。
第九,給我一個(gè)你最常見到的runtime exception。
ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException,
ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException
第十,Set里的元素是不能重復(fù)的,那么用什么方法來區(qū)分重復(fù)與否呢? 是用==還是equals? 它們有何區(qū)別?
Set里的元素是不能重復(fù)的,那么用iterator方法來區(qū)分重復(fù)與否。equals是判讀兩個(gè)Set是否相等。
equals和==方法決定引用值是否指向同一對象equals在類中被覆蓋,為的是當(dāng)兩個(gè)分離的對象的內(nèi)容和類型相配的話,返回真值。
【Java工程師面試題及答案】相關(guān)文章:
java面試題2017及答案03-06
Java高級工程師面試題及答案03-24
Java工程師面試題03-29
Java main方法面試題及答案03-14
2017年java面試題及答案03-09
高級Java面試題及答案201602-26
2017年最新java面試題及答案03-09