《Java多线程编程》

一、选择题(共20题,每题2分,少选错选不得分,共40分)
1、【单选题】
能够给一个byte型变量赋值的范围是( B )。
A.0~65535
B.(-128)~127
C.(-32, 768)~32, 767
D. (-256)~255
解析:Byte的取值范围是(-128)~127。

2、【单选题】
以下哪个标识符是合法的(B)。
A. class
B. $abc
C. 1234
D. user-name
解析:标识符:可以由字母、数字、下划线、$组成,可以用其开头:$、下划线、字母不可以用其开头:关键字、数字,空格

3、【单选题】
以下关于this关键字说法错误的是(C)。
A. this关键字是一个对象的引用
B. this 可用于构造函数中,调用类本身重载的构造函数,但是必须写在首行
C. this可用于静态方法中
D. this指针当对象创建后指向该对象
解析:this关键字是在对象内部指代对象自身的引用
this不能在静态函数中使用
this跟对象关联,它是对象本身的引用。
this于特定的对象关联,一个对象对于一个this,不能共用

4、【单选题】
在做一个项目时,下列说法错误的是(B)。
A.首先要了解客户的需求
B.拿到客户需求直接开始写代码
C.分析客户的需求并制定相应规则
D.分析客户的需求并分析其业务

5、【单选题】
以下程序的执行结果是(D):
public class SwitchTest {
public static void main (String [] args) {
System.out.println ("value = " + switchIt(4));
}
public static int switchIt(int x) {
int j = 1;
switch (x) {
case 1: j++;
case 2: j++;
case 3: j++;
case 4: j++;
case 5: j++;
default:j++;
}
return j + x;
}
}
A.value = 5
B.value = 6
C.value = 7
D.value = 8
解析:由于case语句没有最后没有break语句,那么从case 4:以下的代码都会被 执行。

6、【单选题】
已知A类在package A中, B类在package B中,且B类被声明为public,且
有一个成员变量x被声明为 protected控制方式。C类也位于package A包
中,且继承了B类。则以下说法正确的是(C )

A.A 类的实例不能访问到 B 类的实例
B.A 类的实例能够访问到 B 类一个实例的 x 成员
C.C 类的实例可以访问到 B 类一个实例的 x 成员
D.C 类的实例不能访问到 B 类的实例
解析:不同包子类的关系, 可以访问到父类 B 的 protected 成员

7、【单选题】
栈是一种(A )
A.存取受限的线性结构
B.存取不受限的线性结构
C.存取受限的非线性结构
D.存取不受限的非线性结构
解析:栈(stack)在计算机科学中是限定仅在表尾进行插入或删除操作的线性表。

8、【单选题】
十六进制数7F对应的十进制数是多少( C )
A.128
B.-128
C.127
D.-127
解析:十六进制数7F可以先转为对应的二进制数 即7(十六)对应0111(二) F(十六)对应1111(二) 所以4F(十六)对应0111 1111(二) 再转为十进制计算为 0128+164+132+116+18+14+12+11=127 所以答案选C

9、【单选题】
线程生命周期中正确的状态是( C )
A.新建状态、运行状态和终止状态
B.新建状态、运行状态、阻塞状态和终止状态
C.新建状态、可运行状态、运行状态、阻塞状态和终止状态
D.新建状态、可运行状态、运行状态、恢复状态和终止状态
解析:线程生命周期:新建状态、可运行状态、运行状态、阻塞状态和终止状态

10、【单选题】
表(TEACHER)包含以下列:
ID NUMBER(7) PK
SALARY NUMBER(7,2)
SUBJECT_ID NUMBER(7)
判断以下两个 SQL 语句:
(1)SELECT ROUND(SUM(salary),-2) FROM teacher ;
(2)SELECT subject_id, ROUND(SUM(salary),-2) FROM teacher
GROUP BY subject_id ;
有什么不同结果( B )
A.语句 1 将返回每个老师一个结果
B.语句 2 将返回多个结果
C.结果相同,显示不同
D.将有一个句子产生错误
解析:语句 1 会返回一个结果,就是所有老师的工资和,使用了四舍五入函数,语句 2 是按照 subject_id 进行分组,那么分几组就会有几个结果

11、【单选题】
表 CLASSES 和 表 SCHEDULE 结构如下:
CLASSES:
ID NUMBER(9)
CLASS_NAME VARCHAR2(20)
TEACHER_ID NUMBER(9)

SCHEDULE:
CLASS_TIME DATE
CLASS_ID NUMBER(9)
建一个视图显示每一门课程的课名、课时,并按教师 ID 排序,判断下面语句将返回何种结果( B )
CREATE VIEW class_schedule AS
SELECT c.class_name, s.class_time FROM classes c, schedule s
WHERE c.id = s.class_id;
A.语句创建视图 CLASS_SCHEDULE 且可产生预期结果
B.语句创建视图 CLASS_SCHEDULE 但不能产生预期结果
C.语法错误,因为视图不可基于连接查询
D.语法错,因为语句未包含 ORDER BY 子句
解析:上述视图显示每一课的课名、课时,但是没有按教师 ID 排序

