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 将会深入到各个行业,特别是在数据分析、自动化和智能决策中。
- 区块链技术:区块链在金融、物流、身份认证等领域将有更多应用。
- 量子计算:虽然还处于初级阶段,但量子计算将在未来改变计算能力和算法。
- 云计算和边缘计算:随着数据量的激增,云计算和边缘计算将在分布式系统中扮演重要角色。
在未来的工作中,持续学习和灵活应变是非常重要的,随着技术的更新换代,我们需要不断地调整自己的技术栈,保持竞争力。
这篇文章从常见的银行大厂面试问题出发,逐个解答了技术点,希望能帮助在面试中顺利回答这些问题,顺利通过面试!