亚洲熟妇av一区二区三区,久久久久久精品观看sss,免费观看四虎精品国产永久,国产成人精品一区二三区熟女,天堂网在线最新版www资源网

超全面!阿里巴巴最新發(fā)布23年秋招200道Java面試題(含答案)

超全面!阿里巴巴最新發(fā)布23年秋招200道Java面試題(含答案)

馬上過34歲生日了,和大家聊聊最近的情況
半年前還在迷茫該學(xué)什么,怎樣才能走出現(xiàn)在的困境,半年后已經(jīng)成功上岸阿里,感謝在這期間幫助我的每一個(gè)人。

面試中總結(jié)了200道經(jīng)典的Java面試題,里面包含面試要回答的知識(shí)重點(diǎn),并且我根據(jù)知識(shí)類型進(jìn)行了分類,可以說非常全面了~

因?yàn)槠?,大部分的?nèi)容就不給大家一一展示了,需要獲取的小伙伴可以直接轉(zhuǎn)發(fā) 關(guān)注后私信(學(xué)習(xí))即可獲取到!

java平臺(tái)相關(guān)

1、JDK、JRE、JVM 分別是什么關(guān)系? 2、為什么 Java 被稱作是“平臺(tái)無關(guān)的編程語言”? 3、Java 和 C 的區(qū)別? 4、什么是字節(jié)碼?采用字節(jié)碼的最大好處是什么? 5、Java運(yùn)行的過程? 6、Java是動(dòng)態(tài)類型語言還是靜態(tài)類型語言?

面向?qū)ο?/h1>

7.什么是面向?qū)ο螅?8.請(qǐng)說說面向?qū)ο蟮奶卣??封裝、繼承、多態(tài)分別說一下,以及它們的好處? 9.多態(tài)為什么要轉(zhuǎn)型? 10.說一下權(quán)限修飾符的使用權(quán)限?

語言基礎(chǔ)

  • 基本數(shù)據(jù)類型和引用類型

11.Java 中的幾種基本數(shù)據(jù)類型是什么?各自占用多少字節(jié)? 12.char 型變量中能不能存貯一個(gè)中文漢字?為什么? 13.什么是引用類型? 14.什么是值傳遞和引用傳遞? 15.屬性(字段)和變量的區(qū)別? 16.什么是重載和重寫?Overload(重載)和override(重寫)的區(qū)別? 17.什么是java序列化,如何實(shí)現(xiàn)java序列化?或者請(qǐng)解釋serializable接口的作用?

  • 字符串相關(guān)

18.String 為什么是不可變的? 19.String s = new String("xyz") 會(huì)創(chuàng)建幾個(gè)對(duì)象? 20.說說你對(duì)字符串常量池的理解? 21.String、StringBuffer、StringBuilder 的區(qū)別? 22.談?wù)勀銓?duì)this關(guān)鍵字的理解? 23.談?wù)勀銓?duì)super關(guān)鍵字的理解? 24.那你知道this和super有什么區(qū)別嗎? 25.談?wù)勀銓?duì)static關(guān)鍵字的理解? 26.談?wù)勀銓?duì)final關(guān)鍵字的理解?

27.你知道在Java中都有哪里用到了哈希 嗎?

  • 拷貝相關(guān)

28.Java中有多少種拷貝類型?分別說一下? 29.那你碰到過多引用拷貝嗎?知道怎么解決嗎?

  • 接口相關(guān)

30.你平時(shí)是怎么使用接口的?談?wù)勀愕睦斫猓?31.那聽你這么說,接口的實(shí)現(xiàn)類的方法返回值類型是什么? 32.方法的參數(shù)可以是接口嗎? 33.接口的返回值類型可否是另一個(gè)接口類型?

  • 抽象類

34.接口引用調(diào)用實(shí)現(xiàn)類方法? 35.抽象類使用規(guī)則 36.抽象類注意事項(xiàng)? 37.Abstractclass和interface語法上有什么區(qū)別? 38.接口是否可繼承接口?抽象類是否可繼承具體類(concreteclass)?抽象類中是否可以有靜態(tài)的main方法?

  • 包裝類

39.什么是自動(dòng)拆裝箱? 40.為什么要轉(zhuǎn)換?

  • 泛型

41.你平時(shí)是如何使用泛型的?

  • 異常

42.Exeception和Error區(qū)別? 43.那你知道異常有幾種處理方式嗎? 44.說說Throwable類怎么用吧? 45.你最常見到的是Java中的什么異常?

  • 反射機(jī)制

46.什么是反射機(jī)制? 47.那怎么使用反射呢? 48.你反射這么熟悉,那一般在哪些場(chǎng)景用到它啊? 49.聽你說的這么多,那它就沒有缺點(diǎn)嗎?

  • JDK1.8新特性

50.你知道JDK1.8有哪些新特性嗎?

以下是答案:

Java平臺(tái)相關(guān)

1、JDK、JRE、JVM 分別是什么關(guān)系?

JDK 即為 Java 開發(fā)工具包,包含編寫 Java 程序所必須的編譯、運(yùn)行等開發(fā)工具以及 JRE。開發(fā)工具如:用于編譯 Java 程序的 javac 命令。用于啟動(dòng) JVM 運(yùn)行 Java 程序的 Java 命令。用于生成文檔的 Javadoc 命令。用于打包的 jar 命令等等。

2、為什么 Java 被稱作是“平臺(tái)無關(guān)的編程語言”?

Java 虛擬機(jī)是一個(gè)可以執(zhí)行 Java 字節(jié)碼的虛擬機(jī)進(jìn)程。Java 源文件( `.java` )被編譯成能被 Java 虛擬機(jī)執(zhí)行的字節(jié)碼文件( `.class` )。Java 被設(shè)計(jì)成允許應(yīng)用程序可以運(yùn)行在任意的平臺(tái),而不需要程序員為每一個(gè)平臺(tái)單獨(dú)重寫或者是重新編譯。Java 虛擬機(jī)讓這個(gè)變?yōu)榭赡?,因?yàn)樗赖讓佑布脚_(tái)的指令長度和其他特性。

3、Java 和 C 的區(qū)別?

都是面向?qū)ο蟮恼Z言,都支持封裝、繼承和多態(tài)。Java 不提供指針來直接訪問內(nèi)存,程序內(nèi)存更加安全。Java 的類是單繼承的,C 支持多重繼承;雖然 Java 的類不可以多繼承,但是接口可以多繼承。Java 有自動(dòng)內(nèi)存管理機(jī)制,不需要程序員手動(dòng)釋放無用內(nèi)存。

