8月2日

git remote命令可以查看到远程仓库的简短名称:

如果要看具体的URL,可以用git remote -v,发现关联的远程仓库就是我自己的github仓库:

使用git remote add remote git@github.com:antirez/redis.git 把这个远程仓库添加到remote中:

Git fetch此命令会到远程仓库中拉取对应你本地仓库中还没有的数据,

但注意它只是把远程分支到你本地对于到分支上的数据更新了,你本地的库里面还是没有任何数据的。比如我在远程库修改了Test.txt

此时再接着执行merge操作,把远程库的代码merge到你本地库版本当中就会有数据了。

Java开发手册

命名规范

在常量与变量的命名时,表示类型的名词放在词尾,以提升辨识度。

startTime / workQueue / nameList / TERMINATED_THREAD_COUNT

如果模块、接口、类、方法使用了设计模式,在命名时需体现出具体模式。

正例: public class OrderFactory;

​ public class LoginProxy;

​ public class ResourceObserver;

接口类中的方法和属性不要加任何修饰符号(public 也不要加),保持代码的简洁性,并加上有效的Javadoc注释。尽量不要在接口里定义变量,如果一定要定义变量,肯定是与接口方法相关,并且是整个应用的基础常量。

正例:

接口方法签名 void commit();

接口基础常量 String COMPANY = “alibaba”;

A) Service/DAO层方法命名规约

  • 获取单个对象的方法用get做前缀。

  • 获取多个对象的方法用list做前缀,复数形式结尾如:listObjects。

  • 获取统计值的方法用count做前缀。

  • 插入的方法用save/insert做前缀。

  • 删除的方法用remove/delete做前缀。

  • 修改的方法用update做前缀。

B) 领域模型命名规约

  • 数据对象:xxxDO,xxx即为数据表名。
  • 数据传输对象:xxxDTO,xxx为业务领域相关的名称。
  • 展示对象:xxxVO,xxx一般为网页名称。
  • POJO是DO/DTO/BO/VO的统称,禁止命名成xxxPOJO。

采用4个空格缩进,禁止使用tab字符。 说明:如果使用tab缩进,必须设置1个tab为4个空格。IDEA设置tab为4个空格时,请勿勾选Use tab character;而在eclipse中,必须勾选insert spaces for tabs。

注释的双斜线与注释内容之间有且仅有一个空格。

正例: // 这是示例注释,请注意在双斜线之后有一个空格

不同逻辑、不同语义、不同业务的代码之间插入一个空行分隔开来以提升可读性。 说明:任何情形,没有必要插入多个空行进行隔开。

所有整型包装类对象之间值的比较,全部使用equals方法比较。 说明:对于Integer var = ? 在-128至127范围内的赋值,Integer对象是在 IntegerCache.cache产生,会复用已有对象,这个区间内的Integer值可以直接使用==进行判断,但是这个区间之外的所有数据,都会在堆上产生,并不会复用已有对象,这是一个大坑,推荐使用equals方法进行判断。

关于基本数据类型与包装数据类型的使用标准如下:

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

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

所有的局部变量使用基本数据类型。 说明:POJO类属性没有初值是提醒使用者在需要使用时,必须自己显式地进行赋值,任何NPE问题,或者入库检查,都由使用者来保证。

数据库的查询结果可能是null,因为自动拆箱,用基本数据类型接收有NPE风险。

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

POJO类必须写toString方法。使用IDE中的工具:source> generate toString时,如果继承了另一个POJO类,注意在前面加一下super.toString。

说明:在方法执行抛出异常时,可以直接调用POJO的toString()方法打印其属性值,便于排查问题。

当一个类有多个构造方法,或者多个同名方法,这些方法应该按顺序放置在一起,便于阅读,此条规则优先于下一条。 19. 【推荐】 类内方法定义的顺序依次是:公有方法或保护方法 > 私有方法 > getter / setter 方法。

