面试题:

  1. 先自我介绍一下?

  2. 说说数据库左连接和右连接的区别?

    在 MySQL 数据库中,左连接(LEFT JOIN)和右连接(RIGHT JOIN)是两种常用的连接类型,用于联接两个或多个表的数据。这两种连接的主要区别在于连接的顺序和结果集中包含的数据。

    1. 左连接(LEFT JOIN)

    左连接从左表中选择所有的行,并与右表中匹配的行进行连接。如果右表中没有匹配的行,那么结果集中右表的字段将显示为 NULL。左连接会返回左表中所有的记录,无论右表中是否有匹配的记录。

    语法

    SELECT *
    FROM 左表
    LEFT JOIN 右表
    ON 左表.字段 = 右表.字段;

    在左连接中,左表中所有的行都会被包含在结果集中,而右表中没有匹配的行将以 NULL 填充。

    1. 右连接(RIGHT JOIN)

    右连接与左连接相反,它从右表中选择所有的行,并与左表中匹配的行进行连接。如果左表中没有匹配的行,那么结果集中左表的字段将显示为 NULL。右连接会返回右表中所有的记录,无论左表中是否有匹配的记录。

    语法

    SELECT *
    FROM 左表
    RIGHT JOIN 右表
    ON 左表.字段 = 右表.字段;

    在右连接中,右表中所有的行都会被包含在结果集中,而左表中没有匹配的行将以 NULL 填充。

    需要注意的是,MySQL 中的右连接通常用左连接来替代,因为它们的结果是相同的,只是左右表的顺序不同。所以,实际应用中,常用左连接(LEFT JOIN)来处理连接操作。

  3. mysql 的事务说一下?

    MySQL 事务是一系列 SQL 语句的集合,它们被当作一个单独的工作单元执行,要么全部执行,要么全部不执行。事务是保证数据库完整性和一致性的重要机制。MySQL 中的事务具备以下四个特性,通常被称为 ACID 特性:

    1. 原子性(Atomicity):事务是一个原子操作单元,事务中的所有操作要么全部执行,要么全部不执行。如果事务中的任何一个操作失败,整个事务将被回滚(Rollback),数据库状态会恢复到事务执行前的状态。
    2. 一致性(Consistency):事务执行的结果必须使数据库从一个一致性状态变到另一个一致性状态。这意味着事务在执行前后,数据库必须处于一致性状态。
    3. 隔离性(Isolation):事务的执行不能被其他事务干扰。即一个事务的执行不能被其他事务看到,直到它提交。这样可以避免多个事务并发执行时产生的不一致性问题。
    4. 持久性(Durability):一旦事务提交,它对数据库的改变就是永久性的,即使系统崩溃,事务的结果也不会丢失。

    在 MySQL 中,可以使用以下语句控制事务:

    • 开始事务(Start Transaction):BEGIN 或 START TRANSACTION 语句用于显式地开始一个新的事务。

      BEGIN;
      -- 或者
      START TRANSACTION;
    • 提交事务(Commit):COMMIT 语句用于将事务的操作永久保存到数据库中。

      COMMIT;
    • 回滚事务(Rollback):ROLLBACK 语句用于撤销自上次 COMMIT 以来的所有事务。

      ROLLBACK;
      
    • 设置保存点(Savepoint):SAVEPOINT 语句可以在事务中设置保存点,以便在需要时进行部分回滚。

      SAVEPOINT savepoint_name;
    • 回滚到保存点(Rollback to Savepoint):ROLLBACK TO 语句可以将事务回滚到指定的保存点。

      ROLLBACK TO savepoint_name;
    • 释放保存点(Release Savepoint):RELEASE SAVEPOINT 语句标志着一个保存点之前的操作都已经成功,可以释放该保存点。

      RELEASE SAVEPOINT savepoint_name;

    以上是 MySQL 中事务的基本操作,通过合理使用事务,可以确保数据库操作的安全性和一致性。

  4. Spring 原理?

    1. IoC(控制反转)和 DI(依赖注入):
      • IoC(Inversion of Control):IoC 是一种设计思想,它将程序的控制权交给容器或框架,由容器来负责对象的创建和管理。Spring 的 IoC 容器,即 ApplicationContext,负责管理 Bean 的生命周期。
      • DI(Dependency Injection):DI 是 IoC 的一种实现方式,它通过注入的方式将一个对象的依赖关系交给容器管理,而不是在对象内部直接创建依赖对象。这样做提高了组件的可重用性和可测试性。
    2. AOP(面向切面编程):
      • AOP(Aspect-Oriented Programming):AOP 是一种编程范式,它允许将横切关注点(如日志、安全、事务管理等)从业务逻辑中剥离出来,使得系统关注点的变化不影响业务逻辑。在 Spring 中,AOP 通过代理机制实现,常见的代理方式有基于 JDK 动态代理和基于 CGLIB 的代理。
    3. Bean 的生命周期和作用域:
      • Bean 的生命周期:Bean 的生命周期包括实例化、初始化、使用和销毁四个阶段。Spring 容器负责 Bean 的实例化和初始化,而销毁阶段则由容器负责。你可以提及 InitializingBeanDisposableBean 接口以及 @PostConstruct@PreDestroy 注解来控制 Bean 的初始化和销毁操作。
      • Bean 的作用域:Spring 定义了多种 Bean 的作用域,包括 singleton(单例,默认)、prototype(原型)、request(每个 HTTP 请求一个实例)、session(每个 HTTP Session 一个实例)和 global session(全局 HTTP Session 一个实例)等。
    4. Spring 的事务管理:
      • 声明式事务管理:通过使用 @Transactional 注解或 XML 配置来声明事务,使得事务的控制更加方便。Spring 提供了对编程式事务管理的支持,可以通过 PlatformTransactionManager 接口进行编程式事务控制。
    5. Spring 的数据访问与集成:
      • 数据访问:Spring 提供了 JdbcTemplate 等模板类,简化了 JDBC 的操作,同时支持 ORM 框架(如 Hibernate、MyBatis)的集成,提供了对持久层的支持。
      • 集成其他技术:Spring 能够与其他技术(如消息队列、缓存、搜索引擎等)进行集成,提供了丰富的集成方案。
    6. Spring 框架的核心组件:
      • ApplicationContext:Spring 的 IoC 容器,负责管理 Bean 的生命周期。
      • BeanFactory:是 IoC 容器的基础接口,提供了基本的 IoC 功能。
      • BeanPostProcessor:在 Bean 初始化前后执行一些操作。
      • BeanDefinition:定义了 Bean 的配置信息。
  5. Rest 的请求有哪些?

    在 Web 开发中,REST(Representational State Transfer)是一种基于 HTTP 协议的软件架构风格,它使用标准的 HTTP 请求方法(GET、POST、PUT、DELETE 等)进行通信。RESTful API 是一种遵循 REST 架构风格的 Web API。

    以下是常见的 REST 请求方法及它们传递数据的方式:

    1. GET:使用 GET 请求从服务器获取数据。数据通常通过 URL 的查询参数传递,例如: /api/resource?id=1
    2. POST:使用 POST 请求向服务器提交数据,通常用于创建新资源。数据可以通过请求体(Request Body)以 JSON、XML 等格式传递。
    3. PUT:使用 PUT 请求向服务器更新或创建资源。与 POST 不同,PUT 请求通常用于更新已有资源。数据可以通过请求体传递。
    4. DELETE:使用 DELETE 请求从服务器删除资源。通常不传递数据,删除的资源由 URL 指定。
    5. PATCH:使用 PATCH 请求局部更新服务器上的资源。与 PUT 不同,PATCH 请求只更新资源的部分属性。数据可以通过请求体传递。
    6. OPTIONS:使用 OPTIONS 请求获取目标资源所支持的通信选项,用于 CORS(跨域资源共享)等场景。
    7. HEAD:与 GET 类似,但是服务器只返回响应头信息,不返回实体主体。通常用于获取资源的元信息,而不需要实际的资源内容。

    REST 请求的数据传递通常使用 JSON(JavaScript Object Notation)格式,因为它具有简洁、易读、易解析的特点。数据也可以使用 XML 等其他格式,但 JSON 是目前应用最广泛的数据传递格式之一。在请求的 Header 中,还可以设置 Content-Type 字段来指定数据传递的格式。例如, Content-Type: application/json 表示请求体中的数据是 JSON 格式。

    RESTful API 的设计原则包括资源(Resources)、统一接口(Uniform Interface)、状态无关(Statelessness)、表示层(Representation)、超媒体驱动(Hypermedia as the Engine of Application State,HATEOAS)等。遵循这些原则,可以设计出清晰、易用、可扩展的 API。

  6. 空窗期的安排?

失败原因:

  1. 准备不充足
  2. 嘴笨,下意识逃避
  3. 没有吸取教训,依然把自己劣势暴露出来。
  4. 压根不重视面试。
  5. 坏习惯依旧不改。

解决方案:

  1. 空出时间在面试前准备模拟面试
  2. 提前准备好自我介绍
  3. 适当改正回答时的下意识逃避行为(这点尤为重要)
  4. 需要调整好作息,不能再休息不好去面试。

初级考察范围:

  1. Java 基础。
  2. SQL 语句
  3. MySql 索引、事务
  4. 框架原理
  5. 项目?