【計題04組01號】Java面試問答題

yyyyfly發表於2022-03-08

寫作前面

本書內容摘自《Java程式設計師面試筆試寶典》

很多同學在面試時其實有個誤區,認為準備的東西越詳細越好

其實不是,就和批試卷一樣,寫長篇大論其實並不會必然加分

老師閱卷時間有限只會抓關鍵詞,面試官也是一樣的道理

加上面試官每天面試的人有很多,不可能在你身上浪費大量的時間,更不可能有時間聽你背書

工作不是要一個背書機器,加上計算機語言晦澀難懂,要想把整本書背下來基本不可能

那麼為什麼有時候我們聽大佬說話句句都是重點

因為他拋棄了所有的贅述,只留下了關鍵詞和框架

但是這本書怎麼說呢,回答問題的邏輯稍微有點亂,有時候看著看著就把問題忘了,所以有些擴充內容就刪掉了,留到別的頁面去單獨和大家討論

面試的時候除非面試官追問,否則一般兩三句話可以搞定了

所以這篇博文的回答都會很短,但是不是直接靠這個回答就可以了,大家要根據關鍵詞將語言用自己的話組織起來

Java基礎知識

Java語言有哪些優點

純物件導向,平臺無關,有內建類,支援Web應用開發,安全和健壯,規避了C++的弊端

Java和C++有什麼區別和相同

Java編譯成位元組碼JVM解釋,C++經過編譯生成二進位制程式碼

Java純物件導向,C++兼具物件導向過程

Java沒有指標更安全

Java不支援多重繼承

Java自帶回收功能

Java語言不支援運算子過載,C++支援

Java和平臺無關,C++有關

Java提供對註釋文件內建支援

Java包含了標準庫

為什麼需要public static void main (String[] args) 這個方法

main是JVM識別的特殊方法名,是程式的入口方法

如何實現在Main方法執行前輸出hello world

main方法不一定是第一個被執行的,在前面利用靜態塊實現輸出語句

Java程式初始化的順序是怎麼樣的

靜態物件優於非靜態物件

父類優於子類

按照成員變數定義順序

Java中的作用域有哪些

Java的變數有三種:成員變數,靜態變數【全域性變數】,區域性變數

成員變數還有四種:public,private,protected,default

一個Java檔案中是否可以定義多個類

可以定義,但只有一個類被public修飾,且必須與檔名相同,沒有public類檔名隨便一個類的名字

什麼是建構函式

用來在物件例項化時初始化物件的成員變數的函式

  • 建構函式必須與類的名字相同
  • 每個類可以有多個建構函式
  • 引數不限制
  • 總是伴隨著new操作一起呼叫,且不能直接呼叫,必須系統呼叫
  • 主要作用完成初始化工作
  • 不能被繼承
  • 子類可以通過super來呼叫父類建構函式
  • 父類和子類都沒有定義,編譯器自動為兩個類生成無引數建構函式

為什麼Java中有些介面沒有任何方法

Java不支援多重繼承,Java一個類可以實現多個介面,間接達到多重介面的目的

Java中的clone方法有什麼作用

為了解決引用傳遞中,修改一個值會影響到另一個值的問題

什麼是反射機制

允許程式執行時自我檢查,增加程式的靈活性

功能主要有

  • 得到一個物件所屬的類
  • 獲取一個類的所有成員變數和方法
  • 在執行時建立物件
  • 在執行時呼叫物件的方法

package有什麼作用

  • 解決明明衝突
  • 對類按照功能分類,專案組織更加清晰

如何實現類似於C語言中函式指標的功能

定義一個介面,在介面中生命呼叫的方法,實現這個介面,最後把實現類的一個物件作為引數傳遞給呼叫程式

物件導向和麵向過程有什麼區別

出發點不同:前者用常規思維的方式處理問題,後者強調過程的抽象化與模組化

層次邏輯關係不同:前者用計算機邏輯來模擬客觀世界,後者把客觀世界的問題抽象成計算機可以處理的過程

資料處理方式與控制程式方式不同:前者將對應的程式碼封裝成一個整體,後者是直接通過程式來處理資料處理完畢即可顯示結果

分析設計與編碼轉換方式不同:前者從分析、設計到編碼採用一致性模型,後者從分析、設計到編碼之間按規則進行轉換

