Java面试八股文 2021年最新Java面试题及答案汇总
Java面試真就老八股文了。我光是整理題目就理了半天,答案背也背不完,在我快要放棄的時候,死馬當活馬醫的聽了阿里P8楊逍的講座《大廠Java高級工程師的求職秘訣》(白嫖的試聽章節),不愧是大廠的高職級大佬,把Java面試題和所有知識點都講得很通透,感興趣的話,大家也可以去免費試聽一下。
當然,也可以往下看我整理的Java面試題,做個白嫖黨,嘿嘿。
1、JVM、JRE和JDK的區別:
JVM(Java Virtual Machine):java虛擬機,用于保證java的跨平臺的特性。java語言是跨平臺,jvm不是跨平臺的。JRE(Java Runtime Environment):java的運行環境,包括jvm+java的核心類庫。JDK(Java Development Kit):java的開發工具,包括jre+開發工具。
2、環境變量path和classpath的作用是什么?
C:Program Files (x86)Javajre7in;C:Program Files (x86)Javajdk1.7.0_72in(1)path是配置Windows可執行文件的搜索路徑,即擴展名為.exe的程序文件所在的目www.jiuzhang.com 2錄,用于指定DOS窗口命令的路徑。(2)Classpath是配置class文件所在的目錄,用于指定類搜索路徑,JVM就是通過它來尋找該類的class類文件的。
3、變量有什么用?為什么要定義變量?什么時候用?
答:變量的作用:用來存儲數據。為什么要定義變量:用來不斷的存放同一類型的常量,并可以重復使用
4、final 在java 中有什么作用?
final 修飾的類叫最終類,該類不能被繼承。
final 修飾的方法不能被重寫。
final 修飾的變量叫常量,常量必須初始化,初始化之后值就不能被修改。
5. java 中的Math.round(-1.5) 等于多少?
等于-1,因為在數軸上取值時,中間值(0.5)向右取整,所以正0.5 是往上取整,負0.5 是直接舍棄。
6、標示符命名規則
由數字(0-9),大小寫英文字母,以及_和$組成。不能以數字開頭。不能使用關鍵字來自定義命名。
7. String 屬于基礎的數據類型嗎? String 不屬于基礎類型,基礎類型有8 種:byte、boolean、char、short、int、float、long、double,而String 屬于對象。
8、數據類型:
(1)基本數據類型(4類8種):整數類型:byte、short、int、long浮點數類型:float、double字符類型:char布爾類型:boolean(ture false)(2)引用數據類型:類接口數組7、類型轉換精度從高到低double float long int short(char) byte(1)自動類型轉換將一個低精度—高精度(2)強制類型轉換將一個高精度—低精度(精度會下降)8、java語言的三種技術架構J2EE:企業版是為開發企業環境下的應用程序提供的一套解決方案。該技術體系中包含的技術如Servlet、Jsp等,主要針對于Web應用程序開發。J2SE:標準版是為開發普通桌面和商務應用程序提供的解決方案。該技術體系是其他兩者的基礎,可以完成一些桌面應用程序的開發。
9. java 中操作字符串都有哪些類?它們之間有什么區別?
操作字符串的類有:String、StringBuffer、StringBuilder。String 和StringBuffer、StringBuilder 的區別在于String 聲明的是不可變的對象,每次操作都會生成新的String 對象,然后將指針指向新的String 對象,而StringBuffer、StringBuilder可以在原有對象的基礎上進行操作,所以在經常改變字符串內容的情況下最好不要使用String。StringBuffer 和StringBuilder 最大的區別在于,StringBuffer 是線程安全的,而StringBuilder 是非線程安全的,但StringBuilder 的性能卻高于StringBuffer,所以在單線程環境下推薦使用StringBuilder,多線程環境下推薦使用StringBuffer。
10.String str="i"與String str=new String(“i”)一樣嗎?
不一樣,因為內存的分配方式不一樣。String str="i"的方式,java 虛擬機會將其分配到常量池中;而String str=new String(“i”) 則會被分到堆內存中。
11.java的跨平臺性
通過Java語言編寫的應用程序在不同的系統平臺上都可以運行。跨平臺的原因:只要在需要運行java應用程序的操作系統上,先安裝一個Java虛擬機(JVM Java VirtualMachine)即可。由JVM來負責Java程序在該系統中的運行。
12、有符號數據的表示法
(次重點)原碼,反碼(原碼取反),補碼(反碼+1)。
13、函數
定義:函數就是定義在類中的具有特定功能的一段獨立小程序。
特點:定義函數可以將功能代碼進行封裝便于對該功能進行復用函數只有被調用才會被執行函數的出現提高了代碼的復用性對于函數沒有具體返回值的情況,返回值類型用關鍵字void表示,那么該函數中的return語句如果在最后一行可以省略不寫。
函數的應用兩個明確:明確要定義的功能最后的結果是什么?明確在定義該功能的過程中,是否需要未知內容參與運算
14、重載:
概念:在同一個類中,允許存在一個以上的同名函數,只要它們的參數個數或者參數類型不同即可。
特點:與返回值類型無關,只看參數列表(參數類型以及參數個數)。
好處:方便于閱讀,優化了程序設計。
15、數組
概念:同一種數據類型的集合。好處:可以自動給數組中的元素從0開始編號,方便操作這些元素。
16、內存結構
棧內存:用于存儲局部變量,當數據使用完,所占空間會自動釋放。堆內存:數組和對象,通過new建立的實例都存放在堆內存中。方法區:靜態成員、構造函數、常量池、線程池本地方法區:window系統占用寄存器:
17.String 類的常用方法都有那些?
indexOf():返回指定字符的索引。
charAt():返回指定索引處的字符。
replace():字符串替換。
trim():去除字符串兩端空白。
split():分割字符串,返回一個分割后的字符串數組。
getBytes():返回字符串的byte 類型數組。
length():返回字符串長度。
toLowerCase():將字符串轉成小寫字母。
toUpperCase():將字符串轉成大寫字符。
substring():截取字符串。
equals():字符串比較。
18.抽象類必須要有抽象方法嗎?
不需要,抽象類不一定非要有抽象方法。
示例代碼:
abstract class Cat {public static void sayHi() {System.out.println("hi~"); } }上面代碼,抽象類并沒有抽象方法但完全可以正常運行。
19.普通類和抽象類有哪些區別?
普通類不能包含抽象方法,抽象類可以包含抽象方法。
抽象類不能直接實例化,普通類可以直接實例化。
20.類和對象:
類:對現實世界中某類事物的描述,是抽象的,概念上的定義。
對象:事物具體存在的個體。
21.成員變量和局部變量的區別(重點)
(1)作用域成員變量:針對整個類有效。局部變量:只在某個范圍內有效。(一般指的就是方法,語句體內)
(2)存儲位置成員變量:隨著對象的創建而存在,隨著對象的消失而消失,存儲在堆內存中。局部變量:在方法被調用,或者語句被執行的時候存在,存儲在棧內存中。當方法調用完,或者語句結束后,就自動釋放。
(3)初始值成員變量:有默認初始值。局部變量:沒有默認初始值,使用前必須賦值。
21.匿名對象
(1)匿名對象就是沒有名字的對象。是對象的一種簡寫形式。
(2)應用場景
A:只調用一次類中的方法。
B:可以作為實際參數在方法傳遞中使用
22.封裝
指隱藏對象的屬性和實現細節,僅對外提供公共訪問方式;比如電腦機箱、筆記本等好處:將變化隔離;方便使用;提高復用性;提高安全性
23.this關鍵字
(1)this關鍵字代表本類對象的一個引用,誰調用this所在的方法,this就代表誰
(2)this的使用場景
A:用于區分同名成員變量和局部變量;
B:在定義函數時,該函數內部要用到調用該函數的對象時,因為此時對象還沒建立,故this代表此對象B:構造函數間調用**這個時候,this(參數)必須作為第一條語句存在。
24.Person p = new Person();在內存中做了哪些事情。
(1)將Person.class文件加載進內存中。
(2)如果p定義在主方法中,那么,就會在棧空間開辟一個變量空間p。
(3)在堆內存給對象分配空間。
(4)對對象中的成員進行默認初始化。
(5)對對象中的成員進行顯示初始化。
(6)調用構造代碼塊對對象進行初始化。(如果沒有就不執行)
(7)調用構造方法對對象進行初始化。對象初始化完畢。
(8)將對象的內存地址賦值給p變量,讓p變量指向該對象。
25.制作API(次重點)
API(全拼):Application Program Interface 應用程序編程接口。
(1)類中的內容需要用文檔注釋。
(2)使用JDKin目錄下的javadoc工具。格式:javadoc -d 目錄-author -version ArrayTool.java
26.Random類的使用(重點)
(1)產生隨機數的類
(2)掌握內容
A:構造方法**Random() 創建一個新的隨機數生成器。**Random(long seed) 使用單個long 種子創建一個新的隨機數生成器。
B:成員方法**int nextInt() 返回下一個偽隨機數,它是此隨機數生成器的序列中均勻分布的int 值。**int nextInt(int n) 返回一個偽隨機數,它是取自此隨機數生成器序列的、在0(包括)和指定值(不包括)之間均勻分布的int 值。
27.final關鍵字(重點)
(1)最終的意思,可以用于修飾類,方法,變量。
(2)final修飾的類不能被繼承。final修飾的方法不能被重寫。final修飾的變量是一個常量。只能被賦值一次。內部類只能訪問被final修飾的局部變量。
28.抽象類(重點)
(1)多個類有相同的方法聲明,但是方法體不一樣。這個時候,我們考慮把方法聲明進行抽取。讓子類繼承后,自己去實現方法體。沒有方法體的方法,我們需要用抽象標志下。抽象的關鍵字是:abstract。
(2)抽象類:該方法稱為抽象方法,包含抽象方法的類就是抽象類。
(3)抽象類的特點:
A:抽象類和抽象方法都要用abstract進行修飾
B:抽象類不能被實例化
C:抽象類中不一定有抽象方法,但是,有抽象方法的類一定是抽象類。
(4)抽象類中數據的特點
A:成員變量抽象類中可以有變量,也可以有常量。
B:成員方法抽象類中可以有抽象方法,也可以有非抽象方法。
C:構造方法抽象類是一個類,所以,它有構造方法。雖然本身不能實例化。但是可以給子類實例化使用。
(5)抽象類中的問題
A:抽象類中是否有構造方法?能不能被實例化?如果不能,為什么有構造方法?
抽象類有構造方法。抽象類不能被實例化。抽象類中的構造方法供子類實例化調用。
B:抽象關鍵字abstract不可以和哪些關鍵字共存?
**private:私有內容子類繼承不到,所以,不能重寫。但是abstract修飾的方法,要求被重寫。兩者沖突。**finalfinal修飾的方法不能被重寫。而abstract修飾的方法,要求被重寫。兩者沖突。**static假如一個抽象方法能通過static修飾,那么這個方法,就可以直接通過類名調用。而抽象方法是沒有方法體的,這樣的調用無意義。所以,不能用static修飾。
C:抽象類中可不可以沒有抽象方法?如果可以,這樣的類有什么用嗎?抽象類可以沒有抽象方法。抽象類中沒有抽象方法的作用,只是為了不讓別的類建立該抽象類對象。這個在awt中有體現。
29.多態:
(1)同一個對象,在程序不同時刻的多種運行狀態。舉例:動物,狗是狗,狗是動物。水(氣態,液態,固態)
(2)多態前提
A:存在著繼承或者實現關系
B:有方法的重寫
C:父類(接口)引用指向子類(實現)對象
(3)多態的好處和弊端:
好處:多態的存在提高了程序的擴展性和后期可維護性弊端:雖然可以預先使用,但是只能訪問父類中已有的功能,運行的是后期子類的功能內容。不能預先使用子類中定義的特有功能。(4)多態中對象調用成員的特點
Fu f = new Zi();A:成員變量編譯看左邊,運行看左邊B:成員方法編譯看左邊,運行看右邊C:靜態方法編譯看左邊,運行看左邊
(5)多態的思想指揮同一批對象做事情。舉例:帶兵打仗,下課等。
30.模板設計模式:
在定義功能時,功能的一部分是確定的,有一部分是不確定的,而且確定的部分在使用不確定的部分,可將不確定的部分暴露出去,由該類的子類去完成。如:求一段程序的運行時間例子。
以上只是Java面試的冰山一角,感興趣的話也可以移步楊逍老師的Java面試技巧講座,這門課程非常看重實用性,設計理念就是**“通過真題搞定BATJ大廠面試”**,通過40天有計劃的訓練,帶你進階到阿里 P6+級別。
總結
以上是生活随笔為你收集整理的Java面试八股文 2021年最新Java面试题及答案汇总的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Unity3d十二 3d主要引擎名称Og
- 下一篇: 在Windows下配置svn服务端钩子程