JAVA面试题02
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA面试题02相关的知识,希望对你有一定的参考价值。
一、选择题
1.java内部使用的编码格式是 c、unicode,在JVM内部,统一使用Unicode表示。
2.
public class Threads2 implements Runnable{
public void run() {
System.out.println("run.");
throw new RuntimeException("Problem");
}
public static void main(String[] args){
Thread t = new Thread(new Threads2());
t.start();
System.out.println("End of method.");
}
}
运行结果是(D、E)
D、End of method.run.java.lang.RuntimeException: Problem
E、run.java.lang.RuntimeException: Problem End of method
3.
public class SimpleCalc {
public int value;
public void calculate(){
value += 7;
}
}
public class MultiCalc extends SimpleCalc {
public void calculate(){
value -= 3;
}
public void calculate(int multiplier){
calculate();
super.calculate();
value *= multiplier;
}
public static void main(String[] args){
MultiCalc calculator = new MultiCalc();
calculator.calculate(2);
System.out.println("Value is: "+calculator.value);
}
}
运行的结果是(A)
A、Value is:8
4. 在MVC中,javaBean的作用是进行业务数据的封装,MVC是model view controller的缩写,jsp对应view层,主要用于页面的显示,servlet对应controller层:中间层负责数据的访问(调用service接口)和页面的跳转(跳转到想要显示的jsp页面),javaBean对应model层,是对数据的封装,处理数据
5.对下面Spring声明事物的配置含义说明错误的是(c)
<bean id="txProxyTemplate" abstract="true" class= "org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager" ref="myTransactionManager" /> <property name="transactionAttributes"> <props> <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop> <prop key="*">PROPAGATION_REQUIRED</prop> </props> </property> </bean>
A、定义了声明事物的配置模版
B、对get方法采用只读事物
C、缺少sessionFactory属性的注入
D、配置需要事物管理的bean的代理,通过parent引用这个配置模版。代码如下:
<bean id="petBiz" parent="txProxyTemplate">
<property name="target" ref="petTarget"/>
</bean>
这里已经注入了工厂 <property name="transactionManager"ref="myTransactionManager"/>
6.Hibernate API中的接口可以分为以下几类:
A、提供访问数据库的操作的接口,包括session、transaction、query接口
B、用于配置Hibernate的接口,configuration
C、间接接口,使应用程序接受Hibernate内部发生的事将,并做出相关的回应,包括interceptor、lifecycle、validatable
D、用于扩展Hibernate功能的接口,如UserType、CompositeUserType、IdentifierGenerator接口
答案:ABCD
7.事物的原子性是指:
A、事物中包括的所有操作要么都做,要么都不做
B、事物一旦提交,对数据库的改变是永久的(持久性)
C、一个事物内部的操作及使用的数据对并发的其他事物是隔离的(隔离性)
D、事物必须是是数据库从一个一致性状态改变到另一个一致性状态(一致性)
答案:A
二、简答题
1.List、Map、Set三个接口,存取元素是,各有什么特点?
答:List和Set都是单列元素的集合,他们有一个共同的父接口Collection
Set里面不允许有重复的元素 存元素:add方法有一个Boolean的返回值,当集合众没有某个元素,此时add方法可成功加入该元素,则返回true;当集合含有与某个元素equals相等的元素是,此时add方法无法加入该元素,返回false。
取元素:没有具体的取第几个,只能以Iterator接口取得所有的元素,在逐一遍历各个元素
List表示有先后顺序的集合, 存元素:多次调用add(Object)方法时,每次加入的对象按先来后到的顺序排序,也可以插队,即调用add(int index,Object)方法,就可以指定当前对象在集合中存放的位置。
取元素:方法1:Iterator接口取得所有,逐一遍历各个元素
方法2:调用get(index i)来明确说取第几个。
Map是双列集合,存放用put方法:put(obj key,obj value),每次存放时,要存储一对key/value,不能存储重复的key,这个重复的规则也是按equals比较相等。
取元素:用get(Object key)方法根据key获得相应的value,也可以获得所有的key的集合,还可以获得所有的value的集合,还可以获得key和value组合成的Map.Entry对象的集合。
List以特定的次序来持有元素,可以重复元素。Set无法拥有重复的元素,内部排序。Map保存key-value值,value可多值。
2.列举你所知道的排序方法,请写出快速排序的伪代码。
答:排序的方法有:插入排序(直接插入排序、希尔排序),交换排序(冒泡排序、快速排序),选择排序(直接选择排序、堆排序),归并排序,分配排序(箱排序,基数排序)
快速排序伪代码:
//使用快速排序方法对a[0:n-1]排序
从a[0:n-1]中选择一个元素作为middle,该元素为支点
把余下的元素分割为两段left和right,使得left中元素都小于等于支点,而right中的元素都大于等于支点
递归的使用快速排序方法对left进行排序
递归的使用快速排序方法对right进行排序
所得结果为left+middle+right
伪代码:
quicksort(A ,lo,hi)
if lo<hi
p=partition(A,lo,hi)
quicksort(A,lo,p-1)
quicksort(A,p+1,hi)
partition(A,lo,hi)
pivot=A[hi]
i=lo //place for swapping
for j = lo to hi-1
if A[j]<=pivot
swap A[i] with A[j]
i=i+1
swap A[i] with A[hi]
return i
3.谈谈final,finally,finalize的区别?
答案:(1)final:修饰符(关键字),如果一个类被声明为final,意味着他不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为abstract,又被声明为final的。将变量或方法声明为final,可以保证他们在使用中部被改变。被声明为final的变量必须在声明的时候给定初始值,而在以后的引用中只能读取,不可修改。被声明为final的方法同样只能使用,不能重载。
(2)finally:在异常处理时提供finally快来执行任何清除操作。如果抛出一个异常,那么匹配的catch子句就会执行,然后控制就会进入finally块(如果有的话)。
(3)finalize:方法名。java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是有垃圾收集器在确定这个对象没有被引用是对这个对象调用的。他是在Object类中定义的,因此所有的类都继承了他,子类覆盖finalize()方法以整理系统资源或执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。
一、性质不同
1、final为关键字
2、finalize()为方法
3、finally为区块标志。用于try语句中
二、作用
1、final为用于表示常量的关键字,final标识的关键字存储在常量池中(在这里final
常量的具体用法将在下面进行介绍)
2、finalize()方法在Object中进行了定义,用于在对象“消失”时,由JVM进行调用用于对对象进行垃圾回收,类似于C++中的析构函数;用户自定义时,用于释放对象占用的资源(比如进行I/0操作);
3、finally{}用于标识代码块,与try{}进行配合,不论try中的代码执行完或没有执行完(这里指有异常),该代码块之中的程序必定会进行。
以上是关于JAVA面试题02的主要内容,如果未能解决你的问题,请参考以下文章