20190516
- Mybatis$的sql注入问题,#可以防止;
- 为什么dms新加了consumer之后,该consumer无法消费之前存在的消息;
- 存在多参数时,mapper.xml用的parameterType为map,而mapper接口需要用@Param();
- Server deserialize request exception 可能是接收和发送的类结构不一致;
- list为空时返回给前端空list但不要传null;
- RPC route mode
- In DEV mode, RPC only looks for services on local machine;
- In TEST mode, RPC looks for test-url first, then try soft balancing;
- In NORMAL mode, use soft balancing supported by config server;
- 注意H2的存储键值对不要加"/";
- 推荐使用null == obj,因为obj==null 可能会手误先成obj=null的赋值语句;
- git
- feat:新功能(feature)
- fix:修补bug
- docs:文档(documentation)
- style: 格式(不影响代码运行的变动)
- refactor:重构(即不是新增功能,也不是修改bug的代码变动)
- test:增加测试
- chore:构建过程或辅助工具的变动
20190517
- org.apache.commons.lang3.StringUtils.isBlank()和isEmpty();
20190523
- update 操作的set 后面的字段之间的连接只有最后一个可以用 and。
20190526
- 事务流程不建议过长,因为后续的RPC或其他组装事件太长,导致本地事务无法快速commit,本地数据库连接池或线程池资源有限。解决方案:事务下沉。
20190529
- git rebase -i [startpoint] [endpoint] 前开后闭
- git rebase [startpoint] [endpoint] --onto [branchName]
- git checkout branchName
- git reset --hard 0c72e64、
- git diff commitA commitB --state
- TimeUnit.SECONDS.sleep(1); 取代Thread.sleep
- yield():
- Thread类的方法
- A hint to the scheduler that the current thread is willing to yield. Its current use of a processor. The scheduler is free to ignore this hint.若是没有忽视会导致线程上下文切换;
- running->runnable
- sleep():
- Thread类的方法
- Causes the current thread to sleep,没有时间片的消耗;
- 短暂block
- 不会释放对象锁
- wait():
- Object的方法
- 暂停执行并释放对象锁
- 当前线程进入等待对象池中
- notify():
- Object的方法
- 从对象等待池中移走任意线程并放入锁标志等待池中,只有锁标志等待池的线程能获取锁标志
- notifyAll():
- Object的方法
- 从对象等待池中移走所有等待那个对象的线程并放到锁标志等待池中
- Priority:不能让业务的优先级严重地依赖线程的优先级,借助优先级来设置业务的权重不可取,因为当CPU不忙时,优先级的设置对时间片的分配关系不大
- interrupt():
- 由ThreadB打破ThreadA的阻塞状态
- 已死亡的线程无法interrupt
- 线程默认是非守护线程,jvm中没有非守护线程就会自动退出。
- sleep()是可中断方法,捕获了中断信号interrupt以后,为了不影响线程中其他方法的执行,可以将线程的interrupt复位。
- interrupted()和isInterrupted()区别
- interrupted()调用后会直接擦除线程的interrupt标识,下次返回的interrupted()为false;
- isInterrupted()则不会擦除
- join()
- 也是可中断方法,有其他线程对当前线程interrupt,则会被捕获中断信号并擦除线程额interrupt标志
- 在ThreaB中join ThreadA会使得currentThreadB进入等待,知道A结束或达到某时间,期间B Blocked.
20190531
- 使用RateLimiter完成简单的大流量限流