122
社区成员




这个作业属于哪个课程 | 2302软件工程 |
---|---|
这个作业要求在哪里 | 团队作业——beta冲刺+事后诸葛亮 |
团队名称 | 爱背单词不摆烂 |
这个作业的目标 | 确认代码规范 |
置顶随笔链接 | 爱背单词不摆烂——Beta冲刺置顶集合随笔 |
其他参考文献 | 《构建之法》 |
常量命名:全部大写
使用大写字母和下划线来组合命名,下划线用以分割单词
组件命名
声明和使用都使用首字母大写命名
组件的 data
必须是一个函数。
当在组件中使用 data
property 的时候 (除了 new Vue
外的任何地方),它的值必须是返回一个对象的函数。
v-for 设置键值
总是用 key 配合v-for。
使用不一样的key值避免更新时出现错误
不同时在一个元素上使用v-for和v-if
分离组件
当某块内容需要在多个页面时,抽离成组件。
自闭合组件
在单文件组件、字符串模板和 JSX 中如果没有其他内容写出自闭合组件
指令缩写
用:
代替v-bind
,@
表示 v-on:
这种操作很容易产生难以排查的NPE异常
/**
* 反例
* 容易出现空指针异常,如果参数为null就会拆箱失败空指针错误
* 排查的时候很难排查,因为直接看代码看起来不会出现空指针的。
* @param value
* @return
*/
public static int handel(Integer value) {
return value;
}
入参以及出参,和参数传递类型是一致的
public static Integer handel(Integer value) {
return value;
}
SimpleDateFormat 是线程不安全的类,一般不要定义为 static 变量,如果定义为 static, 必须加锁,或者使用 DateUtils 工具类
使用这种方式在多线程的情况下会报错,或者出现数据不一致的情况
private static final SimpleDateFormat dateFormate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
使用ThreadLocal的方式保证线程安全,或者使用
DateTimeFormatter
代替SimpleDateFormat
private static final ThreadLocal<SimpleDateFormat> threadLocal = new ThreadLocal<SimpleDateFormat>() {
@Override
protected SimpleDateFormat initialValue() {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
}
};
如果object为null就会抛出NPE异常
object.equals("test");
应该使用常量或者确定的值来进行判断equals
"test".equals(object);
或者使用
Objects.equals
Objects.equals(object1,object2)
@Service
@Transactional(rollbackFor = Exception.class)
public class UserServiceImpl implements UserService {
@Override
public void save(User user) {
try{
//some code
//db operation
}catche(Exception e){
}
}
}
@Service
@Transactional(rollbackFor = Exception.class)
public class UserServiceImpl implements UserService {
@Override
public void save(User user) {
try{
//some code
//db operation
}catche(Exception e){
//捕获处理后需要再将异常抛出
throw e;
}
}
}
try 块中的 return 语句执行成功后,并不马上返回,而是继续执行 finally 块中的语句,如果此处存 在 return 语句,则在此直接返回,无情丢弃掉 try 块中的返回点。
这种情况下结果永远返回的都是true,fanally中不要做返回操作
public static boolean getValue(String text) {
try {
return text.equals("123");
} finally {
return true;
}
}
public static boolean getValue(String text) {
return "123".equals(text);
}
在Java生态体系中,围绕着日志,有很多成熟的解决方案,关于日志输出,主要有两类工具。
一类是日志框架,主要用来进行日志的输出的,比如输出到哪个文件,日志格式如何等,另外一类是日志门面,主要一套通用的API,用来屏蔽各个日志框架之间的差异的。
所以,对于Java工程师来说,关于日志工具的使用,最佳实践就是在应用中使用如Log4j + SLF4J 这样的组合来进行日志输出。
这样做的最大好处,就是业务层的开发不需要关心底层日志框架的实现及细节,在编码的时候也不需要考虑日后更换框架所带来的成本,这也是门面模式所带来的好处。
请不要在你的Java代码中出现任何Log4j等日志框架的API的使用,而是应该直接使用SLF4J这种日志门面。
所有日志文件至少保存15天,因为有些异常具备以“周”为频次发生的特点,网络运行状态、安全相关信息、系统监测、管理后台操作、用户敏感
单元测试在线上运行时,感觉像空气(AIR)一样并不存在,但在测试质量的保障上,却是非常关键的,好的单元测试宏观上来说,具有自动化、
System.out
来进行人肉验证,必须使用assert
来验证。单元测试通常会被放到持续集成中,每次有代码check in时单元测试都会被执行,如果单测对外部环境(网络、服务、中间件等)有依赖,容
中国大陆个人手机号码显示为:`137****0969`,隐藏中间 4 位,防止隐私泄露,以及用户的身份证号码,银行卡号码,用户姓名等都需要进行脱
说明:忽略参数校验可能导致:
page size 过大导致内存溢出
恶意 order by 导致数据库慢查询
缓存击穿
服务器端请求伪造(SSRF)
任意重定向
SQL 注入,Shell 注入,反序列化注入
正则输入源串拒绝服务 ReDoS
表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只出现数字。
数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑,MySQL 在 Windows 下不区分大小写,但在 Linux 下默认是
创建人:标记记录的初始创建人
创建时间:标记初始的创建人
修改人:标记修改人
修改时间:标记最后修改日期
版本号:用于统一化的乐观锁
正式发布的类库必须先去中央仓库进行查证,使 RELEASE 版本号有延续性,且版本号不允许覆盖升级。
禁止在子项目的 pom 依赖中出现相同的 GroupId,相同的 ArtifactId,但是不同的Version。
在本地调试时会使用各子项目指定的版本号,但是合并成一个 war,只能有一个版本号出现在最后的lib 目录中,曾经出现过线下调试是正确的
文件和文件夹命名规范:
代码格式化和布局规范:
dartfmt
)自动格式化代码。导入规范:
命名规范:
注释规范:
///
进行文档注释。状态管理:
Widget 构建规范: