- redis中存储对象使用哪种数据结构?
- Mybatis中如何实现级联查询的,比如说emp表和dept表
- Spring中的两大核心是什么?
- 你是如何处理数据库表字段与数据库字段不一致的?
- Myabtis中一级缓存与二级缓存有了解吗?
- AOP中有哪些属性?
- 如何实现SQL优化?
- 经常在where中需要查询的字段是否适合建立索引?
- SpringBoot中的Controller类中常用的注解有哪些?
- EasyExcel中如何实现Excel的导入导出?
- Sentinel中网络熔断是如何实现的?
redis中存储对象使用哪种数据结构?
- 在Redis中,存储对象通常使用
hash
数据结构。hash
是一种键值对集合,非常适合存储对象的属性和对应的值。例如,一个用户对象可以存储在一个hash中,其中每个属性(如姓名、年龄、邮箱等)作为字段,对应的值作为字段的值。
Mybatis中如何实现级联查询的,比如说emp表和dept表
首先,我们因为需要使用级联查询,所以我们使用dept表作为主表,使用左连接left join 与emp中的dept_no部门编号进行对应,在resultMap中使用Collection映射结果集
部门表(t_detp):
dept_id:部门ID,主键
dept_name:部门名称
员工表(t_emp):
emp_id:员工ID,主键
emp_name:员工姓名
dept_id:所属部门ID,外键关联到部门表的dept_id
接下来是Mybatis的XML映射文件,用于编写SQL语句进行级联查询:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.EmployeeMapper">
<!-- 查询所有部门及其员工信息 -->
<select id="selectAllDepartmentsWithEmployees" resultMap="DepartmentWithEmployeesResultMap">
SELECT d.dept_id, d.dept_name, e.emp_id, e.emp_name
FROM t_detp d
LEFT JOIN t_emp e ON d.dept_id = e.dept_id
</select>
<!-- 定义结果映射 -->
<resultMap id="DepartmentWithEmployeesResultMap" type="com.example.entity.Department">
<id property="deptId" column="dept_id"/>
<result property="deptName" column="dept_name"/>
<collection property="employees" ofType="com.example.entity.Employee">
<id property="empId" column="emp_id"/>
<result property="empName" column="emp_name"/>
</collection>
</resultMap>
</mapper>
Spring中的两大核心是什么?
- Spring框架的两大核心是依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)。依赖注入通过控制反转(Inversion of Control,IoC)容器管理对象的生命周期和依赖关系;面向切面编程则用于将横切关注点(如日志、事务管理)从业务逻辑中分离出来,提高代码的模块化和可维护性。
你是如何处理数据库表字段与数据库字段不一致的?
数据库表字段与Java对象字段不一致,可以在MyBatis的resultMap
中进行自定义映射。例如,如果数据库表中的字段名为user_name
,而Java对象中的字段名为userName
,可以通过以下方式进行映射:
Myabtis中一级缓存与二级缓存有了解吗?
- MyBatis提供了两种缓存机制:一级缓存和二级缓存。一级缓存是SqlSession级别的缓存,每个SqlSession都有自己的一级缓存,当在同一个SqlSession中执行相同的查询时会使用缓存结果。二级缓存是全局缓存,多个SqlSession共享,适用于整个应用范围的数据缓存。
AOP中有哪些属性?
-
Pointcut
:指定切入点,即需要拦截的方法或类。 -
Advice
:增强处理逻辑,包括前置通知(Before)、后置通知(After)、返回通知(AfterReturning)、异常通知(AfterThrowing)和环绕通知(Around)。 -
Weaving
:将切面应用到目标对象上的过程。
如何实现SQL优化?
- 创建索引:为经常用于查询条件的字段创建索引。
- 避免在where子句中使用函数或计算表达式。
- 减少不必要的列返回:只选择需要的列。
- 使用连接池:减少连接创建和销毁的开销。
- 优化查询逻辑:避免复杂的子查询和嵌套查询。
- 分析执行计划:使用工具分析SQL查询的执行计划,找出瓶颈。
经常在where中需要查询的字段是否适合建立索引?
- 适合,经常用于
WHERE
子句中的字段适合建立索引。索引可以显著提高查询性能,特别是对于大数据量的表。但需要注意的是,索引也会占用额外的存储空间,并可能影响插入、更新和删除操作的性能。因此,应根据实际需求和性能测试来决定是否创建索引。
SpringBoot中的Controller类中常用的注解有哪些?
-
@RestController
:标记该类为RESTful控制器。 -
@RequestMapping
:定义请求路径和方法。 -
@GetMapping
、@PostMapping
、@PutMapping
、@DeleteMapping
分别对应HTTP的GET、POST、PUT、DELETE方法。 -
@PathVariable
:绑定URL路径变量到方法参数。 -
@RequestParam
:绑定请求参数到方法参数。 -
@RequestBody
:绑定请求体到方法参数。 -
@ResponseBody
:将方法返回值绑定到响应体。 -
@CrossOrigin
:处理跨域请求。
EasyExcel中如何实现Excel的导入导出?
Sentinel中网络熔断是如何实现的?
Sentinel中的网络熔断是通过资源隔离和限流来实现的。具体步骤如下:
- 资源隔离:将不同的服务或资源进行隔离,以便独立监控和处理。
- 限流:设置阈值,当请求达到阈值时,拒绝后续请求或将其排队等待。
- 熔断机制:当某个资源的错误率超过设定的阈值时,触发熔断器,直接返回错误响应或降级处理,避免系统过载。
- 恢复机制:在一段时间后或错误率降低后,自动恢复对该资源的正常访问。