国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 Java Java面試題 Java的基礎(chǔ)面試題目(4)

Java的基礎(chǔ)面試題目(4)

Dec 04, 2019 pm 03:04 PM
java

Java的基礎(chǔ)面試題目(4)

a.hashCode() 有什麼用?與 a.equals(b) 有什麼關(guān)係?

hashCode() 方法對(duì)應(yīng)物件整數(shù)的 hash 值。它常用於基於 hash 的集合類,如 Hashtable、HashMap、LinkedHashMap等等。它與 equals() 方法關(guān)係特別緊密。根據(jù) Java 規(guī)範(fàn),兩個(gè)使用 equal() 方法來判斷相等的對(duì)象,必須具有相同的 hash code。

位元組流與字元流的差異 ? ?(推薦學(xué)習(xí):java面試題目

要把一段二進(jìn)位資料資料逐一輸出到某個(gè)設(shè)備中,或從某個(gè)設(shè)備中逐一讀取一段二進(jìn)位數(shù)據(jù),不管輸入輸出設(shè)備是什麼,我們要用統(tǒng)一的方式來完成這些操作。

用一種抽象的方式來描述,這個(gè)抽象描述方式起名為IO流,對(duì)應(yīng)的抽象類別為OutputStream和InputStream,不同的實(shí)作類別就代表不同的輸入和輸出設(shè)備,它們都是針對(duì)位元組進(jìn)行操作的。

計(jì)算機(jī)中的一切最終都是二進(jìn)位的位元組形式存在。對(duì)於常用到的中文字符,首先要得到其對(duì)應(yīng)的字節(jié),然後將位元組寫入到輸出流。

讀取時(shí),首先讀到的是字節(jié),可是我們要把它顯示為字符,我們需要將字節(jié)轉(zhuǎn)換成字符。由於這樣的需求很廣泛,Java專門提供了字元流包裝類別。

底層設(shè)備永遠(yuǎn)只接受位元組數(shù)據(jù),有時(shí)候要寫字串到底層設(shè)備,需要將字串轉(zhuǎn)成位元組再寫入。字元流是位元組流的包裝,字元流則是直接接受字串,它內(nèi)部將串轉(zhuǎn)成字節(jié),再寫入底層設(shè)備,這為我們向IO設(shè)備寫入或讀取字串提供了一點(diǎn)方便。

字元轉(zhuǎn)換成位元組時(shí),要注意編碼的問題,因?yàn)樽执D(zhuǎn)成位元組數(shù)組,其實(shí)是轉(zhuǎn)成該字元的某種編碼的位元組形式,讀取也是反之的道理。

什麼是java序列化,如何實(shí)現(xiàn)java序列化?或者請(qǐng)解釋Serializable介面的作用。

我們有時(shí)候?qū)⒁粋€(gè)java物件變成位元組流的形式傳出去或從一個(gè)位元組流中恢復(fù)成一個(gè)java對(duì)象,例如,要將java物件儲(chǔ)存到硬碟或傳送給網(wǎng)路上的其他計(jì)算機(jī),這個(gè)過程我們可以自己寫程式碼去把一個(gè)java物件變成某個(gè)格式的位元組流再傳輸。

但是,jre本身就提供了這種支持,我們可以呼叫OutputStream的writeObject方法來做,如果要讓java幫我們做,要被傳輸?shù)奈锛仨殞?shí)作serializable接口,這樣,javac編譯時(shí)就會(huì)進(jìn)行特殊處理,編譯的類別才可以被writeObject方法操作,這就是所謂的序列化。

需要被序列化的類別必須實(shí)現(xiàn)Serializable接口,該接口是一個(gè)mini接口,其中沒有需要實(shí)現(xiàn)方法,implements Serializable只是為了標(biāo)註該對(duì)像是可被序列化的。

例如,在web開發(fā)中,如果物件被保存在了Session中,tomcat在重啟時(shí)要把Session物件序列化到硬碟,這個(gè)物件就必須實(shí)作Serializable介面。如果物件要經(jīng)過分散式系統(tǒng)進(jìn)行網(wǎng)路傳輸,被傳輸?shù)奈锛捅仨殞?shí)作Serializable介面。

描述JVM載入class檔案的原理機(jī)制?

