Java和SQL 阶段考试题目答案

2022-08-10,,,,

Java&SQL 阶段考试

(满分 100 分,时长 180 分钟) Java 部分
一、选择题
1.以下关于 abstract 关键字的说法,正确的是(D)。 A.abstract 可以与 final 并列修饰同一个类。 B.abstract 类中不可以有 private 的成员。 C.abstract 类中必须全部是 abstract 方法。 D.abstract 方法必须在 abstract 类或接口中。

2.以下方法,(B)不是对 add 方法的重载。 publicclassTest{ public void add(intx,inty,intz){ //todo } } A.public int add(intx,inty,floatz){return0;} B.public int add(intx,inty,intz){return0;} C.public void add(intx,inty){ } D.以上都不是

3.关于 Java 堆,下面说法错误的是(D)。 A.所有类的实例都是在堆上分配内存。 B.对象所占的堆内存是由自动内存管理系统回收。 C.堆内存由存活和死亡的对象,空闲碎片区组成。 D.数组是分配在栈中的。

4.观察以下代码,输出结果是(A)。 publicclassMyClass{ inti=-1; privatevoidaction(){ inti=0; i++; } publicstatic voidmain(String[]args){ MyClassmc =newMyClass(); mc.action();
System.out.println(mc.i);
}
} A. 1 B.0 C.-1 D.抛出异常

5.观察下面的代码,正确的结果是(A)。 classLetter{ charc=‘x’; } publicclassPassObject{ staticvoid f(Lettery){ y.c=‘z’; } publicstatic voidmain(String[]args){ Letterx=newLetter(); x.c=‘a’; f(x); System.out.println(x.c); } } A. z B.a C.x D.null

6.观察如下代码,正确显示结果为(C)。 classA{ voidcallme(){ System.out.println(“InsideA’scallme()method”); } } classBextendsA{ voidcallme(){ System.out.println(“InsideB’scallme()method”); } } classCextendsB{ voidcallme(){ System.out.println(“InsideC’scallme()method”); } } publicclassDispatch{ publicstatic voidmain(Stringargs[]){ Aa=newC(); a.callme(); } } A.InsideA’scallme()methodB.InsideB’scallme()method C.InsideC’scallme()method D.抛出异常
7.观察如下代码,正确的显示结果是(A)。 publicclassMyClass{ publicstatic voidmain(String[]args){ Strings1=“hello”; Strings2=“hello”; Strings3=newString(“hello”); Strings4=newString(“hello”); System.out.println((s1s2)+"/"+(s3s4)); } } A.true/false B.true/true C.false/true D.false/false
8.观察如下代码,正确的显示结果是(B)。 classMyExceptionextendsException{ publicMyException(String msg){ super(msg); } } publicclassMyClass{ publicstatic voidmain(String[]args){ try{ if(true)thrownewMyException(“bad”); System.out.println(“OK”); }catch(MyExceptione){ System.out.print(e.getMessage()); } System.out.print(“bye”); } } A. bad B. badbye C. OKbad D. OKbadbye
9.下列说法中,不正确的是(B)。 A.一个 Java 源程序经过编译后,得到的文件的扩展名一定是.class。 B.一个 Java 源程序经过编译后,得到的结果文件数也只有一个。 C.一个 Java 源程序只能有一个 publicclass 类定义,且源文件的名字与 publicclass 的类 名相同,扩展名必须是.java
D.一个 Java 源程序可以包含多个 class 类。
10.欲构造 ArrayList 类的一个实例,此类实现继承了 List 接口,下列方法正确的是(B)。 A.ArrayListmyList=newObject(); B.Listmylist=newArrayList(); C.ArrayListmyList=newList(); D.ListmyList=newList();
11.下列说法正确的是(AC)(多选)。 A.LinkedList 实现了继承自 List。 B.AbstractSet 继承自 Set。 C.HashSet 继承自 AbstractSet。 D.WeakMap 继承集成自 HashMap。
12.Thread 类用来创建和控制线程,一个线程从下面(B)方法开始执行。 A.init() B.start() C.run() D.notifyAll()
13.下面关于 Java 语言实例方法和类方法的说法,正确的是(BC)(多选)。 A.实例方法可以直接通过类名调用。 B.类方法可以直接通过类名调用。 C.实例方法可以操作实例变量也可以操作类变量。 D.类方法可以操作实例变量也可以操作类变量。
14.在 Java 语言当中,(C)关键字用来实现同步。 A.native B.static C.synchronized D.abstract
15.以下关于 Java 的 List Set 和 Map 集合的描述,错误的是(BC)(多选)。 A) List 集合的元素是有序的,元素可以重复 B) HashSet 集合的元素是无序的,可以重复的;TreeSet 是有序的,基于 TreeMap 实现 的 C) HashMap 的 Key 必须唯一,Value 同样不可以重复 D) LinkedList 线程不安全,它是链表结构 E) List 集合具有以下几种常用的方法:add(E e) clear() hashCode() iterator() toArray()
16.正则表达式“\d+.?\d*”,在匹配下列字符串时结果失败的是(C)。 A.12.5 B.1.25 C.以上都成功 D.以上都失败
二、简答题
1.string、stringbuilder、stringbuffer 区别?stringbuilder、stringbuffer 哪个是线程不安全?
答:String对象不可变,线程安全,Stringbuffer(加了同步锁) 对象可变,线程安全,速度较慢,Stringbuilder对象可变,线程不安全,速度快。
2.HashMap 和 Hashtable 有什么区别?
答:两者都实现了map接口,hashmap是以键值对存储,线程不安全,hashtable是安全线程
3.Array 和(ArrayList)有什么区别?什么时候应该使用 Array 而不是 ArrayList?
Array长度不可调整,是固定长度的数组,且存储的值必须是统一类型,而Arraylist底层是可以改变长度的数组,存储的对象类型不受限制
4.Java 中创建线程哪几种方式?需要实现什么方法?优缺点是什么?
继承Thread,重写run方法,使用start启动线程,受单根继承的限制
实现runnable接口,重写run方法,
实现callable接口,实现call方法,
三、编程题
1.给定一个长字符串 A 和一个短字符串 B,请问如何最快判断字符串 B 中的所有字符是否 都在字符串 A 中 publicbooleanstringContains(StringA,StringB){ //编码区 }

 public boolean stringContains(String a,String b){
        char [] ch=b.toCharArray();
        for (char c : ch) {
            if(a.indexOf(c)<0){
                return false;
            }
        }
        return true;
    } 

2.在排序的数组中,给定一个值,找出值对应的索引 publicintfindIndex(int[]a,intvalue){ //编码区 }

public int findIndex(int[]a,int value){
        for (int i = 0; i < a.length; i++) {
            if(a[i]==value){
                return i;
            }
        }
        return -1;

    }

3.给定一个整数数组 nums 和一个目标值 target,请你在该集合中找出和为目标值的那两个整 数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案,但是不能重复利用这 个数组中同样的元素。 示例: 给定 nums=[2,7,11,15],target=9 因为 nums[0]+nums[1]=2+7=9 所以返回[0,1] publicSolution{
publicint[]twoSum(int[]num,inttarget){ //编码区 }
}

 public int[] twoSum(int[]num,int target){
        int [] a=new int[2];
        for (int i = 0; i < num.length-1; i++) {
            for (int j = i+1; j <num.length ; j++) {
                if(num[i]+num[j]==target){
                    a[0]=i;
                    a[1]=j;
                    return a;
                }
            }
        }
        return null;
    }

4.写出 List 的三种遍历方式
SQL 部分

List list=new ArrayList<>();
        //增强for
        for (Object o : list) {
            System.out.println(o);
        }
        //for循环
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
        //迭代器
        Iterator it=list.iterator();
        while (it.hasNext()){
            System.out.println(it.next());
        }

5.编写代码使用 FileReader 和 FileWrite 实现文件复制功能。

FileReader fr=new FileReader("PATH");
        FileWriter fw =new FileWriter("toPATH");
        int tmp;
        while((tmp=fr.read())!=-1){
            fw.write(tmp);
        }
        fw.close();
        fr.close();

一、选择题
1.已知表 T1 中有 2 行数据,T2 中有 3 行数据,执行语句”selecta.*fromT1a,T2b”后,返回 的行数为(D)。
A.2 行 B.3 行 C.5 行 D.6 行
3.在数据库中,表是一个非常重要的数据对象,它是用来____ C __ A、显示 B、查询 C、存放 D、检索
4.选择要执行操作的数据库,应该执行的 SQL 命令是(A)。 A、USE B、GO C、EXEC D、DB
二、简答题

  1. 谈谈你对事务的理解?
    事务就是为了业务需求,将一组sql语句放入事务,要么同时成功,要么同时失败,提高数据的安全性和执行一致性;
  2. union 和 unionall 的区别?
    union:对两个结果集进行归并处理,去重,排序
    unionAll:归并,但是不去重,不排序
  3. Where 和 having 的区别?
    where是针对全文的检索,效率高,having是针对group by 进行过滤,后面跟聚合函数,两者的位置不同,
  4. in 和 exists 的区别?
  5. char 和 varchar 的区别?
    char是长度固定的,varchar是长度可变的
    三、编码题
    1.编写 SQL 语句
    1)创建一张学生表,包含以下信息,学好,姓名,年龄,性别,家庭住址,联系 电话。
CREATE TABLE student( 
stuid INT, 
stuname VARCHAR(20) NOT NULL,
age INT NOT NULL,
sex VARCHAR(2) NOT NULL,
address VARCHAR(255),
tel VARCHAR(11)); 

2)修改学生表的结构,添加一列信息,学历。

  ALTER TABLE student ADD school VARCHAR(10);

3)修改学生表的结构,删除一列信息,家庭住址。