12、【单选题】
以下对数据库连接池,以下说法正确的是( A )
A.连接池从一定程度上提高了数据库访问效率
B.使用连接池后,在程序代码中不必显式关闭连接
C.连接池开销大,成本高,在企业级项目开发中不建议使用。
D.以上说法均正确

13、【单选题】
在JDBC连接数据库编程应用开发中,可以实现数据库连接的是(A)。
A.Connection接口
B.PreparedStatement类
C.CallableStatement类
D.Statement类
解析:Connection接口是用来获取数据库连接的。

14、【单选题】
如果一个HTML文档内含有阿拉伯文,则应该?(A)
A.使用utf-8编码
B.将阿拉伯文转为图片并嵌入到文档内
C.使用GBK编码
D.使用iso-8859-2编码
解析:UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码。UTF-8用1到6个字节编码UNICODE字符。用在网页上可以同一页面显示中文简体繁体及其它语言(如英文,日文,韩文)。

15、【单选题】
以下为一段浏览器中可运行的Javascript 代码,则运行该段Javascript代码的页面弹出框中显示的结果是:( D )
var obj = {“key”:“1”,“value”:“2”};
var newObj = obj;
newObj.value += obj.key;
alert(obj.value);
A.2
B.12
C.3
D.21
解析:newObj.value = 2; obj.key = ‘1’; newObj.value += obj.key; 相当于 newObj.value = newObj.value + obj.key; 所以 ‘2’ + 1 在javascript中自动转化为字符串拼接操作得到 ‘21’

16、【多选题】
以下选项中关于Java集合的说法错误的是( AC )。
A. List接口和Set接口是Collections接口有两个子接口
B. List接口中存放的元素具有有序,不唯一的特点
C. Set接口中存放的元素具有无序,不唯一的特点
D. Map接口存放的是映射信息,每个元素都是一个键值对
解析:collections是一个工具类,Set集合中不能包括重复对象

17、【多选题】
下列关于反射的说法错误的是(ABC)。
A.可以通过newlnstance()来创建一个字节码对象
B.可以通过 Class clz = Class. forName(“String”);来获取代表String类的Class对象
C.Method[] ms = String.class. getMethods()来获取 String 类中的所有方法
D.通过执行方法对象上的invoke方法来运行该方法
E.当私有属性想直接赋值的时候,必须先要将其暴力破解
解析:创建class对象,Class.forName(全路径名),类名.class,对象.getClass三种方式,暴力破解为getDeclaredxxx(),故ABC错误

18、【多选题】
下列有关于变量的命名正确的是(ACD)
A.可以由字母、数字、下划线、”$”组成;
B.首字母能以数字开头
C.首字母不能以数字开头
D.Java大小写敏感,命名变量时需要注意
解析:变量的命名首字母不能是数组开头,其他选项均正确 因此ACD是正确的选项。

19、【多选题】
在JAVA 8.0版本之前,接口中可以定义( BD )。
A.静态方法
B.常量
C.构造方法
D.抽象方法
解析:java8之前,接口中只能定义常量和抽象方法。

20、【多选题】
关于html的盒模型,下列说法正确的是( CD )
A.margin是内边距
B.padding是外边距
C. border是边框
D. border-radius是css3标准,因此IE并不支持border-radius属性
解析:margin:外边距; padding:内边距; border:边框; IE不支持边框圆角border-radius属性。

二、填空简答题(共5题,每题6分,共30分)
1、Java创建对象有哪几种方式:
(1) 用new语句创建对象,这是最常见的创建对象的方法。
(2) 运用反射手段,调用java.lang.Class或者
java.lang.reflect.Constructor类的newInstance()实例方法。
(3) 调用对象的clone()方法
(4) 运用反序列化手段,调用java.io.ObjectInputStream对象的 readObject()方法。
(1)和(2)都会明确的显式的调用构造函数 ;(3)是在内存上对已有对象的影印,所以不会调用构造函数 ;(4)是从文件中还原类的对象,也不会调用构造函数。
(1)和(2)都会明确的显式的调用构造函数 ;(3)是在内存上对已有对象的影印,所以不会调用构造函数 ;(4)是从文件中还原类的对象,也不会调用构造函数。
2、线程和进程有什么区别?
线程是进程的子集,一个进程可以有很多线程,每条线程并行执行不同的任务。不同的进程使用不同的内存空间,而所有的线程共享一片相同的内存空间。别把它和栈内存搞混,每个线程都拥有单独的栈内存用来存储本地数据。

