我最近从大厂离职之后在合肥呆了个把月,之前已经准备了半个多月,从7月底开始投简历面试,目前是java高级职位,到现在为止已经面了24+公司了,手上也有一些意向offer。现在把跟面试官对垒的面试问题总体记录一下。请注意这里只有问题,没有答案,也没有标准答案。参考答案在我的思维导图里。本系列会分为三个系列博客去讲我面过的一些公司出的一些题,以某个知识点或者框架出发扩展深入。来,看你能撑多少炮!
面试连环炮(中)
面试连环炮(下)
如何晋级下一场面试
##一、 redis连环炮
redis有哪几种数据结构?zset用过吗,底层数据结构是什么?为什么使用跳表?跟B+树怎么比?查找的时间复杂度是多少?GEO是干嘛的?举个场景?HyperLogLog是干嘛的?Redis可以做消息队列吗?有什么缺点?
redis持久化了解吗?有哪些方式?RDB和AOF的区别&各自的优缺点?说一下redis持久化的过程?redis持久化方式你们是怎么选型的?了解过redis混合持久化吗?是一个文件还是多个文件?redis进行持久化的时候会阻塞主线程吗?如果数据量比较多持久化时间较长会出现什么情况?
redis分布式锁了解吗?假如我的业务代码执行时间不是很稳定?使用redis做分布式锁会有什么问题呢?你怎么解决锁超时的问题?有什么方案吗?跟zk的分布式锁有什么区别?
redis集群部署模式有哪些,介绍一下?介绍一下cluster模式和sentinel模式的区别?介绍一下sentinel模式如何感知sever节点上下线的?redis-server的ping/pong协议了解吗?怎么用的?
讲一下redis主从复制的过程?主从模式下假如主节点挂了之后?数据如何同步?redis cluster模式下通过key插入/查找value的过程了解吗?
有哪些可能导致redis存在性能问题的因素?redis cluster模式下如何扩容和缩容的?redis在使用过程中明明内存充足但是插入数据失败怎么排查?如何解决redis的内存碎片问题?产生的原因是什么?redis的内存达到机器内存极限值之后有哪些策略可以避免?redis数据删除的策略有哪些?缓存击穿/缓存雪崩/缓存穿透了解吗?介绍一下产生这种问题的原因?你有什么解决思路吗?redis-mysql缓存一致性了解吗?缓存一致性方案有哪些?
##二、MySQL连环炮
MySQL锁了解吗?悲观锁怎么实现的?乐观锁了解吗?各自适用的场景能介绍一下吗?间隙锁是什么意思?解决了什么问题?如何确定间隙锁锁记录的范围?MVCC了解吗?解决了什么问题?
Mysql索引了解吗,有哪些索引类型?innodb索引结构是怎么样的?为什么使用B+树呢?为什么不使用B树呢?有什么优势?B树这种结构一般还有什么场景下会用到呢?假如有a,b联合索引,where a=? 会走索引吗? where b=?会走索引吗, where a>? and b
MySQL性能优化做过吗?你做过SQL的性能优化吗?举个例子?Mysql引起的CPU消耗过大怎么排查? 假如一条sql执行的很慢你怎么排查?假如我要查的字段长度相对固定,但是没走索引你会怎么建索引呢?你执行explain的话会看哪些指标?这些指标分别代表什么含义呢?如果查询的字段确实有加索引但是实际上走了全表扫描你该怎么排查呢?假如我数据库某张表数据特别大,但是要分页查,翻页越来越慢怎么解决,比如select a from table limit 1000000,100这个sql怎么提高查询效率。
MySQL存储引擎有哪些?innodb和MyIsam有什么区别?mysql存储引擎是基于表的还是基于数据库的?为什么?讲一下一条sql从client端到mysql server端到返回结果中经历了什么?
Mysql事务用过吗?了解ACID吗?解释一下什么意思?mysql事务的隔离性原理是什么?其他几个的原理呢?MySQL事务的隔离级别了解?分别解决了什么问题?可重复读是什么意思?幻读是怎么产生的?MySQL脏读是怎么产生的?读已提交相对于读未提交解决了什么问题?Mysql支持了这几个隔离级别的原理知道吗?
分库分表用过吗?有哪些框架?TDDL了解吗?TDDL的分层架构组件讲一下?假如我要查100条,如何聚合结果?在server端做还是在client端做呢?数据量这么大client端做会不会有问题?假如我有一张表用户-订单表,你怎么设计分表规则?以用户id做分片分表的话,但是我想通过订单id查最近10条订单怎么查?有什么方案?分库分表的跨库事务你怎么解决的?有哪些方案或者思路?
假如让你去设计一个项目你怎么去考虑这个项目在mysql层的高可用?有哪些架构模式?一主多从的方式如何做数据同步的?主从延迟怎么解决?假如我的写并发量比较大,数据库突然down机了,怎么保证数据一致性。mysql->redis的数据同步怎么做的?解析binlog吗?
说说你用过哪些消息队列?各自有什么优缺点?各自的适用场景?现在企业一般都是建立一个集群支持不同的业务线,你有没有想到这么做的优缺点?
kafka接收消息和转发消息的流程画一下?发送一条消息到kafka集群中,kafka是怎么保证消息不丢失的?在消息队列场景中有消息重复的问题,kafka是怎么解决的?kafka中消息发送到消费者端是不是每个机器都会消费?假如消费者集群有些宕机了,如何保障重新消费消息?假如消息太多,我的消费者集群已经加了200台,仍然消费不了怎么解决?
rocketmq用过吗?有哪些特性?源码有阅读过吗?事务消息的原理是什么?来画图说一下事务消息生产消费的过程?rocketmq如何保障消息的顺序的?rocketmq如何保证消息不丢失的?底层做了哪些优化?
如果是你去做一个消息队列你会考虑哪些方面保障消息队列的高可用?
java 锁了解吗?java中有哪些锁呢?说一下sychronized的原理?说一下sychronized和Lock的区别?说一下java中多线程情况下竞争锁比较激烈导致锁升级的过程?产生死锁的条件是什么?怎么避免?volatile怎么用?有什么特性?重排序了解吗?volatile怎么解决的?还有什么方式可以解决重排序的问题?基于volatile的单例模式解决了什么问题?sychronized和volatile的区别讲一下?讲一下懒汉式的单例模式怎么写?
java多线程用过吗?怎么用的?有什么缺点?线程池的原理了解吗?有哪些线程池?构造线程池的参数有哪些?线程池的拒绝策略有哪些?什么时候会触发拒绝策略?阻塞队列有哪几种?,线程池的线程工厂参数你是怎么设置的?为什么呢?假如我假如有台机器每秒产生50个任务,每个任务执行1秒,CPU是2核的你怎么设置这些参数呢?线程池执行任务的时候出现异常没抛出异常你怎么解决?有哪些方案?线程池执行任务结束调用shutdown和调用shutdownNow方法的区别?假如我想获取线程执行任务之后返回的结果怎么做?Future.get()会阻塞主线程吗?那如果任务执行时间太长调用Future.get()会怎么样?
java类加载了解吗?有哪些类加载器?rt.jar是谁加载的?什么是双亲委派模型?假如我要注册JDBC驱动去操作数据库,这个注册的过程你了解吗?打破双亲委派模型的例子有哪些?java中有些使用了代理模式去创建类,大量创建的类存在哪里?如果类不用了怎么卸载?有哪些方式?
java热加载做过吗?原理是什么?Tomcat的热部署用过吗?原理是什么?
java concurrent包里的并发容器了解吗?concurrentHashMap在1.7和1.8的实现区别?为什么使用红黑树而不用平衡树?说一下插入kv的过程?blockingQueue用过吗?怎么用的?CopyOnWriteArrayList知道吗?怎么用的?concurrentHashMap什么时候会扩容?HashMap有什么问题?
假如3*0.01=0.03吗?为什么?怎么解决?有哪些方案?BigDecimal大数计算的原理是什么?Integer a= 1000 Integer b=1000 ,a=b? a=100,b=100,a=b?为什么?
java引用有哪些?怎么判断引用的对象是否需要被回收?JVM中有哪些可以作为GCROOTS?JVM垃圾回收算法有哪些?各自有什么优势和使用场景?你们部署服务的时候JVM配置的什么回收器?参数配的是啥?年轻代用什么垃圾回收器?老年代呢?说一下CMS垃圾回收的过程?在哪些阶段会产生STW?CMS会产生内存碎片吗?为什么?怎么解决?CMS压缩内存的时候会STW吗?为什么?G1回收器了解吗?有什么特性?
JVM调优做过吗?怎么调的?使用的什么命令?分析过GC日志吗?线程栈dump文件中有哪些信息?线程状态有哪些?CPU load飙高怎么排查?分析过dump文件吗?怎么判断有内存泄漏的?怎么解决的?产生FGC的原因有哪些?如果频繁FGC你有什么思路?如果FGC基本正常,YGC时间逐渐增大导致服务抖动怎么排查?
JVM 编译模式了解吗?C1,C2各自怎么进行字节码编译的?有什么优缺点?如何解决代码冷启动问题?
java内存模型了解吗?常量池在哪?元数据区存的是啥?哪些是线程共享的?栈溢出的场景有哪些?新建一个对象的过程说一下?有哪些场景下会用非堆内存?一般用非堆存什么东西?非堆中的对象会GC吗?为什么?