vlambda博客
学习文章列表

3年经验Java面试,题目和答案


1、Spring是怎么解决循环依赖的?



2、Spring Boot自动配置原理



3、Spring Cloud之Eureka原理


4、作为服务注册中心,Eureka和Zookeeper有什么区别?



5、Zookeeper是怎么保证数据一致性的?Zookeeper Leader选举过程是怎样的?(Zab协议)



6、Redis String类型的内部编码有哪些类型?



7、Redis如何实现分布式锁?


8、使用RocketMQ,如何确保消息不丢失?

  • 在生产阶段,你需要捕获消息发送的错误,并重发消息。
  • 在存储阶段,你可以通过配置刷盘和复制相关的参数,让消息写入到多个副本的磁盘上,来确保消息不会因为某个 Broker 宕机或者磁盘损坏而丢失。
  • 在消费阶段,你需要在处理完全部消费业务逻辑之后,再发送消费确认。


9、使用RocketMQ,如何保证消息不重复消费?

在消费的时候做好幂等性处理,常见的方案如下:
在发送消息时,给每条消息指定一个全局唯一的 ID。消费时,先根据这个 ID 检查这条消息是否有被消费过,如果没有消费过,才更新数据,然后将消费状态置为已消费


10、垂直分表和水平分表的区别?

垂直分表:适用于一个表有很多个字段的情况,将原先一个表中的某些字段拆出来,单独放到一个或者多个表。

水平分表:根据具体的切分规则,将数据划分到不同的表上面。


11、一致性哈希算法的原理



12、MySQL索引底层原理


13、innodb引擎MVCC原理


14、MySQL回表

MySQL里有2种类型的索引:一类是聚簇索引,一类是非聚簇索引(也叫二级索引)。

聚簇索引存储了完整的行记录数据,而非聚簇索引只存储索引列的数据和主键id或者行号(InnoDB里是存主键id,MyISAM里是存行号)。

回表指的是,从二级索引上过滤出符合条件的数据行的id或者行号之后,再去聚簇索引或者数据文件(InnoDB是到聚簇索引中去查,MyISAM是到数据文件中查,因此MyISAM没有聚簇索引)中查询完整的记录行。

3年经验Java面试,题目和答案


文章都看完了不点个