欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java和SQL语句阶段考试错题集

程序员文章站 2023-12-04 18:04:58
文章目录一.Java部分1.选择题2.简答题3.编程题二.SQL部分1.简答题2.编程题一.Java部分1.选择题3.关于 Java 堆,下面说法错误的是()。A.所有类的实例都是在堆上分配内存。B.对象所占的堆内存是由自动内存管理系统回收。C.堆内存由存活和死亡的对象,空闲碎片区组成。D.数组是分配在栈中的错选A -->原因:对基本概念不熟悉正确答案D堆内存用于存放由new创建的对象和数组。 数组和对象在没有引用变量指向它的时候,才变成垃圾,不能再被使用,但是仍然占着内存,在随后...

一.Java部分

1.选择题

3.关于 Java 堆,下面说法错误的是()。
A.所有类的实例都是在堆上分配内存。
B.对象所占的堆内存是由自动内存管理系统回收。
C.堆内存由存活和死亡的对象,空闲碎片区组成。
D.数组是分配在栈中的
错选A -->原因:对基本概念不熟悉
正确答案D
堆内存用于存放由new创建的对象和数组。 数组和对象在没有引用变量指向它的时候,才变成垃圾,不能再被使用,但是仍然占着内存,在随后的一个不确定的时间被垃圾回收器释放掉。这个也是java比较占内存的主要原因,实际上,栈中的变量指向堆内存中的变量,这就是 Java 中的指针!
6.观察如下代码,正确显示结果为()。

class A{
	 void callme(){
	 	System.out.println("InsideA'scallme()method"); 
	 } 
} 
class B extends A{ 
	void callme(){
		 System.out.println("InsideB'scallme()method"); 
	}
}
class C extends B{
	 void callme(){ 
	 		System.out.println("InsideC'scallme()method"); 
	 } 
} 
public class Dispatch{
	 public static void main(String args[]){ 
	 	A a=new C(); 
	 	a.callme(); 
	 }
} 

A.InsideA’scallme()method
B.InsideB’scallme()method
C.InsideC’scallme()method
D.抛出异常
错选A-->原因:忽略了方法被重写,方法重写子类会覆盖父类方法
正确答案C
8.观察如下代码,正确的显示结果是()。

class MyException extends Exception{ 
	public MyException(String msg){
	 super(msg); 
	} 
}
 public class MyClass{
 	 public static void main(String[] args){
 	  try{ if(true) throw new MyException("bad");
 	   System.out.println("OK"); 
 	  }catch(MyExceptione){ 
 	  System.out.print(e.getMessage());
 	  } 
 	  System.out.print("bye");
 	 } 
}

A. bad B. badbye C. OKbad D. OKbadbye
错选C-->原因:对异常处理机制不熟悉
正确答案B
异常处理机制如下:
Java和SQL语句阶段考试错题集
Java和SQL语句阶段考试错题集
Java和SQL语句阶段考试错题集
12.Thread 类用来创建和控制线程,一个线程从下面()方法开始执行。
A.init() B.start() C.run() D.notifyAll()
错选C-->原因:看题不仔细,题目是要开始执行的方法,想都没想就选了run执行主体逻辑的方法
正确答案B
15.以下关于 Java 的 List Set 和 Map 集合的描述,错误的是()(多选)。
A) List 集合的元素是有序的,元素可以重复
B) HashSet 集合的元素是无序的,可以重复的;TreeSet 是有序的,基于 TreeMap 实现 的
C) HashMap 的 Key 必须唯一,Value 同样不可以重复
D) LinkedList 线程不安全,它是链表结构
E) List 集合具有以下几种常用的方法:add(E e) clear() hashCode() iterator() toArray()
错选了BCD-->原因:对集合中线程安全不太了解
正确答案BC
集合中线程安全类:
Vector:就比ArrayList多了个同步化机制(线程安全),因为效率较低,现在已经不太建议使用。
在web应用中,特别是前台页面,往往效率(页面响应速度)是优先考虑的。
Statck:堆栈类,先进后出
HashTable:比HashMap多了个线程安全,其他比较见简答题2
Enumeration:枚举,相当于迭代器 除了这些之外,其他的都是非线程安全的类和接口。

2.简答题

2.HashMap 和 Hashtable 有什么区别?
HashMap平时用得较多,HashTable没咋关注
答案如下:

  • (1) HashMap 非线程安全,HashTable 是线程安全的。Java 5 提供了 ConcurrentHashMap, 它是 HashTable 的替代,比 HashTable 的扩展性更好
  • (2) HashMap 可以接受为 null 的键值(key)和值(value),而 Hashtable 则不行。
  • (3) HashMap 的迭代器(Iterator)是 fail-fast 迭代器,而 Hashtable 的 enumerator 迭代器不是 fail-fast 的。 由于 Hashtable 是线程安全的,也就是 synchronized,所以在单线程环境下它比 HashMap 要 慢。如果不需要同步,只需要单一线程,那么使用 HashMap 性能要好过 Hashtable

