问题答疑

1.前端

1.1 项目对应的版本及所需安装的软件

  • nodejs 使用 v16 版本,大于 16.14,可以下载 nvm(Node.js 版本管理工具)来切换多个不同的 Node.js 版本。
  • JDK 使用 1.8 版本
  • Spring Boot 使用 2.x 版本
  • 要下载 git(git 安装教程)

推荐工具 —— 切换和管理 node 版本的工具

注意: 如果版本不对,一定会在启动、初始化出现问题🐶 鱼友们一定要更改版本或下载对应软件,再进行项目编写。

1.2 为什么标签显示错误?

单引号的问题,json.parse 标准格式应该是单引号包裹双引号的格式,可以把 tags 数组内部的字符串统一为双引号。

1.3 为什么 toast 样式丢失?

ab77daac-06f0-41d0-8d55-1dcf106697f2-b003ff4d

改为: import'vant/lib/index.css'

// https://vitejs. dev/config/

export default defineConfig({

  plugins: [vue(),

  Components({

    resolvers: [VantResolver()],

  }),

  ],

})

改为

// https://vitejs.dev/config/

export default defineConfig({

  plugins: [vue(),

    Components({

    resolvers: [VantResolver({

      importStyle: false,

    }

    )],

  }),

  ],

})

1.4 为什么搜索框没有应用样式?

698bea14-2312-4886-a1b3-5dab0ff76530-0d2df7c8

样式没有引入,仔细检查代码。

1.5 为什么使用 toast 组件报错?

新版本的 vantUI 成功用 showSuccessToast(),失败用 showFailToast()。

1.6 为什么初始化文件、命令与回放中不一致?

因为本项目使用的前端框架 Ant Design Pro 在持续更新,如果在按照视频进行操作时遇到错误,请务必参考官方最新文档中的初始化命令。如果仍然存在报错情况,可以尝试以下步骤:

  • 首先,检查官方文档中的命令和用法,或切换文档版本为和视频一致的。
  • 如果仍然遇到报错,可以将错误信息复制并粘贴到百度搜索中进行查询。
  • 如果问题依然存在,可以前往框架的 Github Issues 区域搜索相关问题(比如:Issues · ant-design/ant-design-pro · GitHub)。大多数情况下,你遇到的问题已被其他开发者提出,并且可能已经有了解决方案。

