不常见的 Java 集合类的用法
Sorted 集合##Sorted集合
Navigable 集合Navigable
Priority集合Priority
Identity 集合##Identity
SkipList 集合跳表系列。
DelayQueue延迟队列
CoffeeScript2 简明教程
写在前面的话 之前在工作群里看到一个排行榜:
在羡慕美国同行的薪水超高的同时,也奇怪为何 CoffeeScript 的生命力超过了自己之前的想象。
JavaScript 本是 Brendan Eich 在10天内做完的急就章之作,在设计之初,即带有大量的大意设计和缺陷。可以说,即使到了 1.5 时代,JavaScript 作为一门现代语言,依然要提防 Douglas Crockford 在《JavaScript:The Good Parts》中提出的种种陷阱。历年来,各路框架作者和超集语言作者,都不断在 JavaScript 上做出各种各样炫目的模式用法和衍生方言,足见其可提高空间之大。包括 CoffeeScript/TypeScript/Dart/Elm 等解决方案的出现,其实就是在倡导使用 Pre-JavaScript 的语言编写抽象逻辑,然后编译成原生 JavaScript 运行。
CoffeeScript 即是 JavaScript 1.5 时代的 Pre-JavaScript 语言 ...
client 与 server
client 模式默认的jit编译器,c1。默认的gc:serial-serial old。需要更短的启动时间和初始堆大小,能做更保守的优化。默认-Xms是1M,-Xmx是64M。适合 GUI 程序。
server 模式默认的jit编译器,c2。默认的gc:ps-serial old即 PS MarkSweep(可以启用parallel old)。需要更长的启动时间和更大的堆大小,能够做更有深度的优化。默认-Xms是128M,-Xmx是1024M。适合长时间运转的程序。
64 位JVM在64位 JVM 上有个 -d64 的模式,实际上就是禁止client模式单独启动,只允许server模式或者混合编译模式启动的模式。
分布式事务
问题定义对经典的电商场景而言:下单是个插入操作,扣减金额和库存是个更新操作,操作的模型不同,如果进行分布式的服务拆分,则可能无法在一个本地事务里操作几个模型,涉及跨库事务。
CAP 定义根据 Eric Brewer 提出的 CAP 理论:
Consistency:All Nodes see the same data at the same time
Availability:Reads and writes always succeed
Partition tolerance:System continues to operate despite arbitrary message loss or failure of part of the system
由此诞生三种共识/分布式一致性算法:
CA = 2PC,即 2PC 无法分区容错
AP = Gossip,即 Gossip 无法保证一致性
CP = Paxos,即 Paxos 无法保证吞吐
在分布式场景下,网络分区不可避免。网络分区带来一个不可解决的基本问题:执行本地事务的一个节点,无法确知其他节点的事务执行状况。
BA ...
函数缓存 memoize
12345678const memoize = pureFunc => { const cache = {}; return function() { const argStr = JSON.stringify(arguments); cache[argStr] = cache[argStr] || pureFunc.apply(pureFunc, arguments); return cache[argStr]; };};
读书--拓展你的认知边界
新的书在不断打破认知边界,以前都是机械的方法论世界观的书,现在出了打通一切关于进化的书。
如何读书?#《如何阅读一本书》,《快速阅读》。
如何选书?跟主题,跟作者,跟大牛。不要看编著的书。李善友的书单。
怎么有时间去看书?亚马逊的推荐比京东准。找固定板的时间看书。
Kindle 电子书和纸板书怎么选?精华书都买
实在没时间,怎么办?#樊登读书会得到 听书
从哪里开始从扉页来判断,从序言来判断一下。
读书最好抛弃论据和论证,而要寻找宏旨。
听书完,还是要自己看。
JSX
简介 JSX 是点缀着 XML 元素的 JavaScript。它是由 React 这个库最初构思出来的,但又不是专门为了某个库或者框架设计的。它是一种 DSL。
JSX 是 html in JavaScript 的一种很好体现。这里的 XML,实际上还是 html 元素。粗略看下来,和当初 backbone 写 rendertemplate 的函数差不多。要引入 JSX 的语法,在很多场景下都要引入 Babel 这个 transpiler,也就是要搞到工具链满天飞。照抄官网的例子的话,可以看到:
12345678910111213141516171819<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>Hello React!</title> <script src="vendor-js/react.js"></scr ...
Docker 小笔记
记录一些特别容易遗忘的 Docker 知识细节
镜像实际上是文件夹,每个镜像命令会产生出单独的一层。我们删除文件不一定能够删得掉,可删除的文件也只是在联合文件系统里面增加一个“被删除层”。
容器像是集装箱。这通常是启动内部代理的一个方法。docker 寻求的解决方案不是虚拟化,而是进程间的软隔离。123456# 启动 docker 容器docker run -d -p 2222:22 --name 容器名 镜像名# -d 守护容器,就是后台运行,退出命令窗口容器也不会停止# -it 交互式容器 退出命令窗口容器就停止运行了# -p 宿主机端口和容器端口映射# 8081:80 宿主机端口: 容器公开的端口
Docker 同hypervisor的区别是,hypervisor总是起了多个内核。实际上阿里开源的容器技术 pouch,也是基于多 hypervisor 的。
docker inspect 既可以查看容器,也可以查看镜像。用以下的命令单独查看一个属性:
1docker inspect -f '{{.NetworkSettings.IPAddress& ...
虚拟机
虚拟机意味着单独的指令集体系结构(ISA Instruction Set Architecture)。
为什么要自建实时计算平台
为什么要自建一个离线平台
可以优化资源利用率。
业务平台应该把精力放在业务上。
什么是实时计算
强调响应时间短(相对于离线计算):毫秒级、亚秒级、秒级。T+1 的报表都是离线计算。
数据的价值随着时间的流逝而迅速降低。
常见技术方案:
流计算 + 实时存储 or 消息队列
流计算 + 实现 OLAP
什么是流式计算
实时且无界。
数据驱动计算,事件触发。
有状态及持续集成。
流计算引擎:Spark Streaming、Flink Streaming、Storm/JStorm、Samza 等。
Spark Streaming 模型
Micro-Batch 模式。看起来是流式处理的,实际上还是一小批一小批处理的。从批处理走到流处理。
最小延时:batch 的处理时间
最大延时:batch interval(通常2s-10s) + batch 处理时间。
使用场景:数据清洗(实时数据通道)、数据 ETL 等。
对于熟悉 Spark 批处理的 RD 非常容易上手。
Flink Streaming
Native Streaming。
低延时,通常在毫秒级。
使用场景:事件驱动、实时风 ...