Java后端面试题(含Dubbo、MQ、分布式、并发、算法)

发布于:2025-08-15 ⋅ 阅读:(16) ⋅ 点赞:(0)

一、Java 高级

  1. 为什么使用消息队列?消息队列有什么优点和缺点?Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么优点和缺点?

  2. 如何保证消息不被重复消费?或者说,如何保证消息消费的幂等性?

  3. 如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?有几百万消息持续积压几小时,说说怎么解决?

  4. 说一下的 dubbo 的工作原理?注册中心挂了可以继续通信吗?说说一次 rpc 请求的流程?

  5. 如何基于 dubbo 进行服务治理、服务降级、失败重试以及超时重试?

  6. 集群部署时的分布式 session 如何实现?

  7. 服务注册和发现是什么意思?Spring Cloud 如何实现?

  8. 一般实现分布式锁都有哪些方式?使用 redis 如何设计分

  9. 布式锁?使用 zk 来设计分布式锁可以吗?这两种分布式锁的实现方式哪种效率比较高?

  10. dubbo 的 spi 思想是什么?

  11. 如何设计可以动态扩容缩容的分库分表方案?

二、分布式

  1. ActiveMQ 中的消息重发时间间隔和重发次数吗?
  2. Kafka 创建 Topic 时如何将分区放置到不同的 Broker 中
  3. Kafka 判断一个节点是否还活着有哪两个条件?
  4. Kafka 消息是采用 Pull 模式,还是 Push 模式?
  5. memcached和服务器的 local cache(比如 PHP 的 APC、mmap 文件等)相比,有什么优缺点?
  6. 我需要把 memcached 中的 item 批量导出导入,怎么办?
  7. memcached 的多线程是什么?如何使用它们?
  8. MongoDB 在 A:{B,C}上建立索引,查询 A:{B,C}和 A:{C,B}都会使用索引吗?
  9. MongoDB 支持存储过程吗?如果支持的话,怎么用?
  10. 如何理解 MongoDB 中的 GridFS 机制,MongoDB 为何使用 GridFS 来存储文件?
  11. 在 Nginx 中,如何使用未定义的服务器名称来阻止处理请求?
  12. RabbitMQ 上的一个 queue 中存放的 message 是否有数量限制?
  13. 若 cluster 中拥有某个 queue 的 owner node 失效了,且该 queue 被声明具有 durable 属性,是否能够成功从其他 node 上重新声明该 queue ?
  14. 为什么说保证 message 被可靠持久化的条件是 queue 和 exchange 具有 durable 属性,同时 message 具有 persistent 属性才行?
  15. 为什么用缓存,用过哪些缓存,redis 和 memcache 的区别?
  16. Dubbo 的运行原理,与 SpringCould 相比它为什么效率要高一些,Zookeeper 底层原理
  17. 说出几种 MQ 之间的区别,以及为什么使用这种 MQ,消息重复发送(幂等性),消息发送失败,消息掉包,长时间收不到消息,发送的消息太大造成接收不成功

三、设计模式

  1. 21 种设计模式知识要点
  2. 请列举出在 JDK 中几个常用的设计模式?
  3. 什么是设计模式?你是否在你的代码里面使用过任何设计模式?
  4. 在 Java 中,什么叫观察者设计模式(observer design pattern)?
  5. 使用工厂模式最主要的好处是什么?在哪里使用?
  6. 在 Java 中,什么时候用重载,什么时候用重写?
  7. 在 Java 中,为什么不允许从静态方法中访问非静态变量?
  8. 设计一个 ATM 机,请说出你的设计思路?
  9. 举一个用 Java 实现的装饰模式(decorator design pattern)?它是作用于对象层次还是类层次
  10. 举例说明什么情况下会更倾向于使用抽象类而不是接口?

四、算法 &数据结构

  1. 如何仅用递归函数和栈操作逆序一个栈?
  2. 将单向链表按某值划分成左边小、中间相等、右边大的形式
  3. 分别用递归和非递归方式实现二叉树先序、中序和后序遍历
  4. 斐波拉契系列问题的递归和动态规划
  5. 判断字符数组中是否有的字符都只出现过一次
  6. 在有序但含有空的数组中查找字符串
  7. 只用 2GB 内存在 20 亿个整数中找到出现次数最多的数
  8. 未排序数组中累加和小于或等于给定值的最长子数组长度
  9. 从 5 随机到 7 随机及其扩展
  10. 最大值减去最小值小于或等于 num 的子数组数量
  11. 环形单链表的约瑟夫问题
  12. 将单链表的每 K 个节点之间逆序
  13. 在二叉树中找到累加和为指定值的最长路径长度
  14. 判断一棵二叉树是否为搜索二叉树和完全二叉树
  15. 最长公共子序列问题

五、并发

  1. 什么是可重入性 , 为什么说 Synchronized 是可重入锁?
  2. 为什么说 Synchronized 是一个悲观锁?乐观锁的实现原理又是什么?什么是 CAS,它有 什么特性?
  3. 乐观锁一定就是好的吗?
  4. JVM 对 Java 的原生锁做了哪些优化?
  5. ReentrantLock 是如何实现可重入性的?
  6. 跟 Synchronized 相 比 ,可重入锁 ReentrantLock 其实现原理有什么不同?
  7. 如何让 Java 的线程彼此同步?你了解过哪些同步器?请分别介绍下 。
  8. CyclicBarrier 和 CountDownLatch 看起来很相似,请对比下呢?
  9. 线程池中的线程是怎么创建的?是一开始就随着线程池的启动创建好的吗?
  10. 既然提到可以通过配置不同参数创建出不同的线程池,那么 Java 中默认实现好的线程池又 有哪些呢?请比较它们的异同
  11. 请谈谈 volatile 有什么特点,为什么它能保证变量对所有线程的可见性?
  12. 什么是 Java 的内存模型,Java 中各个线程是怎么彼此看到对方的变量的?
  13. 既然 volatile 能够保证线程间的变量可见性,是不是就意味着基于 volatile 变量的运算就是并 发安全的 ?
  14. 很多人都说要慎用 ThreadLocal,谈谈你的理解,使用 ThreadLocal 需要注意些什么?
  15. 请谈谈 AQS 框架是怎么回事儿?

网站公告

今日签到

点亮在社区的每一天
去签到