java面试题分析
1.面试单选题
1.面试题执行下列语句后,变量i的值是?
byte i=127;
i=i+2;
误区可能以为是-127,实际上是编译不通过,报错
出现问题incompatible types required:byte,found:int
2.面试题表达式(short)10/10.2*2运算后结果是什么类型?
误区可能以为是short类型,但是进行强制转化后最大为double类型
3.面试题观察下面代码解释其结果:
第一种:整数除法
class Test
{
public static void main(String args[])
{
System.out.println(3/0);
System.out.println(3%0);
}
}
整数除法中,除数为0,抛出一个算术异常ArithmeticException。整数取余运算中,除数为0,抛出一个ArithmeticException异常。
第二种:小数除法
public class test {
public static void main(String[] args) {
try {
double x=64.0;
double y=0.0;
System.out.println(x%y);
} catch (Exception e) {
System.out.println("abc");
}
}
}
小数除法中,除数为0,输出一个Infinity常量。小数取余运算中,除数为0,抛出一个NaN常量。
误区以为会产生abc,实际为nan,意思为非数值类型。
第三种:==和equal比较
class Test
{
public static void main(String args[])
{
double x = 64.0;
double y = 0.0;
System.out.println(x%y == x%y);
}
}
等于号比较的是两个nan=nan,所以为false
Double a = new Double(Double.NaN);
Double b = new Double(Double.NaN);
if(Double.NaN == Double.NaN)
System.out.println("True");
else
System.out.println("False");
if(a.equals(b))
System.out.println("True");
else
System.out.println("False");
等于号比较nan=nan,所以第一个是false
equal比较的是数值nan=nan,所以第二个是true
结果就是false,true
第四种:整数取余
class Test
{
public static void main(String args[])
{
byte x = -64;
byte y = -6;
System.out.println(x/y + " " + x%y);
x = 64;
System.out.println(x/y + " " + x%y);
}
}
/ 为除数,%取余,且在取余操作中,余数的正负符号完全取决于左操作数,和作操作数的正负号一致。
所以为10,-4 -10,4
第五种:小数取余
class Test
{
public static void main(String args[])
{
double x = 64.5;
double y = 6.0;
System.out.println(x/y + " " + x%y);
}
}
小数取余,用左边的操作数连续减去右边的操作数,直到结果小于右边的操作数,此结果为余。即对商截去小数位后的运算。同时此时除法也不同于普通的除法
所以结果为10.75,4.5
4.面试题当一个类所有构造器均为私有的,以下那个描述是正确的?
问题1:
A不能被其他类实列化
B不能被其他类继承
C既不能被其它类实例化,也不能被其他类继承
D该类必须被final修饰
既不能实例化也不能继承
问题2:
以下那个针对默认无参构造器描述是正确的:
A均是public构造器
B均无访问修饰符
C均与所属类访问修饰符一致
D由编译器决定
均是public构造器
问题3:
构造方法和普通方法有什么区别?
与一般方法相比,构造方法的特点是:
1、构造函数的名称总是和它的类名一致。
2、构造函数没有返回值,即不可以为它指定任何类型的返回值,包括void。
3、在构造函数的第一条语句中,可以调用同类的另一个构造函数或者父类的构造函数。
4、构造函数不能由编程人员显式的直接调用。
5、构造函数的主要作用是完成对类对象的初始化。
4.面试题以下选项中关于Dom和Sax的说法错误的是?C
A. dom 和sax都是目前常用的xml解析技术
B.dom把xml文档映射成一个倒挂的树状结构
c. 模型内存消耗小,dom解析器能提供更好的性能优势
d. sax读取文档时会激活一系列事件,推给事件处理器,由事件处理器来访问文档。
dom内存消耗很大,性能不如sax
5. 面试题sql语句中只有满足联接条件的记录才包含在查询结果中,这种联接为?C
a. 左连接
b. 右链接
c. 内连接
d. 完全连接
INNER JOIN等价于JOIN,为普通连接,在Visual FoxPro中称为内部连接,即只有满足连接条件的记录才出现在查询结果中。
LEFT JOIN为左连接,即除满足连接条件的记录出现在查询结果中外,第1个表中不满足连接条件的记录也出现在查询结果中。
RIGHT JOIN为右连接,即除满足连接条件的记录出现在查询结果中外,第2个表中不满足连接条件的记录也出现在查询结果中。
FULL JOIN可以称为全连接,即两个表中的记录不管是否满足连接条件将都在目标表或查询结果中出现,不满足连接条件的记录对应部分为NULL
6. 面试题关于spring说法错误的是:D
a. spring是一个轻量级java ee 的框架集合
b. spring提供了“依赖注入”的实现
c. 使用spring可以实现声明事务
d. spring提供aop方式的日志系统
错误的是D,spring没有提供aop日志,只是支持aop而已
7.面试题写出程序结果:
static boolean foo(char c)
{
System.out.println(c);
return true;
}
public static void main(String[] args) {
int i=0;
for(foo('A');foo('B')&&(i<2);foo('c')){
i++;
foo('d');
}
}
结果是ABdcBdcB
8.面试题下列代码执行的结果是:
public static void stringReplace(String text){
text=text.replace('j','i');
}
public static void bufferReplace(StringBuffer text){
text.append("c");
text=new StringBuffer("Hello");
text.append("world!");
}
public static void main(String[] args) {
String textString =new String("java");
StringBuffer textBuffer=new StringBuffer("java");
stringReplace(textString);
bufferReplace(textBuffer);
System.out.println(textString+textBuffer);
}
执行结果是javajavac
这是String参数传递,是不可变的(immutable).
而题目中第七行text = text.append (“C”),append方法会改变text中的值
而这个text与main中的textBuffer是指向同一个对象,所以对应的输出是javac。
而里面的新建的helloworld对象会被回收,
9.面试题给出以下代码,说法正确的是( C)
public XXXX extendssomething1,something2
A.如果XXXX是一个接口,something1和something2取消掉,则代码段合法
B.如果XXXX是一个类,something1和something2均是接口,则代码段合法
C.如果XXXX、something1和something2均是接口,则代码段合法
D.因为Java语言不支持多重继承,所以代码不合法
10.面试题写出下列面试题结果:
public class Test01 {
public static int fun(){
int result = 5;
try {
result = result/0;
return result;
} catch (Exception e) {
System.out.println("Exception");
result = -1;
return result;
}finally{
result= 10;
System.out.println("finally");
}
}
public static void main(String[] args) {
int x = fun();
System.out.println(x);
}
}
Exception
finally
-1
可能会以为是result为10,但是有return所以返回值为-1
11.面试题关于集合中的equals()和hashcode规定的说法错误的是?D
a. 如果两个对象相同,他们的hashcode要一致
b. 如果两个对象hashcode值一致,equals方法不一定返回true
c. equal方法默认和==判定一致
d. java中的hashcode就是对象的内存地址
不是,hash code 只是Java 用来标识对象的,你可以形象的把它视为对象的身份证号码。
该方法返回对象的哈希码,支持该方法是为哈希表提供一些优点,例如,HashMap 提供的哈希表。
同一个对象未发生改变时多次调用hashCode()返回值必须相同,
两个对象equals不相等,那么两对象的hashCode()返回最好不同(此处可用来提高哈希表性能)
两个对象的hashCode()返回值相同,两对象不一定相同,还需要通过equals()再次判断
当equals方法被重写时,通常有必要重写 hashCode 方法
2.面试多选题
1.面试题在oracle中的一个事务可以由以下哪些情况的出现而结束(ABCD)
a. 使用commit提交
b. 使用rollback回滚
c. 执行ddl/dcl语句
d. 用户撤销oracle连接
以上都会出现结束还有一种情况:4、数据库关闭(宕机)
2.面试题有关servlet的声明周期说法正确的是?(acd)
a. servlet的生命周期由servlet实例控制
b. init()方法在创建完servlet实例后对其进行初始化,传递的参数为实现servletContext接口的对象
c. service()方法响应客户端发出的请求
d. destroy() 方法用于释放servlet实例资源
init传递的参数是servletconfig用于初始化
servletContext用于传递数据
3.面试题拥有下列引用类型的对象在虚拟机内存足够的情况下不会被垃圾回收机制回收?(AC)
a. 强引用
b. 弱引用
c. 软引用
d. 虚引用
4.面试题关于文件上传,下列说法正确的是?(AB)
a. 表单的enctype属性取值必须是“multipart/form-data”
b. 需要用post方式提交
c. 表单的action属性中不能使用url重写(?arg=value&argl=value1)形式传递参数
d. 请求中的content-lenth包含的是请求体的总长度,而不是上传文件的大小
d不正确是响应内容的长度
5.面试题下列select语句中,那些子句不能包含子查询?(c ,d)
a. select
b. group by
c. where
d. order by
3.面试填空题
1.css框模型中
统一调整四周外边距的属性是margin
统一调整四周内边距的属性是padding
2.默认情况下,connection对象会在执行一条语句后自动提交
不利于事务控制,如果改变这种情况调用connection的setautocommit方法设置为手动提交
3.java中最有效计算2*8
2<<3 左移为乘法即2*2的三次方
4.局部变量的名字和成员变量的名字相同,若想在该方法中使用成员变量,需要使用this关键字
5.java集合中抽象有序集合的接口是list,无序集合的接口是set,他们的共同父接口是connection,
对于集合进行特殊操作,如排序工具 类是connections
4.面试解答题
1. 简述jspmvc模式下重复提交问题产生的原因和解决办法
原因:在表单提交到一个Servlet,而Servlet又通过请求转发的方式响应了一个JSP(HTML)页面, 此时地址栏还保留着Servlet的那个路径,在响应页面点击“刷新”,这就是一个重复提交的情况。
解决办法:javascript ,设置一个变量,只允许提交一次。 或者javascript,将提交按钮或者image置为disable
2.jsp中的动态引入与静态引入的区别
JSP静态引入就是把页面A嵌入到页面B中
动态引入是一个页面引用另一个页面
3.描述hibernate的id生成器
4.简述spring中的编程式事务处理及声明式事务处理
编程式事务处理就是指在业务代码中利用Spring框架提供的一些类进行事务处理。
声明式事务处理就是指在xml配置文件或注解的方式声明对某个类方法进行事务处理。