【小家java】《阿里巴巴 Java开发手册》读后感---拥抱规范,远离伤害(下)

简介: 【小家java】《阿里巴巴 Java开发手册》读后感---拥抱规范,远离伤害(下)

数据库相关


1.表达是否概念的字段,必须使用isxxx的方式命名,数据类型是unsigned tinyint(1表示是,0表示否),如删除标记字段:is_deleted


2.请用表达清晰的字段意思来表示字段的意义。比如该字段就是表示是否删除的状态,亲不要使用意义不明显的status,而是使用is_deleted。具象 > 抽象


3.小数类型用decimal,禁止使用float和double。


4.varchar是可变字符串,不预选分配存储空间的话,长度不要超过5000个字符。如果超过则用text,独立一张表,用主键对应,避免影响到其他字段的索引效率。


5.每张表必备的三个字段:id(unsigned bigint)、gmt_create(datetime类型)、gme_modified(datetime类型)


6.字段允许适当冗余,以提高查询性能,但必须考虑数据一致性。冗余的字段必须不是频繁修改的字段,不是varhar超长字段(更不能是text字段)。


7.单表行数超过500万行或者单表容量超过2GB才推荐进行分库分表(如果预计三年都达不到这个数据量,不要在创建表的时候就分库分表!)


8.超过三个表禁止使用join,两张表也尽量不要使用join


9.在varchar字段上建立索引时,必须指定索引长度,没必要对全字段建立索引,页面搜索严禁左模糊或者全模糊,如果需要则通过搜索引擎来解决。


充分利用好最左前缀匹配特性!


11.利用延迟关联或者子查询优化超多也分页场景。 pageIndex很大的分页问题

我们知道,当我们表里数据多,我们可以使用分页查询,但是当我们页数很多的时候,我们页码很大的情况下,效率也是会非常低的。


MySQL并不是跳过 offset行,而是取 offset+N行,然后返回放弃前offset行,返回N行,那当 offset特别大的时候,效率就非常的低下,要么控制返回的总页数,要么对超过特定阈值的页数进行SQL改写。


按照这么建议,我们这样来优化我们的sql语句:

// 优化前
SELECT id, cu_id, name, info, biz_type
    , gmt_create, gmt_modified, start_time, end_time, market_type
    , back_leaf_category, item_status, picuture_url
FROM relation
WHERE biz_type = '0'
    AND end_time >= '2014-05-29'
ORDER BY id ASC
LIMIT 149420, 20;
// 优化后
SELECT a.*
FROM relation a, (
        SELECT id
        FROM relation
        WHERE biz_type = '0'
            AND end_time >= '2014-05-29'
        ORDER BY id ASC
        LIMIT 149420, 20
    ) b
WHERE a.id = b.id

解释:其实这里就是通过使用覆盖索引查询返回需要的主键,再根据主键关联原表获得需要的数据。这样就是充分利用了索引!


12. 如果有全球化需要,均以utf-8编码。如果需要存储表情,选择utf8mb4进行存储。


未完,待续(日志规范、设计规范等等)

由于时间有限,今天重点就自己实施验证了上面一些例子,关于其它的,后续有空还会补充完整这篇博文的。


借用灰太狼一句名言:我一定会回来的

个人建议的编码规范


阿里手册已经涉及到的,此处不再提了。本处仅提出个人的一些建议,不喜勿喷


仅代表着我个人的意见,我觉得OK的地方。大家如果觉得好的话,可以帮顶,如果大家对我个人提出的规范有什么想法和建议,非常非常欢迎提出来或者指正,毕竟我个人的经验还不是很足,需要指点、优化。


1.约定大于配置,配置大于编码


2.能约定好的规范,就不要多写一个适配器去兼容


3.除非需要更高的可见性,否则应将所有的域都声明为私有域。


4.除非需要某个域是可变的,否则应将其声明为final域

