java面試題庫
⑴ java基礎面試題有哪些
下面是10道java基礎面試題,後附答案
1.什麼是 Java 虛擬機?為什麼 Java 被稱作是「平台無關的編程語言」?
Java 虛擬機是一個可以執行 Java 位元組碼的虛擬機進程。Java 源文件被編譯成能被 Java 虛擬機執行的位元組碼文件。
Java 被設計成允許應用程序可以運行在任意的平台,而不需要程序員為每一個平台單獨重寫或者是重新編譯。Java 虛擬機讓這個變為可能,因為它知道底層硬體平台的指令長度和其他特性。
2.「static」關鍵字是什麼意思?Java 中是否可以覆蓋(override)一個 private 或者是static 的方法?
「static」關鍵字表明一個成員變數或者是成員方法可以在沒有所屬的類的實例變數的情況下被訪問。
Java 中 static 方法不能被覆蓋,因為方法覆蓋是基於運行時動態綁定的,而 static 方法是編譯時靜態綁定的。static 方法跟類的任何實例都不相關,所以概念上不適用。
3.JDK 和 JRE 的區別是什麼?
Java 運行時環境(JRE)是將要執行 Java 程序的 Java 虛擬機。它同時也包含了執行 applet 需要的瀏覽器插件。Java 開發工具包 (JDK)是完整的 Java 軟體開發包,包含了 JRE,編譯器和其他的工具(比如:JavaDoc,Java 調試器),可以讓開發者開發、編譯、執行 Java 應用程序。
4.是否可以在 static 環境中訪問非 static 變數?
static 變數在 Java 中是屬於類的,它在所有的實例中的值是一樣的。當類被 Java 虛擬機載入的時候,會對 static 變數進行初始化。如果你的代碼嘗試不用實例來訪問非 static 的變數,編譯器會報錯,因為這些變數還沒有被創建出來,還沒有跟任何實例關聯上。
5.Java 支持的數據類型有哪些?什麼是自動拆裝箱?
Java 語言支持的 8 中基本數據類型是:
byte
short
int
long
float
double
boolean
char
自動裝箱是 Java 編譯器在基本數據類型和對應的對象包裝類型之間做的一個轉化。比如:把 int 轉化成 Integer,double 轉化成 double,等等。反之就是自動拆箱。
6.Java 支持多繼承么?
不支持,Java 不支持多繼承。每個類都只能繼承一個類,但是可以實現多個介面。
7.Java 中,什麼是構造函數?什麼是構造函數重載?什麼是復制構造函數?
當新對象被創建的時候,構造函數會被調用。每一個類都有構造函數。在程序員沒有給類提供構造函數的情況下,Java 編譯器會為這個類創建一個默認的構造函數。
Java 中構造函數重載和方法重載很相似。可以為一個類創建多個構造函數。每一個構造函數必須有它自己唯一的參數列表。
Java 不支持像 C++中那樣的復制構造函數,這個不同點是因為如果你不自己寫構造函數的情況下,Java 不會創建默認的復制構造函數。
8.Java 中的方法覆蓋(Overriding)和方法重載(Overloading)是什麼意思?
Java 中的方法重載發生在同一個類裡面兩個或者是多個方法的方法名相同但是參數不同的情況。與此相對,方法覆蓋是說子類重新定義了父類的方法。方法覆蓋必須有相同的方法名,參數列表和返回類型。覆蓋者可能不會限制它所覆蓋的方法的訪問。
9.介面和抽象類的區別是什麼?
Java 提供和支持創建抽象類和介面。它們的實現有共同點,不同點在於:
介面中所有的方法隱含的都是抽象的。而抽象類則可以同時包含抽象和非抽象的方法。
類可以實現很多個介面,但是只能繼承一個抽象類
類如果要實現一個介面,它必須要實現介面聲明的所有方法。但是,類可以不實現抽象類聲明的所有方法,當然,在這種情況下,類也必須得聲明成是抽象的。
抽象類可以在不提供介面方法實現的情況下實現介面。
Java 介面中聲明的變數默認都是 final 的。抽象類可以包含非 final 的變數。
Java 介面中的成員函數默認是 public 的。抽象類的成員函數可以是 private, protected 或者是 public。
介面是絕對抽象的,不可以被實例化。抽象類也不可以被實例化,但是,如果它包含 main 方法的話是可以被調用的。
10.什麼是值傳遞和引用傳遞?
對象被值傳遞,意味著傳遞了對象的一個副本。因此,就算是改變了對象副本,也不會影響源對象的值。
對象被引用傳遞,意味著傳遞的並不是實際的對象,而是對象的引用。因此,外部對引用對象所做的改變會反映到所有的對象上。
最後祝你面試順利!
⑵ java面試題
1. List 以特定次序來持有元素,可有重復元素。 Set 無法擁有重復元素 , 內 部
排序。 Map 保存 key-value 值, value 可多值。
2. ArrayList 是使用數組方式存儲數據,此數組元素數大於實際存儲的數據以便增加和插入元素,它們都允許直接按序號索引元素,但是插入 元素要涉及數組元素移動等內存操作,所以索引數據快而插入數據慢, 而LinkedList 使用雙向鏈表實現存儲,按序號索引數據需要進行前向或後向遍歷 ,但是插入數據時只需要記錄本項的前後項即可,所以插入速度較快。
3.try 用來指定一塊預防所有 「 異常 」 的程序;
catch 子句緊跟在 try 塊後面,用來指定你想要捕捉的 「 異常 」 的類型;
throw 語句用來明確地拋出一個 「 異常 」 ;
throws 用來標明一個成員函數可能拋出的各種 「 異常 」 ;
Finally 為確保一段代碼不管發生什麼 「 異常 」 都被執行一段代碼;
可以在一個成員函數調用的外面寫一個 try 語句,在這個成員函數內部寫另 一
個 try 語句保護其他代碼。每當遇到一個 try 語句, 「 異常 」 的框架就放到堆 棧
上面,直到所有的 try 語句都完成。如果下一級的 try 語句沒有對某種 「 異常 」
進行處理,堆棧就會展開,直到遇到有處理這種 「 異常 」 的 try 語句。
4. Java 通過面向對象的方法進行異常處理,把各種不同的異常進行分類,並提供了良好的介面。在 Java 中,每個異常都是一個對象,它是 Throwable 類或其它子類的實例。當一個方法出現異常後便拋出一個異常對象,該對象中包含 有異常信息,調用這個對象的方法可以捕獲到這個異常並進行處理。 Java 的異常處理是通過 5 個關鍵詞來實現的: try 、 catch 、 throw 、 throws 和 finally 。一般情況下是用 try 來執行一段程序,如果出現異常,系統會拋出( throws )一 個異常,這時候你可以通過它的類型來捕捉( catch )它,或最後( finally )由 預設處理器來處理。
⑶ java面試題:一個人早上八點上山,晚上八點到達山頂。第二天早上八點下山,晚上八點到達山底。
java面試題的解析方式(思路如下):
public static void main(String[] args) {
// TODO Auto-generated method stub
int up = 8;
int down = 8;
while(up<=20){
if((up == 20-6) &&(up == 20-6)){
System.out.println("在"+up+"時到達同一地點");
break;
}
up += 1;
down += 1;
}
}
微軟面試題的背後
微軟的奇葩面試題答案並不重要,重要的是思考過程,而思考過程體現了你是否擁有公司所看重的能力,不僅是微軟,其他公司的面試也是為了測試你的某種能力,如果你提前培養了這種能力,相當於知道了面試的「考綱」,在面試中自然就從容不迫,游刃有餘了。
平時要知道轉化能力是看透問題,然後找到解決方案的能力。所以轉化能力最重要的是如何看透問題,也就是你思考問題的方式。
⑷ java面試題
1抽象:抽象就是忽略一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象並不打算了解全部問題,而只是選擇其中的一部分,暫時不用部分細節。抽象包括兩個方面,一是過程抽象,二是數據抽象。
2繼承:繼承是一種聯結類的層次模型,並且允許和鼓勵類的重用,它提供了一種明確表述共性的方法。對象的一個新類可以從現有的類中派生,這個過程稱為類繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從它的基類那裡繼承方法和實例變數,並且類可以修改或增加新的方法使之更適合特殊的需要。
3封裝:封裝是把過程和數據包圍起來,對數據的訪問只能通過已定義的界面。面向對象計算始於這個基本概念,即現實世界可以被描繪成一系列完全自治、封裝的對象,這些對象通過一個受保護的介面訪問其他對象。
4多態性:多態性是指允許不同類的對象對同一消息作出響應。多態性包括參數化多態性和包含多態性。多態性語言具有靈活、抽象、行為共享、代碼共享的優勢,很好的解決了應用程序函數同名問題。
5.基本數據類型包括byte、char 、chort、int、long、float、double、boolean
java.lang.String類是final類型的,因此不可以繼承這個類、不能修改這個類。為了提高效率節省空間,我們應該用StringBuffer類
6.Java 提供兩種不同的類型:引用類型和原始類型(或內置類型)。Int是java的原始數據類型,Integer是java為int提供的封裝類。Java為每個原始類型提供了封裝類。
原始類型封裝類booleanBoolean charCharacter byteByte shortShort intInteger longLong floatFloat doubleDouble
引用類型和原始類型的行為完全不同,並且它們具有不同的語義。引用類型和原始類型具有不同的特徵和用法,它們包括:大小和速度問題,這種類型以哪種類型的數據結構存儲,當引用類型和原始類型用作某個類的實例數據時所指定的預設值。對象引用實例變數的預設值為 null,而原始類型實例變數的預設值與它們的類型有關。
7.JAVA平台提供了兩個類:String和StringBuffer,它們可以儲存和操作字元串,即包含多個字元的字元數據。這個String類提供了數值不可改變的字元串。而這個StringBuffer類提供的字元串進行修改。當你知道字元數據要改變的時候你就可以使用StringBuffer。典型地,你可以使用StringBuffers來動態構造字元數據。
8.異常表示程序運行過程中可能出現的非正常狀態,運行時異常表示虛擬機的通常操作中可能遇到的異常,是一種常見運行錯誤。java編譯器要求方法必須聲明拋出可能發生的非運行時異常,但是並不要求必須聲明拋出未被捕獲的運行時異常。
9.Servlet被伺服器實例化後,容器運行其init方法,請求到達時運行其service方法,service方法自動派遣運行與請求對應的doXXX方法(doGet,doPost)等,當伺服器決定將實例銷毀的時候調用其destroy方法。
與cgi的區別在於servlet處於伺服器進程中,它通過多線程方式運行其service方法,一個實例可以服務於多個請求,並且其實例一般不會銷毀,而CGI對每個請求都產生新的進程,服務完成後就銷毀,所以效率上低於servlet。
10.ArrayList和Vector都是使用數組方式存儲數據,此數組元素數大於實際存儲的數據以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數組元素移動等內存操作,所以索引數據快而插入數據慢,Vector由於使用了synchronized方法(線程安全),通常性能上較ArrayList差,而LinkedList使用雙向鏈表實現存儲,按序號索引數據需要進行前向或後向遍歷,但是插入數據時只需要記錄本項的前後項即可,所以插入速度較快。
⑸ Java編程常見面試題目,要求正確答案
1.
final關鍵字,修飾類,方法,或者成員變數為最終的,使其不可被修改
finally可跟在try catch語句或者try語句後使用,表示這個方法一定會被執行
finalize通知垃圾回收機制回收被finalize標示的對象,但不保證馬上就會執行
2.
可以繼承也可以實現介面
由於構造方法必須與類型一致,所以其沒有構造方法,繼承有參構造方法必須調用父類的
直接new interface就是實現介面
3.
Nested Class (一般是C++的說法),Inner Class (一般是JAVA的說法)。
Java內部類與C++嵌套類最大的不 同就在於是否有指向外部的引用上
4.
&&短路與,當兩個條件,如a>b&&b>c,中a>b為假時b>c這個語句不會被執行而直接返回false
&兩個條件都會被執行
5.
最重要區別是hashtable是線程安全的(同步)而hashMap不是。。
6.
Collection 層次結構中的根介面,而Collections是一個工具類,它包含有各種有關集合操作的靜態方法
7.
系統測試的時候
8.
垃圾回收機制,因為java不能手動清理內存,而內存不清理系統資源會被耗盡,所以要有GC
9.
兩個,String pool一個"xyz",堆裡面一個String 對象
10.
11 -11
11.
s1+1,s1自動轉換成int類型,其結果返回一個int,所以報錯
12.
sleep在睡眠一段時間後會自己醒來,而wait不能,它必須別的線程喚醒它(notify或者notifyAll)
13.
java有標簽但是沒goto
14.
數組沒length()方法只有length這個屬性,String有
15.
方法的重寫Overriding和重載Overloading是Java多態性的不同表現。重寫Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被「屏蔽」了。如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類型。
16.
用equals ==只判斷內存地址是否一致,而equals判斷是否引用的是同一個對象
17.
IndexOutOfBoundsException 數組越界
NullPointerException 空指針異常
SystemException 系統異常
18.
error表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說內存溢出。不可能指望程序能處理這樣的情況。
exception 表示一種設計或實現問題。也就是說,它表示如果程序運行正常,從不會發生的情況
19.
List,Set是 Map不是
20.
abstract class可以有實現方法interface不能
21.
都不能
22.
都可以
23.
start()
24.
可以
25.
不可以,String 是final
26.
不能
27.
會,先執行finally里的,再return
28.
2<<3
29.
如果不重寫方法是不可以,但是重寫了就難說
30.
引用
31.
byte可以,因為其可以自動轉換成int類型,其他都不可以
32.
public class Singleton
{
private Singleton(){}
//在自己內部定義自己一個實例,是不是很奇怪?
//注意這是private 只供內部調用
private static Singleton instance = new Singleton();
//這里提供了一個供外部訪問本class的靜態方法,可以直接訪問
public static Singleton getInstance() {
return instance;
}
}
第二種形式:
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//這個方法比上面有所改進,不用每次都進行生成對象,只是第一次
//使用時生成實例,提高了效率!
if (instance==null)
instance=new Singleton();
return instance; }
}
⑹ java的面試題有哪些
正如圈內的大佬所說的那樣,基礎很重要。浙江優就業的老師幫你總結一下。
常見的面試題有:
安卓圖片載入後一直在手機如何優化?
解釋一下安卓中SharedPreferences類?
客戶端和服務端如何收發信息?
activity里如何發起http請求?
安卓UI線程調用sleep?
static類如何回收?
介面和抽象類
JVM垃圾回收演算法
如何區分哪些是老年代對象?
線程池
線程終止
設計模式
單例
JDBC
Runnable
run()
start()
區別?
Socket
靜態代碼塊和構造器的執行順序
final的map能否修改?
String
StringBuffer
StringBuild區別?
內存泄露?
ArraryList
LinkedList
HashMap原理
linux常用命令
查看進程PS
redis相關?
運行時異常
一個對象為空,怎麼進行處理?
泛型
哪裡用到?什麼好處
?
對資料庫進行一些操作,mybatis要進行哪些操作?
為什麼Java是跨平台?
匿名內部類能不能有外部內的介面?(反正跟匿名內部類有關)?
@Test
測試用例
幹嘛
如何獲取http的參數?
Controller的參數設置,為什麼是單例的?
@autowired裝載一個類,構造器里能不能直接調用這個類
?
spring和springmvc區別?
springmvc跨域?
鎖的種類等
望採納!
⑺ 求最新JAVA面試題目,越全越好!!!
這里有很多Java面經的,附答案和講解,自行下載即可:
Java資源教程專欄