java面試筆試題整理(學習java基礎理論最好的資料)_2020Java筆試/面試題(持續收集整理更新)...

說明:java

本篇用于收集知識點方便隨時鞏固,持續更新與糾錯。數組

關于JDK版本,若無特殊說明,默認為JDK 1.8,。緩存

關于JVM版本,若無特殊說明,默認為 HotSpot。安全

目錄數據結構

1、Java 基礎

1.1?Java中的基本數據類型有哪幾種?各占用多少字節?

答:Java 中的基本數據類型有8種。其中:

數值型

整數類型

byte:1字節8位有符號整數

short:2字節16位有符號整數

int:4字節32位有符號整數

long:8字節64位有符號整數

浮點類型

float:4字節32位浮點數

double:8字節64位浮點數

字符型

char:2字節16位Unicode字符

布爾型

boolean:1字節8位

1.2?String 在Java中是個特殊的存在,談談?

答:

Sting類能夠序列化。String實現了序列化接口,因此是能夠被序列化與反序列化的。

String對象之間能夠進行比較。實現了Comparable接口中的compareTo()方法,因此字符串之間是能夠進行比較的(是根據字符串中每一個字符的ASCII碼進行比較),以下圖源碼。

a4f8f148ccfa4a9f1bf851d8c9e8f527.png

String類不能夠被繼承。由于String 是一個被final所修飾的類。

String是不可變的。String類底層實際存儲數據的是:private final char value[];?也就是說 String類底層維護的是一個字符序列。這個 char 類型數組被 final 所修飾,因此一經建立,就不可修改。

String類重寫了equals() 方法。先比較兩個字符串的地址是否相同,是則直接返回true;若是地址不相同,再看兩個字符串內容是否相同,是的話也返回true。

0603fea93431131a940179f7f9481831.png

String能夠用字面量方式建立。String 是一個類,與其余類不一樣的是,String可使用字面量的形式建立或賦值。

String str = "123";

/*

1 先到常量池去經過String的equals()方法去找是否存在字符串"123",

若是存在,直接將地址返回(這也保證了常量池中的字符串常量都是惟一的)。

2 若是常量池中不存在"123",則先在常量池中建立一個"123"的字符序列,而后再將其地址返回。

*/

String str = new String("123");

/*

1 先到常量池去經過String的equals()方法去找是否存在字符串"123",

若是不存在,就在常量池中建立一個。

(因此說在new字符串的時候,若是常量池中不存在,實際上會建立兩次。)

2 在堆中開辟空間,建立一個Sting 對象,并返回其地址。

*/

String常量存儲在方法區中的常量池,new出來的對象存儲在堆內存中。

字符串之間可使用 + 號拼接。拼接產生的結果是第三個字符串,進行拼接的字符串自己是沒有發生任何變化的。

String 的本地方法 intern() 能夠從常量池中獲取字符串。若是常量池中沒有,就先建立,再將其地址返回。

1.3 談談 String、StringBuffer、StringBuilder 的異同。

這三個類 都被 final 鎖修飾,不容許被繼承。

從線程安全的角度講:

String 實例對象是不可變的字符串常量,不存在線程安全問題,即String是線程安全的。

StringBuilder 沒有使用鎖機制,在多線程并發的狀況下,可能會出現線程安全問題。

StringBuffer 中涉及到修改底層數據的方法,都加了 synchronized 關鍵字,因此StringBuffer 是線程安全的。

從對象可變性角度講:

String 底層維護的是一個被final 鎖修飾的字符數組,不可變。

StringBuffer 和 StringBuilder 底層維護的是一個可變的字符數組,因此其對象實例是可變的。

從頻繁修改的性能角度:

String對象自己是不可變的,對字符串修改,其實是在產生新的對象,所以修改效率低下。

StringBuilder 底層維護的是一個可變的字符數組,能夠經過擴容等機制,實現對字符序列的修改。所以修改效率較高。

StringBuffer 底層維護的也是一個可變的字符數組,但與StringBuilder不一樣的是,StringBuffer中的修改操做都被加了鎖,獲取鎖、釋放鎖、阻塞等因素致使了StringBuffer的性能方面可能會比StringBuilder低。

在 JDK 1.6 以后,對synchronized 進行了一些鎖優化,其中的“鎖消除”優化,會使得StringBuffer在某種絕對安全的狀況下忽略方法上加的鎖,從而其性能會有所提高。

