首页 > 技术文章 > java面试题(摘录)

lakeslove 原文

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()不会释放同步监视器

 

 

 

 

 

 

 

 

 

 

推荐阅读