4、什么是字節(jié)碼?采用字節(jié)碼的最大好處是什么?

Java 中引入了虛擬機(jī)的概念,即在機(jī)器和編譯程序之間加入了一層抽象的虛擬的機(jī)器。這臺(tái)虛擬的機(jī)器在任何平臺(tái)上都提供給編譯程序一個(gè)的共同的接口。編譯程序只需要面向虛擬機(jī),生成虛擬機(jī)能夠理解的代碼,然后由解釋器來將虛擬機(jī)代碼轉(zhuǎn)換為特定系統(tǒng)的機(jī)器碼執(zhí)行。在 Java 中,這種供虛擬機(jī)理解的代碼叫做字節(jié)碼(即擴(kuò)展名為 `.class` 的文件),它不面向任何特定的處理器,只面向虛擬機(jī)。每一種平臺(tái)的解釋器是不同的,但是實(shí)現(xiàn)的虛擬機(jī)是相同的。Java 源程序經(jīng)過編譯器編譯后變成字節(jié)碼,字節(jié)碼由虛擬機(jī)解釋執(zhí)行,虛擬機(jī)將每一條要執(zhí)行的字節(jié)碼送給解釋器,解釋器將其翻譯成特定機(jī)器上的機(jī)器碼,然后在特定的機(jī)器上運(yùn)行。這也就是解釋了 Java 的編譯與解釋并存的特點(diǎn)。采用字節(jié)碼的好處:Java 語言通過字節(jié)碼的方式,在一定程度上解決了傳統(tǒng)解釋型語言執(zhí)行效率低的問題,同時(shí)又保留了解釋型語言可移植的特點(diǎn)。所以 Java 程序運(yùn)行時(shí)比較高效,而且,由于字節(jié)碼并不專對(duì)一種特定的機(jī)器,因此,Java程序無須重新編譯便可在多種不同的計(jì)算機(jī)上運(yùn)行。

5、Java運(yùn)行的過程?

Java 源代碼=> 編譯器 => JVM 可執(zhí)行的 Java 字節(jié)碼(即虛擬指令)=> JVM => JVM 中解釋器 => 機(jī)器可執(zhí)行的二進(jìn)制機(jī)器碼 => 程序運(yùn)行

6、Java是動(dòng)態(tài)類型語言還是靜態(tài)類型語言?

動(dòng)態(tài)類型語言和靜態(tài)類型語言兩者的卻別就在于對(duì)類型的檢查是在編譯期還是在運(yùn)行期,滿足前者就是靜態(tài)類型語言,反之則是動(dòng)態(tài)類型語言。直白來說靜態(tài)語言是判斷變量自身的類型信息;動(dòng)態(tài)類型語言是判斷變量值的類型信息,變量設(shè)有類型信息,變量值才有類型信息,這是動(dòng)態(tài)語言的一個(gè)重要特征。?Java是靜態(tài)類型語言(盡管lambda表達(dá)式為其增加了動(dòng)態(tài)特性),js,python是動(dòng)態(tài)類型語言。

面向?qū)ο?/h1>

7.什么是面向?qū)ο螅?/span>

面向?qū)ο笫且环N思想,世間萬物都可以看做一個(gè)對(duì)象,這里只討論面向?qū)ο缶幊蹋?span id="eeeeeee" class="candidate-entity-word" data-gid="4492978">OOP),Java 是一個(gè)支持并發(fā)、基于類和面向?qū)ο蟮挠?jì)算機(jī)高級(jí)編程語言。面向?qū)ο筌浖_發(fā)具有以下優(yōu)點(diǎn):代碼開發(fā)模塊化,更易維護(hù)和修改。代碼復(fù)用性強(qiáng)。增加代碼的可讀性。

8.請(qǐng)說說面向?qū)ο蟮奶卣??封裝、繼承、多態(tài)分別說一下,以及它們的好處?

1.封裝:封裝,給對(duì)象提供了隱藏內(nèi)部特性和行為的能力。對(duì)象提供一些能被其他對(duì)象訪問的方法來改變它內(nèi)部的數(shù)據(jù)。在 Java 當(dāng)中,有 4 種修飾符: `default`、`public`、`private` 和 `protected` 。每一種修飾符給其他的位于同一個(gè)包或者不同包下面對(duì)象賦予了不同的訪問權(quán)限。?使用封裝的一些好處: 通過隱藏對(duì)象的屬性來保護(hù)對(duì)象內(nèi)部的狀態(tài)。 提高了代碼的可用性和可維護(hù)性,因?yàn)閷?duì)象的行為可以被單獨(dú)的改變或者是擴(kuò)展。 禁止對(duì)象之間的不良交互提高模塊化。?2.繼承:繼承,給對(duì)象提供了從基類獲取字段和方法的能力。繼承提供了代碼的重用行,也可以在不修改類的情況下給現(xiàn)存的類添加新特性。?3.多態(tài):多態(tài),是編程語言給不同的底層數(shù)據(jù)類型做相同的接口展示的一種能力。一個(gè)多態(tài)類型上的操作,可以應(yīng)用到其他類型的值上面。多態(tài)中,父類作為形參的方法和子類作為形參的方法都是一樣的。形參父類類型可以接收子類對(duì)象。這是多態(tài)的特性。?重要特性:轉(zhuǎn)型向上轉(zhuǎn)型:父類引用指向子類對(duì)象。相當(dāng)于子類對(duì)象賦給父類引用。這樣子,是默認(rèn)的。子類的方法可以重寫父類的方法。但是,向上轉(zhuǎn)型的弊端就是只能使用父類有的方法,一旦向上轉(zhuǎn)型就不能調(diào)用子類特有的方法。所以需要向下轉(zhuǎn)型還原。?向下轉(zhuǎn)型:其實(shí)是一個(gè)還原的步驟。子類引用指向父類的一個(gè)引用。這個(gè)要強(qiáng)轉(zhuǎn)類型。因?yàn)槲覀兏割惒荒苋ツ米宇愐呀?jīng)有的東西。所以必須把父類轉(zhuǎn)化為和子類一個(gè)類型。

9.多態(tài)為什么要轉(zhuǎn)型?

