
WeRun后端23级面试试题
24 春面试
0.面试流程
运行项目 自我介绍
介绍下技术栈
未来的发展方向
提问,参考方面:
项目
JWT
全局异常处理
集合
异常
SQL语句
IOC
AOP
Git Linux
你还有什么别的问题吗?
1.具体业务与业务能力
编写用户注册接口时,前端需要弹出“注册成功!你好,${username}“,你的uid为 ${uid} ;这需要将包含uid的用户实体信息和 token 一起返回到前端,如何实现?
再单独做一个 Vo 实体类;或者使用 Cookie 等技术
讲讲项目中分页查询的实现,以及查询返回的数据是否能满足分页要求
需要返回 总共条数,总共 页数,分页粒度,当前页数,这样前端才好展示
如果引入会员系统,比如只有会员可以收到生日祝福,简述一下你的看法
用户进行权鉴设置
用户与好友的数据库关系
一个用户可以有多个好友,一对多;
一个好友可以有多个分组,一个分组也可以有多个好友,多对多。(所有人都问一遍)
+-------------+ +-------------+ +---------------+ | 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 | +-------------+
发信、写信、查看好友列表时,每个用户的好友都不同,那么如何获取当前登录用户的用户信息?
解析JWT Token,从中获取包含的用户信息。
如果本次作业最终会作为产品上线,你认为哪个部分是“朝辞”这个产品最有亮点的部分?
定时任务 定时发送 漂流瓶随机发送,或者其它自己的想法
2.开发技术基础
项目的结构及其应用
(entity\mapper\service...)(entity\repository\service\controller)
知道Rest Api吗?GetMapping 和 PostMapping 有什么区别?
Rest API 不是必需的;但是 GET 和 POST 不能混用
知道token是什么意思吗?有哪些接口不需要token?
Token是一种在网络通信中用于身份验证和授权的令牌,通常是一串加密或者签名后的字符串,用于标识用户的身份信息和访问权限。
不需要Token的接口:例如网站的首页、注册页面等。
对于你的项目,你是如何进行测试的?了解单元测试吗?了解断点调试吗?
单元测试:
单元测试是针对代码中的最小单元进行测试,通常是单个函数、方法或者类的功能。
我会使用JUnit、SpringbootTest等单元测试框架编写单元测试用例,确保代码的各个部分按预期运行。
断点调试是一种在开发过程中定位和解决问题的重要工具,能够帮助开发人员逐步调试程序,查看变量的值、代码的执行路径等,快速定位和解决问题。(看看会不会断点调试)
swagger的优点( 1 节省了大量手写接口文档的时间,低成本低侵入性生成RESTful 接口文档 2 生成的接口文档可以直接在线测试,省去了使用 Postman 设置接口参数的过程,而且请求参数, 返回参数一目了然 )
swagger在项目中的使用方式(引入依赖,编写配置类,在需要注释的地方写上注解描述,项目启 动后访问接口文档,在上面测试)
持久层CRUD:Mybatis & Jpa
涉及Jpa的 刘硕问;涉及Mybatis-plus的,Furry 问
结合其项目,问其一个具体的CRUD如何操作的,来检验对于JPA&Mybatis-plus的基本应用。
Mybatis的动态sql有什么用?执行原理是什么?
Mybatis 动态 sql 可以在 Xml 映射文件内,以标签的形式编写动态 sql,执行原理是根据表达式的值 完成逻辑判断并动态拼接 sql 的功能。
Mapper.xml 里的 resultType 是什么意思?
使用Mybatis过程中,如果你的用户主键为uid,那么在注册用户时,我们如何将实体类的主键uid返回到前端呢?
要回答最佳实践:到将id存到实体类或者java bean里。
具体操作见Mybatis主键回填,mybatis-plus自动完成了这个操作。
Mybatis的insert、update、delete方法会有一个返回值,是什么类型,什么含义?如果插入失败,是返回0还是报异常?
(int,改动数据的行数)(返回0)
MP的QueryWrapper是什么?为什么不推荐用?
(是一个用于构建条件查询的类,它可以帮助用户通过链式调用方法来构建复杂的查询条件,包括等于、不等于、大于、小于、模糊查询等等。)
(复杂性增加 查询效率慢)
Jpa的动态查询会吗(SpecificationSpring-Data-Jpa动态查询(Specification)_小马 同学的博客-CSDN博客)
讲讲jpa 查询API:Criteria API 以及Root,CriteriaBuilder,Predicate是什么意思?
3.SQL基础语法
SQL左外连接和右外连接的区别 / 内连接和左外连接的区别
图解内外链接:链接
可以用Student实体 和 BoyGirlFriend实体进行讨论:查询所有学生信息顺便看看有没有对象(左外连接)/查询所有搞对象的顺便看看其学号(内连接)/查询所有搞对象的顺便看看是不是学生(根据Where语句判定是左外还是右外)
LIMIT的含义及用法
MySQL 方言,用于分页
SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询条目数
起始索引:从0开始
起始索引 = (当前页码 - 1)* 每页显示条数
Having 和 where 的区别
执行时间不一样:where分组之前 having 分组之后
可判断条件不同:where不能对聚合函数进行判断,having可以
SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定] GROUP BY 分组字段名 [HAVING 分组后条件过滤] ;
约束的种类及用法
非空约束 NOT NULL 唯一约束 UNIQUE 主键约束 PRIMARY KEY 默认约束 DEFAULT 外键约束 FOREIGN KEY
说几个你知道的聚合函数,以及他的功能
SELECT sex, avg(math),count(*) FROM .... 还有max、min、sum 等等
4.Java基础
Java有几种集合(主要有 3 种:set(集)、list(列表包含 Queue)和 map(映射)) 集合中能够存储基本类型数据吗(不可以,集合不允许存储基本类型的数据,只能存储引用类型的 数据,也就是包装类)
Java的泛型是什么?
(Java中的泛型是一种参数化类型的机制,可以让代码更加通用和安全。通过 使用泛型,可以定义一些带有类型参数的类、接口、方法等,以达到编写通用代码的目的。)
Java 三大特性(封装、继承、多态) ,如果说四大特性,多一个抽象
“int 和 Integer的区别是什么”(一个是基本数据类型,一个是包装类) 使用包装类有什么好处?
( 1,包装类型可用于泛型,可以添加进集合,而基本类型数据不可以。 2,包装类可以为null 3.包装类提供了用于操作的方法,如String.parseInt,而基本类型数据没有)
自动装箱和拆箱?
( 什么是自动拆装箱? 装箱:将基本类型用它们对应的引用类型包装起来; 拆箱:将包装类型转换为基本数据类型; ps:自动装箱是通过 Integer.valueOf() 完成的;自动拆箱是通过 Integer.intValue() 完成的 ) Integer i = 10; //装箱 int n = i; //拆箱
什么是Java的反射?
(运行时获取对象所属类的字段、方法、构造方法,且可以在程序运行时动态地调 用这些方法和构造函数。)
你在项目中有哪些注解的应用
在编译时进行格式检查,比如:@Override放在方法前。
在Spring框架 中,注解用来描述依赖注入、事务管理、AOP等行为。
在JUnit测试框架中,注解用来描述测试方法、测 试类、测试套件等。
在JPA持久化框架中,注解用来描述实体、关联关系、查询等。
项目中你是如何处理异常的?(try catch?全局?throw手动抛出?throws?)可以解释一下吗? 你对Java异常处理机制的理解?为什么需要
(Java采用的异常处理机制,是将异常处理的程序代码集中在 一起,与正常的程序代码分开,使得程序简洁、优雅,并易于维护。 在编写程序时,经常要在可能出现错误的地方加上检测的代码(ifelse),过多的if-else分支会导致程序 的代码加长、臃肿,可读性差。因此采用异常处理机制。)
java需要事务的场景(刘硕问)
(一个方法内多个增删改操作)
spring有哪两种事务管理方式(编程式事务和声明式事务) 声明式事务的实现是基于什么(AOP)
5.git基础&Linux基础
git部分
如何解释 git push origin dev 如何给远程仓库起别名
git remote add 别名 远程地址
如何处理git 冲突 (刘硕问 IDEA)
简述git的工作流程。 如果有讲到git status,询问该指令的作用。
git在本地的工作区域是哪三个,分别是哪三个,其中仓库区和暂存区在哪个目录下
( 工作区:平时放代码的地方,
仓库区:这里面有你提交到所有版本的数据,这个目录里面的所有文件都可以被Git管理起来,每个 文件的修改,删除,Git都能跟踪
暂存区:用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息,一般存放 在 .git 目录下的 index 文件
仓库区和暂存区一般在.git目录里)
linux部分
如何配置mysql 远程连接
在Linux命令行上如何创建java文件,打印Hello World?
如何后台运行的jar包及查看运行日志(nohup的命令启动jar,tail -fn 200 nohup.out)
6.IOC AOP
IOC:
简要介绍IOC及其优点
(控制反转、将创建对象的控制权交给了IOC容器,从而使程序员不用关注如何去创建对象,而是把精力放在业务逻辑上)
依赖注入相关注解
(@Autowired:自动按类型注入,如果有多个匹配则按照指定Bean的id查找,查找不到会报错。 @Qualifier:在自动按照类型注入的基础上再按照Bean的id注入,给变量注入时必须搭配@Autowired, 给方法注入时可单独使用。 @Resource:直接按照Bean的id注入,只能注入Bean类型。 @value:用于注入基本数据类型和String类型)
@Autowired 先按类型 再按名称
@Resource 先按名称 后按类型
使用
@RequiredArgsConstructor
的要细问这个注解。
查阅lombok相关文档,机器翻译:这里列出的任何注释都会放在生成的构造函数上。
实际上应该为
@RequiredArgsConstructor(onConstructor_={@Autowired})
(Java8之后)这里为什么省略了
@Autowired
?因为本身构造方法注入时可以省略。public GetMailboxServiceImpl(GetMailboxMapper getMailboxMapper,FriendMapper friendMapper){ this.getMailboxMapper = getMailboxMapper; this.friendMapper = friendMapper; }
AOP:(23级是作为加分项的,如果说了就问)
简要介绍AOP
AOP 常见概念:
通知: 就是我们编写的希望Aop时执行的那个方法。我们通过Aop希望我们编写的方法在目标方法执行前执行,或者执行后执行。
切点:切点就是我们配置的满足我们条件的目标方法。比如我们规定:名字前面是select开头的才执行我们自定义的通知方法。那么这些select开头的方法就是切点。
连接点:连接点可以说是切点的全集。切点是连接点的子集。也可以理解为,连接点是我们没有定义那个select开头规则时,满足条件的全部的方法。
切面:切面是切点和通知的组合称谓,就是变相给组合起了个名字。
AOP常用注解
( @Aspect:声明被注解的类是一个切面Bean。 @Before:前置通知,指在某个连接点之前执行的通知。 @After:后置通知,指某个连接点退出时执行的通知(不论正常返回还是异常退出) @AfterReturning:返回后通知,指某连接点正常完成之后执行的通知,返回值使用returning属性接 HI. @AfterThrowing:异常通知,指方法抛出异常导致退出时执行的通知,和@AfterReturning只会有执行,异常使用throwing厲性接收 @Around:表示这些方法将在其周围执行通知(Advice)。)
什么是 Spring Bean?
Bean就是在Spring容器中被管理、被配置和被组装的对象。
可重用性:Spring Bean可以被其他组件引用和重用,提供了一种有效的组件化和模块化的方式。
生命周期管理:Spring容器负责管理Bean的生命周期,包括创建、初始化、使用和销毁等阶段。可以通过配置和自定义来管理Bean的生命周期。
依赖注入:Spring容器通过依赖注入的方式将Bean注入到其他Bean中,实现了对象之间的解耦。
AOP支持:Spring框架提供了AOP(面向切面编程)的支持,可以通过配置将切面逻辑织入到Bean的生命周期中。
7.难题与八股 非必要不问
知道Lambda表达式吗?Lambda表达式是哪个版本引入的,使用了什么编程思想?
Java8 函数式编程 函数是一等公民,可以作为参数传递给其他函数,也可以作为返回值返回。)
如果这个项目没有接口文档,只告诉你某个部分有bug需要修改,现在学长通过F12浏览器控制台告诉你这个接口的url ,那么如何快速的定位相关问题?
Ctrl + Shift + F 全局搜索
查看后端日志
在最终生产环境中,我们的服务器操作系统一般为?为什么我们的Java Springboot程序既可以在Windows运行,也可以在Linux运行?
(Java虚拟机(JVM)提供了一个独立于操作系统的运行环境,它可以在任何支持Java的操作系统上运行Java应用程序。)
Java 抽象类与接口的区别?
抽象类:
抽象类可以包含抽象方法和非抽象方法。
抽象类可以有构造方法,但是不能被实例化。
子类继承抽象类时,必须实现所有抽象方法,除非子类也是抽象类。
一个类只能继承一个抽象类。
接口:
接口只能包含常量和抽象方法,所有方法默认是抽象的。
接口中的字段默认是
public static final
的,方法默认是public abstract
的,可以省略不写。一个类可以实现多个接口。
接口之间可以通过 extends 关键字进行继承。
主要区别在于:
设计目的:抽象类是对一类对象的抽象,它包含了子类的通用特性,而接口是一种行为的抽象,描述了一类对象的行为。
使用方式:抽象类用于创建一种具体的基类,而接口用于定义一种规范,实现这个规范的类需要提供相应的实现。
介绍一下Java static / final / abstract 标识符。
Java 有4种访问控制权限,有哪四种,都有什么区别?
private 本类 protected 本子类 default 本包 public
Java 的 == 和equals()方法有什么区别?
总的来说,
==
操作符用于比较对象的引用是否相同,而equals()
方法用于比较对象的内容是否相同。
Controller注解和RestController有什么区别?有没有@ResponseBody又有什么区别?(返回响应体/返回视图)
返回响应体:
返回响应体意味着直接返回数据给客户端,通常是以某种格式(如JSON、XML等)组织的数据。
响应体可以包含任何类型的数据,通常用于构建RESTful服务,前端通过解析响应体来获取数据并进行展示或者处理。
返回响应体的常见场景包括RESTful API、Ajax请求等。
返回视图:
返回视图意味着返回一个由视图解析器解析的模板或页面给客户端。
视图通常是HTML、JSP、Thymeleaf等模板引擎生成的页面,包含了页面的结构、样式和交互逻辑。
返回视图的常见场景包括传统的Web应用程序,客户端通过浏览器来访问页面。
25 春修改建议
0.面试流程
运行项目 自我介绍
介绍下技术栈
未来的发展方向
提问,参考方面:
项目
JWT
全局异常处理
集合
异常
SQL语句
IOC
AOP
Git Linux
你还有什么别的问题吗?
1. 具体业务与业务能力
编写用户注册接口时,前端需要弹出“注册成功!你好,${username}“,你的uid为 ${uid} ;这需要将包含uid的用户实体信息和 token 一起返回到前端,如何实现?
再单独做一个 Vo 实体类;或者使用 Cookie 等技术
讲讲项目中分页查询的实现,以及查询返回的数据是否能满足分页要求
需要返回 总共条数,总共 页数,分页粒度,当前页数,这样前端才好展示
如果引入会员系统,比如只有会员可以收到生日祝福,简述一下你的看法
用户进行权鉴设置
用户与好友的数据库关系
一个用户可以有多个好友,一对多;
一个好友可以有多个分组,一个分组也可以有多个好友,多对多。(所有人都问一遍)
+-------------+ +-------------+ +---------------+ | 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 | +-------------+
发信、写信、查看好友列表时,每个用户的好友都不同,那么如何获取当前登录用户的用户信息?
解析JWT Token,从中获取包含的用户信息。
如果本次作业最终会作为产品上线,你认为哪个部分是这个产品最有亮点的部分?
定时任务 定时发送 漂流瓶随机发送,或者其它自己的想法
2.开发技术基础
建议删除 Swagger 部分
项目的结构及其应用
(entity\mapper\service...)(entity\repository\service\controller)
知道Rest Api吗?GetMapping 和 PostMapping 有什么区别?
Rest API 不是必需的;但是 GET 和 POST 不能混用
知道token是什么意思吗?有哪些接口不需要token?
Token是一种在网络通信中用于身份验证和授权的令牌,通常是一串加密或者签名后的字符串,用于标识用户的身份信息和访问权限。
不需要Token的接口:例如网站的首页、注册页面等。
对于你的项目,你是如何进行测试的?了解单元测试吗?了解断点调试吗?
单元测试:
单元测试是针对代码中的最小单元进行测试,通常是单个函数、方法或者类的功能。
我会使用JUnit、SpringbootTest等单元测试框架编写单元测试用例,确保代码的各个部分按预期运行。
断点调试是一种在开发过程中定位和解决问题的重要工具,能够帮助开发人员逐步调试程序,查看变量的值、代码的执行路径等,快速定位和解决问题。(看看会不会断点调试)
swagger的优点( 1 节省了大量手写接口文档的时间,低成本低侵入性生成RESTful 接口文档 2 生成的接口文档可以直接在线测试,省去了使用 Postman 设置接口参数的过程,而且请求参数, 返回参数一目了然 )swagger在项目中的使用方式(引入依赖,编写配置类,在需要注释的地方写上注解描述,项目启 动后访问接口文档,在上面测试)
持久层CRUD:Mybatis & Jpa
涉及Jpa的 刘硕问;涉及Mybatis-plus的,Furry 问
结合其项目,问其一个具体的CRUD如何操作的,来检验对于JPA&Mybatis-plus的基本应用。
Mybatis的动态sql有什么用?执行原理是什么?
Mybatis 动态 sql 可以在 Xml 映射文件内,以标签的形式编写动态 sql,执行原理是根据表达式的值 完成逻辑判断并动态拼接 sql 的功能。
Mapper.xml 里的 resultType 是什么意思?
使用Mybatis过程中,如果你的用户主键为uid,那么在注册用户时,我们如何将实体类的主键uid返回到前端呢?
要回答最佳实践:到将id存到实体类或者java bean里。
具体操作见Mybatis主键回填,mybatis-plus自动完成了这个操作。
Mybatis的insert、update、delete方法会有一个返回值,是什么类型,什么含义?如果插入失败,是返回0还是报异常?
(int,改动数据的行数)(返回0)
MP的QueryWrapper是什么?为什么不推荐用?
(是一个用于构建条件查询的类,它可以帮助用户通过链式调用方法来构建复杂的查询条件,包括等于、不等于、大于、小于、模糊查询等等。)
(复杂性增加 查询效率慢)
Jpa的动态查询会吗(SpecificationSpring-Data-Jpa动态查询(Specification)_小马 同学的博客-CSDN博客)
讲讲jpa 查询API:Criteria API 以及Root,CriteriaBuilder,Predicate是什么意思?
3.数据库
3.1 数据库 SQL 基础语法【着重】
SQL左外连接和右外连接的区别 / 内连接和左外连接的区别
图解内外链接:链接
可以用Student实体 和 BoyGirlFriend实体进行讨论:查询所有学生信息顺便看看有没有对象(左外连接)/查询所有搞对象的顺便看看其学号(内连接)/查询所有搞对象的顺便看看是不是学生(根据Where语句判定是左外还是右外)
LIMIT的含义及用法
MySQL 方言,用于分页
SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询条目数
起始索引:从0开始
起始索引 = (当前页码 - 1)* 每页显示条数
Having 和 where 的区别
执行时间不一样:where分组之前 having 分组之后
可判断条件不同:where不能对聚合函数进行判断,having可以
SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定] GROUP BY 分组字段名 [HAVING 分组后条件过滤] ;
约束的种类及用法
非空约束 NOT NULL 唯一约束 UNIQUE 主键约束 PRIMARY KEY 默认约束 DEFAULT 外键约束 FOREIGN KEY
说几个你知道的聚合函数,以及他的功能
SELECT sex, avg(math),count(*) FROM .... 还有max、min、sum 等等
4. Java基础 着重提问
加强 Java 基础,尤其是与内存、对象、引用相关的基础;以及第 1.5 阶段作业
Java有几种集合(主要有 3 种:set(集)、list(列表包含 Queue)和 map(映射)) 集合中能够存储基本类型数据吗(不可以,集合不允许存储基本类型的数据,只能存储引用类型的 数据,也就是包装类)
【新增】Java 程序从源代码到运行的过程了解吗?你觉得 Java 是编译型还是解释型语言?
【新增】用过 Java 的哪几种基本数据类型?int 类型占了多少字节,多少位?
【新增】Java 的静态方法了解吗?静态方法可以调用非静态成员吗?为什么?
【新增】深拷贝和浅拷贝区别;
【新增】你知道你创建的对象和声明的变量存在哪里了吗?内存区域栈内存和堆内存都存什么东西?有什么区别?(不用深入问到 JVM 内存区域,大致了解即可)(误区:基本数据类型都是存放在栈内存里吗?)
【新增】了解对象的可变性(Mutable)与不可变(Immutable)吗?你觉得 String 字符串的拼接过程中,对象引用的改变过程是怎么样的?
【新增】Java 方法中,实参是值传递还是引用传递呢?
【新增】Java 的 == 和equals()方法有什么区别?
总的来说,== 操作符用于比较对象的引用是否相同,而 equals() 方法用于比较对象的内容是否相同。
Java的泛型是什么?
(Java中的泛型是一种参数化类型的机制,可以让代码更加通用和安全。通过 使用泛型,可以定义一些带有类型参数的类、接口、方法等,以达到编写通用代码的目的。)
Java 三大特性(封装、继承、多态) ,如果说四大特性,多一个抽象
“int 和 Integer的区别是什么”(一个是基本数据类型,一个是包装类) 使用包装类有什么好处?
( 1,包装类型可用于泛型,可以添加进集合,而基本类型数据不可以。 2,包装类可以为null 3.包装类提供了用于操作的方法,如String.parseInt,而基本类型数据没有)
自动装箱和拆箱?
( 什么是自动拆装箱? 装箱:将基本类型用它们对应的引用类型包装起来; 拆箱:将包装类型转换为基本数据类型; ps:自动装箱是通过 Integer.valueOf() 完成的;自动拆箱是通过 Integer.intValue() 完成的 ) Integer i = 10; //装箱 int n = i; //拆箱
什么是Java的反射?
(运行时获取对象所属类的字段、方法、构造方法,且可以在程序运行时动态地调 用这些方法和构造函数。)
你在项目中有哪些注解的应用
在编译时进行格式检查,比如:@Override放在方法前。
在Spring框架 中,注解用来描述依赖注入、事务管理、AOP等行为。
在JUnit测试框架中,注解用来描述测试方法、测 试类、测试套件等。
在JPA持久化框架中,注解用来描述实体、关联关系、查询等。
项目中你是如何处理异常的?(try catch?全局?throw手动抛出?throws?)可以解释一下吗? 你对Java异常处理机制的理解?为什么需要
(Java采用的异常处理机制,是将异常处理的程序代码集中在 一起,与正常的程序代码分开,使得程序简洁、优雅,并易于维护。 在编写程序时,经常要在可能出现错误的地方加上检测的代码(ifelse),过多的if-else分支会导致程序 的代码加长、臃肿,可读性差。因此采用异常处理机制。)
java需要事务的场景(刘硕问)
(一个方法内多个增删改操作)
spring有哪两种事务管理方式(编程式事务和声明式事务) 声明式事务的实现是基于什么(AOP)
5.git基础&Linux基础
git部分
如何解释 git push origin dev 如何给远程仓库起别名
git remote add 别名 远程地址
如何处理git 冲突 (刘硕问 IDEA)
简述git的工作流程。 如果有讲到git status,询问该指令的作用。
git在本地的工作区域是哪三个,分别是哪三个,其中仓库区和暂存区在哪个目录下
( 工作区:平时放代码的地方,
仓库区:这里面有你提交到所有版本的数据,这个目录里面的所有文件都可以被Git管理起来,每个 文件的修改,删除,Git都能跟踪
暂存区:用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息,一般存放 在 .git 目录下的 index 文件
仓库区和暂存区一般在.git目录里)
linux部分
如何配置mysql 远程连接
在Linux命令行上如何创建java文件,打印Hello World?
如何后台运行的jar包及查看运行日志(nohup的命令启动jar,tail -fn 200 nohup.out)
6. Spring IOC
多考察一些关于 Bean 使用的知识点。
IOC:
简要介绍IOC及其优点
(控制反转、将创建对象的控制权交给了IOC容器,从而使程序员不用关注如何去创建对象,而是把精力放在业务逻辑上)
什么是 Spring Bean?
Bean就是在Spring容器中被管理、被配置和被组装的对象。
可重用性:Spring Bean可以被其他组件引用和重用,提供了一种有效的组件化和模块化的方式。
生命周期管理:Spring容器负责管理Bean的生命周期,包括创建、初始化、使用和销毁等阶段。可以通过配置和自定义来管理Bean的生命周期。
依赖注入:Spring容器通过依赖注入的方式将Bean注入到其他Bean中,实现了对象之间的解耦。
AOP支持:Spring框架提供了AOP(面向切面编程)的支持,可以通过配置将切面逻辑织入到Bean的生命周期中。
【新增】将一个类声明为 Bean 的注解,你用到了哪些?
【新增】@Component 和 @Bean 的区别是什么?
依赖注入相关注解
(@Autowired:自动按类型注入,如果有多个匹配则按照指定Bean的id查找,查找不到会报错。 @Qualifier:在自动按照类型注入的基础上再按照Bean的id注入,给变量注入时必须搭配@Autowired, 给方法注入时可单独使用。 @Resource:直接按照Bean的id注入,只能注入Bean类型。 @value:用于注入基本数据类型和String类型)
@Autowired 先按类型 再按名称
@Resource 先按名称 后按类型
使用
@RequiredArgsConstructor
的要细问这个注解。
查阅lombok相关文档,机器翻译:这里列出的任何注释都会放在生成的构造函数上。
实际上应该为
@RequiredArgsConstructor(onConstructor_={@Autowired})
(Java8之后)这里为什么省略了
@Autowired
?因为本身构造方法注入时可以省略。public GetMailboxServiceImpl(GetMailboxMapper getMailboxMapper,FriendMapper friendMapper){ this.getMailboxMapper = getMailboxMapper; this.friendMapper = friendMapper; }
AOP:(23级是作为加分项的,如果说了就问)
简要介绍AOP
AOP 常见概念:
通知: 就是我们编写的希望Aop时执行的那个方法。我们通过Aop希望我们编写的方法在目标方法执行前执行,或者执行后执行。
切点:切点就是我们配置的满足我们条件的目标方法。比如我们规定:名字前面是select开头的才执行我们自定义的通知方法。那么这些select开头的方法就是切点。
连接点:连接点可以说是切点的全集。切点是连接点的子集。也可以理解为,连接点是我们没有定义那个select开头规则时,满足条件的全部的方法。
切面:切面是切点和通知的组合称谓,就是变相给组合起了个名字。
AOP常用注解
( @Aspect:声明被注解的类是一个切面Bean。 @Before:前置通知,指在某个连接点之前执行的通知。 @After:后置通知,指某个连接点退出时执行的通知(不论正常返回还是异常退出) @AfterReturning:返回后通知,指某连接点正常完成之后执行的通知,返回值使用returning属性接 HI. @AfterThrowing:异常通知,指方法抛出异常导致退出时执行的通知,和@AfterReturning只会有执行,异常使用throwing厲性接收 @Around:表示这些方法将在其周围执行通知(Advice)。)
7.难题与八股 非必要不问
知道Lambda表达式吗?Lambda表达式是哪个版本引入的,使用了什么编程思想?
Java8 函数式编程 函数是一等公民,可以作为参数传递给其他函数,也可以作为返回值返回。)
如果这个项目没有接口文档,只告诉你某个部分有bug需要修改,现在学长通过F12浏览器控制台告诉你这个接口的url ,那么如何快速的定位相关问题?
Ctrl + Shift + F 全局搜索
查看后端日志
在最终生产环境中,我们的服务器操作系统一般为?为什么我们的Java Springboot程序既可以在Windows运行,也可以在Linux运行?
(Java虚拟机(JVM)提供了一个独立于操作系统的运行环境,它可以在任何支持Java的操作系统上运行Java应用程序。)
Java 抽象类与接口的区别?
抽象类:
抽象类可以包含抽象方法和非抽象方法。
抽象类可以有构造方法,但是不能被实例化。
子类继承抽象类时,必须实现所有抽象方法,除非子类也是抽象类。
一个类只能继承一个抽象类。
接口:
接口只能包含常量和抽象方法,所有方法默认是抽象的。
接口中的字段默认是
public static final
的,方法默认是public abstract
的,可以省略不写。一个类可以实现多个接口。
接口之间可以通过 extends 关键字进行继承。
主要区别在于:
设计目的:抽象类是对一类对象的抽象,它包含了子类的通用特性,而接口是一种行为的抽象,描述了一类对象的行为。
使用方式:抽象类用于创建一种具体的基类,而接口用于定义一种规范,实现这个规范的类需要提供相应的实现。
介绍一下Java static / final / abstract 标识符。
Java 有4种访问控制权限,有哪四种,都有什么区别?
private 本类 protected 本子类 default 本包 public
Controller注解和RestController有什么区别?有没有@ResponseBody又有什么区别?(返回响应体/返回视图)
返回响应体:
返回响应体意味着直接返回数据给客户端,通常是以某种格式(如JSON、XML等)组织的数据。
响应体可以包含任何类型的数据,通常用于构建RESTful服务,前端通过解析响应体来获取数据并进行展示或者处理。
返回响应体的常见场景包括RESTful API、Ajax请求等。
返回视图:
返回视图意味着返回一个由视图解析器解析的模板或页面给客户端。
视图通常是HTML、JSP、Thymeleaf等模板引擎生成的页面,包含了页面的结构、样式和交互逻辑。
返回视图的常见场景包括传统的Web应用程序,客户端通过浏览器来访问页面。