24 春面试

0.面试流程

  1. 运行项目 自我介绍

  2. 介绍下技术栈

  3. 未来的发展方向

  4. 提问,参考方面:

    1. 项目

    2. JWT

    3. 全局异常处理

    4. 集合

    5. 异常

    6. SQL语句

    7. IOC

    8. AOP

    9. Git Linux

  5. 你还有什么别的问题吗?

1.具体业务与业务能力

  1. 编写用户注册接口时,前端需要弹出“注册成功!你好,${username}“,你的uid为 ${uid} ;这需要将包含uid的用户实体信息和 token 一起返回到前端,如何实现?

再单独做一个 Vo 实体类;或者使用 Cookie 等技术

  1. 讲讲项目中分页查询的实现,以及查询返回的数据是否能满足分页要求

需要返回 总共条数,总共 页数,分页粒度,当前页数,这样前端才好展示

  1. 如果引入会员系统,比如只有会员可以收到生日祝福,简述一下你的看法

用户进行权鉴设置

  1. 用户与好友的数据库关系

一个用户可以有多个好友,一对多;

一个好友可以有多个分组,一个分组也可以有多个好友,多对多。(所有人都问一遍)

  +-------------+       +-------------+       +---------------+
  |   User      |       |   Friend    |       |   Group       |
  +-------------+       +-------------+       +---------------+
  | uid (PK)    |       | id (PK)     |       | id (PK)       |
  | username    | 1----*| user_id (FK)| *----*| friend_id (FK)|
  | password    |       | friend_id   |       | group_name    |
  | email       |       | group_id (FK)|      +---------------+
  | created_at  |       | remark      |
  +-------------+       | relationship|
                        | is_deleted  |
                        | blocked     |
                        +-------------+
  1. 发信、写信、查看好友列表时,每个用户的好友都不同,那么如何获取当前登录用户的用户信息?

解析JWT Token,从中获取包含的用户信息。

  1. 如果本次作业最终会作为产品上线,你认为哪个部分是“朝辞”这个产品最有亮点的部分?

定时任务 定时发送 漂流瓶随机发送,或者其它自己的想法

2.开发技术基础

  1. 项目的结构及其应用

(entity\mapper\service...)(entity\repository\service\controller)

  1. 知道Rest Api吗?GetMapping 和 PostMapping 有什么区别?

Rest API 不是必需的;但是 GET 和 POST 不能混用

  1. 知道token是什么意思吗?有哪些接口不需要token?

Token是一种在网络通信中用于身份验证和授权的令牌,通常是一串加密或者签名后的字符串,用于标识用户的身份信息和访问权限。

不需要Token的接口:例如网站的首页、注册页面等。

  1. 对于你的项目,你是如何进行测试的?了解单元测试吗?了解断点调试吗?

单元测试:

  • 单元测试是针对代码中的最小单元进行测试,通常是单个函数、方法或者类的功能。

  • 我会使用JUnit、SpringbootTest等单元测试框架编写单元测试用例,确保代码的各个部分按预期运行。

断点调试是一种在开发过程中定位和解决问题的重要工具,能够帮助开发人员逐步调试程序,查看变量的值、代码的执行路径等,快速定位和解决问题。(看看会不会断点调试)

  1. swagger的优点( 1 节省了大量手写接口文档的时间,低成本低侵入性生成RESTful 接口文档 2 生成的接口文档可以直接在线测试,省去了使用 Postman 设置接口参数的过程,而且请求参数, 返回参数一目了然 )

  2. swagger在项目中的使用方式(引入依赖,编写配置类,在需要注释的地方写上注解描述,项目启 动后访问接口文档,在上面测试)

持久层CRUD:Mybatis & Jpa

涉及Jpa的 刘硕问;涉及Mybatis-plus的,Furry 问

  1. 结合其项目,问其一个具体的CRUD如何操作的,来检验对于JPA&Mybatis-plus的基本应用。

  2. Mybatis的动态sql有什么用?执行原理是什么?

Mybatis 动态 sql 可以在 Xml 映射文件内,以标签的形式编写动态 sql,执行原理是根据表达式的值 完成逻辑判断并动态拼接 sql 的功能。

  1. Mapper.xml 里的 resultType 是什么意思?

  2. 使用Mybatis过程中,如果你的用户主键为uid,那么在注册用户时,我们如何将实体类的主键uid返回到前端呢?

