1、请问多个线程操作同一个资源时要考虑哪些,会带来哪些问题?
多个线程访问同一资源时一定要考虑到同步问题。过多的同步会带来死锁。
2、请解释sleep() 和 wait() 的区别
sleep()是Thread类定义的 static 方法,表示线程休眠,将执行机会给其他线程,但是监控状态依然保持,到时候会自动恢复;
wait()是 Object类定义的方法,表示线程等待,一直到执行了 notify() 或 notifyAll()后才结束等待。
3、一个类是否可以继承 String 类?
不能继承。String 类使用了 final 定义,所以不可以被其他类继承。
String类:
public final class String
extends Object
implements Serializable,Cpmparable<String>,CharSequence
4、请解释String 和 StringBuffer 的区别?
String的内容不可改变,而StringBuffer的内容可以改变。如果需要对字符串数据进行频繁修改,只能使用StringBuffer类。
5、什么叫gc()?Java是如何处理的?
GC(Garbage Collector):垃圾收集器,可以释放掉垃圾空间所占用的内存。在Java中GC有两种操作方式:一种是有JVM不定期的执行GC操作,另一种是由用户手动调用 Runtime 类的 gc()方法进行垃圾空间的释放。
6、请解释 final , finally , finalize 的区别?
final 表示终结器,用于定义不能被继承的父类,不能被覆写的方法、常量;
finally 是 异常处理的出口;
finalize() 是Object 类定义的一个方法,用于执行对象回收前的收尾操作。
7、请解释 Comparable 比较器和 Comparator 比较器的区别?
java.lang.Comparable 是在一个类定义时默认实现好的接口,里面只有一个compareTo()方法;
java.util.Comparator是需要单独定义一个比较的规则类,里面有两个方法:compare() 和 equals();
8、请解释Java序列化的作用以及实现
序列化操作的主要目的是为保证对象可以以二进制数据的方式进行传输,如果要想实现对象序列化,对象所在的类必须实现 java.io.Serializable 接口。默认情况下一个对象的所有属性都会被序列化下来,也可以使用 transient 关键字定义不被序列化的属性。
9、请解释 C/S 和 B/S 的区别?
C/S(Client / Server ) : 要开发两套程序,一套是服务器端,另一套是与之对应的客户端,但是这种程序在进行维护时需要维护两套程序,而且客户端的程序更新也必须及时。此类程序安全;
B/S(Browser / Server):要开发一条程序,只开发服务器端,客户端使用浏览器进行访问,这种程序进行程序维护时只需要维护服务器端即可,客户端不需要做任何修改。此类程序使用公共端口,包括公共协议,所以安全性很差。
10、请解释 ArrayList 和 Vector 的区别?
ArrayList 和 Vector 都是List 接口的子类,区别如下:
No. | 区别 | ArrayList | Vector |
---|---|---|---|
1 | 推出时间 | JDK 1.2 | JDK 1.0 |
2 | 性能 | 采取异步处理方式,性能更高 | 采取同步处理方式,性能相对较低 |
3 | 安全性 | 非线程安全 | 线程安全 |
4 | 输出 | Iterator , ListIterator , foreach | Iterator , ListIterator , foreach , Enumeration |
就实际开发而言,开发异步程序比较常见,所以首选的肯定是 ArrayList 子类。
11、请解释 HashMap 和 Hashtable 的区别?
HashMap 和 Hashtable 都属于 Map 接口的子类,这两个子类的区别如下:
No. | 区别 | HashMap | Hashtable |
---|---|---|---|
1 | 推出时间 | JDK 1.2 | JDK 1.0 |
2 | 性能 | 采用异步处理方式,性能更高 | 采用同步处理方式,性能相对较低 |
3 | 安全性 | 非线程安全 | 线程安全 |
4 | 设置 null | 允许将key 或 value 设置为null | 不允许出现 null, 否则出现空指向异常 |
12、集合转换?
现在在一个List 集合中保存了多个String 对象,要求将这个List 集合变成 Set 集合,而后再将这个Set 集合中的全部数据保存在 Map 集合的 value 里面,而 Map 集合的 key 使用 UUID 生成,最后将 Map 中的数据进行迭代输出。
相关说明:
(1)在 Collection 接口中存在一个增加一组集合的方法 : public boolean addAll(Collection<? extends E> c);
(2)UUID是一种算法,在Java中有指定的类,这个类可以根据时间戳生成一个几乎不会重复的字符串
package Practice;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
public class TestDemo {
public static void main(String[] args) throws Exception{
List<String> list = new ArrayList<String>();
list.add("Hello");
list.add("Hello");
list.add("World");
Set<String> set = new HashSet<String>();
set.addAll(list);
Map<UUID,String> map = new HashMap<UUID,String>();
Iterator<String> iter = set.iterator();
while(iter.hasNext()){
map.put(UUID.randomUUID(), iter.next());//数据保存到Map集合
}
Iterator<Map.Entry<UUID, String>> iterMap = map.entrySet().iterator();
while(iterMap.hasNext()){
Map.Entry<UUID, String> me = iterMap.next();
System.out.println( me.getKey() + "-->" + me.getValue());
}
}
}
13、请解释 Collection 和 Collections 的区别?
Collection 是一个接口,用于定义集合操作的标准;
Collections 是一个工具类,可以操作任意的集合对象;
14、请解释 Object 类中各个方法的作用
Object 类是所有类的父类,其类中定义的各个方法作用如下:
- 取得对象信息: public String toString();
- 对象比较:public boolean equals(Object obj);
- 取得对象编码:public int hashCode();
- 线程等待:public void wait() throws InterruptedException;
- 唤醒第一个等待线程:public void notify();
- 唤醒全部等待线程:public void notifyAll();
- 对象克隆:public Object clone();
- 对象回收前的收尾:public void finalize();
- 取得Class类对象:public Class<?> getClass()