慎用Object的clone方法来拷贝对象。 说明:对象clone方法默认是浅拷贝,若想实现深拷贝需覆写clone方法实现域对象的深度遍历式拷贝。

深拷贝实现方法:

  1. JSON方法
  • 将对象转换为json字符串形式
  • 将转换而来的字符串转换为原生js对象JSON.parse

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

  1. 如果不允许外部直接通过new来创建对象,那么构造方法必须是private。
  2. 工具类不允许有public或default构造方法。
  3. 类非static成员变量并且与子类共享,必须是protected。
  4. 类非static成员变量并且仅在本类使用,必须是private。
  5. 类static成员变量如果仅在本类使用,必须是private。
  6. 若是static成员变量,考虑是否为final。final修饰的时候代表对象只能赋值一次,要求它的值不能再被修改。
  7. 类成员方法只供类内部调用,必须是private。
  8. 类成员方法只对继承类公开,那么限制为protected。

任何类、方法、参数、变量,严控访问范围。过于宽泛的访问范围,不利于模块解耦。思考:如果是一个private的方法,想删除就删除,可是一个public的service成员方法或成员变量,删除一下,不得手心冒点汗吗?变量像自己的小孩,尽量在自己的视线内,变量作用域太大,无限制的到处跑,那么你会担心的。

集合

关于hashCode和equals的处理,遵循如下规则: 1) 只要覆写equals,就必须覆写hashCode。 2) 因为Set存储的是不重复的对象,依据hashCode和equals进行判断,所以Set存储的对象必须覆写这两个方法。 3) 如果自定义对象作为Map的键,那么必须覆写hashCode和equals。

说明:String已覆写hashCode和equals方法,所以我们可以愉快地使用String对象作为key来使用。

在使用Collection接口任何实现类的addAll()方法时,都要对输入的集合参数进行NPE判断。

说明:在ArrayList#addAll方法的第一行代码即Object[] a = c.toArray(); 其中c为输入集合参数,如果为null,则直接抛出异常。

使用工具类Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方法,它的add/remove/clear方法会抛出UnsupportedOperationException异常。

说明:asList的返回对象是一个Arrays内部类,并没有实现集合的修改方法。Arrays.asList体现的是适配器模式,只是转换接口,后台的数据仍是数组。


autowire注解,什么时候需要,什么时候不需要,

@RequiredConstructed注解 以及和final之间的关系

c t r l+Alt+鼠标左键,或者加b

fieldname: 字段名

joinname:外联?

Entity 中与部门关联的字段名称

注解类:自定义的可以成为java程序标记的类

getClass().getAnnotation 返回注解类的注解

Pageable 是Spring Data库中定义的一个接口,用于构造翻页查询,是所有分页相关信息的一个抽象,通过该接口,我们可以得到和分页相关所有信息(例如pageNumber、pageSize等),这样,Jpa就能够通过pageable参数来得到一个带分页信息的Sql语句。

Elasticsearch也是使用Java编写并使用Lucene来建立索引并实现搜索功能,但是它的目的是通过简单连贯的RESTful API全文搜索变得简单并隐藏Lucene的复杂性。

不过,Elasticsearch不仅仅是Lucene和全文搜索引擎,它还提供:

  • 分布式的实时文件存储,每个字段都被索引并可被搜索
  • 实时分析分布式搜索引擎
  • 可以扩展到上百台服务器,处理PB级结构化或非结构化数据

结构化和非结构化

关系数据库用于结构化数据,大多数其他类型的应用程序用于非结构化数据。

结构化数据也称作行数据,是由二维表结构来逻辑表达和实现的数据,严格地遵循数据格式与长度规范,主要通过关系型数据库进行存储和管理。

与结构化数据相对的是不适于由数据库二维表来表现的非结构化数据,包括所有格式的办公文档、XML、HTML、各类报表、图片和音频、视频信息等。