Java棉試可能出現的問題!

Java基礎方面:
1、作用域public,private,protected,以及不寫時的區別
Public、Protected、Private是成員訪問修飾符;
final、abstract、transient、synchronized、native、strictfp是非訪問成員修飾符。
可見性PublicProtectedDefaultPrivate
同一個類是是是是
同一個包中的類是是是否
同一個包中的子類是是是否
同一包外的子類是是否否
同一包外的非子類是否否否

Java的基本包
java.lang 其中包含有:
接口:Comparable、Cloneable、Runable等
類:八個基本數據類型封裝類、Math、Runtime、Object、String、StringBuffer、Thread、Exception等

集合框架
集合是將多個元素組成一個單元的對象。集合用於存儲、檢索和操縱數據。
集合框架提供管理對象集合的接口和類。它包含幾個組件,接口是表示集合的抽象數據類型,用於操縱集合;類是用於存儲集合的實際數據對象;算法是用於操縱集合的。

2、ArrayList和Vector的區別,HashMap和Hashtable的區別
答:就ArrayList與Vector主要從二方面來說.
一.同步性:Vector是線程安全的,也就是說是同步的,而ArrayList是線程序不安全的,不是同步的
二.數據增長:當需要增長時,Vector默認增長爲原來一培,而ArrayList卻是原來的一半

ArrayList,Vector, LinkedList的存儲性能和特性
ArrayList和Vector都是使用數組方式存儲數據,此數組元素數大於實際存儲的數據以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數組元素移動等內存操作,所以索引數據快而插入數據慢,Vector由於使用了synchronized方法(線程安全),通常性能上較ArrayList差,而LinkedList使用雙向鏈表實現存儲,按序號索引數據需要進行前向或後向遍歷,但是插入數據時只需要記錄本項的前後項即可,所以插入速度較快。

就HashMap與HashTable主要從三方面來說.
一.歷史原因:Hashtable是基於陳舊的Dictionary類的,HashMap是Java 1.2引進的Map接口的一實現
二.同步性:Hashtable是線程安全的,也就是說是同步的,而HashMap是線程序不安全的,不是同步的
三.值:只有HashMap允許在一個集合中有一個null鍵和在一個集合中有多個null值

Hashtable是HashMap的同步版本;HashMap允許有null值和一個null鍵,但是,Hashtable不允許有任何內容爲null

Hashtable類的對象必須覆蓋Object類的hashCode()和equals()方法

關於其他集合類型:
一.ArrayList 提供快速遍歷和快速訪問。現在設計了新的 RandomAccess 接口,它指出這種列表支持快速隨機訪問。Vector也實現了RandomAccess 接口。
二.遍歷HashSet與HashMap時,其順序是未知的(但添加刪除快)。LinkedHashSet和LinkedHashSet是按照元素的插入的順序遍歷的(遍歷快)。
三.TreeSet和TreeMap將保證元素按照元素的自然順序進行排列。也可以使用一個用戶自己實現的比較規則。
四、HashSet有一個散列表支持它。它爲基本操作提供固定時間性能。TreeSet它確保了排序集將按元素升序,根據自然順序排序。

Dictionary類
主要用於將關鍵字轉換成值,該類接收一個關鍵字並返回一個值。Dictionary是一個抽象類,它是H
Hashtable的超類。
Properties類
擴展了Hashtable類,但Properties對象的關鍵字和值必須是String類型,並能將對象寫入一個輸出流並保存在一個文件中,然後可以把它讀回一個輸入流。


如果需要維護和搜索一個部件列表,它們由唯一的字母數字序列號標示,其中的部件是Part類型,這時應該使用哪種集合?如果我們改變需求,你也需要能夠按順序、按它們的序列號打印出部件?
1、應該選擇HashMap
2、應該選擇TreeMap

3、char型變量中能不能存貯一箇中文漢字?爲什麼?
答:是能夠定義成爲一箇中文的,因爲java中以unicode編碼,一個char佔16個字節,所以放一箇中文是沒問題的

