[知了堂学习笔记]面试题整理_02

1、请大概描述一下Vector和ArrayList的区别,Hashtable和HashMap的区别。(5)

这里写图片描述

2、请问你在什么情况下会在你的JAVA代码中使用可序列化?(5)

当实例化对象会被用于网络传输时,就必须要序列化
保存文件信息

为什么放到HttpSession中的对象必须要是可序列化的?(5)

放在HttpSession中的对象,必定会被使用网络来传输的。对象、文件、数据,有许多不同的格式,很难统一传输和保存。序列化以后就都是字节流了,无论原来是什么东西,都能变成一样的东西,就可以进行通用的格式传输或保存,传输结束以后,要再次使用,就进行反序列化还原,这样对象还是对象,文件还是文件

3、为什么在重写了equals()方法之后也必须重写hashCode()方法?(10)

首先equals与hashcode间的关系是这样的:
1、如果两个对象相同(即用equals比较返回true),那么它们的hashCode值一定要相同;
2、如果两个对象的hashCode相同,它们并不一定相同(即用equals比较返回false)
(数据量大的时候) 由于为了提高程序的效率才实现了hashcode方法,先进行hashcode的比较,如果不同,那没就不必在进行equals的比较了,这样就大大减少了equals比较的

4、sleep()和wait()有什么区别?(10)

sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。
wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

5、编程题:用最有效率的方法算出2乘以17等于多少?(5)

2<<4+2

6、JAVA是不是没有内存泄漏问题?看下面的代码片段,并指出这些代码隐藏的问题。(10)

Object[] elements = new Object[10];
int size;

public Object pop() {
if (size == 0)
return null;
Object o = elements[–size];
return o;
}

当elements[size]=null时,会存在内存泄漏

7、请阐述一下你对JAVA多线程中“锁”的概念的理解。(10)

当有多个线程共用一种临界资源的时候,便会出现冲突,锁就是用来解决这种冲突的,比如:当我们上厕所的时候,有几个人都想上厕所,但厕所只有一个,我们必须保证,每次只有一个人上厕所,这时候一个人进入厕所后将门锁住,就可以保证当前厕所只被一个人使用了,只有当这个人上完厕所出来后,下一个人才可以继续使用厕所,这就避免了争抢厕所的冲突,这和线程们争抢CPU是一样的道理。

8、所有的递归实现都可以用循环的方式实现,请描述一下这两种实现方式各自的优劣。并举例说明在什么情况下可以使用递归,而在什么情况下只能使用循环而不能使用递归,?(5)

当使用堆和栈时,内存足够的情况下就可以使用递归
当使用队列时,就只能使用循环不能使用递归

9、请简要讲一下你对测试驱动开发(TDD)的认识。(10)

先编写单元测试代码

10、请阐述一下你对“面向接口编程”的理解。(10)

接口从更深层次的理解,应是定义(规范,约束)与实现(名实分离的原则)的分离。
 我们在一般实现一个系统的时候,通常是将定义与实现合为一体,不加分离的,我认为最为人理解的系统设计规范应是所有的定义与实现分离,尽管这可能对系统中的某些情况有点繁烦。
 接口的本身反映了系统设计人员对系统的抽象理解。
 接口应有两类:第一类是对一个体的抽象,它可对应为一个抽象体(abstract class);
第二类是对一个体某一方面的抽象,即形成一个抽象面(interface);
 一个体有可能有多个抽象面。
 抽象体与抽象面是有区别的。

11、在J2EE中有一个“容器(Container)”的概念,不管是EJB、PICO还是Spring都有他们各自实现的容器,受容器管理的组件会具有有生命周期的特性,请问,为什么需要容器?它的好处在哪里?它会带来什么样的问题?(15)

容器可以管理对象的生命周期、对象与对象之间的依赖关系,可以使用一个配置文件(通常是XML),在上面定义好对象的名称、如何产生(Prototype 方式或Singleton 方式)、哪个对象产生之后必须设定成为某个对象的属性等,在启动容器之后,所有的对象都可以直接取用,不用编写任何一行程序代码来产生对象,或是建立对象与对象之间的依赖关系。
好处:长度可扩充;数据类型可以不相同
例如:服务器是Javaweb程序运行的环境如:tomcat ,只有在服务器下的Javaweb程序才能正常启动并被外部访问
问题:不能通过下标的方式来访问容器中的元素

12、请阐述一下你对IOC(Inversion of Control)的理解。(可以以PICO和Spring的IOC作为例子说明他们在实现上各自的特点)(10)

一个类需要用到某个接口的方法,我们需要将类A和接口B的实现关联起来,最简单的方法是类A中创建一个对于接口B的实现C的实例,但这种方法显然两者的依赖(Dependency)太大了.而IoC的方法是只在类A中定义好用于关联接口B的实现的方法,将类A,接口B和接口B的实现C放入IoC的 容器(Container)中,通过一定的配置由容器(Container)来实现类A与接口B的实现C的关联.
http://jinnianshilongnian.iteye.com/blog/1413846

13、下面的代码在绝大部分时间内都运行得很正常,请问在什么情况下会出现问题?问题的根源在哪里?(10)
import java.util.LinkedList;
public class Stack {
LinkedList list = new LinkedList();
public synchronized void push(Object x) {
synchronized(list) {
list.addLast( x );
notify();
}
}
public synchronized Object pop()
throws Exception {
synchronized(list) {
if( list.size() <= 0 ) {
wait();
}
return list.removeLast();
}
}
}

死锁,锁是list,push()等待pop()的锁,而pop()在等待push()的锁,这就会造成死锁现象的出现。


请关注“知了堂学习社区”,地址:http://www.zhiliaotang.com/portal.php

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值