主頁 >  其他 > 2019年Java面試題基礎系列228道(5)

2019年Java面試題基礎系列228道(5)

2020-09-11 09:57:44 其他

21、存在兩個類,B 繼承 A,C 繼承 B,我們能將 B 轉換為C 么?如 C = (C) B;

這屬于強制型別轉換,如果被轉換的B實體不是C型別,會有例外

比如你的ABC分別對應動物,貓,黑貓,

向上轉型就是比如

C c = new C();

B b = c;

你把c轉型為B,黑貓是貓嗎?是啊,所以這是ok的,

但是反過來

B b = new B();

C c = (C)b;

這就不ok了,只知道這個b是一只貓,他不一定是黑貓,

但如果這個b已經確定是一只黑貓了,那就可以轉型了

B b = new C();

C c = (C)b;

這里的b本來就是黑貓啊,

22、哪個類包含 clone 方法?是 Cloneable 還是 Object?

  java.lang.Cloneable 是一個標示性介面,不包含任何方法,clone 方法在object 類中定義,并且需要知道 clone() 方法是一個本地方法,這意味著它是由c 或 c++ 或 其他本地語言實作的,

23、Java 中 ++ 運算子是執行緒安全的嗎?

  不是執行緒安全的操作,它涉及到多個指令,如讀取變數值,增加,然后存盤回記憶體,這個程序可能會出現多個執行緒交差,

24、a = a + b 與 a += b 的區別

+= 隱式的將加操作的結果型別強制轉換為持有結果的型別,如果兩這個整型相加,如 byte、short 或者 int,首先會將它們提升到 int 型別,然后在執行加法操作,如果加法操作的結果比 a 的最大值要大,則 a+b 會出現編譯錯誤,但是

byte a = 127;byte b = 127;
b = a + b;// error : cannot convert from int to byte
b += a;// ok

   (譯者注:這個地方應該表述的有誤,其實無論 a+b 的值為多少,編譯器都會報錯,因為 a+b 操作會將 a、b 提升為 int 型別,所以將 int 型別賦值給 byte就會編譯出錯)

25、我能在不進行強制轉換的情況下將一個 double 值賦值給long 型別的變數嗎?

  不行,你不能在沒有強制型別轉換的前提下將一個 double 值賦值給 long 型別的變數,因為 double 型別的范圍比 long 型別更廣,所以必須要進行強制轉換,

26、3*0.1 == 0.3 將會回傳什么?true 還是 false?

  false,因為有些浮點數不能完全精確的表示出來,

27、int 和 Integer 哪個會占用更多的記憶體?

  Integer 物件會占用更多的記憶體,Integer 是一個物件,需要存盤物件的元資料,但是 int 是一個原始型別的資料,所以占用的空間更少,

28、為什么 Java 中的 String 是不可變的(Immutable)?

  Java 中的 String 不可變是因為 Java 的設計者認為字串使用非常頻繁,將字串設定為不可變可以允許多個客戶端之間共享相同的字串,

29、我們能在 Switch 中使用 String 嗎?

  從 Java 7 開始,我們可以在 switch case 中使用字串,但這僅僅是一個語法糖,內部實作在 switch 中使用字串的 hash code,

30、Java 中的構造器鏈是什么?

  當你從一個構造器中呼叫另一個構造器,就是 Java 中的構造器鏈,這種情況只在多載了類的構造器的時候才會出現,

31、64 位 JVM 中,int 的長度是多數?

  Java 中,int 型別變數的長度是一個固定值,與平臺無關,都是 32 位,意思就是說,在32位和64位的java虛擬機中,int 型別的長度是相同的,

32、Serial 與 Parallel GC 之間的不同之處?

  Serial 與 Parallel 在 GC 執行的時候都會引起 stop-the-world,它們之間主要不同 serial 收集器是默認的復制收集器,執行 GC 的時候只有一個執行緒,而parallel 收集器使用多個 GC 執行緒來執行,

33、32 位和 64 位的 JVM,int 型別變數的長度是多數?

  32 位和 64 位的 JVM 中,int 型別變數的長度是相同的,都是 32 位或者 4個位元組,

34、Java 中 WeakReference 與 SoftReference 的區別?

  

35、WeakHashMap 是怎么作業的?

  WeakHashMap 的作業與正常的 HashMap 類似,但是使用弱參考作為 key,意思就是當 key 物件沒有任何參考時,key/value 將會被回收,

36、JVM 選項 -XX:+UseCompressedOops 有什么作用?為什么要使用?

  到 64 位的 JVM主要動機在于可以指定最大堆大小,通過壓縮 OOP 可以節省一定的記憶體,通過-XX:+UseCompressedOops 選項,JVM 會使用 32 位的 OOP,而不是 64 位的 OOP,

37、怎樣通過 Java 程式來判斷 JVM 是 32 位 還是 64位?

  你可以檢查某些系統屬性如 sun.arch.data.model 或 os.arch 來獲取該資訊,