要回答最佳实践:到将id存到实体类或者java bean里。

具体操作见Mybatis主键回填,mybatis-plus自动完成了这个操作。

  1. Mybatis的insert、update、delete方法会有一个返回值,是什么类型,什么含义?如果插入失败,是返回0还是报异常?

(int,改动数据的行数)(返回0)

  1. MP的QueryWrapper是什么?为什么不推荐用?

(是一个用于构建条件查询的类,它可以帮助用户通过链式调用方法来构建复杂的查询条件,包括等于、不等于、大于、小于、模糊查询等等。)

(复杂性增加 查询效率慢)

  1. Jpa的动态查询会吗(SpecificationSpring-Data-Jpa动态查询(Specification)_小马 同学的博客-CSDN博客)

  2. 讲讲jpa 查询API:Criteria API 以及Root,CriteriaBuilder,Predicate是什么意思?

3.SQL基础语法

  1. SQL左外连接和右外连接的区别 / 内连接和左外连接的区别

图解内外链接:链接

可以用Student实体 和 BoyGirlFriend实体进行讨论:查询所有学生信息顺便看看有没有对象(左外连接)/查询所有搞对象的顺便看看其学号(内连接)/查询所有搞对象的顺便看看是不是学生(根据Where语句判定是左外还是右外)

  1. LIMIT的含义及用法

  • MySQL 方言,用于分页

  • SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询条目数

  • 起始索引:从0开始

    • 起始索引 = (当前页码 - 1)* 每页显示条数

  1. Having 和 where 的区别

  • 执行时间不一样:where分组之前 having 分组之后

  • 可判断条件不同:where不能对聚合函数进行判断,having可以

SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定] GROUP BY 分组字段名 [HAVING 分组后条件过滤] ;

  1. 约束的种类及用法

非空约束 NOT NULL 唯一约束 UNIQUE 主键约束 PRIMARY KEY 默认约束 DEFAULT 外键约束 FOREIGN KEY

  1. 说几个你知道的聚合函数,以及他的功能

SELECT sex, avg(math),count(*) FROM .... 还有max、min、sum 等等

4.Java基础

  1. Java有几种集合(主要有 3 种:set(集)、list(列表包含 Queue)和 map(映射)) 集合中能够存储基本类型数据吗(不可以,集合不允许存储基本类型的数据,只能存储引用类型的 数据,也就是包装类)

  2. Java的泛型是什么?

(Java中的泛型是一种参数化类型的机制,可以让代码更加通用和安全。通过 使用泛型,可以定义一些带有类型参数的类、接口、方法等,以达到编写通用代码的目的。)

  1. Java 三大特性(封装、继承、多态) ,如果说四大特性,多一个抽象

  2. “int 和 Integer的区别是什么”(一个是基本数据类型,一个是包装类) 使用包装类有什么好处?

( 1,包装类型可用于泛型,可以添加进集合,而基本类型数据不可以。 2,包装类可以为null 3.包装类提供了用于操作的方法,如String.parseInt,而基本类型数据没有)

  1. 自动装箱和拆箱?

( 什么是自动拆装箱? 装箱:将基本类型用它们对应的引用类型包装起来; 拆箱:将包装类型转换为基本数据类型; ps:自动装箱是通过 Integer.valueOf() 完成的;自动拆箱是通过 Integer.intValue() 完成的 ) Integer i = 10; //装箱 int n = i; //拆箱

  1. 什么是Java的反射?

(运行时获取对象所属类的字段、方法、构造方法,且可以在程序运行时动态地调 用这些方法和构造函数。)

  1. 你在项目中有哪些注解的应用

  1. 在编译时进行格式检查,比如:@Override放在方法前。

  2. 在Spring框架 中,注解用来描述依赖注入、事务管理、AOP等行为。

  3. 在JUnit测试框架中,注解用来描述测试方法、测 试类、测试套件等。

  4. 在JPA持久化框架中,注解用来描述实体、关联关系、查询等。

  1. 项目中你是如何处理异常的?(try catch?全局?throw手动抛出?throws?)可以解释一下吗? 你对Java异常处理机制的理解?为什么需要