其余方面:

StringBuffer 的 toString() 方法會對字符序列進行緩存,以減小元素復制的開銷,而 StringBuilder 則是直接復制。從而從某種程度上說,推薦使用StringBuffer。

StringBuffer 與 StringBuilder 的初始容量、擴容機制等

初始容量:16

擴容:

擴容至當前的兩倍加2 :int newCapacity = value.length * 2 + 2;

若是長度仍是不夠,那么實際須要多長,就擴容至多長:

if (newCapacity - minimumCapacity < 0)

newCapacity = minimumCapacity;

1.4?ArrayList、Vector、LinkedList 的異同?

Vector:

底層存儲數據的是Object類型的數組。

new Vector() 時,初始大小為10

每次擴容至原來的兩倍(能夠設定增加因子capacityIncrement)

是線程安全的

優勢:底層數據結構是數組,查找效率高。

缺點:插入、刪除元素等操做效率低,且因為是線程安全的,因此較ArrayList來講總體效率較低。

ArrayList:

底層數據存儲是Object類型的數組

new ArrayList() 時,底層數據指針指向一個空數組;

第一次添加元素時,將數據指針指向長度為10的數組。

每次擴容至原來的1.5倍

是線程不安全的,在多線程操做下,可能拋出:ConcurrentModificationException(并發修改異常)

優勢:效率略高于 Vector ,能夠在單線程下使用。

缺點:線程不安全,數組的缺點它都有。

LinkedList:

雙向鏈表,底層存儲的是 Node 類型的節點鏈表

線程不安全,可能會拋出:ConcurrentModificationException

優勢:插入、刪除節點很容易

缺點:查找元素效率較前面兩個低

1.5?講講類的實例化過程當中靜態變量、成員變量等的加載順序

一、父類靜態變量

二、父類靜態代碼塊

三、子類靜態變量

四、子類靜態代碼塊

五、父類成員變量

六、父類構造代碼塊

七、父類構造方法

八、子類成員變量

九、子類構造代碼塊

十、子類構造方法

代碼驗證:

public class Main {

public static void main(String[] args) {

Son son = new Son();

System.out.println("====================");

Son son2 = new Son();

}

}

class Parent{

public static int a = 1;

private int aa = 10;

static {

System.out.println("父類的靜態代碼塊加載了,在此以前靜態變量a已經加載了,a = " + a);

}

{

System.out.println("父類的構造代碼塊加載了,在此以前成員變量aa已經加載了: aa = " + aa);

}

public Parent() {

System.out.println("父類的構造方法加載了");

}

}

class Son extends Parent{

public static int b = 2;

private int bb = 20;

public Son() {

System.out.println("子類的構造方法加載了");

}

static {

System.out.println("子類的靜態代碼塊加載了,在此以前靜態變量b已經加載了,b = " + b);

}

{

System.out.println("子類的構造代碼塊加載了(此處將【構造塊】放在【構造函數】下面,可是仍然是【構造塊】先加載),在此以前成員變量bb已經加載了: bb = " + bb);

}

}

打印結果:

1a85ce6e7adca0951a6f748ae852bf93.png

1.6? HashMap 你用過嗎?說說你對它的認識?

HashMap空參構造,只初始化了負載因子(0.75),其余成員變量均為默認值。

經常使用的有參構造方法 HashMap(int initialCapacity),是能夠設置初始化大小的,在大概知道須要多大的map時,能夠考慮使用這個構造方法。

HashMap 擴容:每次擴容至原來的2倍。

使用空參構造建立的對象,在第一次添加元素的時候,才會初始化一個長度為16的Node類型的數組。

鏈表轉紅黑樹的時機:鏈表長度大于8 , 數組長度大于64

紅黑樹轉鏈表的時機:鏈表程度小于 6

HashMap 容許空值做為鍵和值

HashMap 是無序,且鍵不重復的

HashMap 線程不安全,多線程操做下可能會拋出 ConcurrentModificationException

未完,待續。。。

最后

本文是我本身復習并積累的過程,文中不免會有遺漏或不許確的地方

如有大佬路過發現個人錯誤還請指正,能夠發送到個人郵箱:yangxinhufox@foxmail.com

嫌麻煩就請在下方直接評論,萬分感謝!!!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/534856.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/534856.shtml
英文地址,請注明出處:http://en.pswp.cn/news/534856.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JAVA服務器沒回應_Java如何面對無服務器的挑戰?

