面试题 -- 用户中心项目


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

文章目录

前言

本文是对第一次练手项目(用户中心项目)的部分面试题总结

面试题

请介绍你在项目中使用的 Spring Boot 框架的优势和适用场景

Spring Boot的优势

  1. 快速开发和简化配置:Spring Boot采用了约定大于配置的原则,减少了繁琐的配置,提供了自动配置和起步依赖,让开发人员能够更快速地搭建应用程序
  2. 内嵌Web容器:Spring Boot内置了常见的Web容器,如Tomcat、Jetty和Undertow,这意味着你可以将你的应用程序打包成一个独立的JAR文件,而无需外部的Web服务器
  3. 自动配置:Spring Boot根据项目的依赖自动配置应用程序的组件,大大减少了手动配置的工作,提高了开发效率
  4. 生态系统支持:Spring Boot整合了Spring框架的各个模块,如Spring MVC、Spring Data、Spring Security等,可以轻松构建全栈应用
  5. 监控和管理:Spring Boot提供了丰富的监控和管理功能,包括健康检查、性能指标、远程Shell等,有助于更好地管理和维护应用程序
  6. 适用于微服务架构:Spring Boot是构建微服务架构的理想选择,它可以轻松地构建独立的服务,而且与Spring Clud等微服务相关的工具集成得很好
  7. 大型社区支持:Spring Boot有一个庞大的开发者社区,提供了丰富的文档、教程和第三方库,便于开发人员解决问题和分享经验

Spring Boot 的适用场景

  1. web应用程序开发:Spring Boot适用于构建各种类型的Web应员工程序,包括单页应用、多页应用、RESTful API等
  2. 微服务框架:Spirng Boot可以用于构建微服务应用,每个微服务可以独立开发、部署和管理
  3. 批处理应用程序
  4. 云原生应用
  5. 企业级应用程序:Spring Boot提供了大量的企业级特性,如事务管理、安全性、缓存、消息队列等,适用于构建复杂的企业级应用

什么是 MyBatis-Plus ?它有什么作用?它和MyBatis有哪些区别?

MyBatis 是一个班 ORM(对象关系映射)框架,它内部封装了JDBC,使用它后,开发者只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement 等繁杂的过程,提高开发效率。

MyBatis-PlusMyBatis的增强版框架,它对MyBatis进行了二次封装,只做增强不做改变。通过提供一系列的API方法和代码生成器,使重复的CRUD操作更加简单,无需手动编写SQL语句,从而大幅提高开发效率

此外,还有其他有点,比如:

  1. 提供了条件构造器,可以通过编程构建复杂的查询条件,无需编写繁琐的SQL语句
  2. 提供了分页查询支持,无需手动编写分页逻辑
  3. 提供了一个代码生成器工具,可以根据数据库自动生成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> {
}

你是如何通过继承定制通用操作模版,从而提高开发效率

在开发项目过程中,我发现很多功能和代码是独立于具体的业务逻辑的,比如:

  1. 给每个请求的返回值增加code、message和data字段
  2. 在全局异常处理器中统一处理项目的异常,防止代码错误细节暴露在外,同时优化用户体验
  3. 跨域的处理、长整数丢失问题的解决等

为了避免每次开发时手动引入重复的依赖、或者编写重复的代码,我把这些重复的功能独立抽取为了一套自己的通用项目模板。

其中,我使用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原生部署为例:

  1. 购买云服务器
  2. 安装和初始化宝塔Linux面板
  3. 在宝塔面板中安装项目部署依赖软件,比如jdk、mysql、nginx、tomcat、Java项目管理器等
  4. 把本地的数据同步到宝塔安装的线上数据库
  5. 后端:使用Java项目管理器,添加ava项目,把本地mvn package命令打好的jar包上传到Liux服务器,配置启动参数和激活配置(prod),点击"启动"即可。
  6. 前端:上传本地打包好的dist网站静态文件目录到服务器,然后配置Ngix指向文件目录路径,即可访问前端静态文件。
  7. 在Nginx配置反向代理,请求服务器P(或域名时)+后端路径(/api)时,请求转发到服务器内的实际后端服务端口(比如localhost:8080)。
  8. 在服务器运营商提供的界面和宝塔面板界面中开启防火墙的80端口

什么是代理和反向代理?二者有什么区别?

二者服务的对象和目的不同:

  • 正向代理 是指有一个中间服务器代替客户端发送请求到目标服务器,目标服务器不知道客户端的存在,可以用于保护客户端的安全隐私、加速访问等。

  • 反向代理 是指有一个中间服务器代替目标服务器去接受客户端的请求,客户端并不知道目标服务器的存在,可以用于负载均衡、保障服务器的安全性。


如果我的内容对你有帮助,请 点赞 , 评论 , 收藏 。创作不易,大家的支持就是我坚持下去的动力!

相关推荐
程序员敲代码吗2 分钟前
如何通过命令行启动COMSOL的参数化、批处理和集群扫描
java·c#·bash
MX_93597 分钟前
Spring的bean工厂后处理器和Bean后处理器
java·后端·spring
蒟蒻的贤8 分钟前
yolo12结构学习
学习
市场部需要一个软件开发岗位24 分钟前
JAVA开发常见安全问题:纵向越权
java·数据库·安全
历程里程碑36 分钟前
普通数组----合并区间
java·数据结构·python·算法·leetcode·职场和发展·tornado
程序员泠零澪回家种桔子1 小时前
Spring AI框架全方位详解
java·人工智能·后端·spring·ai·架构
●VON1 小时前
CANN推理引擎:从云端到边缘的极致加速与部署实战
学习·react native
CodeCaptain1 小时前
nacos-2.3.2-OEM与nacos3.1.x的差异分析
java·经验分享·nacos·springcloud
笔画人生1 小时前
深度解析 CANN 项目:以 `ops-transformer` 为例探索高性能 AI 算子库
学习·开源
AI视觉网奇2 小时前
3d数字人 ue blender 绑定衣服对齐 2026
学习·ue5