技术 / 团队规范

由于每个团队都不太一样, 所以这里的规范仅供参考

服务器操作规范

  • 账号

    • 非必要情况下,以非root用户登录操作
    • 多人操作环境,给定普通用户账号
  • 口令

    • 控制口令强度,修改频次为一个月或三个月 (当有拥有密码用户离职,立即更改口令)
  • 磁盘使用

    • 监控磁盘使用情况, 防止爆盘
  • 重要文件管理

    • 备份
    • 添加不可更改位, 这样root用户修改也要指定参数
1
2
chattr +i filename  // 加 不可更改位    
chattr -i filename // 删除 不可更改位
  • IP、端口

    • 限制端口访问
    • 禁止修改登录接口
    • 禁止绑定任意程序到特定端口
    • 进程不直接绑定在环路地址上面(0.0.0.0), 需要绑定内网IP
  • 监控

    • 开启监控, 比如开启监控日志, nginx默认自带开启日志
    • 系统或软件从官方渠道下载
    • 系统命令禁止修改,如rmmv
  • 访问控制

    • 禁用目录浏览、敏感文件数据禁止放在web目录下面

相关操作规范

  • 服务器

    • 危险操作前一定要备份
  • 数据库

    • 绑定内网ip
    • 设置登录密码
    • 删除默认数据及用户
    • 新建mysql用户和组,相关权限给到mysql用户
    • 库、表级别操作慎重(例如:droptruncate 命令)
  • 危险操作

    • rm -rf dir/filename 此命令强制删除文件或目录,操作前务必备份 cp -r
    • kill -9 pid 此命令强制杀掉正在运行的进程,使当前进程对应程序立即退出,一般会丢失数据
    • 数据库相关 (deletedroptruncate) 操作前一定备份数据,操作时最好有人确认
  • 自动化

    • 重要文件或数据库备份自动化 可通过crontab任务来定时执行
    • 服务或程序本身属于定时任务,则对于重要数据、文件在服务或程序内部自行实现

团队编码规范

详细规范参考 PSR – PHP 标准规范

这里列举一些:

  • [强制] 采用 4 个空格缩进而不是 2 个空格或 tab 字符

  • [强制] 所有的块状结构都要缩进

  • [强制] switch 语句缩进要合理

  • [强制] 注释时,注释符两边的空白符必不可少

  • [强制] 任何保留字(如if, while, for等等)与紧随其后的左括号之间要有一个空格

  • [强制] 任何保留字(如elsecatch等)与其前面的右大括号之间要有一个空格

  • [强制] 任何左大括号 { 前必须加一个空格

  • [强制] 在任何二元或三元运算符的两侧必须有空格

1
2
3
4
5
// good
int i = 1 + 2;

// bad
int i = 1+2;
  • [强制] 一元运算符与操作对象之间不允许有空格
1
2
3
4
5
6
7
8
9
// good
if (!isOk) {
}
i++;

// bad
if (! isOk) {
}
i ++;
  • [强制],:; 及右括号 ) 后必须空格
1
2
3
for (int i = 0; i < 100; i++) {
}
int i = (int) 3.5f;
  • [强制] 行尾不得有多余的空格

  • [强制] 本规范没有要求的空格不要随便乱加

错误例子:

1
2
3
4
5
6
7
8
9
10
11
// good
void foo(int i) {}

// bad
void foo (int i) {}

// bad
void foo( int i) {}

// bad
void foo(int i ) {}
  • [强制] 列限制:80100 还是 120

一个项目可以选择一行80个字符或100个字符的列限制。

我推荐 80 个字符。

任何一行如果超过这个字符数限制,必须换行。

  • [强制] 如果在非赋值运算符处断开,那么在该符号前断开
1
2
3
4
5
6
7
// good
int i = 1 + 2 + 3 + ... + 1000000
+ 1000001;

// bad
int i = 1 + 2 + 3 + ... + 1000000 +
1000001;
  • [强制] 如果在赋值运算符处断开,通常的做法是在该符号后断开
1
2
3
4
5
6
// good,虽然在这里没必要换行
int i =
100000000;
// bad
int i
= 100000000;
  • [强制] 非空块得换行遵守 K & R 风格

    • 左大括号前不换行
    • 左大括号后换行
    • 右大括号前换行
    • 如果右大括号是一个语句、函数体或类的终止,则右大括号后换行; 否则不换行。
      例如,如果右大括号后面是else或逗号,, 则不换行。
  • [强制] 类名、接口名以 UpperCamelCase 风格编写

1
2
3
4
5
// good
class Foo {...}

// bad
class foo {...}
  • [强制] 测试类的命名以它要测试的类的名称开始,以 Test 结束
1
2
3
4
class HashTest {
}
HashIntegrationTest {
}
  • [强制] 常量名以 CONSTANT_CASE 风格编写

全部字母大写, 用下划线分隔单词。

  • [强制] 常量必须用常量修饰符修饰
1
2
3
4
5
// good
final int MAX_COUNT = 99;

// bad
int int MAX_COUNT = 99;
  • [强制] 非常量字段名、参数名、局部变量名以 lowerCamelCase 风格编写

版本控制规范

语义化版本

版本格式:

1
主版本号.次版本号.修订号

版本号递增规则如下:

    1. 主版本号:当你做了不兼容的 API 修改
    1. 次版本号:当你做了向下兼容的功能性新增
    1. 修订号:当你做了向下兼容的问题修正。

大中小版本

版本号希望遵循大中小版本号编制:

  • X.0大版本改版上线;
  • X.X.0小版本优化升级;
  • X.X.X同版本的bug修复更新;

比如:
blog2.0 为博客系统大改版V2.0的象征;
blog2.1 为博客系统小版本升级V2.1的象征
blog2.1.1为博客系统同版本bug修复优化的信号。

参考

Powered by Hexo and Hexo-theme-hiker

Copyright © 2017 - 2023 Keep It Simple And Stupid All Rights Reserved.

访客数 : | 访问量 :