随笔分类 -  阿里 《Java 开发手册-华山版》研读

一次数据库设计 萌发一想法 想做好一个更专业的程序员 1 熟练使用阿里开发手册解决实际问题 2 对之 可以 然 知其所以然 3 对其可 举一反三 提出自己的看法 优化 期望 在研读阿里规范时 可以完善自己的知识图谱 就像听老罗(罗辑思维)讲一句 “不知道买啥就买小米” 比如 在设计数据库表 ”不知道怎么搞 就参考阿里开发规范”
摘要:4. 【强制】用户请求传入的任何参数必须做有效性验证。 说明:忽略参数校验可能导致: ⚫ page size 过大导致内存溢出 ⚫ 恶意 order by 导致数据库慢查询 ⚫ 任意重定向 ⚫ SQL 注入 ⚫ 反序列化注入 ⚫ 正则输入源串拒绝服务 ReDoS 说明:Java 代码用正则来验证客户 阅读全文
posted @ 2020-03-08 19:20 conn2019 阅读(839) 评论(0) 推荐(0) 编辑
摘要:5. 【强制】有 try 块放到了事务代码中,catch 异常后,如果需要回滚事务,一定要注意手动回 滚事务。 6. 【强制】finally 块必须对资源对象、流对象进行关闭,有异常也要做 try-catch。 说明:如果 JDK7 及以上,可以使用 try-with-resources 方式。 7 阅读全文
posted @ 2020-03-03 00:31 conn2019 阅读(798) 评论(0) 推荐(0) 编辑
摘要:4. 【强制】单元测试是可以重复执行的,不能受到外界环境的影响。 说明:单元测试通常会被放到持续集成中,每次有代码 check in 时单元测试都会被执行。如果单测对外部 环境(网络、服务、中间件等)有依赖,容易导致持续集成机制的不可用。 正例:为了不受外界环境影响,要求设计代码时就把 SUT 的依 阅读全文
posted @ 2020-02-23 14:44 conn2019 阅读(1755) 评论(0) 推荐(0) 编辑
摘要:2. 【强制】在需求分析阶段,如果与系统交互的 User 超过一类并且相关的 User Case 超过 5 个,使用用例图来表达更加清晰的结构化需求。 笔记: 参考:http://www.woshipm.com/pd/2602941.html 产品经理必学UML(二):用例图 3. 【强制】如果某个 阅读全文
posted @ 2020-02-05 22:40 conn2019 阅读(373) 评论(0) 推荐(0) 编辑
摘要:1. 【推荐】高并发服务器建议调小 TCP 协议的 time_wait 超时时间。 说明:操作系统默认 240 秒后,才会关闭处于 time_wait 状态的连接,在高并发访问下,服务器端会因为 处于 time_wait 的连接数太多,可能无法建立新的连接,所以需要在服务器上调小此等待值。 正例:在 阅读全文
posted @ 2020-02-05 12:53 conn2019 阅读(320) 评论(0) 推荐(0) 编辑
摘要:11.【参考】为避免应用二方库的依赖冲突问题,二方库发布者应当遵循以下原则: 1)精简可控原则。移除一切不必要的 API 和依赖,只包含 Service API、必要的领域模型对象、Utils 类、常量、枚举等。如果依赖其它二方库,尽量是 provided 引入,让二方库使用者去依赖具体版本号; 无 阅读全文
posted @ 2020-02-04 23:05 conn2019 阅读(488) 评论(0) 推荐(0) 编辑
摘要:9. 【推荐】所有 pom 文件中的依赖声明放在<dependencies>语句块中,所有版本仲裁放在 <dependencyManagement>语句块中。 说明:<dependencyManagement>里只是声明版本,并不实现引入,因此子项目需要显式的声明依 赖,version 和 scop 阅读全文
posted @ 2020-02-04 22:37 conn2019 阅读(367) 评论(0) 推荐(0) 编辑
摘要:7. 【强制】禁止在子项目的 pom 依赖中出现相同的 GroupId,相同的 ArtifactId,但是不同的 Version。 说明:在本地调试时会使用各子项目指定的版本号,但是合并成一个 war,只能有一个版本号出现在最后 的 lib 目录中。可能出现线下调试是正确的,发布到线上却出故障的问题 阅读全文
posted @ 2020-02-04 19:48 conn2019 阅读(811) 评论(0) 推荐(0) 编辑
摘要:4. 【强制】二方库的新增或升级,保持除功能点之外的其它 jar 包仲裁结果不变。如果有改变, 必须明确评估和验证。 说明:在升级时,进行 dependency:resolve 前后信息比对,如果仲裁结果完全不一致,那么通过 dependency:tree 命令,找出差异点,进行<exclude>排 阅读全文
posted @ 2020-02-04 18:28 conn2019 阅读(823) 评论(0) 推荐(0) 编辑
摘要:Batis的返回值参数类型有:resultMap与resultClass 一、当结果集列名和类的属性名完全相对应的时候,则可直接用resultClass直接指定查询结果类型。 二、当查询结果集与属性名对应不上时,可以采用resultMap指定列名与对象属性名之间的对应关系,否则对应不上的属性将为nu 阅读全文
posted @ 2020-01-22 15:42 conn2019 阅读(1061) 评论(0) 推荐(0) 编辑
摘要:1、count(1) vs count(*) 两者都统计NULL值;但 count(*)是 SQL92 定义的 标准统计行数的语法,跟数据库无关 且 坊间有传言 MySQL会对count(*)做优化 不要用 count(1) 2、count(列名) vs count(*) count(列名) 会去过 阅读全文
posted @ 2020-01-22 10:25 conn2019 阅读(1091) 评论(0) 推荐(0) 编辑
摘要:1、“列类型”与“where值类型”不符 2、join时 ① ② 相join的两个表的字符编码不同,不能命中索引,会导致笛卡尔积的循环计算(nested loop)。 参考 : https://mp.weixin.qq.com/s/1Sowt2TcjMGDv55OQOe2rQ 阅读全文
posted @ 2020-01-21 18:37 conn2019 阅读(476) 评论(0) 推荐(0) 编辑
摘要:字段类型为 text,独立出来一张表,用主键来对应,避免影响其它字段索 引效率。 1、因为mysql 是行存储模式,所以会把整行读取出来。text 储存了大量的数据。读取时,占了大量的io。所以会十分的慢。 2、每行的数据过大 行溢出 InnoDB 会将一些大对象数据存放在数据页之外的 BLOB 页 阅读全文
posted @ 2020-01-21 11:16 conn2019 阅读(1786) 评论(0) 推荐(0) 编辑
摘要:首先 了解下 开发环境、测试环境、预发布环境、生产环境的区别 参考 : https://www.jianshu.com/p/ba20b064fd25 预发布环境一般会连接生产环境的数据库 所以 涉及到数据库表的改动 比如 数据库字段名称改变 是会影响到 生产环境的 无法预发布 要直接 发生产的 如果 阅读全文
posted @ 2020-01-20 16:54 conn2019 阅读(656) 评论(0) 推荐(0) 编辑