當(dāng)使用多態(tài)方式調(diào)用方法時(shí),首先檢查父類中是否有該方法,如果沒有,則編譯錯(cuò)誤。也就是說,不能調(diào)用子類擁有,而父類沒有的方法。編譯都錯(cuò)誤,更別說運(yùn)行了。這也是多態(tài)給我們帶來的一點(diǎn)"小麻煩”。所以,想要調(diào)用子類特有的方法,必須做向下轉(zhuǎn)型。

10.說一下權(quán)限修飾符的使用權(quán)限?

同一個(gè)類:四個(gè)都能訪問。?同一個(gè)包不同類:public、protected和defaut都能訪問。private不能訪問?不同包但是B類是A類的子類:首先,必須導(dǎo)包。如果要用B類繼承A類,必須先導(dǎo)入A類所在的包。public和protect能訪問。default不能訪問。private也不能。?不同包非子類:一點(diǎn)關(guān)系沒有。兩個(gè)類是陌生關(guān)系。不是一個(gè)包里的也沒有繼承(實(shí)現(xiàn))關(guān)系。只有public可以訪問。其他都不行。

語言基礎(chǔ)

  • 基本數(shù)據(jù)類型和引用類型

11.Java 中的幾種基本數(shù)據(jù)類型是什么?各自占用多少字節(jié)?

基本數(shù)據(jù)類型如下:byte 1字節(jié)boolean false/true(理論上占用1bit,1/8字節(jié),實(shí)際處理按1byte處理)char 2字節(jié)(C語言中是1字節(jié))short 2字節(jié)int 4字節(jié)long 8字節(jié)float 4字節(jié)double 8字節(jié)

12.char 型變量中能不能存貯一個(gè)中文漢字?為什么?

在 Java 語言中,char 類型占 2 個(gè)字節(jié),而且 Java 默認(rèn)采用 Unicode 編碼,一個(gè) Unicode 碼是 16 位,所以一個(gè) Unicode 碼占兩個(gè)字節(jié)。Java 中無論漢字還是英文字母,都是用 Unicode 編碼來表示的。所以,在 Java 中,char 類型變量可以存儲(chǔ)一個(gè)中文漢字。

13.什么是引用類型?

引用類型聲明的變量是指該變量在內(nèi)存中實(shí)際存儲(chǔ)的是一個(gè)引用地址,實(shí)體在堆中。引用類型包括類、接口、數(shù)組等。特別注意,String 是引用類型不是基本類型。

14.什么是值傳遞和引用傳遞?

值傳遞,是對(duì)基本型變量而言的,傳遞的是該變量的一個(gè)副本,改變副本不影響原變量。引用傳遞,一般是對(duì)于對(duì)象型變量而言的,傳遞的是該對(duì)象地址的一個(gè)副本,并不是原對(duì)象本身。一般認(rèn)為,Java 內(nèi)的傳遞都是值傳遞,Java 中實(shí)例對(duì)象的傳遞是引用傳遞。

15.屬性(字段)和變量的區(qū)別?

字段是成員變量,是在類中聲明的變量。變量可以分為局部變量和成員變量。成員變量就是字段也叫做屬性。所以字段就是屬性就是成員變量。

16.什么是重載和重寫?Overload(重載)和Override(重寫)的區(qū)別?

重載:Overload就是重載的意思。?重載Overload表示同一個(gè)類中可以有多個(gè)名稱相同的方法,但這些方法的參數(shù)列表各不相同(即參數(shù)個(gè)數(shù)或類型不同)。Overload對(duì)我們來說可能比較熟悉,可以翻譯為重載,它是指我們可以定義一些名稱相同的方法,通過定義不同的輸入?yún)?shù)來區(qū)分這些方法,然后再調(diào)用時(shí),JVM就會(huì)根據(jù)不同的參數(shù)樣式,來選擇合適的方法執(zhí)行。在使用重載要注意以下的幾點(diǎn):1、在使用重載時(shí)只能通過不同的參數(shù)樣式。例如,不同的參數(shù)類型,不同的參數(shù)個(gè)數(shù),不同的參數(shù)順序(當(dāng)然,同一方法內(nèi)的幾個(gè)參數(shù)類型必須不一樣,例如可以是fun(int,float),但是不能為fun(int,int));2、不能通過訪問權(quán)限、返回類型、拋出的異常進(jìn)行重載;3、方法的異常類型和數(shù)目不會(huì)對(duì)重載造成影響;4、對(duì)于繼承來說,如果某一方法在父類中是訪問權(quán)限是priavte,那么就不能在子類對(duì)其進(jìn)行重載,如果定義的話,也只是定義了一個(gè)新方法,而不會(huì)達(dá)到重載的效果。?重寫:Override是覆蓋的意思,也就是重寫。?重寫Override表示子類中的方法可以與父類中的某個(gè)方法的名稱和參數(shù)完全相同,通過子類創(chuàng)建的實(shí)例對(duì)象調(diào)用這個(gè)方法時(shí),將調(diào)用子類中的定義方法,這相當(dāng)于把父類中定義的那個(gè)完全相同的方法給覆蓋了,這也是面向?qū)ο缶幊痰亩鄳B(tài)性的一種表現(xiàn)。子類覆蓋父類的方法時(shí),只能比父類拋出更少的異常,或者是拋出父類拋出的異常的子異常,因?yàn)樽宇惪梢越鉀Q父類的一些問題,不能比父類有更多的問題。子類方法的訪問權(quán)限只能比父類的更大,不能更小。如果父類的方法是private類型,那么,子類則不存在覆蓋的限制,相當(dāng)于子類中增加了一個(gè)全新的方法。?override可以翻譯為覆蓋,從字面就可以知道,它是覆蓋了一個(gè)方法并且對(duì)其重寫,以求達(dá)到不同的作用。對(duì)我們來說最熟悉的覆蓋就是對(duì)接口方法的實(shí)現(xiàn),在接口中一般只是對(duì)方法進(jìn)行了聲明,而我們?cè)趯?shí)現(xiàn)時(shí),就需要實(shí)現(xiàn)接口聲明的所有方法。除了這個(gè)典型的用法以外,我們?cè)诶^承中也可能會(huì)在子類覆蓋父類中的方法。在覆蓋要注意以下的幾點(diǎn):1、覆蓋的方法的標(biāo)志必須要和被覆蓋的方法的標(biāo)志完全匹配,才能達(dá)到覆蓋的效果;2、覆蓋的方法的返回值必須和被覆蓋的方法的返回一致;3、覆蓋的方法所拋出的異常必須和被覆蓋方法的所拋出的異常一致,或者是其子類;4、被覆蓋的方法不能為private,否則在其子類中只是新定義了一個(gè)方法,并沒有對(duì)其進(jìn)行覆蓋。

