avatar

三十天科技Java面试题

1.选择题

1.1.下列选项中,用于在定义子类时声明父类名的关键字是(C)

1
A. interface		B. package			C. extends			D. class

1.2.System.out.println(“1” + 2 - 3)的输出结果应该是(D)

1
A. 0		B. 49			C. 523			D. 无法编译

1.3.下面哪个是对称加密算法(B)

1
A. BASE64		B. AES			C. RSA			D. MD5

1.4.下面程序的运行结果是(D)

1
2
3
4
5
6
7
8
9
public static void main(String[] args) {

String s1 = "hello";
String s2 = "he" + new String("llo");

System.err.println(s1 == s2);
System.err.println(s1.equals(s2));

}
1
A. true true		B. true false		C. false false			D. false true

1.5.以下代码执行后输出结果为(B)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class ExceptionTest {
public void method() {

try {

System.out.println("进入到try块");

} catch (Exception e) {

System.out.println("异常发生了!");

} finally {

System.out.println("进入到finally块");

}

System.out.println("后续代码");

}

public static void main(String[] args) {

ExceptionTest test = new ExceptionTest();

test.method();

}
}
1
2
A. 进入到try块  异常发生了!  进入到finally块  后续代码	B. 进入到try块  进入到finally块  后续代码
C. 进入到try块 后续代码 D. 异常发生了! 后续代码

1.6.下列外部类定义中,不正确的是(C)

1
2
A. class x {...}					B. class x extends y {...}
C. static class x implements y1,y2 {...} D. public class x extends Applet {...}

1.7.对于java类型变量char c,short s,float f,double d,表达式c * s + f + d的结果类型为(D)

1
A. float		B. char			C. short		D. double

1.8.下面关于垃圾收集的描述哪个是错误的(D)

1
2
A. 使用垃圾收集的程序不需要明确释放对象		B. 现代垃圾收集能够处理循环引用问题
C. 垃圾收集能提高程序员效率 D. 使用垃圾收集的语言没有内在泄漏问题

1.9.(D)

1
A. List		B. Set		C. SortedSet		D. Map

1.10.下面关于垃圾收集的说法正确的是(D)

1
2
A. 一旦一个对象成为垃圾,就立刻被收集掉		B. 对象空间被收集掉之后,会执行该对象的finalize方法
C. finalize方法和C++的析构函数是完全一回事情 D. 一个对象成为垃圾是因为不再有引用指着它,但是线程并非如此

1.11.代码行float t=5.1;int i=t,不正确的是(B)

1
2
A. 代码不能编译						B. 代码编译, i被设置为5
C. 第二行若改为 int i=(byte)t,并结合D选项,则可编译 D. 第一行若改为 float t=5.1f,并结合C选项,则可编译

1.12.关于Java语言中的final关键字的使用,下列说法正确的是(C)

1
2
3
4
A. 在使用final关键字定义的方法里面使用final关键字定义变量
B. 使用final关键字定义变量,必须在变量定义的同时给定变量的具体数值,完成变量初始化
C. final关键字可以用来修饰方法,表明此方法不可以被子类重写
D. 使用final关键字定义变量,必须同时使用static关键字

1.13.关于访问权限,说法正确的是(A)

1
2
3
4
A. 类A和类B在同一包中,类B有个protected的方法testB,类A不是类B的子类(或子类的子类),类A可以访问类B的方法testB
B. 类A和类B在同一包中,类B有个protected的方法testB,类A不是类B的子类(或子类的子类),类A不可以访问类B的方法testB
C. 访问权限大小范围:public > 包权限 > protected > private
D. 访问权限大小范围:public > 包权限 > private > protected

1.15.下列说法正确的是(C)

1
2
3
4
A. volatile,synchronized都可以修改变量,方法以及代码块
B. volatile,synchronized在多线程中都会存在阻塞问题
C. volatile能保证数据的可见性,但不能完全保证数据的原子性,synchronized即保证了数据的可见性也保证了原子性
D. volatile解决的是变量在多个线程之间的可见性、原子性,而sychroized解决的是多个线程之间访问资源的同步性

1.16.下面关于this()和super()说法正确的是(A)

1
2
3
4
A. super()和this()类似,区别是:super从子类中调用父类的构造方法,this()在同一类内调用其它方法
B. thissuper可以同时出现在一个构造函数里面
C. super()必须放在构造方法内第一行,this()不需要
D. super()不能在static环境中使用,this()可以

