導航:首頁 > 編程語言 > java筆試編程題庫

java筆試編程題庫

發布時間:2023-05-12 09:57:37

『壹』 我在12。21要去一家軟體公司筆試,范圍大約是VB,java方面的,勞駕幫忙給點相關題目。

JAVA面試題集

基礎知識:
1.C++或Java中的異常處理機制的簡單原理和應用。

當JAVA程序違反了JAVA的語義規則時,JAVA虛擬咐裂機就會將發生的錯誤表示為一個異常。違反語義規則包括

2種情況。一種是JAVA類庫內置的語義檢查。例如數組下標越界,會引發IndexOutOfBoundsException;訪問

null的對象時會引發NullPointerException。另一種情況就是JAVA允許程序員擴展這種語義檢查,程序員

可以創建自己的異常,並自由選擇在何時用throw關鍵字引發異常。所有的異常都是java.lang.Thowable

的子類。

2. Java的介面和C++的虛類的相同和不同處。

由於Java不支持多繼承,而有可能某個類或對象要使用分別在幾個類或對象裡面的方法或屬性,現有的單

繼承機制就不能滿足要求。與繼承相比,介面有更高的靈活性,因為介面中沒有任何實現代碼。當一個類

實現了介面以後,該類要實現介面裡面所有的方法和屬性,並且介面裡面的屬性在默認狀態下面都是

public static,所有方法默認情況下是public.一個類可以實現多個介面。

3. 垃圾回收的優點和原理。並考慮2種回收機制。

Java語言中一個顯著的特點就是引入了垃圾回收機制,使c++程序員最頭疼的內存管理的問題迎刃而解,

它使得Java程序員在編寫程序的時候不再需要考慮內存管理。由於有個垃圾回收機制,Java中的對象不再

有「作用域」的概念,只有對象的引用才有「作用域」。垃圾回收可以有效的防止內存泄露,有效的使用

可以使用的內存。垃圾回收器通常是作為一個單獨的低級別的線程運行,不可預知的情況下對內存堆中已

經死亡的或者長時間沒有使用的對象進行清楚和回收,程序員不能實時的調用垃圾回收器對某個對象或所

有對象進行垃圾回收。回收機制有分代復制垃圾回收和標記垃圾回收,增量垃圾回收。

4. 請說出你所知道的線程同步的方法。

wait():使一個線程處於等待狀態,並且釋放所持有的對象的lock。

sleep():使衡銀閉一個正在運行的線程處於睡眠狀態,是一個靜態方法,調用此方法要捕捉

InterruptedException異常。

notify():喚醒一個處於等待狀態的線程,注意的是在調用此方法的時候,並不能確切的喚醒某一個等待

狀態的線程,而是由JVM確定喚醒哪個線程,而且不是按優先順序。

Allnotity():喚醒所有處入等待狀態的線程,注意並不是給所有喚醒線程一個對象的鎖,而是讓它們競爭



5. 請講一講析構函數和虛函數的用法和作用。

6. Error與Exception有什麼區別?

Error表示系統級的錯誤和程序不必處理的搏棗異常,

Exception表示需要捕捉或者需要程序進行處理的異常。

7. 在java中一個類被聲明為final類型,表示了什麼意思?

表示該類不能被繼承,是頂級類。

8. 描述一下你最常用的編程風格。

9. heap和stack有什麼區別。

棧是一種線形集合,其添加和刪除元素的操作應在同一段完成。棧按照後進先出的方式進行處理。

堆是棧的一個組成元素

10. 如果系統要使用超大整數(超過long長度范圍),請你設計一個數據結構來存儲這種超大型數字以及

設計一種演算法來實現超大整數加法運算)。

public class BigInt()

