标签:java
阿里巴巴java开发手册阅读笔记

读后心得 编程规约 POJO 类中布尔类型的变量,都不要加 is 前缀,否则部分框架解析会引起序列化错误 心得:这个之前我写的代码的确会下意识地就用isXXX,现在遵守这个规范,因为一些RPC框架在反向解析的时候,“误以为”对应的属性名称是 deleted,导致属性获取不到,进而抛 出异常。 杜绝完全不规范的缩写,避免望文不知义 心得:反例举了2个例子,AbstractClass“缩写”命名成 AbsClass;condition“缩写”命名成 condi,此类随意缩写严重降低了代码的可阅读性。好吧,我就是把抽象类写成AbsXXX的,现在遵守这个规范,写全。 Service/DAO 层...

阅读更多
Drools 笔记

Working Memory:工作内存,drools规则引擎会从Working Memory中获取数据并和规则文件中定义的规则进行模式匹配,所以我们开发的应用程序只需要将我们的数据插入到Working Memory中即可,例如本案例中我们调用kieSession.insert(order)就是将order对象插入到了工作内存中。 Fact:事实,是指在drools 规则应用当中,将一个普通的JavaBean插入到Working Memory后的对象就是Fact对象,例如本案例中的Order对象就属于Fact对象。Fact对象是我们的应用和规则引擎进行数据交互的桥梁或通道。 Rules:规则库,...

阅读更多
Java

基础 移位 如果移位的位数超过数值所占有的位数会怎样? 当 int 类型左移/右移位数大于等于 32 位操作时,会先求余(%)后再进行左移/右移操作。 也就是说:x<<42等同于x<<10,x>>42等同于x>>10,x >>>42等同于x >>> 10。 基本类型 为什么说是几乎所有对象实例都存在于堆中呢? 这是因为 HotSpot 虚拟机引入了 JIT 优化之后,会对对象进行逃逸分析,如果发现某一个对象并没有逃逸到方法外部,那么就可能通过标量替换来实现栈上分配,而避免堆上分配内存。 如果没有逃逸分析,则所有...

阅读更多
Java学习笔记

目录JVM常用JVM运行模式JVM的锁偏向锁轻量级锁自旋锁锁消除锁粗化MQRabbitMQAMQP基本概念死信队列RabbitMQ如何保证消息不丢Kafkaack机制高性能的关键限流计数器滑动窗口漏桶令牌桶KeytoolMavenGradlepackage into a fat jar面试微服务设计的原则CAP理论BASE理论Java不通过构造函数也能创建对象吗?引用类型单例模式SpringAOP的原理BeanFactory与FactoryBean解决循环依赖的方式Spring实现单例模式SpringBoot自动配置的原理Tomcat三种模式undertowfinal线程池ThreadLoca...

阅读更多
JPA & Hibernate笔记

目录主键生成策略JPA的Hibernate的 主键生成策略 JPA的 Auto, 根据不同的数据库自动选择,比如mysql的使用主键自增长,oracle和postgres使用sequence Identity, 主键自增长 Sequence, 序列,mysql不支持 Table, 使用一个表来生成 Hibernate的 Hibernate是对JPA的实现,并做了扩展,一共有下面这些: static { GENERATORS.put("uuid", UUIDHexGenerator.class); GENERATORS.put(&quo...

阅读更多
实现一下SHA1算法

由于工作中经常会接触到数字签名,摘要算法等知识。现在准备实现一个最基础的摘要算法: SHA1。 算法的文档在RFC3174。这一份 standard 里面定义了很多规范,我们一个一个看。 输入内容长度限制和输出内容的长度 When a message of any length < 2^64 bits is input, the SHA-1 produces a 160-bit output called a message digest. 输入的内容转成二进制之后,长度必须小于 2^64 位。由于这是一个 Hash 算法,输出的长度是固定,SHA1 的输出长度是 160 位的二进制。...

阅读更多
初步学习JDK的Enum类源码

最近有空看了 Enum 类的源码,下面只挑重点部分记录一下。 抽象类 所有 enum 类型自动继承自 Enum 类,由于 java 的单继承特性,也就使得 enum 类型不能继承,个人觉得这是缺点之一,平时开发中会有一些公共的代码无法通过继承来共享。 核心成员为 name 和 ordinal private final String name; private final int ordinal; name 是定义 enum 时的名字,ordinal 是位置,从 0 开始 实现 Comparable 接口 Enum 可比较,实现的 compareTo 方法如下: public final i...

阅读更多
初步学习JDK的String类源码

最近有空看了部分 String 类的源码,下面只挑重点部分记录一下。 为什么要用 final 修饰类 第一个比较特别的就是,String 类是用 final 修饰的,表明这个类不可被继承。 public final class String 为什么要防止被继承呢?经过一番研究和思考之后,目前比较靠谱的解析是:String 类是设计成不可变的。假设可以被继承,我们就可以写一个子类继承 String,然后覆盖它的部分方法,使得不可变性遭到破坏。最后,我们把这个子类传给使用方,使用方预期是一个不可变的 String 类,实际得到的是一个可变的子类,这样就出问题了。 使用 char value[]存...

阅读更多
阿里java开发者手册读书笔记

POJO 类中布尔类型的变量,都不要加 is 前缀,否则部分框架解析会引起序列化错误 心得:这个之前我写的代码的确会下意识地就用isXXX,现在遵守这个规范,因为一些RPC框架在反向解析的时候,“误以为”对应的属性名称是 deleted,导致属性获取不到,进而抛 出异常。 杜绝完全不规范的缩写,避免望文不知义 心得:反例举了2个例子,AbstractClass“缩写”命名成 AbsClass;condition“缩写”命名成 condi,此类随意缩写严重降低了代码的可阅读性。好吧,我就是把抽象类写成AbsXXX的,现在遵守这个规范,写全。 Service/DAO 层方法命名规约 获取...

阅读更多
JAVA笔记

summary : 内置类型(int之类)有对应的引用类型,集合类型里面的元素的类型,不能用内置类型, 而要用对应的引用类型。ArrayList<int>是不对的,要写成ArrayList<Integer> 创建一个Integer对象,不要用 new Integer(10),而要用Integer.valueOf(10), 前者会不断创建新对象,而后者对于同一个整数只会创建一个对象,因为后者是以静态工厂 的方式创建的。同理,其他的类型Boolean, Float也一样。 获取enum元素的整数值,方法是使用ordinal()。如: enum Name = {H...

阅读更多