目录
1、知识点部分
知识点主要分为:java基础知识、多线程、spring、数据库、计算机网络、JVM和手撕代码7大部分。
1.1 java基础知识
String、StringBuilder、StringBuffer的区别
Java核心数据结构(List、Map、Set)
List
ArrayList、LinkedList、vector、CopyOnWriteArrayList的区别
CopyOnWriteArrayList的原理
Map
Map的实现
hashmap、Hashtable、LinkedHashMap、TreeMap、ConcurrentHashMap的区别及实现原理
Hashmap的原理、底层、扩容机制
Hashtable的原理、底层、扩容机制
ConcurrentHashMap的原理、底层(重点)
Set
Set的实现
HashSet、LinkedHashSet、TreeHashSet的区别及原理
零散的知识点
封装、继承、多态(面向对象编程的三大特性)
重载和重写的区别
final、finally、finalize
Static关键字
i++与++i
equals()与"=="的区别?
重写equals()方法为什么要同时重写hashcode()方法
this和super的区别
自动装箱与自动拆箱
异常
Java中throw和throws的区别
1.2 多线程
进程与线程的区别
多线程的实现(Thread、Runnable、callabe+futuretask、线程池四种方法的区别、实现原理、适用场景)
线程的启动(start()和run()的区别)
线程传递参数(1.向run()方法进行传参;2.获取子线程的返回值)
Runnable与callable的区别
线程状态(新建、执行、无限等待、限期等待、阻塞、终止6种状态变换过程)
sleep()和wait()的区别
Notify()和NotifyAll()
Yield ()
线程的停止
线程之间的转换
线程不安全的原因
Synchronized关键字
Synchronized和ReentrantLock的对比、区别、适用场景
锁的种类:公平锁与非公平锁、乐观锁与悲观锁、独享锁与共享锁、可重入锁、分段锁、锁的状态(无锁、偏向锁、轻量级锁、重量级锁、自旋锁、适应自旋锁)相关的知识点和对比。
CAS(Compare and Swap )原理
AQS(AbstractQueuedSynchronized)原理
死锁含义、成立条件
如何有效避免死锁
银行家算法
Volatile关键字
线程之间的通信
Java线程池
为什么使用线程池
线程池的创建、核心参数
线程池的种类
线程池任务执行方法(submit() 、execute()两种的区别)
线程池关闭
线程池常用等待队列
1.3 spring
Spring概述
AOP
AOP的实际例子
AOP的***模式
IOC
DI(依赖注入)
Bean的Scope作用域
Bean的生命周期
Spring的事务
Spring事务隔离级别
SpringMVC
Spring的过程
1.4 数据库
范式(最好记住几个例子)
索引(索引的含义、优缺点)
索引的数据结构(底层)
索引为什么使用B+树不用B树
索引的分类
聚簇索引与非聚簇索引
建立索引的考虑因素
使用索引的注意事项
事务(ACID)
多事务并发会造成的问题(脏读、不可重复读、幻读)
事务隔离性
读锁与写锁
高并发控制数据库
Mysql的工具分析
MyBatis一级缓存
MyBatis二级缓存
Mybatis中的#和$的区别
高并发数据库设计(百万级数据库设计)
数据库优化
主从复制
Mysql数据引擎的选用
数据库连接池
1.5 计算机网络
OSI七层模型、五层模型、TCP/IP四层模型
三次握手(为什么不是两次、为什么不是四次)
四次挥手(为什么是四次挥手不是三次)
保活计时器
确认应答机制(ACK)
滑动窗口
超时重传机制(去重机制、快重传)
流量控制
拥塞控制(慢启动、拥塞窗口)
TCP可靠性保证的机制
TCP与UDP的区别
Post与get区别
http与https
http常见返回码
http请求的过程
怎么防止http请求的攻击
对称加密与非对称加密
Cookie和session 的区别
1.7JVM
JVM的组成(类加载器、运行数据区、解释器、本地接口各自的含义与作用)
java程序在JVM中的执行过程
类加载的时机
类加载器的种类(Bootstrap 、Extension 、App 、自定义四个类加载器的工作责任)
类加载器的工作过程(双亲委派机制)
类加载的详细过程(加载-连接-初始化-使用-卸载 五个步骤的含义)
JVM内存模型(程序计数器、堆、虚拟机栈、本地方法栈、方法区)
GC(垃圾回收机制)
判断对象存活的方法(引用计数法和可达性分析的区别)
可达性分析中可以作为GC Roots的对象
垃圾回收算法(标记/清除算法、复制算法、标记/整理算法的区别以及适用环境)
GC时间
什么情况下回出现内存溢出,内存泄漏?
GC回收器
1.8 手撕代码
在面试过程中,肯定是逃不过手撕代码这个环节的。我在面试中遇到的手撕代码如下:
线程安全的单例模式(多种写法)
快排(三种,其中美团考了一个单链表的快排)
二叉树的前中后序遍历(递归和非递归)
多个线程的交替打印
两个栈实现队列
链表反转
二分查找
逆波兰表达式
斐波那契数列(青蛙跳台阶):递归和非递归两种方法
下面给出一些经常访问的知识点网址:
树的讲解:https://www.jianshu.com/p/912357993486
程序员必知的八大排序:https://www.cnblogs.com/crazylqy/p/7640829.html
java中的IO:https://www.cnblogs.com/ylspace/p/8128112.html
JVM面试知识点:https://www.cnblogs.com/lfs2640666960/p/9297176.html
JVM内存模型理解:https://www.jianshu.com/p/76959115d486
JAVA面试大纲:https://www.jianshu.com/p/a07d1d4004b0
java多线程学习:https://cloud.tencent.com/developer/article/1344265
Spring常见面试题:https://blog.csdn.net/a745233700/article/details/80959716
各大公司java面试题总结:https://www.cnblogs.com/itcx1213/p/10963809.html
2019java面试题:https://www.cnblogs.com/marsitman/p/9539369.html
剑指offer:https://www.nowcoder.com/ta/coding-interviews
leetcode100题:https://leetcode-cn.com/problemset/hot-100/
常见算法面试题:https://blog.csdn.net/qiaoer2017/article/details/82715028
计算机网络面试题总结:https://blog.csdn.net/qq_39322743/article/details/79700863