- 相關(guān)推薦
關(guān)于java重難點(diǎn)面試題
正所謂不積跬步,無以至千里;不積小流,無以成江海。想要學(xué)好一門計(jì)算機(jī)語言,基本功很重要,下面是百分網(wǎng)小編為大家搜索整理的關(guān)于java重難點(diǎn)面試題,歡迎參考閱讀,希望對(duì)大家有所幫助!想了解更多相關(guān)信息請(qǐng)持續(xù)關(guān)注我們應(yīng)屆畢業(yè)生考試網(wǎng)!
1、方法重載與覆蓋的區(qū)別?(Overload與Override的區(qū)別)
答:方法覆蓋是父類直接多態(tài)性的一種表現(xiàn),而方法重載則是一個(gè)類中多態(tài)性的表現(xiàn)。
2、 String 和StringBuffer的區(qū)別
答:String為不可變對(duì)象,一旦被創(chuàng)建,就不能修改它的值,對(duì)于已經(jīng)存在的String對(duì)象的修改都是重新創(chuàng)建一個(gè)新的對(duì)象,然后再把新的值保存進(jìn)去。
StringBuffer是可變對(duì)象,在修改值的時(shí)候不需要再新建對(duì)象,可以用append()方法在后面添加新的值,性能比String高。
3、接口和抽象類
答:接口(interface):接口是用來實(shí)現(xiàn)的,里面定義的方法在被子類覆蓋時(shí)子類中的方法都是public的,里面的成員對(duì)象都是final&static,里面的方法都要被實(shí)現(xiàn)。
抽象類(abstract):是用來被繼承的,里面定義的方法在被子類覆蓋時(shí)子類的方法不一定都是public的,里面的成員對(duì)象不是final&static,在其內(nèi)部中有abstract方法才會(huì)被必須實(shí)現(xiàn)。
4、集合類的區(qū)別:
java容器類庫一共有兩種主要類型,Collection和Map。
Collection:它是針對(duì)集合類的一個(gè)幫助類,它提供一系列靜態(tài)方法實(shí)現(xiàn)對(duì)各種集合的搜索、排序、線程完全化等操作。如:Collection.max(Collection coll); Collection.sort(List list);
分為List(ArrayList,LinkedList,Vector,都是有序,元素可重復(fù)),
Set(HashSet,TreeSet,LinkedHashSet,都是無序,且元素不可重復(fù)),
Queue(PriorityQueue,先進(jìn)先出的容器)
Map:
HashMap,HashTable,TreeMap
主要其中幾款常用到的:
ArrayList:底層用數(shù)組實(shí)現(xiàn),查詢效率高,增刪效率低,輕量級(jí),線程不安全
LinkedList:底層用雙向循環(huán)鏈表,查詢效率慢,增刪效率高。
Vector:底層用數(shù)組實(shí)現(xiàn),重量級(jí),占據(jù)更多的系統(tǒng)開銷,線程安全。
HashSet:底層用的是哈希算法。
HashMap:輕量級(jí),線程不安全,允許key或者value是null。
HashTable:重量級(jí),先出安全,不允許key或者value是null。
5、線程的四種狀態(tài):
答:產(chǎn)生(new),可執(zhí)行(Runnable),死亡(Dead),停滯(Blocked)
線程的實(shí)現(xiàn)方式:extends Thread 和 implements Runnable
6、線程中wait,join,sleep,yield,notify,notifyall,synchronized,區(qū)別及聯(lián)系
答:sleep():在指定時(shí)間內(nèi)讓當(dāng)前正在執(zhí)行的線程休眠。
wait():在線程休眠的同時(shí)釋放掉機(jī)鎖,其他線程可以訪問該對(duì)象。wait必須在同步代碼塊中執(zhí)行。
那怎樣把對(duì)象鎖收回來呢?第一種就是給其設(shè)定時(shí)間,時(shí)間一到就立刻收回來,如:wait(1000);
notify():收回對(duì)象鎖的另一種方式,它的作用是喚醒在此對(duì)象監(jiān)視器上等待的單個(gè)線程。當(dāng)被執(zhí)行notify()方法后,等待池中的線程就被放到了鎖池中,并取得機(jī)鎖,回到wait()前的中斷現(xiàn)場(chǎng)。
notifyAll():喚醒在此對(duì)象監(jiān)視器上等待的所有線程。
join():等待當(dāng)前線程執(zhí)行完。
yield():停止當(dāng)前線程,讓同等優(yōu)先級(jí)的線程先運(yùn)行,如果不是同等優(yōu)先級(jí)的線程,則不執(zhí)行。
synchronized:當(dāng)它用來修飾一個(gè)方法或者一個(gè)代碼塊時(shí),能夠保證在同一時(shí)刻只有一個(gè)線程能夠執(zhí)行該段代碼。
7、 final、finally、finanlize()的區(qū)別
答:final:用來修飾成員、方法和類,使得成員變量不能被修改,方法不能被覆寫,類不能被繼承。
finally:對(duì)java異常處理模型的最佳補(bǔ)充,不管有無異常發(fā)生,finally結(jié)構(gòu)的代碼總會(huì)被執(zhí)行。
finalize:用于一些不容易控制,并且非常重要的資源的釋放,例如:I/O的操作,數(shù)據(jù)的連接。
8、字節(jié)流和字符流的區(qū)別
答:字符流用到了緩沖區(qū),而字符流沒有用到。
在字符流的操作中,所有的字符都是在內(nèi)存中形成的,在輸出前會(huì)將所有的內(nèi)容暫時(shí)保存在內(nèi)存之中,所以使用了緩沖區(qū)暫存數(shù)據(jù)。
但是我們還是認(rèn)為使用字節(jié)流更好,理由是:
所有的文件在硬盤或在傳輸時(shí)都是以字節(jié)的方式進(jìn)行的,包括圖片等都是按字節(jié)的方式存儲(chǔ)的,
而字符是只有在內(nèi)存中才會(huì)形成,所以在開發(fā)中,字節(jié)流使用較為廣泛。
【java重難點(diǎn)面試題】相關(guān)文章:
java從代碼到運(yùn)行的重難點(diǎn)講解07-07
Java面試題(精選)06-30
java面試題05-20
Java線程面試題08-25
高級(jí)Java面試題精選11-02
Java 問答面試題09-03
Java原理面試題07-13
高級(jí)Java面試題匯總11-03