4.Java 中创建线程哪几种方式?需要实现什么方法?优缺点是什么?
答案如下:
(1) 继承 Thread 类创建线程类,并重写该类的 run 方法,该 run()方法的方法体就代表了线 程要完成的任务。调用线程对象的 start()方法来启动该线程
(2) 实现 Runnable 接口,并重写该接口的 run()方法,该 run()方法的方法体同样是该线程的 线程执行体。调用线程对象的 start()方法来启动该线程。
(3) 实现 Callable 接口,并实现 call()方法,该 call()方法将作为线程执行体,并且有返回值。 创建一个 Callable 实现类的实例对象,再使用 FutureTask 类来包装 Callable 对象,该 FutureTask 对象封装了该 Callable 对象的 call()方法的返回值

  • 继承 Thread 类的优缺点 优点: 编写简单, 如果需要访问当前线程, 直接使用 this 即可获得当前线程, 无需使用 Thread.currentThread()方法 缺点: 线程类已经继承了 Thread 类, 不能继承其他类 实现
  • runnable 或者 Callable 接口的优缺点 优点: 线程类只是实现了接口, 还可以继承其他的类 缺点: 访问当前线程时, 需要使用 Thread.currentThread(0)方法
    忽略了第三种平时12用得较多,2使用的最多

3.编程题

1.给定一个长字符串 A 和一个短字符串 B,请问如何最快判断字符串 B 中的所有字符是否 都在字符串 A 中
答案代码如下:

//判断每个数组是否存在 
public boolean stringContains(String A,String B){ 
//判断结果 
booleanb=true; 
//将带判断的小字符串转成字符数组,以遍历判断是否存在于大字符串中 
char[]ch=B.toCharArray();
 	for(charc:ch){
 		 if(A.indexOf(c)<0){
			   b=false; 
  			   break;
 		  } 
   } 
   //返回结果 
returnb; 
}

编程题最后写的时间不够

二.SQL部分

1.简答题

2.union 和 unionall 的区别?(3 分)

  • Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
  • UnionAll:对两个结果集进行并集操作,包括重复行,不进行排序;
    平时用的较少,基本只用了几次union,而且只知道是连接两个表内容并集操作

3.in 和 exists 的区别?(3 分, 答对两条即可)
(1) 运用情况不同 sql 中 in 适用于子查询得出的结果集记录较少,主查询中的表较大且又有索引的表,。 sql 中 exist 适用于外层的主查询记录较少,子查询中的表大,又有索引的时候。
(2) 驱动顺序不同 IN 是先查询子查询的表,然后将内表和外表做一个笛卡尔积,然后按照条件进行筛选。 exists 是以外层表为驱动表,先被访问。
(3) 对 NULL 值处理不同 IN 不对 NULL 进行处理,exists 会对 NULL 值进行处理。
(4) 底层原理不同 in 是把外表和内表作 hash 连接,而 exists 是对外表作 loop 循环,每次 loop 循环再对 内表进行查询。
in平时用得较多,而exists基本没用过,不太了解

5.char 和 varchar 的区别?(3 分)
CHAR 的长度是固定的,而 VARCHAR 的长度是可以变化的
varchar用的习惯了,都快忘了char这个类型了~

2.编程题

5.怎么样把下面的表 A 数据查询成表 B 的数据
Java和SQL语句阶段考试错题集
Java和SQL语句阶段考试错题集
分析:行列互转-->在新字段使用一个子查询,如下:

  • 数据库的数据如下:
    Java和SQL语句阶段考试错题集
SELECT DISTINCT b.`year` `year`,
(SELECT amount FROM a a1 WHERE a1.`month`=1 AND b.`year`=a1.year) AS m1,
(SELECT amount FROM a a1 WHERE a1.`month`=2 AND b.`year`=a1.year) AS m2,
(SELECT amount FROM a a1 WHERE a1.`month`=3 AND b.`year`=a1.year) AS m3,
(SELECT amount FROM a a1 WHERE a1.`month`=4 AND b.`year`=a1.year) AS m4
FROM a b;
  • 执行效果如下:
    Java和SQL语句阶段考试错题集
    答案代码如下:
SELECT `year`,SUM(CASE WHEN MONTH='1' THEN amount ELSE 0 END) m1, 
SUM(CASE WHEN MONTH='2' THEN amount ELSE 0 END) m2,
SUM(CASE WHEN MONTH='3' THEN amount ELSE 0 END) m3,
SUM(CASE WHEN MONTH='4' THEN amount ELSE 0 END) m4 
FROM a
GROUP BY `year`;

原因-->时间不够2333

本文地址:https://blog.csdn.net/sun_0128/article/details/107071587