编码规范与数学之美感想

命名规约

代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束

代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式

类名使用UpperCamelCase风格,必须遵从驼峰形式(某些情况诸如领域模型相关的命名除外);方法名、参数名、成员变量、局部变量都统一使用lowerCamelCase风格,必须遵从驼峰形式

常量命名全部大写,单词间用下划线隔开

包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词

抽象类命名使用Abstract或Base开头;异常类命名使用Exception结尾;测试类命名以它要测试的类的名称开始,以Test结尾

对于Service和DAO类,基于SOA的理念,暴露出来的服务一定是接口,内部的实现类用Impl的后缀与接口区别

如果是形容能力的接口名称,取对应的形容词做接口名

枚举类名建议带上Enum后缀,枚举成员名称需要全大写,单词间用下划线隔开

如果使用到了设计模式,建议在类名中体现出具体模式

包名统一使用单数形式;类名如果有复数含义,类名可以使用复数形式

不允许出现任何魔法值(即未经定义的常量)直接出现在代码中

不要使用一个常量类维护所有常量,应该按常量功能进行归类,分开维护

常量的复用层次有五层:跨应用共享常量、应用内共享常量、子工程内共享常量、包内共享常量、类内共享常量

如果变量值仅在一个范围内变化用Enum类。如果还带有名称之外的延伸属性,必须使用Enum类

尽量不要在接口里定义变量,如果一定要定义变量,肯定是与接口方法相关,并且是整个应用的基础常量

long或者Long初始赋值时,必须使用大写的L,不能是小写的l,小写容易跟数字1混淆,造成误解

接口类中的方法和属性不要加任何修饰符号(public 也不要加),保持代码的简洁性,并加上有效的Javadoc注释

所有的覆写方法,必须加@Override注解

可变参数必须放置在参数列表的最后。

对外暴露的接口签名,原则上不允许修改方法签名,避免对接口调用方产生影响。接口过时必须加@Deprecated注解,并清晰地说明采用的新接口或者新服务是什么

不能使用过时的类或方法

序列化类新增属性时,请不要修改serialVersionUID字段,避免反序列失败

循环体内,字符串的联接方式,使用StringBuilder的append

final可提高程序响应效率

慎用Object的clone方法来拷贝对象

所有的相同类型的包装类对象之间值的比较,全部使用equals方法比较

所有的POJO类属性必须使用包装数据类型

RPC方法的返回值和参数必须使用包装数据类型

所有的局部变量【推荐】使用基本数据类型

Service/DAO层方法命名规约
- 获取单个对象的方法用get做前缀
- 获取多个对象的方法用list做前缀
- 获取统计值的方法用count做前缀
- 插入的方法用save(推荐)或insert做前缀
- 删除的方法用remove(推荐)或delete做前缀
- 修改的方法用update做前缀

定义DO/DTO/VO等POJO类时,不要设定任何属性默认值

构造方法里面禁止加入任何业务逻辑,如果有初始化逻辑,请放在init方法中

当一个类有多个构造方法,或者多个同名方法,这些方法应该按顺序放置在一起,便于阅读

类内方法定义顺序依次是:公有方法或保护方法 > 私有方法 > getter/setter方法

setter方法中,参数名称与类成员变量名称一致,this.成员名=参数名。在getter/setter方法中,尽量不要增加业务逻辑

类成员与方法访问控制从严

缩进采用4个空格,禁止使用tab字符

单行字符数限不超过 120 个

IDE的text file encoding设置为UTF-8; IDE中文件的换行符使用Unix格式,不要使用windows格式

方法体内的执行语句组、变量的定义语句组、不同的业务逻辑之间或者不同的语义之间插入一个空行

获取单例对象需要保证线程安全,其中的方法也要保证线程安全

创建线程或线程池时请指定有意义的线程名称,方便出错时回溯

线程资源必须通过线程池提供,不允许在应用中自行显式创建线程

线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor去创建

多线程并行处理定时任务时,Timer运行多个TimeTask时,只要其中之一没有捕获抛出的异常,其它任务便会自动终止运行,使用ScheduledExecutorService则没有这个问题

使用CountDownLatch进行异步转同步操作,每个线程退出前必须调用countDown方法,线程执行代码注意catch异常,确保countDown方法可以执行,
避免主线程无法执行至countDown方法,直到超时才返回结果回溯

volatile解决多线程内存不可见问题。对于一写多读,是可以解决变量同步问题,但是如果多写,同样无法解决线程安全问题

HashMap在容量不够进行resize时由于高并发可能出现死链

ThreadLocal无法解决共享对象的更新问题,ThreadLocal对象建议使用static修饰。这个变量是针对一个线程内所有操作共有的,所以设置为静态变量,
所有此类实例共享此静态变量

所有的枚举类型字段必须要有注释,说明每个数据项的用途

与其"半吊子"英文来注释,不如用中文注释把问题说清楚。专有名词与关键字保持英文原文即可