相关文章
|
2月前
|
安全 IDE Java
Java常见规范及易忘点
遵循Java编程规范和注意易忘点是提高代码质量和可维护性的关键。通过规范的命名、格式、注释和合理的代码组织,可以让代码更加清晰和易于维护。同时,注意空指针检查、线程安全、集合框架和字符串操作等常见易忘点,可以减少程序错误,提高运行效率。结合单一职责原则、面向接口编程和合理的异常处理,能够编写出高质量的Java代码。希望本文能够帮助Java开发者提升编码水平,写出更高效、更可靠的代码。
33 2
|
4月前
|
缓存 算法 Java
【Java引用规范】强软引用
本文详细介绍了Java中引用的概念和作用,包括强引用、软引用、弱引用和虚引用,并探讨了不同引用类型在内存管理和垃圾回收中的特性与用途。强引用是最常见的引用类型,对象只要被引用就不会被垃圾回收;软引用适用于内存敏感的缓存场景,在内存不足时会被回收;弱引用在更早的垃圾回收阶段被清除;虚引用主要用于对象的finalize过程。文章通过示例代码和内存分析工具展示了软引用的具体应用和回收机制。
【Java引用规范】强软引用
|
4月前
|
算法 Oracle Java
Java字符串拼接技术演进及阿里巴巴的贡献
本文主要讲述了Java字符串拼接技术的演进历程,以及阿里巴巴贡献的最新实现 PR 20273。
161 11
|
4月前
|
安全 Java 关系型数据库
代码规范Java阿里巴巴
本文介绍了阿里巴巴的《Java开发手册》,这是一份业界公认的代码规范手册,涵盖编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约七个维度。手册通过强制、推荐、参考三大类规约,详细指导开发者编写高质量的Java代码。文中还提供了常见问题的正反例对比,如方法参数类型一致性、SimpleDateFormat线程安全等问题的解决方案。此外,还介绍了如何安装和使用阿里规范插件来提高编码效率。
821 9
|
4月前
|
算法 Oracle Java
Java字符串拼接技术演进及阿里巴巴的贡献
本文主要讲述了Java字符串拼接技术的演进历程,以及阿里巴巴贡献的最新实现 PR 20273。
111 12
|
3月前
|
Java 编译器 Android开发
java作业的提交规范与要求
java作业的提交规范与要求
36 0
|
4月前
|
Java API 开发者
Java 注释规范
Java中的注释规范包括单行注释(`//`)、多行注释(`/* ... */`)和文档注释(`/** ... */`)。单行注释适用于简短说明,多行注释用于较长描述,文档注释则专为自动生成API文档设计。注释应清晰明了、及时更新,避免冗余,并详细说明参数和返回值。遵循这些规范有助于提高代码的可读性和可维护性。
248 5
|
5月前
|
Java 开发者
Java 编程风格与规范:跟上时代热点,打造高质量代码,为开发者梦想保驾护航
【8月更文挑战第30天】本文强调了Java编程中代码质量和可维护性的重要性,详细介绍了命名规范、代码格式和注释的最佳实践,如使用描述性的命名、适当的缩进及空行,以及关键代码部分的注释说明,同时还提供了避免魔法值和减少代码重复的建议与示例,帮助提升团队协作效率和项目长期发展。
86 2
|
5月前
|
Java
编写规范JAVA代码
本文档制定了Java编程规范,旨在确保系统源程序的可读性和可维护性,适用于所有Java开发、测试及维护过程。规范包括命名规则(如Package、Class及其成员等)与样式规定,强调统一风格以提高协作效率,并列举了具体示例与注意事项,如避免单字符变量名及使用有意义的反义词组命名等。
81 1
|
5月前
|
小程序 JavaScript Java
【资料】阿里Java开发手册
本文是关于分享阿里Java开发手册资源及促进编程规范学习的指南。作者以个人经历引入,讲述了公司领导通过细致讲解阿里Java开发手册,提升了团队对代码质量和编程规范的认识
1165 0
【资料】阿里Java开发手册