上海市建設(shè)小學(xué)網(wǎng)站網(wǎng)絡(luò)推廣應(yīng)該怎么做啊
面試 Java 基礎(chǔ)八股文十問十答第二十九期
作者:程序員小白條,個(gè)人博客
相信看了本文后,對(duì)你的面試是有一定幫助的!關(guān)注專欄后就能收到持續(xù)更新!
?點(diǎn)贊?收藏?不迷路!?
1)類加載過程
類加載是 Java 虛擬機(jī)(JVM)在運(yùn)行 Java 程序時(shí)將類的字節(jié)碼加載到內(nèi)存中并轉(zhuǎn)換為 Java 類的過程。這個(gè)過程分為以下幾個(gè)步驟:
- 加載(Loading): 加載是指查找并加載類的字節(jié)碼文件。類加載器會(huì)根據(jù)類的全限定名(Fully Qualified Name)來定位類的字節(jié)碼文件,并將其加載到內(nèi)存中。
- 鏈接(Linking): 鏈接階段又分為三個(gè)子階段:
- 驗(yàn)證(Verification): 驗(yàn)證階段確保加載的字節(jié)碼是合法、符合規(guī)范的,并且不會(huì)危害虛擬機(jī)的安全。
- 準(zhǔn)備(Preparation): 準(zhǔn)備階段為類的靜態(tài)變量分配內(nèi)存,并設(shè)置默認(rèn)初始值。
- 解析(Resolution): 解析階段將類、方法、字段的符號(hào)引用解析為直接引用。
- 初始化(Initialization): 初始化階段是類加載過程的最后一步,在此階段,會(huì)執(zhí)行類的初始化代碼,包括對(duì)靜態(tài)變量的賦值和靜態(tài)代碼塊的執(zhí)行。
2)雙親委派
雙親委派模型是 Java 類加載器的工作原理之一,其基本思想是當(dāng)一個(gè)類加載器收到類加載請(qǐng)求時(shí),先委托給父類加載器加載,只有在父類加載器無法加載該類時(shí),才由當(dāng)前類加載器加載。這樣做的好處是保證類的唯一性,防止同一個(gè)類被多個(gè)類加載器加載,導(dǎo)致類型不一致的問題,同時(shí)也能保證 Java 核心類庫的安全性和穩(wěn)定性。
3)BigDecimal
BigDecimal 是 Java 中用于表示任意精度的十進(jìn)制數(shù)的類,它可以解決浮點(diǎn)數(shù)計(jì)算精度丟失的問題。在金融、科學(xué)計(jì)算等領(lǐng)域,對(duì)數(shù)字精度要求較高的場景中,常常會(huì)使用 BigDecimal 來進(jìn)行精確計(jì)算。與基本數(shù)據(jù)類型的浮點(diǎn)數(shù)相比,BigDecimal 可以表示任意大小的數(shù)值,并提供了豐富的算術(shù)運(yùn)算方法,如加減乘除、取整、取余等。由于 BigDecimal 是不可變的,因此它的操作不會(huì)改變?cè)贾?#xff0c;而是返回一個(gè)新的 BigDecimal 對(duì)象。
4)new String("xiaobaitiao")
一共創(chuàng)建了幾個(gè)對(duì)象?
new String("xiaobaitiao")
會(huì)創(chuàng)建兩個(gè)對(duì)象:
- 一個(gè)對(duì)象:由字符串常量池中的
"xiaobaitiao"
字符串常量創(chuàng)建。 - 一個(gè)對(duì)象:由
new String("xiaobaitiao")
創(chuàng)建,存放在堆內(nèi)存中。
5)final
、finally
、finalize
各自有什么區(qū)別?
final
:final
是一個(gè)關(guān)鍵字,用于修飾類、方法和變量。對(duì)于類,final
表示該類不能被繼承;對(duì)于方法,final
表示該方法不能被重寫;對(duì)于變量,final
表示該變量的值只能被賦值一次,即為常量。finally
:finally
是異常處理中的一個(gè)關(guān)鍵字,用于定義在 try-catch 語句塊結(jié)束之后總是會(huì)被執(zhí)行的代碼塊,無論是否發(fā)生異常。finalize
:finalize
是 Object 類中的一個(gè)方法,用于在對(duì)象被垃圾回收之前執(zhí)行清理操作。但是,由于它的執(zhí)行時(shí)機(jī)不確定性,不建議在實(shí)際開發(fā)中過多依賴該方法進(jìn)行資源釋放。
6)為什么平時(shí)寫代碼的時(shí)候會(huì)遇到亂碼?
亂碼通常是由于字符編碼不一致導(dǎo)致的。常見的情況包括:
- 源代碼編碼和文件編碼不一致: 源代碼以某種編碼(如 UTF-8)編寫,但文件的實(shí)際編碼與之不符(如 ANSI),導(dǎo)致讀取時(shí)出現(xiàn)亂碼。
- 數(shù)據(jù)傳輸過程中編碼不一致: 在網(wǎng)絡(luò)傳輸或文件讀寫過程中,如果發(fā)送端和接收端使用了不同的字符編碼,就可能導(dǎo)致亂碼。
- 字符編碼設(shè)置錯(cuò)誤: 在程序中使用了錯(cuò)誤的字符編碼,或者未正確設(shè)置字符編碼,也會(huì)引發(fā)亂碼問題。
解決亂碼問題通常需要注意以下幾點(diǎn):
- 統(tǒng)一使用 UTF-8 編碼。
- 在程序中明確指定字符編碼。
- 在讀取和寫入文件時(shí),指定正確的字符編碼。
- 在網(wǎng)絡(luò)通信中,使用統(tǒng)一的字符編碼進(jìn)行數(shù)據(jù)傳輸。
7)Java 的集合類簡介
Java 的集合類是用于存儲(chǔ)和操作對(duì)象的數(shù)據(jù)結(jié)構(gòu)。它們提供了一種更加靈活、高效的方式來管理數(shù)據(jù)集合,相比傳統(tǒng)的數(shù)組,集合類具有更多的功能和操作。Java 中常見的集合類包括 List、Set、Map 等,它們都位于 java.util
包中。
- List: 允許存儲(chǔ)重復(fù)元素,并且有序。常見的實(shí)現(xiàn)類有 ArrayList、LinkedList、Vector 等。
- Set: 不允許存儲(chǔ)重復(fù)元素,通常用于存儲(chǔ)不重復(fù)的對(duì)象集合。常見的實(shí)現(xiàn)類有 HashSet、LinkedHashSet、TreeSet 等。
- Map: 存儲(chǔ)鍵值對(duì),鍵是唯一的,值可以重復(fù)。常見的實(shí)現(xiàn)類有 HashMap、LinkedHashMap、TreeMap 等。
8)數(shù)組和鏈表的區(qū)別
- 數(shù)組(Array): 數(shù)組是一種線性數(shù)據(jù)結(jié)構(gòu),元素在內(nèi)存中是連續(xù)存儲(chǔ)的,具有固定的大小。訪問數(shù)組中的元素是通過索引來進(jìn)行的,可以快速訪問任何位置的元素,但插入和刪除操作需要移動(dòng)大量元素。
- 鏈表(Linked List): 鏈表是一種線性數(shù)據(jù)結(jié)構(gòu),元素在內(nèi)存中不一定是連續(xù)存儲(chǔ)的,每個(gè)元素都包含一個(gè)指向下一個(gè)元素的引用(或指針)。鏈表可以方便地進(jìn)行插入和刪除操作,但訪問元素時(shí)需要從頭節(jié)點(diǎn)開始遍歷,效率較低。
9)Java 的鏈表實(shí)現(xiàn)類
Java 中常見的鏈表實(shí)現(xiàn)類有:
- LinkedList: Java 標(biāo)準(zhǔn)庫提供的雙向鏈表實(shí)現(xiàn)類,實(shí)現(xiàn)了 List 和 Deque 接口,可以用作隊(duì)列、棧等數(shù)據(jù)結(jié)構(gòu)。
10)ArryaList、LinkedList、Vector 的區(qū)別
- ArrayList: 基于數(shù)組實(shí)現(xiàn)的動(dòng)態(tài)數(shù)組,支持隨機(jī)訪問,插入和刪除操作的時(shí)間復(fù)雜度為 O(n),因?yàn)樾枰苿?dòng)元素。不是線程安全的。
- LinkedList: 基于雙向鏈表實(shí)現(xiàn)的列表,插入和刪除操作的時(shí)間復(fù)雜度為 O(1),但訪問操作的效率較低,需要遍歷鏈表。不是線程安全的。
- Vector: 與 ArrayList 類似,但是 Vector 是線程安全的,所有的方法都被 synchronized 修飾,因此在多線程環(huán)境下使用時(shí)比較安全,但性能相對(duì)較低。
開源項(xiàng)目地址:https://gitee.com/falle22222n-leaves/vue_-book-manage-system
前后端總計(jì)已經(jīng) 1300+ Star,2 W+ 訪問!
?點(diǎn)贊?收藏?不迷路!?