這是來自jaxcenter組織的一個討論&#xff0c;談論了Java在無服務器浪潮沖擊下面臨的機會和挑戰。下面摘錄主要部分&#xff1a;Spring推動者Pivotal有一個名為 Riff的函數即服務平臺&#xff0c;它是一個開源的、Apache 2許可的、函數即服務平臺&#xff0c;基于Kubernetes和剛…

使用系統調用pipe建立一條管道線_使用Unixbench對服務器綜合性能打分及測試結果...

Unixbench是一個類unix系統(Unix&#xff0c;BSD&#xff0c;Linux)下的性能測試工具&#xff0c;一個開源工具&#xff0c;被廣泛用與測試linux系統主機的性能&#xff0c;簡稱UB。Unixbench的主要測試項目有&#xff1a;系統調用、讀寫、進程、圖形化測試、2D、3D、管道、運算…

java.io.file.sync_Java(25)IO流和File類

IO流File類File類講IO流之前先來講以下File類。Java的標準庫Java.io提供了File類來操作文件和目錄。操作可以有&#xff1a;新建、刪除、重命名等&#xff0c;但是不能訪問文件本身的內容&#xff0c;如果想要訪問&#xff0c;需要使用IO流。新建File對象:package day01;import…

val_loss突然變很大_女朋友突然變得很冷淡是怎么回事?該怎么辦

原本和女朋友戀愛之后她一直都表現得比較比較熱情&#xff0c;但是最近這段時間她突然對自己冷淡起來&#xff0c;很多男生可能就會很疑惑&#xff1a;女朋友突然變得很冷淡是怎么回事&#xff1f;該怎么辦呢&#xff1f;一、女朋友突然變得很冷淡原因不管怎么說&#xff0c;女…

進程調度rr算法java實現_Java實現進程調度算法(二) RR(時間片輪轉)

一、概述因為這次os作業對用戶在控制臺的輸入輸出有要求&#xff0c;所以我花了挺多的代碼來完善控制臺的顯示。也因為我這次要實現多個類似算法&#xff0c;所以將一些共性單獨提取出來作為一個類。如果只想要和算法有關的核心代碼&#xff0c;看RR類的calc()即可。實現思路&a…

python全局變量global線程安全_對python多線程與global變量詳解

今天早上起來寫爬蟲&#xff0c;基本框架已經搭好&#xff0c;添加多線程爬取功能時&#xff0c;發現出錯&#xff1a;比如在下載文件的url列表中加入200個url&#xff0c;開啟50個線程。我的爬蟲…竟然將50個url爬取并全部命名為0.html&#xff0c;也就是說&#xff0c;最后的…

python123第五章_python 3.5學習筆記(第五章)

本章內容1、什么是模塊2、模塊的導入方法3、搜索路徑4、重要標準庫一、什么是模塊1、模塊本質上是一個以.py 結尾的python文件&#xff0c;包含了python對象定義和python語句。2、模塊是用來從邏輯上組織python代碼(定義變量、函數、類、邏輯等)以實現某種功能3、包&#xff1a…

string 長度_String源碼解析

本章源碼分析基于JDK1.7實現的接口String類被final修飾詞修飾&#xff0c;代表不可修改的特性&#xff0c;它實現了三個接口&#xff0c;Serializable是序列化接口&#xff0c;Compareble是排序接口&#xff0c;Char是字符序列接口。主要成員變量char[]&#xff1a;String通過c…

將你一張表的值覆蓋_山西聯通攜手華為完成長風商務區宏微協同,立體覆蓋,打造5G精品網絡...

近日&#xff0c;中國聯通山西分公司(以下簡稱“山西聯通”)在太原長風商務區繼5G CA超高速率升級之后&#xff0c;又針對長風商務區兩層活動區域進行了5G宏微協同的立體覆蓋&#xff0c;實現了該區域5G網絡的連續部署。長風商務區建筑結構設計新穎&#xff0c;占地面積3.06平方…

16速 java_不停歇的 Java 即將發布 JDK 16,新特性速覽!

之前在 JDK 15 中預覽的密封類和接口限制其余類和接口能夠擴展或實現它們。該計劃的目標包括&#xff0c;容許類或接口的做者控制負責實現它的代碼&#xff0c;提供比訪問修飾符更聲明性的方式來限制超類的使用&#xff0c;以及經過提供模式分析的基礎來支持模式匹配的將來方向…

局域網內文件傳輸速度_詳解蒲公英路由器組網 實現文件共享

蒲公英路由器&#xff0c;除了具備普通路由器的功能之外&#xff0c;如圖&#xff1a;最大的特色是可以實現智能組網&#xff1a;最大的特色是可以實現智能組網&#xff1a;采用全新自主研發的Cloud VPN技術替代傳統VPN&#xff0c;基于SD-WAN智能組網方案&#xff0c;快速組建…

java emoji顯示亂碼_Java 解決Emoji表情過濾問題

Emoji表情從三方數據中獲取沒有過濾&#xff0c;導致存入DB的時候報錯。原因&#xff1a;UTF-8編碼有可能是兩個、三個、四個字節。Emoji表情是4個字節&#xff0c;而Mysql的utf8編碼最多3個字節&#xff0c;所以數據插不進去。方法1.將已經建好的表也轉換成utf8mb42&#xff0…

mongotemplate中save拋出異常_異常處理的三個好習慣 | Python 工匠

文 | piglei 編輯 | EarlGrey推薦 | 編程派(微信ID&#xff1a;codingpy)前言如果你用 Python 編程&#xff0c;那么你就無法避開異常&#xff0c;因為異常在這門語言里無處不在。打個比方&#xff0c;當你在腳本執行時按 ctrlc 退出&#xff0c;解釋器就會產生一個 KeyboardI…

java 百度網盤上傳_使用pcs api往免費的百度網盤上傳下載文件的方法

百度個人云盤空間大&#xff0c;完全免費&#xff0c;而且提供了pcs api供調用操作文件&#xff0c;在平時的項目里往里面保存一些文件是很實用的。環境準備&#xff1a;開通讀寫網盤的權限及獲取access_token:http://blog.csdn.net/langyuezhang/article/details/47206621百度…

python縮進教學_Python縮進和選擇學習

縮進Python最具特色的是用縮進來標明成塊的代碼。我下面以if選擇結構來舉例。if后面跟隨條件&#xff0c;如果條件成立&#xff0c;則執行歸屬于if的一個代碼塊。先看C語言的表達方式(注意&#xff0c;這是C&#xff0c;不是Python!)if ( i > 0 ){ x 1; y 2;}如果i …

php如何新建xml文件,PHP中的生成XML文件的4種方法分享

生成如下XML串Xml代碼title1content12009-10-11title2content22009-11-11方法I.【直接生成字符串】使用純粹的PHP代碼生成字符串&#xff0c;并把這個字符串寫入一個以XML為后綴的文件。這是最原始的生成XML的方法&#xff0c;不過有效&#xff01;$data_array array(array(ti…

組態王能直接讀取儀表數據嗎_液晶多功能網絡電力儀表PD800H

液晶多功能網絡電力儀表PD800H-H44三相三線多功用電力表面&#xff0c;一般也被稱作網絡電力表面&#xff0c;它是一種數字化的監控設備&#xff0c;其功用集成了電量測量&#xff0c;情況監控&#xff0c;遠程通訊為一體&#xff0c;作業原理上選用了現代核算機技術和數字信號…

python程序顯示自己的版權_手把手教你Pycharm皮膚主題及個性化設置,python程序員必備-Go語言中文社區...

1.設置IDE皮膚主題File -> Settings -> Appearance -> Theme -> 選擇“Alloy.IDEA Theme”根據自己的喜好設置字體大小&#xff0c;以及樣式。2.修改字體大小File -> Settings > Editor -> Colors & Fonts -> Font -> Size -> 設置為“14”3…

java多線程activemq,多線程JMS客戶端ActiveMQ

我正在使用以下代碼創建多個JMS會話&#xff0c;以供多個使用者使用消息。我的問題是代碼以單線程方式運行。即使消息存在于隊列中&#xff0c;第二個線程也無法接收任何內容&#xff0c;而是繼續輪詢。同時&#xff0c;第一個線程完成對第一批的處理&#xff0c;然后返回并使用…

python cnn 實例_基于CNN的紋理合成實踐【附python實現】

Q0: Preliminary knowledge of Texture SynthesisBaseline請見此處&#xff0c;下文所有的代碼修改均建立此代碼基礎之上。1. 紋理合成簡述?紋理合成(Texture Systhesis)技術主要應用于計算機圖形學等領域&#xff0c;被用于模擬幾何模型的表面細節、增強繪制模型的真實感。不…