一、java基础
1、语法
- 基本数据类型,自动装箱
- static用法
- 常用关键字用法
- 数据计算的一些问题
- 一些数据类型、常用工具类的使用,以及对并发的支持
- 简单的算法:快速排序、冒泡排序等
2、集合
- util包下list、set、map集合的使用,以及底层实现,重点:ArrayList底层实现,扩容方式;HashMap的底层实现,数据结构特征,加载因子,哈希计算,扩容;
- concurrent包下的集合、队列,基本都要了解,常用的要熟悉其用法、底层实现,以及和util包下集合的区别;重点:ConcurrentHashMap底层实现,和HashMap的区别,内部使用的是什么锁;CopyOnWriteArrayList底层实现,和ArrayList的区别,如何做到线程安全的;
- 什么样的场景用什么数据类型合适,主要关注两点:数据模型、并发场景
3、多线程
- 常用控制线程方法的用法,wait、notify、sleep等
- 并发包下的类都要了解下,常用的要知道具体的实现;重点:锁、线程池、并发集合、队列等,以及Semaphore、CountDownLatch、CyclicBarrier、FutureTask等的作用和使用方式
- 隐式锁Synchronized,用法,特征,持有的锁的区别(类、对象),能否重入锁,怎么造成死锁
- 显式锁Lock,用法,特征,和Synchronized的区别,常用的实现类;主要考察ReentrantLock类,用法,锁的释放,锁住的是什么,能否重入锁
- 读写锁ReadWriteLock,用法,特征,应用场景;主要考察读写锁的,可多线程读,或一个线程写,读和写的动作只能有一个发生
- 线程池,主要考察ThreadPoolExecutor,初始化线程池有几个参数?每个参数的作用分别是什么?线程池启动的时候干了什么?等待的任务在哪里等待?等待任务的队列有容量大小吗?等待的队列放满了会发生什么?有什么解决办法?(可设置任务等待的队列,使用有界或无界队列,针对队列饱和可设置饱和策略)
- 设计一个高效高并发的序列缓存
4、设计模式
- 常见的设计模式,解决什么问题
- 工作中用到的设计模式,以及应用场景、解决问题
5、jvm
- 类加载机制,类加载器
- 内存模型,堆、栈的知识点(存放内容,作用,如何运行等)
- 垃圾回收机制,垃圾回收算法,触发full GC的条件
- jvm调优,jdk的参数配置,以及参数的作用,jvm性能如何监控
二、框架
1、Spring
- ioc:实现原理,设计思想,解决问题
- aop:原理,如何使用,应用场景;代理的实现方式,以及区别
- 事务的隔离级别和传播机制
- spring对事务是如何控制的?重点:使用aop控制事务,aop需要生成代理类,所以就意味着开启事务必须要在调类的方法才会开启事务,由一个方法调用当前类的一个方法是无法开启事务的;
2、SpringMVC
- SpringMVC的实现原理,从入口到mvc的拦截器,到工程的Controller,再到视图层以及对视图层的渲染、数据填充等,要了解大概的流程
- SpringMVC的优势,以及常用的注解
3、Mybatis
- 底层原理;解析xml生成Mybatis定义的对象,命名空间区分不同的对象,使用代理模式,访问对应的对象,调用对应的方法
- Mybatis的使用,一些常用字符的作用以及区别,如何实现动态sql
4、Status2
- 原理
- 与SpringMVC的区别
5、Hibernate
- 原理、特性
- get、load等,缓存、懒加载、关联、hql等
- 和Mybatis的区别
三、微服务
Spring Cloud
- 微服务的优势、作用
- Spring Cloud的常用组件,注册中心的原理,负载均衡的模式,熔断器的作用和应用场景,网关的作用以及针对各个访问类型的拦截器,等等
- Spring Cloud的分布式事务如何控制;主要解决方案:刚性事务、柔性事务、MQ事务控制、TCC的分阶段事务控制等,微服务的分布式事务没有很完美的解决方案,要根据业务的使用场景设计事务的控制方式,MQ事务控制一般不用,XA的事务控制性能低下且不支持MySQL
- 使用Spring Cloud遇到的问题有哪些?说出其解决方案。
四、数据库
- sql的书写,一般会考察分组、关联查询等
- 索引的使用,什么情况下失效,联合索引的使用方式
- sql优化,问题排查
五、其它
1、redis
- 支持的数据类型,及其特征
- 事务的使用
- 超时时间的设置
2、MQ
- 原理(不用非常详细,了解大概)
- 模式,生产者和消费者、订阅模式(广播)
- mq的事务模式
- mq遇到重复消费、消息丢失的解决方案