在之前的两篇文章中,我们已经提到了java面试中的常见问题,还有部分内容,合肥北大青鸟合工大校区的袁老师在本文也给出,希望对大家的面试过程有些帮助。这是我总结的最后一部分常见面试题:分别是数据库,基础框架,设计题。
一.数据库
在数据库的面试中,常见的面试内容基本上是基于innodb存储引擎的内容,主要是索引的使用,事务,主从同步,分库分表的方案实现。
1. 数据库的常用存储引擎有哪些?能重点介绍innodb和myisam的区别?
2. B+树和hash索引的区别是什么?
3. Innodb的行锁有哪几种?分别是怎么实现的?
4. 数据库的乐观锁和悲观锁的区别?Select * from table for update,select *from table in share mode分别加的是什么锁?
5. 索引在什么时候会失效?了解聚集索引和非聚集索引的区别么?覆盖索引是什么?
6. Mysql的事务有那几个特性?ACID分别是怎么实现的?有几种隔离级别?分别是怎么实现的?默认的隔离级别是?
7. Mysql是怎么实现主备同步的?同步的方式有几种?涉及到的三个线程分别怎么工作?
8. 你们项目有使用分库分表?如何实现?如果要扩数据库节点的话,怎么实现?
9. B+树的优点是什么?为什么mysql的索引使用b+树,为什么不使用B树或者红黑树呢?
10. 数据库的三大范式是什么?最左前缀原则是什么?如果table有a,b有联合索引,那么Select *from table where a>0 and b=0 ; Select *from table where a=0 and b>0两个sql语句是否有使用索引?
11. 什么是幻读?Mysql的innodb存储引擎是怎么解决幻读的?
12. Mysql怎么优化,explain指令有了解过?索引怎么创建比较合适?
13. 数据库会死锁么?Innodb是怎么解决死锁的?
14. 如何安全的更改一行数据?
15. In和exist的区别是什么?
16. left join、right join,inner join的区别是什么?
二.中间件和架构
一般常见的中间件,如果你在简历提到有哪些中间件,并且刚好面试官也熟悉这个中间件,那么基本就会问下这方面的内容。常见的面试热点有缓存(Redis,memcached,MongoDB),消息中间件(kafka,rocketMQ,rabbitMQ),zookeeper,rpc框架(grpc,dubbo,thrft),spring框架,dubbo框架,netty框架,mybaits,hibernate等。这里我了解的框架有Redis,kafka,zookeeper,rpc,spring,netty,mybaits等框架。所以下面的题目基本是这些框架的问题。
Netty面试题:
1. simplechannelinboundhandler和channelinboundhandler的区别?
2. netty的内存泄露的检测机制?
3. Bytebuf中使用引用计数进行内存释放和占用?
4. Attr和option的区别?
5. Channelinitionlazier 的作用是什么?
6. 如何从channel中引导一个新的客服端,这样做的好处是什么?
7. Netty的内存零拷贝?
8. Netty的高性能在哪些方面?和nio相比
9. Channe与Socket是什么关系?Channel 与 EventLoop是什么关系,Channel 与ChannelPipeline是什么关系?
10. Netty框架本身存在粘包半包问题?
11. 何时接受客户端请求?
12. 何时注册接受 Socket 并注册到对应的 EventLoop 管理的 Selector ?
13. 客户端如何进行初始化?服务端如何创建?
14. 何时创建的 DefaultChannelPipeline ?
15. Netty内存池实现原理?
16. netty中的对象池的分析?
17. netty的心跳处理在弱网下怎么办。
18. netty的hashwheeltimer的用法,实现原理,是否出现过调用不够准时,怎么解决。
Redis面试题:
1. Redis的高性能体现在哪些方面?
2. Redis的主备同步流程?
3. Redis的事务怎么实现?有什么缺点?
4. Redis有几种部署模式?重点讲下集群和哨兵机制的实现?
5. Redis的常见数据类型?底层是怎么实现的?
6. Redis的持久化过程?
7. Redis的pipeline机制有了解过?集群下怎么实现?
8. 常见的Redis的优化方案?
9. 常见的Redis问题?缓存击穿,缓存雪崩,热点key问题解决方案?
10. Redis在集群下做分布式锁有什么优缺点?
11. Codis和Redis集群的区别?
12. Redis的过期策略怎么实现的?Redis的淘汰策略是怎么实现的?
13. Hyperloglog有使用过?怎么实现的?
14. 如果Redis主备切换回发生什么问题?
15. Redis的map类型是怎么实现扩容的?和jdk的hashmap的扩容有什么区别?
16. Redis如果cpu过高,怎么解决?在使用中有出现什么问题?是怎么解决的?
17. Redis的reactor模型能否介绍下?
18. Redis结合lua有什么作用?Eval和evalsha的区别?
19. 介绍下Redis的SDS的优势?RESP有了解么?
20. 如果有海量的数据,怎么查询某个key是否存在?
21. 如果要统计某一天的页面访问量怎么实现?
Kafka面试题:
1. 集群的副本同步机制?
2. Kafka消息的格式?
3. Kafka的高性能的原因?
4. 如果leader crash时,ISR为空怎么办?
5. Kafka的生产者发送消息流程是怎么样?
6. 如何保证消息只消费一次?如何保证消息不丢失?
7. 如何增加写的性能?
8. Kafka怎么判断一个broker是否还存活?
9. Kafka怎么实现分区策略,怎么实现负载均衡?
10. Kafka的reblance的流程?在什么情况下会发生reblance?
11. Kafka消息的幂等性和事务是怎么实现的?
12. Kafka的时间轮算法是怎么实现的?如果出现不准确怎么办?
13. 如果kafka消费者消费超时会发生什么?怎么避免kafka的消费超时?
14. Zookeeper在kafka中有哪些作用?
15. Kakfa的ack机制?0,-1,1分别代表什么?
16. Kafka是怎么实现选举的?哪些地方需要选举?
17. 如何设计保证kakfa中有某个特征的消息的是严格按照顺序消费的?
18. 有了解哪些消息队列?能否做下对比?
Zookeeper面试题:
1. zookeeper的watch机制?
2. Zookeeper如何扩容,扩容过程会不会有影响?
3. Zk的数据是怎么同步的?
4. 如何优化zk的性能?
5. Zk的事务是怎么实现的?
6. 使用zk实现分布式锁有哪些弊端?
7. Zookeeper可以监听哪些数据?
8. Zookeeper的节点有哪几种类型?
9. Zookeeper为什么建议是奇数台部署?
10. 如何使用zookeeper实现一个服务发现?
RPC框架的面试题:
1. 常见的RPC框架有哪些?能否做个对比?
2. Grpc框架的原理有了解?
3. Rpc框架的原理介绍下?Zookeeper在框架中的作用是什么?
Spring面试题:
1. 聊聊spring的IOC和AOP?其底层原理分别是什么?
2. Spring支持哪几种注入的方式?
3. BeanFactory和ApplicationContext有什么区别?BeanFactory和FactoryBean的区别?
4. Bean的声明周期?Bean的作用域有几种?单例bean是线程安全的么?
5. Springboot的启动流程?
6. Spring有几种自动装配的方式?
7. Spring有用到哪几种设计模式?Spring中主要的模块有哪些?
8. Spring的事务有了解?管理方式有几种?声明式事务的实现原理是?传播级别有几种?
9. Spring的事件类型有几种?
10. Springmvc的流程?
11. SpringMvc的控制器是不是单例模式,如果是,有什么问题,怎么解决?
12. Spring的常用注解有哪些?分别代表什么意思?
13. Spring怎么解决循环依赖问题的?
14. SpringMvc里面拦截器是怎么写的?
15. Spring AOP和AspectJ AOP有什么区别?
16. Springcloud和dubbo的区别?
17. ribbon和feign的区别?
18. ribbon、feign以及hystrix的超时、重试设置?
19. hystrix的隔离策略和zuul的功能是?
20. 说说Eureka的服务发现过程?和zookeeper相比优势是什么?
Mybaits面试题:
1. mapper的加载方式?
2. selectOne和selectUser方法有什么区别?
3. mybaits 的实现原理?
4. Configuration参数中有哪些常用的?分别介绍一下?
5. statementHandler 和prepareStatementHandler 的区别?
6. mybaits的一级缓存和二级缓存的区别?
7. #{}和${}的区别是什么?
8. Mybatis是如何进行分页的?分页插件的原理是什么?
9. 使用MyBatis的mapper接口调用时有哪些要求?
10. Mybatis是否支持延迟加载?如果支持,它的实现原理是什么?
11. 怎么使用mybaits实现分表功能?
三.设计题
设计题是面试中一个必备环节,在现实中,面试官一般的设计题往往会给一个实际场景,问你怎么实现,会有什么问题,设计题无非高并发场景,持久化场景,数据库场景。这些设计题有一些基本的套路,我们需要实际中遇到问题去分析,然后使用相关的方案进行解决。
1. 如何设计一个高并发的支付系统?
2. 如何设计一个抢红包系统?
3. 如何解决超卖现象?
4. 如何设计一个线程池?
5. 如何设计一个分布式coutdownlatch?
6. 如何设计一个微博关注度的数据库?
7. 如何设计一个抢购系统,如果用户在规定时间内没有付款则订单取消?