最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Java

2023-02-14 22:34 作者:Ssssssssssachima  | 我要投稿


TreeMap 和 TreeSet 在排序時如何比較元素?Collections 工具類中的 sort()方法如何比較元素?

TreeSet 要求存放的對象所屬的類必須實現(xiàn) Comparable 接口,該接口提供了比較元素的 compareTo()方法,當(dāng)插入元素時會回調(diào)該方法比較元素的大小。

TreeMap 要求存放的鍵值對映射的鍵必須實現(xiàn) Comparable 接口從而根據(jù)鍵對元素進行排序。

Collections 工具類的 sort 方法有兩種重載的形式:

第一種要求傳入的待排序容器中存放的對象實現(xiàn) Comparable 接口以實現(xiàn)元素的比較;

第二種不強制性的要求容器中的元素必須可比較,但是要求傳入第二個參數(shù),參數(shù)是Comparator 接口的子類型(需要重寫 compare 方法實現(xiàn)元素的比較),相當(dāng)于一個臨時定義的排序規(guī)則,其實就是通過接口注入比較元素大小的算法,也是對回調(diào)模式的應(yīng)用。

?

?

List、Map、Set 三個接口存取元素時,各有什么特點?

List 以特定索引來存取元素,可以有重復(fù)元素。

Set 不能存放重復(fù)元素(用對象的equals()方法來區(qū)分元素是否重復(fù))。

Map 保存鍵值對,映射關(guān)系可以是一對一或多對一。

?

Collection 和 Collections 的區(qū)別?

Collection 是一個接口,它是 Set、List 等容器的父接口;

Collections 是個一個工具類,這些方法包括對容器的搜索、排序、線程安全化等等。

?

解釋內(nèi)存中的棧、堆和方法區(qū)的用法。

棧中存放的是局部變量、方法參數(shù)、方法幀。線程有私有的棧不對外共享。執(zhí)行方法時,作為方法幀入棧,當(dāng)執(zhí)行完后出棧。

堆中主要用來存放的是對象。為所有的線程所共享。

方法區(qū)中存放的都是一些靜態(tài)的數(shù)據(jù),比如static變量、class等。為共享區(qū)域。方法區(qū)中都是存放的永遠唯一的元素。

?

ArrayList、Vector、LinkedList 的存儲性能和特性

ArrayList 和 Vector 都是數(shù)組方式存儲數(shù)據(jù)

數(shù)組元素數(shù)大于實際存儲的數(shù)據(jù)以便增加元素

按序號索引元素,插入元素涉及數(shù)組元素移動

Vector 中的方法由于添加了 synchronized 修飾。

LinkedList 使用雙向鏈表實現(xiàn)存儲

按序號索引數(shù)據(jù)需要進行前向或后向遍歷,但是插入數(shù)據(jù)時只需要記錄本項的前后項

ArrayList 和LinkedList 可以通過Collections 中的 synchronizedList 方法將其轉(zhuǎn)換成線程安全的容器后再使用。

?

列出一些你常見的運行時異常?

ArithmeticException(算術(shù)異常)

ClassCastException (類轉(zhuǎn)換異常)

IllegalArgumentException (非法參數(shù)異常)

IndexOutOfBoundsException (下標(biāo)越界異常)

NullPointerException (空指針異常)

SecurityException (安全異常)

final、finally、finalize 的區(qū)別。

final

(1)?修飾類:表示該類不能被繼承;

(2)?修飾方法:表示方法不能被重寫;

(3)?修飾變量:表示變量只能一次賦值以后值不能被修改(常量)。

finally

通常放在 try…catch…的后面

這就意味著程序無論正常執(zhí)行還是發(fā)生異常,這里的代碼只要 JVM 不關(guān)閉都能執(zhí)行,

可以將釋放外部資源的代碼寫在 finally 塊中。

finalize

Object 類中定義的方法

垃圾收集器在銷毀對象時調(diào)用的,通過重寫 finalize()方法可以整理系統(tǒng)資源或者執(zhí)行其他清理工作。