4、多線程有幾種實現方法,都是什麼?同步有幾種實現方法,都是什麼?
答:多線程有兩種實現方法,分別是繼承Thread類與實現Runnable接口
同步的實現方面有兩種,分別是synchronized,wait與notify

GC是什麼? 爲什麼要有GC?
GC是垃圾收集的意思(Gabage Collection),內存處理是編程人員容易出現問題的地方,忘記或者錯誤的內存回收會導致程序或系統的不穩定甚至崩潰,Java提供的GC功能可以自動監測對象是否超過作用域從而達到自動回收內存的目的,Java語言沒有提供釋放已分配內存的顯示操作方法。

7、垃圾回收機制,如何優化程序?
當一個對象失去引用或者離開了作用域後,就成爲垃圾而被Java運行環境自動清除,清除垃圾就是清除這些對象。
Java垃圾回收機制的特點是:
1、垃圾回收機制自動運行。系統提供一個低優先級的線程來跟蹤內存的分配情況。如果發現某個內存單元不再使用,就清除它。
2、何時清除垃圾是不可預期的。
3、垃圾回收機制隨JVM的不同而不同。

Java的垃圾搜索器爲內存管理器提供一種自動解決方案。缺點是不能完全控制它什麼時候執行以及什麼時候不執行。
當垃圾蒐集器運行時,其目的是查找和刪除不能被訪問的對象。
垃圾蒐集器受JVM控制,JVM決定什麼時候運行垃圾蒐集器。從Java程序內可以請求JVM運行垃圾蒐集器,但是,在任何情況下都無法保證JVM會答應你的請求。JVM通常會在它感到內存減少時運行垃圾蒐集器。
垃圾收集器運行時,當它發現一個對象不能被任何活線程訪問時,它將認爲該對象符合刪除條件,它可能在某時刪除該對象。
垃圾收集器不能保證有足夠的內存,它只能保證可以使用的內存將盡可能被有效的管理。
使對象符合垃圾蒐集器搜索條件的情況有:出現空引用、重新爲引用變量賦值、隔離引用。

強制執行垃圾蒐集:
Runtime對象爲直接與虛擬機通信提供一種機制。System類可以調用與其相同的方法。
請求垃圾收集器的最簡單的方法是:System.gc();

Javac編譯選項?
G產生調試信息
g:none不產生調試信息
verbose輸出編譯器消息,可以知道程序編譯時用到了哪些Java類
Noware編譯時不產生警告信息
encoding指出原文件的編碼方式
D指定類文件產生的目錄
classPath指出用戶class文件的路徑
sourcePath指出用戶源文件路徑

9、介紹JAVA中的Collection FrameWork(包括如何寫自己的數據結構)?
答:Collection FrameWork如下:
核心接口有:
CollectionSetSorted Set
ListMapSorted Map

Set接口:不允許重複的元素。它對add、equals、hashCode方法增加了限制
SortedSet接口:擴展了Set接口,此接口的元素按升序排序。
List接口:一些集合具有順序,即在一個項目後添加另一個項目。列表可以有重複元素。提供了ListIterator,允許向前或向後移動元素。
Map接口:將鍵映射到值得對象。Map不能包含重複鍵,但可以包含重複值。每個鍵最多都只能映射到一個值。

核心設計類:
Map 設計Set 設計List 設計
HashMapHashSetArrayList
HashtableLinkedHashSetVector
TreeMapTreeSetLinkedLisk
LinkedHasMap

散列表是最快的數據存儲結構,它是一個數組。數據存儲在數組中散列函數指定的特定下標。散列函數是一組輸入數據和一組整數之間的映射。

集合類和接口層次


Collections是一個類,帶有用於處理集合的靜態實用方法
Collection是一個接口,帶有多數集合常用的方法聲明,包括add、remove、contains、size、iterator

Collection是最基本的集合接口,一個Collection代表一組Object,即Collection的元素(Elements)
Map提供key到value的映射

集合框架的優點:
提供一組可用的集合接口,可以方便地擴展或改寫集合;
接口和算法的可重用性提高了軟件的可重用性;
提供了有效的數據結構和算法,減少了編程工作。

