Java后端技术面试:银行业技术架构相关问题解答

在准备银行Java后端面试时,除了要掌握银行领域的业务逻辑,还需要具备扎实的技术基础。下面我们将详细解答一些常见的技术问题,帮助你更好地准备面试。​编辑

1. Mybatis的依赖pom包

Mybatis是一个流行的Java持久层框架,用于简化数据库的操作。使用Maven时,我们需要在pom.xml文件中添加相关的依赖包。Mybatis的常用依赖如下:​编辑

xml 复制代码
<dependencies>  
    <!-- Mybatis 核心包 -->  
    <dependency>  
        <groupId>org.mybatis</groupId>  
        <artifactId>mybatis</artifactId>  
        <version>3.5.4</version>  
    </dependency>  
      
    <!-- Mybatis 与 Spring 整合包 -->  
    <dependency>  
        <groupId>org.mybatis</groupId>  
        <artifactId>mybatis-spring</artifactId>  
        <version>2.0.6</version>  
    </dependency>

    <!-- 数据库连接池(例如 HikariCP) -->  
    <dependency>  
        <groupId>com.zaxxer</groupId>  
        <artifactId>HikariCP</artifactId>  
        <version>5.0.0</version>  
    </dependency>

    <!-- Mybatis日志实现 -->  
    <dependency>  
        <groupId>org.mybatis</groupId>  
        <artifactId>mybatis-logging</artifactId>  
        <version>3.5.4</version>  
    </dependency>  
</dependencies>  

这里主要包含Mybatis核心包、与Spring整合的包以及数据库连接池等相关依赖。确保根据实际需求添加对应版本。

2. Maven如何解决循环pom依赖

在大型项目中,Maven依赖管理可能会引入循环依赖问题。循环依赖通常表现为两个或多个模块相互依赖,这会导致构建错误。Maven本身没有直接的机制解决循环依赖问题,但以下几种方法可以避免或解决循环依赖:​编辑

  • 拆分模块:将循环依赖的模块进行拆分,抽取公共模块,降低模块之间的耦合度。
  • 使用provided作用域 :某些依赖在编译时需要,但在运行时已经由容器提供,可以将其声明为provided
  • 使用Maven的dependencyManagement:集中管理版本,避免直接相互依赖导致的版本冲突。

3. Java的8大基础类型和所占字节

Java有8种原始数据类型,它们分别是:

  • byte: 1字节
  • short: 2字节
  • int: 4字节
  • long: 8字节
  • float: 4字节
  • double: 8字节
  • char: 2字节
  • boolean: 在Java中,boolean的大小不确定,通常占1位,但具体依赖于JVM实现。

这些基础类型是Java的最基本数据类型,是面向性能优化时的基本构建块。

4. 类加载器

Java中使用类加载器(ClassLoader)来加载类文件。类加载器通常分为以下几种:

  • Bootstrap ClassLoader :加载JVM的核心类库(如rt.jar)。
  • Extension ClassLoader :加载JRE扩展库中的类(如lib/ext目录下的类)。
  • System ClassLoader:加载类路径(CLASSPATH)下的类。
  • 自定义ClassLoader:可以自定义类加载器来加载特定路径下的类文件。

Java类加载器的关键特性是延迟加载,即只有在实际需要类时才加载它们。

5. Redis的缓存穿透和缓存雪崩

  • 缓存穿透 :当请求的数据既不在缓存中,也不在数据库中时,导致请求直接访问数据库,造成数据库负载压力。常见解决方法包括:

    • 使用布隆过滤器 (Bloom Filter)防止无效请求。

    • 将无效数据在缓存中设置为某个默认值,避免重复查询数据库。

  • 缓存雪崩 :当缓存中的大量数据在同一时刻失效,导致大量请求直接访问数据库。解决方法:

    • 设置不同过期时间 :避免缓存的失效时间重合。

    • 使用加锁机制避免大量请求同时去数据库拉取数据。

