java常見(jiàn)面試題
java常見(jiàn)面試題(附答案)
Java面試題涵蓋的范圍非常廣泛,根據(jù)不同的崗位和公司要求,面試題可能會(huì)有所不同。為了讓面試者能順利應(yīng)對(duì)面試官的問(wèn)題,下面小編為大家收集整理了關(guān)于java常見(jiàn)面試題的相關(guān)內(nèi)容,希望對(duì)大家有所幫助!
java常見(jiàn)面試題
多線(xiàn)程、并發(fā)及線(xiàn)程的基礎(chǔ)問(wèn)題
1)Java 中能創(chuàng)建 volatile 數(shù)組嗎?
能,Java 中可以創(chuàng)建 volatile 類(lèi)型數(shù)組,不過(guò)只是一個(gè)指向數(shù)組的引用,而不是整個(gè)數(shù)組。我的意思是,如果改變引用指向的數(shù)組,將會(huì)受到 volatile 的保護(hù),但是如果多個(gè)線(xiàn)程同時(shí)改變數(shù)組的元素,volatile 標(biāo)示符就不能起到之前的保護(hù)作用了。
2)volatile 能使得一個(gè)非原子操作變成原子操作嗎?
一個(gè)典型的例子是在類(lèi)中有一個(gè) long 類(lèi)型的成員變量。如果你知道該成員變量會(huì)被多個(gè)線(xiàn)程訪(fǎng)問(wèn),如計(jì)數(shù)器、價(jià)格等,你最好是將其設(shè)置為 volatile。為什么?因?yàn)?Java 中讀取 long 類(lèi)型變量不是原子的,需要分成兩步,如果一個(gè)線(xiàn)程正在修改該 long 變量的值,另一個(gè)線(xiàn)程可能只能看到該值的一半(前 32 位)。但是對(duì)一個(gè) volatile 型的 long 或 double 變量的讀寫(xiě)是原子。
3)volatile 修飾符的有過(guò)什么實(shí)踐?
一種實(shí)踐是用 volatile 修飾 long 和 double 變量,使其能按原子類(lèi)型來(lái)讀寫(xiě)。double 和 long 都是64位寬,因此對(duì)這兩種類(lèi)型的讀是分為兩部分的,第一次讀取第一個(gè) 32 位,然后再讀剩下的 32 位,這個(gè)過(guò)程不是原子的,但 Java 中 volatile 型的 long 或 double 變量的讀寫(xiě)是原子的。volatile 修復(fù)符的另一個(gè)作用是提供內(nèi)存屏障(memory barrier),例如在分布式框架中的應(yīng)用。簡(jiǎn)單的說(shuō),就是當(dāng)你寫(xiě)一個(gè) volatile 變量之前,Java 內(nèi)存模型會(huì)插入一個(gè)寫(xiě)屏障(write barrier),讀一個(gè) volatile 變量之前,會(huì)插入一個(gè)讀屏障(read barrier)。意思就是說(shuō),在你寫(xiě)一個(gè) volatile 域時(shí),能保證任何線(xiàn)程都能看到你寫(xiě)的值,同時(shí),在寫(xiě)之前,也能保證任何數(shù)值的更新對(duì)所有線(xiàn)程是可見(jiàn)的,因?yàn)閮?nèi)存屏障會(huì)將其他所有寫(xiě)的值更新到緩存。
4)volatile 類(lèi)型變量提供什么保證?
volatile 變量提供順序和可見(jiàn)性保證,例如,JVM 或者 JIT為了獲得更好的性能會(huì)對(duì)語(yǔ)句重排序,但是 volatile 類(lèi)型變量即使在沒(méi)有同步塊的情況下賦值也不會(huì)與其他語(yǔ)句重排序。 volatile 提供 happens-before 的保證,確保一個(gè)線(xiàn)程的修改能對(duì)其他線(xiàn)程是可見(jiàn)的。某些情況下,volatile 還能提供原子性,如讀 64 位數(shù)據(jù)類(lèi)型,像 long 和 double 都不是原子的,但 volatile 類(lèi)型的 double 和 long 就是原子的。
10 個(gè)線(xiàn)程和 2 個(gè)線(xiàn)程的同步代碼,哪個(gè)更容易寫(xiě)?
從寫(xiě)代碼的角度來(lái)說(shuō),兩者的復(fù)雜度是相同的,因?yàn)橥酱a與線(xiàn)程數(shù)量是相互獨(dú)立的。但是同步策略的選擇依賴(lài)于線(xiàn)程的數(shù)量,因?yàn)樵蕉嗟木€(xiàn)程意味著更大的競(jìng)爭(zhēng),所以你需要利用同步技術(shù),如鎖分離,這要求更復(fù)雜的代碼和專(zhuān)業(yè)知識(shí)。
6)你是如何調(diào)用 wait()方法的?使用 if 塊還是循環(huán)?為什么?
wait() 方法應(yīng)該在循環(huán)調(diào)用,因?yàn)楫?dāng)線(xiàn)程獲取到 CPU 開(kāi)始執(zhí)行的時(shí)候,其他條件可能還沒(méi)有滿(mǎn)足,所以在處理前,循環(huán)檢測(cè)條件是否滿(mǎn)足會(huì)更好。下面是一段標(biāo)準(zhǔn)的使用 wait 和 notify 方法的代碼:
// The standard idiom for using the wait method
synchronized (obj) {
while (condition does not hold)
obj.wait(); // (Releases lock, and reacquires on wakeup)
... // Perform action appropriate to condition
}
參見(jiàn) [Effective Java]第 69 條,獲取更多關(guān)于為什么應(yīng)該在循環(huán)中來(lái)調(diào)用 wait 方法的內(nèi)容。
7)什么是多線(xiàn)程環(huán)境下的偽共享(false sharing)?
偽共享是多線(xiàn)程系統(tǒng)(每個(gè)處理器有自己的局部緩存)中一個(gè)眾所周知的性能問(wèn)題。偽共享發(fā)生在不同處理器的上的線(xiàn)程對(duì)變量的修改依賴(lài)于相同的緩存行。
有經(jīng)驗(yàn)程序員的 Java 面試題
偽共享問(wèn)題很難被發(fā)現(xiàn),因?yàn)榫€(xiàn)程可能訪(fǎng)問(wèn)完全不同的全局變量,內(nèi)存中卻碰巧在很相近的位置上。如其他諸多的并發(fā)問(wèn)題,避免偽共享的最基本方式是仔細(xì)審查代碼,根據(jù)緩存行來(lái)調(diào)整你的數(shù)據(jù)結(jié)構(gòu)。
8)什么是 Busy spin?我們?yōu)槭裁匆褂盟?
Busy spin 是一種在不釋放 CPU 的基礎(chǔ)上等待事件的技術(shù)。它經(jīng)常用于避免丟失 CPU 緩存中的數(shù)據(jù)(如果線(xiàn)程先暫停,之后在其他CPU上運(yùn)行就會(huì)丟失)。所以,如果你的工作要求低延遲,并且你的線(xiàn)程目前沒(méi)有任何順序,這樣你就可以通過(guò)循環(huán)檢測(cè)隊(duì)列中的新消息來(lái)代替調(diào)用 sleep() 或 wait() 方法。它唯一的好處就是你只需等待很短的時(shí)間,如幾微秒或幾納秒。LMAX 分布式框架是一個(gè)高性能線(xiàn)程間通信的庫(kù),該庫(kù)有一個(gè) BusySpinWaitStrategy 類(lèi)就是基于這個(gè)概念實(shí)現(xiàn)的,使用 busy spin 循環(huán) EventProcessors 等待屏障。
9)Java 中怎么獲取一份線(xiàn)程 dump 文件?
在 Linux 下,你可以通過(guò)命令 kill -3 PID (Java 進(jìn)程的進(jìn)程 ID)來(lái)獲取 Java 應(yīng)用的 dump 文件。在 Windows 下,你可以按下 Ctrl + Break 來(lái)獲取。這樣 JVM 就會(huì)將線(xiàn)程的 dump 文件打印到標(biāo)準(zhǔn)輸出或錯(cuò)誤文件中,它可能打印在控制臺(tái)或者日志文件中,具體位置依賴(lài)應(yīng)用的配置。如果你使用Tomcat。
10)Swing 是線(xiàn)程安全的?
不是,Swing 不是線(xiàn)程安全的。你不能通過(guò)任何線(xiàn)程來(lái)更新 Swing 組件,如 JTable、JList 或 JPanel,事實(shí)上,它們只能通過(guò) GUI 或 AWT 線(xiàn)程來(lái)更新。這就是為什么 Swing 提供 invokeAndWait() 和 invokeLater() 方法來(lái)獲取其他線(xiàn)程的 GUI 更新請(qǐng)求。這些方法將更新請(qǐng)求放入 AWT 的線(xiàn)程隊(duì)列中,可以一直等待,也可以通過(guò)異步更新直接返回結(jié)果。你也可以在參考答案中查看和學(xué)習(xí)到更詳細(xì)的內(nèi)容。
11)什么是線(xiàn)程局部變量?
線(xiàn)程局部變量是局限于線(xiàn)程內(nèi)部的變量,屬于線(xiàn)程自身所有,不在多個(gè)線(xiàn)程間共享。Java 提供 ThreadLocal 類(lèi)來(lái)支持線(xiàn)程局部變量,是一種實(shí)現(xiàn)線(xiàn)程安全的方式。但是在管理環(huán)境下(如 web 服務(wù)器)使用線(xiàn)程局部變量的時(shí)候要特別小心,在這種情況下,工作線(xiàn)程的生命周期比任何應(yīng)用變量的生命周期都要長(zhǎng)。任何線(xiàn)程局部變量一旦在工作完成后沒(méi)有釋放,Java 應(yīng)用就存在內(nèi)存泄露的風(fēng)險(xiǎn)。
12)用 wait-notify 寫(xiě)一段代碼來(lái)解決生產(chǎn)者-消費(fèi)者問(wèn)題?
答案
http://java67.blogspot.sg/201…
請(qǐng)參考答案中的示例代碼。只要記住在同步塊中調(diào)用 wait() 和 notify()方法,如果阻塞,通過(guò)循環(huán)來(lái)測(cè)試等待條件。
用 Java 寫(xiě)一個(gè)線(xiàn)程安全的單例模式(Singleton)?
答案
http://javarevisited.blogspot…
請(qǐng)參考答案中的示例代碼,這里面一步一步教你創(chuàng)建一個(gè)線(xiàn)程安全的 Java 單例類(lèi)。當(dāng)我們說(shuō)線(xiàn)程安全時(shí),意思是即使初始化是在多線(xiàn)程環(huán)境中,仍然能保證單個(gè)實(shí)例。Java 中,使用枚舉作為單例類(lèi)是最簡(jiǎn)單的方式來(lái)創(chuàng)建線(xiàn)程安全單例模式的方式。
14)Java 中 sleep 方法和 wait 方法的區(qū)別?
雖然兩者都是用來(lái)暫停當(dāng)前運(yùn)行的線(xiàn)程,但是 sleep() 實(shí)際上只是短暫停頓,因?yàn)樗粫?huì)釋放鎖,而 wait() 意味著條件等待,這就是為什么該方法要釋放鎖,因?yàn)橹挥羞@樣,其他等待的線(xiàn)程才能在滿(mǎn)足條件時(shí)獲取到該鎖。
15)什么是不可變對(duì)象(immutable object)?Java 中怎么創(chuàng)建一個(gè)不可變對(duì)象?
不可變對(duì)象指對(duì)象一旦被創(chuàng)建,狀態(tài)就不能再改變。任何修改都會(huì)創(chuàng)建一個(gè)新的對(duì)象,如 String、Integer及其它包裝類(lèi)。詳情參見(jiàn)答案,一步一步指導(dǎo)你在 Java 中創(chuàng)建一個(gè)不可變的類(lèi)。
16)我們能創(chuàng)建一個(gè)包含可變對(duì)象的不可變對(duì)象嗎?
是的,我們是可以創(chuàng)建一個(gè)包含可變對(duì)象的不可變對(duì)象的,你只需要謹(jǐn)慎一點(diǎn),不要共享可變對(duì)象的引用就可以了,如果需要變化時(shí),就返回原對(duì)象的一個(gè)拷貝。最常見(jiàn)的例子就是對(duì)象中包含一個(gè)日期對(duì)象的引用。
數(shù)據(jù)類(lèi)型和 Java 基礎(chǔ)面試問(wèn)題
17)Java 中應(yīng)該使用什么數(shù)據(jù)類(lèi)型來(lái)代表價(jià)格?
如果不是特別關(guān)心內(nèi)存和性能的話(huà),使用BigDecimal,否則使用預(yù)定義精度的 double 類(lèi)型。
18)怎么將 byte 轉(zhuǎn)換為 String?
可以使用 String 接收 byte[] 參數(shù)的構(gòu)造器來(lái)進(jìn)行轉(zhuǎn)換,需要注意的點(diǎn)是要使用的正確的編碼,否則會(huì)使用平臺(tái)默認(rèn)編碼,這個(gè)編碼可能跟原來(lái)的編碼相同,也可能不同。
19)Java 中怎樣將 bytes 轉(zhuǎn)換為 long 類(lèi)型?
20)我們能將 int 強(qiáng)制轉(zhuǎn)換為 byte 類(lèi)型的變量嗎?如果該值大于 byte 類(lèi)型的范圍,將會(huì)出現(xiàn)什么現(xiàn)象?
是的,我們可以做強(qiáng)制轉(zhuǎn)換,但是 Java 中 int 是 32 位的,而 byte 是 8 位的,所以,如果強(qiáng)制轉(zhuǎn)化是,int 類(lèi)型的高 24 位將會(huì)被丟棄,byte 類(lèi)型的范圍是從 -128 到 128。
21)存在兩個(gè)類(lèi),B 繼承 A,C 繼承 B,我們能將 B 轉(zhuǎn)換為 C 么?如 C = ? B;
答案
http://javarevisited.blogspot…
22)哪個(gè)類(lèi)包含 clone 方法?是 Cloneable 還是 Object?
java.lang.Cloneable 是一個(gè)標(biāo)示性接口,不包含任何方法,clone 方法在 object 類(lèi)中定義。并且需要知道 clone() 方法是一個(gè)本地方法,這意味著它是由 c 或 c++ 或 其他本地語(yǔ)言實(shí)現(xiàn)的。
23)Java 中 ++ 操作符是線(xiàn)程安全的嗎?
答案:不是線(xiàn)程安全的操作。它涉及到多個(gè)指令,如讀取變量值,增加,然后存儲(chǔ)回內(nèi)存,這個(gè)過(guò)程可能會(huì)出現(xiàn)多個(gè)線(xiàn)程交差。
23)不是線(xiàn)程安全的操作。它涉及到多個(gè)指令,如讀取變量值,增加,然后存儲(chǔ)回內(nèi)存,這個(gè)過(guò)程可能會(huì)出現(xiàn)多個(gè)線(xiàn)程交差。
24)a = a + b 與 a += b 的區(qū)別
+= 隱式的將加操作的結(jié)果類(lèi)型強(qiáng)制轉(zhuǎn)換為持有結(jié)果的類(lèi)型。如果兩這個(gè)整型相加,如 byte、short 或者 int,首先會(huì)將它們提升到 int 類(lèi)型,然后在執(zhí)行加法操作。如果加法操作的結(jié)果比 a 的最大值要大,則 a+b 會(huì)出現(xiàn)編譯錯(cuò)誤,但是 a += b 沒(méi)問(wèn)題,如下:
byte a = 127;
byte b = 127;
b = a + b; // error : cannot convert from int to byte
b += a; // ok
(譯者注:這個(gè)地方應(yīng)該表述的有誤,其實(shí)無(wú)論 a+b 的值為多少,編譯器都會(huì)報(bào)錯(cuò),因?yàn)?a+b 操作會(huì)將 a、b 提升為 int 類(lèi)型,所以將 int 類(lèi)型賦值給 byte 就會(huì)編譯出錯(cuò))
25)我能在不進(jìn)行強(qiáng)制轉(zhuǎn)換的情況下將一個(gè) double 值賦值給 long 類(lèi)型的變量嗎?
不行,你不能在沒(méi)有強(qiáng)制類(lèi)型轉(zhuǎn)換的前提下將一個(gè) double 值賦值給 long 類(lèi)型的變量,因?yàn)?double 類(lèi)型的范圍比 long 類(lèi)型更廣,所以必須要進(jìn)行強(qiáng)制轉(zhuǎn)換。
26)3__0.1 == 0.3 將會(huì)返回什么?true 還是 false?
false,因?yàn)橛行└↑c(diǎn)數(shù)不能完全精確的表示出來(lái)。
27)int 和 Integer 哪個(gè)會(huì)占用更多的內(nèi)存?
Integer 對(duì)象會(huì)占用更多的內(nèi)存。Integer 是一個(gè)對(duì)象,需要存儲(chǔ)對(duì)象的元數(shù)據(jù)。但是 int 是一個(gè)原始類(lèi)型的數(shù)據(jù),所以占用的空間更少。
28)為什么 Java 中的 String 是不可變的(Immutable)?
Java 中的 String 不可變是因?yàn)?Java 的設(shè)計(jì)者認(rèn)為字符串使用非常頻繁,將字符串設(shè)置為不可變可以允許多個(gè)客戶(hù)端之間共享相同的字符串。
29)我們能在 Switch 中使用 String 嗎?
從 Java 7 開(kāi)始,我們可以在 switch case 中使用字符串,但這僅僅是一個(gè)語(yǔ)法糖。內(nèi)部實(shí)現(xiàn)在 switch 中使用字符串的 hash code。
30)Java 中的構(gòu)造器鏈?zhǔn)鞘裁?
當(dāng)你從一個(gè)構(gòu)造器中調(diào)用另一個(gè)構(gòu)造器,就是Java 中的構(gòu)造器鏈。這種情況只在重載了類(lèi)的構(gòu)造器的時(shí)候才會(huì)出現(xiàn)。
JVM 底層 與 GC(Garbage Collection) 的面試問(wèn)題
31)64 位 JVM 中,int 的長(zhǎng)度是多數(shù)?
Java 中,int 類(lèi)型變量的長(zhǎng)度是一個(gè)固定值,與平臺(tái)無(wú)關(guān),都是 32 位。意思就是說(shuō),在 32 位 和 64 位 的Java 虛擬機(jī)中,int 類(lèi)型的長(zhǎng)度是相同的。
32)Serial 與 Parallel GC之間的不同之處?
Serial 與 Parallel 在GC執(zhí)行的時(shí)候都會(huì)引起 stop-the-world。它們之間主要不同 serial 收集器是默認(rèn)的復(fù)制收集器,執(zhí)行 GC 的時(shí)候只有一個(gè)線(xiàn)程,而 parallel 收集器使用多個(gè) GC 線(xiàn)程來(lái)執(zhí)行。
33)32 位和 64 位的 JVM,int 類(lèi)型變量的長(zhǎng)度是多數(shù)?
32 位和 64 位的 JVM 中,int 類(lèi)型變量的長(zhǎng)度是相同的,都是 32 位或者 4 個(gè)字節(jié)。
34)Java 中 WeakReference 與 SoftReference的區(qū)別?
雖然 WeakReference 與 SoftReference 都有利于提高 GC 和 內(nèi)存的效率,但是 WeakReference ,一旦失去最后一個(gè)強(qiáng)引用,就會(huì)被 GC 回收,而軟引用雖然不能阻止被回收,但是可以延遲到 JVM 內(nèi)存不足的時(shí)候。
35)WeakHashMap 是怎么工作的?
WeakHashMap 的工作與正常的 HashMap 類(lèi)似,但是使用弱引用作為 key,意思就是當(dāng) key 對(duì)象沒(méi)有任何引用時(shí),key/value 將會(huì)被回收。
36)JVM 選項(xiàng) -__:+UseCompressedOops 有什么作用?為什么要使用?
當(dāng)你將你的應(yīng)用從 32 位的 JVM 遷移到 64 位的 JVM 時(shí),由于對(duì)象的指針從 32 位增加到了 64 位,因此堆內(nèi)存會(huì)突然增加,差不多要翻倍。這也會(huì)對(duì) CPU 緩存(容量比內(nèi)存小很多)的數(shù)據(jù)產(chǎn)生不利的影響。因?yàn)?,遷移到 64 位的 JVM 主要?jiǎng)訖C(jī)在于可以指定最大堆大小,通過(guò)壓縮 OOP 可以節(jié)省一定的內(nèi)存。通過(guò) -__:+UseCompressedOops 選項(xiàng),JVM 會(huì)使用 32 位的 OOP,而不是 64 位的 OOP。
37)怎樣通過(guò) Java 程序來(lái)判斷 JVM 是 32 位 還是 64 位?
你可以檢查某些系統(tǒng)屬性如 sun.arch.data.model 或 os.arch 來(lái)獲取該信息。
38)32 位 JVM 和 64 位 JVM 的最大堆內(nèi)存分別是多數(shù)?
理論上說(shuō)上 32 位的 JVM 堆內(nèi)存可以到達(dá) 2^32,即 4GB,但實(shí)際上會(huì)比這個(gè)小很多。不同操作系統(tǒng)之間不同,如 Windows 系統(tǒng)大約 1.5 GB,Solaris 大約 3GB。64 位 JVM允許指定最大的堆內(nèi)存,理論上可以達(dá)到 2^64,這是一個(gè)非常大的數(shù)字,實(shí)際上你可以指定堆內(nèi)存大小到 100GB。甚至有的 JVM,如 Azul,堆內(nèi)存到 1000G 都是可能的。
39)JRE、JDK、JVM 及 JIT 之間有什么不同?
JRE 代表 Java 運(yùn)行時(shí)(Java run-time),是運(yùn)行 Java 引用所必須的。JDK 代表 Java 開(kāi)發(fā)工具(Java development kit),是 Java 程序的開(kāi)發(fā)工具,如 Java 編譯器,它也包含 JRE。JVM 代表 Java 虛擬機(jī)(Java virtual machine),它的責(zé)任是運(yùn)行 Java 應(yīng)用。JIT 代表即時(shí)編譯(Just In Time compilation),當(dāng)代碼執(zhí)行的次數(shù)超過(guò)一定的閾值時(shí),會(huì)將 Java 字節(jié)碼轉(zhuǎn)換為本地代碼,如,主要的熱點(diǎn)代碼會(huì)被準(zhǔn)換為本地代碼,這樣有利大幅度提高 Java 應(yīng)用的性能。
3年工作經(jīng)驗(yàn)的 Java 面試題
40)解釋 Java 堆空間及 GC?
當(dāng)通過(guò) Java 命令啟動(dòng) Java 進(jìn)程的時(shí)候,會(huì)為它分配內(nèi)存。內(nèi)存的一部分用于創(chuàng)建堆空間,當(dāng)程序中創(chuàng)建對(duì)象的時(shí)候,就從對(duì)空間中分配內(nèi)存。GC 是 JVM 內(nèi)部的一個(gè)進(jìn)程,回收無(wú)效對(duì)象的內(nèi)存用于將來(lái)的分配JVM 底層面試題及答案
41)你能保證 GC 執(zhí)行嗎?
不能,雖然你可以調(diào)用 System.gc() 或者 Runtime.gc(),但是沒(méi)有辦法保證 GC 的執(zhí)行。
42)怎么獲取 Java 程序使用的內(nèi)存?堆使用的百分比?
可以通過(guò) java.lang.Runtime 類(lèi)中與內(nèi)存相關(guān)方法來(lái)獲取剩余的內(nèi)存,總內(nèi)存及最大堆內(nèi)存。通過(guò)這些方法你也可以獲取到堆使用的百分比及堆內(nèi)存的剩余空間。Runtime.freeMemory() 方法返回剩余空間的字節(jié)數(shù),Runtime.totalMemory() 方法總內(nèi)存的字節(jié)數(shù),Runtime.maxMemory() 返回最大內(nèi)存的字節(jié)數(shù)。
43)Java 中堆和棧有什么區(qū)別?
JVM 中堆和棧屬于不同的內(nèi)存區(qū)域,使用目的也不同。棧常用于保存方法幀和局部變量,而對(duì)象總是在堆上分配。棧通常都比堆小,也不會(huì)在多個(gè)線(xiàn)程之間共享,而堆被整個(gè) JVM 的所有線(xiàn)程共享。
JAVA面試的時(shí)候一般考什么
一般來(lái)說(shuō),試題會(huì)分為三個(gè)部分,Java基礎(chǔ)、資料庫(kù)基礎(chǔ)和綜合題。
首先是Java基礎(chǔ),這個(gè)很簡(jiǎn)單,也就是考考你對(duì)Java語(yǔ)言本身的理解,包括語(yǔ)法,類(lèi)庫(kù)的使用等。有選擇題,也會(huì)有寫(xiě)程式碼題。寫(xiě)程式碼的時(shí)候認(rèn)真仔細(xì)就是了。基礎(chǔ)題答案一般都比較死,所以盡量不要錯(cuò)。在這,出一道我遇到的題考考大家,Java程式設(shè)計(jì):把American,Japan,China,F(xiàn)rance,Brazil按英文字母排序。
其次是資料庫(kù)。準(zhǔn)確的說(shuō),考的不是資料庫(kù),而是SQL語(yǔ)句。一般題型是,給兩三個(gè)表,然后讓你根據(jù)需求寫(xiě)SQL。最普通的就是學(xué)生表、選課表和成績(jī)表。要掌握的就是連線(xiàn)查詢(xún),還有就是一些函式。
程序員小白如何通過(guò)Java面試?
1. 努力學(xué)習(xí)Java知識(shí):為了能夠通過(guò)Java面試,程序員小白首先需要努力學(xué)習(xí)Java基礎(chǔ)知識(shí),包括Java語(yǔ)法、面向?qū)ο缶幊趟枷?、泛型、集合、多線(xiàn)程、IO流、數(shù)據(jù)結(jié)構(gòu)、算法等。
2. 加強(qiáng)實(shí)踐:學(xué)習(xí)完Java基本知識(shí)之后,程序員小白需要加強(qiáng)實(shí)踐,多編寫(xiě)一些小程序來(lái)實(shí)踐,以此來(lái)檢驗(yàn)自己學(xué)習(xí)的知識(shí)是否正確。
3. 掌握數(shù)據(jù)結(jié)構(gòu)與算法:在準(zhǔn)備面試的過(guò)程中,程序員小白還需要掌握數(shù)據(jù)結(jié)構(gòu)和算法,這些基礎(chǔ)知識(shí)會(huì)讓一個(gè)程序員變得更強(qiáng)。
4. 熟悉Java框架:要想通過(guò)Java面試,程序員小白也需要熟悉常用的Java框架,如Spring、Hibernate、Struts2等,這些框架也是面試經(jīng)??疾榈闹R(shí)點(diǎn)。
5. 掌握設(shè)計(jì)模式:設(shè)計(jì)模式是Java程序員很重要的知識(shí)點(diǎn),因此程序員小白在準(zhǔn)備面試的時(shí)候也要學(xué)習(xí)常用的設(shè)計(jì)模式,這樣才能應(yīng)對(duì)面試官的提問(wèn)。