JVM中類別的裝載是由ClassLoader和它的子類別來實(shí)現(xiàn)的,Java ClassLoader是一個(gè)重要的Java執(zhí)行時(shí)間系統(tǒng)組件。它負(fù)責(zé)在運(yùn)行時(shí)查找和裝入類別文件的類別。

heap和stack有什麼差別。

java的記憶體分為兩類,一類是堆疊內(nèi)存,一類是堆疊記憶體。棧記憶體是指程式進(jìn)入一個(gè)方法時(shí),會(huì)為這個(gè)方法單獨(dú)分配一塊私屬儲(chǔ)存空間,用於儲(chǔ)存這個(gè)方法內(nèi)部的局部變量,當(dāng)這個(gè)方法結(jié)束時(shí),分配給這個(gè)方法的棧會(huì)釋放,這個(gè)棧中的變數(shù)也會(huì)隨之釋放。

堆是與堆疊作用不同的內(nèi)存,一般用於存放不在目前方法堆疊中的那些資料。

例如,使用new建立的物件都放在堆裡,所以,它不會(huì)隨方法的結(jié)束而消失。方法中的局部變數(shù)使用final修飾後,放在堆中,而不是堆疊中。

GC是什麼?為什麼要有GC?

GC是垃圾收集的意思(Gabage Collection),記憶體處理是程式設(shè)計(jì)人員容易出現(xiàn)問題的地方,忘記或者錯(cuò)誤的記憶體回收會(huì)導(dǎo)致程式或系統(tǒng)的不穩(wěn)定甚至崩潰。

Java提供的GC功能可以自動(dòng)監(jiān)控物件是否超過作用域以達(dá)到自動(dòng)回收記憶體的目的,Java語言並沒有提供釋放已指派記憶體的顯示操作方法。

垃圾回收的優(yōu)點(diǎn)和原則。並考慮2種回收機(jī)制。

Java語言中一個(gè)顯著的特點(diǎn)就是引入了垃圾回收機(jī)制,使c 程序員最頭疼的內(nèi)存管理的問題迎刃而解,它使得Java程序員在編寫程序的時(shí)候不再需要考慮內(nèi)存管理。由于垃圾回收機(jī)制,Java中的對(duì)象不再有"作用域"的概念,只有對(duì)象的引用才有"作用域"。

垃圾回收可以有效的防止內(nèi)存泄露,有效的使用可以使用的內(nèi)存。

垃圾回收器通常是作為一個(gè)單獨(dú)的低級(jí)別的線程運(yùn)行,不可預(yù)知的情況下對(duì)內(nèi)存堆中已經(jīng)死亡的或者長(zhǎng)時(shí)間沒有使用的對(duì)象進(jìn)行清除和回收,程序員不能實(shí)時(shí)的調(diào)用垃圾回收器對(duì)某個(gè)對(duì)象或所有對(duì)象進(jìn)行垃圾回收。

回收機(jī)制有分代復(fù)制垃圾回收和標(biāo)記垃圾回收,增量垃圾回收。

垃圾回收器的基本原理是什么?垃圾回收器可以馬上回收內(nèi)存嗎?有什么辦法主動(dòng)通知虛擬機(jī)進(jìn)行垃圾回收?

對(duì)于GC來說,當(dāng)程序員創(chuàng)建對(duì)象時(shí),GC就開始監(jiān)控這個(gè)對(duì)象的地址、大小以及使用情況。通常,GC采用有向圖的方式記錄和管理堆(heap)中的所有對(duì)象。

通過這種方式確定哪些對(duì)象是"可達(dá)的",哪些對(duì)象是"不可達(dá)的"。當(dāng)GC確定一些對(duì)象為"不可達(dá)"時(shí),GC就有責(zé)任回收這些內(nèi)存空間。

程序員可以手動(dòng)執(zhí)行System.gc(),通知GC運(yùn)行,但是Java語言規(guī)范并不保證GC一定會(huì)執(zhí)行。

Java 中,throw 和 throws 有什么區(qū)別

throw 用于拋出 java.lang.Throwable 類的一個(gè)實(shí)例化對(duì)象,意思是說你可以通過關(guān)鍵字 throw 拋出一個(gè)Exception,如:

throw new IllegalArgumentException(“XXXXXXXXX″)

而throws 的作用是作為方法聲明和簽名的一部分,方法被拋出相應(yīng)的異常以便調(diào)用者能處理。Java 中,任何未處理的受檢查異常強(qiáng)制在 throws 子句中聲明。