17.什么是java序列化,如何實(shí)現(xiàn)java序列化?或者請(qǐng)解釋Serializable接口的作用?

我們有時(shí)候?qū)⒁粋€(gè)java對(duì)象變成字節(jié)流的形式傳出去或者從一個(gè)字節(jié)流中恢復(fù)成一個(gè)java對(duì)象,例如,要將java對(duì)象存儲(chǔ)到硬盤或者傳送給網(wǎng)絡(luò)上的其他計(jì)算機(jī),這個(gè)過程我們可以自己寫代碼去把一個(gè)java對(duì)象變成某個(gè)格式的字節(jié)流再傳輸。?但是,jre本身就提供了這種支持,我們可以調(diào)用OutputStreamwriteObject方法來做,如果要讓java幫我們做,要被傳輸?shù)膶?duì)象必須實(shí)現(xiàn)serializable接口,這樣,javac編譯時(shí)就會(huì)進(jìn)行特殊處理,編譯的類才可以被writeObject方法操作,這就是所謂的序列化。需要被序列化的類必須實(shí)現(xiàn)Serializable接口,該接口是一個(gè)mini接口,其中沒有需要實(shí)現(xiàn)方法,implements Serializable只是為了標(biāo)注該對(duì)象是可被序列化的。?例如,在web開發(fā)中,如果對(duì)象被保存在了Session中,tomcat在重啟時(shí)要把Session對(duì)象序列化到硬盤,這個(gè)對(duì)象就必須實(shí)現(xiàn)Serializable接口。如果對(duì)象要經(jīng)過分布式系統(tǒng)進(jìn)行網(wǎng)絡(luò)傳輸,被傳輸?shù)膶?duì)象就必須實(shí)現(xiàn)Serializable接口。

  • 字符串相關(guān)

18.String 為什么是不可變的?

String 類中使用 `final` 關(guān)鍵字字符數(shù)組保存字符串。?String源碼:// String.javaprivate final char[] value;?并且它是在堆中的字符串常量池中的,所以不可變。?StringBuilder 與 StringBuffer為什么是可變的?StringBuilder 與 StringBuffer 都繼承自 abstractStringBuilder 類,在 AbstractStringBuilder 中也是使用字符數(shù)組保存字符串 `char[] value` ,但是沒有用 `final` 關(guān)鍵字修飾。源碼:// AbstractStringBuilder.javachar[] value;所以這兩種對(duì)象都是可變的。

19.String s = new String("xyz") 會(huì)創(chuàng)建幾個(gè)對(duì)象?

兩個(gè)。你new一個(gè),在堆中創(chuàng)建了一個(gè)對(duì)象。還有一個(gè)在字符串常量池中的字符串對(duì)象,它指向了一個(gè)字節(jié)數(shù)組。字節(jié)數(shù)組會(huì)把"xyz"轉(zhuǎn)化為相對(duì)應(yīng)的ascii碼存儲(chǔ)在字節(jié)數(shù)組里面。

20.說說你對(duì)字符串常量池的理解?

1.從jdk1.7開始,字符串常量池在堆當(dāng)中。?2.字符串底層就有一個(gè)字節(jié)數(shù)組。名叫value。字符串常量池中的對(duì)象保存的就是byte[]字節(jié)數(shù)組的地址值。指向了字節(jié)數(shù)組。但是字符串對(duì)象自己也有一個(gè)地址。?3.jvm在幫你創(chuàng)建字符串a(chǎn)bc的時(shí)候,其實(shí)是把它化成一個(gè)字節(jié)數(shù)組,再把字節(jié)數(shù)組的地址保存在字符串常量池中的字符串對(duì)象的地址中,再把字符串對(duì)象的地址賦給你創(chuàng)建的堆中的字符串引用。也就是說這個(gè)引用是先指向了字符串常量池中的字符串對(duì)象,字符串對(duì)象再指向字節(jié)數(shù)組,然后獲取值。?4.如果再創(chuàng)建一個(gè)字符串的話,也是指向同一個(gè)內(nèi)存地址。但是值不同。?5.所有的String都指向一個(gè)地址。除非你去new一個(gè),那就是不同的。若String s1 = “hello1”,同時(shí)聲明String s2 = s1,則s1和s2現(xiàn)在指向同一個(gè)地址,該地址指向字符串內(nèi)容hello1若在說明1的基礎(chǔ)上,再聲明s1 = “hello1”,則同樣s1和s2指向同一個(gè)地址,該地址指向字符串內(nèi)容內(nèi)容hello1若在說明1的基礎(chǔ)上,再聲明s1 = “hello2”,則出現(xiàn)了變化,s1和s2的地址不再相同若現(xiàn)在重新聲明String s2 = new String(s1),則說明s1和s2現(xiàn)在不同(s1==s2為false),但是所指向的內(nèi)容是一致的,也就是說它們?cè)俣褍?nèi)存中的地址是不一樣的,但是它們都指向了相同的字節(jié)數(shù)組?總結(jié):因?yàn)镾tring類是不可變的(imutable),當(dāng)修改一個(gè)字符串時(shí),我們不是在原來字符串的基礎(chǔ)上進(jìn)行修改,而是申請(qǐng)一個(gè)新的地址空間,并將內(nèi)容寫在新的空間里。

21.String、StringBuffer、StringBuilder 的區(qū)別?

Java 平臺(tái)提供了兩種類型的字符串:String 和 StringBuffer/StringBuilder,它們可以儲(chǔ)存和操作字符串。?String:只讀字符串,也就意味著 String 引用的字符串內(nèi)容是不能被改變的。StringBuffer/StringBuilder 類,表示的字符串對(duì)象可以直接進(jìn)行修改。每次對(duì) String 類型進(jìn)行改變的時(shí)候,都會(huì)生成一個(gè)新的 String 對(duì)象,然后將指針指向新的 String 對(duì)象。?StringBuilder:StringBuilder 是 Java 5 中引入的,它和 StringBuffer 的方法完全相同,區(qū)別在于它是在單線程環(huán)境下使用的,因?yàn)樗乃蟹矫娑紱]有被 `synchronized` 修飾,因此它的效率也比 StringBuffer 要高。?StringBuffer:StringBuffer 每次都會(huì)對(duì) StringBuffer 對(duì)象本身進(jìn)行操作,而不是生成新的對(duì)象并改變對(duì)象引用。相同情況下使用 StirngBuilder 相比使用 StringBuffer 僅能獲得 10%~15% 左右的性能提升,但卻要冒多線程不安全的風(fēng)險(xiǎn)。?對(duì)于三者使用的總結(jié):操作少量的數(shù)據(jù) = String 。這個(gè)也是實(shí)際編碼較為經(jīng)常使用的方式。單線程操作字符串緩沖區(qū)下操作大量數(shù)據(jù) = StringBuilder 。甚至有時(shí),我們?yōu)榱吮苊饷總€(gè)線程重復(fù)創(chuàng)建 StringBuilder 對(duì)象,會(huì)通過 ThreadLocal StringBuilder 的方式,進(jìn)行對(duì) StringBuilder 的重用。多線程操作字符串緩沖區(qū)下操作大量數(shù)據(jù) = StringBuffer。實(shí)際場(chǎng)景下,我們基本不太會(huì)出現(xiàn),多線程操作同一個(gè) StringBuffer 對(duì)象。

  • 關(guān)鍵字相關(guān)

