基础
-
面向对象三大特性:封装、继承、多态如何在Java中体现
-
String StringBuilder StringBuffer区别 ""+""实现过程
-
什么时候重写hashcode和equals方法
-
深拷贝浅拷贝
-
BIO、NIO、AIO原理及应用场景
Java的东西很多而且很深,上面说的只是一小部分,面试结束尤其推荐java是突击学来的同学再系统的学学,《Java核心技术》一共两卷,非常厚。
容器
-
List、Map、Set区别及使用场景
-
对比List、Map、Set的各种子类
-
HashMap原理 扩容缩容机制、存储结构、rehash实现方法等 一定要熟悉底层代码实现及算法原理
-
HashSet如何查重
-
ArrayList 和 Vector 的区别
一定要耐下心看各个常用容器(HashMap、ArrayList)常用方法的实现算法及代码实现
并发
-
进程、线程、协程和程序各自是什么及区别
-
上下文切换
-
synchronized实现原理(结合JVM 连带讲锁升级)
-
可重入锁代码实现及原理
-
线程池 针对不同情况参数如何选择
-
原子类
-
CAS
-
AQS原理
不光要背面试题 建议面试结束后再深入学学java并发 推荐《Java并发编程的艺术》
JVM
-
JMM结构(最好可以针对不同虚拟机 不同版本 或者只说HotSpot虚拟机)每部分的作用,及什么时候会用到
-
java对象创建过程
-
类加载机制
-
内存分配与回收策略
-
如何判断对象是否可被回收
-
四种引用
-
垃圾回收算法
-
垃圾回收器
MySQL
-
一条sql语句(增加、删除、修改语句)在MySQL中如何执行
-
对比常见的存储引擎(主要对比innodb 和 myisam 最好能多说出几种常见的存储引擎及特点)
-
索引(能说出innodb 和myisam 的策略最好)
-
事务 什么是事务 并发事务带来的问题
-
事务隔离级别 innodb如何保证(主要说如何解决幻读)
-
innodb 锁机制
-
innodb 日志 mysql 日志 两段式提交
-
一条sql执行的慢的原因
-
大表优化
-
mysql不同存储引擎存储结构
-
MySQL 索引为什么采用B+树?
想深入学习mysql的同学推荐这本《高性能MySQL》,极客时间上的MySQL45讲同样也非常经典
Redis
-
为什么用缓存(不光是说redis 可以先从计算机cache说起,再到具体环境中,比如网上商城怎么怎么样需要缓存,然后各种缓存什么特点,最后为什么选redis,这里就可以顺便说说redis的结构)
-
对比两种常用缓存中间件redis和Memcached
-
redis单线程模型及为什么不需要多线程(6.0后又引入了多线程)
-
持久化策略
-
数据过期淘汰策略
-
内存淘汰机制
-
缓存穿透 缓存雪崩 如何避免
-
事务
-
如何保证redis-数据库数据一致性
-
主从结构如何保证(主机-从机)数据一致性
-
主机坏了如何选出新的主机
消息队列
-
有哪些常见的消息队列?用过哪些?
-
队列模型和发布/订阅模型的区别?
-
如何保证消息的有序性?
-
如何保证消息不丢失?
-
如何不重复消费消息?也就是消息消费的幂等性
-
如果让你来设计一个消息队列,该如何考虑
Spring
-
介绍一下spring( or spring boot)吧(什么是spring 有什么特点 优势 对比不用的情况)
-
列举一些比较重要活比较常用的模块(aop orm test... 官网那张图)
-
AOP IOC
-
bean 生命周期 如何加载一个自己的bean进容器
-
事务
-
解释一下常用的注解
设计模式
-
最容易考到是手写一个单例设计模式,一定要搞清楚那几种各自哪里有问题。
-
spring、redis、rocketmq中用到了什么设计模式?在哪用到的?
-
你的项目中用到设计模式了么 ?为什么用? 在什么情况下用? 用它的好处是什么? 如果不用会怎样?
计算机网络
-
网络的七层通信模型,常见的协议比如 TCP、IP、UDP、ARP、HTTP、FTP 等都位于哪一层
-
常见 Http 的状态码的含义(常见的502,500,404,302,204,200等),遇到对应问题知道如何去处理
-
Http请求的构成
-
GET 和 POST 有什么区别
-
TCP 和 UDP 的区别(TCP 为什么可以保证传输的可靠性)
-
TCP 的三次握手和四次挥手(为什么挥手需要四次)
-
TCP 的拥塞控制(慢开始,拥塞避免,快重传,快恢复)
-
TCPTCP
-
什么是 ARP 协议。
-
ping 命令的实现原理,ping 命令为什么不需要端口号
-
从输入 URL 到页面加载发生了什么?
-
长连接和短连接