面试指南1009

  1. redis中存储对象使用哪种数据结构?
  2. Mybatis中如何实现级联查询的,比如说emp表和dept表
  3. Spring中的两大核心是什么?
  4. 你是如何处理数据库表字段与数据库字段不一致的?
  5. Myabtis中一级缓存与二级缓存有了解吗?
  6. AOP中有哪些属性?
  7. 如何实现SQL优化?
  8. 经常在where中需要查询的字段是否适合建立索引?
  9. SpringBoot中的Controller类中常用的注解有哪些?
  10. EasyExcel中如何实现Excel的导入导出?
  11. 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中的网络熔断是通过资源隔离和限流来实现的。具体步骤如下:

  1. 资源隔离:将不同的服务或资源进行隔离,以便独立监控和处理。
  2. 限流:设置阈值,当请求达到阈值时,拒绝后续请求或将其排队等待。
  3. 熔断机制:当某个资源的错误率超过设定的阈值时,触发熔断器,直接返回错误响应或降级处理,避免系统过载。
  4. 恢复机制:在一段时间后或错误率降低后,自动恢复对该资源的正常访问。

 

 

上一篇:camody卡魔迪-准备新一年双十一推出iPhone快充充电宝


下一篇:网络编程(14)——基于单例模板实现的逻辑层