(Java采用的异常处理机制,是将异常处理的程序代码集中在 一起,与正常的程序代码分开,使得程序简洁、优雅,并易于维护。 在编写程序时,经常要在可能出现错误的地方加上检测的代码(ifelse),过多的if-else分支会导致程序 的代码加长、臃肿,可读性差。因此采用异常处理机制。)

  1. java需要事务的场景(刘硕问)

(一个方法内多个增删改操作)

  1. spring有哪两种事务管理方式(编程式事务和声明式事务) 声明式事务的实现是基于什么(AOP)

5.git基础&Linux基础

git部分

  1. 如何解释 git push origin dev 如何给远程仓库起别名

git remote add 别名 远程地址

  1. 如何处理git 冲突 (刘硕问 IDEA)

  2. 简述git的工作流程。 如果有讲到git status,询问该指令的作用。

  3. git在本地的工作区域是哪三个,分别是哪三个,其中仓库区和暂存区在哪个目录下

( 工作区:平时放代码的地方,

仓库区:这里面有你提交到所有版本的数据,这个目录里面的所有文件都可以被Git管理起来,每个 文件的修改,删除,Git都能跟踪

暂存区:用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息,一般存放 在 .git 目录下的 index 文件

仓库区和暂存区一般在.git目录里)

linux部分

  1. 如何配置mysql 远程连接

  2. 在Linux命令行上如何创建java文件,打印Hello World?

  3. 如何后台运行的jar包及查看运行日志(nohup的命令启动jar,tail -fn 200 nohup.out)

6.IOC AOP

IOC:

  1. 简要介绍IOC及其优点

(控制反转、将创建对象的控制权交给了IOC容器,从而使程序员不用关注如何去创建对象,而是把精力放在业务逻辑上)

  1. 依赖注入相关注解

(@Autowired:自动按类型注入,如果有多个匹配则按照指定Bean的id查找,查找不到会报错。 @Qualifier:在自动按照类型注入的基础上再按照Bean的id注入,给变量注入时必须搭配@Autowired, 给方法注入时可单独使用。 @Resource:直接按照Bean的id注入,只能注入Bean类型。 @value:用于注入基本数据类型和String类型)

@Autowired 先按类型 再按名称

@Resource 先按名称 后按类型

  1. 使用 @RequiredArgsConstructor 的要细问这个注解。

查阅lombok相关文档,机器翻译:这里列出的任何注释都会放在生成的构造函数上。

实际上应该为 @RequiredArgsConstructor(onConstructor_={@Autowired})(Java8之后)

这里为什么省略了@Autowired?因为本身构造方法注入时可以省略。

public GetMailboxServiceImpl(GetMailboxMapper getMailboxMapper,FriendMapper friendMapper){
    this.getMailboxMapper = getMailboxMapper;
    this.friendMapper = friendMapper;
}

AOP:(23级是作为加分项的,如果说了就问)

  1. 简要介绍AOP

  2. AOP 常见概念:

通知: 就是我们编写的希望Aop时执行的那个方法。我们通过Aop希望我们编写的方法在目标方法执行前执行,或者执行后执行。

切点:切点就是我们配置的满足我们条件的目标方法。比如我们规定:名字前面是select开头的才执行我们自定义的通知方法。那么这些select开头的方法就是切点。

连接点:连接点可以说是切点的全集。切点是连接点的子集。也可以理解为,连接点是我们没有定义那个select开头规则时,满足条件的全部的方法。

切面:切面是切点和通知的组合称谓,就是变相给组合起了个名字。

  1. AOP常用注解

( @Aspect:声明被注解的类是一个切面Bean。 @Before:前置通知,指在某个连接点之前执行的通知。 @After:后置通知,指某个连接点退出时执行的通知(不论正常返回还是异常退出) @AfterReturning:返回后通知,指某连接点正常完成之后执行的通知,返回值使用returning属性接 HI. @AfterThrowing:异常通知,指方法抛出异常导致退出时执行的通知,和@AfterReturning只会有执行,异常使用throwing厲性接收 @Around:表示这些方法将在其周围执行通知(Advice)。)

  1. 什么是 Spring Bean?