1.17.关于以下面代码的说明,正确的是(C)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class StaticStuff{

static int x = 10;

static {x += 5;}

public static void main(String args[]) {

System.out.println("x =" + x);

}

static {x /= 3;}

}
1
2
3
4
A. 4行与9行不能通过编译,因为缺少方法名和返回类型
B. 9行不能通过编译,因为只能有一个静态初始化器
C. 编译通过,执行结果为: x=5
D. 编译通过,执行结果为: x=3

1.18.关于HashMap类的描述,以下不正确的是(B)

1
2
3
4
A. HashMap不能保证随着时间的推移Map中的元素次序不变
B. HashMap不允许键或者值是null
C. HashMap不是线程安全的
D. HashMap的数据结构为数组 + 链表

1.19.以下关于集合类ArrayList、LinkedList、HashMap描述错误的是(C)

1
2
3
4
A. HashMap实现Map接口,它允许任何类型的键和值对象,并允许将null用作键或值
B. ArrayList和LinkedList均实现了List接口
C. 添加和删除元素时,ArrayList的表现更佳
D. ArrayList的访问速度比LinkedList快

1.20.指出下列程序运行的结果(B)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Example {

String str = new String("good");

char[] ch = {'a', 'b', 'c'};

public static void main(String args[]) {

Example ex = new Example();
ex.change(ex.str, ex.ch);

System.out.print(ex.str + " and");
System.out.print(ex.ch);

}

public void change(String str, char ch[]) {
str = "test ok";
ch[0] = 'g';
}
}
1
A. good and abc		B. good and gbc		C. test ok and abc		D. test ok and gbc

1.21.下列关于继承的描述正确的是(C)

1
2
3
4
A. 在Java中允许定义一个子类的引用,指向父类的对象
B. 在Java中一个子类可以继承多个抽象类,在extends关键字后依次列出,用逗号隔开
C. 在Java中继承是通过extends关键字来描述的,而且只允许继承自一个直接父类
D. 在Java中抽象类之间不允许出现继承关系,所有的抽象类都相互独立

1.22.以下关于Object类的说法正确的是(A)

1
2
3
4
A. Java中所有的类都直接或间接继承自Object,无论是否明确的指明,无论其是否是抽象类
B. Java中的接口(interface)也继承了Object
C. 利用"=="比较两个对象时,Java调用继承自Object的equals方法,判断是否相等
D. 如果类的定义中没有重新定义toString()方法,则该类创建的对象无法使用toStrig()方法

1.23.在某个类A中存在一个方法: void set(int x),以下不能作为这个方法的重载的声明的是(A)

1
2
A. void set(int y)				B. int set(int x, double y)
C. double set(int x,int y) D. void set(int x,int y)

1.24.下述代码返回结果为(C)

1
2
3
4
5
6
7
8
9
10
11
12
13
public static void main(String[] args) {

Integer a = new Integer(3);
Integer b = 3;
int c = 3;
Integer d = 500;
Integer e = 500;

System.out.println(a == b);
System.out.println(b == c);
System.out.println(d == e);

}
1
2
A. truetruetrue			B. falsetruetrue
C. falsetruefalse D. truefalsefalse

1.25.计算机操作系统出现死锁的原因是什么(D)

1
2
3
4
A. 资源数大大少于进程数,或进程同时申请的资源数大大超过资源总数
B. 有多个封锁的进程同时存在
C. 一个进程进入死循环
D. 若干进程因竞争资源而无休止的等待着其他进程释放已占有的资源

1.26.现有两个表department、employee,department表中有12条数据,employee中有200条数据,执行以下SQL:

1
2
3
4
5
department: departmentId, departmentName
employee: employeeId,departmentId,employeeName

select count(*), 'departmentName','employeeName'
from employee e inner join department d on e.'departmentId' = d.'departmentId'

查询结果中有多少条记录?(A)

1
A. 1		B. 12		C. 200		D. 无法确定

1.27.having子句的作用是(B)

1
2
A. 查询结果的分组条件	B. 组的筛选条件
C. 限定返回的行的判断条件 D. 对结果集进行排序

1.28.关于MySQL索引的说法,不对的是(C)

