Java基础
- 接口和抽象类的区别?
- Java动态代理
- HashMap 底层实现及put元素的具体过程
- currenthashmap底层实现原理?
- map可以放null值吗,currenthashmap为什么不能放null值
- synchronze和reetrantlock区别?
- 怎样停止一个运行中的线程?
- 什么是悲观锁、乐观锁、公平锁、非公平锁
- String、StringBuffer、StringBuilder的区别
- Set是如何保证元素不重复的
- ArrayList与LinkedList哪个更占空间?为什么?
- Java的设计原则?
- 什么是长连接、短连接?
- i++是否是原子操作?
- ThreadLocal用过吗?主要在哪些场景用到了?
- Java 反射?以及优缺点?
- 常用的排序算法有哪些?时间复杂度分别是多少?
多线程
- 线程的生命周期
- JMM内存模型
- 线程池的工作原理、几个重要参数、几个参数是依据什么来进行设置的?
- 怎么实现线程之间的通信?
JVM
- JVM的基本组成,每部分作用是什么?
- jvm几种垃圾收集器
- 常见的GC垃圾回收算法
- JVM怎样判断对象是否存活
- 说说双亲委派机制
- 怎样打破双亲委派机制
- 为什么使用双亲委派机制(双亲委派机制的优势)
- 怎样实现自定义一个类加载器
- 常用的GC参数
设计模式
- 单例模式实现的几种方式?各自有哪些优缺点?
- 策略模式
- 模板方法模式
- 观察者模式
- 装饰器模式
Mybatis
- Mybayis中&与#的区别,底层实现是怎样的
- Mybatis Plus 为什么可以使用this.save直接插入一个实体对象
Spring
- 说一下你对IOC容器的理解?
- 说说Spring的AOP,实现机制是什么、有几种通知类型、Spring AOP底层是怎样实现的?
- Spring 事务失效的场景?
- Spring 的循环依赖是怎么解决的?
- 什么是事务、事务的ACID特性
- 事务的传播类型有哪些?
Spring Boot
- Spring Boot的Run方法
- 自动装配实现原理
- BeanFactory与FactoryBean的区别?
- 自定义Stater实现
Spring Cloud
- 项目启动是怎样把服务注册到nacos上去的?
- 微服务各组件的原理?调用链路?
Mysql
- Mysql 索引底层实现是怎样的?为什么底层使用B+树
- Mysql 常见的索引有哪些?有什么区别?
- Mysql 索引的最左匹配原则
- Mysql 查询索引使用explain 具体的值有哪些
- Mysql 的索引优化
- Mysql 索引失效的条件
- Mysql 的存储引擎
- Mysql的日志
- Mysql事务底层是怎样实现的?
缓存
- 本地缓存与Redis的区别?优缺点有哪些?
- Redis的持久化方式及原理?
- Redis是单线程还是多线程?
- 怎样保证缓存、数据库的双写一致性?
- Redis的缓存穿透、缓存击穿、缓存雪崩的解决办法?
- Redis分布式锁使用场景?
- 项目中哪些地方使用了Redis缓存
消息队列
- kafka的基本结构说一下,他是怎样保持消息顺序的
- kafka和rabbitmq的区别?
- kafka消息丢失怎样解决?如何保证消息的顺序性?
Linux
- 查看内存使用率命令
- 日志文件怎样根据关键字进行查找?
- Linux常用的命令
Maven
- maven 常用命令
- mvn clean package与mvn clean install有什么区别
Git
- 命令merge和git rebase的区别
场景题目
- 订单超时自动关闭如何实现?
- 接口限流怎么做?说一下具体的实现思路?
- 线上SQL你是怎样来进行优化的?
其他
- 线上SQL性能优化过程?
- 针对生产环境问题是怎样排查的?
- 公司整个开发流程是怎样的?
笔试
- Map<String,Integer> map = new HashMap<>(); 根据value进行排序,打印key?
- String、StringBuffer、StringBuilder的区别?
- CPU 100% 怎样定位所在代码行?
- 数据库设计E-R图?
- 写单例、策略、模板设计模式代码示例
- 手写重写equal、hashCode方法
- 手写排序算法
- 什么是缓存穿透、缓存雪崩、缓存击穿以及解决办法?
- 递归算法
- 索引有哪些类型?区别是什么?
- 怎样实现分布式事务?原理是什么?
- 怎样杀死一个运行中的Java项目进程
- 怎样实现分布式事务?原理是什么?