Bean就是在Spring容器中被管理、被配置和被组装的对象。

  1. 可重用性:Spring Bean可以被其他组件引用和重用,提供了一种有效的组件化和模块化的方式。

  2. 生命周期管理:Spring容器负责管理Bean的生命周期,包括创建、初始化、使用和销毁等阶段。可以通过配置和自定义来管理Bean的生命周期。

  3. 依赖注入:Spring容器通过依赖注入的方式将Bean注入到其他Bean中,实现了对象之间的解耦。

  4. AOP支持:Spring框架提供了AOP(面向切面编程)的支持,可以通过配置将切面逻辑织入到Bean的生命周期中。

7.难题与八股 非必要不问

  1. 知道Lambda表达式吗?Lambda表达式是哪个版本引入的,使用了什么编程思想?

Java8 函数式编程 函数是一等公民,可以作为参数传递给其他函数,也可以作为返回值返回。)

  1. 如果这个项目没有接口文档,只告诉你某个部分有bug需要修改,现在学长通过F12浏览器控制台告诉你这个接口的url ,那么如何快速的定位相关问题?

Ctrl + Shift + F 全局搜索

查看后端日志

  1. 在最终生产环境中,我们的服务器操作系统一般为?为什么我们的Java Springboot程序既可以在Windows运行,也可以在Linux运行?

(Java虚拟机(JVM)提供了一个独立于操作系统的运行环境,它可以在任何支持Java的操作系统上运行Java应用程序。)

  1. Java 抽象类与接口的区别?

  1. 抽象类:

    1. 抽象类可以包含抽象方法和非抽象方法。

    2. 抽象类可以有构造方法,但是不能被实例化。

    3. 子类继承抽象类时,必须实现所有抽象方法,除非子类也是抽象类。

    4. 一个类只能继承一个抽象类。

  2. 接口:

    1. 接口只能包含常量和抽象方法,所有方法默认是抽象的。

    2. 接口中的字段默认是 public static final 的,方法默认是 public abstract 的,可以省略不写。

    3. 一个类可以实现多个接口。

    4. 接口之间可以通过 extends 关键字进行继承。

主要区别在于:

  • 设计目的:抽象类是对一类对象的抽象,它包含了子类的通用特性,而接口是一种行为的抽象,描述了一类对象的行为。

  • 使用方式:抽象类用于创建一种具体的基类,而接口用于定义一种规范,实现这个规范的类需要提供相应的实现。

  1. 介绍一下Java static / final / abstract 标识符。

  2. Java 有4种访问控制权限,有哪四种,都有什么区别?

private 本类 protected 本子类 default 本包 public

  1. Java 的 == 和equals()方法有什么区别?

总的来说,== 操作符用于比较对象的引用是否相同,而 equals() 方法用于比较对象的内容是否相同。

  1. Controller注解和RestController有什么区别?有没有@ResponseBody又有什么区别?(返回响应体/返回视图)

  1. 返回响应体:

    1. 返回响应体意味着直接返回数据给客户端,通常是以某种格式(如JSON、XML等)组织的数据。

    2. 响应体可以包含任何类型的数据,通常用于构建RESTful服务,前端通过解析响应体来获取数据并进行展示或者处理。

    3. 返回响应体的常见场景包括RESTful API、Ajax请求等。

  2. 返回视图:

    1. 返回视图意味着返回一个由视图解析器解析的模板或页面给客户端。

    2. 视图通常是HTML、JSP、Thymeleaf等模板引擎生成的页面,包含了页面的结构、样式和交互逻辑。

    3. 返回视图的常见场景包括传统的Web应用程序,客户端通过浏览器来访问页面。

25 春修改建议

0.面试流程

  1. 运行项目 自我介绍

  2. 介绍下技术栈

  3. 未来的发展方向

  4. 提问,参考方面:

    1. 项目

    2. JWT

    3. 全局异常处理

    4. 集合

    5. 异常

    6. SQL语句

    7. IOC

    8. AOP

    9. Git Linux

  5. 你还有什么别的问题吗?

1. 具体业务与业务能力

  1. 编写用户注册接口时,前端需要弹出“注册成功!你好,${username}“,你的uid为 ${uid} ;这需要将包含uid的用户实体信息和 token 一起返回到前端,如何实现?