22.談?wù)勀銓?duì)this關(guān)鍵字的理解?

this關(guān)鍵字是存放在java棧幀中局部變量表變量槽的索引0的位置。它指的是一個(gè)方法或者變量的引用,通常指的是當(dāng)前方法或者變量。一個(gè)對(duì)象去調(diào)用另一個(gè)方法,或者一個(gè)對(duì)象去調(diào)用一個(gè)變量,就是把指針指向了這個(gè)方法或者變量所處的局部變量表中的this指針的位置。也就是索引為0的位置。隨后這個(gè)方法就進(jìn)棧。?this的三種用法1.調(diào)用屬性:this可以調(diào)用本類中的任何成員變量2.調(diào)用方法(可省略):this調(diào)用本類中的成員方法(在main方法里面沒有辦法通過this調(diào)用)3.調(diào)用構(gòu)造方法:this調(diào)用構(gòu)造方法只能在本構(gòu)造方法中調(diào)用另一個(gè)構(gòu)造方法;this 調(diào)用構(gòu)造方法必須寫在第一行

23.談?wù)勀銓?duì)super關(guān)鍵字的理解?

super可以理解為是指向自己超(父)類對(duì)象的一個(gè)指針,而這個(gè)超類指的是離自己最近的一個(gè)父類。super的三種用法:1.在子類的成員方法中,訪問父類的成員變量。2.在子類的成員方法中,訪問父類的成員方法。3.在子類的構(gòu)造方法中,訪問父類的構(gòu)造方法

24.那你知道this和super有什么區(qū)別嗎?

this()和super()都指的是對(duì)象,所以,均不可以在static環(huán)境中使用。包括:static變量,static方法,static語句塊。super()和this()類似,區(qū)別是,super()在子類中調(diào)用父類的構(gòu)造方法,this()在本類內(nèi)調(diào)用本類的其它構(gòu)造方法。從本質(zhì)上講,this是一個(gè)指向本對(duì)象的指針, 然而super是一個(gè)Java關(guān)鍵字。

25.談?wù)勀銓?duì)static關(guān)鍵字的理解?

只要是用了static關(guān)鍵字的變量,就不再屬于對(duì)象,是屬于類的。共享。?被static關(guān)鍵字修飾的變量,隨著類加載的出現(xiàn)而出現(xiàn)。它在類加載過程的時(shí)候在鏈接階段的準(zhǔn)備階段為類的靜態(tài)變量分配內(nèi)存,并將其初始值轉(zhuǎn)化為默認(rèn)值0或者null。在初始化階段為類的靜態(tài)變量賦予正確的初始值,就是你所定義的那個(gè)初始值?它優(yōu)先于對(duì)象出現(xiàn),所以在靜態(tài)環(huán)境中不可以訪問非靜態(tài)變量或者方法。如果你的代碼嘗試不用實(shí)例來訪問非 `static` 的變量,編譯器會(huì)報(bào)錯(cuò),因?yàn)檫@些變量還沒有被創(chuàng)建出來,還沒有跟任何實(shí)例關(guān)聯(lián)上。

26.談?wù)勀銓?duì)final關(guān)鍵字的理解?

final關(guān)鍵字代表最終、不可改變的的意思。常見四種用法:1.可以用來修飾一個(gè)類2.可以用來修飾一個(gè)方法3.可以用來修飾一個(gè)局部變量4.還可以用來修飾一個(gè)成員變量?final不能和abstract同時(shí)使用。因?yàn)槊?。abstract必須有子類來繼承重寫方法,否則類沒有意義。但是final修飾的類不能有子類,矛盾。就跟static和this矛盾一樣。

  • 哈希算法

27.你知道在Java中都有哪里用到了哈希算法嗎?

1.HashMap.hash(),側(cè)重點(diǎn)是速度

超全面!阿里巴巴最新發(fā)布23年秋招200道Java面試題(含答案)

2.Object.hashCode(),直接獲取內(nèi)存地址

超全面!阿里巴巴最新發(fā)布23年秋招200道Java面試題(含答案)

3.Integer.hashCode(),直接返回的int類型的Value

超全面!阿里巴巴最新發(fā)布23年秋招200道Java面試題(含答案)

4.String.hashCode(),根據(jù)字符串內(nèi)容生成hashCode,字符串內(nèi)容一樣則hashCode也相同

超全面!阿里巴巴最新發(fā)布23年秋招200道Java面試題(含答案)

  • 拷貝相關(guān)

28.Java中有多少種拷貝類型?分別說一下?

淺拷貝:淺拷貝只是復(fù)制了對(duì)象的引用地址,兩個(gè)對(duì)象指向同一個(gè)內(nèi)存地址,所以修改其中任意的值,另一個(gè)值都會(huì)隨之變化。僅僅只是復(fù)制引用地址,而不是新建一個(gè)內(nèi)存。在Java語言中,通過覆蓋Object類的clone()方法可以實(shí)現(xiàn)淺克隆。?深拷貝:深拷貝是將對(duì)象及值復(fù)制過來,兩個(gè)對(duì)象修改其中任意的值另一個(gè)值不會(huì)改變。新建了一個(gè)新的內(nèi)存最重要的是將引用類型成員變量復(fù)制出來,相當(dāng)于在內(nèi)存中開辟了一塊新的地址了。新地址里面的值和舊的地址里面的值一樣。但是因?yàn)槭窃谛碌牡刂防锩娌僮髁怂晕覀儫o論怎么操作都不會(huì)改變舊的地址里面的東西。兩個(gè)地址是完全獨(dú)立的。?在Java語言中,如果需要實(shí)現(xiàn)深克隆,可以通過覆蓋Object類的clone()方法實(shí)現(xiàn),也可以通過序列化(Serialization)等方式來實(shí)現(xiàn)。