注释掉的代码尽量要配合说明,而不是简单的注释掉

好的命名、代码结构是自解释的,注释力求精简准确、表达到位

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

表名、字段名必须使用小写字母或数字;禁止出现数字开头,禁止两个下划线中间只出现数字

表名不使用复数名词

禁用保留字

唯一索引名为uk_字段名;普通索引名则为idx_字段名

表的命名最好是加上业务名称_表的作用

库名与应用名称尽量一致

表必备三字段:id, gmt_create, gmt_modified

如果存储长度大于此值,定义字段类型为text,独立出来一张表,用主键来对应,避免影响其它字段索引效率

如果修改字段含义或对字段表示的状态追加时,需要及时更新字段注释

字段允许适当冗余,以提高性能,但是必须考虑数据同步的情况

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

合适的字符存储长度,不但节约数据库表空间、节约索引存储,更重要的是提升检索速度

业务上具有唯一特性的字段,即使是组合字段,也必须建成唯一索引

超过三个表禁止join

在varchar字段上建立索引时,必须指定索引长度

页面搜索严禁左模糊或者全模糊

如果有order by的场景,请注意利用索引的有序性

利用延迟关联或者子查询优化超多分页场景

建组合索引的时候,区分度最高的在最左边

不要使用count(列名)或count(常量)来替代count(*)

在代码中写分页查询逻辑时,若count为0应直接返回,避免执行后面的分页语句

不得使用外键与级联,一切外键概念必须在应用层解决

禁止使用存储过程,存储过程难以调试和扩展,更没有移植性

in操作能避免则避免,若实在避免不了,需要仔细评估in后边的集合元素数量,控制在1000个之内

在表查询中,一律不要使用 * 作为查询的字段列表,需要哪些字段必须明确写明

推荐尽量少用else, if-else的方式可以改写成:
if(condition){
...
return obj;
}
// 接着写else的业务逻辑代码;

如果非得使用if()...else if()...else...方式表达逻辑,【强制】请勿超过3层,超过请使用状态设计模式

方法中需要进行参数校验的场景:
1) 调用频次低的方法。
2) 执行时间开销很大的方法,参数校验时间几乎可以忽略不计,但如果因为参数错误导致中间执行回退,或者错误,那得不偿失。
3) 需要极高稳定性和可用性的方法。
4) 对外提供的开放接口,不管是RPC/API/HTTP接口。
5) 敏感权限入口。

1.7.8 方法中不需要参数校验的场景:
1) 极有可能被循环调用的方法,不建议对参数进行校验。但在方法说明里必须注明外部参数检查
2) 底层的方法调用频度都比较高,一般不校验。毕竟是像纯净水过滤的最后一道,参数错误不太可能到底层才会暴露问题。一般DAO层与Service层都在同一个应用中,
部署在同一台服务器中,所以DAO的参数校验,可以省略
3) 被声明成private只会被自己代码所调用的方法,如果能够确定调用方法的代码传入参数已经做过检查或者肯定不会有问题,此时可以不校验参数

在quanta本来就在学SQL,数据库,想把后台只有php的技术栈扩充到java,所以选了阿里云的java编码规范,总之,用好这些编码规范肯定是会有收益的,代码的简洁和可读才是编码的艺术。

数学之美读后感想:

读了开头的几篇,就把我惊艳,这不正好是实验室搞得东西吗,之前也略有所学,感受到了人类科学的智慧,能用DNN做出语言模型来预测句子出现概率,还有通过词嵌入来

降维,还有卷积层和循环网络,遗忘门的设计,action机制都不得不佩服数学的精妙,把他们一个拼接起来组成模型,输入后就能产生输出,就像一个黑箱一样,懂的人自然懂,

不懂的人就觉得很高大上,我现在在加大力度学习深度学习,学习里面算法与思想,发现其实里面的原理也是基于基础的算法的,

书籍方面在阅读西瓜书,课程我是推荐吴恩达的机器学习和深度学习,直接把高大上的东西讲的平民化,人人有AI搞,),大爱吴恩达大大。

原文地址:https://www.cnblogs.com/likeghee/p/11441848.html

时间: 2024-11-10 06:30:55

编码规范与数学之美感想的相关文章

代码规范&《数学之美》读后感

一.代码规范 参考自 http://c.biancheng.net/view/158.html 1) 空行 空行起着分隔程序段落的作用.空行得体将使程序的布局更加清晰.空行不会浪费内存,虽然打印含有空行的程序会多消耗一些纸张,但是值得. 规则一:定义变量后要空行.尽可能在定义变量的同时初始化该变量,即遵循就近原则.如果变量的引用和定义相隔比较远,那么变量的初始化就很容易被忘记.若引用了未被初始化的变量,就会导致程序出错. 规则二:每个函数定义结束之后都要加空行. 总规则:两个相对独立的程序块.变

编码规范&读《数学之美》有感

