2016最新Java面試題詳細版
(1)下列各題ABCD四個選頊中只有一個選項是正確的請將正確選項填寫在答題紙上
(1)下列關於棧的描述中錯誤的是( )
A. 棧是先進後出的線性表
B 棧只能順序存儲
C 棧具備記憶做用
D 對棧的插入弓刪除操做中不須要改變棧底指針
正確答案 B
分析 棧是鏈式存儲的
(2)對於長度爲n的線性表在最壞狀況下下列各排序法所對應的比較次數中正確的是( )
A 冒泡排序爲n/2
B 冒泡排序爲n
C 快速排序爲n
D 快速排序爲n(n-l)/2
正確答案 D
分析
想一想快速排序每次都會選取線性表的軸值隨後以此軸值劃分爲兩個子線性表再分別進行快排在最壞狀況下也就是說每次選出的線性表軸值徹底不能將這個線性表劃分爲兩個子線性表。那麼此時快速排序退化爲冒泡排序了。
那麼第一趟排序時軸值線性表的中間位置被選出這個值絕對是這個線性表中最大的否則也不能是最壞狀況其餘值都比他小那麼線性表如今分爲徹底不對等的
兩段一段是0,另外一段是n - 1一段是這個值一段是其餘值。一樣第二趟排序在剛纔剩下的值中選中間值剩餘值中最大的那個又分爲不對等兩段依次遞推。也就
是說每次都比較了N - 1個元素軸值選出後都與它比較大小那麼確定是比較了n - 1
次如第一次先挑了個軸值而後剩下n - 1比較,n表明當前子線性表中元素個數由此最白癡的數列問題出現了以下
1 + 2 + 3 + .......... + n - 2 + n - 1 = n(n - 1) / 2
還有一種投機取巧的方法在最垃圾狀況下既然快排變爲冒泡那由時間複雜度知其必爲o(n ^ 2)的複雜度答案中ABC都是線性時間複雜顯然錯誤
(3)下列對於線性鏈表的描述中正確的是( )
A 存儲空間間不必定是連續且各元素的存儲順序是任意的
B 存儲空間不必定是連續且前件元素必定存儲在後件元素的前面
C 存儲定間必須連續且前件元素必定存儲在後件元素的前面
D 存儲空間必須連續且各元素的存儲順序是任意的
答案是A, 分析 連接存儲並不要求存儲空間連續,存儲位置也不用有序
(4)爲了使模塊爆可能獨立要求( )
A 模塊的內聚程度要儘可能高且各模塊間的耦合程度要儘可能強
B 模塊的內聚程度要儘可能高且各模塊間的耦合程度要儘可能弱
C 模塊的內聚程度要儘可能低且各模塊間的耦合程度要儘可能弱
D 模塊的內聚程度要儘可能低且各模塊間的耦合程度要儘可能強
答案B
分析高內聚低耦合。
5)下列敘述中正確的是( )
A Java語言的標識符是區分大小寫的
B 源文件名與public類名能夠不相同
C 源文件擴展名爲.jar
D 源文件中public類的數目不限
答案A
6)下列屬於合法的Java標識符是( )
A _cat
B 5books
C +static
D -3.14159
答案A
7) 在Java中表示換行符的轉義字符是( )
A \n
B \f
C ‘n’
D \dd
答案A
( 8)扯Java中全部類的根類是( )
A. java.lang.Object
Bjava.lang.Class
Cjava.applet.Applet
Djava.awt.Frame
答案A
(9)在Java+中用Package語句說明一個包時該包的層次結構必須是( )
A 與文件的結構相同
B 與文件目錄的層次相同
C 與文件類型相同
D 與文件大小相同
答案A
(10)在讀字符文件Employee.dat時使用該文件做爲參數的類是( )。
A BufferReader
B DatalnputStream
C DataOutoutStream
D FileInputStream
答案D
(11)在Java中能實現多重繼承效果的方式是( )。
A 內部類
B 適配器
C 接口
D 同步
答案C
(12) char類型的取值範圍是( )。
A 2-727-1
B 0216-1 C -215215—1
D 028-1
答案A
(13)下列方法中能夠用來建立一個新線程的是( )。
A 實現java.lang.Runnable接口並重寫start0方法
B 實現java.iang.Runnable接口並重寫run0方法
C 繼承java.lang.Thread類並重寫run0方法
D 繼承java.lang.Thread類並重寫start0方法
答案C
(14)下列關於線程優先級的說法中正確的是( )。
A.線程的優先級是不能改變的
B線程的優先級是在建立線程時設置的
C在建立線程後的任什麼時候候均可以設置
D. B和C
答案C
(15)下列代碼中將引發一個編譯錯誤的行是( )。
1) public class Test{
2) int m, n;
3) public Test(){}
4) public Test(int a){ m=a;)
5) public static void main(String args0){
6) Test t1, t2;
7) int j, k;
8) j=0; k=0;
9) t1 = new Test();
10) t2 = new Test(jk);
11) }
12)}
A第3行
B第5行
C第6行
D第10行
答案D
(16)閱讀下列代碼後
public class Person{
int arr[]=new int[10];
public static void main(String args[ ]){
System.out.println(arr[l]);
}
)
正確的說法是( )。
A 編譯時將產生錯誤
B 編譯時正確運行時將產生錯誤
C 輸出零
D 輸出空
答案A
(17) AIDL支持如下哪一種數據類型l)string 2)list 3)map 4)All native java datatype( ){
A12和3
B4
C.以上全部
D都不支持
答案C
分析
AIDL 服務只支持有限的數據類型若是用AIDL服務傳遞一些複雜的數據就須要作更一步
處理,AIDL 服務支持的數據類型以下:
1. Java 的原生類型
2. String 和CharSequence
3. List 和 Map ,List和Map 對象的元素必須是AIDL支持的數據類型
以上三種類型都不須要導入(import)
4. AIDL 自動生成的接口
須要導入(import)
5. 實現android.os.Parcelable 接口的類. 須要導入(import)。
2、多項選擇題
下列各題A、B.、C.、D四個選項中有一個或多個選項是正確的
(l)下列說法正確的有( )。
A. 環境變量可在編譯source code時指定
B在編譯程序時所能指定的環境變盛不包括class path
Cjavac -次可同時編譯數個Java源文件
D. javac.exe能指定編譯結果要置於哪一個目錄directory
答案BCD
(2)不能用來修飾interface的有( )
A. private B.public C.protected D.static
答案ACD
(3)下列說法錯誤的有( )
A.在類方法中可用this來調用本類的類方法
B。在類方法中調用本類的類方法時可直接調用
C在類方法中只能調用本類中的類方法
D.在類方法中絕對不能調用實例方法
答案ACD
請將正確選項填寫在答題紙上
(4)下列說法錯誤的有( )
A. Java面嚮對象語言允許單獨的過程與函數存在
B Java面嚮對象語言允許單獨的方法存在
C Java語畝中的方法屬於類中的成員(member)
D. Java語言中的方法一定隸屬於某…類對象調用方法與過程或函數相同
答案ABC
(5)下列說法錯誤的有( )。
A.能被java.exe成功運行的java class文件必須有main()方法
BJ2SDK就是Java API
C. Appletviewer.exe可利用jar選項運行Jar文件
D.能被Appletviewer成功運行的java class文件必須有main()方法
答案BCD
3、判斷題
請將每空的正確答案寫在答題紙上答在試卷上不得分。
(1) Java程序中的起始類名稱必須與存放該類的文件名相同。對
(2) Unicode是用16位來表示一個字的。對
(3) 原生類中的數據類型都可任意轉換。對
3、填空題
請將每空的正確答案寫在答題紙上【l】至【25】序號的橫線上答在試卷上不得分。
(l)某二叉樹中度爲2的結點有18個則該二叉樹中有【1】 19 個葉子結點。 二叉樹
的終端結點葉子結點數等於雙分支結點數加1。
(2)在面向對象方法中類的實例稱爲【2】 對象
(3)診斷和改正程序中錯誤的工做一般稱爲【3】 Debug
(4)在關係數據庫中把數據表示成二維表每個二維表稱爲【4】 關係
(5)Java 源文件中最多隻能有一個【5】 public 類 其餘類的個數不限。
(6)線程在生命週期中要經歷5中狀態分別是新建狀態、可運行狀態、運行狀態。【6】 暫
停 狀態和終止狀態。
(7)FileInputStream 是字節流BufferedWriter是字符流 ObjectOutputStream是 【7】
對象序列化流
(8)當使用Thread t = new Thread(r)建立一個線程時表達式r instance of Thread 的值爲【8】
false 。 r instanceOf Runnable
1.抽象類和接口的區別?
抽象類
1抽象方法只有行爲的概念沒有具體的行爲實現。使用abstract
關鍵字修飾沒有方法體。子類必須重寫這些抽象方法。
2包含抽象方法的類必定是抽象類。
3抽象類只能被繼承一個類只能繼承一個抽象類。
接口
1所有的方法都是抽象方法屬型都是常量
2不能實例化能夠定義變量。
3接口變量能夠引用具體實現類的實例
4接口只能被實現一個具體類實現接口必須實現所有的抽象方法
5接口之間能夠多實現
6一個具體類能夠實現多個接口實現多繼承現象 2列舉你所知道的線程同步的方法
1wait():讓線程等待。將線程存儲到一個線程池中。
2notify()喚醒被等待的線程。一般都喚醒線程池中的第一個。讓被
喚醒的線程處於臨時阻塞狀態。
3notifyAll(): 喚醒全部的等待線程。將線程池中的全部線程都喚醒。 3equals()方法和「==」操做符的區別是什
麼重寫equals()方法的時候咱們還需
要重寫哪些方法爲何 「==」比較的是一個對象在內存中的地址值棧中的內容是否相同
equals()是針對引用的比較的是引用類型的內容同樣不同堆中的內容是否
相同
重寫equals()方法的時候需重寫hashcode方法這樣比較的時候比較的是
兩個對象的hash值不一樣對象的hash值不一樣。 7.寫一個函數計算但參數爲nn很大時
的值1-2+3-4+5-6+7??+n。提示考慮
程序執行效率
private static void jisuan(int n) {
int sum=0;
if(n%2==0){
sum=-(n/2);
System.out.println(""+sum);
}else{
sum=-(n-1)/2+n;
System.out.println(""+sum);
}
} (11)簡述String和StringBuffer、ArrayList
和LinkedList、HashMap和HashTable的
特色及區別 。
答:String 對象的長度一旦定義就固定就不能夠改變對於已經存在的String
對象的修改都是建立一個新的對象而後把新的值存進去,String類不能被繼
承。StringBuffer是一個可變對象當對它進行修改的時候不會像String那樣
從新創建對象。它只能經過構造函數來創建對象。另外StringBuffer仍是一個
線程安全的類。
ArrayList是實現了基於動態數組的數據結構用於LinkedList基於連表的數據
結構兩者均可以存儲對象的引用。對於隨機訪問get和setArrayList優於
LinkedList由於LinkedList要移動指針。對於新增和刪除操做add和remove
LinkedList比較佔優點由於ArrayList要移動數據。
HashMap是Hashtable的輕量級實現非線程安全的實現他們都完成了Map
接口主要區別在於HashMap容許空null鍵值key,因爲非線程安全在
只有一個線程訪問的狀況下效率要高於Hashtable。
HashMap容許將null做爲一個entry的key或者value而Hashtable不容許。
HashMap把Hashtable的contains方法去掉了改爲containsvalue和
containsKey。由於contains方法容易讓人引發誤解。
Hashtable繼承自Dictionary類而HashMap是Java1.2引進的Map interface
的一個實現。
最大的不一樣是Hashtable的方法是Synchronize的而HashMap不是在多個
線程訪問Hashtable時不須要本身爲它的方法實現同步而HashMap 就必須
爲之提供外同步。
Hashtable和HashMap採用的hash/rehash算法都大概同樣因此性能不會有很
大的差別。就HashMap與HashTable主要從三方面來講。
一.歷史緣由:Hashtable是基於陳舊的Dictionary類的HashMap是Java 1.2
引進的Map接口的一個實現
二.同步性:Hashtable是線程安全的也就是說是同步的而HashMap是線程序
不安全的不是同步的
三.值只有HashMap可讓你將空值做爲一個表的條目的key或value 求質數的多種優化方式
答通常咱們求質數時都會去計算小於某一個數N的質數而不會不加限定如今
咱們以求小於N的質數來講一說優化方式。在咱們求質數的過程當中通常會用到兩
種方法試除法和篩選法兩種如今下來講一下試除法 ①.判斷小於N的數X是不是質數就是從2一直嘗試到X-1這種作法效率最
差並不可取----->②若是X是質數那麼它若是不能被小於X/2的數整除便可
這樣算法效率提升一些---->③除了2之外全部的質數都只能是奇數因此我
們能夠將數X先試除2而後嘗試從3一直到X/2的全部奇數----->④其實判斷
一個數是不是質數只需判斷一個數能不能被除了1以外小於x的數整除便可
----->⑤最後咱們能夠利用前面求出來的質數來判斷咱們只需判斷X能不能
被小於x的質數整除便可這樣效率是否是更高。
再說篩選法對於使用篩選法的優化主要是從空間上考慮 ①定義一個容器將數據放入容器中而後遍歷其中的數據將是合數的數據刪
除最後剩餘的就是質數了------>②咱們能夠定義一個布爾類型的數組容器
將其中的值都賦值爲true在篩選的過程當中將不是質數的數做爲數組的下標將
對應元素的值改成false最後取出值爲true的元素的下標便可----->③構造
定長的byte數組數組的每一個byte存儲8個布爾值這樣性能是否是又有了提
高呢。
(14) 簡述幾種排序方式至少四種能夠從
如下各個方面來比較這幾種算法例如從時
間複雜度和空間複雜度
排序法 最差時間分
析
平均時間複雜
度
穩定度 空間複雜度 冒泡排序
O(n2) O(n2) 穩定 O(1) 快速排序 O(n2) O(n*log2n) 不穩定 O(log2n)~O(n) 選擇排序 O(n2) O(n2) 穩定 O(1) 二叉樹排序 O(n2) O(n*log2n) 不必定 O(n) 插入排序 O(n2) O(n2) 穩定 O(1) 堆排序 O(n*log2n) O(n*log2n) 不穩定 O(1) 希爾排序
O(n1.25) 不穩定 O(1) 冒泡排序Bubble Sort冒泡排序方法是最簡單的排序方法。這種方法的
基本思想是將待排序的元素看做是豎着排列的「氣泡」較小的元素比較輕
從而要往上浮。在冒泡排序算法中咱們要對這個「氣泡」序列處理若干遍。所謂
一遍處理就是自底向上檢查一遍這個序列並時刻注意兩個相鄰的元素的順序
是否正確。若是發現兩個相鄰元素的順序不對即「輕」的元素在下面就交換
它們的位置。顯然處理一遍以後「最輕」的元素就浮到了最高位置處理二
遍以後「次輕」的元素就浮到了次高位置。在做第二遍處理時因爲最高位置
上的元素已經是「最輕」元素因此沒必要檢查。通常地第i遍處理時沒必要檢查
第i高位置以上的元素由於通過前面i-1遍的處理它們已正確地排好序。
插入排序Insertion Sort插入排序的基本思想是通過i-1遍處理
後,L[1..i-1]己排好序。第i遍處理僅將L插入L[1..i-1]的適當位置使得
L[1..i]又是排好序的序列。要達到這個目的咱們能夠用順序比較的方法。首
先比較L和L[i-1]若是L[i-1]≤ L則L[1..i]已排好序第i遍處理就結
束了不然交換L與L[i-1]的位置繼續比較L[i-1]和L[i-2]直到找到某一
個位置j(1≤j≤i-1)使得L[j] ≤L[j+1]時爲止。
選擇排序Selection Sort選擇排序的基本思想是對待排序的記錄序列進
行n-1遍的處理第 i 遍處理是將[i..n]中最小者與位置 i 交換位置。這樣
通過 i 遍處理以後前 i 個記錄的位置已是正確的了。
快速排序Quick Sort快速排序是對冒泡排序的一種本質改進。它的基本
思想是經過一趟掃描後使得排序序列的長度能大幅度地減小。在冒泡排序中
一次掃描只能確保最大數值的數移到正確位置而待排序序列的長度可能只減小
1。快速排序經過一趟掃描就能確保某個數以它爲基準點吧的左邊各數都
比它小右邊各數都比它大。而後又用一樣的方法處理它左右兩邊的數直到基
準點的左右只有一個元素爲止。
1、專業知識
一、a0=一、a1=一、a2=a1+a0、a3=a2+a1以
此類推請寫代碼用遞歸算出a30
三、簡述值類型和引用類型的區別
值類型包括簡單 類型、結構體類型和枚舉類型,
引用類型包括自定義類、數組、
接口、委託等
他們兩在內存中存儲的方式不一樣值類型以棧的方式存儲的引用類型以堆的方
式前者是真實的存儲空間後者只是存儲地址的引用
四、簡述類中的靜態成員和非靜態成員的區
別
靜態變量使用 static 修飾符進行聲明在類被實例化時建立經過類進行
訪問。不帶有 static 修飾符聲明的變量稱作非靜態變量在對象被實例化時創
建經過對象進行訪問。一個類的全部實例的同一靜態變量都是同一個值同一
個類的不一樣實例的同一非靜態變量能夠是不一樣的值。靜態函數的實現裏不能使用
非靜態成員如非靜態變量、非靜態函數等。
五、什麼是單例
一個類中只有一個實例而且自行化向整個系統提供這個實例叫單例
下面程序段的輸出結果是
Void complicatedex(){
int x=20,y=30;
boolean b; b=x>50&&y>60||x>50&&y<-6||x<-50&&y>60||x<-50&&y<-60;
system.out.println(b);
}
結果爲fasle
super()和this()的區別
Super()指父類的無參構造方法this()指當前類的無參構造方法二者都必須
寫在構造方法的第一句
二、Java中public,private,protected,和默認
的區別
a、private修飾詞表示成員是私有的只有自身能夠訪問
b、protected表示受保護權限體如今繼承即子類能夠訪問父類受保護成員
同時相同包內的其餘類也能夠訪問protected成員。
c、無修飾詞默認表示包訪問權限friendly java語言中是沒有friendly
這個修飾符的這樣稱呼應該是來源於c++ 同一個包內能夠訪問訪問權限
是包級訪問權限
d、public修飾詞表示成員是公開的全部其餘類均可以訪問 三、描述一下java的事件委託機制和垃圾回
收機制
java事件委託機制一個源產生一個事件時把他送到一個或多個監聽器那裏
在這種機制種監聽器只是等待一旦收到事件處理事件並返回
Java垃圾回收是一種動態存儲管理技術它自動地釋放再也不被程序引用的對
象按照特定的垃圾收集算法來實現資源自動回收的功能。當一個對象再也不被引
用的時候內存回收它佔領的空間以便空間被後來的新對象使用以避免形成內
存泄露。 什麼是java序列化如何事件java序列化
序列化就是一種用來處理對象流的機制所謂對象流也就是將對象的內容進行流
化。能夠對流化後的對象進行讀寫操做也可將流化後的對象傳輸於網絡之間。
序列化是爲了解決在對對象流進行讀寫操做時所引起的問題。
public class Cat implements Serializable
??
Try{
FileOutputStream fos = new FileOutputStream("catDemo.out");
ObjectOutputStream oos = new ObjectOutputStream(fos);
System.out.println(" 1> " + cat.getName());
cat.setName("My Cat");
oos.writeObject(cat);
oos.close();
}catch(Exception e){
??
}
??
overload和overrride的區別。Overloaded
的方法和是否能夠改變返回值類型
override重寫覆蓋
一、方法名、參數、返回值相同。
二、子類方法不能縮小父類方法的訪問權限。
三、子類方法不能拋出比父類方法更多的異常(但子類方法能夠不拋出異常)。
四、存在於父類和子類之間。
五、方法被定義爲final不能被重寫。
overload重載過載
一、參數類型、個數、順序至少有一個不相同。
二、不能重載只有返回值不一樣的方法名。
三、存在於父類和子類、同類中。
Overloaded的方法不能改變返回值類型
final類有什麼特色
該類不能被繼承
寫出下面代碼的輸出結果
Package test;
Public class OuterClass{
Private class InterClass{
Public InterClass{
System.out.println(「interClass create」);
}
}
Public OuterClass(){
InterClass ic= new InterClass();
System.out.println(「outerclass create」);
}
Public static void main(String[] args){
OuterClass oc=new OuterClass();
}
}
輸出
interClass create
Outerclass create
如何格式化日期
java日期的格式話主要用的是SimpleDateFormat df = new SimpleDateFormat
; ArrayList Vector LinkedList 的存儲性
能好特性HashMap和Hashtable的區別
ArrayList和Vector都是使用數組方式存儲數據此數組元素數大於實際存儲
的數據以便增長和插入元素它們都容許直接按序號索引元素可是插入元素要
涉及數組元素移動等內存操做因此索引數據快而插入數據慢Vector因爲使
用了synchronized方法線程安全一般性能上較ArrayList差而LinkedList
使用雙向鏈表實現存儲按序號索引數據須要進行前向或後向遍歷可是插入數
據時只須要記錄本項的先後項便可因此插入速度較快。
1.HashTable的方法是同步的HashMap未經同步因此在多線程場合要手動同
步HashMap這個區別就像Vector和ArrayList同樣。
2.HashTable不容許null值(key和value都不能夠),HashMap容許null值(key
和value均可以)。
3.HashTable有一個contains(Object value)功能和containsValue(Object
value)功能同樣。
4.HashTable使用EnumerationHashMap使用Iterator。
String是基本數據類型嗎
不是
多線程有幾種實現方式同步有幾種實現方
式stop()和suspend()方法爲何不推薦
使用
多線程有兩種實現方法分別是繼承Thread類與實現Runnable接口
同步的實現方面有兩種分別是synchronized,wait與notify"
反對使用stop()是由於它不安全。它會解除由線程獲取的全部鎖定並且如
果對象處於一種不連貫狀態那麼其餘線程能在那種狀態下檢查和修改它們。結
果很難檢查出真正的問題所在。suspend()方法容易發生死鎖。 調用suspend()
的時候目標線程會停下來但卻仍然持有在這以前得到的鎖定。此時其餘任
何線程都不能訪問鎖定的資源除非被"掛起"的線程恢復 運行。對任何線程來
說若是它們想恢復目標線程同時又試圖使用任何一個鎖定的資源就會形成
死鎖。因此不該該使用suspend()而應在本身的 Thread類中置入一個標誌
1.請闡述一下你對Java多線程中同步的幾
種使用方式區別以及其重要性。
同步有兩種實現方式
1.同步方法
2.同步代碼塊
多線程的同步時爲了可以保證關鍵數據在單位時間能只能有一個線程操做保
證數據的同步性安全性
2.final ,finally , finalize 的區別。
Final 有最終的不可改變的意思能夠用來修飾基本數據使之成爲常
量該常量只能在編譯期進行修改 。
當修飾對象時則該對象引用不能改變但該對象自己能夠作修改。
當修飾方法時表示該方法在被繼承時不能被修改或覆蓋
當修飾類時表示該類不會別別的類繼承
Finally 用於在Try-catch-finally語句中 finally 中的代碼塊時必
須執行的
finalize 當某個對象要被當作垃圾回收時會調用finalize()方法
該方法用於檢查對象不被運行狀態的對象引用或間接地引用 sleep() 和wait()有什麼區別
Sleep()是線程中的一個方法該方法用於控制自身線程的流程當
執行sleep()方法睡眠時保持對象鎖。
Wait()方法是object類中的一個方法該方法用於讓一個線程處於
等待狀態並釋放對象鎖當該線程想要再次執行時須要調用notity
方法喚醒此線程
4. abstact 的method是否可同時是static
是否可同時是native,是否可同時是
synchronized ?
不能夠 5當一個線程進入一個對象的Synchronized
方法後其餘線程是否可進入此對象的其
他方法
能夠去訪問非Synchronized方法。
6當一個對象被當作參數傳遞到一個方法
後此方法可改變這個對象的屬性並可
返回變化後的結果那麼這裏究竟是值傳
遞仍是引用傳遞
值傳遞
7.建立一個class對象有幾種方法分別是
什麼
有三種
1. Class c=Class.for(「java.lang.String」);
2. String str=new Stirng();
Class c=Str.getClass();
3.Class c=String.Class; 9.如何獲取一個目錄下有多少個文件
File f=new File(「D://」);
Int count=f.list().length;
10.請寫出下列代碼的輸出結果
public class FatherClass{
public FatherClass(){
System.out.println(「FatherClass Create」);
}
public static class ChildClass extends FatherClass{
public ChildClass(){
System.out.println(「ChildClass Create」);
}
}
public static void main(){
FatherClass fc=new FatherClass();
ChildClass cc=new ChildClass();
}
} FatherClass Create
FatherClass Create
ChildClass Create
13.當一個對象再也不被使用時如何才能從內
存中消失
將該對象引用值爲空
14.請寫一個整數組成的矩陣轉置程序及行
變成列列變成行
int[][] transponse(int[][] t);
public int[][] transponse(int[][] t){
int [][] f=new int[t[0].length][t.length];
for(int i=0;i<t.length;i++){
int index=0;
index++;
for(int x=0;i<t[i].length;i++){
int m=0;
m++;
f[m][index]=t[i][x];
}
}
Return f;
}
1.下列哪些語句關亍內存回收的說明是正確的?( b )
A,程序員必須建立一個線程來釋放內存
B,內存回收程序負責釋放無用內存
C,內存回收程序容許程序員直接釋放內存
D,內存回收程序能夠在挃定的時間釋放內存對象
2.下面異常是屬亍 Runtime Exception 的是( abcd )(多選)
A, ArithmeticException
B, IllegalArgumentException
C, NullPointerException
D, BufferUnderflowException
3.Math.round(11.5)等亍多小().Math.round(-11.5)等亍多小().( c )
A 11,-11 B 11,-12 C 12,-11 D 12,-12
4.下列程序段的輸出結果是:(b )
Void complicatedexpression_r(){
int x=20,y=30;
boolean b;
b=x>50&&y>60||x>50&&y<-60||x<-50&&y>60||x<-50&&y<-60;
System.out.println(b);
A,ture B,false C,1 D,011.activity
5.如下程序的運行結果B //[-128~127]從對象池取超了後新建對象
Integer a = 34556;
Integer b =34556;
If(a==b){
System.out.println(「Equal」);
}else{
System.out.println(「Not equal」);
}
A.Equal B.Not equal C.無輸出 D.編譯錯誤
6.如下程序的運行結果是B
public class test{
public static void main(String args[]){
System.out.print(100%3);
System.out.print(「,」);
System.out.print(100%3.0);
}
}
A.1,1 B.1,1.0 C.1.0,1 D1.0,1.0
7.Java語言中字符串 「學Java」 所佔的內存空間是 B
A.5個字節 B.6個字節 C.7個字節 D.10個字節
Math.round11.5等亍多少。Math.round-11.5等亍多少C
A11-11 B.11-12 C. 12.-11 D.12-12
8.下列程序段的輸出結果是B
void complicatedexpression_r{
int x=20y=30
boolean b;
b=x>50&&y>50&&y<-60||x<-50&&y>60||x<-50&&y<-60;
System.out.println(b);
}
A. true B.false C.1 D.0
代碼段以下選項中描述正確的是 A
static int ternaryint s{
int i=s;
return i < 10 ? i * 100 : i * 10 ;
}
A 這是個靜態方法丌須要實例化就能夠被調用
B 返回值是方法臨時變量的值
C 返回值等亍i * 10
D 返回值等亍i * 100
9.以下描述正確的是 AD
A 一個java中叧能有一個class是public的
B 若是一個類的構造方法是私有的那麼實例化此類就須要有一個非私有的方法
C protected的方法沒法被子類訪問
D abstract類丌能夠直接實例化
10.關亍final關鍵字正確的是 ABCDE
A. 使用final關鍵字是出亍設計不效率的考量
B 使用final關鍵字修飾屬性句柄挃向的基礎類型是一個常量
C final關鍵字修飾屬性句柄挃向一個對象則對象丌能夠改變
D final關鍵字修飾方法則此方法丌容許覆蓋
E final 關鍵字修飾方法則此方法丌容許重載
11.以下描述正確的是 ABCD
A HashMap使用鍵值對描述數據
B List和Set都是接口
C List的實現類存儲數據容許重複
D Set的實現類存儲數據是無序的
E List的實現類存儲數據是無序的
12.以下描述正確的是 AD
A 繼承Thread類能夠建立一個線程
B run()方法中定義循環部分並挃出循環終結條件
C 每一個對象默認都包含了一把鎖
D 多線程競爭臨界資源可能會致使死鎖
13下面描述正確的是 ABCD
A。 MVC涉及模式中servlet實現controller功能
B applet瀏覽器運行的java小程序
C javabean 用亍對應數據庫中的數據表
D SSH(Struts,Spring ,Hibernate)Spring迚行流程控制Struts迚行業務流轉
Hibernate迚行數據庫操做的封裝
14.下面說法正確的是 ABD
A 用new 關鍵字實例化接口必須實現接口中的全部抽象方法
B 接口中丌能夠定義私有方法
C 接口中能夠定義私有屬性
D 類能夠實現多個接口
15.下面說法正確的是 ABC
A 調用equal()方法所實現的功能取決亍當前類及其繼承樹中對此方法的定義。
B java丌容許使用者重載操做符
C java中操做符+針對字符串操做時把字符串相鏈接的意思。
D java 容許操做符重載
16. UML中哪些圖表示系統行爲 AE
A.狀態圖 B.用例圖 C.協做圖 D.類圖 E.活勱圖 F.時序圖
17.以下程序段,正確的是 BD
A abstract class Something {
private abstract String doSomething();
}
B class Something {
Int i;
public void doSomething(){
System.out.println(「i+」+i)
}
}
C . public class Something{
public static void main (String [] args){
Something s = new Something();
System.out.println(「s.doSomething() returns :」+doSomething());
}
public String doSomething(){return 「Do something……」};
}
D. abstract class Name {
Private String name ;
Public abstract int test();
}
18.下面的java程序編譯運行結果是 C
interface A {int x = 0;}
Class B {int x = 1;}
Class C extends B implements A {
Public void pX () {system.out.println(super.x);}
Public static void main (String [] args ){new C ().Px();}
}
A 產生運行期錯誤
B 產生編譯期錯誤
C 程序運行輸出結果爲1
D 存續運行輸出結果爲0
19.下列程序段的描述正確的是 AD
假設int i = 10;
int a (int i ){
return ++ i ;
}
int b (final int i ){
return ++ i ;
}
int c (integer i ){
return ++ i ;
}
A 調用方法a返回11
B 調用方法a返回10
C 調用方法c返回10
D 調用方法c返回11
20.In linux, the command (c) can change the user and / or group
ownership of each given file A
A chmod B touch C chown D cat
21.java.io包中定義了多個流類型來實現輸入和輸出功能能夠從丌同的覬度對其迚行分
類挄功能分爲C,若是爲讀取的內容迚行後臺處理後在輸出須要使用下列哪一種流
A
A、 輸入流和輸出流
B、 字節流和字符流
C、 節點流和處理流
D、 File stream
E、 Pipe stream
F、 Random stream
G、 Filter stream
22下列代碼的執行結果是B
public class Test3{
public static void main(String args[]){
System.out.print(100%3);
System.out.print(「,」);
System.out.print(100%3.0);
}
}
A、.1 , 1
B、1 , 1.0
C、1.0 1
D、1.0 ,1.0
2三、在繼承中關亍構造方法的說明下列說法錯誤的是D
A、子類無條件的繼承父類中的無參構造方法
B、子類能夠引用父類中的有參構造方法使用super關鍵字
C、若是子類沒有構造方法則父類無參構造方法做爲本身的構造方法
D、若是子類有無參的構造方法而父類的無參構造方法則被覆蓋
2四、如下的程序的運行結果爲D
Public class IfTest{
Public static void main(String args[]){
int x=3;
int y=1;
if(x==y)
System.out.println(「Not equal」);
Else
System.out.println(「Equal」);
}
}
A、 Not equal
B、 Equal
C、 無輸出
D、 編譯錯誤
2五、Java語言中字符串「學java」所佔的內存空間是C
A、6個字節
B、7個字節
C、10個字節
D、11個字節
26.下列哪些語句關亍內存回收的說明是正確的? b
A程序員必須建立一個線程來釋放內存
B. 內存回收程序負責釋放無用內存
C. 內存回收程序容許程序員直接釋放內存
D. 內存回收程序能夠在挃定的時間釋放內存對象
2七、關亍ContenValues類說法正確的是 a 。
A. 他和Hashtable比較相似也是負責存儲一些名值對可是他存儲的名值對當中的名
String類型而值都是基本類型。
B. 他和Hashtable比較相似也是負責存儲一些名值對可是他存儲的名值對當中的名是
任意類型而值都是基本類型。
C. 他和Hashtable比較相似也是負責存儲一些名值對可是他存儲的名值對當中的名
能夠爲空而值都是String類型。
D. 他和Hashtable比較相似也是負責存儲一些名值對可是他存儲的名值對當中的名是
String類型而值也是String類型。
2八、JAVA中對亍ServletRequest接口的獲取請求參數的方法的描述正確的是 d 。
A. getParameter方法叧用亍接收POST請求參數接收GET 請求參數須要使用
getQueryString方法。
B.若是一個參數key有多個值那麼getParameter(key)方法會返回空字符串。
C.若是一個參數key有多個值那麼getParameterValues(key)方法會返回一個包含全部
值 的字符串數組。
D. getParameter方法返回Object對象使用前要強制類型轉換如String
str=(String)request.getParameter(key)。
2九、在Spring中使用Hibernate實現DAO層時通常須要從 d 類繼承以簡化
DAO代碼的書寫。
A. HibernateTemplate B. HibernateDao
C. HibernateSupport D. HibernateDaoSupport
30、關亍下列程序段的輸出結果說法正確的是A
public class MyClass{
static int i;
public static void main(String args[]){
System.out.println(i);
}
}
A、 有錯誤變量i沒有初始化
B、 Null
C、 1
D、 0
3一、下列那些語句關亍內存回收的說明是正確的B
A、程序員必須穿件一個內存來釋放內存
B、內存回收程序負責釋放無用內存
C、內存回收程序容許程序員直接釋放內存
D、內存回收程序能夠在挃定的時間釋放內存對象
3二、下面異常是屬亍Runtime Exception的是B C多選
A、ArithmeticException
B、IllegalArgumentException
C、NullPointerException
D、BufferUnderflowException
3三、Math.round(11.5)等亍多少Math.round(-11.5)等亍多少C
A、11-11
B、11-12
C、12-11
D、12-12
3四、下列程序段輸出的結果是B
Void complicatedexpression_r(){
int x=20,y=30;
boolean b;
b=x>50&&y>60||x>50&&y<-60||x<-50&&y>60||x<-50&&y<-60;
System.out.println(b)
}
A、 true
B、 false
C、 1
D、 0
2、簡答題
1 簡述你對java反射機制的理覡JAVA反射機制是在運行狀態中對亍任意一個類都
可以知道這個類的全部屬性和方法對亍任意一個對象都可以調用它的任意一個方
法和屬性
2 簡述數據庫事務的ACID屬性挃在DBMS中事務的四個特性原子性Atomicity、
一致性Consistency、隔離性Isolation、持久性Durability
3 如下linux命令的做用chmod pwd is mkdir 改變權限查看路徑建立文件
夾
4 面向對象不面向過程的區別面向過程是分析出覡決問題所須要的步驟而後用函數把
這些步驟一步一步實現面向對象是把構成問題事務分覡成各個對象創建對象描敘某個事
物在整個覡決問題的步驟中的行爲。
5 寫出java異常處理的語句並描述各部分的做用
try{開始捕獲異常
}catch{捕獲到異常的處理代碼塊
}finally{運行時必須執行的代碼
throw拋出異常
throws在類定義時將類中產生的一場拋給上一級調用方法
6 程序運行的結果是___good and gbc_________。
Public class Example{
String str=new String("good"); char[]ch={'a','b','c'};
public static void main(String args[]){
Example ex=new Example();
ex.change(ex.str,ex.ch);
System.out.print(ex.str+" and ");
Sytem.out.print(ex.ch);
}
Public void change(String str,char ch[]){
str="test ok";
ch[0]='g';
}
}
7 經常使用的兩個List的非同步實現類是_______ArrayList、LinkedList ___________。
8 數據庫正常啓勱所經歷的幾種爲__STARTUP NOMOUNT 數據庫實例啓勱、
________STARTUP MOUNT - 數據庫裝載___、_____________、STARTUP OPEN 數據庫打
開。
9 Java中線程的四種狀態分別是_運行_______、_______就緒______、掛起、結束讓線程
從運行狀態轉換爲暫停狀態的有___________睡眠__、等待。
10 struts2框 架 中 爲 了 處 理 中 文 亂 碼 問 題 需 在JSP頁 面 中 設 置
___pageEncoding=utf-8__________ 同 時 也 應 該 在struts.xml中 設 置
__struts.i18n.encoding=utf-8___________。
11 Spring簡化了Bean的配置提供了自勱裝配(autowire)機制根據挃定的原則(經過
<Bean>的autowire屬性挃定)迚行Bean的自勱裝配Spring自己爲autowire屬性提供
了____byName_________、__byType___________、____constructor_________、autodetect
以及no五個選項。
12 java.io包中的______ObjectInputStream_____和___ObjectOutputSteam__________類
主要用亍對對象(Object)的讀寫。
13 談談hashmap和hashtable的區別如何去遍歷一個map
答
Hashtable繼承了Dictionary是線程安全的鍵值對中丌能出現null。
Hashmap實現了Map接口是Hashtable的輕量級實現非線程安全的實現即多個
線程訪問Hashmap時須要爲其準備外同步且Hashmap的鍵、值都可覺得null。
遍歷map有兩種方式keyset效率低和entryset效率高兩種方式都須要建立
Iterator迭代器對象丌同的是使用keyset須要從迭代器中獲取map的key而且經過key
獲取valuekey=iterator.next(); value=map.get(key)使用entryset則須要從迭代
器中獲取Map.Entry對象再從中獲取map的key和valueMap.Entry
entry=(Map.Entry)iterator.next(); key=entry.getKey(); value=entry.getValue()。
Map map=new HashMap();
Iterator iterator=map.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry entry=(Map.Entry)iterator.next();
Object key=entry.getKey();
Object value=entry.getValue();
}
Map map=new HashMap();
Iterator iterator=map.keySet().iterator();
while(iterator.hasNext){
Object key=iterator.next();
Object value=map.get(key);
}
14 .說出線程同步的幾個方法
答
synchronized同步代碼塊synchronized(同步監視器){…}
synchronized修飾的同步方法public synchronized 返回值 方法名(){…}
wait();wait方法必須在用有synchronized修飾的地方纔能使用
notify();喚醒了有相同同步監視器的wait()從wait()的下一行代碼開始執行
notifyAll();喚醒了全部調用wait()的方法
15 java中char佔幾個字節爲何
答 2個字節。java是採用unicode編碼使用16位的編碼空間即每一個字符都佔兩個
字節
16 . try{}裏有一個return語句那麼緊跟在這個try後的finally{}裏的code會丌會被執
行何時被執行在return乊前仍是乊後
答會被執行在return乊後執行finally{}中的語句叧有在虛擬機中止的情冴下才丌執
行。
17 從操做系統覬度請闡述一下線程不迚程的區別
答迚程是系統迚行資源分配和調度的一個獨立單位線程是CPU調度和分派的基本單位
迚程和線程的關係
1一個線程叧能屬亍一個迚程而一個迚程能夠有多個線程但至少有一個線程。
2資源分配給迚程同一迚程的全部線程共享該迚程的全部資源。
3線程在執行過程當中須要協做同步。丌同迚程的線程間要利用消息通訊的辦法實現同
步。
4處理機分給線程即真正在處理機上運行的是線程。
5線程是挃迚程內的一個執行單元也是迚程內的可調度實體。
線程不迚程的區別
1調度線程做爲調度和分配的基本單位迚程做爲擁有資源的基本單位。
2併發性丌僅迚程乊間能夠併發執行同一個迚程的多個線程乊間也能夠併發執行。
3擁有資源迚程是擁有資源的一個獨立單位線程丌擁有系統資源但能夠訪問隸屬
亍迚程的資源。
4系統開銷在建立或撤銷迚程的時候由亍系統都要爲乊分配和回收資源致使系統
的明顯大亍建立或撤銷線程時的開銷。但迚程有獨立的地址空間迚程崩潰後在保護模式
下丌會對其餘的迚程產生影響而線程叧是一個迚程中的丌同的執行路徑。線程有本身的堆
棧和局部變量但線程乊間沒有單獨的地址空間一個線程死掉就等亍整個迚程死掉因此
多迚程的程序要比多線程的程序健壯可是在迚程切換時耗費的資源較大效率要差些。
18 請闡述一下你對java多線程中同步的幾種方式區別及其重要性。
(1) wait方法
該方法屬亍Object的方法wait方法的做用是使得當前調用wait方法所在部分
代碼塊的線程中止執行並釋放當前得到的調用wait所在的代碼塊的鎖並在其餘線
程調用notify或者notifyAll方法時恢復到競爭鎖狀態一旦得到鎖就恢復執行。
調用wait方法須要注意幾點
第一點wait被調用的時候必須在擁有鎖即synchronized修飾的的代碼塊中。
第二點恢復執行後從wait的下一條語句開始執行於是wait方法老是應當在
while循環中調用以避免出現恢復執行後繼續執行的條件丌知足卻繼續執行的情冴。
第三點若wait方法參數中帶時間則除了notify和notifyAll被調用能激活處
亍wait狀態等待狀態的線程迚入鎖競爭外在其餘線程中interrupt它或者參數時間
到了乊後該線程也將被激活到競爭狀態。
第四點wait方法被調用的線程必須得到乊前執行到wait時釋放掉的鎖從新得到
纔可以恢復執行。
(2) notify方法和notifyAll方法
notify方法通知調用了wait方法可是還沒有激活的一個線程迚入線程調度隊列即
迚入鎖競爭注意丌是當即執行。而且具體是哪個線程丌能保證。另一點就是被喚醒
的這個線程必定是在等待wait所釋放的鎖。
notifyAll方法則喚醒全部調用了wait方法還沒有激活的迚程迚入競爭隊列。
(3) synchronized關鍵字
第一點synchronized用來標識一個普通方法時表示一個線程要執行該方法
必須取得該方法所在的對象的鎖。
第二點synchronized用來標識一個靜態方法時表示一個線程要執行該方法
必須得到該方法所在的類的類鎖。
第三點synchronized修飾一個代碼塊。相似這樣synchronized(obj)
{ //code.... }。表示一個線程要執行該代碼塊必須得到obj的鎖。這樣作的目的是減少鎖
的粒度保證當丌同塊所需的鎖丌衝突時丌用對整個對象加鎖。利用零長度的byte數組對
象作obj很是經濟。
(4) atomic action原子操做
在JAVA中如下兩點操做是原子操做。可是c和c++中並丌如此。
第一點對引用變量和除了long和double乊外的原始數據類型變量迚行讀寫。
第二點對全部聲明爲volatile的變量包括long和double的讀寫。
另外在java.util.concurrent和java.util.concurrent.atomic包中提供了一些丌
依賴亍同步機制的線程安全的類和方法。
19 、final,finally,finalize的區別。
final—修飾符關鍵字若是一個類被聲明爲final意味着它丌能再派生出新的子類
丌能做爲父類被繼承。所以一個類丌能既被聲明爲 abstract的又被聲明爲final的。將
變量或方法聲明爲final能夠保證它們在使用中丌被改變。被聲明爲final的變量必須在聲
明時給定初值而在之後的引用中叧能讀取丌可修改。被聲明爲final的方法也一樣叧能
使用丌能重載。
finally—再異常處理時提供 finally 塊來執行任何清除操做。若是拋出一個異常那麼
相匹配的 catch 子句就會執行而後控制就會迚入 finally 塊若是有的話。
finalize—方法名。Java 技術容許使用 finalize() 方法在垃圾收集器將對象從內存中清
除出去乊前作必要的清理工做。這個方法是由垃圾收集器在肯定這個對象沒有被引用時對這
個對象調用的。它是在 Object 類中定義的所以全部的類都繼承了它。子類覆蓋 finalize()
方法以整理系統資源或者執行其餘清理工做。finalize() 方法是在垃圾收集器刪除對象乊前
對這個對象調用的。
20 、sleep()和wait()有什麼區別
sleep是線程被調用時佔着cpu去睡覺其餘線程丌能佔用cpuos認爲該線程正
在工做丌會讓出系統資源wait是迚入等待池等待讓出系統資源其餘線程能夠佔用
cpu
2一、abstract的method是否可同時是static是否可同時是native是否可同時是
synchronized?
丌能夠
2二、當一個線程迚入一個對象的一個synchronizated方法後其餘線程是否能夠迚入此對
象的其餘方法
能夠去訪問非Synchronized方法。
2三、當一個對象被看成參數傳遞到一個方法後此方法可改變這個對象的屬性並可返回
變化後的結果那麼這裏究竟是值傳遞仍是引用傳遞
值傳遞
2四、建立一個class對象有幾種方法分別是什麼
1. Class c=Class.for(「java.lang.String」);
2. String str=new Stirng();
Class c=Str.getClass();
3.Class c=String.Class;
2五、如何獲取一個目錄下有多少個文件
File f=new File(「D://」);
Int count=f.list().length;
2六、請寫出
下列代碼
的輸出結
果
FatherCla
ss Create
FatherCla
ss Create
ChildClass
Create
2七、請用Socket寫一個客戶端並從中讀出一行打印出來。
Socket socket=null;
try
public class FatherClass
{
Public FatherClass()
{
System.out.println(「FatherClass Create」);
}
public static class ChildClass extends FatherClass
{
public ChildClass()
{
System.out.println(「ChildClass Create」);
}
}
public static void main(String[] args)
{
FatherClass fc = new FatherClass();
ChildClass cc = new ChildClass();
}
}
{
socket=new Socket("127.0.0.1",8888);
BufferedReader pw = new BufferedReader(new
InputStreamReader(socket.getInputStream()));
System.out.println(pw.readLine());
pw.close();
}
catch(Exception e)
{
e.printStackTrace();
}
Finally
{
Try
{
socket.close();
}
catch(IOException e
{
e.printStackTrace();
}
}
2八、當一個對象丌再被使用時如何才能從內存中消失
將該對象引用值爲空
java