29.那你碰到過多引用拷貝嗎?知道怎么解決嗎?

解決多引用拷貝的方式:如果引用類型里面還包含很多引用類型,或者內(nèi)層引用類型的類里面又包含引用類型,使用clone方法就會(huì)很麻煩。這時(shí)我們可以用序列化的方式來實(shí)現(xiàn)對(duì)象的深克隆。序列化就是將對(duì)象寫到流的過程,寫到流中的對(duì)象是原有對(duì)象的一個(gè)拷貝,而原對(duì)象仍然存在于內(nèi)存中。通過序列化實(shí)現(xiàn)的拷貝不僅可以復(fù)制對(duì)象本身,而且可以復(fù)制其引用的成員對(duì)象,因此通過序列化將對(duì)象寫到一個(gè)流中,再從流里將其讀出來,可以實(shí)現(xiàn)深克隆。需要注意的是能夠?qū)崿F(xiàn)序列化的對(duì)象其類必須實(shí)現(xiàn)Serializable接口,否則無法實(shí)現(xiàn)序列化操作。Java語言提供的Cloneable接口和Serializable接口的代碼非常簡單,它們都是空接口,這種空接口也稱為標(biāo)識(shí)接口,標(biāo)識(shí)接口中沒有任何方法的定義,其作用是告訴JRE這些接口的實(shí)現(xiàn)類是否具有某個(gè)功能,如是否支持克隆、是否支持序列化等。

  • 接口相關(guān)

30.你平時(shí)是怎么使用接口的?談?wù)勀愕睦斫猓?/span>

1.接口沒有靜態(tài)代碼塊或者構(gòu)造方法。2.一個(gè)類的直接父類是唯一的,但是一個(gè)類可以實(shí)現(xiàn)多個(gè)接口。3.一個(gè)類同時(shí)實(shí)現(xiàn)了兩個(gè)接口,兩個(gè)接口的方法重名了,那么只需覆蓋重寫一次就好。4.如果實(shí)現(xiàn)類沒有覆蓋重寫所有接口中的所有方法,那么實(shí)現(xiàn)類就必須是一個(gè)抽象類。必須要有子類繼承這個(gè)實(shí)現(xiàn)類重寫完抽象方法這個(gè)接口體系才合法。5.如果實(shí)現(xiàn)類所實(shí)現(xiàn)的多個(gè)接口中存在重復(fù)的默認(rèn)方法,那么實(shí)現(xiàn)類一定要對(duì)沖突的默認(rèn)方法進(jìn)行重寫。6.繼承和實(shí)現(xiàn)的優(yōu)先級(jí)問題:當(dāng)一個(gè)類,既繼承一個(gè)父類,又實(shí)現(xiàn)若干個(gè)接口時(shí),父類中的成員方法與接口中的默認(rèn)方法重名,子類就近選擇執(zhí) 行父類的成員方法。7.接口的多繼承:一個(gè)接口能繼承另一個(gè)或者多個(gè)接口,這和類之間的繼承比較相似。接口的繼承使用 extends 關(guān)鍵字,子接口繼承父接口的方法。如果父接口中的默認(rèn)方法有重名的,那么子接口需要重寫一次。而且要帶著default關(guān)鍵字。也就是說,這個(gè)接口無法繼承使用它們父接口中的同名默認(rèn)方法,因?yàn)闆_突了。但是如果不是默認(rèn)方法,是普通方法,那么繼承誰的都行。因?yàn)槎际且粯拥?,?shí)現(xiàn)的也是一樣的功能。但是默認(rèn)方法不行,因?yàn)槟J(rèn)方法是相當(dāng)于在接口中就對(duì)方法進(jìn)行了實(shí)現(xiàn)。這樣會(huì)導(dǎo)致沖突。

31.那聽你這么說,接口的實(shí)現(xiàn)類的方法返回值類型是什么?

返回值類型可以是接口、也可以是接口的實(shí)現(xiàn)類引用、或者直接new一個(gè)實(shí)現(xiàn)類對(duì)象也行。

32.方法的參數(shù)可以是接口嗎?

當(dāng)然不行。如果方法形參類型是接口的話,傳的參必須是其實(shí)現(xiàn)類或者new,不然怎么能叫引用呢。參數(shù)都是引用。?但是如果形參類型是類的話,形參可以是這個(gè)類的子類或者直接new一個(gè)子類。因?yàn)槭抢^承。參數(shù)是引用,只要能指向?qū)ο缶托小?/code>

33.接口的返回值類型可否是另一個(gè)接口類型?

可以。一個(gè)接口里可以讓方法的返回值類型是其他接口的類型。其實(shí)就是玩多態(tài)。

34.接口引用調(diào)用實(shí)現(xiàn)類方法?

只能調(diào)用實(shí)現(xiàn)類重寫的。實(shí)現(xiàn)類自己的不能調(diào)用。

  • 抽象類

35.抽象類使用規(guī)則

繼承抽象類的子類必須重寫父類所有的抽象方法。否則,該子類也必須聲明為抽象類。最終,必須有子類能夠?qū)崿F(xiàn)完剩下的全部抽象方法,否則,從最初的父類到最終的子類都不能創(chuàng)建對(duì)象,失去意義。?如果A是抽象類,B繼承A,必須得繼承全部的。否則B也是個(gè)抽象類,不能創(chuàng)建對(duì)象。C去繼承B的話,得繼承完剩下的B沒繼承A的,如果方法B已經(jīng)繼承,可以重寫,但是要等到C重寫了所有沒實(shí)現(xiàn)的抽象類,才可以創(chuàng)建對(duì)象,去調(diào)用方法來使用。否則,C依然是個(gè)抽象類。

36.抽象類注意事項(xiàng)?

抽象類不能創(chuàng)建對(duì)象,如果創(chuàng)建,編譯無法通過而報(bào)錯(cuò)。只能創(chuàng)建其非抽象子類的對(duì)象。抽象類中,可以有構(gòu)造方法,是供子類創(chuàng)建對(duì)象時(shí),初始化父類成員使用的。抽象類中,不一定包含抽象方法,但是有抽象方法的類必定是抽象類。

37.abstractclass和interface語法上有什么區(qū)別?

