## 八、学习点
### 8.1 HotelPriceQuery 的参数分类
- 酒店维度参数、wrapper 维度参数、价格维度参数、用户维度参数
### 8.2 标识的回传
- L 页和 D 页本来
### 8.3 dubbo 的 consumer 异步
### 8.4 本地缓存
- `private volatile Map<String, Wrapper> wrappersCacheMap = Maps.newConcurrentMap();` 为什么 volatile
### 8.5 基础信息
### 8.6 过滤的时候存在两个维度,wrapper 和 price
### 8.7 isBlank or isEmpty
| 情况 | isNull | isEmpty | isBlank |
|---------------|--------|---------|---------|
| null | true | N/A | N/A |
| 空字符串 ("") | false | true | true |
| 空格空白字符 (" ") | false | false | true |
| 非空字符串 ("abc") | false | false | false |
### 8.8 L 页和 D 页会员单通的参数来源不同
### 8.9 Optional 优化
### 8.10 Bigdecimal 的累加
在 lambda 表达式中对变量的操作都是基于原变量的副本,不会影响到原变量的值。假定没有要求 lambda 表达式外部变量为 final 修饰,那么开发者会误以为外部变量的值能够在 lambda 表达式中被改变,而这实际是不可能的,所以要求外部变量为 final 是在编译期以强制手段确保用户不会在 lambda 表达式中做修改原变量值的操作。
其实这就要说到 Jvm 内存模型和线程了,因为实例变量存在堆中,而局部变量是在栈上分配,lambda 表达 (匿名内部类) 会在另一个线程中执行。如果在线程中要直接访问一个局部变量,可能线程执行时该局部变量已经被销毁了,而 final 类型的局部变量在 Lambda 表达式 (匿名类) 中其实是局部变量的一个拷贝。
### 8.11 roomprice info 什么时候转的
### 8.12 请求参数转 json 时的细节
String sceneFlagStr和private `Set<String>` sceneFlagSet 结果不同
800 -7.29 - 109.73 - 108.73
4.21 772.4