{

int[] ArrOne = new ArrOne[1000];

String intString="";

public int[] Arr(String s)

{

intString = s;

for(int i=0;i

{

11. 如果要設計一個圖形系統,請你設計基本的圖形元件(Point,Line,Rectangle,Triangle)的簡單實現

12,談談final, finally, finalize的區別。

final?修飾符(關鍵字)如果一個類被聲明為final,意味著它不能再派生出新的子類,不能作為父

類被繼承。因此一個類不能既被聲明為 abstract的,又被聲明為final的。將變數或方法聲明為final,

可以保證它們在使用中不被改變。被聲明為final的變數必須在聲明時給定初值,而在以後的引用中只能

讀取,不可修改。被聲明為final的方法也同樣只能使用,不能重載。

finally?再異常處理時提供 finally 塊來執行任何清除操作。如果拋出一個異常,那麼相匹配的

catch 子句就會執行,然後控制就會進入 finally 塊(如果有的話)。

finalize?方法名。Java 技術允許使用 finalize() 方法在垃圾收集器將對象從內存中清除出去之前

做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調用的。它是在

Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者執行其

他清理工作。finalize() 方法是在垃圾收集器刪除對象之前對這個對象調用的。

13,Anonymous Inner Class (匿名內部類) 是否可以extends(繼承)其它類,是否可以implements(實

現)interface(介面)?

匿名的內部類是沒有名字的內部類。不能extends(繼承) 其它類,但一個內部類可以作為一個介面,

由另一個內部類實現。

14,Static Nested Class 和 Inner Class的不同,說得越多越好(面試題有的很籠統)。

Nested Class (一般是C++的說法),Inner Class (一般是JAVA的說法)。Java內部類與C++嵌套類

最大的不同就在於是否有指向外部的引用上。具體可見http:

//www.frontfree.net/articles/services/view.asp?id=704&page=1

註: 靜態內部類(Inner Class)意味著1創建一個static內部類的對象,不需要一個外部類對象,2

不能從一個static內部類的一個對象訪問一個外部類對象

第四,&和&&的區別。

&是位運算符。&&是布爾邏輯運算符。

15,HashMap和Hashtable的區別。

都屬於Map介面的類,實現了將惟一鍵映射到特定的值上。

HashMap 類沒有分類或者排序。它允許一個 null 鍵和多個 null 值。

Hashtable 類似於 HashMap,但是不允許 null 鍵和 null 值。它也比 HashMap 慢,因為它是同步

的。

16,Collection 和 Collections的區別。

Collections是個java.util下的類,它包含有各種有關集合操作的靜態方法。

Collection是個java.util下的介面,它是各種集合結構的父介面。

17,什麼時候用assert。

斷言是一個包含布爾表達式的語句,在執行這個語句時假定該表達式為 true。如果表達式計算為

false,那麼系統會報告一個 Assertionerror。它用於調試目的:

assert(a > 0); // throws an Assertionerror if a <= 0

斷言可以有兩種形式:

assert Expression1 ;

assert Expression1 : Expression2 ;

Expression1 應該總是產生一個布爾值。

Expression2 可以是得出一個值的任意表達式。這個值用於生成顯示更多調試信息的 String 消息。

斷言在默認情況下是禁用的。要在編譯時啟用斷言,需要使用 source 1.4 標記:

javac -source 1.4 Test.java

要在運行時啟用斷言,可使用 -enableassertions 或者 -ea 標記。

要在運行時選擇禁用斷言,可使用 -da 或者 -disableassertions 標記。

要系統類中啟用斷言,可使用 -esa 或者 -dsa 標記。還可以在包的基礎上啟用或者禁用斷言。

可以在預計正常情況下不會到達的任何位置上放置斷言。斷言可以用於驗證傳遞給私有方法的參數。

不過,斷言不應該用於驗證傳遞給公有方法的參數,因為不管是否啟用了斷言,公有方法都必須檢查其參

數。不過,既可以在公有方法中,也可以在非公有方法中利用斷言測試後置條件。另外,斷言不應該以任

何方式改變程序的狀態。

18,GC是什麼? 為什麼要有GC? (基礎)。

GC是垃圾收集器。Java 程序員不用擔心內存管理,因為垃圾收集器會自動進行管理。要請求垃圾收

集,可以調用下面的方法之一:

System.gc()

Runtime.getRuntime().gc()

19,String s = new String("xyz");創建了幾個String Object?

兩個對象,一個是「xyx」,一個是指向「xyx」的引用對象s。

20,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;

21,short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯?

short s1 = 1; s1 = s1 + 1;有錯,s1是short型,s1+1是int型,不能顯式轉化為short型。可修改為

s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正確。

22,sleep() 和 wait() 有什麼區別? 搞線程的最愛

sleep()方法是使線程停止一段時間的方法。在sleep 時間間隔期滿後,線程不一定立即恢復執行。

這是因為在那個時刻,其它線程可能正在運行而且沒有被調度為放棄執行,除非(a)「醒來」的線程具有

更高的優先順序 (b)正在運行的線程因為其它原因而阻塞。

wait()是線程交互時,如果線程對一個同步對象x 發出一個wait()調用,該線程會暫停執行,被調對

象進入等待狀態,直到被喚醒或等待時間到。

23,Java有沒有goto?

Goto?java中的保留字,現在沒有在java中使用。

24,數組有沒有length()這個方法? String有沒有length()這個方法?

數組沒有length()這個方法,有length的屬性。

String有有length()這個方法。

25,Overload和Override的區別。Overloaded的方法是否可以改變返回值的類型?

方法的重寫Overriding和重載Overloading是Java多態性的不同表現。重寫Overriding是父類與子類

之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。如果在子類中定義某方法與其

父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。子類的對象使用這個方法時,將調用子

類中的定義,對它而言,父類中的定義如同被「屏蔽」了。如果在一個類中定義了多個同名的方法,它們

或有不同的參數個數或有不同的參數類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以

改變返回值的類型。

26,Set里的元素是不能重復的,那麼用什麼方法來區分重復與否呢? 是用==還是equals()? 它們有何區

別?

Set里的元素是不能重復的,那麼用iterator()方法來區分重復與否。equals()是判讀兩個Set是否相

等。

equals()和==方法決定引用值是否指向同一對象equals()在類中被覆蓋,為的是當兩個分離的對象的

內容和類型相配的話,返回真值。

27,給我一個你最常見到的runtime exception。

ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException,

CannotRedoException, CannotUndoException, ClassCastException, CMMException,

, DOMException, EmptyStackException,

IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException,

IllegalStateException,

ImagingOpException, IndexOutOfBoundsException, MissingResourceException,

NegativeArraySizeException, NoSuchElementException, NullPointerException,

ProfileDataException, ProviderException, RasterFORMatException, SecurityException,

SystemException, UndeclaredThrowableException, UnmodifiableSetException,

UnsupportedOperationException

28,error和exception有什麼區別?

error 表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說內存溢出。不可能指望程序能

處理這樣的情況。

exception 表示一種設計或實現問題。也就是說,它表示如果程序運行正常,從不會發生的情況。

29,List, Set, Map是否繼承自Collection介面?

List,Set是

Map不是

30,abstract class和interface有什麼區別?

聲明方法的存在而不去實現它的類被叫做抽象類(abstract class),它用於要創建一個體現某些基

本行為的類,並為該類聲明方法,但不能在該類中實現該類的情況。不能創建abstract 類的實例。然而

可以創建一個變數,其類型是一個抽象類,並讓它指向具體子類的一個實例。不能有抽象構造函數或抽象

靜態方法。Abstract 類的子類為它們父類中的所有抽象方法提供實現,否則它們也是抽象類為。取而代

之,在子類中實現該方法。知道其行為的其它類可以在類中實現這些方法。

介面(interface)是抽象類的變體。在介面中,所有方法都是抽象的。多繼承性可通過實現這樣的

介面而獲得。介面中的所有方法都是抽象的,沒有一個有程序體。介面只可以定義static final成員變數

。介面的實現與子類相似,除了該實現類不能從介面定義中繼承行為。當類實現特殊介面時,它定義(即

將程序體給予)所有這種介面的方法。然後,它可以在實現了該介面的類的任何對象上調用介面的方法。

由於有抽象類,它允許使用介面名作為引用變數的類型。通常的動態聯編將生效。引用可以轉換到介面類

型或從介面類型轉換,instanceof 運算符可以用來決定某對象的類是否實現了介面。

31,abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized?

都不能

32,介面是否可繼承介面? 抽象類是否可實現(implements)介面? 抽象類是否可繼承實體類(concrete

class)?

介面可以繼承介面。抽象類可以實現(implements)介面,抽象類是否可繼承實體類,但前提是實體類

必須有明確的構造函數。

33,啟動一個線程是用run()還是start()?

啟動一個線程是調用start()方法,使線程所代表的虛擬處理機處於可運行狀態,這意味著它可以由

JVM調度並執行。這並不意味著線程就會立即運行。run()方法可以產生必須退出的標志來停止一個線程。

34,構造器Constructor是否可被override?

構造器Constructor不能被繼承,因此不能重寫Overriding,但可以被重載Overloading。

35,是否可以繼承String類?

String類是final類故不可以繼承。

36,當一個線程進入一個對象的一個synchronized方法後,其它線程是否可進入此對象的其它方法?

不能,一個對象的一個synchronized方法只能由一個線程訪問。

37,try {}里有一個return語句,那麼緊跟在這個try後的finally {}里的code會不會被執行,什麼時候

被執行,在return前還是後?

會執行,在return前執行。

38,編程題: 用最有效率的方法算出2乘以8等於幾?

有C背景的程序員特別喜歡問這種問題。

2 << 3

39,兩個對象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對?

不對,有相同的hash code。

40,當一個對象被當作參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,

那麼這里到底是值傳遞還是引用傳遞?

是值傳遞。Java 編程語言只由值傳遞參數。當一個對象實例作為一個參數被傳遞到方法中時,參數

的值就是對該對象的引用。對象的內容可以在被調用的方法中改變,但對象的引用是永遠不會改變的。

41,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

switch(expr1)中,expr1是一個整數表達式。因此傳遞給 switch 和 case 語句的參數應該是 int

、 short、 char 或者 byte。long,string 都不能作用於swtich。

42,編程題: 寫一個Singleton出來。

Singleton模式主要作用是保證在Java應用程序中,一個類Class只有一個實例存在。

一般Singleton模式通常有幾種種形式:

第一種形式:定義一個類,它的構造函數為private的,它有一個static的private的該類變數,在類

初始化時實例話,通過一個public的getInstance方法獲取對它的引用,繼而調用其中的方法。

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; }

}

其他形式:

定義一個類,它的構造函數為private的,所有方法為static的。

一般認為第一種形式要更加安全些

Hashtable和HashMap

Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實現

HashMap允許將null作為一個entry的key或者value,而Hashtable不允許

還有就是,HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因為

contains方法容易讓人引起誤解。

最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在

多個線程訪問Hashtable時,不需要自己為它的方法實現同步,而HashMap

就必須為之提供外同步。

Hashtable和HashMap採用的hash/rehash演算法都大概一樣,所以性能不會有很大的差異。

43.描述一下JVM載入class文件的原理機制?

44.試舉例說明一個典型的垃圾回收演算法?

45.請用java寫二叉樹演算法,實現添加數據形成二叉樹功能,並以先序的方式列印出來.

46.請寫一個java程序實現線程連接池功能?

47.給定一個C語言函數,要求實現在java類中進行調用。

48、編一段代碼,實現在控制台輸入一組數字後,排序後在控制台輸出;

49、列出某文件夾下的所有文件;

50、調用系統命令實現刪除文件的操作;

51、實現從文件中一次讀出一個字元的操作;

52、列出一些控制流程的方法;

53、多線程有哪些狀態?

54、編寫了一個伺服器端的程序實現在客戶端輸入字元然後在控制台上顯示,直到輸入"END"為止,讓你

寫出客戶端的程序;

55、作用域public,private,protected,以及不寫時的區別

答:區別如下:

作用域 當前類 同一package 子孫類 其他package

public √ √ √ √

protected √ √ √ ×

friendly √ √ × ×

private √ × × ×

不寫時默認為friendly

56、ArrayList和Vector的區別,HashMap和Hashtable的區別

答:就ArrayList與Vector主要從二方面來說.

一.同步性:Vector是線程安全的,也就是說是同步的,而ArrayList是線程序不安全的,不是同步的

二.數據增長:當需要增長時,Vector默認增長為原來一培,而ArrayList卻是原來的一半

就HashMap與HashTable主要從三方面來說。

一.歷史原因:Hashtable是基於陳舊的Dictionary類的,HashMap是Java 1.2引進的Map介面的一個實現

二.同步性:Hashtable是線程安全的,也就是說是同步的,而HashMap是線程序不安全的,不是同步的

三.值:只有HashMap可以讓你將空值作為一個表的條目的key或value

57、char型變數中能不能存貯一個中文漢字?為什麼?

答:是能夠定義成為一個中文的,因為java中以unicode編碼,一個char佔16個位元組,所以放一個中文是

沒問題的

58、多線程有幾種實現方法,都是什麼?同步有幾種實現方法,都是什麼?

答:多線程有兩種實現方法,分別是繼承Thread類與實現Runnable介面

同步的實現方面有兩種,分別是synchronized,wait與notify

59、垃圾回收機制,如何優化程序?

希望大家補上,謝謝

60、float型float f=3.4是否正確?

答:不正確。精度不準確,應該用強制類型轉換,如下所示:float f=(float)3.4

61、介紹JAVA中的Collection FrameWork(包括如何寫自己的數據結構)?

答:Collection FrameWork如下:

Collection

├List

│├LinkedList

│├ArrayList

│└Vector

│ └Stack

└Set

Map

├Hashtable

├HashMap

└WeakHashMap

Collection是最基本的集合介面,一個Collection代表一組Object,即Collection的元素(Elements)

Map提供key到value的映射

62、Java中異常處理機制,事件機制?

11、JAVA中的多形與繼承?

希望大家補上,謝謝

63、抽象類與介面?

答:抽象類與介面都用於抽象,但是抽象類(JAVA中)可以有自己的部分實現,而介面則完全是一個標識(

同時有多重繼承的功能)。

編程題:

1.現在輸入n個數字,以逗號,分開;

然後可選擇升或者降序排序;

按提交鍵就在另一頁面顯示

按什麼 排序,結果為, ,

提供reset

答案(1) public static String[] splitStringByComma(String source){

if(source==null||source.trim().equals(""))

return null;

StringTokenizer commaToker = new StringTokenizer(source,",");

String[] result = new String[commaToker.countTokens()];

int i=0;

while(commaToker.hasMoreTokens()){

result[i] = commaToker.nextToken();

i++;

}

return result;

}

循環遍歷String數組

Integer.parseInt(String s)變成int類型

組成int數組

Arrays.sort(int[] a),

a數組升序

降序可以從尾部開始輸出

2.金額轉換,阿拉伯數字的金額轉換成中國傳統的形式如:

(¥1011)->(一千零一拾一元整)輸出。

3、繼承時候類的執行順序問題,一般都是選擇題,問你將會列印出什麼?

答:父類:

package test;

public class FatherClass

{

public FatherClass()

{

System.out.println("FatherClass Create");

}

}

子類:

package test;

import test.FatherClass;

public 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();

}

}

輸出結果:

C:>java test.ChildClass

FatherClass Create

FatherClass Create

ChildClass Create

4、內部類的實現方式?

答:示例代碼如下:

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();

}

}

輸出結果:

C:>java test/OuterClass

InterClass Create

OuterClass Create

再一個例題:

public class OuterClass {

private double d1 = 1.0;

//insert code here

}

You need to insert an inner class declaration at line 3. Which two inner class declarations

are

valid?(Choose two.)

A. class InnerOne{

public static double methoda() {return d1;}

}

B. public class InnerOne{

static double methoda() {return d1;}

}

C. private class InnerOne{

double methoda() {return d1;}

}

D. static class InnerOne{

protected double methoda() {return d1;}

}

E. abstract class InnerOne{

public abstract double methoda();

}

說明如下:

一.靜態內部類可以有靜態成員,而非靜態內部類則不能有靜態成員。 故 A、B 錯

二.靜態內部類的非靜態成員可以訪問外部類的靜態變數,而不可訪問外部類的非靜態變數;return d1

出錯。

故 D 錯

三.非靜態內部類的非靜態成員可以訪問外部類的非靜態變數。 故 C 正確

四.答案為C、E

5、Java 的通信編程,編程題(或問答),用JAVA SOCKET編程,讀伺服器幾個字元,再寫入本地顯示?