?

?

?

Java 中會存在內(nèi)存泄漏嗎,請簡單描述

理論上 Java 因為有垃圾回收機制不會存在內(nèi)存泄露問題;

而在實際開發(fā)中,可能會存在無用但可達的對象,這些對象不能被 GC 回收,因此也會導(dǎo)致內(nèi)存泄露的發(fā)生。

例如Hibernate 的 Session(一級緩存)中的對象屬于持久態(tài),垃圾回收器是不會回收這些對象的,然而這些對象中可能存在無用的垃圾對象,如果不及時關(guān)閉(close)或清空(flush)一級緩存就可能導(dǎo)致內(nèi)存泄露。

如何實現(xiàn)對象克?。?

1). 實現(xiàn) Cloneable 接口并重寫 Object 類中的 clone()方法;

2). 實現(xiàn) Serializable 接口,通過對象的序列化和反序列化實現(xiàn)克隆,可以實現(xiàn)深度克隆,

?

?

GC 是什么?為什么要有 GC?

對內(nèi)存堆中已經(jīng)死亡的或者長時間沒有使用的對象進行回收

防止內(nèi)存泄露,有效的利用可使用的內(nèi)存。

不能實時的調(diào)用垃圾回收器對某個對象進行垃圾回收。

垃圾回收機制有很多種:

分代復(fù)制垃圾回收

標(biāo)記垃圾回收

增量垃圾回收等。

GC采用“分代式垃圾收集”。

將堆內(nèi)存劃分為不同的區(qū)域:

伊甸園(Eden):對象誕生的區(qū)域。

幸存者樂園(Survivor):在Eden幸存下來的對象。

終身頤養(yǎng)園(Tenured):保存老的幸存對象。年輕代收集(Minor-GC)過程是不會觸及這個地方的。當(dāng)年輕代收集不能把對象放進Tenured時,就會觸發(fā)一次完全收集(Major-GC)

與垃圾回收相關(guān)的 JVM 參數(shù):

-Xms / -Xmx — 堆的初始大小 / 堆的最大大小

-Xmn — 堆中年輕代的大小

-XX:-DisableExplicitGC — 讓 System.gc()不產(chǎn)生任何作用

-XX:+PrintGCDetails — 打印 GC 的細節(jié)

-XX:+PrintGCDateStamps — 打印 GC 操作的時間戳

-XX:NewSize / XX:MaxNewSize — 設(shè)置新生代大小/新生代最大大小

-XX:NewRatio — 可以設(shè)置老生代和新生代的比例

-XX:PrintTenuringDistribution — 設(shè)置每次新生代 GC 后輸出幸存者樂園中對象年齡的分布

-XX:InitialTenuringThreshold / -XX:MaxTenuringThreshold:設(shè)置老年代閥值的初始值和最大值

-XX:TargetSurvivorRatio:設(shè)置幸存區(qū)的目標(biāo)使用率

?

靜態(tài)變量和實例變量的區(qū)別

靜態(tài)變量:?

static 修飾

屬于類,也稱為類變量

不屬于類的任何一個對象,一個類不管創(chuàng)建多少個對象,靜態(tài)變量在內(nèi)存中有且僅有一個拷貝;

靜態(tài)變量可以實現(xiàn)讓多個對象共享內(nèi)存。

實例變量:

必須依存于某一實例,需要先創(chuàng)建對象然后通過對象才能訪問到它。

?

事物的四個特點——ACID是靠什么保證的

原子性

由undolog日志進行保證,記錄需要回滾的信息,事物回滾時撤銷已經(jīng)執(zhí)行成功的sql

一致性

由其他三大特征保證

隔離性

是由MVCC多版本并發(fā)控制保證

持久性

由redolog保證,mysql修改數(shù)據(jù)時,會在redolog中記錄一份日志數(shù)據(jù),就算數(shù)據(jù)沒有保存成功,只要日志保存成功,數(shù)據(jù)就不會消失