运用以上方法,希望鱼友可以更灵活地解决遇到的问题。请记住,任何教程都有保质期,通过学会阅读官方文档和积极自主解决问题,才能在编程学习中突破难,使学习旅程不受任何困扰ヾ(´・ω・`)ノ

1.7 为什么页面只有文本,格式乱码(或组件紧凑在一起)?

c0e06d32-4efc-4729-b6c3-6dcc37934171-dfe8b2a8

在 main.ts 引入 'vant/lib/index.css' 后,把其他的样式文件都删了。

1.8 为什么前端导航栏样式居中重叠、组件偏移、组件没有应用上样式?

3f60928d-2e3e-4e20-9c1e-48f43a61e267-11319106

注释掉(或删除)在 main.ts 中的import./style.css

1.9 为什么在用户列表页,按照标签搜索后,后端数据正常返回,但页面卡住,一直处于加载状态?

ebb77705-2314-4c1a-9d0c-ba9d2d86d31b-3bc43c57

在图示位置加 :loading="loading",并在下面定义一个变量const loading = ref(true);

442efa2e-c545-4a31-a1a5-80336237138c-55f087ef

在红线处加loading.value = false;

bfe45dc5-0a2b-4c93-8d89-9d37fd5662fe-f0ed1dd7

1.10 vant 4 的 data-picker、time-picker 和 vant 3 的 datetime-picker 组件产生的相关问题

<van-field

  is-link

  readonly

  name="datetimePicker"

  label="过期时间"

  :placeholder="addTeamData.expireTime??'点击选择过期时间"

  @click="showPicker = true"

1>

<van-popup v-model:show="showPicker" position="bottom">

<van-datetime-picker

  v-model="addTeamData.expireTime"

  @confirm="showPicker = false"

  type="datetime"

  title="请选择过期时间"

  :min-date="minDate"

/>
<van-field

  is-link

  readonly

  name="datetimePicker"

  label="过期时间"

  :placeholder="currentDate[0] + '-' + currentDate[1] + '-' + currentDate[2]

  +''+ currentTime[0]+':'+ currentTime[1]??'点击选择过期时间"

  @click="showPicker = true"

/>

<van-popup v-model:show="showPicker" position="bottom">

<van-picker-group

  title="请选择过期时间"tabs="['选择日期”,‘选择时间]”

  next-step-text="下一步"

  @confirm="showPicker = false"

  @cancel="onCancel"

  <van-date-picker

  V-model="currentDate"

  :min-date="minDate"

/>

	<van-time-picker v-model="currentTime"/>

</van-picker-group>

1.11 为什么引入按钮组件报错:Internal server error:failed to resolve import ".../node_module..." file exist?

在 vite.config.js 文件中解析至正确路径。

vant 官网的代码如下:

21566ebc-875b-45e4-addf-1e29fd2d23bc-5e68d293

在 stylelmport 内添加代码块:

ced5fbd4-8981-453d-9808-c99599abd084-31698913

完整代码:

71c402b6-ce4e-4eac-9497-db3d4c747c6c-32ef2dce

修改后,重新运行 vite。

解决参考:https://blog.csdn.net/weixin_42099193/article/details/123376127

1.12 为什么引入 qs 进行序列化之后(或根据 tags 查询用户) myAxios 出现 AxiosError: options must be an object ERR_BAD_OPTION_VALUE?

axios版本不一致,需要修改为 1.x 版本写法。

1.13 初始化用 vite 构建项目,为什么 main.js 找不到?

指定一下 module 里引入地址即可。

3c3df594-c7e8-4da1-907c-c454df74ab20-02c22eb4

1.14 为什么登录后界面配置不生效?

caa07e1e-205f-4f1c-ac15-2f77c129d59b-7e9af658

应该是 src/app.tsx 中使用到了 settings 属性,但鱼总修改时删掉了原来的 settings 属性。

1.15 前端拉取鱼总的代码,为什么前端一直不显示?

有可能是依赖问题,重新安装依赖。

1.16 前端拉取鱼总的代码,为什么运行没有登录页面,直接显示主页?

看下路由文件,确认登录页面的地址即可。

1.17 为什么 toast 引入 popup 之后,只显示白色?

76991e19-1e18-45e7-8848-84bca73af754-c818fc46

1.18 为什么在调试控制台使用安装依赖命令失败?

要在终端使用安装依赖的命令。

1.19 为什么 Dialog.componemets 失效?

可以看官网:https://vant-ui.github.io/vant/#/zh-CN/dialog#zu-jian-diao-yong

在 script setup 中导入import { Dialog } from 'vant'; 然后加入 const VanDialog = Dialog.Component;

1.20 为什么重装 node、yarn,无法用脚手架?

可能安装路径存在空格,修改或卸载重装。

1.21 为什么 onClickLeft、onClickRight、active、onChange 已经使用过了,代码还是显示灰色的?

852c95e7-6f59-4f07-9bb4-83c0638a4679-9cd2e924

没有使用 setup 语法糖的话 就需要手动返回数据,或者 setup 语法糖 ,这是 vue3 的语法。

1.22 为什么第 2 次回放中最后提交修改数据返回给后端的值没有具体展示?

可能是打印问题,请使用 consloe.log('values-->o%',values)。

1.23 为什么出现 user.username undefined?

添加 user?.username。

c25698dc-65a6-47cc-ada2-337b2f51cdb9-087fd163

1.24 为什么用标签搜索用户,后端返回的标签数据格式错误?

71abfe80-8cea-43ce-bb23-7545840d8c20-3f3988ff 26c99f33-5170-4e1f-b99d-45780f77ed04-d0bc2e34

后端返回的 tags 必须是数组,而不是字符串。

1.25 前端拉取鱼总的代码,为什么登录请求直接报 403?主页推荐功能也能正常访问到后端,就是登录访问不了?

可能是后端没有配置跨域注解。

1.26 为什么前端初始化,显示 Failed to get response from http://registry.npm.taobao.org/...?

#淘宝最新

npm config set registry https://registry.npmmirror.com

#阿里云

npm config set registry https://npm.aliyun.com

#腾讯云

npm config set registry http://mirrors.cloud.tencent.com/npm/

#华为云

npm config set registry https://mirrors.huaweicloud.com/repository/npm/

2.后端

2.1 为什么后端初始化启动显示 java:错误:无效的源发行版:17?

首先点击锤子旁边的矩形的倒三角,会出现一个下拉框,点击 Edit Configurations。

322a06d2-0b9d-4443-9047-3fcc6f39cc85-35961607

把 Build and run 下面的改成 java 8(注意不是 18)。

d314878b-4f86-401f-a7cd-550616d69a87-e5bb2723

点击 File -> settings ->图片中的选项,将 Target bytecode version 改成 8,project bytecode version 改成 8。

8dac28c1-924f-4b51-bfba-d32306c5b0f4-7550fa92

点击 File -> project Structrue 将project,modules 改成 java 8

2d4097c7-71d6-47d6-b106-30422a77563f-2cd33082

将上述地方改成相同 JDK。

如果还是显示无效的源发行版:18,只能说明 Maven 上的依赖不对(在pom文件里),再调一个依赖,一定记得要刷新 maven,不然改了之后没用。

006f421d-cfa9-49f9-b7c7-901d56a70e45-23b23716

请参考这篇文档:文档

2.2 为什么 idea 右侧 maven 菜单消失?

  • help
  • 或者右键 pom.xml 然后 add as maven project

2.3 为什么编写后端接口,生成的单元测试方法提示 no test found?

1)测试文件名或位置不正确

2)依赖缺失或不正确

2.4 为什么创建测试类,插入数据时会报错?

fffe04d9-750a-4d08-85b8-23566e0c2884-83678f48

因为 junit 要用 5 的版本

6b0a56d7-c4f3-40bb-965d-b50bd4abb92a-10f3f7f1

2.5 直接拉取后端代码,为什么请求登录的数据为空呢?

两种方法:

1)数据库的密码是加密的,写个测试类,打印出密码的密文,再存入数据库中的用户表(手动创建用户)1806613115223461889_0.14535238414417972

2)用注册接口注册一个账号

2.6 为什么无法连接本地 redis?

e4128c6a-095b-4671-a08e-39534df76698-4b82be8a

2.7 为什么插入时间会自动 +8 小时?

可以配置下 mysql 默认时区信息看看:

/etc/my.cnf

[mysqld]

default-time_zone = '+8:00'

或者:

在 Date 字段上加上@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")

2.8 为什么提交修改数据返回给后端的值没有具体展示?

6807f3a6-c0b9-4519-9539-68d0969ebd5a-c61ae485

逗号原因。

2.9 为什么 json 解析失败?

数据库 tags 字段有脏数据,排查一下。

2.10 为什么查不到相关数据就会报错,比如查询队伍,只要输入的不是能查到的内容就会产生后端报错?

加上判空(if(CollectionUtils.isNotEmpty(teamList)))

8876c689-2f1a-4872-a786-6071b81e4ebb-43411308 c347745a-3fb6-46dd-8148-a09bdb93571a-64e7fc0d

2.11 为什么用编辑距离算法从 ["html/css","大三","男"] 到 ["html/css","大三","男"] 计算距离为 2?

在开始计算的时候先给两个列表排序即可。

c6015700-3e30-4d01-8518-0bf76c383216-043d7f55

2.12 为什么引入 redisson,在测试类进行测试后报错 java.lang.IllegalStateException: Failed to load ApplicationContext?

把 redisson 版本降为 3.17.0。

3.部署&上线

3.1 为什么部署项目之后,登录页面 404?

推荐使用宝塔部署,可以查看用户中心项目最后两期回放学习部署上线操作。

登录页面显示 404 错误,通常意味着服务器无法找到你请求的页面。

1)检查 URL:确保你输入的 URL 是正确的。对比一下你的部署 URL 和本地开发 URL,看看是否有差异。

2)检查文件路径:确认你的登录页面文件是否在正确的位置,并且确保文件名、大小写等都是正确的。

3)检查服务器配置:如果你使用的是 Web 服务器,那么需要查看服务器的配置,确保服务器知道如何处理你的请求。

4)查看服务器日志:服务器的错误日志可能会给出关于问题的更多信息。

5)检查权限:确保服务器有权限访问和执行你的登录页面。

解决参考:

https://www.cnblogs.com/galo/p/17091892.html

https://blog.csdn.net/u010457326/article/details/128246426

https://blog.csdn.net/qq_45029459/article/details/129014641

3.2 为什么项目部署上线后,明明已经登录成功,但获取的用户都为空,总是显示未登录?

b751961f-7693-4e98-94d7-5ae8aae167a5-8db04dd2

就是出现了跨域请求,但浏览器默认的 SameSite=Lax 是不支持跨域下 cookie 操作的,因此无法设置 cookie。

1)后端设置SameSite属性为“none”。

2)有域名的话要配成一级域名,不能用二级域名

3)设置浏览器,下载插件解决。

解决参考:https://juejin.cn/post/7073447264756170765#heading-7

如果插件坏了,在SpringBoot写一个配置类去配置SameSite=Lax。

3.3 后端关于 springboot 的 server.servlet.session.cookie.domain 域定位怎么设置?

543b73df-f72d-4f22-91b3-0e8c996cdfe0-c1f49696

3.4 为什么上线报安全警告?

0fe4ab77-03ae-45b8-8cf5-ebe417ef0954-e49f2cf8

可能没有对接口进行安全验证,检查漏洞在哪里,或许是没对端口加身份校验。

3.5 为什么本地跑 jar 包没有问题,放服务器跑就有问题?

仔细检查代码,可能是引入的包引入错误。

24b8065e-0dfb-42a1-95bb-0d5285b8bf4b-31119f96

3.6 为什么后端配置了 @CrossOrigin 注解还是会报错?

在后端的 @CrossOrigin 注解加 allowCredentials="true"。

6c6b8aeb-1120-4c12-9343-5504934dfb10-46a516f6

3.7 为什么上线之后 session 可以存到 redis,但是拿不到呢(或 axios 携带 cookie 到后端,为什么无法携带 cookie、直接出现跨域问题)?1806613115223461889_0.9079900267617886

在 domain 写成自己的域名即可。prod 的 yml:

3d0ffd24-2da2-4370-86f9-ca21c211f063-65f00415

需要申请SSL证书,有了 SSL 证书,我们的域名就成了 https 的。

e02eacaf-ae9c-41e3-b43f-74901597de4b-1bfd7060

不想申请 SSL 证书了。

3.8 为什么只有 localhost 请求会携带 cookie,127.0.0.1 访问不会携带 cookie?

前后端域名必须一致或者匹配才会带上 cookie。

3.9 为什么用 vite build 打包出的 dist 目录在终端 serve 模式下启动后,主页数据显示不出来?

props 前面不能加 this。

3.10 为什么 swagger 文档报错,显示文件请求异常?

未在主类上面加上「@EnableSwagger2WebMvc」注解。

spring:

	mvc:

		pathmatch:

			matching-strategy: ANT_PATH_MATCHER

3.11 使用 javafx 包为什么会出现 javafx.util.Pair 错误?

服务器 java 版本过低(低于 1.8)。

服务器安装定义 java8 参考:https://abing.run/archives/baotainstalljdk

推荐,直接上传到服务器,解压到可以访问的目录下面[/www/server]。

3.12 为什么启动 build 后,serve 的项目地址和前端设置的默认地址不一样?

serve 命令支持切换端口号(https://blog.csdn.net/lhz_333/article/details/126361041),如果想要修改前端访问后端的接口地址,需要修改请求文件中的 baseUrl 属性(项目中讲过)。

3.13 为什么上线后,出现 403 状态码或跨域?

  1. 取消掉 @CrossOrigin 这个注解
  2. 直接在 config 文件夹下添加跨域配置
  3. 前端项目改成如下图所示,改完再进行打包重新部署上线
6f0e72f4-3856-4555-acfe-5aa53533e899-22795b00
  1. 宝塔 nginx 配置文件如下图设置
726d2008-a7a3-461d-a651-d023cab663e9-67ac4e5d

4.提问

4.1 项目里是不是没有实现用户增删标签的功能?那新用户的标签从哪来?

增删标签本质上就是修改用户,写一个 update 就好啦,可以用 json 数组字符串存储多个标签。

4.2 项目初期建的标签表也是在闲着的,如果是拓展标签这块的业务逻辑的话,感觉也是个系统设计?

标签表的好处是可以集中管理有哪些标签可供选择。

4.3 根据标签去搜索用户,如果数据库有上百万条数据,这个根据标签搜索用户应该怎么优化?在内存查询的话也是要把所有的用户都查出来,感觉这种方法性能太低了

可以看下聚合搜索项目,可以先使用 Elasticsearch 去根据标签搜索用户,做一波粗筛,再计算哪些用户匹配的标签(相似度)最高。

4.4 伙伴匹配系统的登录鉴权是靠什么框架完成的?登录鉴权这个问题很是疑惑,不知道是怎么完成的?

没有用框架,直接用 session 来保存用户态,然后根据 session 中数据来判断用户有没有这个权限,不是什么时候都要用 Spring Security 框架的,业务场景很简单的时候自己写个权限判断即可。

4.5 只想看运行效果,只需要下载代码库中的前后端代码吗?还是不能单独运行,同样需要下载用户中心的代码呢?

不需要下载用户中心代码,只需要对着伙伴匹配的前后端进行修改,需要建立数据库 ,还有一些依赖。

e20ac18c-9c66-4dad-9a4e-87ce0810804d-49e7c1e9

里面有很多鱼友分享的项目总结、扩展、项目网址等等。

13f750e5-acd2-4992-926c-6aef37ef329a-d04f5b75

4.6 有没有伙伴匹配项目的部署教程?

推荐使用宝塔部署,可以查看用户中心项目最后两期回放学习部署上线操作。

4.7 在微信云托管部署的时候,为什么会出现服务部署失败的问题?

3ec348f1-7c00-4986-8861-82fb22ea7e8b-a592facd

docker 暴露的端口和项目端口不一致,docker 暴露的端口和项目端口不一致。

4.8 项目需要花多长时间写完?

8 天左右。

4.9 分页查询的结果是 Page 类型,怎么进行数据脱敏呢?

分页最后生成的对象是 ipage 对象,他里面有一个 getRecords 方法获取集合,然后使用 stream 进行脱敏,脱敏后的集合,在重新赋值给 lpage 对象。

4.10 项目卡着进行不下去了,学的前端,后端一点不会,这种情况怎么处理?

1.找伙伴

2.看回放自己敲代码死磕

3.拉取代码死磕

4.11 已经实现的功能可以用来做毕设吗?

可以拿来做毕设,具体看学校是否允许。


项目分区导航:⬅️ 25-面试-答辩 | 26-问题答疑 | ➡️ 01-API 开放平台项目介绍