编码规范 & 读<数学之美>感想 l  编码规范 一.排版 1.关键词和操作符之间加适当的空格. 2.相对独立的程序块与块之间加空行 3.较长的语句.表达式等要分成多行书写. 4.划分出的新行要进行适应的缩进,使排版整齐,语句可读. 5.长表达式要在低优先级操作符处划分新行,操作符放在新行之首. 6.循环.判断等语句中若有较长的表达式或语句,则要进行适应的划分. 7.若函数或过程中的参数较长,则要进行适当的划分. 8.不允许把多个短语句写在一行中,即一行只写一条语句. 9.函数或过程的

代码规范与《数学之美》读后感

1.C++代码规范: (Googled代码规范): https://zh-google-styleguide.readthedocs.io/en/latest/contents/ 2. <<数学之美>>读后感: 在读这本书之前,自己对于自然语言处理的理解,一直是囿于语言学的思维中,如如何实现词义的上下文理解,以前的自己会马上想到结合语法,但是具体到计算机如何实现却不得为知,直到看到书中使用互信息,和信息熵的统计学的方法,解词语二义性,思维突然从原本的文科思维转换为是数学思维,对这样

C++代码规范及《数学之美》读后感

代码规范 采用Google C++ Style Guide 原文链接:https://google.github.io/styleguide/cppguide.html 中文版链接:https://zh-google-styleguide.readthedocs.io/en/latest/google-cpp-styleguide/ 部分摘录: 1.1. Self-contained 头文件 头文件应该以 .h 结尾.至于用来插入文本的文件,说到底它们并不是头文件,所以应以 .inc 结尾. 2

PEP8编码规范,及开发中的一些惯例和建议

为什么要有编码规范 规范的代码给人的第一感觉是[美观],美的东西总是更加的吸引人,也愿意观看.乱糟糟得是不是会让人不由自主地想飙脏话.所以美观进而带来的是代码的[可读性]强,想一想你写的代码可读性非常高,是不是维护起来也更加容易,所以可读性强带来的是代码的[可维护性]强,最终你的代码[健壮性]高,不容易出BUG,出了也容易解决. 错误的代码编写示例 1 from django.conf import settings 2 from user.models import * 3 import sy

数学之美番外篇:平凡而又神奇的贝叶斯方法

转载自:http://mindhacks.cn/2008/09/21/the-magical-bayesian-method/ 概率论只不过是把常识用数学公式表达了出来. ——拉普拉斯 记得读本科的时候,最喜欢到城里的计算机书店里面去闲逛,一逛就是好几个小时:有一次,在书店看到一本书,名叫贝叶斯方法.当时数学系的课程还没有学到概率统计.我心想,一个方法能够专门写出一本书来,肯定很牛逼.后来,我发现当初的那个朴素归纳推理成立了——这果然是个牛逼的方法. ——题记 目录 0. 前言 1. 历史   

【转载】数学之美番外篇:平凡而又神奇的贝叶斯方法

数学之美番外篇:平凡而又神奇的贝叶斯方法 BY 刘未鹏 – SEPTEMBER 21, 2008POSTED IN: 数学, 机器学习与人工智能, 计算机科学 概率论只不过是把常识用数学公式表达了出来. ——拉普拉斯 记得读本科的时候,最喜欢到城里的计算机书店里面去闲逛,一逛就是好几个小时:有一次,在书店看到一本书,名叫贝叶斯方法.当时数学系的课程还没有学到概率统计.我心想,一个方法能够专门写出一本书来,肯定很牛逼.后来,我发现当初的那个朴素归纳推理成立了——这果然是个牛逼的方法. ——题记 目

Koala编码规范

Koala编码规范 1 前言 本文档是Koala项目编程风格规范的完整定义,项目模块源文件必须符合本文档设定的规则. 与其它的编程风格指南一样,这里所讨论的不仅仅是编码格式美不美观的问题, 同时也讨论一些约定及编码标准. 2 源文件 2.1 文件编码:UTF-8 2.2 命名:大写字母开头,驼峰式,只允许英文 2.3 文件结构按照顺序如下表所示: 元素 要求 1,许可证或版权信息 2,package语句 package语句不换行 3,import语句 不能使用通配符 4,一个顶级类 注:以上每个

数学之美笔记(一)

数学.文字和自然语言一样,都是信息的载体,它们之间原本有着天然的联系.语言和数学的产生都是为了同一个目的--记录和传播信息. 翻译这件事之所以能达成,仅仅是因为不同的文字系统在记录信息的能力上是等价的. 文字本身的载体是石头还是纸张并不重要,它所承载的信息才是最重要的. 罗塞塔石碑的启示: (1) 信息的冗余是信息安全的保障,这对于信道编码有指导意义. (2) 语言的数据(即语料),尤其是双语或者多语的对照对翻译至关重要,这是我们从事机器翻译研究的基础.. 数字是计数系统的基础.数字和其他文字一