?

?

try{}里有一個 return 語句,那么緊跟在這個 try 后的finally{}里的代碼會不會被執(zhí)行,什么時候被執(zhí)行,在 return前還是后?

會執(zhí)行,在方法返回調(diào)用者前執(zhí)行。

如果存在 finally 代碼塊,try中的 return 語句不會立馬返回調(diào)用者,而是記錄下返回值待 finally 代碼塊執(zhí)行完畢之后再向調(diào)用者返回其值,然后如果在 finally 中修改了返回值,就會返回修改后的值。

?

?

JVM、JRE和JDK的關(guān)系

JVM

Java Virtual Machine是Java虛擬機,Java程序需要運行在虛擬機上,不同的平臺有自己的虛擬機,因此Java語言可以實現(xiàn)跨平臺。

JRE

Java Runtime Environment包括Java虛擬機和Java程序所需的核心類庫等。核心類庫主要是java.lang包:如基本數(shù)據(jù)類型、基本數(shù)學(xué)函數(shù)、字符串處理、線程、異常處理類等

JDK

其中包含了Java的開發(fā)工具,也包括了JRE。所以安裝了JDK,就無需再單獨安裝JRE了。

面向?qū)ο笕筇匦裕?/strong>

其中Java 面向?qū)ο缶幊倘筇匦裕悍庋b 繼承 多態(tài)

封裝

封裝把一個對象的屬性私有化

提供一些可以被外界訪問的屬性的方法

繼承

在父類的基礎(chǔ)上建立子類

子類可以增加屬性方法,也可以用父類的屬性方法,但不能選擇性地繼承。

關(guān)于繼承如下 3 點請記?。?/p>

1.?子類擁有父類非 private 的屬性和方法。

2.?子類可以擁有自己屬性和方法。

3.?子類可以重寫父類的方法。

多態(tài)

父類的引用指向子類的具體實現(xiàn),調(diào)用的實現(xiàn)方法,必須在由程序運行期間才能決定。

實現(xiàn)多態(tài)兩種形式:

繼承(多個子類對同一方法的重寫)和接口(實現(xiàn)接口并覆蓋接口中同一方法)。

多態(tài)實現(xiàn)個必要條件

繼承、重寫、向上轉(zhuǎn)型。

繼承:在多態(tài)中必須存在有繼承關(guān)系的子類和父類。

重寫:子類對父類中某些方法進行重新定義。

向上轉(zhuǎn)型:將子類的引用賦給父類對象。

接口和抽象類的區(qū)別

抽象類和接口都不能夠?qū)嵗?,但可以定義抽象類和接口類型的引用。

一個類如果繼承了某個抽象類或者實現(xiàn)了某個接口都需要對其中的抽象方法全部進行實現(xiàn),否則該類仍然需要被聲明為抽象類。

接口比抽象類更加抽象,抽象類中可以定義構(gòu)造器,可以有抽象方法和具體方法,而接口中不能定義構(gòu)造器而且其中的方法全部都是抽象方法。

抽象類中的成員可以是 private、默認、protected、public 的,而接口中的成員全都是 public 的。

抽象類中可以定義成員變量,而接口中定義的成員變量實際上都是常量。

有抽象方法的類必須被聲明為抽象類,而抽象類未必要有抽象方法。

?

Overload和Override的區(qū)別。

如果在子類中定義某方法與其父類有相同的名稱和參數(shù),我們說該方法被重寫 (Overriding)。

如果在一個類中定義了多個同名的方法,它們或有不同的參數(shù)個數(shù)或有不同的參數(shù)類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類型

?

?

==equals()的區(qū)別。

"=="判斷的是兩個對象的內(nèi)存地址是否一樣

equals 是 Object 類的方法,Object 對它的實現(xiàn)是比較內(nèi)存地址,我們可以重寫這個方法來自定義 “相等”這個概念。

?

