1.SSM框架是指Spring + Spring MVC + MyBatis的组合,是Java开发中常用的一种企业级应用框架。它结合了Spring的依赖注入、事务管理、AOP等特性,Spring MVC的MVC架构和MyBatis的ORM(对象关系映射)功能,形成了一个高效、灵活、易于维护的开发框架。
Spring是一个开源的Java应用框架,提供了依赖注入(DI)、面向切面编程(AOP)、事务管理、数据访问等功能。它是SSM框架的核心,负责管理Bean的生命周期、依赖注入以及AOP等。
Spring MVC是Spring框架中的一个模块,用于构建Web应用程序。它基于MVC(Model-View-Controller)设计模式,将业务逻辑、数据展示和用户交互分离,使代码更加清晰和可维护。
MyBatis 是一个半自动化的持久层框架(ORM框架),它通过简单的XML或注解配置,将Java对象与数据库中的记录进行映射,从而简化了数据库操作。MyBatis的核心优势在于它的灵活性和可控性,开发者可以自由编写SQL语句,同时享受框架带来的便利。负责持久层(数据操作层)工作。
2.控制反转(Inversion of Control, IoC)是Spring框架的核心概念之一,它是一种设计原则,用于减少代码中的耦合度,提高系统的可维护性和扩展性。在传统的编程模式中,对象的创建和管理通常由程序员手动完成,而在IoC模式下,这些责任被移交给框架或容器,从而实现“控制反转”。
3.后端应用最少包含的基础层有业务逻辑层和数据访问层
数据访问层:在数据库和业务逻辑层之间提供抽象,负责数据的读取和写入
4.后端应用分层的优点主要包括:
职责分离:每层专注特定功能,降低耦合度。
可维护性:修改某一层不影响其他层。
可扩展性:支持水平扩展和性能优化。
便于测试:每层可以独立测试。
团队协作:不同团队负责不同层,降低沟通成本。
代码复用:每层的功能可以被复用。
安全性:独立处理安全逻辑。
技术栈升级:每层可以独立升级技术栈。
跨平台部署:支持微服务架构和独立部署。
降低复杂度:将复杂系统分解为简单模块。
5.JUnit 是一个为 Java 编程语言设计的广泛使用的单元测试框架。它属于开源软件,支持测试驱动开发(TDD),并允许开发者编写和运行可重复的测试。JUnit 的目标是提供一种简单而强大的方式来验证代码段的正确性,并帮助改进代码质量。
测试方法:用 @Test
注解标记的方法,表示这是一个测试用例。
断言:用于验证测试结果是否符合预期,例如 assertEquals()
、assertTrue()
等。
6.@SpringBootTest
:用于加载完整的Spring应用上下文,适合集成测试。
@AutoConfigureMockMvc
:与 @SpringBootTest
配合使用,配置 MockMvc
进行控制器测试。
@WebMvcTest
:仅加载Web层组件,适合单元测试控制器。
@DataJpaTest
:仅加载JPA相关组件,适合测试数据访问层。
@Test
:JUnit的测试方法注解,需与其他注解结合使用。
7.Log4j 是一个广泛使用的开源日志记录框架,主要用于Java应用程序中。它允许开发者以一种灵活且配置方便的方式进行日志记录。Log4j最初由Apache软件基金会开发和维护,是许多Java应用日志记录的事实标准之一。
8.Spring AOP(Aspect-Oriented Programming,面向切面编程) 是 Spring 框架提供的一种模块化横切关注点(cross-cutting concerns)的机制。它允许你将诸如日志记录、事务管理、安全控制等通用功能从业务逻辑中解耦出来,从而提高代码的复用性和可维护性。
9.Mockito 是一个用于 Java 的流行 mocking 框架,主要用于在单元测试中模拟对象的行为。它可以帮助开发者创建模拟对象(mock objects),并定义这些对象的行为,从而隔离被测试代码的依赖项。
10.联调测试(也称为集成测试或接口测试)的主要目的是验证不同模块、组件或系统之间的交互是否符合预期。
11.提高联调测试效率:提前准备测试数据;使用自动化测试工具;加强沟通协作
12.单体应用架构:把所有服务或者功能都封装在一个应用中。
单体应用架构的特点:部署困难;高性能;易于维护
13.SOA 全称为 Service-Oriented Architecture,即面向服务的架构。它可以根据需求通过网络对松散耦合的粗粒度应用组件(服务)进行分布式部署、组合和使用。一个服务通常以独立的形式存在于操作系统进程中。
分布式架构的特点:高可用性和容错性;业务无关的独立服务;团队协作和职责清晰
微服务架构的特点:灵活性;松耦合;业务边界清晰
14.RPC远程过程调用协议。客户端在不知道调用细节的情况下,调用存在于远程计算机上的某个对象,就像调用本地应用程序中的对象一样。
15.微服务核心组件:API网关;服务调用;链路追踪;消息队列;服务安全;分布式事务;负载均衡;服务发现;配置中心
16.分库分表的主要目的:为了应对 数据量过大 和 高并发 场景下,单一数据库无法承载的压力,提供 高可扩展性 和 高可用性。但分库分表也带来了一定的复杂性,例如 事务管理、数据一致性 和 查询复杂度 等问题,需要合理规划和设计。
分库分表可以显著减小数据库的备份和恢复时间。
分库分表策略中,垂直分库可以减轻单个数据库实例的压力,因为不同的业务使用不同的数据库。
17.垂直分表定义:将一个表按照字段分成多表,每个表存储其中一部分字段。
18.分片键是用来决定一条数据应该落到哪个分片(库/表)上的关键字段。如一个经常用于查询的列,能均匀分布数据
19.SharingSphere(Incubating)是一款开源的分布式数据库中间件(Apache 孵化项目)
支持水平分库分表,可根据分片规则(如按照用户 ID 取模等方式)将数据分散到不同的数据库和表中,以解决单库单表数据量过大、性能瓶颈等问题。
能够实现数据库的读写分离策略,将读操作(如查询操作)路由到从库,写操作(如插入、更新等)路由到主库。这样可以提高系统的读性能,充分利用从库资源,减轻主库压力。
采用了一些机制来保障分布式事务下的数据一致性。
20.水平分表的定义是:在同一个数据库内,把一张表的数据按一定规则(如按照时间范围、ID范围等)拆分到多个结构相同的表中。
21.RabbitMQ消息队列:一种在分布式系统中常用的通信机制,简称为MQ,它允许不同的应用程序或服务之间通过发送和接收消息来进行异步通信。
RabbitMQ消息队列核心组件:
生产者producer;创建消息,发送到RabbitMQ服务器
消费者consumer;从RabbitMQ服务器获取消息并进行处理
消息队列queue;存储消息
交换机exchange;接收生产者发送的消息
绑定binding;用于将交换机和队列关联起来
22.消息队列中的“死信队列”:存储那些不能被消费者处理的消息
23.消息中间件可以用来实现的场景:异常处理;事件驱动架构;任务调度;系统解耦;数据同步;电子商务交易;日志收集;实时数据分析;
24.多模型大模型在图文对齐处理的方法:CLIP(视觉分类预训练模型),TinyCLIP,GLIP
25.优化RAG的方法:
(1)文本数据预处理:检索之前对原始数据的优化
(2)文本分块:保证块之间的差异性和块内部的一致性
26.LLM称大型语言模型,是一种人工智能模型,旨在理解和生成人类语言。
27.LLM可以做的事情:创作内容、处理和分析数据、自动化任务、智能客服
如写作;翻译;总结;数据分析;编程;智能助手;智能客服
28.OpenAI chatGPT和plugin GPTs的区别
OpenAI chatGPT:纯文本交互,基于训练数据(截至知识截止日期)生成回答,无实时数据或外部工具集成。适用于通用对话、知识问答、创意写作、代码生成等基础任务。
plugin GPTs:过集成第三方插件,可调用外部工具和服务(如联网搜索、数学计算、订机票、图像生成等)。
29.领域模型分类:
30.三板斧特点
31.Agent(智能体)指能感知环境并采取相应行动的智能体。