再单独做一个 Vo 实体类;或者使用 Cookie 等技术

  1. 讲讲项目中分页查询的实现,以及查询返回的数据是否能满足分页要求

需要返回 总共条数,总共 页数,分页粒度,当前页数,这样前端才好展示

  1. 如果引入会员系统,比如只有会员可以收到生日祝福,简述一下你的看法

用户进行权鉴设置

  1. 用户与好友的数据库关系

一个用户可以有多个好友,一对多;

一个好友可以有多个分组,一个分组也可以有多个好友,多对多。(所有人都问一遍)

  +-------------+       +-------------+       +---------------+
  |   User      |       |   Friend    |       |   Group       |
  +-------------+       +-------------+       +---------------+
  | uid (PK)    |       | id (PK)     |       | id (PK)       |
  | username    | 1----*| user_id (FK)| *----*| friend_id (FK)|
  | password    |       | friend_id   |       | group_name    |
  | email       |       | group_id (FK)|      +---------------+
  | created_at  |       | remark      |
  +-------------+       | relationship|
                        | is_deleted  |
                        | blocked     |
                        +-------------+
  1. 发信、写信、查看好友列表时,每个用户的好友都不同,那么如何获取当前登录用户的用户信息?

解析JWT Token,从中获取包含的用户信息。

  1. 如果本次作业最终会作为产品上线,你认为哪个部分是这个产品最有亮点的部分?

定时任务 定时发送 漂流瓶随机发送,或者其它自己的想法

2.开发技术基础

建议删除 Swagger 部分

  1. 项目的结构及其应用

(entity\mapper\service...)(entity\repository\service\controller)

  1. 知道Rest Api吗?GetMapping 和 PostMapping 有什么区别?

Rest API 不是必需的;但是 GET 和 POST 不能混用

  1. 知道token是什么意思吗?有哪些接口不需要token?

Token是一种在网络通信中用于身份验证和授权的令牌,通常是一串加密或者签名后的字符串,用于标识用户的身份信息和访问权限。

不需要Token的接口:例如网站的首页、注册页面等。

  1. 对于你的项目,你是如何进行测试的?了解单元测试吗?了解断点调试吗?

单元测试:

  • 单元测试是针对代码中的最小单元进行测试,通常是单个函数、方法或者类的功能。

  • 我会使用JUnit、SpringbootTest等单元测试框架编写单元测试用例,确保代码的各个部分按预期运行。

断点调试是一种在开发过程中定位和解决问题的重要工具,能够帮助开发人员逐步调试程序,查看变量的值、代码的执行路径等,快速定位和解决问题。(看看会不会断点调试)

  1. swagger的优点( 1 节省了大量手写接口文档的时间,低成本低侵入性生成RESTful 接口文档 2 生成的接口文档可以直接在线测试,省去了使用 Postman 设置接口参数的过程,而且请求参数, 返回参数一目了然 )

  2. swagger在项目中的使用方式(引入依赖,编写配置类,在需要注释的地方写上注解描述,项目启 动后访问接口文档,在上面测试)

持久层CRUD:Mybatis & Jpa

涉及Jpa的 刘硕问;涉及Mybatis-plus的,Furry 问

  1. 结合其项目,问其一个具体的CRUD如何操作的,来检验对于JPA&Mybatis-plus的基本应用。

  2. Mybatis的动态sql有什么用?执行原理是什么?

Mybatis 动态 sql 可以在 Xml 映射文件内,以标签的形式编写动态 sql,执行原理是根据表达式的值 完成逻辑判断并动态拼接 sql 的功能。

  1. Mapper.xml 里的 resultType 是什么意思?

  2. 使用Mybatis过程中,如果你的用户主键为uid,那么在注册用户时,我们如何将实体类的主键uid返回到前端呢?

要回答最佳实践:到将id存到实体类或者java bean里。

具体操作见Mybatis主键回填,mybatis-plus自动完成了这个操作。

  1. Mybatis的insert、update、delete方法会有一个返回值,是什么类型,什么含义?如果插入失败,是返回0还是报异常?

(int,改动数据的行数)(返回0)

  1. MP的QueryWrapper是什么?为什么不推荐用?

(是一个用于构建条件查询的类,它可以帮助用户通过链式调用方法来构建复杂的查询条件,包括等于、不等于、大于、小于、模糊查询等等。)

