寫作前面
本書內容摘自《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型別的結果,需要顯示地轉換
運算子優先級是什么

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
頁面請求的作業流程是怎樣的
- 用戶輸入網址
- 把用戶請求發送給服務器
- 服務器查找請求的網頁
- 找到用戶請求的頁面
- 發送相應訊息
- 瀏覽器顯示回傳結果
HTTP中GET語POST方法有什么區別
GET是一種最簡單的請求方法,其主要功能是從服務器端獲取用戶所需資源,并將其作為相應回傳給客戶端
GET方法的作用主要用來獲取服務器端資源資訊,不會影響到資源自身的狀態
POST方法在這個基礎上還可以向服務器上傳資料
什么是Servlet
Servlet 是采用Java語言撰寫的服務器端程式,它運行于Web服務器中的Servlet容器中,其主要功能是提供請求/回應的Web服務模式,可以生成動態的Web內容,而這正是HTML所不具備的功能,
與其他生成動態頁面技術相比,Servlet有諸多優點
- 較好的可移植性
- 執行效率高
- 功能強大【可以與Web服務器進行互動】
- 使用方便【有介面用來讀取或者設定HTTP都訊息,處理Cookie和跟蹤會話狀態】
- 可擴展性強【具備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個核心部件

JSP的內置物件有哪些
在JSP中,內置物件又稱為隱含物件,是指在不宣告和不創建的情況下就可以被使用的一些成員變數,
JSP一共提供有9個內置物件:
request ( 請求物件)
response (回應物件)
pageContext(頁面背景關系物件)
session ( 會話物件)
application (應用程式物件)
out (輸出物件)
config(配置物件)
page (頁面物件)
exception (例外物件)
request物件主要有哪些方法

JSP有哪些動作
|
jsp: include,用來在頁面被請求時引入一個檔案, |
![]() |
|
jsp : useBean,用來尋找或者實體化一個JavaBean, |
![]() |
|
jsp: setProperty,用來設定已經實體化的Bean物件的屬性 |
![]() |
|
jsp : getProperty,用來獲取某個JavaBean的屬性 |
![]() |
|
jsp:foward,用來把請求轉到一個新頁面 |
![]() |
|
jsp: plugin,用于在瀏覽器中播放或顯示一個物件 |
![]() |
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/440416.html
標籤:其他
上一篇:統計學習:EM演算法及其在高斯混合模型(GMM)中的應用
下一篇:Java案例之評委打分