物件導向有哪些特徵

抽象、繼承、封裝、多型

採用物件導向的開發方式有什麼特點

較高的開發效率

保證軟體的魯棒性

保證軟體的高可維護性

什麼是繼承

子類適用父類的一些成員變數與方法,提高程式碼的複用性,提高開發效率

組合和繼承有什麼區別

組合相當於【Has】

繼承相當於【Is】,在這種情況下才使用繼承

多型的實現機制是什麼

多型是指同一個操作對於不同的物件,會有不同的語義

有兩種表現方式

方法的過載【同名方法,不同引數】

方法的覆蓋【子類覆蓋父類】

過載和覆蓋有什麼區別

過載是同一個類中的方法之間的關係,覆蓋是父類和子類的關係

覆蓋只能一個方法或者一對方法產生關係,過載是多個方法之間的關係

覆蓋引數列表相同,過載引數列表不同

覆蓋呼叫根據物件的型別,過載呼叫根據實參和形參的方法體

抽象類和介面有什麼異同

相同點

  • 都不能被例項化
  • 只有實現了其中的方法才能被例項化

不同點

  • 介面只有定義,只有實現介面的類才能實現介面中定義的方法,抽象類可以有定義和實現,其方法可以再抽象類中被實現
  • 介面需要實現【implements】,但抽象類只能被繼承【entends】,一個類可以實現多個介面,但一個類只能繼承一個抽象類
  • 介面理念是has關係,抽象類是is關係
  • 介面中定義的成員變數預設為public static final,抽象類可以有自己的資料成員變數,也可以由非抽象的成員方法
  • 介面被運用與實現比較常用的功能,抽象類更傾向於充當公共類的角色

介面是一種特殊形式的抽象類,但抽象類多用於同類食物中無法具體描述的方法的場景,僅限於子類和父類有邏輯關係才使用

內部類有哪些

靜態內部類,成員內部類,區域性內部類,匿名內部類

如何獲取父類的類名

getClass().getSuperclass().getName()

this與super有什麼區別

this用來指向當前例項物件,super用來訪問父類

變數命名有哪些規則

只能由字母,數字,下劃線和美元符號組成,第一個字元不能是數字,識別符號不能包含空白字元

break,continue以及return有什麼區別

break直接結束當前迴圈

continue結束此次迴圈,進入下一次迴圈

return是一個跳轉語句,是的程式返回到呼叫該方法的地方

final,finally和finallize有什麼區別

final宣告屬性、方法和類

finally是異常處理一部分

finalize是覆蓋此方法來實現對其他資源的回收

assert有什麼作用

對bollean表示式進行檢查,用來保證程式的正確性,在開發和測試使用

static關鍵字有哪些作用

為某特定資料型別或物件分類單一的儲存空間,預建立物件個數無關

實現某個方法或屬性與類而不是物件關聯在一起

適用switch時有哪些注意事項

switch表示式只能是int

省略了break,匹配語句後面所有的情況包括default都會被執行

volatile有什麼作用

修飾被不同執行緒訪問和修改的變數,系統直接從對應記憶體提取,不會利用快取

instanceof有什麼作用

判斷一個引用型別的變數所指向的物件是否是一個類的例項,即它左邊的物件是否是它右邊的類的例項【boolean型別】

strictfp有什麼作用

全稱strict float point,指的是精確浮點,確保浮點數運算

Java提供了哪些基本資料型別

8種,byte,short,int,long,float,double,char,boolean

什麼是不可變類

建立類的例項後,不允許修改它的值,類似於const,一般情況下封裝類都是不可變類,包括String

建立不可邊類的原則

  • 成員變數private修飾
  • 一般沒有set方法
  • 確保類中所有方法不會被子類覆蓋
  • 如果一個類成員不是不可變數,需要通過clone方法來保證
  • 如果有必要,可以使用equals方法和hashCode方法

值傳遞與引用傳遞有哪些區別

值傳遞形參的改變不會影響實參的值,引用傳遞形參的修改就會影響實參的值

不同資料型別的轉換有哪些規則

型別自動轉換,強制型別轉換

強制型別轉換注意事項有哪些

涉及byte、short和char型別的運算,會強制轉換為int