(复杂性增加 查询效率慢)

  1. Jpa的动态查询会吗(SpecificationSpring-Data-Jpa动态查询(Specification)_小马 同学的博客-CSDN博客)

  2. 讲讲jpa 查询API:Criteria API 以及Root,CriteriaBuilder,Predicate是什么意思?

3.数据库

3.1 数据库 SQL 基础语法【着重】

  1. SQL左外连接和右外连接的区别 / 内连接和左外连接的区别

图解内外链接:链接

可以用Student实体 和 BoyGirlFriend实体进行讨论:查询所有学生信息顺便看看有没有对象(左外连接)/查询所有搞对象的顺便看看其学号(内连接)/查询所有搞对象的顺便看看是不是学生(根据Where语句判定是左外还是右外)

  1. LIMIT的含义及用法

  • MySQL 方言,用于分页

  • SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询条目数

  • 起始索引:从0开始

    • 起始索引 = (当前页码 - 1)* 每页显示条数

  1. Having 和 where 的区别

  • 执行时间不一样:where分组之前 having 分组之后

  • 可判断条件不同:where不能对聚合函数进行判断,having可以

SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定] GROUP BY 分组字段名 [HAVING 分组后条件过滤] ;

  1. 约束的种类及用法

非空约束 NOT NULL 唯一约束 UNIQUE 主键约束 PRIMARY KEY 默认约束 DEFAULT 外键约束 FOREIGN KEY

  1. 说几个你知道的聚合函数,以及他的功能

SELECT sex, avg(math),count(*) FROM .... 还有max、min、sum 等等

4. Java基础 着重提问

加强 Java 基础,尤其是与内存、对象、引用相关的基础;以及第 1.5 阶段作业

  1. Java有几种集合(主要有 3 种:set(集)、list(列表包含 Queue)和 map(映射)) 集合中能够存储基本类型数据吗(不可以,集合不允许存储基本类型的数据,只能存储引用类型的 数据,也就是包装类)

  2. 【新增】Java 程序从源代码到运行的过程了解吗?你觉得 Java 是编译型还是解释型语言?

  3. 【新增】用过 Java 的哪几种基本数据类型?int 类型占了多少字节,多少位?

  4. 【新增】Java 的静态方法了解吗?静态方法可以调用非静态成员吗?为什么?

  5. 【新增】深拷贝和浅拷贝区别;

  6. 【新增】你知道你创建的对象和声明的变量存在哪里了吗?内存区域栈内存和堆内存都存什么东西?有什么区别?(不用深入问到 JVM 内存区域,大致了解即可)(误区:基本数据类型都是存放在栈内存里吗?)

  7. 【新增】了解对象的可变性(Mutable)与不可变(Immutable)吗?你觉得 String 字符串的拼接过程中,对象引用的改变过程是怎么样的?

  8. 【新增】Java 方法中,实参是值传递还是引用传递呢?

  9. 【新增】Java 的 == 和equals()方法有什么区别?

    总的来说,== 操作符用于比较对象的引用是否相同,而 equals() 方法用于比较对象的内容是否相同。

  10. Java的泛型是什么?

(Java中的泛型是一种参数化类型的机制,可以让代码更加通用和安全。通过 使用泛型,可以定义一些带有类型参数的类、接口、方法等,以达到编写通用代码的目的。)

  1. Java 三大特性(封装、继承、多态) ,如果说四大特性,多一个抽象

  2. “int 和 Integer的区别是什么”(一个是基本数据类型,一个是包装类) 使用包装类有什么好处?

( 1,包装类型可用于泛型,可以添加进集合,而基本类型数据不可以。 2,包装类可以为null 3.包装类提供了用于操作的方法,如String.parseInt,而基本类型数据没有)

  1. 自动装箱和拆箱?

( 什么是自动拆装箱? 装箱:将基本类型用它们对应的引用类型包装起来; 拆箱:将包装类型转换为基本数据类型; ps:自动装箱是通过 Integer.valueOf() 完成的;自动拆箱是通过 Integer.intValue() 完成的 ) Integer i = 10; //装箱 int n = i; //拆箱

  1. 什么是Java的反射?

