1. 关于环境变量
你必须知道“环境变量”的作用,并将必须的命令的路径配置到环境变量的PATH中。
示例--配置Java环境变量:

windows环境变量
注意:无论是CMD命令提示符窗口,还是IntelliJ IDEA中的Terminal窗口,都是在启动时就加载了环境变量的,如果你在其后修改过环境变量的配置,必须重新打开CMD命令提示符窗口,或重启IntelliJ IDEA,才可以应用新的配置。
//检查环境变量 cmd终端上
C:\Users\robin>java -version
java version "1.8.0_241"
Java(TM) SE Runtime Environment (build 1.8.0_241-b07)
Java HotSpot(TM) 64-Bit Server VM (build 25.241-b07, mixed mode)
C:\Users\robin> javac -version
javac 1.8.0_241
2. 关于Maven仓库
你必须知道Maven是有远程仓库服务器的,当你在Maven工程中的`pom.xml`中添加了依赖项后,会从远程仓库服务器中*载下**所需的依赖项的文件。
你应该将远程仓库服务器配置为国内的某个服务器,一般配置为华为云或阿里云的,这样可以大大提升*载下**依赖项的效率,并降低*载下**文件时丢失数据的风险。
示例:主要是setting.xml文件(以阿里为例)
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<pluginGroups>
</pluginGroups>
<proxies>
</proxies>
<servers>
</servers>
<mirrors>
<mirror>
<id>ali</id>
<name>ali Maven</name>
<mirrorOf>*</mirrorOf>
<url>https://maven.aliyun.com/repository/public/</url>
</mirror>
</mirrors>
<profiles>
</profiles>
<activeProfiles>
</activeProfiles>
</settings>
关于华为云或阿里云的Maven仓库服务器,你可以随意选择其中的某一个,如果某个服务器在某段时间表现得不够稳定时,你应该切换为另一个。
从远程仓库服务器*载下**到的相关文件会出现在你的本地仓库,如果你使用的是Windows操作系统,它默认会在 `C:\Users\你登录系统时的用户的用户名\.m2\repository` 这个位置,如果你使用的是Mac操作系统,它默认会在 `/Users/你登录系统时的用户的用户名/.m2/repository` 这个位置,你必须明显的知道你的本地仓库位置,后续你可能需要在此进行某些操作,例如本地仓库文件中的文件损坏时你需要找到这些文件并删除。
3. 关于依赖项错误的问题
当你的Maven工程(包括Spring Boot工程,因为它本身也是一个Maven工程)提示依赖项错误时,首先,你应该检查依赖项的代码是否正确,如果你的依赖项是第三方的,可以从 https://www.mvnrepository.com 上找到正确的依赖项代码,如果你的依赖项是自己定义的另一个模块,则应该检查被依赖的模块中的相关声明(例如Artifact Id、Group Id、Version)与添加依赖时是否一致。
如果你的的依赖项的代码是正确的,你应该依次尝试以下全部操作:
- 完全关闭IntelliJ IDEA
- 删除本地仓库文件夹
- 启动IntelliJ IDEA并打开你的工程,在Maven面板中点击刷新按钮
关于以上操作第2步,其实可以只删除疑似有问题的部分文件,而不是删除整个本地仓库,但是,后续使用的依赖项的关联可能非常复杂,你不一定能快速的准确找到疑似有问题的文件,所以从操作上来看,删除整个本地仓库更简单一些。
如果以上操作不能解决你的问题,你还可以尝试:
- - 将远程仓库服务器的配置在华为云和阿里云之间切换
- - 有时可能因为网络波动导致某个远程仓库服务器不稳定
- - 切换你的网络连接,例如使用移动 / 联通 / 电信的手机提供上网热点,或在这3种运营商之间切换
4. 关于异常信息
当你的程序出现异常时,在控制台会提示异常的跟踪报告,通常,以 `Caused By` 开头的那一行会提示异常的类型及关键信息,这一行信息对于排查错误非常有帮助,请仔细查看。
如果异常信息存在嵌套,则会有多行 `Caused By`,其中,最下方的 `Caused By` 提示的信息是最精准的,是最具参考价值的!但是,如果涉及某些外部文件的错误,例如XML文件的错误,则可能需要通过偏上方的 `Caused By` 中的信息来确定XML文件的位置。
5. 关于端口被占用的问题
当你启用某个服务,提示端口被占用时,你可以尝试修改项目中的配置,使用其它端口,当不便于使用其它端口时,则应该终止占用端口的进程,再启动你的服务。
在Windows操作系统中,你需要在CMD命令提示符窗口中执行以下命令找出占用端口的进程ID:
//windows当执行命令后,会提示占用端口的进程的ID,即PID,
netstat -ano |findstr 端口号
//再执行以下命令终止此PID对应的进程:
taskkill /f /t /im 进程ID
//Mac OS中,终端中执行以下命令找出占用端口的进程ID:
lsof -i :端口号
//再执行以下命令终止此PID对应的进程:
kill -9 进程ID
6. 关于在IntelliJ IDEA中安装插件
在IntelliJ IDEA中,安装插件的操作方式是固定的,以安装LOMBOK插件为例,可参考:

IDE安装插件
由于IntelliJ IDEA的插件仓库服务器并不是国内的服务器,所以可能会出现找不到插件、无法安装、安装速度极慢的问题,你可以稍后再次尝试,或切换你的网络连接,例如使用移动 / 联通 / 电信的手机提供上网热点,或在这3种运营商之间切换。
7. 关于将外部文件复制到你的工程中
如果你将外部文件(你的工程以外的文件,例如老师的工程中的文件)复制到你的工程中,可能存在IntelliJ IDEA不识别的问题,具体表现为:
- 文件确实是存在的,但IntelliJ IDEA提示无此文件
当出现此问题时,你可以通过以下操作步骤来解决:
- 删除你的工程的 `target` 文件夹
- 对你的工程的根级名称点击鼠标右键,在弹出的菜单中选择 `Reload from disk` 选项
- 点击窗口顶部菜单中的 `Build` > `Build Project`
8. 关于DML SQL语句
关于DML SQL语句,你必须熟练掌握:
- - 插入1条记录
- - 显式的指定字段列表
- - 插入多条记录
- - 在 `values` 关键字右侧可以有多条记录的值
- - 根据指定的条件删除记录
- - 不指定条件删除记录
- - 这将删除表中所有记录,在开发实践中是不允许使用的
- - 批量删除若干条记录
- - 使用 `in` 语法
- - 根据指定的条件更新某记录中的数据
- - 不指定条件更新记录
- - 这将更新表中所有记录,在开发实践中是不允许使用的
- - 批量更新若干条记录
- - 使用 `in` 语法
- - 使用统计查询
- - 使用 `count()` 函数
- - 强烈建议使用 `count(*)` ,而不是 `count(字段名)`
- - 使用去重查询
- - 使用 `distinct` 关键字
- - 根据指定的条件查询某记录
- - 必须显式的指定字段列表
- - 在开发实践中不允许使用星号表示字段列表
- - 如果查询结果可能超过1条,必须显式的使用 `order by` 指定排序规则
- - 如果排序规则无法确实部分记录的数据,则应该在原基础上指定第二排序规则、第三排序规则等,直至所有记录都是经过设定的规则排序后的
- - 如果查询结果的记录数可能较多,必须显式的使用 `limit` 进行分页处理
- - 关联表查询
- - 理解 `join` / `inner join` / `left join` / `right join` 的使用
- - 当多表中存在同名字段时,需自定义别名
9. 关于导入SQL脚本
在CMD命令提示符窗口中登录MySQL后,通过 `source` 命令即可导入SQL脚本,例如:
//导入sql 文件
source d:\db.sql
在执行导入之前,应该先查看SQL脚本的内容,你可能需要事先创建数据库,并应用数据库后再执行导入。
10. 关于常见HTTP响应码
Status-Code = "200" ; OK
| "201" ; Created
| "202" ; Accepted
| "204" ; No Content
| "301" ; Moved Permanently
| "302" ; Moved Temporarily
| "304" ; Not Modified
| "400" ; Bad Request
| "401" ; Unauthorized
| "403" ; Forbidden
| "404" ; Not Found
| "500" ; Internal Server Error
| "501" ; Not Implemented
| "502" ; Bad Gateway
| "503" ; Service Unavailable
| extension-code
extension-code = 3DIGIT
Reason-Phrase = *<TEXT, excluding CR, LF>
//=============
Entity-Header = Allow ; Section 10.1
| Content-Encoding ; Section 10.3
| Content-Length ; Section 10.4
| Content-Type ; Section 10.5
| Expires ; Section 10.7
| Last-Modified ; Section 10.10
| extension-header
extension-header = HTTP-header
常见HTTP响应码通俗描述(以下涉及的问题解决方案,在未学到到对应的框架技术之前可暂时跳过):
- 200:成功响应,需要注意,这仅仅表示服务器端成功的进行了响应这项操作,并不表示业务的成功,例如尝试登录时,如果用户名或密码错误导致登录失败,只要服务器端成功的响应了,响应码也是200
- 302:重定向,服务器端处理请求后,会响应此响应码和另一个目标路径,通常,浏览器收到此响应码后会自动请求新的目标路径
- 400:请求参数错误,例如服务器端对某个请求参数设置了“不允许为null”的约定,而客户端却未提交此参数,或某请求参数必须是数值类型的,客户端提交的却是一个无法转换为数值类型的参数值
- 出现此问题时,你应该通过断点或打桩等方式观察提交的请求参数,并查看服务器端对请求参数的约束
- 在Spring MVC框架中,`@RequestParam`默认具有“不允许为null”的约定
- 在Spring MVC框架中,会尝试自动将请求参数转换为服务器端声明的参数类型
- 在Spring MVC框架中,使用了Hibernate Validation验证机制后,也会对请求参数产生约束,具体约束需参考所使用的注解
- 基于以上框架的进阶框架具有同样效果,例如添加了`spring-boot-starter-web`依赖项的Spring Boot工程是使用Spring MVC接收请求参数的,添加了`spring-boot-starter-validation`依赖项的Spring Boot工程则是使用Hibernate Validation实现的请求参数验证
- 401:未授权,通常出现在未登录,却尝试请求必须登录才允许访问的资源时
- 403:禁止访问,通常出现在已经登录,却不具备访问权限时,例如普通用户尝试请求管理员权限的资源时
- 出现此问题时,如果你使用了Spring Security框架,你应该检查Spring Security的配置类中的相关配置,例如白名单路径,并检查你是否开启了授权访问,如果已开启,你还应该通过断言或打桩等方式观察当前登录的用户的权限清单,并检查在请求资源上设置的权限规则
- 404:请求的资源不存在,通常是客户端提交请求的URL错误
- 出现此问题时,你应该检查客户端提交请求的URL与服务器端设置的接收请求参数的URL是否一致
- 在确保客户端提交请求的URL是你预期的时,关于服务器端,你应该:
- 如果你请求的是服务器端的某个静态资源,你应该检查此资源是否存在,在Spring Boot工程中,默认的静态资源文件夹是`src/main/resources/static`,并且,需要注意,如果你显式的配置了静态资源文件夹,将会覆盖此默认项
- 如果你的服务器端是通过Spring MVC框架开发的,你应该检查:
- 控制器是否已经正常启用,你可以在控制器类中显式的添加无参数构造方法,并在其中输出任何内容,当启动项目时,你应该可以在控制台看到输出语句中的内容,如果看不到,则表示控制器没有被创建,则需要检查组件扫描配置的包、控制器类是否添加了`@Controller`或`@RestController`注解,如果你使用的是Spring Boot工程,默认组件扫描的包是创建工程时指定的Group Id和Artifact Id组件的包名
- 请求路径是由控制器类上的`@RequestMapping`注解(如果存在的话)和处理请求的方法上的`@RequestMapping`或以此为元注解的其它注解(例如`@GetMapping`等)组合得到的,你应该检查这2处的注解
- 405:请求方式错误,例如服务器端要求使用POST方式提交请求,而客户端却使用GET方式提交请求
- 出现此问题时,你应该检查客户端的请求方式,如果是直接在浏览器的地址栏中输入URL提交的请求,是GET方式的,如果是通过HTML表单或其它异步提交方式,除非显式的使用POST方式,否则都是GET方式的,另外,在服务器端,你需要检查如何配置的请求URL,例如使用`@PostMapping`时,则限制了客户端的请求方式必须是POST
- 406:不可接收的,通常出现在基于Spring MVC的工程中,将服务器端的响应方式设定为响应JSON格式的正文时,如果属于此情景,你应该检查:
- 是否正确的添加了`jackson-databind`依赖项
- 是否在Spring MVC配置类上添加了`@EnableWebMvc`注解
- 500:服务器内部错误,通常是因为服务器端出现了异常且始终未显式的捕获
- 出现此问题时,你应该检查服务器端控制台的异常信息,如果无信息,你应该检查项目中是否使用了Spring MVC统一处理异常的机制,并且在处理异常时未添加`e.printStackTrace()`等方式将异常信息输出
11. 关于MySQL中的char与varchar
两者相比,`char`占用的存储空间略小,存读写效率略高,所以,在可行的情况下,应该优先使用`char`。
通常,如果某字段的字符串长度变化不大时,则可以将字段类型设计为`char`,并不只是字符串长度完全相同时才可以使用,当然,如果字符串长度确实可能不同,在读取到字符值时,应该去除多余的空格。
12. 关于utf8mb4
在现行的MySQL版本中,如果使用`utf8`编码,表示的是`utf8mb3`,将最多使用3个字节来表示1个字符,而`utf8mb4`将最多使用4个字节表示1个字符。
使用`utf8mb4`将有更多的可能性,例如可以表示一些生僻字,emojo表情等,同时,由于是“最多”使用4字节,如果某个字符只需要3字节即可表示,也只会使用3字节,并不会造成存储空间的浪费,所以,通常建议将各数据表的编码显式的指定为`utf8mb4`。
13. 关于开发环境
关于你的开发环境,你应该保证以下几点:
- 你登录操作系统的账户是具有管理员权限的
- 否则部分软件的安装或命令的运行会受影响
- 你知道如何使用管理员的身份打开软件或执行命令
- 你知道如何在操作系统的防火墙设置中添加例外,或关闭操作系统的防火墙
- 你的IntelliJ IDEA是正常可用的,目前推荐使用的版本是v2021.1.3至v2022.3.1之间的版本
- 你的IntelliJ IDEA已经配置了阿里云或华为云作为远程Maven仓库服务器,且你明确的掌握通过更换settings.xml配置文件以切换这2个远程Maven仓库服务器
- 你的MySQL或MariaDB是正常可用的,且已经配置好环境变量,在命令提示符窗口的任何路径下都可以执行mysql命令
- 推荐使用Chrome浏览器,或者FireFox浏览器
学习记录,如有侵权请联系删除