zoukankan      html  css  js  c++  java
  • 阿里巴巴java开发手册学习记录,php版

    一.编程规约

    (一)命名风格

    1.目录使用小写+下划线 home,view,model,admin_view

    2.
    类 UpperCamelCase PhpMailer
    方法 lowerCamelCase getUserName
    属性 lowerCamelCase tableName
    函数 小写字母和下划线 get_client_ip 
    常量 全部大写 PASSWORD

    如果模块、接口、类、方法使用了设计模式,在命名时需体现出具体模式。将设计模式体现在名字中,有利于阅读者快速理解架构设计理念。

    (二)代码格式
    1.
    // 这是示例注释,请注意在双斜线之后有一个空格

    2.
    if else的语言结构 只在结束的地方换行
    e.g.
    if (flag == 1) {

    System.out.println("world");

    } else {

    System.out.println("ok");
    

    }

    3.一行代码不超过120字符,超过需要使用换行
    单个方法的总行数不超过 80 行。

    4.代码逻辑分清红花和绿叶,个性和共性,绿叶逻辑单独出来成为额外方法,使主干代码 更加清晰;共性逻辑抽取成为共性方法,便于复用和维护。

    (三)OOP规约
    1.所有的覆写方法,必须加@Override注解

    2.任何类、方法、参数、变量,严控访问范围。过于宽泛的访问范围,不利于模块解耦。
    如果是一个 private 的方法,想删除就删除,可是一个 public 的 service 
    成员方法或成员变量,删除一下,不得手心冒点汗吗

    3.避免出现重复的代码(Don’t Repeat Yourself),即DRY原则

    二.安全规约

    1.用户输入的 SQL 参数严格使用参数绑定或者 METADATA 字段值限定,防止 SQL 注入,
    禁止直接使用前端传来的字符串拼接 SQL 访问数据库。

    三.MySQL规约

    (一) 建表规约
    1.任何字段如果为非负数,必须是 unsigned

    2.表达是与否概念的字段,必须使用 is_xxx 的方式命名,数据类型是 unsigned tinyint ( 1表示是,0表示否)

    3.表名不使用复数名词,表名应该仅仅表示表里面的实体内容,不应该表示实体数量

    4.唯一索引名为 uk_字段名,普通索引名则为 idx_字段名。

    5.小数类型为 decimal,禁止使用 float 和 double。
    //说明:float 和 double 在存储的时候,存在精度损失的问题,很可能在值的比较时,得到不 正确的结果。如果存储的数据范围超过 decimal 的范围,建议将数据拆成整数和小数分开存储

    6.varchar 是可变长字符串,不预先分配存储空间,长度不要超过 5000,如果存储长度大于此值,定义字段类型为 text,独立出来一张表,用主键来对应,避免影响其它字段索引效率。

    7.禁用保留字,如 desc、range、match、delayed desc//这个很容易误用,以后换成descb

    8.表必备三字段:id, gmt_create, gmt_modified。 说明:其中id必为主键,类型为bigint unsigned、单表时自增、步长为1。gmt_create, gmt_modified 的类型均为 datetime 类型,前者现在时表示主动创建,后者过去分词表示被 动更新。//here

    9.【推荐】单表行数超过 500 万行或者单表容量超过 2GB,才推荐进行分库分表。

    (二) 索引规约
    1.业务上具有唯一特性的字段,即使是组合字段,也必须建成唯一索引。 说明:不要以为唯一索引影响了 insert 速度,这个速度损耗可以忽略,但提高查找速度是明 显的;另外,即使在应用层做了非常完善的校验和控制,只要没有唯一索引,根据墨菲定律, 必然有脏数据产生。

    2.超过三个表禁止 join。需要 join 的字段,数据类型保持绝对一致;多表关联查询时,保证被关联的字段需要有索引。

    3.利用覆盖索引来进行查询操作,来避免回表操作。
    说明:如果一本书需要知道第 11 章是什么标题,会翻开第 11 章对应的那一页吗?
    目录浏览一下就好,这个目录就是起到覆盖索引的作用。 
    //这个例子举的非常非常的好,以后用书和目录来理解索引和数据是个非常好的方式
    //extra列会出现:using index

    4.延迟关联或者子查询优化超多分页场景。
    说明:MySQL 并不是跳过 offset 行,而是取 offset+N 行,然后返回放弃前 offset 行,返回 N 行,那当 offset 特别大的时候,效率就非常的低下,要么控制返回的总页数,要么缩减对要放弃的offset行的获取成本。
    正例:先快速定位需要获取的 id 段,然后再关联:
    SELECT a.* FROM 表 1 a, (select id from 表 1 where 条件 LIMIT 100000,20 ) b where a.id=b.id

    5.在 varchar 字段上建立索引时,必须指定索引长度,没必要对全字段建立索引,根据实际文本区分度决定索引长度即可。

    6.SQL 性能优化的目标:至少要达到 range 级别,要求是 ref 级别,如果可以是 consts 最好。
    说明:
    1)consts 单表中最多只有一个匹配行(主键或者唯一索引),在优化阶段即可读取到数据。 
    2)ref 指的是使用普通的索引(normal index)。
    3)range 对索引进行范围检索。

    7.防止因字段类型不同造成的隐式转换,导致索引失效。
    select id from qs_video_update where bid = 73836918995;
    select id from qs_video_update where bid = '73836918995';//explain一下天壤之别了

    (三)sql语句
    1.count(*)就是 SQL92 定义 的标准统计行数的语法,跟数据库无关,跟 NULL 和非 NULL 无关。 
    说明:count(*)会统计值为 NULL 的行,而 count(列名)不会统计此列为 NULL 值的行。

    《阿里巴巴Java开发手册(详尽版)》免费下载!

    https://yq.aliyun.com/download/2719?do=login&accounttraceid=4a1a0f1f-fceb-44d7-bef3-17b95be52fd9

  • 相关阅读:
    python装饰器执行机制
    蓝桥网试题 java 基础练习 十进制转十六进制
    蓝桥网试题 java 基础练习 十六进制转十进制
    蓝桥网试题 java 基础练习 十六进制转八进制
    蓝桥网试题 java 基础练习 数列排序
    蓝桥网试题 java 入门训练 A+B问题
    蓝桥网试题 java 入门训练 序列求和
    蓝桥网试题 java 入门训练 圆的面积
    蓝桥网试题 java 入门训练 Fibonacci数列
    贪心算法
  • 原文地址:https://www.cnblogs.com/qzzm/p/11212246.html
Copyright © 2011-2022 走看看