JavaSE软件工程师认证考试试卷java
1、 填空题(共20个题目,总计20分)c++
2、 选择题(共25个题目,总计25分)编程
1)数组 |
在Java中,源文件Test.java中包含以下代码,则程序编译运行的结果是(A )。(选择一项)安全 |
|
|
public class Test {服务器 public static void main(String[ ] args) {网络 system.out.println("Hello!");数据结构 }多线程 }框架 |
|
|
|
|
|
A |
输出:Hello! |
|
B. |
编译出错,提示“没法解析system” |
|
C. |
运行正常,但没有输出任何内容 |
|
D. |
运行时出现异常 |
2) |
在Java中,下面( AB )语句能正确经过编译。(选择两项) |
|
|
|
|
|
A |
System.out.println(1+1); |
|
B. |
char i =2+'2'; System.out.println(i); 52------对应的ASCII码是4 |
|
C. |
String s="on"+'one'; |
|
D. |
int b=255.0; |
3) |
分析以下Java代码,编译运行的输出结果是( A )。(选择一项) |
|
|
public static void main(String[ ] args) { boolean a=true; boolean b=false; if (!(a&&b)) { System.out.print("!(a&&b)"); }else if (!(a||b)) { System.out.println("!(a||b)"); }else { System.out.println("ab"); } } |
|
|
|
|
|
A |
!(a&&b) |
|
B. |
!(a||b) |
|
C. |
ab |
|
D. |
!(a||b)ab |
4) |
在Java中有以下代码,则编译运行该类的输出结果是( D )。(选择一项) |
|
|
public static void main(String[ ] args) { for(int i=0;i<10;i++){ if (i%2!=0) return; System.out.print(i); } } |
|
|
|
|
|
A |
13578 |
|
B. |
02468 |
|
C. |
0123456789 |
|
D. |
0 |
5) |
在Java的程序类中以下方法定义正确的是( AD )。(选择两项) |
|
|
|
|
|
A |
public int ufTest(int num){ int sum=num+100; return sum; } |
|
B. |
public String ufTest(int num){ int sum=num+100; return sum; } |
|
C. |
public void ufTest(int num){ int sum=num+100; return sum; } |
|
D. |
public float ufTest(int num){ int sum=num+100; return sum; } |
6) |
分析下面的Java源程序,编译后的运行结果是( B )。(选择一项) |
|
|
import java.util.*; public class Test { public static void main(String[ ] args) { int [ ] numbers=new int[ ]{1,2,3}; 返回该数组对应的指定的索引 System.out.println(Arrays.binarySearch(numbers, 2)); } } |
|
|
|
输出 |
|
A |
输出:0 |
|
B. |
输出:1 |
|
C. |
输出:2 |
|
D. |
输出:3 |
7) |
分析以下Java程序的代码所示,则编译运行后的输出结果是( C )。(选择一项) |
|
|
public class Test { int count=9; public void count1(){ count=10; System.out.println("count1="+count); } public void count2(){ System.out.println("count2="+count); } public static void main(String[ ] args) { Test t=new Test(); t.count1(); t.count2(); } } |
|
|
|
|
|
A |
count1=9; count2=9; |
|
B. |
count1=10; count2=9; |
|
C. |
count1=10; count2=10 c成员变量在整个类中使用。 |
|
D. |
count1=9; count2=10; |
8) |
在Java中,如下定义数组的语句正确的是( CD )。(选择两项) |
|
|
|
|
|
A |
int t[10]=new int[ ]; |
|
B. |
char [ ]a=”hello”; |
|
C. |
String [ ] s=new String [10]; |
|
D. |
double[ ] d [ ]=new double [4][ ]; |
9) |
分析以下Java代码,该程序编译后的运行结果是( D )。(选择一项) |
|
|
public static void main(String[ ] args) { String str=null; Null就表名空指针,不在指向任何东西则会抛出NullPointerException str.concat("abc"); str.concat("def"); System.out.println(str); } |
|
|
|
|
|
A |
null |
|
B. |
abcdef |
|
C. |
编译错误 |
|
D. |
运行时出现NullPointerException异常 |
10) |
给定以下Java代码,编译运行后,输出结果是( CD )。(选择一项) |
|
|
public class Test { public static void main(String[ ] args) { StringBuffer a=new StringBuffer("A"); StringBuffer b=new StringBuffer("B"); operate(a, b); System.out.println(a+","+b); } static void operate(StringBuffer x,StringBuffer y){ x=new StringBuffer("BBB"); y=x; } } |
|
|
|
|
|
A |
BBB,B |
|
B. |
BBB,BBB |
|
C. |
A,B |
|
D. |
A,A |
11) |
给定以下Java程序,Test类中的四个输出语句输出结果依次是( C )。(选择一项) |
|||
|
class Person { String name="person"; public void shout(){ System.out.println(name); } } class Student extends Person{ String name="student"; String school="school"; } public class Test { public static void main(String[ ] args) { Person p=new Student(); System.out.println(p instanceof Student); System.out.println(p instanceof Person); System.out.println(p instanceof Object);; System.out.println(p instanceof System); } } |
|||
|
|
|
||
|
A |
true,false,true,false |
||
|
B. |
false,true,false,false |
||
|
C. |
true,true,true,编译错误 |
||
|
D. |
true,true,false,编译错误 |
||
12) |
在Java中,LinkedList类与ArrayList类同属于集合框架类,下列(CD )选项中是LinkedList类有而ArrayList类没有的方法。(选择两项) |
|||
|
|
|
||
|
A |
add(Object o) |
||
|
B. |
add(int index,Object o) |
||
|
C. |
getFirst() |
||
|
D. |
removeLast() |
||
13) |
以下Java代码,输出的运行结果是( A )。(选择一项) |
|
|
public class Test { public static void main(String[ ] args) { List<String> list=new ArrayList<String>(); list.add("str1"); list.add(2, "str2"); String s=list.get(1); System.out.println(s); } } |
|
|
|
|
|
A |
运行时出现异常 |
|
B. |
正确运行,输出str1 |
|
C. |
正确运行,输出str2 |
|
D. |
编译时出现异常 |
14) |
在Java中关于静态方法,如下说法中正确的是( AC )。(选择两项) |
|
|
|
|
|
A |
静态方法中不能直接调用非静态方法——》对,经过建立对象的形式 |
|
B. |
非静态方法中不能直接调用静态方法 è错,能够访问 |
|
C. |
静态方法能够用类名直接调用 对 |
|
D. |
静态方法里可使用this super |
15) |
以下Java代码运行的结果是( B )。(选择一项) |
|
|
public class Test { final int age; public Test(){ age=10; } public static void main(String[ ] args) { System.out.println(new Test().age); } } |
|
|
|
|
|
A |
输出:0 |
|
B. |
输出:10 |
|
C. |
输出:null |
|
D. |
运行时出现异常 |
16) |
在Java中关于abstract关键字,如下说法正确的是( AB)。(选择两项) |
|
|
|
|
|
A |
abstract类中能够没有抽象方法 |
|
B. |
abstract类的子类也能够是抽象类 |
|
C. |
abstract方法能够有方法体 |
|
D. |
abstract类能够建立对象 |
17) |
在Java中,下列关于读写文件的描述错误的是( B )。(选择一项) |
|
|
|
|
|
A |
Reader类的read()方法用来从源中读取一个字符的数据 |
|
B. |
Reader类的read(int n )方法用来从源中读取一个字符的数据 |
|
C. |
Writer类的write(int n)方法用来向输出流写入单个字符 |
|
D. |
Writer类的write(String str)方法用来向输出流写入一个字符串 |
18) |
分析以下Java代码,有标注的四行代码中,有错误的是第( D )处。(选择一项) |
|
|
import java.io.FileWriter; import java.io.IOException; public class Test { public static void main(String[ ] args) { String str = "Hello World"; FileWriter fw = null; try { fw = new FileWriter("c:\\hello.txt"); // 1 fw.write(str); // 2 } catch (IOException e) { e.printStackTrace(); // 3 } finally { fw.close(); // 4 } } } |
|
|
|
|
|
A |
1 |
|
B. |
2 |
|
C. |
3 |
|
D. |
4 |
19) |
在Java的IO操做中,( D )方法能够用来刷新流的缓冲。(选择两项) |
|
|
|
|
|
A |
void release() |
|
B. |
void close() |
|
C. |
void remove() |
|
D. |
void flush() |
20) |
下列关于线程的优先级说法中,正确的是( BC )。(选择两项) |
|
|
|
|
|
A |
线程的优先级是不能改变的 |
|
B. |
线程的优先级是在建立线程时设置的 |
|
C. |
在建立线程后的任什么时候候均可以从新设置 |
|
D. |
线程的优先级的范围在1-100之间 1—10 之间 |
线程的优先级在建立线程时能够设置,也能够经过getPriority()方法来得到线程的优先级,经过setPriority()方法来设定线程的优先级。线程的优先级属于考试重、
21) |
下列关于Java线程的说法正确的是( B )。(选择一项) |
|
|
|
一个虚拟的CPU。(2)该CPU执行的代码。(3)代码所操做的数据 |
|
A |
每个Java线程能够当作由代码、一个真实的CPU以及数据三部分组成 |
|
B. |
建立线程的两种方法中,从Thread类中继承的建立方式能够防止出现多父类的问题 |
|
C. |
Thread类属于java.util程序包 lang包 |
|
D. |
使用new Thread(new X()).run();方法启动一个线程 start() |
22) |
在Java网络编程中,使用客户端套接字Socket建立对象时,须要指定( A )。(选择一项) |
|
|
|
|
|
A |
服务器主机名称和端口 |
|
B. |
服务器端口和文件 |
|
C. |
服务器名称和文件 |
|
D. |
服务器地址和文件 |
23) |
在Java的反射中关于代理说法正确的是( )。(选择两项) |
|
|
|
|
|
A |
动态代理类与静态代理类同样,必须由开发人员编写源代码,并进行编译 |
|
B. |
代理类与被代理类具备一样的接口 |
|
C. |
动态代理是public、final和abstract类型的 |
|
D. |
java.lang.reflect包中的Proxy类提供了建立动态代理类的方法 |
3、 判断题(共20个题目,总计10分,正确√,错误×)
4、 简答题(共5个题目,总计25分)
答: try…catch: 进行异常的捕获。try :该代码块中编写可能产生异常的代码。Catch:实现对某种异常的捕获。来处理异常
答: finally:有一些特定的代码,不管是否发生异常,都须要去处理,则放在finally里中的代码,是必定会被执行到的。
答:throw: 用来抛出一个异常类对象,应用在方法体中。
答: throws: 用来声明一个异常,应用在方法签名的后面,关键字throws 用于方法上来声明一个异常,用于表示当前的方法不处理异常,而是提醒该方法的调用者来处理异常。
答:sleep方法,能够强制当前执行的线程休眠,以减慢线程,当咱们调用sleep方法时 就进入了休眠状态。(计时等待),Wait方法: 一个线程在等待另外一个线程执行一个动做时,该线程进入Waiting状态,进入该状态是不能本身唤醒的,必须等待另外一个线程调用notify关键字来唤醒。
2 请你简述HashMap和Hashtable的区别?(5分)
答: HashMap和Hashtable都实现了Map接口,HashMap:此集合中存储的数据是无序且不重复的, HashMap能够接受为null的键值(key)和值(value),而Hashtable则不行
2HashMap是非synchronized,而Hashtable是synchronized,这意味着Hashtable是线程安全的,多个线程能够共享一个Hashtable;而若是没有正确的同步的话,多个线程是不能共享HashMap的.
3另外一个区别是HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。因此当有其它线程改变了HashMap的结构(增长或者移除元素),将会抛出ConcurrentModificationException,但迭代器自己的remove()方法移除元素则不会抛出ConcurrentModificationException异常。但这并非一个必定发生的行为,要看JVM。这条一样也是Enumeration和Iterator的区别。
4. 因为Hashtable是线程安全的也是synchronized,因此在单线程环境下它比HashMap要慢。若是你不须要同步,只须要单一线程,那么使用HashMap性能要好过Hashtable。
3 TCP/IP协议栈中,TCP协议和UDP协议的联系和区别?(5分)
答:TCP:TCP:传输控制协议,TCP 协议是面向链接的通讯协议,即传输数据以前在发送端和接收端创建逻辑链接,而后再传输数据,它提供了两台计算机之间可靠无差错的数据传输。
答:UDP: 用户数据报协议,UDP 协议是一个面向无链接的协议,传输数据时,不须要创建链接,无论对方是否启动,直接将数据,数据源和目的地都封装在数据包中,直接发送
1、 编码题(共3个题目,总计20分)
1. 编写两个线程,一个线程打印1-52的整数,另外一个线程打印字母A-Z。打印顺序为12A34B56C….5152Z。即按照整数和字母的顺序从小到大打印,而且每打印两个整数后,打印一个字母,交替循环打印,直到打印到整数52和字母Z结束。(8分)
要求:
(1) 编写打印类Printer,声明私有属性index,初始值为1,用来表示是第几回打印。
(2) 在打印类Printer中编写打印数字的方法print(int i),3的倍数就使用wait()方法等待,不然就输出i,使用notifyAll()进行唤醒其它线程。
(3) 在打印类Printer中编写打印字母的方法print(char c),不是3的倍数就等待,不然就打印输出字母c,使用notifyAll()进行唤醒其它线程。
(4) 编写打印数字的线程NumberPrinter继承Thread类,声明私有属性private Printer p;在构造方法中进行赋值,实现父类的run方法,调用Printer类中的输出数字的方法。
(5) 编写打印字母的线程LetterPrinter继承Thread类,声明私有属性private Printer p;在构造方法中进行赋值,实现父类的run方法,调用Printer类中的输出字母的方法。
(6) 编写测试类Test,建立打印类对象,建立两个线程类对象,启动线程。
public class Test09 { public static void main(String[] args) { //建立打印类的对象 Printer tt=new Printer(); //建立打印数字的方法 NumberPrinter ss=new NumberPrinter(tt); ss.start(); //建立打印字母的方法 LetterPrinter dd=new LetterPrinter(tt); dd.start(); } } //编写一个打印类 class Printer{ //用来表示打印的次数 private int index=1; //2)在打印类Printer中编写打印数字的方法print(int i),3的倍数就使用wait()方法等待,不然就输出i,使用notifyAll()进行唤醒其它线程。 //打印数字的方法 public synchronized void print(int i){ //判断indecx可否被3整除,不能整除的话就输出数字,index++. // 能整除的话就等待,调用输出字母的线程。 if(index%3==0){ try{ wait(); }catch (InterruptedException ce){ ce.printStackTrace(); }
}else{ System.out.println(i); index++; notifyAll();//唤醒字母的线程 } }
//编写打印字母的方法 public synchronized void print(char c){ //若是index不能被3整除的话,就表示是是数字 //若是除以3等于零,则表示的是字母。 if(index%3!=0){ try{ wait(); }catch (InterruptedException ce){ ce.printStackTrace(); }
}else{ //输出的是字母 System.out.println(c); index++; notifyAll();//唤醒数字的线程 } } } //编写打印数字的线程 class NumberPrinter extends Thread{ private Printer p;
public NumberPrinter(Printer p){ this.p=p; }
public void run(){ // 调用Printer类中的输出数字的方法*/ for(int i=1;i<=52;i++){ p.print(i); } } }
//编写打印字母的方法 class LetterPrinter extends Thread{ private Printer p; public LetterPrinter(Printer p){ this.p=p; } public void run() { //调用Printer类中的输出字母的方法,65(A)--122(z) for(char c='A';c<'z';c++){ p.print(c); } } } |
2. 使用IO包中的类读取D盘上exam.txt文本文件的内容,每次读取一行内容,将每行做为一个输入放入ArrayList的泛型集合中并将集合中的内容使用增强for进行输出显示。
//BufferedReader 字符缓冲流读操做 public class Meth09 { public static void main(String[] args)throws IOException{ List<String>list=new ArrayList<>(); BufferedReader fr=new BufferedReader(new FileReader("F:\\aaa\\a.txt")); String s=null; //每次读取一行的内容 while ((s=fr.readLine())!=null){ list.add(s); } for(String ff:list){ System.out.println(ff); } fr.close(); } } |