面试题
1.实现多线程的几种方式
继承Thread
实现Runnable接口
线程池
匿名内部类
Callable(带返回值的多线程)
2.什么是线程安全(出现线程安全性问题的条件)
多线程环境下
存在共享资源
对资源非原子性操作
3.Java中有几种锁
可重入锁
自旋锁
偏向锁
轻量级锁
重量级锁
共享锁
独占锁
公平锁
非公平锁
读写锁
4.Reentrantlock怎么实现可重入
计数器累加,重入一次加一,为0释放
5.什么时候用Lock,什么时候用Synchronized
Reentrantlock 功能1->>可以设置是公平锁还是非公平锁
2->>可以分组唤醒线程
3->>可以中断等待锁的线程
(这里原答案说lock降低锁的粒度,我觉得吧,0_0)
6.Reentrantlock原理
编译器级别的锁,类似于自己实现的那个可重入锁(见另一随笔),不过更厉害很多
依赖于AQS,同步阻塞对列,具体实现看http://blog.csdn.net/zhousenshan/article/details/53026785
7.CAS底层实现
compareandset,先那估计值和原值比较,一样就set,不一样就不set,好像有依赖于native方法,这里有点忘了,//TODO
8.红黑树,b树,b+-树
就懂一点点原理,这里就不献丑了,面试也不会那么难,注意结合具体实现说,比如currenthashmap,sql啥的
9.NIO,BIO,AIO
nio就是非阻塞的流,内容炒鸡多,百度,然后,背。
10.事务隔离
这里就扯CIAD,然后讲隔离性,四种隔离级别,mysql默认级别Repeatable read,Oracle默认Read committed
11.事务底层实现
这里我就知道JDBC设置回滚点,自动回滚和手动回滚
12.分布式
了解的不多,就知道RockerMQ,zookeeper,redis,dubbo,ngnix,mongodb等单词的拼写。
13.HashMap,HashTable,ConcurrentHashMap
hashmap线程不安全
hashtable就是全加了synchronized的hashmap
concurrenthahmp是juc包下的,效率比hashtable高,因为hashtable锁全map,concurrenthashmap只锁一个node(1.8以前是segment),
(这里要说,concurrenthashmap在JDK1.7求size时锁整个表,1.8后每次put都会维护一个size值,但在并发下不精确)
具体百度为什么JDK1.8的concurrenthashmap比JDK1.7效率高。
14.spring aop ioc
spring是由反射和代理组成的,aop就是一种代理,ioc就是反射
15.TCP原理,三次握手,四次挥手,都不能少
16.类加载机制,双亲委派机制
17.session,cookie都是啥,干嘛的
18.http1.0.1.1,2.0,和https区别
19.重载和重写的原理
虚方法,静态分派
20.多态原理:动态绑定
21.常见的几种设计模式
单例:懒汉,饿汉,双重检验,枚举
工厂
代理:JDK提供的动态代理,cglib代理,spring实现的代理
生产者消费者模式(算设计模式吗???我觉得还ok)
22.面向对象的特征
封装,继承,多态
23.接口,抽象类
接口更像一种约束,规定,抽象类面向具体实现,封装一些公有方法
24.Comparable和Comparator区别
前者简单但是需要修改源代码
25.fail-fast机制
26.synchronized底层实现
monitorenter,monitorexit两种字节码
27.volatile
内存可见性
禁止指令重排序
28.ThreadLocal
29.maven原理(这里应该不会问吧,我就写写)
30.分布式CAP
31.乐观锁,悲观锁
32.线程间通信的三种方式
(我只知道设置signal)
33.为什么匿名内部类的变量用final
34.。。。。。。未完