java中會(huì)存在內(nèi)存泄漏嗎,請(qǐng)簡(jiǎn)單描述。

先解釋什么是內(nèi)存泄漏:所謂內(nèi)存泄露就是指一個(gè)不再被程序使用的對(duì)象或變量一直被占據(jù)在內(nèi)存中。java中有垃圾回收機(jī)制,它可以保證當(dāng)對(duì)象不再被引用的時(shí)候,對(duì)象將自動(dòng)被垃圾回收器從內(nèi)存中清除掉。

由于Java使用有向圖的方式進(jìn)行垃圾回收管理,可以消除引用循環(huán)的問題,例如有兩個(gè)對(duì)象,相互引用,只要它們和根進(jìn)程不可達(dá),那么GC也是可以回收它們的。

java中的內(nèi)存泄露的情況:長(zhǎng)生命周期的對(duì)象持有短生命周期對(duì)象的引用就很可能發(fā)生內(nèi)存泄露,盡管短生命周期對(duì)象已經(jīng)不再需要,但是因?yàn)殚L(zhǎng)生命周期對(duì)象持有它的引用而導(dǎo)致不能被回收,這就是java中內(nèi)存泄露的發(fā)生場(chǎng)景。

通俗地說,就是程序員可能創(chuàng)建了一個(gè)對(duì)象,以后一直不再使用這個(gè)對(duì)象,這個(gè)對(duì)象卻一直被引用,即這個(gè)對(duì)象無用但是卻無法被垃圾回收器回收的,這就是java中可能出現(xiàn)內(nèi)存泄露的情況。

例如,緩存系統(tǒng),我們加載了一個(gè)對(duì)象放在緩存中(例如放在一個(gè)全局map對(duì)象中),然后一直不再使用它,這個(gè)對(duì)象一直被緩存引用,但卻不再被使用。

以上是Java的基礎(chǔ)面試題目(4)的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

如何在Java的地圖上迭代? 如何在Java的地圖上迭代? Jul 13, 2025 am 02:54 AM