(运行时获取对象所属类的字段、方法、构造方法,且可以在程序运行时动态地调 用这些方法和构造函数。)

  1. 你在项目中有哪些注解的应用

  1. 在编译时进行格式检查,比如:@Override放在方法前。

  2. 在Spring框架 中,注解用来描述依赖注入、事务管理、AOP等行为。

  3. 在JUnit测试框架中,注解用来描述测试方法、测 试类、测试套件等。

  4. 在JPA持久化框架中,注解用来描述实体、关联关系、查询等。

  1. 项目中你是如何处理异常的?(try catch?全局?throw手动抛出?throws?)可以解释一下吗? 你对Java异常处理机制的理解?为什么需要

(Java采用的异常处理机制,是将异常处理的程序代码集中在 一起,与正常的程序代码分开,使得程序简洁、优雅,并易于维护。 在编写程序时,经常要在可能出现错误的地方加上检测的代码(ifelse),过多的if-else分支会导致程序 的代码加长、臃肿,可读性差。因此采用异常处理机制。)

  1. java需要事务的场景(刘硕问)

(一个方法内多个增删改操作)

  1. spring有哪两种事务管理方式(编程式事务和声明式事务) 声明式事务的实现是基于什么(AOP)

5.git基础&Linux基础

git部分

  1. 如何解释 git push origin dev 如何给远程仓库起别名

git remote add 别名 远程地址

  1. 如何处理git 冲突 (刘硕问 IDEA)

  2. 简述git的工作流程。 如果有讲到git status,询问该指令的作用。

  3. git在本地的工作区域是哪三个,分别是哪三个,其中仓库区和暂存区在哪个目录下

( 工作区:平时放代码的地方,

仓库区:这里面有你提交到所有版本的数据,这个目录里面的所有文件都可以被Git管理起来,每个 文件的修改,删除,Git都能跟踪

暂存区:用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息,一般存放 在 .git 目录下的 index 文件

仓库区和暂存区一般在.git目录里)

linux部分

  1. 如何配置mysql 远程连接

  2. 在Linux命令行上如何创建java文件,打印Hello World?

  3. 如何后台运行的jar包及查看运行日志(nohup的命令启动jar,tail -fn 200 nohup.out)

6. Spring IOC

多考察一些关于 Bean 使用的知识点。

IOC:

  1. 简要介绍IOC及其优点

(控制反转、将创建对象的控制权交给了IOC容器,从而使程序员不用关注如何去创建对象,而是把精力放在业务逻辑上)

  1. 什么是 Spring Bean?

Bean就是在Spring容器中被管理、被配置和被组装的对象。

  1. 可重用性:Spring Bean可以被其他组件引用和重用,提供了一种有效的组件化和模块化的方式。

  2. 生命周期管理:Spring容器负责管理Bean的生命周期,包括创建、初始化、使用和销毁等阶段。可以通过配置和自定义来管理Bean的生命周期。

  3. 依赖注入:Spring容器通过依赖注入的方式将Bean注入到其他Bean中,实现了对象之间的解耦。

  4. AOP支持:Spring框架提供了AOP(面向切面编程)的支持,可以通过配置将切面逻辑织入到Bean的生命周期中。

  1. 【新增】将一个类声明为 Bean 的注解,你用到了哪些?

  2. 【新增】@Component 和 @Bean 的区别是什么?

  3. 依赖注入相关注解

(@Autowired:自动按类型注入,如果有多个匹配则按照指定Bean的id查找,查找不到会报错。 @Qualifier:在自动按照类型注入的基础上再按照Bean的id注入,给变量注入时必须搭配@Autowired, 给方法注入时可单独使用。 @Resource:直接按照Bean的id注入,只能注入Bean类型。 @value:用于注入基本数据类型和String类型)

@Autowired 先按类型 再按名称

@Resource 先按名称 后按类型

  1. 使用 @RequiredArgsConstructor 的要细问这个注解。

查阅lombok相关文档,机器翻译:这里列出的任何注释都会放在生成的构造函数上。

实际上应该为 @RequiredArgsConstructor(onConstructor_={@Autowired})(Java8之后)

这里为什么省略了@Autowired?因为本身构造方法注入时可以省略。

