《枪炮、病菌和钢铁》札记
先发未必先到,关键性的因素可能在中后半段才起作用。 代差很可怕,代差带来的结果是压倒性的,难以逆转和抗拒的。 直接因素是什么,终极因素是什么?点在哪里,面是什么? 地久天长的力量:群体的理解是深刻的,但对更大的事物的理解是盲目的-更地久天长的东西往往更大,而更大的东西越需要接力赛式的理解。这就是得天独厚的意义。 天造地设的差异,往往影响非常深刻。有些东西的潜力很大,有些东西的潜力很小。有些东西的潜力易于发觉,因为盲区很小;而有些东西的潜力难于发觉,需要更长的时间来观察-如果这一过程没有被外来的其他力量所中断的话。 两拨农民,都是文盲。一拨农民的祖先长期和从驯化动物得来的病菌作斗争,带有免疫力和另一拨农民作者,对另一拨农民是灭顶之灾-欧洲的拓殖者就是这样消灭美洲的原住民的,这样的军队才是最可怕的。从这个角度来看,被保护得很好的群体,未必能够在历史长河中获胜,因为他们不知道竞争力差异也许来自一个意想不到的维度。 安娜卡列尼娜法则:关注导致失败的因素更重要,导致失败的因素比想象中多。 熊不可养太大,养到一岁就就可以小心为妙了-俄罗斯人恐怕不同意。 纬度对生物的影响,比经度要大,从最南...
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_na...
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(Obj...
Java 注解和配置
Java 的原生注解 meta annotation @Inherited @Inherited 是一个元注解(annotations applied to other annotations 注解其他注解的注解),也是一个标记注解,@Inherited阐述了某个被标注的类型是被继承的。 **@Inherited annotation类型是被标注过的class的子类所继承。类并不从它所实现的接口继承annotation,方法并不从它所重载的方法继承annotation。**其查找过程是:反射 API 会在查找 @Inherited 标注的注解的时候,自底向上往继承树上方查找。 12345678910111213141516171819202122@Inherited@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)public @interface MyAnnotation { String value() default "Default Value";}@MyA...
Mac 使用技巧
修复文件不能打开的问题 《应用程序不能打开?一条命令就搞定!》 显示隐藏文件 在 macOS Sierra,我们可以使用快捷键: command + shift + . 来快速(在 Finder 中)显示和隐藏隐藏文件。 Mac 出现正在运行安装包脚本或等待其他安装完成的解决办法 Mac 出现正在运行安装包脚本或等待其他安装完成的解决办法 打开 Mac 触控板的三指拖移功能 打开 Mac 触控板的三指拖移功能 macOS 修改 Hosts macOS 修改 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 如何清洁苹果产品 如何清洁 App...
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 就是给 ConcurrentHashMa...
5why分析法
所谓5why分析法,又称“5问法”,也就是对一个问题点连续以5个“为什么”来自问,以追究其根本原因。 虽为5个为什么,但使用时不限定只做“5次为什么的探讨”,主要是必须找到根本原因为止,有时可能只要3次,有时也许要10次,如古话所言:打破砂锅问到底。 5why法的关键所在:鼓励解决问题的人要努力避开主观或自负的假设和逻辑陷阱,从结果着手,沿着因果关系链条,顺藤摸瓜,直至找出原有问题的根本原因。 介绍 这种方法最初是由丰田佐吉提出。后来,丰田汽车公司在发展完善其制造方法学的过程之中,也采用了这一方法。 作为丰田生产系统(Toyota Production System)的入门课程的组成部分,这种方法成为其中问题求解培训的一项关键内容。丰田生产系统的设计师大野耐一曾经将五问法描述为:“……丰田科学方法的基础……重复五次,问题的本质及其解决办法随即显而易见。” 目前,该方法在丰田之外已经得到了广泛采用,并且现在持续改善法(Kaizen),精益生产法(lean manufacturing)以及六西格玛法之中也得到了采用。 关键点 5why的”5“并不是问题的数量 5why的”5“指...
认证要素
个人二要素 个人银行卡三要素 个人银行卡四要素 个人运营商三要素 企业二要素 企业三要素 企业四要素 企业验卡二要素















