没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
1、 多线程有几种实现方法?同步有几种实现方法?
多线程有两种实现方法,分别是继承Thread 类与实现Runnable 接口。同步的实现方面有两
种,分别是synchronized,wait 与notify 。
a. wait():使一个线程处于等待状态,并且释放所持有的对象的lock。
b. sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉
InterruptedException 异常。
c. notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的
唤醒某一个等待状态的线程,而是由JVM 确定唤醒哪个线程,而且不是按优先级。
d. allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,
而是让它们竞争。
2、 JDBC 中的 PreparedStatement 相比 Statement 的好处?
预编译语句java.sql.PreparedStatement ,扩展自Statement,不但具有Statement的所有能
力而且具有更强大的功能。不同的是,PreparedStatement 是在创建语句对象的同时给出要
执行的sql 语句。这样,sql 语句就会被系统进行预编译,执行的速度会有所增加,
尤其是在执行大语句的时候,效果更加理想
3、 Java 中实现多态的机制是什么?
重写,重载
方法的重写Overriding 和重载Overloading 是Java 多态性的不同表现。重写Overriding 是
父类与子类之间多态性的一种表现,重载Overloading 是一个类中多态性的一种表现。如果
在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。子
类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”
了。果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,
则称为方法的重载(Overloading)。Overloaded 的方法是可以改变返回值的类型。
4、 说出 ArrayList,Vector, LinkedList 的存储性能和特性
ArrayList 和 Vector 都是使用数组方式存储数据,此数组元素数大于实际存储的数
据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及
数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector 由于使用了
synchronized 方法(线程安全),通常性能上较 ArrayList 差,而 LinkedList 使用双
向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只
需要记录本项的前后项即可,所以插入速度较快。
5、 Collection 和 Collections 的区别。
Collection 是集合类的上级接口,继承与他的接口主要有 Set 和 List。Collections
是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排
序、线程安全化等操作。
6、 HashMap 和 Hashtable 的区别。
HashMap 是 Hashtable 的轻量级实现(非线程安全的实现),他们都完成了 Map
接口,主要区别在于 HashMap 允许空(null)键值(key),由于非线程安全,效
率上可能高于 Hashtable。
HashMap 允许将 null 作为一个 entry 的 key 或者 value,而 Hashtable 不允许。
HashMap 把 Hashtable 的 contains 方法去掉了,改成 containsvalue 和 containsKey。
因为 contains 方法容易让人引起误解。 Hashtable 继承自 Dictionary 类,而
HashMap 是 Java1.2 引进的 Map interface 的一个实现。
最大的不同是,Hashtable 的方法是 Synchronize 的,而 HashMap 不是,在多个线
程访问 Hashtable 时,不需要自己为它的方法实现同步,而 HashMap 就必须为
之提供外同步。 Hashtable 和 HashMap 采用的 hash/rehash 算法都大概一样,所
以性能不会有很大的差异。
7、 线程的基本概念、线程的基本状态以及状态之间的关系
一个程序中可以有多条执行线索同时执行,一个线程就是程序中的一条执行线索,每个线程
上都关联有要执行的代码,即可以有多段程序代码同时运行,每个程序至少都有一个线程,
即main 方法执行的那个线程。如果只是一个cpu,它怎么能够同时执行多段程序呢?这是
从宏观上来看的,cpu 一会执行a 线索,一会执行b 线索,切换时间很快,给人的感觉是
a,b 在同时执行,好比大家在同一个办公室上网,只有一条链接到外部网线,其实,这条网
线一会为a 传数据,一会为b 传数据,由于切换时间很短暂,所以,大家感觉都在同时上
网。状态:就绪,运行,synchronize 阻塞,wait 和sleep 挂起,结束。wait 必须在
synchronized内部调用。调用线程的start 方法后线程进入就绪状态,线程调度系统将就绪
状态的线程转为运行状态,遇到synchronized 语句时,由运行状态转为阻塞,当
synchronized 获得锁后,由阻塞转为运行,在这种情况可以调用wait 方法转为挂起状态,
当线程关联的代码执行完后,线程变为结束状态。
8、 abstract class 和 interface 有什么区别?
声明方法的存在而不去实现它的类叫抽象类。不能创建抽象类的实例;然而可以
创建安一个变量,其类型是一个抽象类,并让他指向具体子类的一个实例。不能
有抽象构造函数或抽象静态方法。
接口是抽象类的变体,接口中所有方法都是抽象的。多继承性可通过实现这样的
接口而获得。接口只可以定义 static final 成员变量
9、 String、StringBuffer、StringBuilder 的区别
String 是不可变的对象,每次对 String 类型进行改变的时候其实是产生了一个新
的 String 对象,然后指针指向新的 String 对象;
StringBuffer 是线程安全的可变字符序列,需要同步,则使用。
StringBuilder 线程不安全,速度更快,单线程使用。
(String 是一个类,但却是不可变的,所以 String 创建的算是一个字符串常量,
StringBuffer 和 StringBuilder 都是可变的。所以每次修改 String 对象的值都是新建
一个对象再指向这个对象。而使用 StringBuffer 则是对 StringBuffer 对象本身进行
操作。所以在字符串 j 经常改变的情况下,使用 StringBuffer 要快得多。)
10、 常见的 runtime exception 有哪些
ClassCastExcetion,NullPointerException,NumberFormatException,
OutOfMemoryException,ArrayIndexOfBoundsException,ArithmeticException,
ArrayStoreException, BufferOverflowException, BufferUnderflowException,
CannotRedoException, CannotUndoException, ClassCastException,
CMMException, ConcurrentModificationException, DOMException,
EmptyStackException, IllegalArgumentException,
IllegalMonitorStateException, IllegalPathStateException,
IllegalStateException, ImagingOpException, IndexOutOfBoundsException,
MissingResourceException, NegativeArraySizeException,
NoSuchElementException, NullPointerException, ProfileDataException,
ProviderException, RasterFormatException, SecurityException,
SystemException, UndeclaredThrowableException,
UnmodifiableSetException, UnsupportedOperationException
非运行时异常:IO异常、SQL异常、NoSuchMethod异常
11、 heap 和 stack 有什么区别
栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出
的方式进行处理。堆是栈的一个组成元素
12、 同步和异步有何异同,在什么情况下分别使用他们?举例说明。【基础】
答:如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读
到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数
据,必须进行同步存取。当应用程序在对象上调用了一个需要花费很长时间来执
行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多
情况下采用异步途径往往更有效率。
13、 java 中有几种方法可以实现一个线程?用什么关键字修饰
同步方法?stop()和 suspend()方法为何不推荐使用?【中等难
度】
答:有两种实现方法,分别是继承 Thread 类与实现 Runnable 接口;用
synchronized 关键字修饰同步方法;反对使用 stop(),是因为它不安全。它会
解除由线程获取的所有锁定,而且如果对象处于一种不连贯状态,那么其他线程
能在那种状态下检查和修改它们。结果很难检查出真正的问题所在;suspend()
方法容易发生死锁。调用 suspend()的时候,目标线程会停下来,但却仍然持有
在这之前获得的锁定。此时,其他任何线程都不能访问锁定的资源,除非被“挂
起”的线程恢复运行。对任何线程来说,如果它们想恢复目标线程,同时又试图
使用任何一个锁定的资源,就会造成死锁。故不应该使用 suspend(),而应在自
己的 Thread 类中置入一个标志,指出线程应该活动还是挂起。若标志指出线程
应该挂起,便用 wait()命其进入等待状态。若标志指出线程应当恢复,则用一
个 notify()重新启动线程。
14、说说你所熟悉或听说过的 j2ee 中的几种常用模式?及对设
计模式的一些看法。【中等难度】
答:Session Facade Pattern:使用 SessionBean 访问 EntityBean;
Message Facade Pattern:实现异步调用;
EJB Command Pattern:使用 Command JavaBeans 取代 SessionBean,实现
轻量级访问;
Data Transfer Object Factory:通过 DTO Factory 简化 EntityBean 数据
提供特性;
剩余21页未读,继续阅读
资源评论
deepboat
- 粉丝: 163
- 资源: 517
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功