遍歷Java中的Map有三種常用方法:1.使用entrySet同時(shí)獲取鍵和值,適用於大多數(shù)場(chǎng)景;2.使用keySet或values分別遍歷鍵或值;3.使用Java8的forEach簡(jiǎn)化代碼結(jié)構(gòu)。 entrySet返回包含所有鍵值對(duì)的Set集合,每次循環(huán)獲取Map.Entry對(duì)象,適合頻繁訪問鍵和值的情況;若只需鍵或值,可分別調(diào)用keySet()或values(),也可在遍歷鍵時(shí)通過map.get(key)獲取值;Java8中可通過Lambda表達(dá)式使用forEach((key,value)-&gt

Java中的可比較與比較器 Java中的可比較與比較器 Jul 13, 2025 am 02:31 AM

在Java中,Comparable用於類內(nèi)部定義默認(rèn)排序規(guī)則,Comparator用於外部靈活定義多種排序邏輯。 1.Comparable是類自身實(shí)現(xiàn)的接口,通過重寫compareTo()方法定義自然順序,適用於類有固定、最常用的排序方式,如String或Integer。 2.Comparator是外部定義的函數(shù)式接口,通過compare()方法實(shí)現(xiàn),適合同一類需要多種排序方式、無法修改類源碼或排序邏輯經(jīng)常變化的情況。兩者區(qū)別在於Comparable只能定義一種排序邏輯且需修改類本身,而Compar

如何處理Java中的字符編碼問題? 如何處理Java中的字符編碼問題? Jul 13, 2025 am 02:46 AM

處理Java中的字符編碼問題,關(guān)鍵是在每一步都明確指定使用的編碼。 1.讀寫文本時(shí)始終指定編碼,使用InputStreamReader和OutputStreamWriter並傳入明確的字符集,避免依賴系統(tǒng)默認(rèn)編碼。 2.在網(wǎng)絡(luò)邊界處理字符串時(shí)確保兩端一致,設(shè)置正確的Content-Type頭並用庫顯式指定編碼。 3.謹(jǐn)慎使用String.getBytes()和newString(byte[]),應(yīng)始終手動(dòng)指定StandardCharsets.UTF_8以避免平臺(tái)差異導(dǎo)致的數(shù)據(jù)損壞。總之,通過在每個(gè)階段

JavaScript數(shù)據(jù)類型:原始與參考 JavaScript數(shù)據(jù)類型:原始與參考 Jul 13, 2025 am 02:43 AM

JavaScript的數(shù)據(jù)類型分為原始類型和引用類型。原始類型包括string、number、boolean、null、undefined和symbol,其值不可變且賦值時(shí)復(fù)制副本,因此互不影響;引用類型如對(duì)象、數(shù)組和函數(shù)存儲(chǔ)的是內(nèi)存地址,指向同一對(duì)象的變量會(huì)相互影響。判斷類型可用typeof和instanceof,但需注意typeofnull的歷史問題。理解這兩類差異有助於編寫更穩(wěn)定可靠的代碼。

Java中的'靜態(tài)”關(guān)鍵字是什麼? Java中的'靜態(tài)”關(guān)鍵字是什麼? Jul 13, 2025 am 02:51 AM

InJava,thestatickeywordmeansamemberbelongstotheclassitself,nottoinstances.Staticvariablesaresharedacrossallinstancesandaccessedwithoutobjectcreation,usefulforglobaltrackingorconstants.Staticmethodsoperateattheclasslevel,cannotaccessnon-staticmembers,

在C中使用std :: Chrono 在C中使用std :: Chrono Jul 15, 2025 am 01:30 AM

std::chrono在C 中用於處理時(shí)間,包括獲取當(dāng)前時(shí)間、測(cè)量執(zhí)行時(shí)間、操作時(shí)間點(diǎn)與持續(xù)時(shí)間及格式化解析時(shí)間。 1.獲取當(dāng)前時(shí)間使用std::chrono::system_clock::now(),可轉(zhuǎn)換為可讀字符串但係統(tǒng)時(shí)鐘可能不單調(diào);2.測(cè)量執(zhí)行時(shí)間應(yīng)使用std::chrono::steady_clock以確保單調(diào)性,並通過duration_cast轉(zhuǎn)換為毫秒、秒等單位;3.時(shí)間點(diǎn)(time_point)和持續(xù)時(shí)間(duration)可相互操作,但需注意單位兼容性和時(shí)鐘紀(jì)元(epoch)

Hashmap在Java內(nèi)部如何工作? Hashmap在Java內(nèi)部如何工作? Jul 15, 2025 am 03:10 AM

HashMap在Java中通過哈希表實(shí)現(xiàn)鍵值對(duì)存儲(chǔ),其核心在於快速定位數(shù)據(jù)位置。 1.首先使用鍵的hashCode()方法生成哈希值,並通過位運(yùn)算轉(zhuǎn)換為數(shù)組索引;2.不同對(duì)象可能產(chǎn)生相同哈希值,導(dǎo)致衝突,此時(shí)以鍊錶形式掛載節(jié)點(diǎn),JDK8後鍊錶過長(zhǎng)(默認(rèn)長(zhǎng)度8)則轉(zhuǎn)為紅黑樹提升效率;3.使用自定義類作鍵時(shí)必須重寫equals()和hashCode()方法;4.HashMap動(dòng)態(tài)擴(kuò)容,當(dāng)元素?cái)?shù)超過容量乘以負(fù)載因子(默認(rèn)0.75)時(shí),擴(kuò)容並重新哈希;5.HashMap非線程安全,多線程下應(yīng)使用Concu

什麼是Java的重新進(jìn)入? 什麼是Java的重新進(jìn)入? Jul 13, 2025 am 02:14 AM

ReentrantLock在Java中提供比synchronized更靈活的線程控制。 1.它支持非阻塞獲取鎖(tryLock())、帶超時(shí)的鎖獲?。╰ryLock(longtimeout,TimeUnitunit))和可中斷等待鎖;2.允許設(shè)置公平鎖,避免線程飢餓;3.支持多個(gè)條件變量,實(shí)現(xiàn)更精細(xì)的等待/通知機(jī)制;4.需手動(dòng)釋放鎖,必須在finally塊中調(diào)用unlock()以避免資源洩漏;5.適用於需要高級(jí)同步控制的場(chǎng)景,如自定義同步工具或複雜並發(fā)結(jié)構(gòu),但對(duì)簡(jiǎn)單互斥需求仍推薦使用synchro

See all articles