《枪炮、病菌和钢铁》札记
先发未必先到,关键性的因素可能在中后半段才起作用。
代差很可怕,代差带来的结果是压倒性的,难以逆转和抗拒的。
直接因素是什么,终极因素是什么?点在哪里,面是什么?
地久天长的力量:群体的理解是深刻的,但对更大的事物的理解是盲目的-更地久天长的东西往往更大,而更大的东西越需要接力赛式的理解。这就是得天独厚的意义。
天造地设的差异,往往影响非常深刻。有些东西的潜力很大,有些东西的潜力很小。有些东西的潜力易于发觉,因为盲区很小;而有些东西的潜力难于发觉,需要更长的时间来观察-如果这一过程没有被外来的其他力量所中断的话。
两拨农民,都是文盲。一拨农民的祖先长期和从驯化动物得来的病菌作斗争,带有免疫力和另一拨农民作者,对另一拨农民是灭顶之灾-欧洲的拓殖者就是这样消灭美洲的原住民的,这样的军队才是最可怕的。从这个角度来看,被保护得很好的群体,未必能够在历史长河中获胜,因为他们不知道竞争力差异也许来自一个意想不到的维度。
安娜卡列尼娜法则:关注导致失败的因素更重要,导致失败的因素比想象中多。
熊不可养太大,养到一岁就就可以小心为妙了-俄罗斯人恐怕不同意。
纬度对生物的影响,比经度要大,从最南到最北 ...
Unix 常用命令
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061# 分屏显示ls|morecat file|more# 制造符号链接ln -s from created# 删除 gradlebrew rm gradle# 寻找 Formulaebrew search gradle# 查看 gradle 最新的信息brew info gradle# 安装 sdkmancurl -s "https://get.sdkman.io" | bash# 搜索 gradlesdk list gradle# 安装特定版本sdk install gradle 5.2# 查看磁盘空间(diskfree)df -lh /usr/local# 强烈推荐直接使用这个命令df -lh ./# 查看已使用空间(diskused)du -h /usrdu -h ./# 压缩一个目录tar -zcvf archive_name.tar.g ...
Spring AOP 笔记
AOP 的基本概念Aspect: A modularization of a concern that cuts across multiple classes. 方面,横跨多个类的模块化关注点。如果只是简单地横跨多个类,可以考虑使用继承 + 组合 + 设计模式。如果使用某种模式匹配来横跨多个类,才需要考虑使用 Aspect。
Join point: A point during the execution of a program, such as the execution of a method or the handling of an exception. In Spring AOP, a join point always represents a method execution. 结合点是我们最需要关注的东西,既包括了方法执行过程,也包含了异常处理过程。
Advice: Action taken by an aspect at a particular join point. 方面针对结合点采取的行动。对 Advice 而言,join point 经常是他们的参数(至少 ...
ThreadLocal 的设计模式
基础版本123456789101112131415161718192021222324252627282930313233// 定义基础的 Context 类型public class ServerContext {}// 为这个基础类型装载一个 threadlocal 容器,然后为这个容器准备一个静态工具类public class Context { // 这个容器如果是泛型的(如存储 dapper 的 trace 或者 span),可以考虑用 T 或者用 Object。 private static final ThreadLocal<Object> SERVER_CONTEXT = new ThreadLocal<Object>(); public static Object getServerContext() { return SERVER_CONTEXT.get(); } public static void setServerContext(Object ...
Java 注解和配置
Java 的原生注解@Inherited@Inherited 是一个元注解(annotations applied to other annotations),也是一个标记注解,@Inherited阐述了某个被标注的类型是被继承的。 @Inherited annotation类型是被标注过的class的子类所继承。类并不从它所实现的接口继承annotation,方法并不从它所重载的方法继承annotation。其查找过程是:反射 API 会在查找 @Inherited 标注的注解的时候,自底向上往继承树上方查找。
其他元注解还包括:
@Target: Describes the targets to which an annotation can be applied; this directly corresponds to the nine contexts above
@Retention: Describes how long the annotation should be retained by the compiler
@Inherited: Denotes that ...
Mac 使用技巧
修复文件不能打开的问题《应用程序不能打开?一条命令就搞定!》
显示隐藏文件在 macOS Sierra,我们可以使用快捷键: command + shift + . 来快速(在 Finder 中)显示和隐藏隐藏文件。
Mac 出现正在运行安装包脚本或等待其他安装完成的解决办法Mac 出现正在运行安装包脚本或等待其他安装完成的解决办法
打开 Mac 触控板的三指拖移功能打开 Mac 触控板的三指拖移功能
macOS 修改 HostsmacOS 修改 Hosts
显示隐藏文件夹Mac系统如何显示隐藏文件?
Command+Shift+. 可以显示隐藏文件、文件夹,再按一次,恢复隐藏;
1234# showdefaults write com.apple.finder AppleShowAllFiles -boolean true ; killall Finder# hidedefaults write com.apple.finder AppleShowAllFiles -boolean false ; killall Finder
如何清洁苹果产品如何清洁 Apple 产品
我能对 ...
Optional 的正确用法
Optional 的不正确实践首先,不要直接拿来做if-else的判定条件,这肯定是错的:
123456Optional<User> user = ...... if (user.isPresent()) { return user.getOrders();} else { return Collections.emptyList();}
而且get()要配合isPresent()才安全。
其次,尽量不要用 Optional 拿来做成员变量,特别是 pojo 的成员变量,这很容易让读 pojo 的框架出问题。
再次,不要拿来做方法参数,因为很可能写成 if (user.isPresent()) {}式的代码。
最后,Optional 的关注点在它的 value 的后续处理身上,如果这个 value 只是一个 flag,还是要乖乖地用if-else;如果这个 value 被用在多路返回里,也不能使用 Optional。
正确的用法选对构造器Optional.of(T value)如果需要断言值不为空,使用 ...
缓存的套路
什么时候应该使用缓存?所有高耗时,需要吞吐量,而不太严格依赖强一致性的场景-不管是计算密集型还是 io 密集型,都可以使用缓存加速。
多级缓存问题大多数情况下不要使用多级缓存。多级缓存要严格设计差异化的冷热数据分离策略,还要考虑分布式的缓存失效+更新的问题,很复杂。
勉强可用的多级缓存应该是远端一级缓存,近端二级缓存。
本地多级缓存非常容易出一致性问题-慎用 MyBatis 和 Hibernate 的二级缓存。
外部缓存设计思路外部缓存通常指的是分布式缓存组件或者中间件。
内文直接参考《缓存更新的套路》
缓存更新的设计模式.xmind
Redis内部缓存的用法内部缓存通常指的是进程内缓存,in-memory-cache。
Spring Cache 依靠一个 CacheManager SPI 机制,来跟不同的 cache 实现打交道。大多数时候我们应该用 CacheManager 封装好的 wrapper api 来跟缓存打交道,极少数情况下我们应该 getNativeCache 来使用专有 API。
Guava Cache 就是给 ConcurrentHashMap 加上了大量的 L ...
5why分析法
所谓5why分析法,又称“5问法”,也就是对一个问题点连续以5个“为什么”来自问,以追究其根本原因。
虽为5个为什么,但使用时不限定只做“5次为什么的探讨”,主要是必须找到根本原因为止,有时可能只要3次,有时也许要10次,如古话所言:打破砂锅问到底。5why法的关键所在:鼓励解决问题的人要努力避开主观或自负的假设和逻辑陷阱,从结果着手,沿着因果关系链条,顺藤摸瓜,直至找出原有问题的根本原因。
介绍这种方法最初是由丰田佐吉提出。后来,丰田汽车公司在发展完善其制造方法学的过程之中,也采用了这一方法。
作为丰田生产系统(Toyota Production System)的入门课程的组成部分,这种方法成为其中问题求解培训的一项关键内容。丰田生产系统的设计师大野耐一曾经将五问法描述为:“……丰田科学方法的基础……重复五次,问题的本质及其解决办法随即显而易见。”
目前,该方法在丰田之外已经得到了广泛采用,并且现在持续改善法(Kaizen),精益生产法(lean manufacturing)以及六西格玛法之中也得到了采用。
关键点
5why的”5“并不是问题的数量
5why的”5“指的是问题的深度 ...
认证要素
个人二要素个人银行卡三要素个人银行卡四要素个人运营商三要素企业二要素企业三要素企业四要素企业验卡二要素