本文目錄一覽:
- 1、在線急等,Java面試筆試題
- 2、Java常見的面試問題(帶答案),自己答出來多少
- 3、哪裡有java筆試題
- 4、java經典面試題
- 5、求最新JAVA面試題目,越全越好!!!
- 6、Java面試題
在線急等,Java面試筆試題
Integer[] merge(Integer[] arr1, Integer[] arr2) {
java.util.CollectionInteger aCollection=new TreeSetInteger();
aCollection.addAll(Arrays.asList(arr1));
aCollection.addAll(Arrays.asList(arr2));
Integer[] arr3 = new Integer[aCollection.size()];
aCollection.toArray(arr3);
return arr3;
}
Java常見的面試問題(帶答案),自己答出來多少
1、在java中如果聲明一個類為final,表示什麼意思?
答:final是最終的意思,final可用於定義變量、方法和類但含義不同,聲明為final的類不能被繼承。
父類的構造方法是否可以被子類覆蓋(重寫)?
答:父類的構造方法不可以被子類覆蓋,因為父類和子類的類名是不可能一樣的。
2、請講述String 和StringBuffer的區別。
答:String 類所定義的對象是用於存放”長度固定”的字符串。
StringBuffer類所定義的對象是用於存放”長度可變動”的字符串。
3、如果有兩個類A、B(注意不是接口),你想同時使用這兩個類的功能,那麼你會如何編寫這個C類呢?
答:因為類A、B不是接口,所以是不可以直接繼承的,但可以將A、B類定義成父子類,那麼C類就能實現A、B類的功能了。假如A為B的父類,B為C的父類,此時C就能實現A、B的功能。
4、談談你對抽象類和接口的理解。
答:定義抽象類的目的是提供可由其子類共享的一般形式、子類可以根據自身需要擴展抽象類、抽象類不能實例化、抽象方法沒有函數體、抽象方法必須在子類中給出具體實現。他使用extends來繼承。
接口:一個接口允許一個類從幾個接口繼承而來,Java 程序一次只能繼承一個類但可以實現幾個接口,接口不能有任何具體的方法,接口也可用來定義可由類使用的一組常量。其實現方式是interface來實現。
5、Java中什麼是競態條件?
答:競態條件會導致程序在並發情況下出現一些bugs。多線程對一些資源的競爭的時候就會產生競態條件,如果首先要執行的程序競爭失敗排到後面執行了,那麼整個程序就會出現一些不確定的bugs。這種bugs很難發現而且會重複出現,因為線程間的隨機競爭。
6、Java中如何停止一個線程?
答:Java提供了很豐富的API但沒有為停止線程提供API。JDK 1.0本來有一些像stop(), suspend() 和 resume()的控制方法但是由於潛在的死鎖威脅因此在後續的JDK版本中他們被棄用了,之後Java API的設計者就沒有提供一個兼容且線程安全的方法來停止一個線程。當run() 或者 call() 方法執行完的時候線程會自動結束,如果要手動結束一個線程,你可以用volatile 布爾變量來退出run()方法的循環或者是取消任務來中斷線程。點擊這裡查看示例代碼。
7、 一個線程運行時發生異常會怎樣?
答: 簡單的說,如果異常沒有被捕獲該線程將會停止執行。Thread.UncaughtExceptionHandler是用於處理未捕獲異常造成線程突然中斷情況的一個內嵌接口。當一個未捕獲異常將造成線程中斷的時候JVM會使用Thread.getUncaughtExceptionHandler()來查詢線程的UncaughtExceptionHandler並將線程和異常作為參數傳遞給handler的uncaughtException()方法進行處理。
哪裡有java筆試題
java面試不光有面試也會有筆試,整理了一些java筆試題及答案分享給大家,準備或將要參加java面試的朋友可以仔細閱讀,爭取一次通過,進去自己心儀的企業工作。想看更多面試問題請關注WeiXin工縱浩“浙江優就業”!
一、九道選擇題
1.Java程序的種類有(BCD )
A.類(Class) B.Applet C.Application D.Servlet
2.下列說法正確的有( BCD)
A. 環境變量可在編譯source code時指定
B. 在編譯程序時,所能指定的環境變量不包括class path
C. javac一次可同時編譯數個Java源文件
D. javac.exe能指定編譯結果要置於哪個目錄(directory)
3.下列標識符不合法的有( ACD)
A.new B.$Usdollars C.1234 D.car.taxi
4.下列說法錯誤的有( BCD)
A. 數組是一種對象
B. 數組屬於一種原生類
C. int number=={31,23,33,43,35,63}
D. 數組的大小可以任意改變
5.不能用來修飾interface的有(ACD )
A.private B.public C.protected D.static
6.下列正確的有(ACD )
A. call by value不會改變實際參數的數值
B. call by reference能改變實際參數的參考地址
C. call by reference不能改變實際參數的參考地址
D. call by reference能改變實際參數的內容
7.下列說法錯誤的有( ACD)
A. 在類方法中可用this來調用本類的類方法
B. 在類方法中調用本類的類方法時可直接調用
C. 在類方法中只能調用本類中的類方法
D. 在類方法中絕對不能調用實例方法
8.下列說法錯誤的有(ABC )
A. Java面向對象語言容許單獨的過程與函數存在
B. Java面向對象語言容許單獨的方法存在
C. Java語言中的方法屬於類中的成員(member)
D. Java語言中的方法必定隸屬於某一類(對象),調用方法與過程或函數相同
9.下列說法錯誤的有(BCD )
A. 能被java.exe成功運行的java class文件必須有main方法
B. J2SDK就是Java API
C. Appletviewer.exe可利用jar選項運行.jar文件
D. 能被Appletviewer成功運行的java class文件必須有main方法
二、六道簡答題
1、在java中如果聲明一個類為final,表示什麼意思?
答:final是最終的意思,final可用於定義變量、方法和類但含義不同,聲明為final的類不能被繼承。
2、父類的構造方法是否可以被子類覆蓋(重寫)?
答:父類的構造方法不可以被子類覆蓋,因為父類和子類的類名是不可能一樣的。
3、請講述String 和StringBuffer的區別。
答:String 類所定義的對象是用於存放“長度固定”的字符串。
StringBuffer類所定義的對象是用於存放“長度可變動”的字符串。
4、如果有兩個類A、B(注意不是接口),你想同時使用這兩個類的功能,那麼你會如何編寫這個C類呢?
答:因為類A、B不是接口,所以是不可以直接繼承的,但可以將A、B類定義成父子類,那麼C類就能實現A、B類的功能了。假如A為B的父類,B為C的父類,此時C就能實現A、B的功能。
5、結合Java視頻Lesson5(多線程),分析sleep()和wait()方法的區別。
答: Sleeping睡眠的意思 : sleep() 方法用來暫時中止執行的線程。在睡眠後,線程將進入就緒狀態。
waiting等待的意思: 如果調用了 wait() 方法,線程將處於等待狀態。用於在兩個或多個線程並發運行時。
6、談談你對抽象類和接口的理解。
答:定義抽象類的目的是提供可由其子類共享的一般形式、子類可以根據自身需要擴展抽象類、抽象類不能實例化、抽象方法沒有函數體、抽象方法必須在子類中給出具體實現。他使用extends來繼承。
接口:一個接口允許一個類從幾個接口繼承而來,Java 程序一次只能繼承一個類但可以實現幾個接口,接口不能有任何具體的方法,接口也可用來定義可由類使用的一組常量。其實現方式是interface來實現。
1、HashMap和Hashtable的區別。
都屬於Map接口的類,實現了將惟一鍵映射到特定的值上。HashMap 類沒有分類或者排序。它允許一個null 鍵和多個null 值。Hashtable 類似於HashMap,但是不允許null 鍵和null 值。它也比HashMap 慢,因為它是同步的,是線程安全的。
2、sleep() 和wait() 有什麼區別?
sleep是線程類(Thread)的方法,導致此線程暫停執行指定時間,給執行機會給其他線程,但是監控狀態依然保持,到時後會自動恢復。調用sleep不會釋放對象鎖。wait是Object類的方法,對此對象調用wait方法導致本線程放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象發出notify方法(或notifyAll)後本線程才進入對象鎖定池準備獲得對象鎖進入運行狀態。
3、Collection 和Collections的區別。
Collections是個java.util下的類,它包含有各種有關集合操作的靜態方法。
Collection是個java.util下的接口,它是各種集合結構的父接口。
4、什麼時候用assert.
assertion(斷言)在軟件開發中是一種常用的調試方式,很多開發語言中都支持這種機制。在實現中,assertion就是在程序中的一條語句,它對一個boolean表達式進行檢查,一個正確程序必須保證這個boolean表達式的值為true;如果該值為false,說明程序已經處於不正確的狀態下,系統將給出警告或退出。一般來說,assertion用於保證程序最基本、關鍵的正確性。assertion檢查通常在開發和測試時開啟。為了提高性能,在軟件發布後,assertion檢查通常是關閉的。
5、和的區別。
是兩個數相與,是位運算符,是布爾邏輯運算符,連接兩個條件表達式的,兩個條件表達式都為真時,整個才為真
6、談談final, finally, finalize的區別。
final:修飾符(關鍵字)如果一個類被聲明為final,意味着它不能再派生出新的子類,不能作為父類被繼承。因此一個類不能既被聲明為abstract的,又被聲明為final的。將變量或方法聲明為final,可以保證它們在使用中不被改變。被聲明為final的變量必須在聲明時給定初值,而在以後的引用中只能讀取,不可修改。被聲明為final的方法也同樣只能使用,不能重載。
finally:在異常處理時提供finally 塊來執行任何清除操作。如果拋出一個異常,那麼相匹配的catch 子句就會執行,然後控制就會進入finally 塊(如果有的話)。
finalize:方法名。Java 技術允許使用finalize() 方法在垃圾收集器將對象從內存中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調用的。它是在Object 類中定義的,因此所有的類都繼承了它。子類覆蓋finalize() 方法以整理系統資源或者執行其他清理工作。finalize() 方法是在垃圾收集器刪除對象之前對這個對象調用的。
7、Anonymous Inner Class (匿名內部類) 是否可以extends(繼承)其它類,是否可以implements(實現)interface(接口)?
匿名的內部類是沒有名字的內部類。不能繼承其它類,但一個內部類可以作為一個接口,由另一個內部類實現。
8、。Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;因為返回最接近參數的long.通過加上1/2 將該結果舍入為整數,取結果的基數並將其強制轉換為long 類型。換句話說,結果等於以下表達式的值:(long)Math.floor(a + 0.5d)
9、Static Nested Class 和Inner Class的不同,說得越多越好(面試題有的很籠統)。
Static nested class(嵌套類)是將內部類聲明為static.普通內部類對象隱式地保存了一個引用,指向創建它的外圍類對象,不能有static數據和static字段。嵌套類意味着:1 要創建嵌套類的對象,並不需要其外圍類的對象;2不能從嵌套類的對象中訪問非靜態的外圍類的對象。
10、ArrayList和Vector的區別。
1同步性:Vector是線程安全的,也就是說是同步的,而ArrayList是線程序不安全的,不是同步的2數據增長:當需要增長時,Vector默認增長為原來一培,而ArrayList卻是原來的一半。
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_lenMax_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面試題目,越全越好!!!
Java面試不光有面試也會有筆試,為了讓java應聘筆試題能順利通過,中公優就業·浙江IT培訓的小U老師整理了一些java筆試題及答案分享給大家,準備或將要參加java面試的朋友可以仔細閱讀,爭取一次通過,進去自己心儀的企業工作。
一、九道選擇題
1.Java程序的種類有(BCD )
A.類(Class) B.Applet C.Application D.Servlet
2.下列說法正確的有( BCD)
A. 環境變量可在編譯source code時指定
B. 在編譯程序時,所能指定的環境變量不包括class path
C. javac一次可同時編譯數個Java源文件
D. javac.exe能指定編譯結果要置於哪個目錄(directory)
3.下列標識符不合法的有( ACD)
A.new B.$Usdollars C.1234 D.car.taxi
4.下列說法錯誤的有( BCD)
A. 數組是一種對象
B. 數組屬於一種原生類
C. int number=={31,23,33,43,35,63}
D. 數組的大小可以任意改變
5.不能用來修飾interface的有(ACD )
A.private B.public C.protected D.static
6.下列正確的有(ACD )
A. call by value不會改變實際參數的數值
B. call by reference能改變實際參數的參考地址
C. call by reference不能改變實際參數的參考地址
D. call by reference能改變實際參數的內容
7.下列說法錯誤的有( ACD)
A. 在類方法中可用this來調用本類的類方法
B. 在類方法中調用本類的類方法時可直接調用
C. 在類方法中只能調用本類中的類方法
D. 在類方法中絕對不能調用實例方法
8.下列說法錯誤的有(ABC )
A. Java面向對象語言容許單獨的過程與函數存在
B. Java面向對象語言容許單獨的方法存在
C. Java語言中的方法屬於類中的成員(member)
D. Java語言中的方法必定隸屬於某一類(對象),調用方法與過程或函數相同
9.下列說法錯誤的有(BCD )
A. 能被java.exe成功運行的java class文件必須有main方法
B. J2SDK就是Java API
C. Appletviewer.exe可利用jar選項運行.jar文件
D. 能被Appletviewer成功運行的java class文件必須有main方法
二、六道簡答題
1、在java中如果聲明一個類為final,表示什麼意思?
答:final是最終的意思,final可用於定義變量、方法和類但含義不同,聲明為final的類不能被繼承。
2、父類的構造方法是否可以被子類覆蓋(重寫)?
答:父類的構造方法不可以被子類覆蓋,因為父類和子類的類名是不可能一樣的。
3、請講述String 和StringBuffer的區別。
答:String 類所定義的對象是用於存放“長度固定”的字符串。
StringBuffer類所定義的對象是用於存放“長度可變動”的字符串。
4、如果有兩個類A、B(注意不是接口),你想同時使用這兩個類的功能,那麼你會如何編寫這個C類呢?
答:因為類A、B不是接口,所以是不可以直接繼承的,但可以將A、B類定義成父子類,那麼C類就能實現A、B類的功能了。假如A為B的父類,B為C的父類,此時C就能實現A、B的功能。
5、結合Java視頻Lesson5(多線程),分析sleep()和wait()方法的區別。
答: Sleeping睡眠的意思 : sleep() 方法用來暫時中止執行的線程。在睡眠後,線程將進入就緒狀態。
waiting等待的意思: 如果調用了 wait() 方法,線程將處於等待狀態。用於在兩個或多個線程並發運行時。
6、談談你對抽象類和接口的理解。
答:定義抽象類的目的是提供可由其子類共享的一般形式、子類可以根據自身需要擴展抽象類、抽象類不能實例化、抽象方法沒有函數體、抽象方法必須在子類中給出具體實現。他使用extends來繼承。
接口:一個接口允許一個類從幾個接口繼承而來,Java
程序一次只能繼承一個類但可以實現幾個接口,接口不能有任何具體的方法,接口也可用來定義可由類使用的一組常量。其實現方式是interface來實現。
以上就是小U老師整理的2018java筆試題及答案,關於java應聘筆試題還有很多,後期小編會及時整理更新更多java應聘筆試題,準備參加java面試的朋友可以仔細研究題目,做好充分的準備參加每一場面試,祝你成功!
Java面試題
java面試筆試題大匯總
JAVA相關基礎知識
1、面向對象的特徵有哪些方面
1.抽象:
抽象就是忽略一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象並不打算了解全部問題,而只是選擇其中的一部分,暫時不用部分細節。抽象包括兩個方面,一是過程抽象,二是數據抽象。
2.繼承:
繼承是一種聯結類的層次模型,並且允許和鼓勵類的重用,它提供了一種明確表述共性的方法。對象的一個新類可以從現有的類中派生,這個過程稱為類繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從它的基類那裡繼承方法和實例變量,並且類可以修改或增加新的方法使之更適合特殊的需要。
3.封裝:
封裝是把過程和數據包圍起來,對數據的訪問只能通過已定義的界面。面向對象計算始於這個基本概念,即現實世界可以被描繪成一系列完全自治、封裝的對象,這些對象通過一個受保護的接口訪問其他對象。
4. 多態性:
多態性是指允許不同類的對象對同一消息作出響應。多態性包括參數化多態性和包含多態性。多態性語言具有靈活、抽象、行為共享、代碼共享的優勢,很好的解決了應用程序函數同名問題。
2、String是最基本的數據類型嗎?
基本數據類型包括byte、int、char、long、float、double、boolean和short。
java.lang.String類是final類型的,因此不可以繼承這個類、不能修改這個類。為了提高效率節省空間,我們應該用StringBuffer類
3、int 和 Integer 有什麼區別
Java 提供兩種不同的類型:引用類型和原始類型(或內置類型)。Int是java的原始數據類型,Integer是java為int提供的封裝類。Java為每個原始類型提供了封裝類。
原始類型封裝類
booleanBoolean
charCharacter
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
引用類型和原始類型的行為完全不同,並且它們具有不同的語義。引用類型和原始類型具有不同的特徵和用法,它們包括:大小和速度問題,這種類型以哪種類型的數據結構存儲,當引用類型和原始類型用作某個類的實例數據時所指定的缺省值。對象引用實例變量的缺省值為 null,而原始類型實例變量的缺省值與它們的類型有關。
4、String 和StringBuffer的區別
JAVA平台提供了兩個類:String和StringBuffer,它們可以儲存和操作字符串,即包含多個字符的字符數據。這個String類提供了數值不可改變的字符串。而這個StringBuffer類提供的字符串進行修改。當你知道字符數據要改變的時候你就可以使用StringBuffer。典型地,你可以使用StringBuffers來動態構造字符數據。
5、運行時異常與一般異常有何異同?
異常表示程序運行過程中可能出現的非正常狀態,運行時異常表示虛擬機的通常操作中可能遇到的異常,是一種常見運行錯誤。java編譯器要求方法必須聲明拋出可能發生的非運行時異常,但是並不要求必須聲明拋出未被捕獲的運行時異常。
6、說出Servlet的生命周期,並說出Servlet和CGI的區別。
Servlet被服務器實例化後,容器運行其init方法,請求到達時運行其service方法,service方法自動派遣運行與請求對應的doXXX方法(doGet,doPost)等,當服務器決定將實例銷毀的時候調用其destroy方法。
與cgi的區別在於servlet處於服務器進程中,它通過多線程方式運行其service方法,一個實例可以服務於多個請求,並且其實例一般不會銷毀,而CGI對每個請求都產生新的進程,服務完成後就銷毀,所以效率上低於servlet。
7、說出ArrayList,Vector, LinkedList的存儲性能和特性
ArrayList和Vector都是使用數組方式存儲數據,此數組元素數大於實際存儲的數據以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數組元素移動等內存操作,所以索引數據快而插入數據慢,Vector由於使用了synchronized方法(線程安全),通常性能上較ArrayList差,而LinkedList使用雙向鏈表實現存儲,按序號索引數據需要進行前向或後向遍歷,但是插入數據時只需要記錄本項的前後項即可,所以插入速度較快。
8、EJB是基於哪些技術實現的?並說出SessionBean和EntityBean的區別,StatefulBean和StatelessBean的區別。
EJB包括Session Bean、Entity Bean、Message Driven Bean,基於JNDI、RMI、JAT等技術實現。
SessionBean在J2EE應用程序中被用來完成一些服務器端的業務操作,例如訪問數據庫、調用其他EJB組件。EntityBean被用來代表應用系統中用到的數據。
對於客戶機,SessionBean是一種非持久性對象,它實現某些在服務器上運行的業務邏輯。
對於客戶機,EntityBean是一種持久性對象,它代表一個存儲在持久性存儲器中的實體的對象視圖,或是一個由現有企業應用程序實現的實體。
Session Bean 還可以再細分為 Stateful Session Bean 與 Stateless Session Bean ,這兩種的 Session Bean都可以將系統邏輯放在 method之中執行,不同的是 Stateful Session Bean 可以記錄呼叫者的狀態,因此通常來說,一個使用者會有一個相對應的 Stateful Session Bean 的實體。Stateless Session Bean 雖然也是邏輯組件,但是他卻不負責記錄使用者狀態,也就是說當使用者呼叫 Stateless Session Bean 的時候,EJB Container 並不會找尋特定的 Stateless Session Bean 的實體來執行這個 method。換言之,很可能數個使用者在執行某個 Stateless Session Bean 的 methods 時,會是同一個 Bean 的 Instance 在執行。從內存方面來看, Stateful Session Bean 與 Stateless Session Bean 比較, Stateful Session Bean 會消耗 J2EE Server 較多的內存,然而 Stateful Session Bean 的優勢卻在於他可以維持使用者的狀態。
9、Collection 和 Collections的區別。
Collection是集合類的上級接口,繼承與他的接口主要有Set 和List.
Collections是針對集合類的一個幫助類,他提供一系列靜態方法實現對各種集合的搜索、排序、線程安全化等操作。
10、和的區別。
是位運算符,表示按位與運算,是邏輯運算符,表示邏輯與(and)。
11、HashMap和Hashtable的區別。
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算法都大概一樣,所以性能不會有很大的差異。
12、final, finally, finalize的區別。
final 用於聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。
finally是異常處理語句結構的一部分,表示總是執行。
finalize是Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收,例如關閉文件等。
13、sleep() 和 wait() 有什麼區別?
sleep是線程類(Thread)的方法,導致此線程暫停執行指定時間,給執行機會給其他線程,但是監控狀態依然保持,到時後會自動恢復。調用sleep不會釋放對象鎖。
wait是Object類的方法,對此對象調用wait方法導致本線程放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象發出notify方法(或notifyAll)後本線程才進入對象鎖定池準備獲得對象鎖進入運行狀態。
14、Overload和Override的區別。Overloaded的方法是否可以改變返回值的類型?
方法的重寫Overriding和重載Overloading是Java多態性的不同表現。重寫Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被”屏蔽”了。如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類型。
15、error和exception有什麼區別?
error 表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說內存溢出。不可能指望程序能處理這樣的情況。
exception 表示一種設計或實現問題。也就是說,它表示如果程序運行正常,從不會發生的情況。
16、同步和異步有何異同,在什麼情況下分別使用他們?舉例說明。
如果數據將在線程間共享。例如正在寫的數據以後可能被另一個線程讀到,或者正在讀的數據可能已經被另一個線程寫過了,那麼這些數據就是共享數據,必須進行同步存取。
當應用程序在對象上調用了一個需要花費很長時間來執行的方法,並且不希望讓程序等待方法的返回時,就應該使用異步編程,在很多情況下採用異步途徑往往更有效率。
17、abstract class和interface有什麼區別?
聲明方法的存在而不去實現它的類被叫做抽象類(abstract class),它用於要創建一個體現某些基本行為的類,並為該類聲明方法,但不能在該類中實現該類的情況。不能創建abstract 類的實例。然而可以創建一個變量,其類型是一個抽象類,並讓它指向具體子類的一個實例。不能有抽象構造函數或抽象靜態方法。Abstract 類的子類為它們父類中的所有抽象方法提供實現,否則它們也是抽象類為。取而代之,在子類中實現該方法。知道其行為的其它類可以在類中實現這些方法。
接口(interface)是抽象類的變體。在接口中,所有方法都是抽象的。多繼承性可通過實現這樣的接口而獲得。接口中的所有方法都是抽象的,沒有一個有程序體。接口只可以定義static final成員變量。接口的實現與子類相似,除了該實現類不能從接口定義中繼承行為。當類實現特殊接口時,它定義(即將程序體給予)所有這種接口的方法。然後,它可以在實現了該接口的類的任何對象上調用接口的方法。由於有抽象類,它允許使用接口名作為引用變量的類型。通常的動態聯編將生效。引用可以轉換到接口類型或從接口類型轉換,instanceof 運算符可以用來決定某對象的類是否實現了接口。
18、heap和stack有什麼區別。
棧是一種線形集合,其添加和刪除元素的操作應在同一段完成。棧按照後進先出的方式進行處理。
堆是棧的一個組成元素
19、forward 和redirect的區別
forward是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然後把這些內容再發給瀏覽器,瀏覽器根本不知道服務器發送的內容是從哪兒來的,所以它的地址欄中還是原來的地址。
redirect就是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器重新去請求那個地址,一般來說瀏覽器會用剛才請求的所有參數重新請求,所以session,request參數都可以獲取。
20、EJB與JAVA BEAN的區別?
Java Bean 是可復用的組件,對Java Bean並沒有嚴格的規範,理論上講,任何一個Java類都可以是一個Bean。但通常情況下,由於Java Bean是被容器所創建(如Tomcat)的,所以Java Bean應具有一個無參的構造器,另外,通常Java Bean還要實現Serializable接口用於實現Bean的持久性。Java Bean實際上相當於微軟COM模型中的本地進程內COM組件,它是不能被跨進程訪問的。Enterprise Java Bean 相當於DCOM,即分布式組件。它是基於Java的遠程方法調用(RMI)技術的,所以EJB可以被遠程訪問(跨進程、跨計算機)。但EJB必須被布署在諸如Webspere、WebLogic這樣的容器中,EJB客戶從不直接訪問真正的EJB組件,而是通過其容器訪問。EJB容器是EJB組件的代理,EJB組件由容器所創建和管理。客戶通過容器來訪問真正的EJB組件。
21、Static Nested Class 和 Inner Class的不同。
Static Nested Class是被聲明為靜態(static)的內部類,它可以不依賴於外部類實例被實例化。而通常的內部類需要在外部類實例化後才能實例化。
22、JSP中動態INCLUDE與靜態INCLUDE的區別?
動態INCLUDE用jsp:include動作實現 jsp:include page=”included.jsp” flush=”true” /它總是會檢查所含文件中的變化,適合用於包含動態頁面,並且可以帶參數。
靜態INCLUDE用include偽碼實現,定不會檢查所含文件的變化,適用於包含靜態頁面%@ include file=”included.htm” %
23、什麼時候用assert。
assertion(斷言)在軟件開發中是一種常用的調試方式,很多開發語言中都支持這種機制。在實現中,assertion就是在程序中的一條語句,它對一個boolean表達式進行檢查,一個正確程序必須保證這個boolean表達式的值為true;如果該值為false,說明程序已經處於不正確的狀態下,系統將給出警告或退出。一般來說,assertion用於保證程序最基本、關鍵的正確性。assertion檢查通常在開發和測試時開啟。為了提高性能,在軟件發布後,assertion檢查通常是關閉的。
27、String s = new String(“xyz”);創建了幾個String Object?
兩個
29、Java有沒有goto?
java中的保留字,現在沒有在java中使用。
30、啟動一個線程是用run()還是start()?
啟動一個線程是調用start()方法,使線程所代表的虛擬處理機處於可運行狀態,這意味着它可以由JVM調度並執行。這並不意味着線程就會立即運行。run()方法可以產生必須退出的標誌來停止一個線程。
32、應用服務器有那些?
BEA WebLogic Server,IBM WebSphere Application Server,Oracle9i Application Server,jBoss,Tomcat
34、接口是否可繼承接口? 抽象類是否可實現(implements)接口? 抽象類是否可繼承實體類(concrete class)?
接口可以繼承接口。抽象類可以實現(implements)接口,抽象類是否可繼承實體類,但前提是實體類必須有明確的構造函數。
35、List, Set, Map是否繼承自Collection接口?
List,Set是,Map不是
38、數組有沒有length()這個方法? String有沒有length()這個方法?
數組沒有length()這個方法,有length的屬性。String有有length()這個方法。
39、Set里的元素是不能重複的,那麼用什麼方法來區分重複與否呢? 是用==還是equals()? 它們有何區別?
Set里的元素是不能重複的,那麼用iterator()方法來區分重複與否。equals()是判讀兩個Set是否相等。
equals()和==方法決定引用值是否指向同一對象equals()在類中被覆蓋,為的是當兩個分離的對象的內容和類型相配的話,返回真值。
40、構造器Constructor是否可被override?
構造器Constructor不能被繼承,因此不能重寫Overriding,但可以被重載Overloading。
41、是否可以繼承String類?
String類是final類故不可以繼承。
42、swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
switch(expr1)中,expr1是一個整數表達式。因此傳遞給 switch 和 case 語句的參數應該是 int、 short、 char 或者 byte。long,string 都不能作用於swtich。
43、try {}里有一個return語句,那麼緊跟在這個try後的finally {}里的code會不會被執行,什麼時候被執行,在return前還是後?
會執行,在return前執行。
44、編程題: 用最有效率的方法算出2乘以8等於幾?
2 3
45、兩個對象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對?
不對,有相同的hash code。
46、當一個對象被當作參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,那麼這裡到底是值傳遞還是引用傳遞?
是值傳遞。Java 編程語言只有值傳遞參數。當一個對象實例作為一個參數被傳遞到方法中時,參數的值就是對該對象的引用。對象的內容可以在被調用的方法中改變,但對象的引用是永遠不會改變的。
47、當一個線程進入一個對象的一個synchronized方法後,其它線程是否可進入此對象的其它方法?
不能,一個對象的一個synchronized方法只能由一個線程訪問。
53、你所知道的集合類都有哪些?主要方法?
最常用的集合類是 List 和 Map。 List 的具體實現包括 ArrayList 和 Vector,它們是可變大小的列表,比較適合構建、存儲和操作任何類型對象的元素列表。 List 適用於按數值索引訪問元素的情形。
Map 提供了一個更通用的元素存儲方法。 Map 集合類用於存儲元素對(稱作”鍵”和”值”),其中每個鍵映射到一個值。
55、char型變量中能不能存貯一個中文漢字?為什麼?
能夠定義成為一個中文的,因為java中以unicode編碼,一個char佔16個字節,所以放一個中文是沒問題的
56、多線程有幾種實現方法,都是什麼?同步有幾種實現方法,都是什麼?
多線程有兩種實現方法,分別是繼承Thread類與實現Runnable接口
同步的實現方面有兩種,分別是synchronized,wait與notify
57、JSP的內置對象及方法。
request表示HttpServletRequest對象。它包含了有關瀏覽器請求的信息,並且提供了幾個用於獲取cookie, header, 和session數據的有用的方法。
response表示HttpServletResponse對象,並提供了幾個用於設置送回 瀏覽器的響應的方法(如cookies,頭信息等)
out對象是javax.jsp.JspWriter的一個實例,並提供了幾個方法使你能用於向瀏覽器回送輸出結果。
pageContext表示一個javax.servlet.jsp.PageContext對象。它是用於方便存取各種範圍的名字空間、servlet相關的對象的API,並且包裝了通用的servlet相關功能的方法。
session表示一個請求的javax.servlet.http.HttpSession對象。Session可以存貯用戶的狀態信息
applicaton 表示一個javax.servle.ServletContext對象。這有助於查找有關servlet引擎和servlet環境的信息
config表示一個javax.servlet.ServletConfig對象。該對象用於存取servlet實例的初始化參數。
page表示從該頁面產生的一個servlet實例
58、線程的基本概念、線程的基本狀態以及狀態之間的關係
線程指在程序執行過程中,能夠執行程序代碼的一個執行單位,每個程序至少都有一個線程,也就是程序本身。
Java中的線程有四種狀態分別是:運行、就緒、掛起、結束。
60、什麼情況下調用doGet()和doPost()?
Jsp頁面中的form標籤里的method屬性為get時調用doGet(),為post時調用doPost()。
61、servlet的生命周期
web容器加載servlet,生命周期開始。通過調用servlet的init()方法進行servlet的初始化。通過調用service()方法實現,根據請求的不同調用不同的do***()方法。結束服務,web容器調用servlet的destroy()方法。
62、如何現實servlet的單線程模式
%@ page isThreadSafe=”false”%
63、頁面間對象傳遞的方法
request,session,application,cookie等
64、JSP和Servlet有哪些相同點和不同點,他們之間的聯繫是什麼?
JSP是Servlet技術的擴展,本質上是Servlet的簡易方式,更強調應用的外表表達。JSP編譯後是”類servlet”。Servlet和JSP最主要的不同點在於,Servlet的應用邏輯是在Java文件中,並且完全從表示層中的HTML里分離開來。而JSP的情況是Java和HTML可以組合成一個擴展名為.jsp的文件。JSP側重於視圖,Servlet主要用於控制邏輯。
65、四種會話跟蹤技術
會話作用域ServletsJSP 頁面描述
page否是代表與一個頁面相關的對象和屬性。一個頁面由一個編譯好的 Java servlet 類(可以帶有任何的 include 指令,但是沒有 include 動作)表示。這既包括 servlet 又包括被編譯成 servlet 的 JSP 頁面
request是是代表與 Web 客戶機發出的一個請求相關的對象和屬性。一個請求可能跨越多個頁面,涉及多個 Web 組件(由於 forward 指令和 include 動作的關係)
session是是代表與用於某個 Web 客戶機的一個用戶體驗相關的對象和屬性。一個 Web 會話可以也經常會跨越多個客戶機請求
application是是代表與整個 Web 應用程序相關的對象和屬性。這實質上是跨越整個 Web 應用程序,包括多個頁面、請求和會話的一個全局作用域
66、Request對象的主要方法:
setAttribute(String name,Object):設置名字為name的request的參數值
getAttribute(String name):返回由name指定的屬性值
getAttributeNames():返回request對象所有屬性的名字集合,結果是一個枚舉的實例
getCookies():返回客戶端的所有Cookie對象,結果是一個Cookie數組
getCharacterEncoding():返回請求中的字符編碼方式
getContentLength():返回請求的Body的長度
getHeader(String name):獲得HTTP協議定義的文件頭信息
getHeaders(String name):返回指定名字的request Header的所有值,結果是一個枚舉的實例
getHeaderNames():返回所以request Header的名字,結果是一個枚舉的實例
getInputStream():返回請求的輸入流,用於獲得請求中的數據
getMethod():獲得客戶端向服務器端傳送數據的方法
getParameter(String name):獲得客戶端傳送給服務器端的有name指定的參數值
getParameterNames():獲得客戶端傳送給服務器端的所有參數的名字,結果是一個枚舉的實例
getParameterValues(String name):獲得有name指定的參數的所有值
getProtocol():獲取客戶端向服務器端傳送數據所依據的協議名稱
getQueryString():獲得查詢字符串
getRequestURI():獲取發出請求字符串的客戶端地址
getRemoteAddr():獲取客戶端的IP地址
getRemoteHost():獲取客戶端的名字
getSession([Boolean create]):返回和請求相關Session
getServerName():獲取服務器的名字
getServletPath():獲取客戶端所請求的腳本文件的路徑
getServerPort():獲取服務器的端口號
removeAttribute(String name):刪除請求中的一個屬性
67、J2EE是技術還是平台還是框架?
J2EE本身是一個標準,一個為企業分布式應用的開發提供的標準平台。
J2EE也是一個框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技術。
68、我們在web應用開發過程中經常遇到輸出某種編碼的字符,如iso8859-1等,如何輸出一個某種編碼的字符串?
Public String translate (String str) {
String tempStr = “”;
try {
tempStr = new String(str.getBytes(“ISO-8859-1”), “GBK”);
tempStr = tempStr.trim();
}
catch (Exception e) {
System.err.println(e.getMessage());
}
return tempStr;
}
69、簡述邏輯操作(,|,^)與條件操作(,||)的區別。
區別主要答兩點:a.條件操作只能操作布爾型的,而邏輯操作不僅可以操作布爾型,而且可以操作數值型
76、bean 實例的生命周期
對於Stateless Session Bean、Entity Bean、Message Driven Bean一般存在緩衝池管理,而對於Entity Bean和Statefull Session Bean存在Cache管理,通常包含創建實例,設置上下文、創建EJB Object(create)、業務方法調用、remove等過程,對於存在緩衝池管理的Bean,在create之後實例並不從內存清除,而是採用緩衝池調度機制不斷重用實例,而對於存在Cache管理的Bean則通過激活和去激活機制保持Bean的狀態並限制內存中實例數量。
原創文章,作者:GDZWQ,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/127632.html