38、32 位 JVM 和 64 位 JVM 的最大堆記憶體分別是多數?

理論上說上 32 位的 JVM 堆記憶體可以到達 2^32,即 4GB,但實際上會比這個小很多,不同作業系統之間不同,如 Windows 系統大約 1.5 GB,Solaris 大約3GB,64 位 JVM 允許指定最大的堆記憶體,理論上可以達到 2^64,這是一個非常大的數字,實際上你可以指定堆記憶體大小到 100GB,甚至有的 JVM,如 Azul,堆記憶體到 1000G 都是可能的,

39、JRE、JDK、JVM 及 JIT 之間有什么不同?

JRE 代表 Java 運行 時(Java run-time),是 運 行 Java 參考所必須的,JDK 代表 Java 開發工具(Java development kit),是 Java 程式的開發工具,如 Java編譯器,它也包含 JRE,JVM 代表 Java 虛擬機(Java virtual machine),它的責任是運行 Java 應用,JIT 代表即時編譯(Just In Time compilation),當代碼執行的次數超過一定的閾值時,會將 Java 位元組碼轉換為本地代碼,如,主要的熱點代碼會被準換為本地代碼,這樣有利大幅度提高 Java 應用的性能,

40、解釋 Java 堆空間及 GC?

當通過 Java 命令啟動 Java 行程的時候,會為它分配記憶體,記憶體的一部分用于創建堆空間,當程式中創建物件的時候,就從對空間中分配記憶體,GC 是 JVM 內部的一個行程,回收無效物件的記憶體用于將來的分配,

41、你能保證 GC 執行嗎?

   不能,雖然你可以呼叫 System.gc() 或者 Runtime.gc(),但是沒有辦法保證 GC的執行,

42、怎么獲取 Java 程式使用的記憶體?堆使用的百分比?

可以通過 java.lang.Runtime 類中與記憶體相關方法來獲取剩余的記憶體,總記憶體及最大堆記憶體,通過這些方法你也可以獲取到堆使用的百分比及堆記憶體的剩余空間,Runtime.freeMemory() 方法回傳剩余空間的位元組數,Runtime.totalMemory()方法總記憶體的位元組數,Runtime.maxMemory() 回傳最大記憶體的位元組數,

43、Java 中堆和堆疊有什么區別?

JVM 中堆和堆疊屬于不同的記憶體區域,使用目的也不同,堆疊常用于保存方法幀和區域變數,而物件總是在堆上分配,堆疊通常都比堆小,也不會在多個執行緒之間共享,而堆被整個 JVM 的所有執行緒共享,

44、“a==b”和”a.equals(b)”有什么區別?

如果 a 和 b 都是物件,則 a==b 是比較兩個物件的參考,只有當 a 和 b 指向的是堆中的同一個物件才會回傳 true,而 a.equals(b) 是進行邏輯比較,所以通常需要重寫該方法來提供邏輯一致性的比較,例如,String 類重寫 equals() 方法,所以可以用于兩個不同物件,但是包含的字母相同的比較,

45、a.hashCode() 有什么用?與 a.equals(b) 有什么關系?

hashCode() 方法是相應物件整型的 hash 值,它常用于基于 hash 的集合類,如 Hashtable、HashMap、LinkedHashMap 等等,它與 equals() 方法關系特別緊密,根據 Java 規范,兩個使用 equal() 方法來判斷相等的物件,必須具有相同的 hash code,

46、final、finalize 和 finally 的不同之處?

final 是一個修飾符,可以修飾變數、方法和類,如果 final 修飾變數,意味著該變數的值在初始化后不能被改變,finalize 方法是在物件被回收之前呼叫的方法,給物件自己最后一個復活的機會,但是什么時候呼叫 finalize 沒有保證,finally是一個關鍵字,與 try 和 catch 一起用于例外的處理,finally 塊一定會被執行,無論在 try 塊中是否有發生例外,

47、Java 中的編譯期常量是什么?使用它又什么風險?

公共靜態不可變(public static final )變數也就是我們所說的編譯期常量,這里的 public 可選的,實際上這些變數在編譯時會被替換掉,因為編譯器知道這些變數的值,并且知道這些變數在運行時不能改變,這種方式存在的一個問題是你使用了一個內部的或第三方庫中的公有編譯時常量,但是這個值后面被其他人改變了,但是你的客戶端仍然在使用老的值,甚至你已經部署了一個新的 jar,為了避免這種情況,當你在更新依賴 JAR 檔案時,確保重新編譯你的程式,

48、List、Set、Map 和 Queue 之間的區別(答案)

List 是一個有序集合,允許元素重復,它的某些實作可以提供基于下標值的常量訪問時間,但是這不是 List 介面保證的,Set 是一個無序集合,