答:Server端程序:

package test;

import java.net.*;

import java.io.*;

public class Server

{

private ServerSocket ss;

private Socket socket;

private BufferedReader in;

private PrintWriter out;

public Server()

{

try

{

ss=new ServerSocket(10000);

while(true)

{

socket = ss.accept();

String Remo

『貳』 java練習題

1.b
2.d
3.b
4.b
5.d
6.d
7.a
8.d
9.b
10.b
11.a
12.a
17.b
18.d
19.b

『叄』 誰能發個全國計算機考試的JAVA真題給我筆試題

Java是一個很好的面向對象語言,這是08年的試題。你可以在網上下更全套的試題練習。

全國2008年10月考試Java 語言程序設計(一)試題
課程代碼:04747
一、單項選擇題(本大題共10小題,每小題1分,共10分)
在每小題列出的四個備選項中只有一個是符合題目要求的,請將其代碼填寫在題後的括弧內。錯選、多選或未選均無分。
1.下述字元組合不能作為Java程序標識符的是( )
A.Aa12 B.大x
C.y小 D.5x
2.以下程序代碼的輸出的結果是( )
int x=53;
System. out. println(1.0+x/2);
A.27.0 B.27.5
C.1.026 D.1.026.5
3.參照以下Java代碼,以下四個敘述中最確切的是( )
class A{
int x; static int y;
void fac(String s){Syatem. out. println(」字元串:」+s);}
}
A.x、y和s都是成員變數
B.x是實例變數、y是類變數、s是局部變數
C.x和y是實例變數、s是參數
D.x、y和s都是實例變數
4.需要分析字元串,並將字元串分解成可被獨立使用的單詞,可使用java. util包中的類是
( )
A.String B.StringBuffer
C.StringTokenizer D.stringTokenizer
5.要為程序的子窗口設定一個由字元串s指定的名字,可以採用的代碼是( )
A.JFrame(s) B.window(s)
C.new JFrame(s) D.super(s)
6.以下關於菜單的敘述中,正確的是( )
A.菜單分三級定義,最高一級的是菜單條,菜單條中放菜單,菜單中放菜單項
B.菜單分三級定義,最高一級的是菜單,菜單中放菜單條,菜單條中放菜單項
C.菜單分兩級定義,最高一級的是菜單,菜單中放菜單項
D.菜單分兩級定義,最高一級的是菜單條,菜單條中放菜單項
7.以下所述內容全部是字型要素的是( )
A.字體、字形和大小 B.字體、風格和字型大小
C.字形、風格和字型大小 D.字形、顏色和字型大小
8.用Thread子類實現多線程的步驟順序是( )
A.聲明Thread類的子類,創建Thread子類的實例,讓線程調用start()方法
B.聲明Thread類的子類,在子類中重新定義run()方法,創建Thread子類的實例
C.創建Thread子類的實例,讓線程調用start()方法
D.聲明Thread類的子類,在子類中重新定義run()方法,創建Thread子類的實例,讓線程調用start()方法
9.為16位Unicode字元流提供讀和寫操作支持的類分別是( )
A.FileInputStream類和FileOutputStream類
B.InputStream類和OutputStream類
C.FileReader類和FileWriter類
D.File_Reader類和File_Writer類
10.能利用對象提供的方法獲得流對象和實現網路連接的是( )
A.URLConnection對象 B.URL對象
C.InetAddress對象 D.TCP/IP對象
二、填空題(本大題共10小題,每小題2分,共20分)
請在每小題的空格中填上正確答案。錯填、不填均無分。
11.一個小應用程序必須定義成一個_________。
12.用條件運算符構造一個表達式:goal等於10時,表達式的值為「對了!」,否則,表達式的值為「錯了!」。這個表達式是_________。
13.類是對一組相同對象的描述,類概括了同類對象的共有性質:_________。
14.設有數組a和b的定義如下:
int[]a={1,2,3};int[]b={4,5,6}
……
執行以下代碼「a=b;」,除了完成賦值操作之外,引起系統額外要做的工作是_________。
15. _________布局使容器的多個組件擁有同一個顯示空間,某一時刻只能顯示一個組件。
16.Java語言為處理滑鼠事件提供兩個介面:_________介面和MouseMotionListener介面。
17.某個繪圖方法設置成「異或模式」繪圖,並用黃色作為異或模式設定的繪圖顏色。如果當時背景色為紅色,並用紅色繪制線段,則線段的實際顏色是_________。
18.程序員用Java語言編寫多線程應用程序,程序員能控制的關鍵性工作有兩個方面:一是編寫線程的_________方法;二是建立線程實例。
19.BufferedWriter類是提供緩沖式輸出的類。程序需要先創建_________對象,再利用這個對象創建BufferedWriter對象。
20.在Java語言中,客戶端使用的套接字類是_________。
三、簡答題(本大題共6小題,每小題3分,共18分)
21.請寫出表示條件「x=2與y=3有且只有一個成立」的Java表達式」。
22.如果類Student是類Person的子類,類Undergraate是類Student的子類,請指出以下代碼行中哪些是不合法的。
Person p1=new Student();
Person p2=new Undergraate();
Student s1=new Person();
Student s2=new Undergraate();
Undergraate ug1=new Person();
Undergraate ug2=new Student();
Object ob=new Student();
23.請寫出程序處理文本框輸入結束事件(回車)添加監視器的方法,以及監視器類必須實現的介面方法。
24.請寫出一條語句,能夠繪制一條從點(20,30)開始,長為100像素的水平線段。設調用的對象是類型為Graphics的g。
25.某Java程序要使用文件輸入輸出流,請寫出該程序所需要的import語句。
26.JDBC是Java程序與資料庫連接的API,請寫出JDBC能做的三件事情。
四、程序填空題(本大題共5小題,每空2分,共20分)
27.方法int maxDigit(int n)的功能是找出十進制整數n各位中最大的一位數字。例如,n=23765,該方法的返回值是7。
static int maxDigit(int n){
int c=0,d;
while(n>0){
d=_______;
if(d>c) c=d;
n/=10;
}
________;
}
28.某程序的界麵包含一個文本區text1、一個文本框text2和一個按鈕button。實現在文本區中輸入整數序列後,點擊按鈕,程序響應按鈕事件,累計文本區輸入的整數序列,並將總和輸出在文本框中。這里給出的是其中相應按鈕事件的方法。
public void actionPerformed(ActionEvent e){
int sum;
if(e.getSource()==button){
String s=text1.________;//獲取text1中的信息
StringTokenizer fenxi=new StringTokenizer(s,」,,,\n」);
int n=fenxi.countTokens();
double a[]=new double[n];
for(int i=0;i<n;i++){
String temp=fenxi.nextToken();
a[i]=Double.valueOf(temp).doubleValue();
}
sum=0;
for(int i=0;i<n;i++){
__________;
}
text2.setText(」」+sum);//刷新顯示。
}
}
29.以下是生成菜單項對象,以及菜單項選擇事件處理方法的部分代碼。要求當菜單項singingItem被選中時,在文本框text中輸出「唱歌菜單項被選中!」的字樣。
……
singingItem=new________(」唱歌」);//生成菜單項對象
……
public void actionPerformed(ActionEvent e){
if(e.getSource()==singingItem)
text.setText(e.________()+ 」菜單項被選中!」);
}
30.某小應用程序實現幻燈片放映。小應用程序的init()方法將幻燈片讀入數組中存儲和注冊滑鼠監視器。程序運行時,單擊滑鼠,就順序變換放映幻燈片的序號。這里給出的是其中的paint()方法和mousePressed()方法。
final int number=30;//假定幻燈片有30張
int count=0;
Image[]pic=new Image[number];
public void paint(______gc){
if((pic[count])!=null)
gc.drawImage(pic[count],10,10,pic[count].getWidth(this),
pic[count].getHeight(this),this);
}
public void mousePressed(MouseEvent e){
count=(count+1)% number;//循環逐張顯示
__________;
}
31.以下定義的類shareDataManager用於管理多個線程共享數據data。一些線程要減少data,另一些線程要增加data。由於data不可以是負值,修改data的方法對這些線程來說不僅要互斥,還要同步。類提供一個方法modiData()供修改data的線程調用,該方法在data修改結束後,應通知其它等待進入這個方法的線程。
class ShareDataManager{
int data=0;
________void modiData(int delta){
if(delta>=0){
data+=delta;
}else {
while(data <delta){
try{System.out.println(」發生等待!」);
wait();
}catch(InterruptedException e){ }
}
data-=delta;
}
_________;
}
ShareDataManager(int ititData){data=initData;}
}
五、程序分析題(本大題共5小題,每小題4分,共20分)
32.閱讀下列程序,請寫出該程序的輸出結果。
import java.applet.*;import java.awt.*;
class Point{
int x,y;
Point(int xx,int yy){ x=xx;y=yy;}
Point(Point p){x=p.x;y=p.y; }
void m(int dx,int dy){x+=dx;y+=dy;}
}
class Circle extends Point{
int r;
Circle(Point p, int rr){ super(p); r=rr; }
float c(){ return 3.14f*2.0f*r; }
float a(){ return 3.14f*r*r;}
}
public class sample extends Applet{
Circle yuan; Point d;
public void init() {d=new Point(2,5);yuan=new Circle(d,10);}
public void paint(Graphics g){
g.drawString(」yuan Circle」+(int)(yuan.c()*100.0)/100.0,5,20);
g.drawString(」yuan Area」+(int)(yuan.a()*100.0)/100.0,5,40);
}
}
33.閱讀下列程序,請寫出該程序的功能。
import java. util.*;
public class Class1{
public static void main(Srting args[]){
Date date1=new Date();
System. out. println (datel);
String t=datel.toString();
int endPos=t.indexOf(『C』);
t=t.substring(11,endPos);
System. out println(t);
}
}
34.閱讀下列程序,請寫出該程序的功能。
import java.applet.*;import javax.swing.*;import java.awt.event.*;
public class Class l extends Applet implements ActionListener{
JTextField text1,text2;
public void init(){
text1=new JTextField(10); text2=new JTextField(10);
setSize(200,100); add(text1); add(text2);
text1.addActionListener(this);
}
public void actionPerformed(Action Event e){
long n;
if(e.getSource()==text1){
n=Long.parseLong(text1.getText());
text2.setText(String.valueOf(n*n));
}
}
}
35.閱讀以下程序,請寫出該程序的功能。
import javax.swing.*; import java.awt.*;import java.awt.event.*;
class MyScrollBar extends JscrollBar{
public MyScrollBar(int init, int len, int low, int high){
super(JScrollBar. HORIZONTAL, init,len,low,high);
}
}
class MyWindow extends JFrame implements AdjustmentListener{
private JTextField text;
MyWindow(String s){
super(s);
MyScrollBar myBar=new MyScrollBar(10,10,0,255);
Container con=this. getContentPane();
con. setLayout(new GridLayout(2,1));
this. setSize(200,100);
this. setLocation(100,100);
myBar.addAdjustmentListener(this);
text=new JTextField(」」,20);
con. add(text);con.add(myBar);
this.setVisible(true);
}
public void adjustmentValueChanged(AdjustmentEvent e){
MyScrollBar myBar=(MyScrollBar)e.getAdjustable();
text.setText(」」+myBar.getValue());
}
}
public class Class1{
public static void main(String[]args){
MyWindow myWindow=new MyWindow(」text5_4」);
}
}
36.小應用程序創建一個線程。例子使用容器類方法getGraphics()獲得Graphics對象,給線程作為畫筆使用。請寫出該程序中這個線程的工作內容。
import java.applet.*;import java.awt.*;
public class Class1 extends java.applet.Applet implements Runnable{
Thread redBall;Graphics redPen;
int rx=0,ry=0;
public void init(){
setSize(250,200);
redBall =new Thread(this);
redPen=getGraphics();
redPen. setColor(Color.red);
setBackground(Color.gray);
}
public void start(){ redBall.start(); }
public void run(){
while(true){
if(Thread.currentThread()==redBall){
rx=(int)(80*Math.random());
ry=(int)(80*Math.random());
red Pen.setColor(Color.red);
red Pen.fillOval(100+rx,100+ry,10,10);
try{redBall.sleep(500);}
catch(InterruptedException e){}
redPen.setColor(Color.gray);
redPen.fillOval(100+rx,100+ry,10,10);
}
}
}
}
六、程序設計題(本大題共2小題,每小題6分,共12分)
37.編寫一個方法halfArray(),要求該方法有一個元素類型為int的數組參數,方法返回一個新數組,新數組的長度與參數數組的長度相同,而新數組元素的值是參數數組各元素的一半。
38.一個Java小應用程序,界面有三個文本框和兩個按鈕,前兩個文本框用於輸入整數,第三個文本框用於輸出結果。兩個按鈕分別表示加和減運算。當前兩個文本框輸入整數後,點擊相應按鈕,程序就將計算結果輸出在第三個文本框中。以下是程序的大部分,其中監視按鈕事件的方法未給出,試編寫處理按鈕事件的方法。
註:這里是給定部分的程序,你要編寫的是actionPerformed(ActionEvent e)方法。
import java.applet.*;import javax.swing.*;
import java.awt.*; import java.awt.event.*;
class Panel1 extends JPanel{
JTextField text1, text2, text3;JButton addButton,subButton;
Panel1(){
text1=new JTextField(10);text2=new JTextField(10);
text3=new JTextField(10);setLayout(new GridLayout(5,1));
addButton=new JButton(」加」);subButton=new JButton(」減」);
add(text1); add(text2);
add(text3); add(addButton); add(subButton);
}
}
public class Classl extends Applet implements ActionListener{
Pane1 panel;
public void init(){
setSize(100,200); panel=new Panel1();add(panel);
(panel.addButton).addActionListener(this);
(panel.subButton). addActionListener(this);
}
public void actionPerformed(ActionEvent e){

『肆』 java面試/筆試題

1.JSP、Servlet、JavaBean技術的出現給我們構建強大的企業應用系統提供了可能。但用這些技術構建的系統非常的繁亂,所以在此之上,我們需要一個規則、一個把這些技術組織起來的規則,這就是框架,Struts便應運而生。
經過長達五年的發展,Struts已經逐漸成長為一個穩定、成熟的框架,並且佔有了MVC框架中最大的市場份額。但是Struts某些技術特性上已經落後於新興的MVC框架。面對Spring MVC、Webwork2 這些設計更精密,擴展性更強的框架,Struts受到了前所未有的挑戰。但站在產品開發的角度而言,Struts仍然是最穩妥的選擇。
Struts2.0為其它框架提供了更好的集成。
使得與Spring的集成非常的容易。

2.Struts的工作流程:

在web應用啟動時就會載入初始化ActionServlet,ActionServlet從

struts-config.xml文件中讀取配置信息,把它們存放到各種配置對象

當ActionServlet接收到一個客戶請求時,將執行如下流程.

-(1)檢索和用戶請求匹配的ActionMapping實例,如果不存在,就返回請求路徑無效信息;

-(2)如果ActionForm實例不存在,就創建一個ActionForm對象,把客戶提交的表單數據保存到ActionForm對象中;

-(3)根據配置信息決定是否需要表單驗證.如果需要驗證,就調用ActionForm的validate()方法;

-(4)如果ActionForm的validate()方法返回null或返回一個不包含ActionMessage的ActuibErrors對象,就表示表單驗證成功;

-(5)ActionServlet根據ActionMapping所包含的映射信息決定將請求轉發給哪個Action,如果相應的Action實例不存在,就先創建這個實例,然後調用Action的execute()方法;

-(6)Action的execute()方法返回一個ActionForward對象,ActionServlet在把客戶請求轉發給ActionForward對象指向的JSP組件;

-(7)ActionForward對象指向JSP組件生成動態網頁,返回給客戶;

3.在struts配置文件中配置具體的錯誤提示,再在FormBean中的validate()方法具體調用。

4.(1) 對JDBC訪問資料庫的代碼做了封裝,大大簡化了數據訪問層繁瑣的重復性代碼。

(2) Hibernate是一個基於JDBC的主流持久化框架,是一個優秀的ORM實現。他很大程度的簡化DAO層的編碼工作

(3)hibernate使用Java反射機制,而不是位元組碼增強程序來實現透明性。

(4)hibernate的性能非常好,因為它是個輕量級框架。映射的靈活性很出色。它支持各種關系資料庫,從一對一到多對多的各種復雜關系。

5.原理:

(1).讀取並解析配置文件

(2).讀取並解析映射信息,創建SessionFactory

(3).打開Sesssion

(4).創建事務Transation

(5).持久化操作

(6).提交事務

(7).關閉Session

(8).關閉SesstionFactory

6.

Hibernate的最大的好處就是簡化資料庫的操作,允許你的代碼以對象模式來訪問資料庫內容,
比如通常我們找一個User的資料需要select出所需要的資料,而通過hibnate我們可以把這個User的資料作為一個對象來看待
,通過User.getName()或者User.getId()等操作來獲得,這樣就完全統一了上層JAVA或者C#等OO語言中對於資料庫的非OO操作的不和諧了.
另外對於復雜的表和表之間的關聯我們也不用去使用復雜的Select等SQL來操作,而使用對象可以方便獲得,
比如多對多關系某用戶屬於的部門的名稱,雖然底層資料庫使用了3個表的主鍵關聯操作,
但是我們可以通過User.getDep().getName()來簡單的獲得,這個就是持久化對象的好處了

7.
(1)、spring能簡化企業級開發, spring可以用簡單的java bean來代替實現復雜的EJB。(大部分情況下)
(2)、spring是一個輕量級的IOC和AOP框架,可以spring的IOC實現松耦合,而作為一個AOP框架他又能分離系統服務,實現內聚開發
(3)、spring是非侵入式,基於spring的系統可以不依賴於spring的類。

良好的spring運用可以使程序代碼清晰,容易維護,容易測試。

8.
Spring是個很不錯的框架。內部最核心的就是IOC了,
動態注入,讓一個對象的創建不用new了,可以自動的生產,這其實就是利用java里的反射
反射其實就是在運行時動態的去創建、調用對象,Spring就是在運行時,跟xml Spring的配置
文件來動態的創建對象,和調用對象里的方法的 。
Spring還有一個核心就是AOP這個就是面向切面編程,可以為某一類對象 進行監督和控制(也就是
在調用這類對象的具體方法的前後去調用你指定的 模塊)從而達到對一個模塊擴充的功能。這些都是通過
配置類達到的。
Spring目的:就是讓對象與對象(模塊與模塊)之間的關系沒有通過代碼來關聯,都是通過配置類說明
管理的(Spring根據這些配置 內部通過反射去動態的組裝對象)
要記住:Spring是一個容器,凡是在容器里的對象才會有Spring所提供的這些服務和功能。
Spring里用的最經典的一個設計模式就是:模板方法模式。(這里我都不介紹了,是一個很常用的設計模式)
Spring里的配置是很多的,很難都記住,但是Spring里的精華也無非就是以上的兩點,把以上兩點跟理解了
也就基本上掌握了Spring.

9.
(1).spring mvc請所有的請求都提交給DispatcherServlet,它會委託應用系統的其他模塊負責負責對請求進行真正的處理工作。

(2).DispatcherServlet查詢一個或多個HandlerMapping,找到處理請求的Controller.

(3).DispatcherServlet請請求提交到目標Controller

(4).Controller進行業務邏輯處理後,會返回一個ModelAndView

(5).Dispathcher查詢一個或多個ViewResolver視圖解析器,找到ModelAndView對象指定的視圖對象

(6).視圖對象負責渲染返回給客戶端。

『伍』 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經典面試題

(4)以下代碼中的兩個sizeof用法有問題嗎?
[C易] void UpperCase( char str[] ) // 將 str 中的小寫字母轉換成大寫字母 { for( size_t i=0; i <sizeof(str)/sizeof(str[0]); ++i ) if( 'a' <=str[i] && str[i] <='z' ) str[i] -= ('a'-'A' ); } char str[] = "aBcDe"; cout < < "str字元長度為: " < < sizeof(str)/sizeof(str[0]) < < endl; UpperCase( str ); cout < < str < < endl; 答案:函數內的sizeof有問題。根據語法,sizeof如用於數組,只能測出靜態數組的大小,無法檢測動態分配的或外部數組大小。函數外的str是一個靜態定義的數組,因此其大小為6,因為還有'\0',函數內的str實際只是一個指向字元串的指針,沒有任何額外的與數組相關的信息,因此sizeof作用於上只將其當指針看,一個指針為4個位元組,因此返回4。
(5)一個32位的機器,該機器的指針是多少位答案:
指針是多少位只要看地址匯流排的位數就行了。80386以後的機子都是32的數據匯流排。所以指針的位數就是4個位元組了。
6。main() { int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); printf("%d,%d",*(a+1),*(ptr-1)); } 答案:2。5 *(a+1)就是a[1],*(ptr-1)就是a[4],執行結果是2,5 &a+1不是首地址+1,系統會認為加一個a數組的偏移,是偏移了一個數組的大小(本例是5個int) int *ptr=(int *)(&a+1); 則ptr實際是&(a[5]),也就是a+5 原因如下: &a是數組指針,其類型為 int (*)[5]; 而指針加1要根據指針類型加上一定的值,不同類型的指針+1之後增加的大小不同 a是長度為5的int數組指針,所以要加 5*sizeof(int) 所以ptr實際是a[5] 但是prt與(&a+1)類型是不一樣的(這點很重要) 所以prt-1隻會減去sizeof(int*) a,&a的地址是一樣的,但意思不一樣,a是數組首地址,也就是a[0]的地址,&a是對象(數組)首地址,a+1是數組下一元素的地址,即a[1],&a+1是下一個對象的地址,即a[5].
7。請問以下代碼有什麼問題: int main() { char a; char *str=&a; strcpy(str,"hello"); printf(str); return 0; } 答案:沒有為str分配內存空間,將會發生異常問題出在將一個字元串復制進一個字元變數指針所指地址。雖然可以正確輸出結果,但因為越界進行內在讀寫而導致程序崩潰。
8。char* s="AAA"; printf("%s",s); s[0]='B'; printf("%s",s); 有什麼錯?答案:"AAA"是字元串常量。s是指針,指向這個字元串常量,所以聲明s的時候就有問題。 cosnt char* s="AAA"; 然後又因為是常量,所以對是s[0]的賦值操作是不合法的。
9。寫一個「標准」宏,這個宏輸入兩個參數並返回較小的一個。答案:.#define Min(X, Y) ((X)>(Y)?(Y):(X)) //結尾沒有『;』
10。嵌入式系統中經常要用到無限循環,你怎麼用C編寫死循環。答案:while(1){}或者for(;;)
11。關鍵字static的作用是什麼?答案:定義靜態變數
12。關鍵字const有什麼含意?答案:表示常量不可以修改的變數。
13。關鍵字volatile有什麼含意?並舉出三個不同的例子?答案:提示編譯器對象的值可能在編譯器未監測到的情況下改變。
14。int (*s[10])(int) 表示的是什麼啊?答案:int (*s[10])(int) 函數指針數組,每個指針指向一個int func(int param)的函數。
15。有以下表達式: int a=248; b=4;int const c=21;const int *d=&a; int *const e=&b;int const *f const =&a; 請問下列表達式哪些會被編譯器禁止?為什麼?答案:*c=32;d=&b;*d=43;e=34;e=&a;f=0x321f; *c 這是個什麼東東,禁止 *d 說了是const,禁止 e = &a 說了是const 禁止 const *f const =&a; 禁止
16交換兩個變數的值,不使用第三個變數。即a=3,b=5,交換之後a=5,b=3; 答案:有兩種解法, 一種用算術演算法, 一種用^(異或) a = a + b; b = a - b; a = a - b; or a = a^b;// 只能對int,char.. b = a^b; a = a^b; or a ^= b ^= a;
17.c和c++中的struct有什麼不同?答案:c和c++中struct的主要區別是c中的struct不可以含有成員函數,而c++中的struct可以。c++中struct和class的主要區別在於默認的存取許可權不同,struct默認為public,而class默認為private
18.#include <stdio.h> #include <stdlib.h> void getmemory(char *p) { p=(char *) malloc(100); strcpy(p,"hello world"); } int main( ) { char *str=NULL; getmemory(str); printf("%s/n",str); free(str); return 0; } 答案:程序崩潰,getmemory中的malloc 不能返回動態內存, free()對str操作很危險
19.char szstr[10]; strcpy(szstr,"0123456789"); 產生什麼結果?為什麼?答案: 長度不一樣,會造成非法的OS
20.列舉幾種進程的同步機制,並比較其優缺點。答案: 原子操作信號量機制 自旋鎖 管程,會合,分布式系統
21.進程之間通信的途徑答案:共享存儲系統消息傳遞系統管道:以文件系統為基礎
22.進程死鎖的原因答案:資源競爭及進程推進順序非法
23.死鎖的4個必要條件答案:互斥、請求保持、不可剝奪、環路
24.死鎖的處理答案:鴕鳥策略、預防策略、避免策略、檢測與解除死鎖
25. 操作系統中進程調度策略有哪幾種?答案:FCFS(先來先服務),優先順序,時間片輪轉,多級反饋
26.類的靜態成員和非靜態成員有何區別?答案:類的靜態成員每個類只有一個,非靜態成員每個對象一個
27.純虛函數如何定義?使用時應注意什麼?答案:virtual void f()=0; 是介面,子類必須要實現
28.數組和鏈表的區別答案:數組:數據順序存儲,固定大小連表:數據可以隨機存儲,大小可動態改變
29.ISO的七層模型是什麼?tcp/udp是屬於哪一層?tcp/udp有何優缺點?答案:應用層表示層會話層運輸層網路層物理鏈路層物理層 tcp /udp屬於運輸層 TCP 服務提供了數據流傳輸、可靠性、有效流控制、全雙工操作和多路復用技術等。與 TCP 不同, UDP 並不提供對 IP 協議的可靠機制、流控制以及錯誤恢復功能等。由於 UDP 比較簡單, UDP 頭包含很少的位元組,比 TCP 負載消耗少。 tcp: 提供穩定的傳輸服務,有流量控制,缺點是包頭大,冗餘性不好 udp: 不提供穩定的服務,包頭小,開銷小
30:(void *)ptr 和 (*(void**))ptr的結果是否相同?其中ptr為同一個指針答案:.(void *)ptr 和 (*(void**))ptr值是相同的
31:int main() { int x=3; printf("%d",x); return 1; } 問函數既然不會被其它函數調用,為什麼要返回1?答案:mian中,c標准認為0表示成功,非0表示錯誤。具體的值是某中具體出錯信息
32,要對絕對地址0x100000賦值,我們可以用 (unsigned int*)0x100000 = 1234; 那麼要是想讓程序跳轉到絕對地址是0x100000去執行,應該怎麼做?答案:*((void (*)( ))0x100000 ) ( ); 首先要將0x100000強制轉換成函數指針,即: (void (*)())0x100000 然後再調用它: *((void (*)())0x100000)(); 用typedef可以看得更直觀些: typedef void(*)() voidFuncPtr; *((voidFuncPtr)0x100000)();
33,已知一個數組table,用一個宏定義,求出數據的元素個數答案:#define NTBL #define NTBL (sizeof(table)/sizeof(table[0]))
34。線程與進程的區別和聯系? 線程是否具有相同的堆棧? dll是否有獨立的堆棧? 答案:進程是死的,只是一些資源的集合,真正的程序執行都是線程來完成的,程序啟動的時候操作系統就幫你創建了一個主線程。每個線程有自己的堆棧。 DLL中有沒有獨立的堆棧,這個問題不好回答,或者說這個問題本身是否有問題。因為DLL中的代碼是被某些線程所執行,只有線程擁有堆棧,如果DLL中的代碼是EXE中的線程所調用,那麼這個時候是不是說這個DLL沒有自己獨立的堆棧?如果DLL中的代碼是由DLL自己創建的線程所執行,那麼是不是說DLL有獨立的堆棧?以上講的是堆棧,如果對於堆來說,每個DLL有自己的堆,所以如果是從DLL中動態分配的內存,最好是從DLL中刪除,如果你從DLL中分配內存,然後在EXE中,或者另外一個DLL中刪除,很有可能導致程序崩潰
35。unsigned short A = 10; printf("~A = %u\n", ~A); char c=128; printf("c=%d\n",c); 輸出多少?並分析過程答案:第一題,~A =0xfffffff5,int值為-11,但輸出的是uint。所以輸出4294967285 第二題,c=0x10,輸出的是int,最高位為1,是負數,所以它的值就是0x00的補碼就是128,所以輸出-128。這兩道題都是在考察二進制向int或uint轉換時的最高位處理。
(二)
1. -1,2,7,28,,126請問28和126中間那個數是什麼?為什麼?答案:第一題的答案應該是4^3-1=63 規律是n^3-1(當n為偶數0,2,4) n^3+1(當n為奇數1,3,5)
2.用兩個棧實現一個隊列的功能?要求給出演算法和思路!答案:設2個棧為A,B, 一開始均為空. 入隊: 將新元素push入棧A; 出隊: (1)判斷棧B是否為空; (2)如果不為空,則將棧A中所有元素依次pop出並push到棧B; (3)將棧B的棧頂元素pop出;這樣實現的隊列入隊和出隊的平攤復雜度都還是O(1), 比上面的幾種方法要好。
3.在c語言庫函數中將一個字元轉換成整型的函數是atol()嗎,這個函數的原型是什麼?答案:函數名: atol 功能: 把字元串轉換成長整型數用法: long atol(const char *nptr); 程序例: #include <stdlib.h> #include <stdio.h> int main(void) { long l; char *str = "98765432"; l = atol(lstr); printf("string = %s integer = %ld\n", str, l); return(0); }
4。對於一個頻繁使用的短小函數,在C語言中應用什麼實現,在C++中應用什麼實現? 答案:c用宏定義,c++用inline
5。直接鏈接兩個信令點的一組鏈路稱作什麼? 答案:PPP點到點連接
7。軟體測試都有那些種類? 答案:黑盒:針對系統功能的測試 白合:測試函數功能,各函數介面
8。確定模塊的功能和模塊的介面是在軟體設計的那個隊段完成的? 答案:概要設計階段
9。enum string { x1, x2, x3=10, x4, x5, }x; 問x;答案:取值在0。1。10。11。12中的一個
10。unsigned char *p1; unsigned long *p2; p1=(unsigned char *)0x801000; p2=(unsigned long *)0x810000; 請問p1+5= ; p2+5= ; 答案:801005; 810014。不要忘記了這個是16進制的數字,p2要加20變為16進制就是14 選擇題: 1.Ethternet鏈接到Internet用到以下那個協議? A.HDLC;B.ARP;C.UDP;D.TCP;E.ID 2.屬於網路層協議的是: A.TCP;B.IP;C.ICMP;D.X.25 3.Windows消息調度機制是: A.指令隊列;B.指令堆棧;C.消息隊列;D.消息堆棧; 答案:b,a,c
四.找錯題:
1.請問下面程序有什麼錯誤? int a[60][250][1000],i,j,k; for(k=0;k <=1000;k++) for(j=0;j <250;j++) for(i=0;i <60;i++) a[i][j][k]=0; 答案:把循環語句內外換一下
2。以下是求一個數的平方的程序,請找出錯誤: #define SQUARE(a) ((a)*(a)) int a=5; int b; b=SQUARE(a++); 答案:這個沒有問題,s(a++),就是((a++)×(a++))唯一要注意的就是計算後a=7了 3。typedef unsigned char BYTE int examply_fun(BYTE gt_len; BYTE *gt_code) { BYTE *gt_buf; gt_buf=(BYTE *)MALLOC(Max_GT_Length); ...... if(gt_len>Max_GT_Length) { return GT_Length_ERROR; } ....... } 答案:要釋放內存問答題: 1.IP Phone的原理是什麼? 答案:IPV6 2.TCP/IP通信建立的過程怎樣,埠有什麼作用?答案:三次握手,確定是哪個應用程序使用該協議(三)
1、局部變數能否和全局變數重名?答案:能,局部會屏蔽全局。要用全局變數,需要使用"::" 局部變數可以與全局變數同名,在函數內引用這個變數時,會用到同名的局部變數,而不會用到全局變數。對於有些編譯器而言,在同一個函數內可以定義多個同名的局部變數,比如在兩個循環體內都定義一個同名的局部變數,而那個局部變數的作用域就在那個循環體內
2、如何引用一個已經定義過的全局變數?答案:extern 可以用引用頭文件的方式,也可以用extern關鍵字,如果用引用頭文件方式來引用某個在頭文件中聲明的全局變理,假定你將那個變寫錯了,那麼在編譯期間會報錯,如果你用extern方式引用時,假定你犯了同樣的錯誤,那麼在編譯期間不會報錯,而在連接期間報錯
3、全局變數可不可以定義在可被多個.C文件包含的頭文件中?為什麼?答案:可以,在不同的C文件中以static形式來聲明同名全局變數。可以在不同的C文件中聲明同名的全局變數,前提是其中只能有一個C文件中對此變數賦初值,此時連接不會出錯
4、語句for( ;1 ;)有什麼問題?它是什麼意思?答案:和while(1)相同。
5、do……while和while……do有什麼區別?答案:前一個循環一遍再判斷,後一個判斷以後再循環。
6、請寫出下列代碼的輸出內容#include <stdio.h> main() { int a,b,c,d; a=10; b=a++; c=++a; d=10*a++; printf("b,c,d:%d,%d,%d",b,c,d); return 0; } 答案:10,12,120 a=10; b=a++;//a=11 b=10 c=++a;//a=12 c=12 d=10*a++;//a=13 d=120
高級題
1、static全局變數與普通的全局變數有什麼區別?static局部變數和普通局部變數有什麼區別?static函數與普通函數有什麼區別?
答案:全局變數(外部變數)的說明之前再冠以static 就構成了靜態的全局變數。全局變數本身就是靜態存儲方式,靜態全局變數當然也是靜態存儲方式。這兩者在存儲方式上並無不同。這兩者的區別雖在於非靜態全局變數的作用域是整個源程序,當一個源程序由多個源文件組成時,非靜態的全局變數在各個源文件中都是有效的。而靜態全局變數則限制了其作用域,即只在定義該變數的源文件內有效,在同一源程序的其它源文件中不能使用它。由於靜態全局變數的作用域局限於一個源文件內,只能為該源文件內的函數公用,因此可以避免在其它源文件中引起錯誤。從以上分析可以看出,把局部變數改變為靜態變數後是改變了它的存儲方式即改變了它的生存期。把全局變數改變為靜態變數後是改變了它的作用域,限制了它的使用范圍。 static函數與普通函數作用域不同。僅在本文件。只在當前源文件中使用的函數應該說明為內部函數(static),內部函數應該在當前源文件中說明和定義。對於可在當前源文件以外使用的函數,應該在一個頭文件中說明,要使用這些函數的源文件要包含這個頭文件 static全局變數與普通的全局變數有什麼區別:static全局變數只初使化一次,防止在其他文件單元中被引用; static局部變數和普通局部變數有什麼區別:static局部變數只被初始化一次,下一次依據上一次結果值; static函數與普通函數有什麼區別:static函數在內存中只有一份,普通函數在每個被調用中維持一份拷貝
2、程序的局部變數存在於()中,全局變數存在於()中,動態申請數據存在於()中。
答案:棧;靜態區;堆 3、設有以下說明和定義: typedef union {long i; int k[5]; char c;} DATE; struct data { int cat; DATE cow; double dog;} too; DATE max; 則語句 printf("%d",sizeof(too)+sizeof(max));的執行結果是:______ 答案:DATE是一個union, 變數公用空間. 裡面最大的變數類型是int[5], 佔用20個位元組. 所以它的大小是20 data是一個struct, 每個變數分開佔用空間. 依次為int4 + DATE20 + double8 = 32. 所以結果是 20 + 32 = 52. 當然...在某些16位編輯器下, int可能是2位元組,那麼結果是 int2 + DATE10 + double8 = 20
4、隊列和棧有什麼區別?
答案:隊列先進先出,棧後進先出÷
5、這道題目出錯了,這里就不寫上了。
6、已知一個單向鏈表的頭,請寫出刪除其某一個結點的演算法,要求,先找到此結點,然後刪除。答案:slnodetype *Delete(slnodetype *Head,int key){}中if(Head->number==key) { Head=Pointer->next; free(Pointer); break; } Back = Pointer; Pointer=Pointer->next; if(Pointer->number==key) { Back->next=Pointer->next; free(Pointer); break; } void delete(Node* p) { if(Head = Node) while(p) }
7、請找出下面代碼中的所以錯誤說明:以下代碼是把一個字元串倒序,如「abcd」倒序後變為「dcba」
1、#include"string.h" 2、main() 3、{ 4、 char*src="hello,world"; 5、 char* dest=NULL; 6、 int len=strlen(src); 7、 dest=(char*)malloc(len); 8、 char* d=dest; 9、 char* s=src[len]; 10、 while(len--!=0) 11、 d++=s--; 12、 printf("%s",dest); 13、 return 0; 14、} 答案:還要加上#include <stdio.h> int main(){ char* src = "hello,world"; int len = strlen(src); char* dest = (char*)malloc((len+1)*sizeof(char)); //要為\0分配一個空間 char* d = dest; char* s = &src[len-1]; //指向最後一個字元 while( len-- != 0 ) *d++=*s--; *d = 0; //尾部要加\0 printf("%s\n",dest); free(dest);// 使用完,應當釋放空間,以免造成內存匯泄露 return 0; } 華為筆試題(3) 2006-09-29 19:41
一、判斷題(對的寫T,錯的寫F並說明原因,每小題4分,共20分)
1、有數組定義int a[2][2]={{1},{2,3}};則a[0][1]的值為0。( 正確)
2、int (*ptr) (),則ptr是一維數組的名字。(錯誤 int (*ptr) ();定義一個指向函數的指針變數 )
3、指針在任何情況下都可進行>, <,>=, <=,==運算。( 錯誤 )
4、switch(c) 語句中c可以是int ,long,char ,float ,unsigned int 類型。( 錯,不能用實形)
二、填空題(共30分)
1、在windows下,寫出運行結果,每空2分,共10分。 char str[ ]= "Hello"; char *p=str; int n=10; sizeof(str)=( ) sizeof(p)=( ) sizeof(n)=( ) void func(char str[100]){ } sizeof(str)=( ) 答案:6,4,4,4, 具體解釋請參看我的空間里的「C/C++程序員應聘試題剖析」
2、void getmemory(char **p, int num) { *p=(char *) malloc(num);} void test(void) { char *str=NULL; getmemory(&str,100); strcpy(str,"hello"); printf(str); } 運行test函數有什麼結果?( )10分 答案:輸出hello,但是發生內存泄漏。
3、設int arr[]={6,7,8,9,10}; int *ptr=arr; *(ptr++)+=123; printf("%d,%d",*ptr,*(++ptr)); ( ) 10分答案:8,
8。這道題目的意義不大,因為在不同的編譯器里printf的參數的方向是不一樣的,在vc6.0下是從有到左,這里先*(++ptr) 後*pt,於是結果為8,8
三、編程題(第一小題20,第二小題30分)
1、 不使用庫函數,編寫函數int strcmp(char *source, char *dest) 相等返回0,不等返回-1;
答案:一、 int strcmp(char *source, char *dest) { assert((source!=NULL)&&(dest!=NULL)); int i,j; for(i=0; source[i]==dest[i]; i++) { if(source[i]=='\0' && dest[i]=='\0') return 0; else return -1; } } 答案:二、 int strcmp(char *source, char *dest) { while ( (*source != '\0') && (*source == *dest)) { source++; dest++; } return ( (*source) - (*dest) ) ? -1 : 0; }
2、 寫一函數int fun(char *p)判斷一字元串是否為迴文,是返回1,不是返回0,出錯返回-1 答案:一、 int fun(char *p) { if(p==NULL) return -1; else { int length = 0; int i = 0; int judge = 1; length = strlen(p); for(i=0; i <length/2; i++) { if(p[i]!=p[length-1-i]) judge = 0; break; } if(judge == 0) return 0; else return 1; } } 答案:二、 int fun(char *p){ int len = strlen(p) - 1; char *q = p + len; if (!p) return -1; while (p < q) { if ((*p++) != (*q--)) return 0; } return 1;}

1.在OSI 7 層模型中,網路層的功能有( ) A.確保數據的傳送正確無誤 B.確定數據包如何轉發與路由 C.在信道上傳送比特流 D.糾錯與流控
2.FDDI 使用的是___區域網技術。( ) A.乙太網; B.快速乙太網; C.令牌環; D.令牌匯流排。
3.下面那種LAN 是應用CSMA/CD協議的() A.令牌環 B.FDDI C.ETHERNET D.NOVELL
4.TCP 和UDP 協議的相似之處是 ( ) A.面向連接的協議 B.面向非連接的協議 C.傳輸層協議 D.以上均不對 5.應用程序PING 發出的是___報文.( ) A.TCP 請求報文。 B.TCP 應答報文。 C.ICMP 請求報文。 D.ICMP 應答報文。
6.以下說法錯誤的是(多) ( ) A.中繼器是工作在物理層的設備 B.集線器和乙太網交換機工作在數據連路層 C.路由器是工作在網路層的設備 D.橋能隔離網路層廣播
7.當橋接收的分組的目的MAC地址在橋的映射表中沒有對應的表項時,採取的策略是( ) A.丟掉該分組 B.將該分組分片 C.向其他埠廣播該分組 D.以上答案均不對
8.LAN Switch 在網路層次模型中的地位( ) A.物理層 B.鏈路層 C.網路層 D.以上都不是
9.小於___的TCP/UDP埠號已保留與現有服務一一對應,此數字以上的埠號可自由分配。( ) A.199 B.100 C.1024 D.2048
10.當一台主機從一個網路移到另一個網路時,以下說法正確的是 ( ) A.必須改變它的IP 地址和MAC 地址 B.必須改變它的IP 地址,但不需改動MAC 地址 C.必須改變它的MAC 地址,但不需改動IP 地址 D.MAC 地址.IP 地址都不需改動答案:1.B; 2.C; 3.C; 4.C; 5.C; 6.BD; 7.C; 8.B; 9.C; 10.B.
華為筆試題(4) 2006-09-30 13:00
1. 找錯 void test1() { char string[10]; char* str1="0123456789"; strcpy(string, str1); } 答:表面上並且編譯都不會錯誤。但如果string數組原意表示的是字元串的話,那這個賦值就沒有達到意圖。最好定義為char string[11],這樣最後一個元素可以存儲字元串結尾符'\0'; void test2() { char string[10], str1[10]; for(int I=0; I <10;I++) { str1[I] ='a'; } strcpy(string, str1); } 答:strcpy使用錯誤,strcpy只有遇到字元串末尾的'\0'才會結束,而str1並沒有結尾標志,導致strcpy函數越界訪問,不妨讓str1[9]='\0',這樣就正常了。 void test3(char* str1) { char string[10]; if(strlen(str1) <=10) { strcpy(string, str1); } } 答:這又會出現第一道改錯題的錯誤了。strlen(str1)算出來的值是不包含結尾符'\0'的,如果str1剛好為10個字元+1結尾符,string就得不到結尾符了。可將strlen(str1) <=10改為strlen(str1) <10。
2. 找錯 #define MAX_SRM 256 DSN get_SRM_no() { static int SRM_no; int I; for(I=0;I <MAX_SRM;I++,SRM_no++) { SRM_no %= MAX_SRM; if(MY_SRM.state==IDLE) { break; } } if(I>=MAX_SRM) return (NULL_SRM); else return SRM_no; } 答:我不知道這段代碼的具體功能,但明顯有兩個錯誤 1,SRM_no沒有賦初值 2,由於static的聲明,使該函數成為不可重入(即不可預測結果)函數,因為SRM_no變數放在程序的全局存儲區中,每次調用的時候還可以保持原來的賦值。這里應該去掉static聲明。

『柒』 java筆試選擇題,求解。。

primitive主數據類型。java等編程語言中的默認基本數據類型,如:int,long等等。
不選A是因為java語言中沒有指針的概念,只有引用,引用的作用類似指針。

使吵櫻叢用哪種升櫻方法由Servlet來將其會話ID在被寫入到一個URL
servlet的響應輸出流?
在HttpServletRequest介面A的encodeURL方法。
在HttpServletResponse的介面B的encodeURL方法。
在HttpServletRequest介面的C的rewriteURL方法。
在HttpServletResponse的介面D的rewriteURL方法。

Map是個接頌遲口,Map沒有繼承Collection介面,Map提供key到value的映射。
List 是標准類庫中的一個類,可以簡單視之為雙向鏈表,以線性列的方式管理物件集合。

『捌』 JAVA編程題!

//把你的那個表作成test3.txt放到D盤根,跑程序就好了
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

public class MyTest3 {
List stuInfoList = new ArrayList();
public MyTest3(){
printResult();
}
public void readFile() {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("d:\\test3.txt")));
String line = "";
int i=0;
while ((line = br.readLine()) != null) {
if(i++>0){ //略過頭上的漢字行
StudentInfo student = new StudentInfo(line.split(" "));
stuInfoList.add(student);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
class StudentInfo implements Comparable{
public int stuId;
public double pings;
public double qizhong;
public double qimo;
public double bishi;
public double zhongFeng;
public StudentInfo(){};
public StudentInfo(String[] info){
this.stuId = Integer.parseInt(info[0]);
this.pings = Integer.parseInt(info[1]);
this.qizhong = Integer.parseInt(info[2]);
this.qimo = Integer.parseInt(info[3]);
this.bishi = Integer.parseInt(info[4]);
this.zhongFeng = pings*0.1+qizhong*0.25+qimo*0.15+bishi*0.5;
}
public String getPingJunFeng(int size){
return pings/size +" "+qizhong/size+" "+qimo/size+" "+bishi/size+" "+zhongFeng/size;
}
public String toString(){
return stuId + " " +pings + " "+qizhong+" "+qimo+" "+bishi+" "+zhongFeng;
}
public int compareTo(Object arg0) {
StudentInfo info = (StudentInfo)arg0;
return (int)(info.zhongFeng-this.zhongFeng);
}
}
public void printResult(){
readFile();
System.out.println("學號 平時 期中 期末 筆試 總評分");
for(Iterator it=stuInfoList.iterator();it.hasNext();){
System.out.println(it.next());
}
System.out.println("-----------80分以上---------------\r\n學號 總評分");
for(Iterator it=stuInfoList.iterator();it.hasNext();){
StudentInfo info = (StudentInfo)it.next();
if(info.zhongFeng>=80)
System.out.println(info.stuId + " "+info.zhongFeng);
}
System.out.println("-----------沒有及格---------------\r\n學號 總評分");
for(Iterator it=stuInfoList.iterator();it.hasNext();){
StudentInfo info = (StudentInfo)it.next();
if(info.zhongFeng<60)
System.out.println(info.stuId + " "+info.zhongFeng);
}
Collections.sort(stuInfoList);
System.out.println("-----------排序之後---------------\r\n學號 平時 期中 期末 筆試 總評分");
for(Iterator it=stuInfoList.iterator();it.hasNext();){
System.out.println(it.next());
}
StudentInfo pinjunfeng = new StudentInfo();
for(Iterator it=stuInfoList.iterator();it.hasNext();){
StudentInfo info = (StudentInfo)it.next();
pinjunfeng.bishi+=info.bishi;
pinjunfeng.pings+=info.pings;
pinjunfeng.qimo+=info.qimo;
pinjunfeng.qizhong+=info.qizhong;
pinjunfeng.zhongFeng+=info.zhongFeng;
}
System.out.println("-----------平均分---------------\r\n平時 期中 期末 筆試 總評分");
System.out.println(pinjunfeng.getPingJunFeng(stuInfoList.size()));
}
public static void main(String[] args) throws Exception {
new MyTest3();
}

}

『玖』 求Java基礎,練習題。

選擇題 (25道)

1. 下列選項中,不屬於Java語言特點的一項是( C )。

A:分布式 B:安全性 C:編譯執行 D:面向對象

2. Java語言的特點與 C/C+ +語言的比較中說法錯誤的是:( D )

A:簡單性Java繼承了 C/C+ +的語法 ,丟棄了其中不常用又容易引起混淆的功能。

B:Java是一種純面向對象的語言 ,具有封裝、繼承 ( Inheritance)和多態( Polymorphism)的特點。

C:Java應用程序可憑借URL打開並訪問網路上的對象。

D:解釋型Java寫成的源代碼需要被編譯成高階的位元組碼 ,它們與機器架構有關。

3. 閱讀下列代碼,選出該代碼段正確的文件名( C )。

class A{

void method1(){

System.out.println("Method1 in class A");

}

}

public class B{

void method2(){

System.out.println("Method2 in class B");

}

public static void main(String[] args){

System.out.println("main() in class B");

}

}

A: A.java B:A.class C: B.java D: B.class

4. 如果一個類的文件名為Student.java,但是類的代碼為:

public class Student {

public static void main(String[] args) {

System.out.println(8>>2);

}}

那麼下列說法正確的是:( B )

A:程序運行結果為8; B:程序運行結果為2;

C:程序運行結果為0; D:程序編譯錯誤,不能運行;

5. 符合對象和類的關系的是( D )。

A:教師和學生 B:書和房子

C:狗和貓 D:飛機和交通工具

6. 關於垃圾回收機制描述不正確的是( B )

A:垃圾回收機制不須通過程序員調用相應方法,也能自動啟動。

B:java程序員用System.gc()方法一定能進行垃圾回收;

C:垃圾回收機制屬於jvm自動操作,java程序員可以不進行垃圾回收操作。

D:垃圾回收機制並不是由操作系統自動執行。

7. 編譯下面源程序會得到哪些文件( D )?

class A1{

}

class A2 exdends A1{

}

public class B{

public static void main(String[] args){

}

}

A: 只有B.class文件 B:只有A1.class和A2.class文件

C: 編譯不成功 D:A1.class、A2.class和B.class文件

8. 下列關於基本數據類型的說法中,不正確的一項是( D )。

(A)boolean類型變數的值只能取真或假

(B)float是帶符號的32位浮點數

(C)double是帶符號的64位浮點數

(D)char是8位Unicode字元

9. 下列(D )是合法的標識符?

A:12class B:void C:-5 D:_blank

10. 在編寫Java程序時,如果不為類的成員變數定義初始值,Java會給出它們的默認值,下列說法中不正確的一個是( D )。

A:byte的默認值是0 B:boolean的默認值是false

C: char類型的默認值是』\0』 D: long類型的默認值是0.0L

11. 下列程序執行的結果是:( B )

public class News {

public static void main(String[] args) {

System.out.println(1+2+ "aa"+3);

}}

A: "12aa3" B: "3aa3 " C: "12aa" D: "aa3"

12. 表達式(12==0) && (1/0 < 1)的值為( B )。

A: true B: false C: 0 D: 運行時拋出異常

13. 下列循環體執行的次數是( C )。

int y=2, x=4;

while(--x != x/y){ }

A : 1 B: 2 C : 3 D : 4

14. 已知如下代碼:

switch(m){

case 0: System.out.println("Condition 0");

case 1: System.out.println("Condition 1");

case 2: System.out.println("Condition 2");

case 3: System.out.println("Condition 3");break;

default:System.out.println("Other Condition");

}

當m的值為( D )時,輸出「Condition 3」

(A)2 (B)0、1 (C)0、1、2 (D)0、1、2、3

15. 下列語句輸出的結果是:( C )

public class X3 {

public static void main(String[] args) {

for(int i=0; i<10; i++){

if(i==5) break;

System.out.print(i);

}

}

}

A:編譯錯誤; B:1234;C:01234;D:12345;

16. 下列語句輸出的結果是:( D )

public class Lx1 {

public static void main(String[] args) {

for(int i=0;i<5;i++){

switch(i){

case 0:System.out.print("B");

case 1:System.out.print("e");break;

case 2:System.out.print("g");

case 3:System.out.print("!");break;

case 4:System.out.print("!");break;

default:System.out.print("!");

}

}

}

}

A:Beg!!! B:Beeg! C:Beg! D:Beeg!!!

17. 下面foreach循環的程序輸出結果是( D )。

public class Lx1{

public static void main(String[] args) {

String s1[]={"歡迎您","3","G","同","學",};

Arrays.sort(s1);

for(String s0:s1)

System.out.print (s0);

}

}

A:歡迎您3G同學 B:3G歡迎您同學 C:同學歡迎您3G D:3G同學歡迎您

18. 閱讀以下程序,選擇正確的運行結果:( B )

public class Lx1 {

public static void main(String[] args) {

byte d[]="YOUIHE你我他".getBytes();

String s=new String(d,6,2);

System.out.println(s);

}

}

A:HE; B:你; C:我; D:他

19. 設有下列數組定義語句:

int a[][]= {{1, 2}, {3}};

則對此語句的敘述正確的是( D )。

A: 定義了一個名為a的一維數組 B: a數組 a[1][1]為0

C: a數組元素的下標為1~3 D: 數組中每個元素的類型都是整數

20. 下列程序輸出的結果是:( B )

public class Lx1 {

public static void main(String[] args) {

String a[][] ={{"","","",""},{""},{"",""}};

System.out.println(a[2].length);

}

}

A:1 B:2 C:3 D:4

21. 關於以下程序的說明,正確的是( C )

1. class StaticStuff

2. {

3. static int x=10;

4. static { x+=5;}

5. public static void main(String args[ ])

6. {

7. System.out.println(「x=」 + x);

8. }

9. static { x/=3;}

10. }

A、4行與9行不能通過編譯,因為缺少方法名和返回類型

B、9行不能通過編譯,因為只能有一個靜態初始化器

C、編譯通過,執行結果為:x=5

D、編譯通過,執行結果為:x=3

22. 給出下面代碼,關於該程序以下哪個說法是正確的?( C )

public class Person{

static int arr[] = new int[5];

public static void main(String a[]) {

for(int i=0;i
System.out.print(arr[0]);

}

}

A、編譯時將產生錯誤 B、編譯時正確,運行時將產生錯誤 C、輸出零 D、輸出空

23. 下面程序中類ClassDemo中定義了一個靜態變數sum,分析程序段的輸出結果。( C )

class ClassDemo {

public static int sum=1;

public ClassDemo() {

sum = sum + 5;}

}

public class ClassDemoTest{

public static void main(String args[]) {

ClassDemo demo1=new ClassDemo();

ClassDemo demo2=new ClassDemo();

System.out.println(demo1.sum);}

}

A: 0 B: 6 C: 11 D: 2

24. 下面關於方法的說法,不正確的是( C )。

A: Java中的構造方法名必須和類名相同

B: 方法體是對方法的實現,包括變數聲明和合法語句

C: 如果一個類定義了構造方法,也可以用該類的默認構造方法

D: 類的私有方法不能被其他類直接訪問

25. 在Java中下列說法正確的是( C )

A) 一個子類可以有多個父類,一個父類也可以有多個子類

B) 一個子類可以有多個父類,但一個父類只可以有一個子類

C) 一個子類可以有一個父類,但一個父類可以有多個子類

D) 上述說法都不對

『拾』 Java面試題,常見面試題及答案匯總

Java最新面試題附贈答案

Q1: Java內部類和子類之間有什麼區別?

答案:內部類是指在一個外部類的內部再定義一個類,內部類對外部類有訪問許可權,可以訪問類中定義的所有變數和方法。子類是從父類(superclass)中繼承的類,子類可以訪問父類所有public和protected的欄位和方法。

Q2: 靜態方法和靜態變數的目的是什麼?

答案:靜態變數被類的所有實例共用,靜態類只能訪問類的靜態變數,或調用類的靜態方法。

Q3: Java語言中有哪些常見的訪問說明符,有什麼意義?

答案:Java中的訪問說明符是放在類名之前,用於定義訪問范圍的關鍵字,常見的訪問說明符有以下幾類:

Public:公共,能被項目中的任何一個Class、Method、Field訪問。

Protected:受保護,能被同類或子類訪問,不能從外部訪問。

Default:默認,只能被同一個包的ClassMethod、Field訪問。

Private:私有,只能被本類訪問。

Q4: 什麼是數據封裝及其意義?

答案:封裝是面向對象編程中用於在單個單元中組合屬性和方法。封裝可以幫助程序員遵循模塊化方法進行軟體開發,每個對象都有自己的一組方法和變數,並且可以獨立干其他對象來執行其功能。另外,封裝也有數據隱藏的目的。

Q5: 什麼是 singleton class(單例類)? 並給出其用法的實際例子。

答案:單例類只能有一個實例,必須自己創建自己的唯一實例,必須給所有其他對象提供這一實例。單例做差枯使用場景的最佳實踐是由於某些驅動程序限制,或由於許可問題的限制只能連接資料庫。

Q6: 什麼是循環? Java中有哪些循環?

答案:循環用於編程中重復執行語句,Java中的循環有三類:

1、for循環

for循環用於執行指定重復次數的語句,當程序員明確知道循環次數可以使用for循環。

2、While循環

當語句滿足條件時開始進行重復執行,直到語句不再滿足條件退出循環。While循環中在執行語句之前先檢查是否滿足條件。

3、do while循環

Do while 和while循環基本類似,唯一不同的是do while是先執行語句再檢查條件,也就是說dowhile循環至少會執行一次語句。

Q7: 什麼是無限循環? 如何聲明無限循環?

答案:無限循環是指無條件執行,無限運行。無限循環可以由定義中斷語句塊來結束。

Q8: Java中的double和float變數有什麼區別?

答案: float是單精度浮點數,內存中佔用4位元組double是雙精慶冊度浮點數,內存中佔用8位元組。

Q9: Java中的Final關鍵字是什麼意思純洞? 請舉例說明。

答案: final是Java中的關鍵字,有「無法改變」、「終態」的含義,final類不能被繼承,沒有子類,final類中的方法默認是final的,且不能被子類的方法覆蓋,但可以被繼承。final成員變數表示常量,只能被賦值一次,賦值後值不再改變。final不能用於修飾構造方法。下面的例子中,const_val被聲明且賦值為常量100:Private Final int const_val=100而當一個方法被聲明為final之後,它不能被子類覆蓋,而且會比其他方法都快。

Q10: 舉例說明什麼是三元運算符?

答案:三元運算符,也稱為條件運算符,根據布爾值來決定將哪個值分配給變數,它被表示為...? ...:...

在下面的示例中,如果rank為1,status=Done,否則status=Pending。

Q11: 什麼是Java Packages? 其意義是什麼?

答案:為了更好地組織類,Java 提供了包機制,用於區別類名的命名空間。

包的作用:

1、把功能相似或相關的類或介面組織在同一個包中,方便類的查找和使用。

2、如同文件夾一樣,包也採用了樹形目錄的存儲方式。同一個包中的類名字是不同的,不同的包中的類的名字是可以相同的,當同時調用兩個不同包中相同類名的類時,應該加上包名加以區別。因此,包可以避免名字沖突。3、包也限定了訪問許可權,擁有包訪問許可權的類才能訪問某個包中的類。

閱讀全文

與java筆試編程題庫相關的資料

熱點內容
cocos2dluapdf 瀏覽:491
假的加密鎖靠譜嗎 瀏覽:176
經營聖手伺服器怎麼調 瀏覽:749
arduino手機編程 瀏覽:481
西醫pdf下載 瀏覽:29
後浪電影學院pdf 瀏覽:813
程序員怎麼做到不被人嫉妒 瀏覽:669
cmd新建文件夾md命令 瀏覽:570
php數組中的數值排序 瀏覽:832
安卓手機怎麼避免小孩內購 瀏覽:171
聯想伺服器出現黃色嘆號怎麼辦 瀏覽:991
約翰編譯器製作教程 瀏覽:130
大地pdf 瀏覽:109
pdfplus 瀏覽:577
匯編O命令 瀏覽:970
plt轉pdf 瀏覽:365
魔獸60宏命令大全 瀏覽:479
php志願者網站源碼 瀏覽:875
貿易pdf 瀏覽:497
dbug命令 瀏覽:352