问题答疑
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 样式丢失?
改为: 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 为什么搜索框没有应用样式?
样式没有引入,仔细检查代码。
1.5 为什么使用 toast 组件报错?
新版本的 vantUI 成功用 showSuccessToast(),失败用 showFailToast()。
1.6 为什么初始化文件、命令与回放中不一致?
因为本项目使用的前端框架 Ant Design Pro 在持续更新,如果在按照视频进行操作时遇到错误,请务必参考官方最新文档中的初始化命令。如果仍然存在报错情况,可以尝试以下步骤:
- 首先,检查官方文档中的命令和用法,或切换文档版本为和视频一致的。
- 如果仍然遇到报错,可以将错误信息复制并粘贴到百度搜索中进行查询。
- 如果问题依然存在,可以前往框架的 Github Issues 区域搜索相关问题(比如:Issues · ant-design/ant-design-pro · GitHub)。大多数情况下,你遇到的问题已被其他开发者提出,并且可能已经有了解决方案。
运用以上方法,希望鱼友可以更灵活地解决遇到的问题。请记住,任何教程都有保质期,通过学会阅读官方文档和积极自主解决问题,才能在编程学习中突破难,使学习旅程不受任何困扰ヾ(´・ω・`)ノ
1.7 为什么页面只有文本,格式乱码(或组件紧凑在一起)?
在 main.ts 引入 'vant/lib/index.css' 后,把其他的样式文件都删了。
1.8 为什么前端导航栏样式居中重叠、组件偏移、组件没有应用上样式?
注释掉(或删除)在 main.ts 中的import./style.css。
1.9 为什么在用户列表页,按照标签搜索后,后端数据正常返回,但页面卡住,一直处于加载状态?
在图示位置加 :loading="loading",并在下面定义一个变量const loading = ref(true);。
在红线处加loading.value = false;。
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 官网的代码如下:
在 stylelmport 内添加代码块:
完整代码:
修改后,重新运行 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 里引入地址即可。
1.14 为什么登录后界面配置不生效?
应该是 src/app.tsx 中使用到了 settings 属性,但鱼总修改时删掉了原来的 settings 属性。
1.15 前端拉取鱼总的代码,为什么前端一直不显示?
有可能是依赖问题,重新安装依赖。
1.16 前端拉取鱼总的代码,为什么运行没有登录页面,直接显示主页?
看下路由文件,确认登录页面的地址即可。
1.17 为什么 toast 引入 popup 之后,只显示白色?
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 已经使用过了,代码还是显示灰色的?
没有使用 setup 语法糖的话 就需要手动返回数据,或者 setup 语法糖 ,这是 vue3 的语法。
1.22 为什么第 2 次回放中最后提交修改数据返回给后端的值没有具体展示?
可能是打印问题,请使用 consloe.log('values-->o%',values)。
1.23 为什么出现 user.username undefined?
添加 user?.username。
1.24 为什么用标签搜索用户,后端返回的标签数据格式错误?
后端返回的 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。
把 Build and run 下面的改成 java 8(注意不是 18)。
点击 File -> settings ->图片中的选项,将 Target bytecode version 改成 8,project bytecode version 改成 8。
点击 File -> project Structrue 将project,modules 改成 java 8
将上述地方改成相同 JDK。
如果还是显示无效的源发行版:18,只能说明 Maven 上的依赖不对(在pom文件里),再调一个依赖,一定记得要刷新 maven,不然改了之后没用。
请参考这篇文档:文档
2.2 为什么 idea 右侧 maven 菜单消失?
- help
- 或者右键 pom.xml 然后 add as maven project
2.3 为什么编写后端接口,生成的单元测试方法提示 no test found?
1)测试文件名或位置不正确
2)依赖缺失或不正确
2.4 为什么创建测试类,插入数据时会报错?
因为 junit 要用 5 的版本
2.5 直接拉取后端代码,为什么请求登录的数据为空呢?
两种方法:
1)数据库的密码是加密的,写个测试类,打印出密码的密文,再存入数据库中的用户表(手动创建用户)1806613115223461889_0.14535238414417972
2)用注册接口注册一个账号
2.6 为什么无法连接本地 redis?
2.7 为什么插入时间会自动 +8 小时?
可以配置下 mysql 默认时区信息看看:
/etc/my.cnf
[mysqld]
default-time_zone = '+8:00'
或者:
在 Date 字段上加上@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
2.8 为什么提交修改数据返回给后端的值没有具体展示?
逗号原因。
2.9 为什么 json 解析失败?
数据库 tags 字段有脏数据,排查一下。
2.10 为什么查不到相关数据就会报错,比如查询队伍,只要输入的不是能查到的内容就会产生后端报错?
加上判空(if(CollectionUtils.isNotEmpty(teamList)))
2.11 为什么用编辑距离算法从 ["html/css","大三","男"] 到 ["html/css","大三","男"] 计算距离为 2?
在开始计算的时候先给两个列表排序即可。
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 为什么项目部署上线后,明明已经登录成功,但获取的用户都为空,总是显示未登录?
就是出现了跨域请求,但浏览器默认的 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 域定位怎么设置?
3.4 为什么上线报安全警告?
可能没有对接口进行安全验证,检查漏洞在哪里,或许是没对端口加身份校验。
3.5 为什么本地跑 jar 包没有问题,放服务器跑就有问题?
仔细检查代码,可能是引入的包引入错误。
3.6 为什么后端配置了 @CrossOrigin 注解还是会报错?
在后端的 @CrossOrigin 注解加 allowCredentials="true"。
3.7 为什么上线之后 session 可以存到 redis,但是拿不到呢(或 axios 携带 cookie 到后端,为什么无法携带 cookie、直接出现跨域问题)?1806613115223461889_0.9079900267617886
在 domain 写成自己的域名即可。prod 的 yml:
需要申请SSL证书,有了 SSL 证书,我们的域名就成了 https 的。
不想申请 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 状态码或跨域?
- 取消掉 @CrossOrigin 这个注解
- 直接在 config 文件夹下添加跨域配置
- 前端项目改成如下图所示,改完再进行打包重新部署上线
- 宝塔 nginx 配置文件如下图设置
4.提问
4.1 项目里是不是没有实现用户增删标签的功能?那新用户的标签从哪来?
增删标签本质上就是修改用户,写一个 update 就好啦,可以用 json 数组字符串存储多个标签。
4.2 项目初期建的标签表也是在闲着的,如果是拓展标签这块的业务逻辑的话,感觉也是个系统设计?
标签表的好处是可以集中管理有哪些标签可供选择。
4.3 根据标签去搜索用户,如果数据库有上百万条数据,这个根据标签搜索用户应该怎么优化?在内存查询的话也是要把所有的用户都查出来,感觉这种方法性能太低了
可以看下聚合搜索项目,可以先使用 Elasticsearch 去根据标签搜索用户,做一波粗筛,再计算哪些用户匹配的标签(相似度)最高。
4.4 伙伴匹配系统的登录鉴权是靠什么框架完成的?登录鉴权这个问题很是疑惑,不知道是怎么完成的?
没有用框架,直接用 session 来保存用户态,然后根据 session 中数据来判断用户有没有这个权限,不是什么时候都要用 Spring Security 框架的,业务场景很简单的时候自己写个权限判断即可。
4.5 只想看运行效果,只需要下载代码库中的前后端代码吗?还是不能单独运行,同样需要下载用户中心的代码呢?
不需要下载用户中心代码,只需要对着伙伴匹配的前后端进行修改,需要建立数据库 ,还有一些依赖。
里面有很多鱼友分享的项目总结、扩展、项目网址等等。
4.6 有没有伙伴匹配项目的部署教程?
推荐使用宝塔部署,可以查看用户中心项目最后两期回放学习部署上线操作。
4.7 在微信云托管部署的时候,为什么会出现服务部署失败的问题?
docker 暴露的端口和项目端口不一致,docker 暴露的端口和项目端口不一致。
4.8 项目需要花多长时间写完?
8 天左右。
4.9 分页查询的结果是 Page 类型,怎么进行数据脱敏呢?
分页最后生成的对象是 ipage 对象,他里面有一个 getRecords 方法获取集合,然后使用 stream 进行脱敏,脱敏后的集合,在重新赋值给 lpage 对象。
4.10 项目卡着进行不下去了,学的前端,后端一点不会,这种情况怎么处理?
1.找伙伴
2.看回放自己敲代码死磕
3.拉取代码死磕
4.11 已经实现的功能可以用来做毕设吗?
可以拿来做毕设,具体看学校是否允许。
项目分区导航:⬅️ 25-面试-答辩 | 26-问题答疑 | ➡️ 01-API 开放平台项目介绍
💬 评论