1.抽象類可以有構(gòu)造方法,接口中不能有構(gòu)造方法。2.抽象類中可以有普通成員變量,接口中沒有普通成員變量3.抽象類中可以包含非抽象的普通方法,接口中的所有方法必須都是抽象的,不能有非抽象的普通方法。4. 抽象類中可以包含靜態(tài)方法,接口中不能包含靜態(tài)方法。5. 抽象類和接口中都可以包含靜態(tài)成員變量,抽象類中的靜態(tài)成員變量的訪問類型可以任意,但接口中定義的變量只能是publicstatic final類型,并且默認(rèn)即為publicstatic final類型。6.一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,但只能繼承一個(gè)抽象類。

38.接口是否可繼承接口?抽象類是否可繼承具體類(concreteclass)?抽象類中是否可以有靜態(tài)的main方法?

接口可以繼承接口。抽象類可以實(shí)現(xiàn)(implements)接口,抽象類可以繼承具體類。抽象類中可以有靜態(tài)的main方法。只要記?。撼橄箢惻c普通類的唯一區(qū)別就是不能創(chuàng)建實(shí)例對(duì)象和允許有abstract方法。

  • 包裝類

39.什么是自動(dòng)拆裝箱?

自動(dòng)裝箱和拆箱,就是基本類型和引用類型之間的轉(zhuǎn)換。

40.為什么要轉(zhuǎn)換?

因?yàn)椴荒苤苯拥叵蚣? Collection )中放入原始類型值,因?yàn)榧现唤邮諏?duì)象。通常這種情況下你的做法是,將這些原始類型的值轉(zhuǎn)換成對(duì)象,然后將這些轉(zhuǎn)換的對(duì)象放入集合中。使用 Integer、Double、Boolean 等這些類,我們可以將原始類型值轉(zhuǎn)換成對(duì)應(yīng)的對(duì)象,但是從某些程度可能使得代碼不是那么簡潔精煉。為了讓代碼簡練,Java5 引入了具有在原始類型和對(duì)象類型自動(dòng)轉(zhuǎn)換的裝箱和拆箱機(jī)制。

  • 泛型

41.你平時(shí)是如何使用泛型的?

1.使用含有泛型的類:在類上標(biāo)注泛型代表我們還不知道是什么類型。等到測(cè)試類創(chuàng)建對(duì)象的時(shí)候確定泛型的類型。到時(shí)候類和方法的類型會(huì)變成相對(duì)應(yīng)的類型。2.使用含有泛型的方法:在調(diào)用方法的時(shí)候確定泛型的類型。3.使用含有泛型的接口:第一種方式,創(chuàng)建泛型接口,接口上未確認(rèn)泛型是什么類型。在實(shí)現(xiàn)類上決定泛型的類型。并且之后的所有實(shí)現(xiàn)方法都會(huì)默認(rèn)是這個(gè)類型。第二種方式,接口已經(jīng)確認(rèn)了泛型類型。實(shí)現(xiàn)類就得跟著用什么類型。如果一個(gè)子接口繼承了父接口,那么父接口如果確定了泛型類型,子接口也得跟著是什么類型。4.使用泛型通配符?:代表任意的數(shù)據(jù)類型使用方式:但它不能創(chuàng)建對(duì)象使用,只能作為方法的參數(shù)使用。

  • 異常

42.Exeception和Error區(qū)別?

Exception 和 Error 都是繼承了 Throwable 類,在 Java 中只有 Throwable 類型的實(shí)例才可以被拋出(throw)或者捕獲(catch),它是異常處理機(jī)制的基本組成類型。?Exception 和 Error 體現(xiàn)了 Java 平臺(tái)設(shè)計(jì)者對(duì)不同異常情況的分類。Exception 是程序正常運(yùn)行中,可以預(yù)料的意外情況,可能并且應(yīng)該被捕獲,進(jìn)行相應(yīng)處理。?Error 是指在正常情況下,不大可能出現(xiàn)的情況,絕大部分的 Error 都會(huì)導(dǎo)致程序(比如 JVM 自身)處于非正常的、不可恢復(fù)狀態(tài)。既然是非正常情況,所以不便于也不需要捕獲,常見的比如 OutOfMemoryError 之類,都是 Error 的子類。?Exception 又分為可檢查(checked)異常和不可檢查(unchecked)異常:可檢查異常在源代碼里必須顯式地進(jìn)行捕獲處理,這是編譯期檢查的一部分。前面我介紹的不可查的 Error,是 Throwable 不是 Exception。不檢查異常就是所謂的運(yùn)行時(shí)異常,類似 NullPointerException、ArrayIndexOutOfBoundsException 之類,通常是可以編碼避免的邏輯錯(cuò)誤,具體根據(jù)需要來判斷是否需要捕獲,并不會(huì)在編譯期強(qiáng)制要求。

43.那你知道異常有幾種處理方式嗎?

1.throws交給別人處理。步驟:只要我們?cè)诜椒ɡ锩鎡hrow拋出一個(gè)異常,如果是RuntimeException或者其子類,就會(huì)默認(rèn)給jvm接盤處理。jvm會(huì)中斷程序,打印到控制臺(tái)上。是jvm進(jìn)行中斷處理的?否則,我們要在方法體throws上聲明,然后給下一個(gè)接盤者。?如果是在主方法調(diào)用,因?yàn)橹鞣椒ㄕ{(diào)用了它,所以主方法要么處理異常,要么就繼續(xù)在主方法名上throws找人接盤處理,最后會(huì)讓jvm來處理。?所以,只要throw了,至少要在異常的方法名上throws,要么自己處理,要么找人接盤。?2.try catch finally自己處理異常,方式:多個(gè)異常多次拋出多次處理多個(gè)異常一次捕獲,一次處理多個(gè)異常一次拋出多次處理運(yùn)行時(shí)異??梢圆挥脪伋龊筒东@處理,交給jvm

44.說說Throwable類怎么用吧?

Throwable類中有3個(gè)異常處理方法1.getMessage():返回throwable的簡短信息2.toString():返回throwable的詳細(xì)消息字符串3.printStackTrace():jvm打印異常對(duì)象,默認(rèn)此方法,異常信息最全面

45.你最常見到的是Java中的什么異常?

那必須得是運(yùn)行時(shí)異常?。篊lassCastException(類轉(zhuǎn)換異常)IndexOutOfBoundsException(數(shù)組越界異常)NullPointerException(空指針異常)ArrayStoreException(數(shù)據(jù)存儲(chǔ)異常,操作數(shù)組時(shí)類型不一致)BufferOverflowException(還有IO操作的,緩沖溢出異常)

  • 反射機(jī)制

46.什么是反射機(jī)制?

Class類對(duì)象階段是在內(nèi)存中的。已經(jīng)被編譯成字節(jié)碼加載進(jìn)虛擬機(jī)內(nèi)存。這個(gè)時(shí)候?qū)τ谖覀冇脩魜碚f是看不到類的一些信息的,那我們?nèi)绻窒肟吹竭@些類的信息,就可以通過反射機(jī)制獲取,或者說當(dāng)你無法確定到底傳入的類是什么樣子的時(shí)候,要通用兼容所有可能的類,就需要用反射機(jī)制動(dòng)態(tài)去調(diào)用類的屬性和行為。