6. Redis的key键过期事件

Redis通过过期时间来管理缓存数据。当某个键过期时,Redis会自动将其删除。Redis通过两种方式来处理过期的键:

  • 定期删除:Redis定期扫描所有设置了过期时间的键,删除过期键。
  • 惰性删除:当键被访问时,Redis检查该键是否过期,如果过期则删除。

可以通过EXPIRE命令设置键的过期时间。

7. Redis的延迟队列

Redis延迟队列通常基于**ZSet(有序集合)**实现。通过将任务的过期时间作为分数,任务本身作为值,将任务放入有序集合中。当任务的过期时间到达时,消费端可以从队列中获取并执行该任务。实现延迟队列的核心思路如下:

  • 使用ZADD命令将任务加入到有序集合。
  • 使用ZRANGEBYSCORE获取指定时间范围内的任务。
  • 使用ZREM删除已经处理过的任务。

8. RocketMQ的消息最终一致性

RocketMQ的消息最终一致性是通过事务消息来保证的。事务消息分为三部分:

  1. 发送半消息:生产者发送一条半消息到RocketMQ。
  2. 执行本地事务:生产者执行本地事务。
  3. 提交或回滚事务:RocketMQ根据事务执行结果决定是提交消息还是回滚消息。

这种机制保证了在分布式系统中,消息的发送和本地事务操作可以最终一致。

9. 分布式事务(CAP,2PC,3PC,TCC)

  • CAP定理 :指的是在分布式系统中,不可能同时满足一致性(Consistency)、可用性(Availability)和分区容忍性(Partition tolerance)三者。通常,在网络分区发生时,系统需要在一致性和可用性之间做出取舍。

  • 2PC(两阶段提交) :一种常见的分布式事务协议,分为准备阶段提交阶段。缺点是如果出现系统崩溃,可能导致阻塞。

  • 3PC(三阶段提交):在2PC基础上加入了一个准备阶段,用于解决2PC中的阻塞问题。

  • TCC(Try-Confirm-Cancel):一种基于补偿机制的分布式事务方案,适用于涉及多个服务的事务。

10. 平时如何学习技术

在技术不断更新的今天,持续学习非常重要。我的学习方法如下:

  1. 定期阅读技术博客和书籍:通过技术博客和书籍保持对行业趋势的敏感度。
  2. 动手实践:通过个人项目或开源项目积累实践经验。
  3. 参加技术社区或会议:通过与同行的交流不断扩展自己的知识边界。
  4. 解决实际问题:通过解决实际问题来深化对某一技术的理解。

11. 未来发展

未来,技术的发展会更加注重分布式系统云计算人工智能大数据 。我将继续深入学习大数据处理机器学习 技术,并关注最新的编程语言框架 ,比如GoKubernetesAI运维等。

随着技术的不断进步,我们还需要保持对新兴技术的敏感度,不断提升自己的能力以应对新的挑战。


希望这篇文章能够帮助你更好地准备银行业Java后端的面试。如果你对某个技术点有更深入的疑问,欢迎随时讨论!

相关推荐
想用offer打牌17 小时前
MCP (Model Context Protocol) 技术理解 - 第二篇
后端·aigc·mcp
passerby606118 小时前
完成前端时间处理的另一块版图
前端·github·web components
KYGALYX18 小时前
服务异步通信
开发语言·后端·微服务·ruby
掘了18 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
爬山算法19 小时前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate
Moment19 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
草梅友仁20 小时前
墨梅博客 1.4.0 发布与开源动态 | 2026 年第 6 周草梅周报
开源·github·ai编程
Cobyte20 小时前
AI全栈实战:使用 Python+LangChain+Vue3 构建一个 LLM 聊天应用
前端·后端·aigc
程序员侠客行21 小时前
Mybatis连接池实现及池化模式
java·后端·架构·mybatis
Honmaple21 小时前
QMD (Quarto Markdown) 搭建与使用指南
后端