避免错误

1、缺少必要的注释

大段的if-else缺少注释,让维护者无法快速分辨分支逻辑。特定地方存在hack或复杂逻辑的代码,缺少注释会让后来者不明所以。为了你好,也为了后来者好,请务必加上代码。说不准以后还是由你来维护这段代码。

2、不变和变化的部分拆分

程序员中流传着一句话,此处不要写死,将来必改。有经验的程序员会将一些业务层的逻辑抽象出来,写成配置文件,好处就是若后续需求有改变,只需改配置文件即可,肯定不会引入bug。

阅读全文 »

优化Group By语句

默认情况下,MySQL 排序所有GROUP BY col1,col2,….。查询的方法如同在查询中指定ORDER BY col1,col2,…。如果显式包括一个包含相同的列的ORDER BY子句,MySQL 可以毫不减速地对它进行优化,尽管仍然进行排序。如果查询包括GROUP BY 但你想要避免排序结果的消耗,你可以指定ORDER BY NULL禁止排序。

优化Order by语句

在某些情况中,MySQL 可以使用一个索引来满足ORDER BY 子句,而不需要额外的排序。where 条件和order by 使用相同的索引,并且order by 的顺序和索引顺序相同,并且order by 的字段都是升序或者都是降序。

优化insert语句

阅读全文 »

目前,社区有多种 Commit message 的写法规范。本文介绍《Angular 规范》,这是目前使用最广的写法,比较合理和系统化,并且有配套的工具。

一、Commit message 的作用

格式化的Commit message,有几个好处。

(1)提供更多的历史信息,方便快速浏览。

比如,下面的命令显示上次发布后的变动,每个commit占据一行。你只看行首,就知道某次 commit 的目的。

阅读全文 »

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public static void main(String[] args) {
/*方法一*/
int a = 3;
int b = 4;
a=a+b;
b=a-b;
a=a-b;
System.out.println("a="+a+",b="+b);

/*方法二利用位运算交换,效率很高*/
int aa=3;
int bb=4;
aa=aa^bb;
bb=bb^aa;
aa=aa^bb;
System.out.println("aa="+aa+",bb="+bb);
}

一、Spring模块

(1)核心容器

  • Spring-Core:核心工具类,Spring其他模块大量使用Spring-Core
  • Spring-Bean:Spring定义Bean的支持
  • Spring-Context:运行时Spring容器
  • Spring-Context-Support:Spring容器对第三方包的集成支持
  • Spring-Expression:使用表达式语言在运行时查询和操作对象

(2)AOP

  • Spring-Aop:基于代理的AOP支持
  • Spring-Aspects:基于AspectJ的AOP支持
阅读全文 »

作为Java开发者,我们每天都会创建大量的对象,但是,我们总是使用管理依赖系统(如Spring框架)来创建这些对象。其实还有其他方法可以创建对象,在接下来的文章中我会进行详细介绍。
1.使用new关键字
这是最常见的创建对象的方法,并且也非常简单。通过使用这种方法我们可以调用任何我们需要调用的构造函数。

1
2
Employee emp1 = new Employee();
0: new #19 // class org/programming/mitra/exercises/Employee 3: dup 4: invokespecial #21 // Method org/programming/mitra/exercises/Employee."":V

2.使用class类的newInstance方法
我们也可以使用class类的newInstance方法来创建对象。此newInstance方法调用无参构造函数以创建对象。
我们可以通过newInstance 用以下方式创建对象:

1
Employee emp2 = (Employee) Class.forName("org.programming.mitra.exercises.Employee").newInstance;

或者

阅读全文 »

【强制】表达是与否概念的字段,必须使用 is_xxx 的方式命名,数据类型是 unsigned tinyint( 1 表示是,0 表示否),此规则同样适用于 odps 建表。
说明:任何字段如果为非负数,必须是 unsigned。
举例:is_star tinyint unsigned DEFAULT NULL COMMENT ‘项目状态(1 表示是,0 表示否)’


【强制】表名、字段名必须使用小写字母或数字;禁止出现数字开头,禁止两个下划线中间只出现数字。数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑。
正例:getter_admin,task_config,level3_name
反例:GetterAdmin,taskConfig,level_3_name


【强制】表名不使用复数名词。
说明:表名应该仅仅表示表里面的实体内容,不应该表示实体数量,对应于 DO 类名也是单数形式,符合表达习惯。

阅读全文 »

MySQL是非常流行的关系型数据库,虽然拥有的SQL语法大部分是符合ANSI SQL标准的,但是它自身还是携带了很多优秀的、私有的语句和指示符,今天我们就来分析一下。

EXPLAIN

难度指数:★ ★ ★ ★ ★
推荐指数:★ ★ ★ ★ ★
当我们网站或者接口访问频率越来越大,这时如果我们的相关SQL语句执行时间很长的话,就很容易造成网站或者接口响应慢的情况,那么使用explain语句,我们能够清楚的知道MySQL是怎么执行我们的SQL语句的,执行某个查询语句总共查询了多少条记录,使用了什么表以及多表的链接顺序是怎么样的,该查询使用了哪些索引等等信息,有了这些信息,我们能够根据多次执行和分析优化我们的数据库,该建立索引的建索引,该删除的索引就删除掉。

FOR UPDATE

难度指数:★ ★ ☆ ☆ ☆
推荐指数:★ ★ ★ ★ ★
有时我们有这样的一种情况,就是需要将某个SELECT语句查询的行进行锁定,防止其他客户端修改,那么这个时候,我们可以使用这个指示符来完成。

阅读全文 »