# 新兵作战指南（后端篇）

> 拟稿：[黎润豪](/lirh)<a href="https://blog.lroyia.top" target="_blank">（个人博客）</a>
>
> <div><font>版本号 1.0.0 </font></div>
>

## 目录

<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
- [新兵作战指南（后端篇）](#%E6%96%B0%E5%85%B5%E4%BD%9C%E6%88%98%E6%8C%87%E5%8D%97%E5%90%8E%E7%AB%AF%E7%AF%87)
  - [目录](#%E7%9B%AE%E5%BD%95)
  - [武器准备（ENV）](#%E6%AD%A6%E5%99%A8%E5%87%86%E5%A4%87env)
    - [JDK](#jdk)
    - [IDE](#ide)
    - [DB](#db)
    - [VCS](#vcs)
    - [Maven](#maven)
  - [配件准备（plugin）](#%E9%85%8D%E4%BB%B6%E5%87%86%E5%A4%87plugin)
    - [必要插件](#%E5%BF%85%E8%A6%81%E6%8F%92%E4%BB%B6)
      - [lombok](#lombok)
      - [checkstyle](#checkstyle)
      - [MyBatisX](#mybatisx)
    - [推荐插件](#%E6%8E%A8%E8%8D%90%E6%8F%92%E4%BB%B6)
      - [RestfulTool](#restfultool)
      - [Maven Helper](#maven-helper)
      - [Smart Tomcat](#smart-tomcat)
      - [SequenceDiagram](#sequencediagram)
  - [军规（规范）](#%E5%86%9B%E8%A7%84%E8%A7%84%E8%8C%83)
    - [代码规范](#%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83)
    - [注释规范](#%E6%B3%A8%E9%87%8A%E8%A7%84%E8%8C%83)
    - [文档规范](#%E6%96%87%E6%A1%A3%E8%A7%84%E8%8C%83)
    - [数据库规范](#%E6%95%B0%E6%8D%AE%E5%BA%93%E8%A7%84%E8%8C%83)
  - [行军（debug）](#%E8%A1%8C%E5%86%9Bdebug)
  - [上战场（部署）](#%E4%B8%8A%E6%88%98%E5%9C%BA%E9%83%A8%E7%BD%B2)
    - [全量打包部署](#%E5%85%A8%E9%87%8F%E6%89%93%E5%8C%85%E9%83%A8%E7%BD%B2)
      - [1、切换环境配置](#1%E5%88%87%E6%8D%A2%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE)
      - [2、 打包](#2-%E6%89%93%E5%8C%85)
      - [3、备份](#3%E5%A4%87%E4%BB%BD)
      - [4、部署](#4%E9%83%A8%E7%BD%B2)
    - [增量打包部署](#%E5%A2%9E%E9%87%8F%E6%89%93%E5%8C%85%E9%83%A8%E7%BD%B2)
  - [军情报告（日报，周报）](#%E5%86%9B%E6%83%85%E6%8A%A5%E5%91%8A%E6%97%A5%E6%8A%A5%E5%91%A8%E6%8A%A5)
    - [日报](#%E6%97%A5%E6%8A%A5)
    - [周报](#%E5%91%A8%E6%8A%A5)
  - [常见问题（Q&A）](#%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98qa)

<!-- END doctoc generated TOC please keep comment here to allow auto update -->

## 武器准备（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的选用上，笔者推荐使用IDEA社区版。

### DB

目前，公司大部分项目均使用[PostgreSQL（简称PG）](https://www.postgresql.org/)作为业务支撑。如非分派的项目组的项目不使用PG，请提前下载12或以上版本的PG。数据库访问工具请勿使用navicat，请使用[DBeaver](https://dbeaver.io/)

### VCS

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

- [git](https://git-scm.com/)
- [TortoiseGit](https://tortoisegit.org/download/)（git乌龟，可选用其他可视化工具）

### Maven

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

## 配件准备（plugin）

插件主要都是在IDEA下的。

### 必要插件

#### lombok

用于生成实体getter，setter等方法的插件。IDEA直接在插件市场即可安装。如果是Eclipse，需要下载对应jar包后，使用管理员身份的命令行运行jar包进行安装。

#### checkstyle

公司2021年中旬后开始，开始限制代码规范风格。具体配置请下载同目录下的[checkstyle.xml](../配置参考/checkstyle.xml)文件。

#### MyBatisX

这是IDEA下的插件。公司的项目都是用了Mybatis，下载这个插件能方便开发。

### 推荐插件

#### RestfulTool

一个spring mvc下的快速接口查找插件。

#### Maven Helper

maven助手

#### Smart Tomcat

IDEA社区版运行tomcat必装

#### SequenceDiagram

代码调用时序图生成器，方便快速查看方法的所有调用链路。

## 军规（规范）

### 代码规范

[Java后端开发规范](Java后端开发规范.md)

### 注释规范

[Java文档注释规范倡议](../技术规范/Java文档注释规范倡议.md)

### 文档规范

[Markdown文档排版规范.md](../技术规范/Markdown文档排版规范.md)

### 数据库规范

[数据库设计规范_v1.0.4](../技术规范/数据库设计规范_v1.0.4.md)

## 行军（debug）

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

## 上战场（部署）

### 全量打包部署

#### 1、切换环境配置

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

#### 2、 打包

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

#### 3、备份

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

#### 4、部署

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

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

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

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

### 增量打包部署

[youfool-increpack-readme](../应用部署/youfool-increpack-readme.md)

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

### 日报

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

### 周报

同样的，一般在入职后第二周或第三周开始，项目经理就开始要求你每周周五早上写周报。点击下载<a href="../%E6%A8%A1%E7%89%88/xxx%E4%B8%AA%E4%BA%BA%E5%B7%A5%E4%BD%9C%E5%91%A8%E6%8A%A5%EF%BC%882021.12.13%20-%202021.12.17%EF%BC%89.xls" target="_brank">周报模版。</a>
模版一般通过企业邮箱发送到自己的项目经理手上。这个具体要看你的项目经理的安排。

## 常见问题（Q&A）

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

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

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

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

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

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