最新国产在线不卡AV,国产又爽又黄的视频免费看,精品综合久久久久久97,日韩欧美高清中文字幕免费一区二区

            科普

            有關(guān)java面試基礎(chǔ)知識(shí) IT知識(shí)

            電腦知識(shí)優(yōu)爾供稿

            Java虛擬機(jī)是一個(gè)可以執(zhí)行Java字節(jié)碼的虛擬機(jī)進(jìn)程。Java源文件被編譯成能被Java虛擬機(jī)執(zhí)行的字節(jié)碼文件。下面是9252兒童網(wǎng)小編為大家整理的java面試基礎(chǔ)知識(shí),一起來看看吧,希望對(duì)你們有幫助。

            java面試基礎(chǔ)知識(shí)

            1、靜態(tài)變量和實(shí)例變量的區(qū)別?

            在語(yǔ)法定義上的區(qū)別:靜態(tài)變量前要加static關(guān)鍵字,而實(shí)例變量前則不加。

            在程序運(yùn)行時(shí)的區(qū)別:實(shí)例變量是屬于某個(gè)對(duì)象的屬性,必須創(chuàng)建了實(shí)例對(duì)象,其中的實(shí)例變量才會(huì)被分配內(nèi)存空間,才可以使用這個(gè)實(shí)例變量。

            靜態(tài)變量不屬于某個(gè)實(shí)例對(duì)象,而是屬于類,所以也稱為類變量,只要程序加載了類的字節(jié)碼,不用創(chuàng)建任何實(shí)例對(duì)象,靜態(tài)變量就會(huì)分配內(nèi)存空間,而且只分配一次,靜態(tài)變量就可以被使用了。總之,實(shí)例變量必須創(chuàng)建后才可以通過這個(gè)對(duì)象來使用,靜態(tài)變量則直接可以使用類名來調(diào)用。

            2、什么是反射機(jī)制?

            java反射是在運(yùn)行狀態(tài)中,對(duì)任意一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法,對(duì)于任何一個(gè)對(duì)象,都能夠調(diào)用它的任意一個(gè)屬性和方法,這種動(dòng)態(tài)獲取信息以及動(dòng)態(tài)調(diào)用對(duì)象的方法的功能稱為java的反射機(jī)制。

            3、什么是裝箱?什么是拆箱?

            裝箱:自動(dòng)將基本數(shù)據(jù)類型轉(zhuǎn)換為包裝器類型。

            拆箱:自動(dòng)將包裝器類型轉(zhuǎn)換為基本數(shù)據(jù)類型。

            4、Java 中覆蓋和重載是什么意思?

            覆蓋(Override)是指子類對(duì)父類方法的一種重寫,只能比父類拋出更少的異常,訪問權(quán)限不能比父類的小,被覆蓋的方法不能是 private的,否則只是在子類中重新定義了一個(gè)新方法。

            重載(Overload)表示同一個(gè)類中可以有多個(gè)名稱相同的方法,但這些方法的參數(shù)列表各不相同。

            java基礎(chǔ)知識(shí)面試題及答案

            1、static關(guān)鍵字什么意思?java中是否可以覆蓋一個(gè)private或者是static的方法?

            “static”表明一個(gè)成員變量或者是成員方法可以在沒有所屬類的實(shí)例變量的情況下訪問。

            java中static方法不能被覆蓋,因?yàn)榉椒ǜ采w是基于運(yùn)行時(shí)動(dòng)態(tài)綁定的,而static方法是編譯時(shí)靜態(tài)綁定的。static方法與類的任何實(shí)例都不相關(guān)。

            java中不可以覆蓋private方法。因?yàn)閜rivate修飾的變量和方法只能在當(dāng)前類中使用,如果是其他類繼承當(dāng)前類,繼承類中是不能訪問到private變量和方法的。

            2、能否在static環(huán)境中訪問非static變量?

            不能。static變量是屬于類的。當(dāng)類被虛擬機(jī)載入時(shí),會(huì)對(duì)static變量進(jìn)行初始化。非static變量是屬于實(shí)例的,這個(gè)時(shí)候?qū)嵗€沒有被創(chuàng)建,編譯器會(huì)報(bào)錯(cuò)。

            3、java基本類型,什么是自動(dòng)拆裝箱?

            基本類型:byte,short,int,float,long,double,boolean,char

            自動(dòng)裝箱:是java編譯器在基本類型和對(duì)應(yīng)的對(duì)象包裝類型之間做一個(gè)轉(zhuǎn)化。比如把int轉(zhuǎn)化為Integer等等。反之為自動(dòng)拆箱。

            4、java的方法覆蓋overriding和方法重載overloading是什么意思?

            java中方法重載發(fā)生在同一個(gè)類中有兩個(gè)或者多個(gè)方法名字相同但是參數(shù)不同的情況。方法覆蓋是子類重新定義父類的方法。方法覆蓋必須有相同的方法名,參數(shù)列表和返回類型。

            5、java中,什么是構(gòu)造方法?什么是構(gòu)造方法重載?什么是復(fù)制構(gòu)造方法?

            當(dāng)新對(duì)象被創(chuàng)建時(shí),構(gòu)造方法會(huì)被調(diào)用。每一個(gè)類都有一個(gè)構(gòu)造方法,在沒有給類提供構(gòu)造函數(shù)時(shí),編譯器會(huì)自動(dòng)創(chuàng)建一個(gè)默認(rèn)的構(gòu)造方法

            java中構(gòu)造方法重載和方法重載很相似。可以為一個(gè)類創(chuàng)建多個(gè)構(gòu)造方法,每一個(gè)構(gòu)造方法必須有它自己唯一的參數(shù)列表

            6、java支持多繼承嗎?

            不支持。只能支持單繼承,即一個(gè)類只有一個(gè)父類??梢杂胕mplements實(shí)現(xiàn)多個(gè)接口擴(kuò)展

            7、接口與抽象類的區(qū)別

            (1)接口中所有方法隱含都是抽象的。而抽象類則可以同時(shí)包含抽象和非抽象的方法

            (2)接口中聲明的變量默認(rèn)都是final,而抽象類可以包含非final的變量

            (3)接口中成員函數(shù)默認(rèn)都會(huì)public。抽象類的成員函數(shù)可以是private,protected或者public

            (4)類可以不實(shí)現(xiàn)抽象類和接口聲明中的所有方法,這種情況下,類也必須聲明為抽象的

            8、jdk與jre區(qū)別是什么?

            java運(yùn)行時(shí)環(huán)境(jre)是將要執(zhí)行的java程序的java虛擬機(jī),同時(shí)也包含了執(zhí)行applet需要的瀏覽器插件。java開發(fā)工具包(jdk)是完整的java軟件開發(fā)包,包含了jre,編譯器和其他工具(比如:javadoc,java調(diào)試器),可以讓開發(fā)者開發(fā),編譯,執(zhí)行java應(yīng)用程序。

            9、什么是只傳遞和引用傳遞

            值傳遞是對(duì)基本類型變量而言,傳遞是該變量的一個(gè)副本,改變副本不會(huì)影響原變量

            引用傳遞一般是對(duì)于對(duì)象型變量而言,傳遞的是該對(duì)象地址的一個(gè)副本,改變副本,會(huì)影響原變量

            10、進(jìn)程和線程的區(qū)別?

            進(jìn)程是執(zhí)行著的應(yīng)用程序,線程是進(jìn)程內(nèi)部的一個(gè)執(zhí)行序列。一個(gè)進(jìn)程可以有多個(gè)線程

            區(qū)別:

            (1)地址空間和其他資源:進(jìn)程之間相互獨(dú)立。同一個(gè)進(jìn)程的各個(gè)線程間共享。某進(jìn)程內(nèi)的線程在其他進(jìn)程不可見

            (2)通信:進(jìn)程之間通信ipc,線程間可以直接讀寫進(jìn)程數(shù)據(jù)段(如全局變量)來進(jìn)行通信--需要進(jìn)程同步和互斥手段的輔助,以保證數(shù)據(jù)的一致性

            (3)調(diào)度和切換:線程之間上下文切換比進(jìn)程上下文切換快的多

            (4)在多線程os中,進(jìn)程不是一個(gè)可執(zhí)行的實(shí)體

            11、同步方法和同步代碼塊的區(qū)別

            同步方法默認(rèn)是用this或當(dāng)前類對(duì)象作為鎖

            同步代碼塊可以選擇以什么來加鎖,比同步方法更細(xì)粒度。我們可以選擇只同步會(huì)發(fā)生同步問題的部分代碼而不是整個(gè)方法

            12、什么是死鎖?

            死鎖是值多個(gè)線程因資源競(jìng)爭(zhēng)而造成的一種僵局,若無(wú)外力作用,這些線程都無(wú)法向前推進(jìn)。產(chǎn)生死鎖的4個(gè)必要條件

            (1)互斥條件

            (2)不剝奪條件

            (3)請(qǐng)求和保持條件

            (4)循環(huán)等待

            13、如何確保N個(gè)線程可以訪問N個(gè)資源同時(shí)又不導(dǎo)致死鎖?

            一種非常簡(jiǎn)單的避免死鎖的方式:指定獲取鎖的順序,并強(qiáng)制線程按照指定的順序獲取鎖。因此如果所有的線程都是以同樣的順序加鎖和釋放鎖,就不會(huì)出現(xiàn)死鎖

            14、java集合類框架的基本接口有哪些?

            Collection,Set,List,Map

            15、HashMap工作原理

            hashMap是以鍵值對(duì)的形式存儲(chǔ)。hashmap需要一個(gè)hash函數(shù),它使用hashCode和equals方法來向集合/從集合添加和檢索元素。當(dāng)調(diào)用put時(shí),HashMap會(huì)計(jì)算key的hash值,然后把鍵值對(duì)存儲(chǔ)在集合中合適的索引上。如果key已經(jīng)存在,value會(huì)被更新成新值。hashMap的一些重要的特性是它的容量,負(fù)載因子和擴(kuò)容極限。

            16、hashcode和equals重要性體現(xiàn)在什么地方?

            hashmap通過hashcode和equals確定鍵值對(duì)索引

            17、hashmap和hashtable區(qū)別?

            hashmap允許鍵和值是null,hashtable不允許鍵或值為null

            hashtable同步,而hashmap不是

            Java面試基礎(chǔ)知識(shí)整理

            1、Static存在的意義

            static主要意義是在于創(chuàng)建獨(dú)立的具體對(duì)象的域變量或者方法,以至于即使沒有創(chuàng)建對(duì)象,也能使用屬性和調(diào)用方法,static關(guān)鍵字還有一個(gè)比較關(guān)鍵的作用就是用來形成靜態(tài)代碼塊以優(yōu)化程序的性能。static塊可以置于類中的任何地方,類中可以有多個(gè)static塊。在類初次被加載的時(shí)候,會(huì)按照static塊的順序來執(zhí)行每個(gè)statci塊,并且只會(huì)執(zhí)行一次。為什么說static塊可以用來優(yōu)化程序性能,是因?yàn)樗奶匦裕粫?huì)在類加載的時(shí)候執(zhí)行一次。因此,很多時(shí)候可以將一些只需要進(jìn)行一次的初始化操作放在static代碼塊中進(jìn)行,被static修飾的變量或者方法是獨(dú)立于當(dāng)前類的任何對(duì)象,也就是說這些靜態(tài)的變量或者方法不屬于任何一個(gè)實(shí)例化對(duì)象,而是被類直接的所共享。static變量值在類加載的時(shí)候分配空間,以后創(chuàng)建類對(duì)象的時(shí)候不會(huì)重新分配。賦值的話,是可以任意賦值的。被static修飾的變量或者方法是優(yōu)先于對(duì)象存在的,也就是說當(dāng)一個(gè)類加載完畢之后,即便沒有創(chuàng)建對(duì)象,也可以去訪問。

            2、面向?qū)ο笈c面向過程的區(qū)別?

            面向過程優(yōu)點(diǎn):性能比面向?qū)ο蟾?,因?yàn)轭愓{(diào)用時(shí)需要實(shí)例化,開銷比較大,比較消耗資源,比如單片機(jī),嵌入式開發(fā)、Linux、Unix等等一般都是采用面向過程的開發(fā),性能是最重要的因素。缺點(diǎn):沒有面向?qū)ο蟊阌诰S護(hù)、容易復(fù)用、容易擴(kuò)展。面向?qū)ο髢?yōu)點(diǎn):易復(fù)用、易擴(kuò)展、易維護(hù),由于是面向?qū)ο笥蟹庋b、繼承、多態(tài)性的特點(diǎn),可以設(shè)計(jì)出低耦合的系統(tǒng),使得系統(tǒng)更加靈活、更加易于擴(kuò)展。缺點(diǎn):性能比面向過程低。面向過程是具體化的,流程化的,解決一個(gè)問題,你需要一步一步的分析,一步一步的實(shí)現(xiàn)。面向?qū)ο笫悄K化的,你只需要抽象出來一個(gè)類對(duì)象,這是一個(gè)封閉的盒子,在這里你擁有數(shù)據(jù)也擁有解決問題的方法,需要什么功能直接使用就可以了,不必去一步一步的實(shí)現(xiàn),至于這個(gè)功能是如何實(shí)現(xiàn)的,不需要了解。最后,面向?qū)ο蟮牡讓舆€是面向過程,把面向過程抽象出類,然后封裝,方便我們使用就是面向?qū)ο罅恕?/p>

            3、面向?qū)ο蟮娜筇匦裕?/p>

            抽象,抽象是將一類對(duì)象的共同特征總結(jié)出來構(gòu)造類的過程,包括數(shù)據(jù)抽象和行為抽象兩個(gè)方面,抽象只關(guān)心對(duì)象的有哪些屬性和行為,并不關(guān)心這些行為的細(xì)節(jié)是什么。封裝,封裝是把一個(gè)對(duì)象的屬性私有化,同時(shí)提供一些可以被外界訪問的屬性的方法。繼承,繼承是使用已有的類的定義作為基礎(chǔ)建立的新的技術(shù),新類的定義可以增加新的數(shù)據(jù)或者新的功能,也可以使用父類的功能,但是不能選擇性的繼承父類。有一下三個(gè)方面,一、子類擁有父類非private的屬性和方法。二、子類可以擁有自己屬性和方法,即子類可以對(duì)父類進(jìn)行擴(kuò)展。三、子類可以用自己的方法實(shí)現(xiàn)父類的方法。多態(tài),所謂的多態(tài)就是程序中定義的引用變量所指向的具體類型和通過該引用變量發(fā)出的方法調(diào)用編程時(shí)并不確定,而是在程序運(yùn)行的時(shí)候才確定,即一個(gè)引用變量到底會(huì)指向那個(gè)類的實(shí)例對(duì)象,該引用變量發(fā)出的方法調(diào)用到底是那個(gè)類中的實(shí)現(xiàn)方法,必須由程序運(yùn)行期間才能決定。

            4、什么是多態(tài)機(jī)制?

            Java語(yǔ)言是如何實(shí)現(xiàn)多態(tài)的?所謂的多態(tài)是程序中定義的引用變量所指向的具體類型和通過該引用變量發(fā)出的方法調(diào)用在編程時(shí)并不確定,而是在程序運(yùn)行期間才確定。多態(tài)分為編譯時(shí)多態(tài)和運(yùn)行時(shí)多態(tài),其中編輯時(shí)多態(tài)是靜態(tài)的,主要是指方法的重載,它是根據(jù)參數(shù)列表的不同來區(qū)分不同的函數(shù),在運(yùn)行時(shí)談不上多態(tài)。而是運(yùn)行時(shí)多態(tài)是動(dòng)態(tài)的,它是通過動(dòng)態(tài)綁定來實(shí)現(xiàn)的,也就是我們所說的多態(tài)性。

            5、多態(tài)的實(shí)現(xiàn),Java中實(shí)現(xiàn)多態(tài)有三個(gè)必要條件:

            繼承、重寫、向上轉(zhuǎn)型。繼承:在多態(tài)中必須存在有繼承關(guān)系的子類和父類。重寫:子類對(duì)父類中的某些方法進(jìn)行重新定義,在調(diào)用這些方法時(shí)候就會(huì)調(diào)用子類的方法。向上轉(zhuǎn)型:在多態(tài)中需要將子類的引用賦值給父類,只有這樣該引用才能具備技能調(diào)用父類的方法和子類的方法。只有滿足上述三個(gè)條件,才能在同一個(gè)繼承結(jié)構(gòu)中國(guó)使用統(tǒng)一的邏輯實(shí)現(xiàn)代碼處理不同的對(duì)象,從而達(dá)到執(zhí)行不同的行為,對(duì)于Java而言,它的多態(tài)實(shí)現(xiàn)截至遵循一個(gè)原則,當(dāng)超類的對(duì)象引用變量引用子類的對(duì)象時(shí)候,被引用的對(duì)象的類型而不是引用變量的類型決定了調(diào)用誰(shuí)的成員方法,但是這個(gè)被調(diào)用的方法必須是在超類中定義過的,也就是說被子類覆蓋了的方法。

            6、面向?qū)ο蟮奈宕蠡驹瓌t?

            單一職責(zé):類的功能單一,不能包羅萬(wàn)象。開發(fā)封閉原則:一個(gè)模塊對(duì)于擴(kuò)展是開放的,對(duì)于修改是關(guān)閉的,想要增加功能熱烈歡迎,想要修改功能不行。里氏替換原則:子類可以替換父類出現(xiàn)在父類能夠出現(xiàn)的地方。依賴倒置原則:高層模塊不應(yīng)該依賴于底層模塊,他們都應(yīng)該依賴于抽象,抽象不應(yīng)該依賴細(xì)節(jié)實(shí)現(xiàn)。細(xì)節(jié)實(shí)現(xiàn)依賴于抽象。接口分離原則:設(shè)計(jì)時(shí)采用多個(gè)于特定客戶有關(guān)的接口。

              為你推薦