public GetMailboxServiceImpl(GetMailboxMapper getMailboxMapper,FriendMapper friendMapper){
    this.getMailboxMapper = getMailboxMapper;
    this.friendMapper = friendMapper;
}

AOP:(23级是作为加分项的,如果说了就问)

  1. 简要介绍AOP

  2. AOP 常见概念:

通知: 就是我们编写的希望Aop时执行的那个方法。我们通过Aop希望我们编写的方法在目标方法执行前执行,或者执行后执行。

切点:切点就是我们配置的满足我们条件的目标方法。比如我们规定:名字前面是select开头的才执行我们自定义的通知方法。那么这些select开头的方法就是切点。

连接点:连接点可以说是切点的全集。切点是连接点的子集。也可以理解为,连接点是我们没有定义那个select开头规则时,满足条件的全部的方法。

切面:切面是切点和通知的组合称谓,就是变相给组合起了个名字。

  1. AOP常用注解

( @Aspect:声明被注解的类是一个切面Bean。 @Before:前置通知,指在某个连接点之前执行的通知。 @After:后置通知,指某个连接点退出时执行的通知(不论正常返回还是异常退出) @AfterReturning:返回后通知,指某连接点正常完成之后执行的通知,返回值使用returning属性接 HI. @AfterThrowing:异常通知,指方法抛出异常导致退出时执行的通知,和@AfterReturning只会有执行,异常使用throwing厲性接收 @Around:表示这些方法将在其周围执行通知(Advice)。)

7.难题与八股 非必要不问

  1. 知道Lambda表达式吗?Lambda表达式是哪个版本引入的,使用了什么编程思想?

Java8 函数式编程 函数是一等公民,可以作为参数传递给其他函数,也可以作为返回值返回。)

  1. 如果这个项目没有接口文档,只告诉你某个部分有bug需要修改,现在学长通过F12浏览器控制台告诉你这个接口的url ,那么如何快速的定位相关问题?

Ctrl + Shift + F 全局搜索

查看后端日志

  1. 在最终生产环境中,我们的服务器操作系统一般为?为什么我们的Java Springboot程序既可以在Windows运行,也可以在Linux运行?

(Java虚拟机(JVM)提供了一个独立于操作系统的运行环境,它可以在任何支持Java的操作系统上运行Java应用程序。)

  1. Java 抽象类与接口的区别?

  1. 抽象类:

    1. 抽象类可以包含抽象方法和非抽象方法。

    2. 抽象类可以有构造方法,但是不能被实例化。

    3. 子类继承抽象类时,必须实现所有抽象方法,除非子类也是抽象类。

    4. 一个类只能继承一个抽象类。

  2. 接口:

    1. 接口只能包含常量和抽象方法,所有方法默认是抽象的。

    2. 接口中的字段默认是 public static final 的,方法默认是 public abstract 的,可以省略不写。

    3. 一个类可以实现多个接口。

    4. 接口之间可以通过 extends 关键字进行继承。

主要区别在于:

  • 设计目的:抽象类是对一类对象的抽象,它包含了子类的通用特性,而接口是一种行为的抽象,描述了一类对象的行为。

  • 使用方式:抽象类用于创建一种具体的基类,而接口用于定义一种规范,实现这个规范的类需要提供相应的实现。

  1. 介绍一下Java static / final / abstract 标识符。

  2. Java 有4种访问控制权限,有哪四种,都有什么区别?

private 本类 protected 本子类 default 本包 public

  1. Controller注解和RestController有什么区别?有没有@ResponseBody又有什么区别?(返回响应体/返回视图)

  1. 返回响应体:

    1. 返回响应体意味着直接返回数据给客户端,通常是以某种格式(如JSON、XML等)组织的数据。

    2. 响应体可以包含任何类型的数据,通常用于构建RESTful服务,前端通过解析响应体来获取数据并进行展示或者处理。

    3. 返回响应体的常见场景包括RESTful API、Ajax请求等。

  2. 返回视图:

    1. 返回视图意味着返回一个由视图解析器解析的模板或页面给客户端。

    2. 视图通常是HTML、JSP、Thymeleaf等模板引擎生成的页面,包含了页面的结构、样式和交互逻辑。

    3. 返回视图的常见场景包括传统的Web应用程序,客户端通过浏览器来访问页面。