3、表与表之间有哪些关联关系?
一对一(实际上是特殊的一对多)
一对多
多对多,需要中间关系表

4、写出java.lang.Object类的六个常用方法的声明并说明其作用?
1)public boolean equals(java.lang.Object) 比较内容
2)public native int hashCode() 哈希码
3)public java.lang.String toString() 变成字符串
4)public final native java.lang.Class getClass() 获取类结构信息
5)protected void finalize() throws java.lang.Throwable 垃圾回收前执行的方法
6)protected native Object clone() throws java.lang.CloneNotSupportedException 克隆
7)public final void wait() throws java.lang.InterruptedException 多线程中等待功能
8)public final native void notify() 多线程中唤醒功能
9)public final native void notifyAll() 多线程中唤醒所有等待线程的功能

5、Java中线程同步的方法有哪些?有什么区别?
1、同步代码块 ,即有synchronized关键字修饰的方法。
由于java的每个对象都有一个内置锁,当用此关键字修饰方法时,
内置锁会保护整个方法。在调用该方法前,需要获得内置锁,否则就处于阻塞状态。
2、同步代码块
即有synchronized关键字修饰的语句块。
被该关键字修饰的语句块会自动被加上内置锁,从而实现同步
3、使用特殊域变量(volatile)实现线程同步
4、使用重入锁实现线程同步
5、使用局部变量实现线程同步
如果使用ThreadLocal管理变量,则每一个使用该变量的线程都获得该变量的副本,
副本之间相互独立,这样每一个线程都可以随意修改自己的变量副本,而不会对其他线程 产生影响。
6、使用阻塞队列实现线程同步
7、使用原子变量实现线程同步
需要使用线程同步的根本原因在于对普通变量的操作不是原子的

三、程序代码题(共2题,30分)

  1. 已知有如下4张表:
    学生表:STUDENT(S#,SNAME,SAGE,SSEX)
    课程表:COURSE(C#,CNAME,T#)
    成绩表:SC(S#,C#,SCORE)
    教师表:TEACHER(T#,TNAME)
    (1)查询平均成绩大于60分的学生的学号和平均成绩?
select sno,avg(score) from sc group by sno having avg(score)>60

(2)查询所有学生的学号、姓名、选课数、总成绩?

select sc.sno,sname,count(cno),sum(score) from student join sc on student.sno=sc.sno group by sc.sno,sname;

(3)查询姓“悟”的老师的个数?

select count(Tname) from teacher where Tname like '悟%'

(4)查询没学过“悟空”老师课的学生的学号、姓名?

select sno,sname from student where sno not in(select sno from SC where cno in(select cno from course where tno in(select tno from teacher where tname='悟空')))

2、请使用冒泡排序、选择排序完成数据的排序?

/*冒泡排序:*/ 
public class BubbleSort {
    public static int[] sortBubble(int[] array){
        for(int i = 1 ; i < array.length; i++){
            boolean flag = true;
            for(int j = 0 ; j < array.length-i ; j++){
                if(array[j]>array[j+1]){
                    int temp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = temp;
                    flag = false;
                }
            }
            if(flag){
                break;
            }
            System.out.print("第"+i+"轮排序后的结果为:");
            display(array);          
        }
        return array;
         
    }
     
    public static void display(int[] array){
        for(int i = 0 ; i < array.length ; i++){
            System.out.print(array[i]+" ");
        }
        System.out.println();
    }
     
    public static void main(String[] args) {
        int[] array = {4,2,8,9,5,7,6,1,3};
        System.out.println("未排序数组顺序为:");
        display(array);
        System.out.println("-----------------------");
        array = sort(array);
        System.out.println("-----------------------");
        System.out.println("经过冒泡排序后的数组顺序为:");
        display(array);
    } 
}

/*选择排序*/
public class ChoiceSort {
    public static int[] sortSelect(int[] array){
        for(int i = 0 ; i < array.length-1 ; i++){
            int min = i;
            for(int j = i+1 ; j < array.length ; j++){
                if(array[j]<array[min]){
                    min = j;
                }
            }
            if(i != min){
                int temp = array[i];
                array[i] = array[min];
                array[min] = temp;
            }
            System.out.print("第"+(i+1)+"轮排序后的结果为:");
            display(array);
        }
        return array;
    }
 
    public static void display(int[] array){
        for(int i = 0 ; i < array.length ; i++){
            System.out.print(array[i]+" ");
        }
        System.out.println();
    }
     
    public static void main(String[] args){
        int[] array = {4,2,8,9,5,7,6,1,3};
        System.out.println("未排序数组顺序为:");
        display(array);
        System.out.println("-----------------------");
        array = sort(array);
        System.out.println("-----------------------");
        System.out.println("经过选择排序后的数组顺序为:");
        display(array);
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值