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后端的面试。如果你对某个技术点有更深入的疑问,欢迎随时讨论!

相关推荐
这里有鱼汤2 小时前
【花姐小课堂】新手也能秒懂!用「风险平价」打造扛造的投资组合
后端·python
CodeSheep2 小时前
当了leader才发现,大厂最想裁掉的,不是上班总迟到的,也不是下班搞失联的,而是经常把这3句话挂在嘴边的
前端·后端·程序员
吃饺子不吃馅2 小时前
✨ 你知道吗?SVG 里藏了一个「任意门」——它就是 foreignObject! 🚪💫
前端·javascript·面试
shark_chili2 小时前
Git Worktree:优雅解决多分支开发痛点的终极利器
后端
程序员爱钓鱼2 小时前
Go语言实战案例-项目实战篇:新闻聚合工具
后端·google·go
IT_陈寒2 小时前
Python开发者必须掌握的12个高效数据处理技巧,用过都说香!
前端·人工智能·后端
一只叫煤球的猫11 小时前
写代码很6,面试秒变菜鸟?不卖课,面试官视角走心探讨
前端·后端·面试
bobz96511 小时前
tcp/ip 中的多路复用
后端
bobz96511 小时前
tls ingress 简单记录
后端