- 相关推荐
java面试官常问的问题
http://cankao.gcw818.com中多线程同步是什么?
在多线程程序下,同步能控制对共享资源的访问。如果没有同步,当一个 Java 线程在修改一个共享变量时,另外一个线程正在使用或者更新同一个变量,这样容易导致程序出现错误的结果。
2.Sleep ()、suspend ()和 wait ()之间有什么区别?
http://cankao.gcw818.com()使当前线程在指定的时间处于“非运行”(Not Runnable)状态。线程一直持有对象的监视器。比如一个线程当前在一个同步块或同步方法中,其它线程不能进入该块或方法中。如果另一线程调用了 interrupt ()方法,它将唤醒那个“睡眠的”线程。
注意:sleep ()是一个静态方法。这意味着只对当前线程有效,一个常见的错误是调用http://cankao.gcw818.com(),(这里的t是一个不同于当前线程的线程)。即便是执行http://cankao.gcw818.com(),也是当前线程进入睡眠,而不是t线程。http://cankao.gcw818.com()是过时的方法,使用 suspend ()导致线程进入停滞状态,该线程会一直持有对象的监视器,suspend ()容易引起死锁问题。
http://cankao.gcw818.com()使当前线程出于“不可运行”状态,和 sleep ()不同的是 wait 是 object 的方法而不是 thread。
Sleep() s调用 http://cankao.gcw818.com()时,线程先要获取这个对象的对象锁,当前线程必须在锁对象保持同步,把当前线程添加到等待队列中,随后另一线程可以同步同一个对象锁来调用 http://cankao.gcw818.com(),这样将唤醒原来等待中的线程,然后释放该锁。基本上 wait ()/notify ()与 sleep ()/interrupt ()类似,只是前者需要获取对象锁。
3. Java三大特性:多态 、继承和封装
http://cankao.gcw818.com和 == 的区别?
参考《Head First Java》
使用==来比较两个primitive主数据类型,或者判断两个引用是否引用同一个对象。
使用equals()来判断两个对象是否在意义上相等。(像是两个String对象是否带有相同的字节组合)
==: 如果涉及的是比较基本数据类型的话,==用来比较基本数据类型的值的大小(也就是其中的字节组合)
例:
inta = 3;byteb = 3;if (a== b) {//返回的是true}
如果涉及的是引用,那么==用来判断引用的是否是同一个对象:
例:
Car a =newCar();Car b=newCar();Car c = a;if (a== b) {//返回false}if (a == c) {//返回true}if (b == c) {//返回false}
5.代码块各自的锁
6.父类与子类里的构造方法
http://cankao.gcw818.com,map,list的区别与用法
8.同步在不同位置加同步标记(synchronized)有什么区别? 同步标记加到静态方法(静态方法同步)
9.设计模式,懒汉模式,工厂模式
10.堆和栈的比较
http://cankao.gcw818.com
11. arraylist 用数组来实现一个
1http://cankao.gcw818.com和linklist有什么区别
arraylist:
呈线性链状,结构类似数组。
如果只是修改删除头或者尾部的元素的话,使用arraylist比较好
linklist:
如果想要在链表中插入元素,使用linklist最合适。
13.for和foreach的区别
for:
for each:
14. 进程和线程的区别
15.线程和线程非安全的概念
16.volatile int a = 0; 内存同步
17.ArrayList,HashMap等集合框架类,重要基础类String的处理。HashMap的底层存储结构等。顺带考察:对接口,继承,重载重写的基本理解;以及异常处理的注意事项
18.多线程问题:
(1)线程安全问题。HashMap是否安全,为何不安全。ConcurrentHashMap,线程安全,为何安全。底层是如何实现的。
(2)http://cankao.gcw818.com下的常见类的使用,ThreadPool的深入考察;BlockingQueue的使用。(take,poll的区别,put,offer的区别);原子类的实现。
(3)各种常见锁的使用
(17,18均为某位大神罗列,我就偷个懒在这挪用一下,请见谅)
19.什么是死锁
死锁就是两个或两个以上的线程被无限的阻塞,线程之间相互等待所需资源。这种情况可能发生在当两个线程尝试获取其它资源的锁,而每个线程又陷入无限等待其它资源锁的释放,除非一个用户进程被终止。就 JavaAPI 而言,线程死锁可能发生在一下情况。
当两个线程相互调用 http://cankao.gcw818.com()
当两个线程使用嵌套的同步块,一个线程占用了另外一个线程必需的锁,互相等待时被阻塞就有可能出现死锁。
20.什么是线程饿死,什么是活锁?
http://cankao.gcw818.com是最基本的数据类型吗?
基本数据类型(primitive data type):
Byte(8bit),short(16bit),char(16bit),int(32bit),long(64bit),float(32bit),double(64bit),Boolean(true/false);
String 不是基本数据类型,http://cankao.gcw818.com类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类
http://cankao.gcw818.com和StringBuilder的区别?
StringBuffer和StringBuilder有相似的功能,但是StringBuffer是synchronized(同步)。 (The StringBuffer class is similar to StringBuffer except that methods for modifying buffer in StringBuffer are synchronized. Use StringBuffer if it may be accessed by multiple tasks http://cankao.gcw818.com