1
2
3
4
A. 500万数据的用户表user在性别字段sex上建立了索引,语句 "select * from user where sex=1"并不会提速多少
B. 一般情况下不鼓励使用like操作,类似的'like "abc%"'可以使用到索引
C. 唯一索引允许空值,而主键索引不允许为空值,除此之外它们是相同的
D. 对于需要写入数据的操作,比如DELETE、UPDATE以及INSERT操作,索引会降低它们的速度

1.29.有关数据冗余说法错误的是(C)

1
2
3
4
A. 数据库中,数据存在副本的现象,就是数据冗余
B. 通过分类存储,可以有效减少数据冗余,但是会增加数据查找的复杂性
C. 在数据库设计阶段,一定要尽最大可能避免数据冗余,最好做到无数据冗余
D. 数据冗余通常是由于数据库设计引起的

1.30.关于抽象类和接口叙述正确的是(D)

1
2
3
4
A. 抽象类和接口都能实例化
B. 抽象类不能实现接口
C. 抽象类方法的访问权限默认都是public
D. 接口方法的访问权限默认都是public

2.多项选择题

2.1.下列关于if-else if选择结构的说法正确的是(B,D)

1
2
3
4
A. 多个else if块之间的顺序可以改变,改变之后对程序的执行结果没有影响
B. 多个else if块之间的顺序可以改变,改变之后可能对程序的执行结果有影响
C. 多个else if块之间的顺序不可以改变,改变后程序编译不通过
D. 多个else if块之间的顺序可以改变,改变后程序编译可以通过

2.2.关于子查询,以下说法正确的是(A,C)

1
2
A. 一般来说,表连接都可以用子查询替换			B. 一般来说,子查询都可以用表连接替换
C. 相对于表连接,子查询适合于作为查询的筛选条件 D. 相对于表连接,子查询适合于查看多表的数据

2.3.关于线程的叙述(B,C,D)是对的

1
2
3
4
A. 一旦一个线程被创建,它就立即开始运行
B. 使用start()方法可以使一个线程成为可运行的,但是它不一定立即开始运行
C. 如果复用一个线程,可以通过再次调用start方法,使已经结束的线程复活
D. join方法,可使当前线程阻塞,直到thread线程运行结束

2.4.有关单例模式的说法中正确的是(A,B,C)

1
2
A. 用户无法通过new方式实例化单例类			B. 单例模式属于创建型模式
C. 单例模式用于多线程应用程序 D. 违背了单一职责原则

2.5.在(A,D)的列上更适合创建索引

1
2
A. 需要对数据进行排序		B. 具有默认值
C. 频繁更改 D. 频繁搜索

3.填空题

3.1.SQL中,连接表的三种方式left、join、right

3.2.Spring注入参数方式分为基于注解、构造器Setter

3.3.SQL中,创建索引的语句是create [索引类型] index 索引名称 on 表名(列名) with fillfactor = (填充因子值0~100) go;虽然索引可以加快查询速度,但如果是联合索引,需注意满足最左前缀原则,否则无法覆盖索引使其生效

3.4.List接口下面的三个实现类ArrayListLinkedList、Vector

3.5.Mybatis SQL映射文件中获取参数的方式有#{}${}

3.6.Spring MVC中从url中获取参数的注解为@PathVariable,从url后获取查询参数的注解为@RequestParam

3.7.子类对父类继承来的属性重新定义称为重写,子类对自身拥有的同名方法的重新定义称为重载

3.8.创建线程有三种,其中RunnableCallable这两个接口,其中Callable接口可以帮助我们获取到线程执行完后的返回结果

3.9.队列和堆栈有些相似,不同之处在于在队列里第一个插入的元素也是第一个被删除的元素(即是先进先出)

3.10.java.util包中提供了一个专门用来操作集合的工具类,例如排序、二分查找、创建空列表等,这个类是Collections,还提供了一个专门操作数组的工具类,例如排序、转换为字符串、转换为列表等,这个类是Arrays

文章作者: 123
文章链接: https://gao5805123.github.io/123/2020/05/14/%E4%B8%89%E5%8D%81%E5%A4%A9%E7%A7%91%E6%8A%80Java%E9%9D%A2%E8%AF%95%E9%A2%98/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 123
打赏
  • 微信
    微信
  • 支付宝
    支付宝