需要得到short型別的結果,需要顯示地轉換

運算子優先順序是什麼

【計題04組01號】Java面試問答題

Math類中round、ceil和floor方法的功能各是什麼

round方法表示四捨五入

ceil方法表示向上取整

floor方法表示向下取整

++i與i++有什麼區別

前者程式開始前自增,後者程式執行完畢後自增

如何實現無符號數的右移運算

>>被稱為有符號右移運算【為正數高位補0,負數時高位補1】

>>>被稱為無符號右移運算【執行運算時,都會在高位補0】

char型變數中是否可以儲存一箇中文漢字

可以,不過,如果某個特殊的漢字沒有被包含在unicode編碼字符集中,那麼,這個char型變數中就不能儲存這個特殊漢字

字串建立與儲存的機制是什麼

①建立物件
String s1 = new String("abc");
String s2 = new String("abc");

②宣告物件
String s1 = "abc";
String s2 = "abc";

==、equals和hashCode有什麼區別

==用來比較兩個變數的值是否相等

equals在沒有被覆蓋的情況下和==運算子一樣,覆蓋以後可以比較資料內容而不是引用

hashCode用來鑑定兩個物件是否相等,返回物件地址是否相等

equals方法用於比較物件的內容是否相等(覆蓋以後)
hashcode方法只有在集合中用到
當覆蓋了equals方法時,比較物件是否相等將通過覆蓋後的equals方法進行比較(判斷物件的內容是否相等)。
將物件放入到集合中時,首先判斷要放入物件的hashcode值與集合中的任意一個元素的hashcode值是否相等,如果不相等直接將該物件放入集合中。如果hashcode值相等,然後再通過equals方法判斷要放入物件與集合中的任意一個物件是否相等,如果equals判斷不相等,直接將該元素放入到集合中,否則不放入。

String、StringBuffer、StringBuilder和StringTokenizer有什麼區別

1)String、StringBuffer、StringBuilder都用於字串操作,其中,String是不可變類,即String物件一旦被建立,其值不能被修改,而StringBuffer和StringBuilder都是可變類,物件被建立以後仍然可以對其值進行修改。

2)在字串需要共享的場合中使用String合適,而當一個字串經常需要被修改時,最好使用StringBuffer或者StringBuilder,具體看是否多執行緒

3)String類例項化物件有兩種方式:可以利用構造方法的方式(String str = new String("Hello"))來進行初始化,也可以用賦值的方式(String str = “Hello”)進行初始化。而StringBuffer和StringBuilder只能通過構造方法的方式(StringBuffer sb = new StringBuffer(“Hello”))來初始化。

4)StringBuffer是執行緒安全的,StringBuilder不是執行緒安全的。

5)在執行效率方面,StringBuilder最高,StringBuffer次之,String最低。一般而言,如果要操作的資料量比較小,應優先使用String;如果在單執行緒下操作大量資料,應優先選擇StringBuilder;如果是在多執行緒下操作大量資料,應優先考慮StringBuffer

6)StringTokenizer是用來分割字串的工具類。

Java中陣列是不是物件

物件的特點是封裝了一些資料,同時提供一些屬性和方法,所以陣列是物件

有自己的屬性【如何length】,也有一些方法被呼叫【clone】

陣列的初始化方式有哪幾種

一維陣列兩種

type arrayName[ ]或者type[ ]arrayName

二維陣列三種

type arrayName[ ][ ] ;

type[ ][ ] arrayName;

type[ ] arrayName[ ];

length屬性與length()方法有什麼區別

前一個是陣列長度,後一個是字串長度

return後的finally塊中的程式碼什麼時候被執行

一定會執行,並且在return前執行

異常處理的原理是什麼

把異常當做物件來處理,並定義了一個基類java.lang.Throwable作為所有異常的父類

執行時異常和普通異常有什麼區別

一般異常表示程式執行過程中可能出現的非正常狀態,執行時異常表示虛擬機器的通常操作中可能遇到的異常,是一種常見的執行錯誤

java編譯器要求方法宣告丟擲可能發生的非執行時異常,但是並不要求必須宣告丟擲未捕獲執行時異常。

Java IO流的實現機制是什麼

