当前位置: 首页 > 后端技术 > PHP

阿里巴巴java开发手册学习记录,php版

时间:2023-03-30 01:35:24 PHP

一、编程协议(一)命名风格1、目录使用小写+下划线home、view、model、admin_view2、类UpperCamelCasePhpMailer方法lowerCamelCasegetUserName属性lowerCamelCasetableName函数小写字母和下划线get_client_ip常量全部大写PASSWORD如果模块、接口、类或方法使用了设计模式,则特定模式必须在命名中体现。在名称中体现设计模式,有助于读者快速理解架构设计理念。(2)代码格式1.//这是一个示例注释,请注意双斜杠后有一个空格2.ifelse的语言结构只在最后换行e.g.if(flag==1){System.出去。println("world");}else{System.out.println("ok");}3.一行代码不超过120个字符,且总行数超过需要使用单个方法换行不超过80行。4.代码逻辑区分红花绿叶,个性和共性,将绿叶逻辑分离出来作为附加方法,使主代码更加清晰;将共性逻辑抽取出来成为一个共性方法,便于复用和维护。(三)OOP协议1.所有重写的方法必须用@Override注解2.任何类、方法、参数、变量,严格控制访问范围。访问范围过大不利于模块解耦。如果是私有方法,想删就删,但是如果删了公有服务成员方法或者成员变量,是不是有点汗?3、避免重复代码(Don'tRepeatYourself),即DRY原则2、安全规定1、用户输入的SQL参数通过参数绑定或METADATA字段值严格限制,防止SQL注入,并且是禁止直接使用前端发送的字符串拼接SQL访问数据库。3、MySQL协议(一)建表协议1、任何字段如果是非负数,则必须是无符号的2、表示是或否概念的字段必须以is_xxx的形式命名,数据类型isunsignedtinyint(1表示是,0表示否)3.表名不使用复数名词。表名应该只表示表中的实体内容,不表示实体的个数。4、唯一索引名为uk_fieldname,公共索引名为idx_fieldname。5、decimal类型为decimal,禁止使用float和double。//解释:在存储float和double的时候,存在精度损失的问题,比较值的时候很有可能会得到不正确的结果。如果存储数据的范围超出小数范围,建议将数据拆分成整数和小数分开存储。6、varchar是不预分配存储空间的变长字符串,长度不能超过5000,如果存储长度大于这个值,定义字段类型为text,单独建表,对应主键,以免影响其他字段的索引效率。7.禁用保留字,如desc、range、match、delayeddesc//这个容易误用,会用descb8代替。该表必须具有三个字段:id、gmt_create、gmt_modified。注意:id必须是主键,类型bigintunsigned,单表自增,步长1。gmt_create和gmt_modified类型都是datetime类型,前者表示当前主动创建时态,后一个过去分词表示被动更新。//这里9。【建议】单表行数超过500万行或单表容量超过2GB时,建议分库分表。(二)索引协议1、业务中具有唯一性的字段,即使是组合字段,也必须建立唯一性索引。解释:不要认为唯一索引会影响插入速度。这个速度损失可以忽略不计,但是对搜索速度的提升是很明显的;另外,即使在应用层做了非常完善的checksum控制,只要没有唯一索引,根据墨菲定律,就一定会有脏数据产生。2.禁止超过三张表加入。需要连接的字段的数据类型必须绝对一致;多表关联查询时,保证关联字段需要有索引。3、使用覆盖索引进行查询操作,避免返表。解释:如果一本书需要知道第11章的标题,它会打开第11章对应的页面吗?只需浏览目录,该目录作为覆盖索引。//这个例子非常非常好。以后通过书籍和目录来了解索引和数据是一个很好的方法。//将出现额外的列:使用index4。超多页面场景延迟关联或子查询优化。解释:MySQL并没有跳过offset行,而是取offset+N行,然后返回放弃前的offset行,返回N行,那么当offset很大时,效率很低,还是控制总数返回的页数,或减少要丢弃的偏移行的获取成本。正例:先快速定位到需要获取的id段,然后关联:SELECTa.*FROMtable1a,(selectidfromtable1whereconditionLIMIT100000,20)bwherea.id=b.id5.在varchar字段上创建索引时,必须指定索引长度。不需要对整个字段都建立索引,索引长度可以根据实际的文本判别来确定。6、SQL性能优化的目标:至少达到range级别,要求是ref级别,如果能consts最好。注意:1)consts单表最多只有一个匹配行(主键或唯一索引),优化阶段可以读取数据。2)ref指的是使用普通索引(normalindex)。3)range对索引进行范围检索。7、防止不同字段类型引起的隐式转换导致索引失败。从qs_video_update中选择ID,其中出价=73836918995;selectidfromqs_video_updatewherebid='73836918995';//解释区别(3)sql语句1.count(*)是SQL92定义的统计行的标准语法,与数据库无关,与NULL无关和非空。说明:count(*)会统计值为NULL的行,count(列名)不会统计值为NULL的行。