# 《大厂面试指北》
最佳阅读地址:http://notfound9.github.io/interviewGuide/
Github项目主页:https://github.com/NotFound9/interviewGuide
作者博客地址:https://juejin.im/user/5b370a42e51d4558ce5eb969
## 为什么要做这个开源项目?
之前在业余时间阅读技术书籍时,发现只阅读而不产出,这样收效甚微。所以就在网上找了很多常见的技术问题,根据自己的技术积累,查阅书籍,阅读文档和博客等资料,尝试着用自己的话去写了很多原创解答,最终整理开源到Github。一方面是便于自己复习巩固,一方面是将这些自己写的解答开源出来分享给大家,希望可以帮助到大家,也欢迎大家一起来完善这个项目,为开源做贡献。
<figure class="half">
<img src="http://notfound9.github.io/interviewGuide/static/image1.jpg" width="30%"/>
## 目录
- [首页](README.md)
* Java
- [基础](docs/JavaBasic.md)
- [1.Java中的多态是什么?](docs/JavaBasic.md#Java中的多态是什么?)
- [2.Java中变量,代码块,构造器之间执行顺序是怎么样的?](docs/JavaBasic.md#java中变量,代码块,构造器之间执行顺序是怎么样的?)
- [3.final关键字有哪些作用?](docs/JavaBasic.md#final关键字有哪些作用?)
- [4.Integer类会进行缓存吗?](docs/JavaBasic.md#Integer类会进行缓存吗?)
- [5.抽象类有哪些特点?](docs/JavaBasic.md#抽象类有哪些特点?)
- [6.String,StringBuffer和StringBuilder之间的区别是什么?](docs/JavaBasic.md#String,StringBuffer和StringBuilder之间的区别是什么?)
- [7.编译型编程语言,解释型编程语言,伪编译型语言的区别是什么?](docs/JavaBasic.md#编译型编程语言,解释型编程语言,伪编译型语言的区别是什么?)
- [8.Java中的访问控制符有哪些?](docs/JavaBasic.md#Java中的访问控制符有哪些?)
- [9.Java的构造器有哪些特点?](docs/JavaBasic.md#Java的构造器有哪些特点?)
- [10.Java中的内部类是怎么样的?](docs/JavaBasic.md#Java中的内部类是怎么样的?)
- [11.Java中的注解是什么?](docs/JavaBasic.md#Java中的注解是什么?)
- [12.为什么hashCode()和equal()方法要一起重写?](docs/JavaBasic.md#为什么hashCode()和equal()方法要一起重写?)
- [13.Java中有哪些数据类型?](docs/JavaBasic.md#Java中有哪些数据类型?)
- [14.包装类型和基本类型的区别是什么?](docs/JavaBasic.md#包装类型和基本类型的区别是什么?)
* 容器
- [ArrayList和LinkedList](docs/ArrayList.md)
- [1.ArrayList与LinkedList的区别是什么?](docs/ArrayList.md#ArrayList与LinkedList的区别是什么?)
- [2.怎么使ArrayList,LinkedList变成线程安全的呢?](docs/ArrayList.md#怎么使ArrayList,LinkedList变成线程安全的呢?)
- [3.ArrayList遍历时删除元素有哪些方法?](docs/ArrayList.md#ArrayList遍历时删除元素有哪些方法?)
- [4.ConcurrentModificationException是什么?](docs/ArrayList.md#ConcurrentModificationException是什么?)
- [5.java容器类的层次是怎么样的?](docs/ArrayList.md#java容器类的层次是怎么样的?)
- [HashMap和ConcurrentHashMap](docs/HashMap.md)
- [1.HashMap添加一个键值对的过程是怎么样的?](docs/HashMap.md#HashMap添加一个键值对的过程是怎么样的?)
- [2.ConcurrentHashMap添加一个键值对的过程是怎么样的?](docs/HashMap.md#ConcurrentHashMap添加一个键值对的过程是怎么样的?)
- [3.HashMap与HashTable,ConcurrentHashMap的区别是什么?](docs/HashMap.md#HashMap与HashTable,ConcurrentHashMap的区别是什么?)
- [4.HashMap扩容后是否需要rehash?](docs/HashMap.md#HashMap扩容后是否需要rehash?)
- [5.HashMap扩容是怎样扩容的,为什么都是2的N次幂的大小?](docs/HashMap.md#HashMap扩容是怎样扩容的,为什么都是2的N次幂的大小?)
- [6.ConcurrentHashMap是怎么记录元素个数size的?](docs/HashMap.md#ConcurrentHashMap是怎么记录元素个数size的?)
- [7.为什么ConcurrentHashMap,HashTable不支持key,value为null?](docs/HashMap.md#为什么ConcurrentHashMap,HashTable不支持key,value为null?)
- [8.HashSet和HashMap的区别?](docs/HashMap.md#HashSet和HashMap的区别?)
- [9.HashMap遍历时删除元素的有哪些实现方法?](docs/HashMap.md#HashMap遍历时删除元素的有哪些实现方法?)
- [多线程](docs/JavaMultiThread.md)
- [1.进程与线程的区别是什么?](docs/JavaMultiThread.md#进程与线程的区别是什么?)
- [2.进程间如何通信?](docs/JavaMultiThread.md#进程间如何通信?)
- [3.Java中单例有哪些写法?](docs/JavaMultiThread.md#Java中单例有哪些写法?)
- [4.Java中创建线程有哪些方式?](docs/JavaMultiThread.md#Java中创建线程有哪些方式?)
- [5.如何解决序列化时可以创建出单例对象的问题?](docs/JavaMultiThread.md#如何解决序列化时可以创建出单例对象的问题?)
- [6.volatile关键字有什么用?怎么理解可见性,一般什么场景去用可见性?](docs/JavaMultiThread.md#volatile关键字有什么用?怎么理解可见性,一般什么场景去用可见性?)
- [7.Java中线程的状态是怎么样的?](docs/JavaMultiThread.md#Java中线程的状态是怎么样的?)
- [8.wait(),join(),sleep()方法有什么作用?](docs/JavaMultiThread.md#wait(),join(),sleep()方法有什么作用?)
- [9.Thread.sleep(),Object.wait(),LockSupport.park()有什么区别?](docs/JavaMultiThread.md#Thread.sleep(),Object.wait(),LockSupport.park()有什么区别?)
- [10.谈一谈你对线程中断的理解?](docs/JavaMultiThread.md#谈一谈你对线程中断的理解?)
- [11.线程间怎么通信?](docs/JavaMultiThread.md#线程间怎么通信?)
- [12.怎么实现实现一个生产者消费者?](docs/JavaMultiThread.md#怎么实现实现一个生产者消费者?)
- [13.谈一谈你对线程池的理解?](docs/JavaMultiThread.md#谈一谈你对线程池的理解?)
- [14.线程池有哪些状态?](docs/JavaMultiThread.md#线程池有哪些状态?)
- [锁相关](docs/Lock.md)
- [1.sychronize的实现原理是怎么样的?](docs/Lock.md#sychronize的实现原理是怎么样的?)
- [2.AbstractQueuedSynchronizer(缩写为AQS)是什么?](docs/Lock.md#AbstractQueuedSynchronizer(缩写为AQS)是什么?)
- [3.悲观锁和乐观锁是什么?](docs/Lock.md#悲观锁和乐观锁是什么?)
* Redis
- [基础](docs/RedisBasic.md)
- [1.Redis是什么?](docs/RedisBasic.md#Redis是什么?)
- [2.Redis过期key是怎么样清理的?](docs/RedisBasic.md#Redis过期key是怎么样清理的?)
- [3.Redis为什么是单线程的?](docs/RedisBasic.md#Redis为什么是单线程的?)
- [4.Redis的性能为什么这么高?](docs/RedisBasic.md#Redis的性能为什么这么高?)
- [5.Linux中IO模型一共有哪些?](docs/RedisBasic.md#Linux中IO模型一共有哪些?)
- [6.同步与异步的区别是什么?](docs/RedisBasic.md#同步与异步的区别是什么?)
- [7.阻塞与非阻塞的区别是什么?](docs/RedisBasic.md#阻塞与非阻塞的区别是什么?)
- [8.如何解决Redis缓存穿透问题?](docs/RedisBasic.md#如何解决Redis缓存穿透问题?)
- [9.如何解决Redis缓存击穿问题?](docs/RedisBasic.md#如何解决Redis缓存击穿问题?)
- [10.如何解决Redis缓存雪崩问题?](docs/RedisBasic.md#如何解决Redis缓存雪崩问题?)
- [11.如何解决缓存与数据库的数据一致性问题?](docs/RedisBasic.md#如何解决缓存与数据库的数据一致性问题?)
- [数据结构](docs/Re