某银行大厂面试技术问题深度解析(一)

1. MyBatis的依赖pom包

MyBatis 是一个持久层框架,主要用于简化数据库操作。要在项目中使用 MyBatis,必须在 pom.xml 文件中添加相应的依赖。以下是常用的 MyBatis 依赖:

xml 复制代码
<dependency>  
    <groupId>org.mybatis</groupId>  
    <artifactId>mybatis</artifactId>  
    <version>3.5.5</version>  
</dependency>

<dependency>  
    <groupId>org.mybatis</groupId>  
    <artifactId>mybatis-spring</artifactId>  
    <version>2.0.6</version>  
</dependency>  
  • mybatis 是核心依赖,提供了 SQL 映射和执行功能。
  • mybatis-spring 是 MyBatis 与 Spring 集成的依赖,简化了 MyBatis 在 Spring 环境下的配置。

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

在 Maven 中,循环依赖会导致构建失败。Maven 使用继承和依赖机制来组织项目。如果遇到循环依赖,可以通过以下几种方法解决:

  • 依赖重构:将循环依赖拆分成多个模块,避免循环引用。
  • 依赖排除 :使用 <exclusions> 标签排除冲突的依赖。
  • 引入接口抽象:将循环依赖的部分抽象成接口或抽象类,减少直接依赖。

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

Java 中有8种基本数据类型,每种类型所占字节数如下:

数据类型 占用字节数 取值范围
byte 1 -128 到 127
short 2 -32,768 到 32,767
int 4 -2^31 到 2^31 - 1
long 8 -2^63 到 2^63 - 1
float 4 ±1.4E-45 到 ±3.4E+38
double 8 ±4.9E-324 到 ±1.8E+308
char 2 0 到 65,535 (Unicode字符集)
boolean 1 (通常) true 或 false

4. 类加载器

类加载器(ClassLoader)是 Java 中用于加载类的组件。它通过以下步骤加载类:

  • 加载:将类的字节码文件加载到内存中。
  • 连接:包括验证、准备和解析。
  • 初始化:执行类的初始化操作。

常见的类加载器有:

  • Bootstrap ClassLoader:加载 JDK 核心类库。
  • Extension ClassLoader:加载 JDK 扩展类库。
  • System ClassLoader:加载应用程序类路径中的类。

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

  • 缓存穿透 :指查询的数据在缓存和数据库中都不存在,导致每次请求都访问数据库,可能造成数据库压力过大。解决方法:

    • 使用布隆过滤器(Bloom Filter)来判断数据是否存在。

    • 对查询结果为空的数据设置缓存,避免频繁查询数据库。

  • 缓存雪崩 :指缓存大量数据同时过期或失效,导致大量请求直接访问数据库,可能引发数据库宕机。解决方法:

    • 设置不同的缓存过期时间,避免同时过期。

    • 使用缓存预热策略,提前加载热点数据。

6. Redis的key键过期事件

Redis 提供了两种方式来监听键的过期事件:

  • 主动过期:Redis 定期检查键的过期时间并删除。
  • 惰性过期:当键被访问时,Redis 会检查键是否已过期,并删除已过期的键。

你可以通过配置 notify-keyspace-events 来开启过期事件的通知。​编辑

7. Redis的延迟队列

Redis 延迟队列通常是利用 Sorted Set 数据结构来实现的。通过将任务的执行时间作为分数,将任务放入 Sorted Set 中。当任务的执行时间到达时,客户端从队列中取出任务。常见的做法是:

  • 将任务的执行时间(时间戳)作为 score,将任务数据作为 member 放入 Sorted Set
  • 定时检查 Sorted Set 中的任务,并取出到期的任务进行处理。编辑

8. RocketMQ的消息最终一致性

RocketMQ 提供了事务消息机制,确保在分布式系统中消息的一致性。消息的最终一致性通常是通过以下方式保证的:

  • 消息发送 :消息首先以半消息的形式发送,状态是"未决"。编辑
  • 执行本地事务:生产者根据业务逻辑执行本地事务。
  • 消息确认:根据本地事务的执行结果,提交或回滚事务消息。

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

  • CAP 理论 :在分布式系统中,三个特性是互相牵制的:

    • Consistency(一致性)

    • Availability(可用性)

    • Partition tolerance(分区容错性)

  • 2PC(两阶段提交协议) :通过协调者和参与者的配合来保证事务的一致性。存在阻塞问题。

  • 3PC(三阶段提交协议):在 2PC 的基础上增加了准备阶段,解决了 2PC 中的阻塞问题,但复杂性更高。

  • TCC(Try/Confirm/Cancel) :将分布式事务拆分为三部分:

    • Try :预执行操作,检查是否可以提交事务。

    • Confirm :提交事务。

    • Cancel:回滚事务。

10. 平时如何学习技术

  • 系统性学习:选择合适的学习路径,从基础开始,逐步掌握进阶知识。
  • 动手实践:通过项目实践来加深对技术的理解。
  • 阅读官方文档:官方文档是最权威的学习资源。
  • 参与社区:加入技术社区,关注最新的技术趋势和最佳实践。
  • 自我总结:定期总结所学内容,并做笔记,帮助记忆和复习。

11. 未来发展

随着技术的快速发展,未来可能会看到更多的创新和变革,特别是在以下领域:

  • 人工智能:AI 将会深入到各个行业,特别是在数据分析、自动化和智能决策中。
  • 区块链技术:区块链在金融、物流、身份认证等领域将有更多应用。
  • 量子计算:虽然还处于初级阶段,但量子计算将在未来改变计算能力和算法。
  • 云计算和边缘计算:随着数据量的激增,云计算和边缘计算将在分布式系统中扮演重要角色。

在未来的工作中,持续学习和灵活应变是非常重要的,随着技术的更新换代,我们需要不断地调整自己的技术栈,保持竞争力。


这篇文章从常见的银行大厂面试问题出发,逐个解答了技术点,希望能帮助在面试中顺利回答这些问题,顺利通过面试!

相关推荐
程序新视界4 小时前
一张图解析MySQL中InnoDB的逻辑存储结构
数据库·后端·mysql
Victor3564 小时前
Redis(88)Redis缓存的大小如何合理配置?
后端
Victor3564 小时前
Redis(89)Redis的安全机制有哪些?
后端
绝无仅有4 小时前
面试自述:从单体到微服务的实践之路
后端·面试·github
Moment4 小时前
面经分享——字节前端一面
前端·javascript·面试
XXX-X-XXJ5 小时前
Django 用户认证流程详解:从原理到实现
数据库·后端·python·django·sqlite
胡桃姓胡,蝴蝶也姓胡9 小时前
Rag优化 - 如何提升首字响应速度
后端·大模型·rag
roykingw12 小时前
【思想比实现更重要】高并发场景下如何保证接口幂等性
java·web安全·面试
尘觉13 小时前
面试-浅复制和深复制?怎样实现深复制详细解答
javascript·面试·职场和发展