49、poll() 方法和 remove() 方法的區別?

poll() 和 remove() 都是從佇列中取出一個元素,但是 poll() 在獲取元素失敗的時候會回傳空,但是 remove() 失敗的時候會拋出例外,

50、Java 中 LinkedHashMap 和 PriorityQueue 的區別是什么?

PriorityQueue 保證最高或者最低優先級的的元素總是在佇列頭部,但是LinkedHashMap 維持的順序是元素插入的順序,當遍歷一個 PriorityQueue時,沒有任何順序保證,但是 LinkedHashMap 課保證遍歷順序是元素插入的順序,

40、解釋 Java 堆空間及 GC?

當通過 Java 命令啟動 Java 行程的時候,會為它分配記憶體,記憶體的一部分用于創建堆空間,當程式中創建物件的時候,就從對空間中分配記憶體,GC 是 JVM 內部的一個行程,回收無效物件的記憶體用于將來的分配,

41、你能保證 GC 執行嗎?

不能,雖然你可以呼叫 System.gc() 或者 Runtime.gc(),但是沒有辦法保證 GC的執行,

42、怎么獲取 Java 程式使用的記憶體?堆使用的百分比?

可以通過 java.lang.Runtime 類中與記憶體相關方法來獲取剩余的記憶體,總記憶體及最大堆記憶體,通過這些方法你也可以獲取到堆使用的百分比及堆記憶體的剩余空間,Runtime.freeMemory() 方法回傳剩余空間的位元組數,Runtime.totalMemory()方法總記憶體的位元組數,Runtime.maxMemory() 回傳最大記憶體的位元組數,

43、Java 中堆和堆疊有什么區別?

JVM 中堆和堆疊屬于不同的記憶體區域,使用目的也不同,堆疊常用于保存方法幀和區域變數,而物件總是在堆上分配,堆疊通常都比堆小,也不會在多個執行緒之間共享,而堆被整個 JVM 的所有執行緒共享,

44、“a==b”和”a.equals(b)”有什么區別?

如果 a 和 b 都是物件,則 a==b 是比較兩個物件的參考,只有當 a 和 b 指向的是堆中的同一個物件才會回傳 true,而 a.equals(b) 是進行邏輯比較,所以通常需要重寫該方法來提供邏輯一致性的比較,例如,String 類重寫 equals() 方法,所以可以用于兩個不同物件,但是包含的字母相同的比較,

45、a.hashCode() 有什么用?與 a.equals(b) 有什么關系?

hashCode() 方法是相應物件整型的 hash 值,它常用于基于 hash 的集合類,如 Hashtable、HashMap、LinkedHashMap 等等,它與 equals() 方法關系特別緊密,根據 Java 規范,兩個使用 equal() 方法來判斷相等的物件,必須具有相同的 hash code,

46、final、finalize 和 finally 的不同之處?

final 是一個修飾符,可以修飾變數、方法和類,如果 final 修飾變數,意味著該變數的值在初始化后不能被改變,finalize 方法是在物件被回收之前呼叫的方法,給物件自己最后一個復活的機會,但是什么時候呼叫 finalize 沒有保證,finally是一個關鍵字,與 try 和 catch 一起用于例外的處理,finally 塊一定會被執行,無論在 try 塊中是否有發生例外,

47、Java 中的編譯期常量是什么?使用它又什么風險?

公共靜態不可變(public static final )變數也就是我們所說的編譯期常量,這里的 public 可選的,實際上這些變數在編譯時會被替換掉,因為編譯器知道這些變數的值,并且知道這些變數在運行時不能改變,這種方式存在的一個問題是你使用了一個內部的或第三方庫中的公有編譯時常量,但是這個值后面被其他人改變了,但是你的客戶端仍然在使用老的值,甚至你已經部署了一個新的 jar,為了避免這種情況,當你在更新依賴 JAR 檔案時,確保重新編譯你的程式,

48、List、Set、Map 和 Queue 之間的區別(答案)

List 是一個有序集合,允許元素重復,它的某些實作可以提供基于下標值的常量訪問時間,但是這不是 List 介面保證的,Set 是一個無序集合,

49、poll() 方法和 remove() 方法的區別?

poll() 和 remove() 都是從佇列中取出一個元素,但是 poll() 在獲取元素失敗的時候會回傳空,但是 remove() 失敗的時候會拋出例外,

50、Java 中 LinkedHashMap 和 PriorityQueue 的區別是什么?

PriorityQueue 保證最高或者最低優先級的的元素總是在佇列頭部,但是LinkedHashMap 維持的順序是元素插入的順序,當遍歷一個 PriorityQueue時,沒有任何順序保證,但是 LinkedHashMap 課保證遍歷順序是元素插入的順序,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/5235.html

標籤:其他

上一篇:2019年Java面試題基礎系列228道(4)

下一篇:2019年Java面試題基礎系列228道(6)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more