基础
- 你能讲讲多态的好处
- 计网5层模型,有什么协议,每层负责什么功能。
- 冒泡、归并、快排时间复杂度,空间复杂度,冒泡优化、归并优化。
- ArrayList跟LinkedList的区别 (从物理内存 扩容机制 LinkedList查询的小优化)
- 深度优先跟广度优先用到的集合(栈,队列)
- 动态规划最重要的是什么(状态转移方程,然后问了个跳台阶的案例写出动态转移方程)
- HashMap跟HashTable和ConcurrentHashMap的区别 (从应用场景到源码)
- 为什么要放弃1.8要放弃分段锁改用sync+cas(讲了Reentrantlock跟synchronized跟cas的比较)
- 刚刚你说到了synchronized的优化你可以讲一下嘛(讲了锁升级过程,讲了撤消偏向锁、CAS的指针替换、自适应自旋锁等)
- 你用过线程嘛 线程的创建方式(继承Thread、实现Runnable、Callable、通过线程池)
- Runnable跟Callable的区别(后者提供线程返回值与抛出异常)。
- 你了解过哪些线程池(说了四种线程池)
- 线程池的流程,拒绝策略。
- 你在哪使用过线程池(我这边举了个业务 两张库表核对数据 需要拿一张库表中的数据去比对另外一张库表,但是因为单张库表中1000w条数据直接拿出会有内存问题,因此这边用线程池去管理,每个线程去拿1w条作比对,用一个变量去计算当前比对到了哪个区间,借助了ConcurrentHashMap的扩容思想)
- 你了解过TheadLocal嘛(我说了Thead类中有个TheadLocalMap对象然后。。。。然后get的时候通过获取当前线程去取出这个这个对象)
- 你用过泛型嘛,泛型的好处?(这块当时回答了通过泛型继承完成的一个MQ消费者工具类)
- 了解JVM嘛(这块最能讲了,从前端编译器(idea、javac)扯讲字节码再讲到了加载过程、运行时数据区、执行引擎。那场面试官也没让我停下来,直接讲了一半的面试时间)
数据库
- 你用过哪些数据库(我说主要是mysql。oracle大学期间有学过但没有了解过)
- 你了解数据库的特性嘛(说了ACID)
- 四种隔离级别,场景案例。
- mysql这块如果遇到慢查询怎么办(用explain去分析语句,讲了字段的含义)
- 那你有什么优化的经验?(讲了几个索引调优、limit优化、order by优化,讲了sort_buffer_size参数以及file_sort的两种算法和优化方式、水平垂直分表、读写分离)
- 你了解过什么数据库索引引擎(myisam、innodb)
- myisam跟innodb有什么区别(说了聚簇索引跟非聚簇索引的概念)
- myisam跟innodb有什么在锁方面上的区别嘛(myisam表锁,innodb具有行锁、间隙锁、临建锁。myisam不支持事务、innodb支持事务,然后说了innodb中rr跟rc的实现,讲了快照读当前读,undolog,redolog,innodb怎么解决的幻读)
redis
- redis的5种基础类型
- 5种基础类型的适用场景(说了查询mysql任务然后丢到redis的任务队列中)
- redis的持久化过程(讲了aof、rdb。讲了aof的重写流程。然后问了rdb参数你觉得怎么设置合适的,我说在conf配置文件中但是平常没有关注这块的设置)
- 基于redis实现的分布式锁,过期时间会导致的误删问题,看门狗机制。
- redis的哨兵、集群通讯这类的。
Spring
- bean默认是单例还是原型?
- bean的加载过程?(回答了从xml中转换成beanDefinition放入map的过程,再说了doGetBean细节)
- 7种事务传播,你有用过哪些?
- 事务失效的场景遇到过吗该怎么处理?(没遇到过、说了有些数据库不支持事务会失效以及几种配置导致的实效场景)
- spring aop跟aspectj的区别(说了动态代理跟静态代理,Proxy的源码)
- 如何解决循环依赖(说了三级缓存、运行提前曝光参数等)
Dubbo
-
dubbo是什么?
-
你了解dubbo的几种协议?
-
rpc比http优势在哪?
然后说了dubbo这块不怎么熟悉。
项目
- 你的第一个项目中,哪里用到了redis,哪里用到了elasticserach(说存token用了redis,还有拿redis中的主键自增当作唯一key,然后在报表统计用到了es,晚上凌晨将mysql清洗到es中)
- 你报表统计是基于es的嘛,你这边清洗上的数据是怎样的(我说了在mysql那边表的合并后清洗到es上,然后根据页面的参数用ElasticsearchTemplate去做聚合)
- 因为第一个项目是HIS系统,然后问我有没有考虑过如果在高并发的情况下挂的号只剩几个,该怎么处理(秒杀的场景,我说了基于redis的分布式锁然后说了怎么实现、里面有哪些问题,当时说了设置业务时间超过key过期时间误删场景,他问了那你觉得过期时间该怎么设置,然后回答去判断业务时长不同场景具体不同设置,后面讲了用Redission实现的看门狗机制)
- 问了第二个项目是个流程表单的数据处理系统,为什么会做这个项目(说了因为之前实习在etl那块经常数据字段不够,然后需要前后端人员反复去沟通调整,所以想做一个基于动态表单的etl)
- 介绍了下怎么实现的,然后问了几个场景问题。
- 然后问了为什么使用cloud(因为就是练手cloud哈哈哈哈)
- 配置节点后其他节点会有什么操作(我说我这边是用递归去判断,改动这个节点后,这节点链后的配置都会失效)
- 如果想给这个流程图加一个可以代码计算执行到哪一个节点你要怎么实现(我说因为后端是分成两个项目 一个boot项目去进行节点数据的处理,一个项目是去管理流程图、节点配置这块的。数据处理的项目每开始执行一个节点或者执行完一个节点都通过mq去通知管理流程图的项目,然后前端每间隔一小段时间去访问流程图的项目的接口来更新流程图)