面试题真题解析(4)BSSGINFO
博思曙光(大连)管理咨询公司
选择题
1、JAVA 中对于 String str =“hello word” 下列语句错误的是?
A、 str+=’ a’
B、 int strien = str.length
C、 str=100
D、 str=str+100
正确答案:AC
A 选项应改为 “”,若维持 ‘’ 不变,则需要将 a 前面的空格去掉,这样 ‘a’ 实际上代表一个数字。
B 选项 String.length 返回的就是 int 类型,所以正确。
C 选项 字符串 str 的引用不能是 int 类型。
D 选项字符串与数字拼接时会自动将 int 类型转换为字符串。
2、执行如下代码后输出结果为( )
public class Test {
public static void main(String[] args) {
System.out.println("return value of getValue(): "+ getValue());
}
public static int getValue(){
int i=1;
try{
i=4;
} finally {
return i++;
}
}
}
A、 return value of getValue(); 1
B、 return value of getValue(); 4
C、 return value of getValue(); 5
D、 其他几项都不对
正确答案:C
本题在 main 方法中调用了静态方法 getValue,这里主要考察了 finally 的用法和 i++ 的用法,根据 getValue 方法我们可以看到首先定义了一个 int 值 i=1,然后进入 try 块将 i 赋值为 4,这里由于 finally 无论 try…catch 执行哪一步最后都会执行的特性,进入到 finally 块中,并返回 i++,但是由于 i++ 是先计算后自增的特性,返回值并没有变,所以最后返回的是 4
3、以下关于集合类 ArrayList、LinkList、HashMap 描述错误的是()
A、 HashMap 实现 Map 接口,它允许任何类型的键和值对象,并允许将 null 用作键或值
B、 ArrayList 和 LinkedList 均实现了List接口
C、 添加和删除元素时,ArrayList 的表现更佳
D、 ArrayList 的访问速度比 LinkedList 快
正确答案:C
A 选项 HashTable 中 key 和 value 都不允许 null 值,但是 HashMap 中都允许。
B 选项 都是 List 集合下的当然都实现了 List 接口。
CD 选项 ArrayList 是基于数组实现的因此随机访问更快,而 LinkedList 是基于链表实现因此添加和删除更快。
4、如果一个 list 初始化为 {5 , 3 , 1} 执行以下代码后,其结果为 () ?
list.add(6);
list.add(0,4);
list.remove(1);
A、 [5,3,1,6]
B、 [4,3,1,6]
C、 [4,3,6]
D、 [5,3,6]
正确答案:B
吐槽:连个输出语句都没有,结果能有个锤子啊喂!
执行第一行,list 变为 {5,3,1,6}
执行第二行,list 变为 {4,5,3,1,6},这里是在下标为 0 处添加一个 4 而不是替换!!
执行第三行,list 变为 {4,3,1,6},这里是将下标为 1 的元素删除,所以将 5 删除了。
就当它还有个输出语句,结果为 B
5、下面有关 sql 语句中 delete truncate 的说法正确的是? ()
A、 论清理表数据的速度,truncate 一般比 delete 更快
B、 truncate 命令可以用来删除部分数据
C、 truncate 只删除表的数据不删除表的结构
D、 delete 能够回收高水位
正确答案:AC
A 选项 数据库的处理效率 drop > truncate > delete
B 选项 truncate 命令删除所有数据,delete 命令删除部分数据
C 选项 drop 删除所有,truncate 删除所有数据但不删除表,delete只删除部分数据
D 选项 truncate 能回收高水位,但是 delete 并不能。高水位和 MySQL 中的主键自增类似,主键自增,就算将之前的数据删掉,新增加的数据也只会按照之前最高的数值开始自增。高水位也是类似,假如之前有 10 条数据,则水位为 10,即使删除了 5 条数据,高水位还是 10,此时添加一条数据,高水位就变为 11。而 truncate 是将整个表的所有数据都删除,因此会将高水位复位。
简答题
1、数据库事务是什么? 简要说明数据库事务的特性?
数据库是面向多用户的共享机制,所以数据库管理要具有并发性和同步机制,而事务就是一种多个执行步骤的执行特性,即要么同时执行相应的操作要么一个也不执行。这样就保证了在多个用户操作同一数据时数据的一致性。这样保证数据一致性的操作执行特性就称为事务。
事务的特性(ACID):
- 原子性(Atomicity):一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中如果发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
- 一致性(Consistency):在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
- 隔离性(Isolation):数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。
- 持久性(Durability):事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
2、大学生春季运动会的数据库,保存了比赛信息的三个表如下:
-
运动员 sporter (运动员编号 sporterid,姓名 name,性别 sex,所属系号 department)
-
项目 item (项目编号 itemid,名称 itemname,比赛地点 location)
-
成绩 grade (运动员编号id,项目编号 itemid,积分 mark)。
-
用 SQL 语句完成在 “体育馆" 进行比赛的各项目名称及其冠军的姓名。
参考答案:
select i.itemname s.name from grade g join item i on g.itemid = i.itemid where i.location = “体育馆” orderby mark desc limit 0,1 join sporter s on g.id = s.sporterid
3、简要说明重写和重载的区别
重写和重载的区别:
-
重载发生在同一类中,重写发生在父子类中。
-
重载的方法名称相同,参数列表不同;重写的方法名称相同,参数列表相同,方法体不同。
-
重载的方法在编译器绑定,重写的方法在运行期绑定。
-
重载与方法的返回值类型无关。
重写遵循两同两小一大原则:
- 两同:方法名称相同,参数列表相同
- 两小:子类方法的返回值小于等于父类的返回值,子类方法抛出的异常小于或等于父类方法抛出的异常。
- 一大:子类方法的访问权限大于或等于父类方法的。
4、接口和抽象类的区别
接口和抽象类的区别:
- 接口是由 interface 修饰的;抽象类是由 abstract 修饰的。
- 接口需要被 implements 实现;抽象类需要被 extends 继承。
- 接口中只能有常量或抽象方法;抽象类可以有成员变量,方法,且不一定有抽象方法。
- 一个类能实现多个接口;但一个类只能继承一个抽象类。
- 接口中不能定义构造方法;抽象类中可以定义构造方法。
- 接口中访问修饰符默认 public static final;抽象类中任何访问修饰符都行。
5、说说你对 loC 和 aop 的理解
IoC(Inversion of Control):是面向对象编程中的一种设计原则,其中最常见的方式叫做依赖注入(Dependency Injection)简称 DI。IoC 简称控制反转,将我们创建以及管理的对象的权限从我们手中交给 Spring 容器来管理,这种控制权限的移交我们称之为控制反转。
AOP(Aspect Oriented Programming)是面向切面编程,作为面向对象编程的补充,用于对一些与业务无关的,但是可能对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为 “切面” ,减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。可用于权限认证、日志管理、事务处理等。