Blog

异或运算

异或运算(exclusive or)又记作XOR,一般用插入符号(caret)^表示,其可以看到是更加单纯的或运算(|)。我们知道,或运算的规则是:

  • a=1,b=1,a|b=1 ①
  • a,b任意一个为1,a|b=1 ②

异或运算则是去除了或运算中的规则①,即只有a、b相异时,结果才为真,其他情形都为假。因此异或运算的真值表为:

0^0 = 0
0^1 = 1
1^0 = 1
1^1 = 0

与0异或,其值不变;与1异或,相当于取反。

异或运算有一些特殊的性质,利用这些性质,可以解决特定的问题。这也是本文所要讨论的重点。

阅读全文 ...

同余定理与二进制补码

我们知道,计算机使用2的补码(Two's complements)来表示负数。这样有一个好处:可以使用同一种运算规则来处理正负数的运算,否则,二进制的正数和负数相加,将会得到错误的结果。为了处理这个讹误,必须为负数设计一套“加法器”。关于这一部分的讨论,参照 关于2的补码

而补码使正负数使用同一套“加法器/乘法器”规则,实际上利用了同余运算的性质。

阅读全文 ...

Spring声明式事务的使用

1 从@Transactional注解开始 #

@Transactional注解是使用spring-transaction的最便捷方式。也是使用Spring框架开发最先接触的内容。

当你在一个服务的方法上使用@Transactional注解时,意味着你希望为此方法开启事务支持。如果你的项目成功配置了数据源事务管理器,Spring会为此方法使用如下默认设置开启事务:

阅读全文 ...

MySQL显式锁简单介绍

对于MySQL数据库而言, 事务的隔离级别在不同程度上保证了数据一致性。

我们知道,事务的四大特性:原子性、一致性、隔离性、持久性,其中隔离性就是通过锁机制来保证的。

另外3个性质,通过MySQL的redo logundo log来保证。

MySQL对每条SQL语句的执行,都添加了一个隐式事务,言外之意,就是添加了隐式锁。

除了隐式锁之外,MySQL还可以使用显式锁。

这是从锁的可见性(或者使用方式)上来区分锁。本文不讨论MySQL的粒度锁(表锁,行锁,页锁)。

阅读全文 ...

在SpringBoot中使用MessageSource

几个说明

  1. properties配置文件中,spring.messages.basename必须要加classpath前缀。如 spring.messages.basename=classpath:i18n/messages
  2. 必须要手动配置MessageSource,springboot不会自动配置之
  3. 如果使用MessageSource.getMessage()方法,第一个参数的引用形式为"code",而不是"{code}"或者"${code}"。如messageSource.getMessage("test.msg", null, Locale.getDefault());
  4. 在配置LocalValidatorFactoryBean之后,才可以在javax.validation.constraints包下的注解(@Size@NotNull...)下的message属性中使用"{code}"的形式声明校验提示信息。如 @NotNull(message = "{leftTime.not.null}")
  5. springMVC的locale配置和JVM的locale配置不一样,在application.properties中配置的spring.mvc.locale=zh_CN实际上配置的是WebMvcProperties,在获取消息时,locale信息应该使用webMvcProperties.getLocale()1获取而不是使用Locale.getDefault()获取。

MessageSource is a powerful feature available in Spring applications. This helps application developers handle various complex scenarios with writing much extra code, such as environment-specific configuration, internationalization or configurable values.

One more scenario could be modifying the default validation messages to more user-friendly/custom messages.

In this tutorial, we'll see how to configure and manage custom validation MessageSource in the application using Spring Boot.

阅读全文 ...