ALTER TABLE student DROP address;

4)修改学生表的数据,将电话号码以 11 开发的学员的学历修改为“硕士”。

UPDATE student SET school="硕士" WHERE tel LIKE "11%";

3.表 a 如下,编写一条 SQL 语句,查询出每门课都大于 80 分的学生姓名及成绩

SELECT NAME ,course,score FROM student_score
WHERE NAME NOT IN
(
SELECT NAME FROM student_score WHERE score<80
GROUP BY NAME)

4.学生表如下,编写 SQL 完成:删除除了自动编号不同,其他都相同的学生冗余信息。

CREATE TABLE tmp SELECT * FROM student;
DELETE FROM student WHERE stuid  IN
(
SELECT stuid FROM tmp GROUP BY stuname,age,sex,tel,school
)
DROP TABLE tmp;

5.怎么样把下面的表 A 数据查询成表 B 的数据

SELECT YEAR ,(CASE WHEN MONTH=1 THEN amount ELSE 0 END) m1,
(CASE WHEN MONTH=2 THEN amount ELSE 0 END) m2,
(CASE WHEN MONTH=3 THEN amount ELSE 0 END) m3,
(CASE WHEN MONTH=4 THEN amount ELSE 0 END) m4
FROM TABLE 
GROUP BY YEAR

本文地址:https://blog.csdn.net/yanglitian_123/article/details/107070548

《Java和SQL 阶段考试题目答案.doc》

下载本文的Word格式文档,以方便收藏与打印。