面试题

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.。。。。。。未完

 

posted @ 2018-02-05 00:25  Aiopr  阅读(119)  评论(0编辑  收藏  举报