
🌈 个人主页: Hygge_Code
🔥 热门专栏:从0开始学习Java | Linux学习| 计算机网络
💫 个人格言: "既然选择了远方,便不顾风雨兼程"

文章目录
- 前言
- 面试题
-
- [请介绍你在项目中使用的 Spring Boot 框架的优势和适用场景](#请介绍你在项目中使用的 Spring Boot 框架的优势和适用场景)
-
- [Spring Boot的优势](#Spring Boot的优势)
- [Spring Boot 的适用场景](#Spring Boot 的适用场景)
- [什么是 MyBatis-Plus ?它有什么作用?它和MyBatis有哪些区别?](#什么是 MyBatis-Plus ?它有什么作用?它和MyBatis有哪些区别?)
- 你是如何通过继承定制通用操作模版,从而提高开发效率
- 你在项目中是如何自定义错误码的?
- 介绍一下你部署项目的操作流程
- 什么是代理和反向代理?二者有什么区别?
前言
本文是对第一次练手项目(用户中心项目)的部分面试题总结
面试题
请介绍你在项目中使用的 Spring Boot 框架的优势和适用场景
Spring Boot的优势
- 快速开发和简化配置:Spring Boot采用了约定大于配置的原则,减少了繁琐的配置,提供了自动配置和起步依赖,让开发人员能够更快速地搭建应用程序
- 内嵌Web容器:Spring Boot内置了常见的Web容器,如Tomcat、Jetty和Undertow,这意味着你可以将你的应用程序打包成一个独立的JAR文件,而无需外部的Web服务器
- 自动配置:Spring Boot根据项目的依赖自动配置应用程序的组件,大大减少了手动配置的工作,提高了开发效率
- 生态系统支持:Spring Boot整合了Spring框架的各个模块,如Spring MVC、Spring Data、Spring Security等,可以轻松构建全栈应用
- 监控和管理:Spring Boot提供了丰富的监控和管理功能,包括健康检查、性能指标、远程Shell等,有助于更好地管理和维护应用程序
- 适用于微服务架构:Spring Boot是构建微服务架构的理想选择,它可以轻松地构建独立的服务,而且与Spring Clud等微服务相关的工具集成得很好
- 大型社区支持:Spring Boot有一个庞大的开发者社区,提供了丰富的文档、教程和第三方库,便于开发人员解决问题和分享经验
Spring Boot 的适用场景
- web应用程序开发:Spring Boot适用于构建各种类型的Web应员工程序,包括单页应用、多页应用、RESTful API等
- 微服务框架:Spirng Boot可以用于构建微服务应用,每个微服务可以独立开发、部署和管理
- 批处理应用程序
- 云原生应用
- 企业级应用程序:Spring Boot提供了大量的企业级特性,如事务管理、安全性、缓存、消息队列等,适用于构建复杂的企业级应用
什么是 MyBatis-Plus ?它有什么作用?它和MyBatis有哪些区别?
MyBatis 是一个班 ORM(对象关系映射)框架,它内部封装了JDBC,使用它后,开发者只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement 等繁杂的过程,提高开发效率。
MyBatis-Plus是MyBatis的增强版框架,它对MyBatis进行了二次封装,只做增强不做改变。通过提供一系列的API方法和代码生成器,使重复的CRUD操作更加简单,无需手动编写SQL语句,从而大幅提高开发效率
此外,还有其他有点,比如:
- 提供了条件构造器,可以通过编程构建复杂的查询条件,无需编写繁琐的SQL语句
- 提供了分页查询支持,无需手动编写分页逻辑
- 提供了一个代码生成器工具,可以根据数据库自动生成Java实体类、Mapper接口 和 XML映射文件,减少了手动编写的工作量
使用 MyBatis-Plus前,需要自己编写 SQL Mapper映射文件和语句:
xml
<!-- userMapper.xml -->
<mapper namespace="com.demo.dao.UserMapper">
<select id="getUserById" parameterType="java.lang.Integer" resultType="com.demo.entity.User">
select * from t_user where id=#{id}
</select>
</mapper>
使用MyBatis-Plus后,定义接口继承BaseMapper接口并调用
其中提供的现成方法即可:
xml
public interface UserMapper extends BaseMapper<User> {
}
你是如何通过继承定制通用操作模版,从而提高开发效率
在开发项目过程中,我发现很多功能和代码是独立于具体的业务逻辑的,比如:
- 给每个请求的返回值增加code、message和data字段
- 在全局异常处理器中统一处理项目的异常,防止代码错误细节暴露在外,同时优化用户体验
- 跨域的处理、长整数丢失问题的解决等
为了避免每次开发时手动引入重复的依赖、或者编写重复的代码,我把这些重复的功能独立抽取为了一套自己的通用项目模板。
其中,我使用MyBatis Plus框架开发数据访问层,在自己开发Service业务操作代码时,继承了MyBatis Plus提供的通用IService接口,从而复用对数据库的基本增删改查操作代码,不用手动编写重复的操作,大幅提高了开发效率。

你在项目中是如何自定义错误码的?
通过自定义一个枚举类来集中定义错误码。
该枚举类提供code、message、description三个属性,并且提供一个默认的构造函数用于创建枚举。
其中,我对错误码的整型定义是有讲究的,参考真实的HTTP状态码将错误进行分类,并且将错误码的前3位前缀定义为和对应含义的状态码相同,比如HTTP状态码400表示客户端请求参数错误,那么我在定义一个客户端请求参数的错误码时,code为40000,示例代码为:
java
PARAMS_ERROR(40000, "请求参数错误", "具体描述"),
这样不仅"见码知义",同时5位数的错误码能够预留一定的扩展空间,保证拥有相同HTTP前缀的错误码可以定义100个。
在抛出异常时,可以传入特定的错误码枚举值作为参数,并且将错误码枚举的message的description属性作为异常类的message,简化抛出异常的代码。

介绍一下你部署项目的操作流程
以宝塔Linux原生部署为例:
- 购买云服务器
- 安装和初始化宝塔Linux面板
- 在宝塔面板中安装项目部署依赖软件,比如jdk、mysql、nginx、tomcat、Java项目管理器等
- 把本地的数据同步到宝塔安装的线上数据库
- 后端:使用Java项目管理器,添加ava项目,把本地mvn package命令打好的jar包上传到Liux服务器,配置启动参数和激活配置(prod),点击"启动"即可。
- 前端:上传本地打包好的dist网站静态文件目录到服务器,然后配置Ngix指向文件目录路径,即可访问前端静态文件。
- 在Nginx配置反向代理,请求服务器P(或域名时)+后端路径(/api)时,请求转发到服务器内的实际后端服务端口(比如localhost:8080)。
- 在服务器运营商提供的界面和宝塔面板界面中开启防火墙的80端口
什么是代理和反向代理?二者有什么区别?
二者服务的对象和目的不同:
-
正向代理 是指有一个中间服务器代替客户端发送请求到目标服务器,目标服务器不知道客户端的存在,可以用于保护客户端的安全隐私、加速访问等。
-
反向代理 是指有一个中间服务器代替目标服务器去接受客户端的请求,客户端并不知道目标服务器的存在,可以用于负载均衡、保障服务器的安全性。
如果我的内容对你有帮助,请 点赞 , 评论 , 收藏 。创作不易,大家的支持就是我坚持下去的动力!