10、Java中異常處理機制,事件機制?
事件代表了組件之間的交互。是一種在源對象和監聽對象之間,某種狀態發生變化的傳遞機制。
通過事件處理機制,可以讓一些組件作爲事件源,發出可被組件環境或其它組件接收的事件。這樣,不同的組件就可以組合在一起,組件之間通過事件傳遞進行通信,構成一個應用。
在java中實現事件機制的事件模型由三個部分構成:一個事件對象用於描述事件源的狀態變化;一個事件源將會產生事件,提供註冊的事件監聽器的方法,把事件發送到監聽器;事件監聽器接收事件通知,實現該事件的監聽器接口。

異常實際上是程序中錯誤導致中斷了正常的指令流的一種事件.
Java異常處理用於在方法中能檢查出錯誤但不能處理錯誤的情況,在這樣的方法中將拋出一個異常。如果一個異常與某個catch程序塊中的參數匹配,那麼就執行該catch塊中的代碼。指出try catch finally的工作順序。

運行時異常與一般異常有何異同?
異常表示程序運行過程中可能出現的非正常狀態,運行時異常表示虛擬機的通常操作中可能遇到的異常,是一種常見運行錯誤。java編譯器要求方法必須聲明拋出可能發生的非運行時異常,但是並不要求必須聲明拋出未被捕獲的運行時異常。



事件有哪些?


什麼是斷言機制?
斷言從JDK1.4版開始引入,它讓開發期間測試假設,而沒有付出爲異常編寫異常處理程序方面的代價,一旦程序完成開發,並全部部署,假設將從不會發生。
主要作用:因爲在開發時對自己的假設非常肯定,所以不想花費時間來編寫異常處理代碼。斷言讓在開發期間測試你的假設。
private void method(int num){
assert(num>=0);//這裏假定參數num是正數,如果不是真的將拋出一個AssertionError錯誤
useNum(num+x);
}
斷言有兩種形式:簡單和非常簡單。
非常簡單:
private void doStuff(){
assert(y>x);
//其他代碼
}
簡單:
將通過表達式的值向錯誤跟蹤棧中添加更多信息,提供了更多調式幫助信息。
private void doStuff(){
assert(y>x):”y is ”+y+” x is”+x;
//其他代碼
}
運行時啓用斷言:
java –ea com.geeksanonymous.TestClass

運行時禁用斷言:
java –da com.geeksanonymous.TestClass

11、JAVA中的多形與繼承?
希望大家補上,謝謝

對象是定義了邊界的、與要解決的問題有關的概念或事物。它們用於幫助理解現實世界。
類是擁有相同特性、共同的行爲和共同的關係的一組對象。
封裝是讓開發者有選擇地隱藏類中的特性和方法的過程
繼承是允許通過重用現有類來構建新類的特性。]
多態性使用同一函數在不同的類上具有不同的行爲。Java中的多態性是通過方法的動態綁定實現的。

12、抽象類與接口?
答:抽象類與接口都用於抽象,但是抽象類(JAVA中)可以有自己的部分實現,而接口則完全是一個標識(同時有多重繼承的功能)。

abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized? 都不能

接口是否可繼承接口? 抽象類是否可實現(implements)接口? 抽象類是否可繼承實體類(concrete class)?
接口可以繼承接口。抽象類可以實現(implements)接口,抽象類可繼承實體類,但前提是實體類必須有明確的構造函數。

Anonymous Inner Class (匿名內部類) 是否可以extends(繼承)其它類,是否可以implements(實現)interface(接口)?
可以繼承其他類或完成其他接口,在swing編程中常用此方式。

IO流
字節流:數據在存儲時與傳輸時都是以字節爲單位進行的。通常用於讀寫二進制數據,如圖像和聲音文件。
字符流:數據在存儲與傳輸時都是以字符爲單位進行的。

流:對數據源的一種抽象,其目的是想用統一的方式訪問各種不同的數據源(文件、網絡、內存的緩衝區)

文件讀寫的基本類:File類提供定位本地文件系統,描述文件和目錄的功能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章