公司 Java 项目快速起起来,一是深入了解下架构和实现,二是方便本地起,做调试;能在对接具体问题的时候,具体脉络有个清晰的概念;
书籍 prepare
- 码出高效,阿里巴巴 Java 开发手册
- 编写高质量代码,改善 Java 程序的 151 个建议
- Google API design guide 中文版
- netty 权威指南
Java 代码规范
- alibaba-代码规约 plugin
- findBugs - plugin
- SonarLint
- sequence diagram
- 设计原则:单一职责|开闭|接口隔离|里氏替换|迪米特|依赖倒置
数据库设计规范
命名规范
- 库|表|字段 名不允许出现大写字母
- 统一规范,数据库名:
ucan_业务名
| 表名:业务名_类型名_实体名
- 表类型:tb(基础信息表-数据基本不会增长) | td(业务产生数据表-数据随着用户操作增长) | tr(业务关系表-实体间的关联关系表)
- 普通索引命名:
idx_字段名_字段名
; 唯一索引命名:uniq_字段名_字段名
;
设计规范
- 表|字段 - 必须有注释
- 表间逻辑关系
- 表结构设计文档
设计文档规范
- 项目背景(背景|现状)
- 设计目标
- 系统设计(总体架构|边界说明|模块设计|核心数据结构|存储设计|接口设计|稳定性考虑|兼容性考虑|性能考虑)
- 测试关注点
- 上线及回滚方案
- 工作拆解
运维部署文档
- 数据库|缓存
- 域名
- git
- 服务器
- 服务器内项目地址|文件夹权限|日志地址| 日志索引
- 队列
Tips
- 如果非结构化数据不涉及查询,聚合等操作,可以用 MySQL 的 JSON 字段替换 MongoDB document(分布式事务处理|)
rules
- 把简单的问题尽可能交给工具完成
- 简单
- 1、代码格式化 包引用
- 2、编码规范规约(安装阿里的代码规约插件),右键菜单点击编码规范扫描
- 3、安装FindBugs插件,用FindBugs查找bug
- 4、安装SonarLint插件,右键菜单选Analyze with SonarLint
- 5、安装Sequence Diagram 插件,可以从controller层点右键查看调用路径
- 中等:1、根据模块业务查看代码逻辑,确认代码正确2、根据代码确认完成功能开发
- 复杂:查看代码符合的设计原则,是否符合整体架构逻辑【原则是复杂的问题简单化】设计原则:单一职责、开闭、接口隔离、里氏替换、迪米特、依赖倒置
Java API Design Best Practices
- https://static001.geekbang.org/con/33/pdf/3939125782/file/1%E3%80%81jgiles+-+API+Best+Practices+-+v2+-+qcon.pdf
- https://java.jonathangiles.net/
- Jonathan Giles
- API design theory | practical advice
- effective java 3rd edition - joshua bloch
- API - 开发者 - 达成目标
- 抽象层面 - 更好的抽象
- API的使用者 | 使用者的目的
- API Characteristics
- Understandable
- 使用者能看了能马上知道这个接口干什么的, 接口文档也是必须的
- 面向对象的设计
- entry points
- Consistency
- null 的处理要严格符合文档里面写的
- restrained
- evolvable
- documentation
- there is no magical process to api Design
- api design is an art , and like art, becomes easier with practice
APIs are the thing that gets us to the thing
- “Computers aren’t the thing. They’re the thing that gets you to the thing.”
– Joe MacMillan (Halt and Catch Fire) - We have always assumed that applications are the thing
- The real “thing” is delivering solutions through capabilities
- APIs will always be a thing
线上项目debug
- arthas
1
2
32022-05-11 16:52:53.396 ERROR http-nio-8188-exec-26 com.xx.xxx.account.util.JwtUtil (JwtUtil.java:40)-
io.jsonwebtoken.ExpiredJwtException: JWT expired at 2022-04-30T09:41:22Z. Current time: 2022-05-11T16:52:53Z, a difference of 976291396 milliseconds. Allowed clock skew: 0 milliseconds.
at io.jsonwebtoken.impl.DefaultJwtParser.parse(DefaultJwtParser.java:385) - http://arthas.gitee.io/
- https://github.com/alibaba/arthas
安全
- 紧急漏洞
涉及应用
Jackson - Jackson-databind 反序列化漏洞(CVE-2021-20190)
log4j - Apache Log4j 远程代码执行漏洞(CVE-2021-44228、CVE-2021-45046)
FastJSON - FastJSON<=1.2.80 反序列化漏洞
XStream - XStream 远程代码执行漏洞(CVE-2021-29505)
Saltstack - SaltStack 未授权访问漏洞(CVE-2021-21996、CVE-2021-22004、CVE-2021-31607)
binlog
二进制日志(binnary log)以事件形式记录了对MySQL数据库执行更改的所有操作
- 二进制日志索引文件 | 二进制日志文件
- binlog消息分发服务(收敛binlog消息)
- https://github.com/pingcap/tidb-binlog
- https://docs.pingcap.com/zh/tidb/dev/tidb-binlog-overview
- canal 基于 MySQL 数据库binlog增量日志解析,提供增量数据订阅和消费
配置应用配置
- Run/Debug Configurations - override parameters
- configuration - environment - program arguments - –eureka.client.serviceUrl.defaultZone=xxxx/eureka/ –eureka.client.register-with-eureka=false