日常基础知识整理
Java
一、基础
6.String,StringBuffer和StringBuilder之间的区别是什么。
7.编译型编程语言,解释型编程语言,伪编译型语言的区别是什么。
12.为什么hashCode()和equal()方法要一起重写。
20.try、catch、finally都有return语句时执行哪个。
二、容器
ArrayList和LinkedList
1.ArrayList与LinkedList的区别是什么。
2.怎么使ArrayList,LinkedList变成线程安全的呢。
3.ArrayList遍历时删除元素有哪些方法。
4.ConcurrentModificationException是什么。
5.java容器类的层次是怎么样的。
HashMap和ConcurrentHashMap
1.HashMap添加一个键值对的过程是怎么样的。
2.ConcurrentHashMap添加一个键值对的过程是怎么样的。
3.HashMap与HashTable,ConcurrentHashMap,LinkedHashMap的区别是什么。
4.HashMap扩容后是否需要rehash。
5.HashMap扩容是怎样扩容的,为什么都是2的N次幂的大小。
6.ConcurrentHashMap是怎么记录元素个数size的。
7.为什么ConcurrentHashMap,HashTable不支持key,value为null。
8.HashSet和HashMap的区别。
9.HashMap遍历时删除元素的有哪些实现方法。
10.HashMap、LinkedHashMap、ConcurrentHashMap、ArrayList、LinkedList的底层实现是怎样的。
11.ArrayList、LinkedList、Vector的区别是什么。
12.HashMap,ConcurrentHashMap是线程安全的么,如果是安全的,怎么实现线程安全的。
三、多线程
1.进程与线程的区别是什么。
2.进程间如何通信。
3.Java中单例有哪些写法。
4.Java中创建线程有哪些方式(或者问创建线程的方式有哪3种)。
5.如何解决序列化时可以创建出单例对象的问题。
6.悲观锁和乐观锁是什么。
7.volatile关键字有什么用(介绍原理)。怎么理解可见性,一般什么场景去用可见性。
8.Java中线程的状态是怎么样的。
9.wait(),join(),sleep()方法有什么作用。
10.Thread.sleep(),Object.wait(),LockSupport.park()有什么区别。
11.谈一谈你对线程中断的理解。
12.线程间怎么通信。
13.怎么实现实现一个生产者消费者。
14.谈一谈你对线程池的理解。
15.线程池有哪些状态。
16.什么是线程安全的。
17.Runnable接口和Callable接口的区别。
18.谈一谈synchronized、Lock、ReentrantLock、ReadWriteLock。
19.介绍下CAS(无锁技术)。
20.什么是ThreadLocal。
21.创建线程池的4种方式。
22.ThreadPoolExecutor的内部工作原理。
23.分布式环境下,怎么保证线程安全。
24.静态变量、实例变量、局部变量是否线程安全。
四、锁相关
1.sychronize的实现原理是怎么样的。
2.AbstractQueuedSynchronizer(缩写为AQS)是什么。
设计模式
Redis
一、基础
1.Redis是什么。
2.Redis过期key是怎么样清理的。
3.Redis为什么是单线程的。
4.Redis的性能为什么这么高。
5.Linux中IO模型一共有哪些。
6.同步与异步的区别是什么。
7.阻塞与非阻塞的区别是什么。
8.如何解决Redis缓存穿透问题。
9.如何解决Redis缓存击穿问题。
10.如何解决Redis缓存雪崩问题。
11.如何解决缓存与数据库的数据一致性问题。
二、数据结构
1.Redis常见的数据结构有哪些。
2.谈一谈你对Redis中简单动态字符串的理解。
3.谈一谈你对Redis中hash对象的理解。
4.谈一谈你对Redis中List的理解。
5.谈一谈你对Redis中Set的理解。
6.谈一谈你对Redis中有序集合ZSet的理解。
7.布隆过滤器是什么。
三、持久化(AOF和RDB)
1.Redis的持久化是怎么实现的。
2.AOF和RDB的区别是什么。
3.怎么防止AOF文件越来越大。
4.Redis持久化策略该如何进行选择。
四、高可用(主从切换和哨兵机制)
1.Redis主从同步是怎么实现的。
2.Redis中哨兵是什么。
3.客户端是怎么接入哨兵系统的。
4.Redis哨兵系统是怎么实现自动故障转移的。
MySQL
1.一条MySQL更新语句的执行过程是什么样的。
2.脏页是什么。
3.Checkpoint是什么。
4.undo log,redo log,bin log是什么。
5.MySQL中的事务是什么。
6.MySQL的隔离级别是怎么样的。
7.MVCC的实现原理是怎么样的。
8.MySQL是怎么解决幻读的问题的。
9.MySQL中有哪些锁。
10.B树是什么。
11.B树与B+树的区别是什么。
12.索引是什么,有哪几种索引。
13.字符串索引和数字类型索引的区别。
14.union和union all的区别是什么。
15.Join的工作流程是怎么样的,怎么进行优化。
16.聚集索引是什么。
17.联合索引是什么。
18.覆盖索引是什么。
19.哪些情况不要建索引。
20.主键,唯一性索引,普通索引的区别是什么。
21.InnoDB和MyISAM的区别是什么。
22.什么是分库分表。
23.怎么实现跨库分页查询。
24.MySQL主从复制的工作流程是什么样的。
25.char类型与varchar类型的区别。
26.查询数量SELECT Count(*)怎么优化。
27.如何优化MySQL慢查询。
28.MySQL的join的实现是怎么样的。
29.慢查询优化实践
30.Explain包含哪些列,Explain的Type列有哪几种值。
JVM
1.Java内存区域怎么划分的。
2.Java中对象的创建过程是怎么样的。
3.Java对象的内存布局是怎么样的。
4.垃圾回收有哪些算法,各自的特点。
5.在垃圾回收机制中,对象在内存中的状态有哪几种。
6.对象的强引用,软引用,弱引用和虚引用的区别是什么。
7.垃圾回收算法有哪些。
8.Minor GC和Full GC是什么。
9.如何确定一个对象可以回收。
10.目前通常使用的是什么垃圾收集器。
11.双亲委派机制是什么。
12.怎么自定义一个类加载器,有哪些类加载器。
13.介绍下垃圾收集机制(在什么时候,对什么,做了什么)。
14.类加载的过程。
15.能不能自己写一个类叫java.lang.String。
框架相关
1.Hibernate和Mybatis的区别。
2.Spring MVC和Struts2的区别。
3.Spring用了哪些设计模式。
4.Spring中AOP主要用来做什么。
5.Spring注入bean的方式。
6.什么是IOC,什么是依赖注入。
7.Spring是单例还是多例,怎么修改。
8.Spring事务隔离级别和传播性。
9.介绍下Mybatis/Hibernate的缓存机制。
10.Mybatis的mapper文件中#和$的区别。
11.Mybatis的mapper文件中resultType和resultMap的区别。
12.Mybatis中DAO层接口没有写实现类,Mapper中的方法和DAO接口方法是怎么绑定到一起的,其内部是怎么实现的。
Kafka
ZooKeeper
HTTP
其他
1.分布式锁的实现。
2.分布式session存储解决方案。
3.常用的linux命令。
《剑指Offer》解题思考
大厂面试系列
【大厂面试01期】高并发场景下,如何保证缓存与数据库一致性。
【大厂面试02期】Redis过期key是怎么样清理的。
【大厂面试03期】MySQL是怎么解决幻读问题的。
【大厂面试04期】讲讲一条MySQL更新语句是怎么执行的。
【大厂面试05期】说一说你对MySQL中锁的理解。
【大厂面试06期】谈一谈你对Redis持久化的理解。
【大厂面试07期】说一说你对synchronized锁的理解。
【大厂面试08期】谈一谈你对HashMap的理解。
读书笔记
《Redis设计与实现》读书笔记 上
《Redis设计与实现》读书笔记 下
《MySQL必知必会》读书笔记
《深入理解Java虚拟机-第三版》读书笔记
参考原文链接:
1.https://github.com/NotFound9/interviewGuide
2.https://zhuanlan.zhihu.com/p/33988489
3.https://github.com/h2pl/Java-Tutorial
4.https://github.com/Snailclimb/JavaGuide