線程池的原理,為什么要創(chuàng)建線程池?

在線程池中維護一組線程,這些線程可以重復(fù)利用,以減少線程的創(chuàng)建和銷毀的開銷。

線程池中的線程被維護在一個隊列中,新來的任務(wù)會被插入到隊列的尾部。當(dāng)線程池中有空閑線程時,它會從隊列的頭部取出任務(wù)。

最大線程數(shù)限制了線程池中最多能有多少個線程同時工作

輔助線程要監(jiān)控線程池的狀態(tài),及時調(diào)整線程池的大小。

?

?

Java 有沒有 goto?

goto 是 Java 中的保留字,在目前版本的 Java 中沒有使用。

?

&和&&的區(qū)別?

&運算符有兩種用法:(1)按位與;(2)邏輯與。

&&運算符是短路與運算。

邏輯與跟短路與的差別是非常巨大的,雖然二者都要求運算符左右兩端的布爾值都是true 整個表達式的值才是 true。

&&之所以稱為短路運算是因為,如果&&左邊的表達式的值是 false,右邊的表達式會被直接短路掉,不會進行運算。

例如在驗證用戶登錄時判定用戶名不是 null 而且不是空字符串,應(yīng)當(dāng)寫為:username != null &&!username.equals(“”),二者的順序不能交換,更不能用&運算符,因為第一個條件如果不成立,根本不能進行字符串的 equals 比較,否則會產(chǎn)生空值異常。

?

switch 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String 上?

在 Java 5 以前,switch(expr)中,expr 只能是 byte、short、char、int。從 Java5 開始,Java 中引入了枚舉類型,expr 也可以是 enum 類型,從 Java 7 開始,expr 還可以是字符串(String),但是長整型(long)在目前所有的版本中都是不可以的

數(shù)組有沒有 length()方法?String 有沒有 length()方法?

數(shù)組沒有 length()方法,有 length 的屬性。String 有 length()方法。JavaScript中,獲得字符串的長度是通過 length 屬性得到的,這一點容易和 Java 混淆。

構(gòu)造器(constructor)是否可被重寫(override)

構(gòu)造器不能被繼承,因此不能被重寫,但可以被重載。

兩個對象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對

兩個值相同,哈希碼一定相同,哈希碼相同,兩個值不一定相同

是否可以繼承 String 類?

String 類是 final 類,不可以被繼承。

String 和 StringBuilder、StringBuffer 的區(qū)別

其中 String 是只讀字符串,內(nèi)容不能被改變。

而 StringBuffer/StringBuilder 類表示的字符串對象可以直接進行修改。

StringBuilder沒有被synchronized 修飾

?

?

接口是否可繼承接口?抽象類是否可實現(xiàn)接口?抽象類是否可繼承具體類?

接口可繼承接口,支持多重繼承。

抽象類可以實現(xiàn)接口,抽象類可繼承具體類也可以繼承抽象類。

是否可以繼承其它類?是否可以實現(xiàn)接口?

可以繼承其他類或?qū)崿F(xiàn)其他接口

內(nèi)部類可以引用它的包含類(外部類)的成員嗎?有沒有什么限制??

一個內(nèi)部類對象可以訪問創(chuàng)建它的外部類對象的成員,包括私有成員。

?

?

?


Java的評論 (共 條)

分享到微博請遵守國家法律
萨迦县| 开阳县| 北流市| 福贡县| 贡嘎县| 开阳县| 高邑县| 牡丹江市| 枣阳市| 荔波县| 临清市| 肇庆市| 新津县| 通州市| 黄浦区| 铁力市| 汪清县| 开鲁县| 广平县| 台中市| 兴宁市| 舞阳县| 上杭县| 富阳市| 南靖县| 正镶白旗| 木里| 德兴市| 苏尼特右旗| 汝南县| 博兴县| 牙克石市| 白沙| 滨海县| 琼中| 安康市| 兴和县| 马龙县| 威宁| 左云县| 钦州市|