軟件工程師( Java程序設計)階段測試題
軟件工程師( Java程序設計)階段測試題
一、選擇題,共40分(有多選):
1. 名為HelloWorld.java的Java應用程序如下:
public class HelloWorld {
public static void main(String args[]){
System.out.println("Hello World!");
}
}
…(編譯的時候不區分大小寫(是在WINDOW引導下執行的),但是執行的時候必須要和文件名相同(是在JAVA虛擬機引導下執行的))
將這個程序放在C:\Test下,然后在命令行窗口中,進入到C:\Test路徑執行如下指令:
javac helloworld.java將得到( B)結果。
A. 編譯出錯。
B. 編譯成功,生成名為HelloWorld.class的文件。
C. 編譯成功,生成名為helloworld.class的文件。
D. 找不到名為helloworld.java的文件。
2. 在Java程序被執行前,需要編譯成.class文件。.class文件中保存的是( B )
A、二進制的本機代碼
B、字節碼
C、原始代碼
D、原始代碼與字節碼
3. 下面的程序名為Student.java:
public class Student{
private String name;
public Student(String s_name) //1
{
name = s_name; //2
}
public static void main(String args[])
{
Student s = new Student(); //3,,。。。。構造器缺少參數
}
}
使用如下指令編譯:javac Student.java。將會得到的結果(B )。
A. 將會順利通過編譯,并將產生一個Student.class的類文件。
B. 編譯時在//3處出錯。
C. 編譯時在//2處出錯。
D. 編譯時在//1處出錯。
4. 當看到以下異常信息的時候,應該檢查( B D )
Exception in thread "main" java.lang.NoClassDefFoundError: AnyClass
A、AnyClass.java是否存在
B、CLASSPATH環境變量是否正確
C、PATH環境變量是否正確
D、AnyClass.class是否存在
5. 在面向對象技術中,對外部世界隱藏內部數據,只通過公共方法訪問內部數據,這被稱為( A )
A、封裝
B、多態
C、繼承
D、動態綁定
6. 關于下面的類描述中正確的是( C )。
class Test { // 1
void test(int i) { (構造器是沒有返回值的,也就是不帶VOID) // 2
System.out.println("I am an int."); // 3
} // 4
void test(String s) { // 5
System.out.println("I am a string."); // 6
} // 7
// 8
public static void main(String args[]) { // 9
Test t=new Test(); // 10
char ch='y'; // 11
t.test(ch); // 12
} // 13
} // 14
A. 編譯出錯
B. 編譯通過,運行出錯
C. 編譯通過,運行時輸出“I am an int”
D. 編譯通過,運行時輸出“I am a string”
7. 對List和Set的正確描述是( C )
A、他們都是Collection的子類。(是子接口)
B、List不可以包含重復元素。(可以重復)
C、Set不可以包含重復元素。
D、里面的元素按照Hash Code排序
8. 關于下述程序:
public class Test3{
public static void main(String[] agrs) {
byte b = 2,e =3; //1
byte f = b+e; //2(做變量的運算時,系統會自動轉換為int型,所以要求定義變量類型要大于int才行)
System.out.println(f); //3
}
}
描述正確的是( C )。
A. 編譯通過,運行時打印出5。
B. 編譯通過,運行時打印出23。
C. 編譯不通過,在//2處有錯誤,因為此處f必須是一個int類型的變量。
D. 編譯不通過,在//1處有錯誤,不能這樣定義變量
9. 運行以下代碼,會在控制臺輸出( C )
int x = 5;
int y = 5;
System.out.println((x++ + ++y)*(--x + y--));(X++先運算在自加,++X先自加在運算)
A、99
B、96
C、121
D、120
10. 在Java中,關于讓垃圾回收器強制回收對象的說法中,正確的是( A )。
A.垃圾回收不能強制
B. 調用System.gc()方法
C. 調用System.gc()方法,并且將需要回收的對象引用作為參數傳遞給這個方法
D. 調用Runtime.gc()方法
11. 運行以下代碼,會在控制臺輸出( A )
int x = 2;
int y = 3;
System.out.println(x/y);(默認是int型)
A、0
B、1
C、0.67
D、0.66666667
12. 可以通過實現Comparable讓一個類所產生的對象能夠被排序,那么對Comparable接口的正確描述是( B C )
A、String類沒有實現Comparable接口。
B、Comparable里面的排序規則可以隨意定義。
C、如果把沒有實現Comparable接口的類所產生的對象放置到SortedSet或SortedMap中會產生異常。
D、對中文字符,Java能夠按字典順序排序。
13. 關于下述程序:
public class Test4{
public static void main(String[] agrs){
double y = 2; //2
System.out.println(""+x+y); //3(字符串和任何形式的數運算都會變成字符串)
System.out.println(x+y+""); //4
}
}
描述正確的是(D )。
A. 編譯出錯。
B. 編譯通過,執行的時候在//2處報錯。
C. 編譯通過,執行時在//3處打印出3.234,在//4處打印出3.234。
D. 編譯通過,執行時在//3處打印出1.2342.0,在//4處打印出3.234。//(在這是字符串)。
14. 聲明Java類的語法是:
修飾符 class 類名
以下那些修飾符可以使用到Java類聲明中( B )
A、finally
B、final
C、static
D、private
15. 方法重載(overload)的條件是( A C )
A、參數類型不同
B、參數名稱不同
C、參數數量不同
D、返回值類型不同
16. 下述程序:
public class Test9{
static int i = 1;
static{
i++; (靜態屬性,代碼塊在初始化時只執行一次)
}
public Test9(){
i++;
}
public static void main(String[] args){
Test9 t1 = new Test9();
System.out.println(t1.i); //1
Test9 t2 = new Test9();
System.out.println(t2.i); //2
}
}
編譯運行后在//1和//2處分別打印出(c)。
A. 2和2 B. 3和
17. 關于下述三個接口:
public interface IA{
public void methodA();
}
public interface IB{
public void methodB();
}
public interface IC extends IA,IB{
public void methodA();
}
正確的是(D)。
A. 接口IC不能通過編譯,因為它繼承了兩個接口。(類繼承類是單一的,類實現接口可以多個,接口可以繼承多個接口)
B. 接口IC不能通過編譯,因為它定義了一個和IA中一樣的方法methodA()。
C. 接口IC不能通過編譯,因為它繼承了兩個接口,并且還定義了一個和IA一樣的methodA()方法。
D. 接口IC能夠順利通過編譯。
18. 下述語句執行結果為( A B )。
int[] arr = new int[10];
A. arr[0] 是0 B. arr[9] 是0
C. arr[10]是0 D. arr[0] 是null
(數組在創建的時候,默認值是對應數據類型的默認值int 是0,,…double 是0.0 boolean是false char是\u0000 引用類型默認是NULL.)
19. 關于break和continue語句,下面說法錯誤的有(A D )。
A. break只能用于循環語句中。
B. continue只能用于循環語句中。
C. 在循環語句中,break語句將終止循環;而continue是略過當前循環中剩余的語句進入下一次循環。
D. 在循環語句中,continue語句將終止循環;而break是略過當前循環中剩余的語句進入下一次循環。
20. 下面標識符合法的有( ABD )
A. IAMAClass B. $byte C. const(是個關鍵字) D. _year
21. 關于JAVA垃圾回收機制的哪些敘述是對的?(B) ?????????????
A. 程序開發者必須自己創建一個線程進行內存釋放的工作。
B. 垃圾回收機制將檢查并釋放不再使用的內存。
C. JAVA允許程序開發者明確指定并立即釋放該內存。
D. 能夠在期望的時間釋放被JAVA對象使用的內存。
22. 取出字符串String target = "IbmSunJavaBeaWeblogicOracle..."中的子串“Java”的語句是:( B )
A. target.substring(5,10); B. target.substring(6,10);(包含前面的數字內容不包含后面的數字指示內容)
C. target.substring(5,9); D. target.substring(6,9);
23. 下列描述正確的是:( D ) ???????????????????????
A. hashCode()返回是對象在內存唯一的標識,對象不同,hashCode()返回值一定不同。
B. hashCode()方法可以重寫,但重寫的邏輯要和equals()保持一致性(不必要保持一致)。
C. 語句System.out.println("java"=="java");打印出的結果為“false”。(“true”)
D. HashSet容器在存放某一類的對象時,改變該類的hashCode()方法可能會影響到HashSet容器的效率
24. 屬于Collection容器的方法是:( A C )
A. iterator B. hasNextElement C. toArray D. next
25. 下面的程序會有編譯錯誤,更正的方法為:( C )
class OuterClass {
public void f() {
String s1 = "inner";
class InnerClass {……(內部類訪問局部變量時,要求局部變量必須是final型的,但是能夠正常訪問全局變量)
public void g() {
System.out.println(s1);
}
}
}
}
A. 將變量s1聲明為static B. 將變量s1聲明為public
C. 將變量s1聲明為final
D. 將內部類InnerClass聲明為static(靜態類是不能訪問任何外部變量)
26. 在以下的接口定義代碼中
public interface AnyInterface {
public int a = 6;(默認是final static )
}
對a 的正確描述是( B C )
A、該定義方式不合法
B、是成員變量,也就是屬性
C、是最終變量,不可以修改
D、是類變量,也就是靜態變量
27. 運行以下代碼之后,控制臺輸出結果是( B )
String s1 = "abc";
String s2 = "abc";
String s3 = new String("abc");
System.out.print((s1 == s2) + "、");
System.out.print((s1 == s3) + "、");
System.out.print(s1.equals(s2) + "、");
System.out.println(s1.equals(s3));
A、true、true、true、true
B、true、false、true、true
C、true、true、false、false
D、true、false、true、false
28. Java提供了兩類I/O流,也就是字節流和字符流.以下選項正確的是( B )
A、字節流是建立在字符流的基礎上的。(反過來)
B、字節流每個字節的長度為8位。
C、PrintWriter屬于字節流。(字符流)
D、System類的out屬性不屬于流類。
29. 運行以下代碼,在控制臺會輸出( D )
System.out.println("中國的英語單詞是china".substring(1, 10));
A、中國的英語單詞是ch
B、中國的英語單詞是c
C、國的英語單
D、國的英語單詞是ch
30. 如果在一個try、catch、finally組成的異常處理結構中,try、catch、finally每一個代碼段都存在return語句,且代碼沒有產生異常。那么被執行的return語句是( D )
A、try代碼段中的return語句
B、catch代碼段中的return語句
C、finally代碼段中的return語句
D、try和finally代碼段中的return語句
31. 以下對抽象類正確的描述是( BD )
A、抽象類一定存在抽象方法
B、存在抽象方法的一定是抽象類
C、抽象類可以被實例化
D、抽象類不可以被實例化
32. 對break 和continue語句的正確解釋是( BD )
A、break 和 continue 只能用在循環語句中
B、break 和 continue 可以與標簽一起使用
C、break 用來結束”所有”包含它的循環語句(只結束包含它的那一層循環)
D、continue 會放棄執行后續代碼,繼續執行循環
33. sleep和wait語句的作用是( D )
A、sleep語句精確地將當前線程暫時停止。
(線程的執行與停止是不能精確控制的,線程是由CPU控制的)
B、wait語句精確地將當前線程暫時停止。
C、可以通過notify語句停止sleep狀態。
D、可以通過notify語句停止wait狀態。
34. 對接口的正確描述包括( C )
A、接口之間可以存在繼承關系,但是每個接口只能有一個父接口
B、接口里面可以定義私有方法(只能是public的方法)
C、接口里面可以定義常量
D、一個類只可以實現一個接口
35. 對變量成功進行強制類型轉換的前提條件是( A C)
A、轉換之后的類型是對象直接或間接父類類型
B、轉換之后的類型是對象直接或間接子類類型
C、轉換之后的類型是對象直接或間接實現的接口類型
D、可以轉換為任意類型
36. 標準的對象序列化過程中,序列化內容包括( B )(序列化過程不包括方法, static的不能被序列化 )
A、靜態屬性
B、成員屬性
C、靜態方法
D、成員方法
37. 下面的程序的輸出結果是:( A )(靜態優先于非靜態,父類優先于子類)
class SuperClass {
static {
System.out.println("SuperClass");
}
SuperClass() {
System.out.println("SuperClass()");
}
public static void main(String[] args) {
SubClass sc = new SubClass();
}
}
class SubClass extends SuperClass {
static {
System.out.println("SubClass");
}
SubClass() {
System.out.println("SubClass()");
}
}
A. SuperClass/SubClass/SuperClass()/SubClass()/
B. SuperClass/ SuperClass()/SubClass /SubClass()/
C. SubClass / SuperClass / SubClass()/SuperClass()/
D. SubClass/ SubClass()/SuperClass / SuperClass()/
38. 下面程序的運行結果是:( C)
class SuperClass {
public void f() {
System.out.print("SuperClass.f()/");
}
}
class SubClass extends SuperClass {
public void f() {
System.out.print("SubClass.f()/");
}
}
class ThirdClass {
public void g(SuperClass arg) {
System.out.print("g(SuperClass)/");
arg.f();
}
public void g(SubClass arg) {
System.out.print("g(SubClass)/");
arg.f();
}
public static void main(String[] args) {
ThirdClass tc = new ThirdClass();
SuperClass sc = new SubClass();
tc.g(sc);
}
}
A. g(SubClass)/SubClass.f()/ B. g(SuperClass)/SuperClass.f()/
C. g(SuperClass)/SubClass.f()/ D. g(SubClass)/SuperClass.f()/
39. 已有接口定義:
package test;
public interface Role {
public void action() throws java.io.IOException;
}
下面的類定義不會有編譯錯誤的是:(A B C )
A.
package test;
public class A implements Role {
public void action() throws java.io.FileNotFoundException {}
}
B.
package test;
public class B implements Role {
public void action() throws java.io.IOException {}
}
C.
package test;
public class C implements Role {
public void action() {};
}
D.
package test;
public class D implements Role {
public void action() throws Exception {}(子類的異常要小于等于父類)
}
40. 下面的程序輸出的結果為:(D)
public class Test {
public static void main(String[] args) {
StringBuffer buffer = new StringBuffer();
int value = 18;
do {
int temp = value & 0x07;
buffer.append(temp);(append是連接方法)
}while((value>>>=3)!=0);
System.out.println(buffer.reverse());(reverse是反轉方法)
}
}
A. 24 B. 23 C. 25 D. 22
二、數據庫(共18分)
1、oracle中char和varchar2數據類型有什么區別?
有數據”test”分別存放到char(10)和varchar2(10)類型的字段中,其存儲長度及類型有何區別?2分。
Char 是定長字符數據 varchar2是可變長字符數據
Char(10)是固定了10個長度,后面不滿時會補滿,而varchar2(10)的長度是可變的,后面不滿可以略去
(test占4個字符,當它存放到char(10)時,會補滿10位,而varchar2(10)時只用4位)
2、在scott用戶中建立表test_table,表中包含如下字段
字段名稱 數據類型 要求
id Number 主鍵
name Varchar2 非空
age Number
sex Varchar2
salary Number
create table test_table(
id number(10),
name varchar2(10),
age number(10),
sex varchar2(10),
salary number(10)
)
a、簡要寫出在scott用戶中建立序列t_sque,要求從100開始,步長為1,最小值10,最大值99999.
Create sequence t_sque(
Increment by 1
Start with 100
Minvalue 10
Maxvalue 99999;
)
b、寫出SQL語句,向test_table表中插入一條記錄,其中ID字段的值來自序列t_sque。
Insert into test_table value(t_sque.nextval…)
c、用SQL語句創建個一個視圖test_vw,這個視圖用來顯示test_table表中id>1000的記錄。
Create view test_vw as where id>1000;
3、參見如下表結構
出版社:
出版社代碼 char(2),
出版社名稱 varchar2(32)
圖書:
圖書編號 char(8),
圖書名稱 varchar2(128),
出版社代碼 char(2),
作者代號 char(4),
圖書簡介 varchar2(128)
作者:
作者代號 char(4),
作者名稱 varchar2(10),
性別 char(1),
年齡 number(3),
文學方向 varchar2(64)
獲獎名單:
獲獎日期 date,
獲獎人員 char(4) --注:獲獎人員即為作者代號
a.編寫SQL語句,找出“作者”庫中沒有出現在“獲獎名單”表中所有作者信息的SQL語句。Select * from
b.根據 “獲獎名單”和“作者”表,寫出SQL語句,查詢出在上一個月獲獎的人員信息(代號,名稱,獲獎時間)。
Where
4、Oracle數據庫表存在偽列rownumber,請利用rownumber,編寫一個SQL語句,如emp表已經按sal從大到小排列,請從中找出第3到10條(包含)記錄。
5、Oracle中,需要在查詢語句中把空值(NULL)輸出為0,如何處理?
Nvl(列名,0)//若該列為空,則輸出為0
6、創建表SWJ,有列名ID(字符,3)、NAME(字符,20)、AGE(數字,2)、UNIT(字符,30),BIRTH(日期)。要求:ID為主鍵,NAME不能為空,AGE在16與25之間。
7、 根據SCOTT中EMP表建立一個新表EMPLOYEES,字段與原表相同,但內容只要有工資SAL不小于2000的記錄。根據EMPLOYEES建立視圖EMP_VIEW,EMP_VIEW中有ID、NAME和SAL。根據DEPT表建立一個新表DEPARTMENTS,結構與內容與原表的完全一致。
8、 從第7題表EMPLOYEES,DEPARTMENTS中顯示所有名字(EANME)以G開頭且工資(SAL)大于3000的人的姓名、工資、部門名稱。
9、 從第7題表EMPLOYEES,DEPARTMENTS中顯示最高工資人姓名ENAME、部門名稱(DNAME)和工作崗位(JOB)。
10、 從第7題表EMPLOYEES中統計出每個部門的平均工資、工資總和、部門人數、最大工資和最小工資。
三、編程題(共42分)
1. 簡述單子模式的思路,并且寫出一種實現方案:5分
Public class singleton{
Private static singleton single = new singleton();
Private singleton(){
}
Public static singleton getsingletoninstance(){
Return single;
}
}
2. 寫一個類,當該類的實例創建時即啟動一個線程,按照指定格式每隔5秒循環打印出當前的時間,指定的日期格式為:××××年××月××日 ××點××分××秒。5分
(線程的創建和日期的格式化)
3. 寫一個程序統計輸入字符串中以“,”分隔的各種單詞出現的次數。例如:輸入的字符串為“java,java,j2ee,ibm,j2ee,ibm,j2me,java”,則該程序的輸出結果應該為:
java3個;j2ee2個;ibm2個;j2me1個。8分
4. 已知在文件路徑“c:\temp\”,在此文件夾下有若干.dat文件,寫出Java程序將該文件夾下所有文件拷貝到路徑“c:\bak”下。7分。
5. 寫出一段程序,從備選字符串“red”、“green”、“blue”、“black”、“white”中隨機選出3個不同的字符串,并打印到控制臺。7分。
6.寫一個服務端程序,和一個客戶端程序,并由客戶端程序記錄鍵盤敲擊事件(什么時間按什么鍵),然后發送給服務端,再由服務端把每次的信息保存到“d:\keyinfo.txt”文件中。10分