# 新兵作战指南

## 武器准备（ENV）

### JDK

目前公司JDK使用的是1.8版本的JDK。你可以选择使用oracleJDK，也可以使用其他OpenJDK，如：[adoptium](https://adoptium.net/releases.html?variant=openjdk8)

### IDE

目前公司不限制你使用什么IDE。你可以选择使用Eclipse，IDEA，甚至是VSCODE。但要注意的是Eclipse默认情况下，创建的文本是GBK格式，IDEA默认使用的是UTF-8。在开发前，需要注意修改IDE的默认编码，避免发生文件需要重新转换编码的尴尬。

在IDE的选用上，后端编码推荐使用IntelliJ IDEA，前端编码推荐使用VSCode。

### VCS

目前公司已全面使用本平台（Gitea）进行版本控制。因此，请读者准备好以下两件套：  

- [Git](https://git-scm.com/)
- [TortoiseGit](https://tortoisegit.org/download/)（Windows平台，可视化Git工具）
- [SourceTree](https://www.sourcetreeapp.com/)（Mac平台，可视化Git工具）

### Maven

参考[公司仓库配置](../配置参考/maven-settings-demo.xml)

## 配件准备（plugin）

|   开发工具    | 插件            | 插件说明                                                     | 必要性 |
| :-----------: | --------------- | ------------------------------------------------------------ | ------ |
| IntelliJ IDEA | lombok          | 用于生成实体getter，setter等方法的插件。IDEA直接在插件市场即可安装。 | 必要   |
| IntelliJ IDEA | checkstyle      | 公司2021年中旬后开始，开始限制代码规范风格。配置参考 [checkstyle.xml](../配置参考/checkstyle-v1.0.xml) 文件。 | 必要   |
| IntelliJ IDEA | MyBatisX        | 这是IDEA下的插件。公司的项目都是用了Mybatis，方便开发。      | 推荐   |
| IntelliJ IDEA | RestfulTool     | 一个spring mvc下的快速接口查找插件。                         | 推荐   |
| IntelliJ IDEA | Maven Helper    | maven助手。                                                  | 推荐   |
| IntelliJ IDEA | Smart Tomcat    | IDEA社区版运行tomcat必装。                                   | 推荐   |
| IntelliJ IDEA | SequenceDiagram | 代码调用时序图生成器，方便快速查看方法的所有调用链路。       | 推荐   |

## 军规（规范）

| 规范类型     | 规范内容                                                    |
| ------------ | ----------------------------------------------------------- |
| 后端开发规范 | [Java后端开发规范](Java后端开发规范.md)                     |
| 注释规范     | [Java文档注释规范倡议](../技术规范/Java文档注释规范倡议.md) |
| 文档规范     | [Markdown文档排版规范](../技术规范/Markdown文档排版规范.md) |
| 数据库规范   | [数据库设计规范](../技术规范/数据库设计规范_v1.0.4.md)      |
| 其它技术规范 | [其它技术规范合集](../技术规范/)                                        |

## 行军（经验分享）

- 这个是技术团队技术分享的PPT，[技术组分享与培训材料](https://47.107.61.133/svn/%E5%9F%B9%E8%AE%AD/ppt)。

- 这是一个大佬阅读源码的[经验分享](https://www.bilibili.com/video/BV1sq4y1g7X1?t=3m57s)，3分57秒开始讲debug技巧。


## 上战场（部署）

### 全量打包部署（测试环境）

#### 切换环境配置

> 打包前需确认环境配置（如数据源，外部接口）是否正确。切勿发生将测试环境接入正式环境，导致测试环境向正式环境写数据的情况出现。  
> SpringBoot项目一般直接修改yml的引用即可![SpringBoot配置](../img/SpringBootConfig.jpg)

#### 打包

> 打包前应先清理maven的class缓存。有时候因为调试过程中的一些编译报错等奇奇怪怪的原因，导致maven的class缓存内容不是最新的class。为避免将错误的class文件打包，应先对目录进行clean。
> ![打包](../img/ideaPackage.jpg)  
> 命令行：`mvn clean | mvn package -Dmaven.test.skip=true`

#### 备份

部署前，需将服务器上的现有运行包复制到备份存储的文件夹。以便新部署的项目程序有问题的时候回滚操作。

#### 部署

部署情况有两种： 
①部署目录就在`tomcat`的`webapp`目录下  

>将[第二步](#2%E3%80%81%20%E6%89%93%E5%8C%85)打包后的war包改名至正确的上下文路径名，然后将其放入`webapp`目录下，重启tomcat即可。

②部署目录被配置到其他目录

> 将war包进行事先解压，将解压内容替换到配置的部署目录中。

### 增量打包部署（生产环境）

所有生产环境 **务必** 要使用Increpack工具进行打包和部署实施。 [youfool-increpack 增量打包部署介绍](../应用部署/youfool-increpack-readme.md)

## 军情报告（日报，周报）

### 日报

一般在入职后的第二周，项目经理就开始要求你写日报。日报通过企业微信的工作台的`汇报`-`日报`功能进行每日工作的小结，以及拟定第二天的工作计划。

养成良好的工作习惯，从每天小结开始。

### 周报

入职后第二周或第三周开始，项目经理就开始要求你每周周五早上写周报。周报一般通过企业邮箱发送到自己的项目经理手上。这个具体要看你的项目经理的安排。

## 常见问题（Q&A）

Q1：如何快速地去熟悉自己所要负责的项目。

> A1：在接到项目后，我们应首先去了解项目背景和项目的主干业务流程。根据自己的社会阅历去对整体项目进行一个初步的完整业务推测模型。推测完后，再去阅读其他相关的项目文档和源码去印证修改自己的业务模型。

Q2：阅读源码过程中，遇到自己未曾涉足过的技术点怎么办？

> A2：首先，我们要确定这个技术点是否会对我们的业务开发和修改有所关联，从而确定我们是否真的需要关注这个技术点相关的接口或代码段。如果不需要，我们就只需记下这段的位置，将需求完成后再反过来去学习提升自己。如果需要去关注这个技术点，首先到企业微信上找对应的人问，同时提取技术点的关键词，到百度中找该技术点的资料。如果在该问题在2小时内未能解决，应及时在项目组群内问，请求协助，切勿藏着问题。

Q3：如何快速找到我要修改的别人已经开发的功能点的代码位置。

> A3：运行项目，在浏览器中的network找到对应业务的相关接口。通过[RestfulTool](#restfultool)插件（快捷键`ctrl`+`alt`+`/`）搜索该接口，接口找到对应的diamante位置。![RestfulTool](../img/restfulTool.jpg)
