2020年Java應(yīng)屆生面試題應(yīng)答

2020年Java應(yīng)屆生面試題應(yīng)答

長(zhǎng)沙牛耳教育      2022-04-25 19:56:01     9

2020年Java應(yīng)屆生面試題應(yīng)答,  1.10 個(gè)線程和 2 個(gè)線程的同步代碼,哪個(gè)更容易寫?  從寫代碼的角度來(lái)說(shuō),兩者的復(fù)雜度是相同的,因?yàn)橥酱a與線程數(shù)量

課程價(jià)格 請(qǐng)咨詢

上課時(shí)段: 授課校區(qū):

詳細(xì)介紹



  1.10 個(gè)線程和 2 個(gè)線程的同步代碼,哪個(gè)更容易寫?


  從寫代碼的角度來(lái)說(shuō),兩者的復(fù)雜度是相同的,因?yàn)橥酱a與線程數(shù)量是相互獨(dú)立的。但是同步策略的選擇依賴于線程的數(shù)量,因?yàn)樵蕉嗟木€程意味著更大的競(jìng)爭(zhēng),所以你需要利用同步技術(shù),如鎖分離,這要求更復(fù)雜的代碼和專業(yè)知識(shí)。


  2.我們能創(chuàng)建一個(gè)包含可變對(duì)象的不可變對(duì)象嗎?


  是的,我們是可以創(chuàng)建一個(gè)包含可變對(duì)象的不可變對(duì)象的,你只需要謹(jǐn)慎一點(diǎn),不要共享可變對(duì)象的引用就可以了,如果需要變化時(shí),就返回原對(duì)象的一個(gè)拷貝。最常見的例子就是對(duì)象中包含一個(gè)日期對(duì)象的引用。


  3.我能在不進(jìn)行強(qiáng)制轉(zhuǎn)換的情況下將一個(gè) double 值賦值給 long 類型的變量嗎?


  不行,你不能在沒有強(qiáng)制類型轉(zhuǎn)換的前提下將一個(gè) double 值賦值給 long 類型的變量,因?yàn)?double 類型的范圍比 long 類型更廣,所以必須要進(jìn)行強(qiáng)制轉(zhuǎn)換。


  4.如何避免死鎖?


  死鎖是指兩個(gè)或兩個(gè)以上的進(jìn)程在執(zhí)行過(guò)程中,因爭(zhēng)奪資源而造成的一種互相等待的現(xiàn)象,若無(wú)外力作用,它們都將無(wú)法推進(jìn)下去。這是一個(gè)嚴(yán)重的問(wèn)題,因?yàn)樗梨i會(huì)讓你的程序掛起無(wú)法完成任務(wù),死鎖的發(fā)生必須滿足以下四個(gè)條件:


  互斥條件:一個(gè)資源每次只能被一個(gè)進(jìn)程使用。


  請(qǐng)求與保持條件:一個(gè)進(jìn)程因請(qǐng)求資源而阻塞時(shí),對(duì)已獲得的資源保持不放。


  不剝奪條件:進(jìn)程已獲得的資源,在末使用完之前,不能強(qiáng)行剝奪。


  循環(huán)等待條件:若干進(jìn)程之間形成一種頭尾相接的循環(huán)等待資源關(guān)系。


  最簡(jiǎn)單的方法就是阻止循環(huán)等待條件,將系統(tǒng)中所有的資源設(shè)置標(biāo)志位、排序,規(guī)定所有的進(jìn)程申請(qǐng)資源必須以一定的順序(升序或降序)做操作來(lái)避免死鎖。這篇教程有代碼示例和避免死鎖的討論細(xì)節(jié)。


  5.有三個(gè)線程T1,T2,T3,怎么確保它們按順序執(zhí)行?


  在多線程中有多種方法讓線程按特定順序執(zhí)行,你可以用線程類的join()方法在一個(gè)線程中啟動(dòng)另一個(gè)線程,另外一個(gè)線程完成該線程繼續(xù)執(zhí)行。為了確保三個(gè)線程的順序你應(yīng)該先啟動(dòng)最后一個(gè)(T3調(diào)用T2,T2調(diào)用T1),這樣T1就會(huì)先完成而T3最后完成。


  6.short s1 = 1; s1 = s1 + 1;有錯(cuò)嗎?short s1 = 1; s1 += 1;有錯(cuò)嗎?


  對(duì)于short s1 = 1; s1 = s1 + 1;由于1是int類型,因此s1+1運(yùn)算結(jié)果也是int 型,需要強(qiáng)制轉(zhuǎn)換類型才能賦值給short型。而short s1 = 1; s1 += 1;可以正確編譯,因?yàn)閟1+= 1;相當(dāng)于s1 = (short)(s1 + 1);其中有隱含的強(qiáng)制類型轉(zhuǎn)換。


  7.描述一下JVM加載class文件的原理機(jī)制?


  JVM中類的裝載是由類加載器(ClassLoader)和它的子類來(lái)實(shí)現(xiàn)的,Java中的類加載器是一個(gè)重要的Java運(yùn)行時(shí)系統(tǒng)組件,它負(fù)責(zé)在運(yùn)行時(shí)查找和裝入類文件中的類。類的加載是指把類的.class文件中的數(shù)據(jù)讀入到內(nèi)存中,通常是創(chuàng)建一個(gè)字節(jié)數(shù)組讀入.class文件


  8.獲得一個(gè)類的類對(duì)象有哪些方式?


  方法1:class,如:String.class


  方法2:Class.forName(),如:Class.forName("java.lang.String")


  方法3::對(duì)象.getClass,如:“hello”.getClass()


  9.一個(gè)”.java“源文件中是否可以包括多個(gè)類?有什么限制


  可以包括多個(gè)類,但只能有一個(gè)Public,而且Public的類必須與文件名相一致


  10.簡(jiǎn)述你所知道的Linux


  Linux起源于1991年,1995年流行起來(lái)的免費(fèi)操作系統(tǒng),目前, Linux是主流的服務(wù)器操作系統(tǒng), 廣泛應(yīng)用于互聯(lián)網(wǎng)、云計(jì)算、智能手機(jī)(Android)等領(lǐng)域。由于Java主要用于服務(wù)器端的開發(fā),因此Java應(yīng)用的部署環(huán)境有很多為L(zhǎng)inux。


  Linux不像Windows的圖形操作界面,是通過(guò)命令的方式進(jìn)行操作,常用命令有:


  a . pwd:用于顯示當(dāng)前工作目錄;


  b . ls:用于查看當(dāng)前工作目錄內(nèi)容;


  c . cd:用于改變當(dāng)前工作目錄。


  11.Java集合框架是什么?


  最初的Java版本包含幾種集合類:Vector、Stack、HashTable和Array。隨著集合的廣泛使用,Java1.2提出了囊括所有集合接口、實(shí)現(xiàn)和算法的集合框架。在保證線程安全的情況下使用泛型和并發(fā)集合類,Java已經(jīng)經(jīng)歷了很久。它還包括在Java并發(fā)包中,阻塞接口以及它們的實(shí)現(xiàn)。


  12.如果兩個(gè)鍵的hashcode相同,你如何獲取值對(duì)象?


  當(dāng)我們調(diào)用get()方法,HashMap會(huì)使用鍵對(duì)象的hashcode找到bucket位置,然后會(huì)調(diào)用keys.equals()方法去找到鏈表中正確的節(jié)點(diǎn),最終找到要找的值對(duì)象。


  13.Array和ArrayList有何區(qū)別?什么時(shí)候更適合用Array?


  Array可以容納基本類型和對(duì)象,而ArrayList只能容納對(duì)象。


  Array是指定大小的,而ArrayList大小是固定的



      以上就是長(zhǎng)沙牛耳教育Java培訓(xùn)機(jī)構(gòu)小編介紹的“2020年Java應(yīng)屆生面試題應(yīng)答”的內(nèi)容,希望對(duì)大家有幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。


相關(guān)推薦


最新最全java面試題及答案(初級(jí)到高級(jí))


史上最全的中高級(jí)JAVA工程師面試題及答案匯總


Java高級(jí)開發(fā)工程師面試題


2019史上最全java面試題題庫(kù)大全800題


哪有資深java工程師面試題


培訓(xùn)啦提醒您:交易時(shí)請(qǐng)核實(shí)對(duì)方資質(zhì),對(duì)于過(guò)大宣傳或承諾需謹(jǐn)慎!任何要求預(yù)付定金、匯款等方式均存在風(fēng)險(xiǎn),謹(jǐn)防上當(dāng)。