java面试题(摘录)
1.抽象,继承,封装,多态
2.基本数据类型的字节数
byte:1、int:4、char:2、long:8、float:4、double:8、boolean:1 和short:2
3.String , StringBuffer,StringBuilder的区别
字符串较少拼接时,用String
字符串频繁拼接时,单线程环境下应该使用StringBuilder来保证较好的性能,当需要保证多线程安全时,就 应该使用StringBuffer
4.servlet的生命周期,与CGI的区别
实例化,init(),service方法,doget或doPost方法,调用destroy()销毁
servlet一个实例服务于多个请求,CGI一个请求开一个进程,服务完成就销毁
5.JSP中动态INCLUDE与静态INCLUDE的区别
6.round 方法返回与参数最接近的长整数,参数加1/2 后求其floor.
7.构造器Constructor是否可被override?
8.iterator
Iterator<String> it = books.iterator();
//这种形式遍历可以用it.remove()来删除元素,其他的方式都不可以,会引发异常.
while(it.hasNext()){
System.out.println(it.next());
}
9.集合安全
SortedSet<String> s = Collections.synchronizedSortedSet(new TreeSet<>());
10.Runnable 和 Thread 的区别
Runnable对象仅仅作为Thread对象的target,Runnable实现类里包含的run()方法仅作为线程执行体.而实际的线程对象依然是Thread实例,
只是该Thread线程负责执行其target的run()方法.
11.join()使用方法,先start(),再join();
public static void main(String[] args)throws Exception{
for (int i=0;i<100;i++){
if(i==20){
JoinThread jt = new JoinThread("join");
jt.start();
jt.join();
}
System.out.println(Thread.currentThread().getName()+"--- "+i);
}
}
12.后台线程
在后台运行,为其他线程提供服务,比如GCC,调用Thread的setDaemon(true)方法,可将其设置为后台线程。
如果一个进程的所有前台线程死亡,JVM会通知这个进程的后台线程令其死亡。
需要先调用setDaemon(true),再start(),否则会引发异常。
13.改变线程的优先级
Thread类提供了setPriority(int newPriority)和getPriority()来设置
和返回指定线程的优先级.10最大,1最小,正常为5
14.synchronized
synchronized的本质是对象锁,锁定方法时,默认锁定this,当一个对象被锁时,无法调用有相同对象锁的其他被锁代码块。
15.wait()和sleep()的区别
wait()会释放同步监视器,sleep()和yield()不会释放同步监视器