软件工程师( 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分