47.那怎么使用反射呢?

1.使用反射獲取字節(jié)碼Class對(duì)象:Class.forName("全類名")Class.forName("全類名")對(duì)象.getClass()?2.使用Class對(duì)象:通過Field類獲取成員變量通過Constructor類獲取構(gòu)造方法通過Method類獲取成員方法

48.你反射這么熟悉,那一般在哪些場(chǎng)景用到它?。?/span>

1.逆向代碼 ,例如反編譯2.與注解相結(jié)合的框架3.動(dòng)態(tài)獲取信息,動(dòng)態(tài)代理(AOP中的動(dòng)態(tài)代理:實(shí)現(xiàn)了接口的使用JDK的動(dòng)態(tài)代理,沒有實(shí)現(xiàn)接口的使用CGlib動(dòng)態(tài)代理)使用反射

49.聽你說的這么多,那它就沒有缺點(diǎn)嗎?

有的。它的性能是一個(gè)問題,反射相當(dāng)于一系列解釋操作,通知jvm要做的事情,所以性能比直接的java代碼要慢很多。

  • JDK1.8新特性

50.你知道JDK1.8有哪些新特性嗎?

1.函數(shù)式接口函數(shù)式接口指的是有且只有一個(gè)抽象方法的接口,并且接口中可以包含其它的方法。我們可以使用@FunctionalInterface注解去檢測(cè)一個(gè)接口是否是一個(gè)函數(shù)式接口常用的函數(shù)式接口有:Supplier接口:它是一個(gè)生產(chǎn)型接口,當(dāng)你指定接口是什么類型時(shí),接口的get方法就會(huì)生產(chǎn)什么類型的數(shù)據(jù)Function接口:這個(gè)接口用來根據(jù)一個(gè)類型的數(shù)據(jù)去獲取另一個(gè)類型的數(shù)據(jù),前者稱為前置條件,后者稱為后置條件。這個(gè)接口中最主要的抽象方法為:R apply(T t),去根據(jù)類型T的參數(shù)獲取類型R的結(jié)果。使用場(chǎng)景有很多,比如:將String類型轉(zhuǎn)化為Integer類型。2.Stream流:Stream流屬于管道流,只能波消費(fèi)(使用)一次第一個(gè)Stream流調(diào)用完畢方法,數(shù)據(jù)就會(huì)流轉(zhuǎn)到下一個(gè)Stream上而這時(shí)第一個(gè)Stream流已經(jīng)使用完畢,就會(huì)關(guān)閉了所以第一個(gè)Stream流就不能再調(diào)用方法了。常用方法:forEach():用來遍歷流中的數(shù)據(jù),是一個(gè)終結(jié)方法。遍歷之后就不能再調(diào)用Stream流中的其它方法了。filter():它可以傳遞lambda表達(dá)式,對(duì)數(shù)據(jù)進(jìn)行過濾。map()::該接口需要一個(gè)Function函數(shù)式接口參數(shù),可以將當(dāng)前流中的T數(shù)據(jù)轉(zhuǎn)換為另一種R類型的流。skip():如果希望跳過前幾個(gè)元素,可以使用skip方法獲取一個(gè)截取之后的新流。concat():如果有兩個(gè)流希望合并成一個(gè)流,那么使用Stream接口的靜態(tài)方法concat就可以3.Lambda表達(dá)式:lambda表達(dá)式的標(biāo)準(zhǔn)格式由三部分組成:1.箭頭 2.參數(shù) 3.代碼格式: (參數(shù)列表) -> {核心代碼};格式說明:() :接口中抽象方法的參數(shù)列表,沒有參數(shù)的時(shí)候就空著,有參數(shù)的話就正常寫出參數(shù),多個(gè)參數(shù)用逗號(hào)分割-> :傳遞的意思,把參數(shù)傳遞給方法體{}{} :重寫接口的抽象方法的方法體?對(duì)于Lambda表達(dá)式來說,真正重要的是參數(shù),方法體和返回值。其他的,都可以省略。

將最重要的《25大專題Java面試專題》筆記拿出來,免費(fèi)分享給大家需要獲取的小伙伴可以直接轉(zhuǎn)發(fā) 關(guān)注后私信(學(xué)習(xí))即可獲取到!

超全面!阿里巴巴最新發(fā)布23年秋招200道Java面試題(含答案)

JavaOOP面試題

超全面!阿里巴巴最新發(fā)布23年秋招200道Java面試題(含答案)

Java集合/泛型面試題

超全面!阿里巴巴最新發(fā)布23年秋招200道Java面試題(含答案)

Java異常面試題

超全面!阿里巴巴最新發(fā)布23年秋招200道Java面試題(含答案)

Java中的IO與NIO面試題

超全面!阿里巴巴最新發(fā)布23年秋招200道Java面試題(含答案)

因?yàn)槠?,大部分的?nèi)容就不給大家一一展示了,需要獲取的小伙伴可以直接轉(zhuǎn)發(fā) 關(guān)注后私信(學(xué)習(xí))即可獲取到!

學(xué)習(xí)資料大禮包:

涵蓋面試準(zhǔn)備、項(xiàng)目經(jīng)驗(yàn)、簡歷編寫、源碼學(xué)習(xí)、算法準(zhǔn)備、面試資源等內(nèi)容

超全面!阿里巴巴最新發(fā)布23年秋招200道Java面試題(含答案)

因?yàn)槠?,大部分的?nèi)容就不給大家一一展示了,需要獲取的小伙伴可以直接轉(zhuǎn)發(fā) 關(guān)注后私信(學(xué)習(xí))即可獲取到!

版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請(qǐng)發(fā)送郵件至 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。