前言
- 这里不断总结在面试中问到的一些问题,作为以后面试复习的资料.在此记录也是为了方便各位读者.
Java
1.设计模式和其UML类图:比较常用的
- 单例http://blog.csdn.net/qq_28690547/article/details/50479241
- Builderhttp://blog.csdn.net/qq_28690547/article/details/50493099
- 工厂方法http://blog.csdn.net/qq_28690547/article/details/50660376
- 原型http://blog.csdn.net/qq_28690547/article/details/50626237
- 策略http://blog.csdn.net/qq_28690547/article/details/50683310
- 状态http://blog.csdn.net/qq_28690547/article/details/50706448
- 观察者http://blog.csdn.net/qq_28690547/article/details/50661603
- 命令http://blog.csdn.net/qq_28690547/article/details/50708061
- 模板方法http://blog.csdn.net/qq_28690547/article/details/50708547
- 访问者http://blog.csdn.net/qq_28690547/article/details/50710061
- 代理http://blog.csdn.net/qq_28690547/article/details/50734045
- 中介者http://blog.csdn.net/qq_28690547/article/details/50710622
2.Volatile关键字:http://www.infoq.com/cn/articles/java-memory-model-4
对一个volatile变量的读,总是能看到(任意线程)对这个volatile变量最后的写入。
volatile变量的写-读可以实现线程之间的通信.
当写一个volatile变量时,JMM会把该线程对应的本地内存中的共享变量刷新到主内存。
当读一个volatile变量时,JMM会把该线程对应的本地内存置为无效。线程接下来将从主内存中读取共享变量。
下面对volatile写和volatile读的内存语义做个总结:
线程A写一个volatile变量,实质上是线程A向接下来将要读这个volatile变量的某个线程发出了(其对共享变量所在修改的)消息。
线程B读一个volatile变量,实质上是线程B接收了之前某个线程发出的(在写这个volatile变量之前对共享变量所做修改的)消息。
线程A写一个volatile变量,随后线程B读这个volatile变量,这个过程实质上是线程A通过主内存向线程B发送消息。
3.Thread的sleep(),wait(),yield()notify(),notifyAll()等方法:
sleep():使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁。也就是说如果有synchronized同步块,其他线程仍然不能访问共享数据。注意该方法要捕捉异常。
yield():该方法与sleep()类似,只是不能由用户指定暂停多长时间,并且yield()方法只能让同优先级的线程有执行的机会.
<