2018年看过的书和电影

读过的书

序号 书名 作者 读完时间
1 林徽因与梁思成 【美】费慰梅 2018-01-04
2 费正清中国回忆录 [美] 费正清 2018-01-11
3 中国通史 吕思勉 2018-01-18
4 物种起源 达尔文 2018-01-23
5 昨日的世界 (奥)斯蒂芬·茨威格 2018-01-29
6 高性能MySQL 施瓦茨 2018-01-31
7 西尔斯怀孕百科 西尔斯 2018-02-04
8 Spring Cloud微服务实战 翟永超 2018-02-22
9 枪炮、病菌与钢铁 [美] 贾雷德·戴蒙德 2018-02-25
10 认识性学 [美] 威廉·L. 雅博 2018-02-25
11 Java核心技术·卷1 [美] 凯.S.霍斯特曼 2018-02-27
12 围城 钱钟书 2018-03-01
13 微服务设计 [英] Sam Newman 2018-03-02
14 手把手教你玩脱口秀 [美]格雷格•迪恩 2018-03-08
15 文明之光(第一册) 吴军 2018-03-09
16 眼与耳的盛宴 朱大可 2018-03-14
17 浮生六记 (清)沈复 2018-03-20
18 我们仨 杨绛 2018-03-21
19 中国历代政治得失 钱穆 2018-03-31
20 什么是政治哲学 [美] 列奥·施特劳斯 2018-04-05
21 第二次世界大战战史 李德•哈特 2018-04-15
22 呐喊 鲁迅 2018-04-19
23 第三种黑猩猩 贾雷德·戴蒙德 2018-04-27
24 鲁迅的最后十年 林贤治 2018-05-01
25 我也是鲁迅的遗物:朱安传 乔丽华 2018-05-05
26 乡土中国 费孝通 2018-05-08
27 分布式Java应用 林昊 2018-05-10
28 梁启超传 吳其昌 2018-05-10
29 鲁迅传 许寿裳 2018-05-13
30 忧郁的热带 [法]克洛德·列维-斯特劳斯 2018-05-29
31 送别·我在西湖出家的经过 李叔同 2018-05-30
32 老子 汤漳平,王朝华译注 2018-06-05
33 三大师 斯蒂芬·茨威格 2018-06-06
34 知识分子论 [美]爱德华·萨义德 2018-06-13
35 写作法宝 威廉•津瑟 2018-06-18
36 当代文学的概念 洪子诚 2018-06-22
37 囚徒健身 保罗·威德 2018-06-26
38 从出生到3岁 [美]伯顿·L·怀特((Burton L.White) 2018-06-30
39 计算机网络(第5版) Andrew S. Tanenbaum 2018-07-12
40 Release Michael T. Nygard 2018-07-17
41 疯癫与文明 米歇尔·福柯 2018-07-21
42 富爸爸,穷爸爸 (美)罗伯特・T・清崎 2018-08-03
43 笑场 李诞 2018-08-12
44 人类沟通的起源 [美]迈克尔•托马塞洛 2018-08-15
45 田英章系列书法字贴 田英章 2018-08-22
46 一只特立独行的猪 王小波 2018-08-24
47 田英章硬笔楷书标准教程 田英章 2018-09-05
48 黄金时代 王小波 2018-09-12
49 白银时代 王小波 2018-09-25
50 欧楷解析 田蕴章 2018-10-02
51 红拂夜奔 王小波 2018-11-25
52 鲁迅全集第一卷 鲁迅 2018-09-04
53 鲁迅全集第二卷 鲁迅 2018-09-20
54 鲁迅全集第三卷 鲁迅 2018-10-11

看过的电影

序号 电影名 时间
1 星球大战8:最后的绝地武士 2018-01-07
2 可可西里 2018-01-13
3 麦兜故事 2018-01-15
4 心迷宫 2018-01-20
5 再次出发之纽约遇见你 2018-01-20
6 飞越疯人院 2018-01-28
7 泰坦尼克号 2018-01-31
8 天空之城 2018-02-01
9 玛丽和马克思 2018-02-10
10 哈利·波特与魔法石 2018-02-11
11 控方证人 2018-02-13
12 荒蛮故事 2018-02-18
13 乱世佳人 2018-02-24
14 怦然心动 2018-02-25
15 禁闭岛 2018-02-25
16 指环王2:双塔奇兵 2018-02-27
17 上帝之城 2018-03-03
18 绝地逃亡 2018-03-04
19 你的名字。 2018-03-04
20 饮食男女 2018-03-11
21 指环王3:王者无敌 2018-03-13
22 闻香识女人 2018-03-20
23 我爱你 2018-03-24
24 机械师 2018-03-31
25 头号玩家 2018-04-01
26 暴裂无声 2018-04-05
27 大佛普拉斯 2018-04-15
28 诺曼底大风暴 2018-04-15
29 死亡诗社 2018-04-19
30 达拉斯买家俱乐部 2018-04-22
31 后来的我们 2018-04-29
32 我的个神啊 2018-05-01
33 冬荫功2:拳霸天下 2018-06-20
34 西部世界 第二季 2018-06-27
35 生门 2018-08-14
36 东方快车谋杀案 2018-09-23
37 箭士柳白猿 2018-10-03
38 山河故人 2018-10-06
39 Hello!树先生 2018-10-14

RPC返回Byte类型的坑

RPC接口

接入其它系统RPC接口:

    RpcResult<Byte> findRecipeTypeById(Long id);

调用

 @Override
    public Byte getRecipeTypeById(Long recipeId) {
        RpcResult<Byte> rpcResult = null;
        try {
            rpcResult = recipeCommonFacadeService.findRecipeTypeById(recipeId);
        } catch (Exception e) {
            return null;
        }
        if (null == rpcResult || rpcResult.isSuccess() == false) {
            return null;
        }
        return rpcResult.getResult();
    }

报错

调用成功,到 return rpcResult.getResult();这行报错:

java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Byte

排查

断点执行,发现返的rpcResult中的类型是Integer类型,Byte被自动转化为了Integer

解决

rcp返回改为Integer类型

springboot应用接入druid监控

1.引入druid

 <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.1.0</version>
 </dependency>

2.DuidConfig

import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import com.google.common.collect.Maps;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;

@Configuration
public class DruidConfig {
    private Logger logger = LoggerFactory.getLogger(DruidConfig.class);

    /**
     * Druid内置监控页面
     *
     * @return
     */
    @Bean
    public ServletRegistrationBean druidServlet() {
        logger.info("Init druid servlet configuration ");
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();
        servletRegistrationBean.setServlet(new StatViewServlet());
        servletRegistrationBean.addUrlMappings("/druid/*");
        Map<String, String> initParameters = Maps.newHashMap();
         //登录查看信息的账号密码.
        initParameters.put("loginUsername", "druid");
        initParameters.put("loginPassword", "123456");
         //是否能够重置数据(禁用HTML页面上的“Reset All”功能)
        initParameters.put("resetEnable", "false");
        initParameters.put("allow", "");
        servletRegistrationBean.setInitParameters(initParameters);
        return servletRegistrationBean;
    }

     /**
     * 配置URI监控
     *
     * @return
     */
    @Bean
    public FilterRegistrationBean filterRegistrationBean() {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        filterRegistrationBean.setFilter(new WebStatFilter());
        //添加过滤规则.
        filterRegistrationBean.addUrlPatterns("/*");
        //添加不需要忽略的格式信息.
        filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        return filterRegistrationBean;
    }

}

3.启动服务

访问http://localhost:8484/druid,登录。

PageHelper自动增加limit分页问题

问题
使用PageHelperi分页,报错如下:
Caused by: com.alibaba.druid.sql.parser.ParserException: syntax error, error in :’limi1 1 limit ?,?’,expect LIMIT, actual LIMIT limit
原始查询sql(select * from t limit 1)后面有limit1,结果报错显示自动添加上上limit ?,?:

排查

见PageHelper 安全调用:https://github.com/pagehelper/Mybatis-PageHelper/blob/master/blob/master/wikis/zh/HowToUse.md#3-pagehelper-安全调用

PageHelper 方法使用了静态的 ThreadLocal 参数,分页参数和线程是绑定的。

只要你可以保证在 PageHelper 方法调用后紧跟 MyBatis 查询方法,这就是安全的。因为 PageHelper 在 finally 代码段中自动清除了 ThreadLocal 存储的对象。

线程中start的page 不能保证线程在当前执行退出时清理完page变量

重现

XXXServiceImpl {
     XX method(Object xx, int pageNum, int pageSize) {
          PageHelper.start(pageNum,pageSize);
          if(xx!=null){
             return XX;
          }
          xxxMapper.find();
            ....
       }
 }
在执行PageHelper.start(pageNum,pageSize);方法后,参数page变量,如xx!=null,直接返回XX,则page没有被消费,这个参数就会一直保留在这个线程上。当这个线程再次被使用时,如果接下来执行其它sql,就可能导致不该分页的方法去消费这个分页参数,这就产生了莫名其妙的分页。

如果PageHelper.start(pageNum,pageSize);之后的方法加了缓存,也会有这个问题。

解决方法 

1.使用参数方式是极其安全的2.保证在 PageHelper 方法调用后紧跟 MyBatis 查询方法,必须保证分页和查询同时有效。3.调PageHelper.clearPage(); 可以手动清理 ThreadLocal 存储的分页参,这个是新版本里的方法 其中5.0之后版本注意:

1. 配置文件中PageHelper变为了PageInterceptor
<plugin interceptor=”com.github.pagehelper.PageInterceptor”>
2. 不需要<property name=”dialect” value=”mysql”/>,自动识别数据库

思域行驶一年记录

从20170701到20180703,共行驶17208km,平均油耗5.6L,加油共37次,平均每次204,共加油7548,过路费5151,违章罚款350(-_-….),保养3次共680。 优点:动力强,省油,空间够,转向手感好 缺点:高速隔音略差,蓝色易脏,内饰一般。

siyu1 siyu2siyu3siyu4