輸入和輸出都被稱為抽象的流,流可以被看做一組有序的位元組集合,即資料在兩裝置之間的傳輸

流可以分為兩大類:位元組流和字元流

管理檔案和目錄的類是什麼

File類管理檔案和資料夾,通過類不僅能夠檢視檔案或目錄的屬性,而且還可以實現對檔案或目錄的建立、刪除與重新命名等操作。

Java Web

頁面請求的工作流程是怎樣的

  1. 使用者輸入網址
  2. 把使用者請求傳送給伺服器
  3. 伺服器查詢請求的網頁
  4. 找到使用者請求的頁面
  5. 傳送相應訊息
  6. 瀏覽器顯示返回結果

HTTP中GET語POST方法有什麼區別

GET是一種最簡單的請求方法,其主要功能是從伺服器端獲取使用者所需資源,並將其作為相應返回給客戶端

GET方法的作用主要用來獲取伺服器端資源資訊,不會影響到資源自身的狀態

POST方法在這個基礎上還可以向伺服器上傳資料

什麼是Servlet

Servlet 是採用Java語言編寫的伺服器端程式,它執行於Web伺服器中的Servlet容器中,其主要功能是提供請求/響應的Web服務模式,可以生成動態的Web內容,而這正是HTML所不具備的功能。

與其他生成動態頁面技術相比,Servlet有諸多優點

  1. 較好的可移植性
  2. 執行效率高
  3. 功能強大【可以與Web伺服器進行互動】
  4. 使用方便【有介面用來讀取或者設定HTTP都訊息,處理Cookie和跟蹤會話狀態】
  5. 可擴充套件性強【具備Java所有優點】

什麼是Servlet的生命週期

載入、建立、初始化、處理客戶請求、解除安裝

載入:容器通過類載入器使用Servlet類對應的檔案來載入Servlet

建立:通過呼叫Servlet的建構函式來建立一個Servlet例項。

初始化:通過呼叫Servlet 的init( )方法來完成初始化工作

處理客戶請求:Servlet 一旦被建立後,它就可以為客戶端提供服務了。

解除安裝:容器在解除安裝Servlet之前需要呼叫destroy()方法,讓Servlet自己釋放其佔用的系統資源

JSP有哪些優點

JSP的引入在一定程度上解決了Servlet存在的缺點

改進了Web應用程式程式碼可讀性差,系統可擴充套件性可維護性差的缺陷

JSP與Servlet有何異同

相同點

JSP可以看做特殊的Servlet,只要是JSP可以完成的工作,Servlet都可以完成

不同點

Servlet是在Java嵌入HTML程式碼,編寫不方便,JSP實現是在HTML中嵌入Java程式碼

Servlet中沒有內建物件

JSP中的內建物件都是通過HttpServletRequest物件、HttpServletResponse 物件以及HttpServlet物件得到。

如何使用JSP與Servlet實現MVC模型

MVC全程Model【模型】,View【檢視】、Controller【控制器】首字母組合

MVC強制性地分離Web應用的輸入、處理和輸出,使得MVC應用程式分成3個核心部件

【計題04組01號】Java面試問答題

JSP的內建物件有哪些

在JSP中,內建物件又稱為隱含物件,是指在不宣告和不建立的情況下就可以被使用的一些成員變數。

JSP一共提供有9個內建物件:

request ( 請求物件)

response (響應物件)

pageContext(頁面上下文物件)

session ( 會話物件)

application (應用程式物件)

out (輸出物件)

config(配置物件)

page (頁面物件)

exception (例外物件)

request物件主要有哪些方法

【計題04組01號】Java面試問答題

JSP有哪些動作

jsp: include。用來在頁面被請求時引入一個檔案。

【計題04組01號】Java面試問答題

jsp : useBean。用來尋找或者例項化一個JavaBean。

【計題04組01號】Java面試問答題

jsp: setProperty。用來設定已經例項化的Bean物件的屬性

【計題04組01號】Java面試問答題

jsp : getProperty。用來獲取某個JavaBean的屬性

【計題04組01號】Java面試問答題

jsp:foward。用來把請求轉到一個新頁面

【計題04組01號】Java面試問答題

jsp: plugin。用於在瀏覽器中播放或顯示一個物件

【計題04組01號】Java面試問答題

相關文章