微服务框架 Eventuate Tram DDD CQRS 事件溯源 Saga
Keep Reading →
Why Kaldi
Kaldi is the coffee store for everyone who believes that great coffee shouldn't just taste good, it should do good too. We source all of our beans directly from small scale sustainable farmers and make sure part of the profits are reinvested in their communities.
Great coffee with a conscience
Kaldi is the ultimate spot for coffee lovers who want to learn about their java’s origin and support the farmers that grew it. We take coffee production, roasting and brewing seriously and we’re glad to pass that knowledge to anyone.
We sell green and roasted coffee beans that are sourced directly from independent farmers and farm cooperatives. We’re proud to offer a variety of coffee beans grown with great care for the environment and local communities. Check our post or contact us directly for current availability.
We offer a small, but carefully curated selection of brewing gear and tools for every taste and experience level. No matter if you roast your own beans or just bought your first french press, you’ll find a gadget to fall in love with in our shop.
Love a great cup of coffee, but never knew how to make one? Bought a fancy new Chemex but have no clue how to use it? Don't worry, we’re here to help. You can schedule a custom 1-on-1 consultation with our baristas to learn anything you want to know about coffee roasting and brewing. Email us or call the store for details.
We believe that good coffee has the power to bring people together. That’s why we decided to turn a corner of our shop into a cozy meeting space where you can hang out with fellow coffee lovers and learn about coffee making techniques. All of the artwork on display there is for sale. The full price you pay goes to the artist.
Latest stories
killbill 订阅计费和支付平台 common queue 本质是一个基于集中式数据库的分布式队列。 EventBus 基于 common queue - killbill PersistentBus Reference 如何解决微服务的数据一致性分发问题?
Keep Reading →
一致性 Hash Java 实现 Hash 函数 Reference Consistent Hashing ConsistentHash
Keep Reading →
负载均衡(Load Balance) 一般通过集群冗余服务器来保证服务的高可用,这时就需要解决一个问题 - 分发请求。 1 HTTP 重定向负载均衡 请求发送到负载均衡服务器,负载均衡服务器选择处理的集群服务器,要求客端重定向。 1.1 缺点 每次请求需要两次 http 交互。 2 DNS 负载均衡 通过域名管理配置多个 IP 地址,用户访问时会解析出不同的 IP 地址。当前环境下,客户端会缓存第一次获取到的 IP ,在后续请求中不会重复的请求 DNS 服务器。 常用做负载均衡器的负载。 3 反向代理负载均衡 反向代理服务器开启负载均衡功能。可以在小行网站使用。 3.1 缺点 可代理服务器上限低 代理 http 请求,代理服务器本身压力大 4 IP 负载均衡 负载均衡服务器,管理数据包修改 ip 地址,接收返回 http 请求和相应。接收到客户端请求,保存外部 ip 地址,并将 ip…
Keep Reading →
MySql 复制 关闭 DDL 同步,手动执行。 MySql 主从复制 主库数据更新同时保存 Binlog ,并开启线程复制到从库 Binlog 文件,从库观察 Binlog 文件保存变更到数据库。 一主多从 转门从库做其他的业务 优点: 分摊负载 专机专用 数据备份 高可用 但是不能保证主服务器的高可用 主主复制 多主架构也只有一个服务器支持写操作,避免数据冲突。
Binlog Relaylog
Keep Reading →
值得看的电影 生活 传承 三观 时代缩影 缓慢而持久的做一件事 财富 读书 日韩 人生果实 生活 相伴 佐贺的超级阿嬷 命运 传承 活着 离别 前行 时代 do something 欧美 Flipped(怦然心动) 爱情 家庭 教育 国产 Hello!树先生 贾柯章 命运 家 责任 时代 虚荣 救赎自我 那山那人那狗 1999 命运 传承 责任 时代变迁 父爱 我们俩 2005 命运 奋斗 孤独 老去 飞 成长 你能造飞机 希望 梦想 异类 时代 立春 2007 梦想 不甘平庸 虚荣 现实 生活 家 传承 希望 来不急道歉 1995 书 教育 生长环境 传承 熊孩子 腊月 农村 家庭 婚嫁 习俗 90 后农村嫁娶。 半碗村传奇 2001 教育 成长 贫穷 背起爸爸上学 1998 教育 亲情 贫穷 健康 苍老 过昭关 201…
Keep Reading →
值得看的书
Keep Reading →
Java 引用类型 在Java中,有四种类型的引用,它们的垃圾收集方式有所不同。 Strong References Weak References Soft References Phantom References Strong References 默认的引用类型。只有当强引用指向 NULL 时才能被当做垃圾回收。 Weak References 需要显示声明。 Soft References Phantom References
Keep Reading →
喜欢的歌 Just A Dream - Sam Tsui & Christina Grimmie Between The Raindrops - Lifehouse ft. Natasha Bedingfield Home - Diana Wang, 2012 Home - Gabrielle Aplin, 2013 Galway Girl - Ed Sheeran Galway Girl - Madilyn, 2017 Stronger - Kelly Clarkson, 2011 Because We Can - Bon Jovi, 2013 Mirrors - Justin Timberlake, 2013 Mirrors - Sam Tsui, 2013 Just Give Me A Reason - P!nk ft. Nate Ruess, 2013 Just Give Me…
Keep Reading →
缓存(Cache) 存储在计算机上的一个原始数据复制集,以便于访问。 缓存是介于数据访问者和数据源之间的一种高速、临时存储,当数据需要多次读取的时候,用于加快读取的速度。 1 缓冲(Buffer)是什么 也是一种高速存储,解决两个设备读取数据速度不匹配问题。 2 缓存应用场景 CPU 缓存 操作系统缓存 数据库缓存 语言编译缓存 CDN 缓存 代理和反向代理缓存 前端缓存 - 移动端、浏览器缓存 应用程序缓存 - 本地缓存、页面静态化 分布式对象缓存 3 缓存数据存储 3.1 Hash 表 数据已 key value 形式存储在数组中,计算 key 值 hashcode ,计算 hashcode 对应 hash 表索引。 hashcode 求模计算 hash 表索引 3.2 树…
Keep Reading →
Message Queue 队列 偏移量(Offset) 队列指针位置 消费偏移量 生产偏移量 队列语义 Queue 语义 一个队列只支持一个消费者。 Topic 语义(扇出 Fanout) 一个队列支持多个消费者,且消费都各自独立消费互不相关。 Broker Topic Partition Producer 同步模式 性能差,保证数据的准确性 异步模式 Producer 内部内存队列缓冲消息,Broker 定时或定量批量发送。 性能高,有一定延迟,
重启服务可能丢失消息 Consumer Consumer Group 不同消费者组可以消费同一个 Topic, 各自维护消费指针,相互之间没有影响。 同一 Consumer 组下的消费者可以同时消费多个 Partition,但两个 Consumer 不能同时消费一个 Partition。 消息存储 Data Node…
Keep Reading →
架构演进 分布式架构解决的问题 带来的新问题 解决方案 互联网系统架构模式 互联网项目、企业级项目 演进
模式 单体项目、分布式项目 单体项目 分布式项目 企业级项目 互联网项目 互联网系统需要面对的问题 高并发 高并发不是系统特征。 高并发下,追求保证高可用、高性能。 高可用 系统 7x24 小时不间断服务。 高性能 海量数据 用户分布广泛 安全环境恶劣 需求快速变更,发布频繁 渐进式发展 可扩展 架构模式 进程通信 监控告警 配置管理 数据分片 冷热分离 缓存 团队组织结构 快速验证,渐进优化 数据量、盈利 大数据 AI 事件溯源(事件驱动) 服务发现 DNS Nginx
Keep Reading →
TODO Hive 大数据处理仓库 开源组件 SQL 转 AST 语法树 只支持 join 操作 SQl 解析器 单一原则 开闭原则 装饰模式
Keep Reading →
flavor wheel 对于 Java 开发人员来说,了解 Java 内存模型是必不可少的,他们需要开发,部署,监视,测试和调整 Java 应用程序的性能。 Java Memory Model 运行资源密集型Java程序时,您必须使用以下某些JVM内存配置。 -XmsSetting - 初始化堆大小 -XmxSetting - 最大堆大小 -XX:NewSizeSetting - 新一代堆大小 -XX:MaxNewSizeSetting - 最大新生代堆大小 -XX:MaxPermGenSetting - 永久代的最大大小 -XX:SurvivorRatioSetting - 新的堆大小比率(例如,如果Young Gen大小为10m,并且内存开关为–XX:SurvivorRatio = 2,则将为Eden空间保留5m,为两个Survivor空间分别保留2.5m,默认值为8) -XX…
Keep Reading →
flavor wheel 面向对象设计模式 设计模式的定义 面向对象的遵循设计原则的能够抽象出来的都是设计模式。 设计模式用来降低问题的复杂度,不能用来解决技术难点。 什么是设计模式? 每一种模式都描述了一种问题的通用解决方案。这种问题在我们的环境中,不停地出现。 设计模式是一种可重复使用的解決方案。 设计模式的四个部分 模式的名称 - 由少量的字组成的名称、有助于我们表达我们的设计。 待解问题 - 描述了何时需要运用这种模式,以及运用模式的环境(上下文)。 解决方案 - 描述了组成设计的元素(类和对象)、它们的关系、职责以及合作。但这种解决方案是抽象的,它不代表具体的实现。 结论 - 运用这种方案所带来的利和弊。主要是指它对系统的弹性、扩展性、和可移植性的。最终目的是高内聚、低耦合。 常见设计模式 模式 待解问题 元素 策略 --- 1 客户程序 2 策略(接口)…
Keep Reading →
flavor wheel 1. 类加载子系统 1.1 加载 1.1.1 可见性原则 1.1.2 唯一性原则 1.1.3 委托原则 - Delegation Hierarchy Principle 1.1.4 不可卸载原则 1.2 链接(Linking) 1.2.1 验证(Verification) 1.2.2 准备(Preparation) 1.2.3 解析(Resolution) 1.3 初始化(Initialization) 2 运行时数据区(Runtime Data Area) 2.1 方法区(线程间共享) 2.2 堆(线程间共享) 2.3 栈 2.3.1 栈帧 2.3.1.1 局部变量数组 2.3.1.2 操作数栈 2.3.1.3 帧数据(Frame Data) 2.4 程序计数器 - PC(Program Counter) Registers 2.5 原生方法栈 3 执行引擎…
Keep Reading →
flavor wheel 基于 AKKA(一个库而不是框架) 没有并发问题?怎么实现的。
Keep Reading →
flavor wheel 主要需求:对网站访问量进行技术(视频观看量、博客网站粉丝数、微服务调用量计数)。 需求 需求沟通 需求模糊需要确认细节 需求不明确下,不同技术背景的人会给出不同的方案 需求澄清 场景用例 用户群体是谁 用户如何使用这个系统 量级规模(读/写) 每秒查询请求量 每个请求查询多少数据 每秒处理多少个视频观看记录 流量模式?是否有流量高峰 性能 预期从写入到读取数据的延迟? 预期 p99 读请求延迟是多少 高可用性(一般隐含要求) 成本 开发成本有什么限制? 运维成本有什么限制? 开发成员组成结构 功能需求 非功能需求 高可用 高性能 可扩展 可维护性 成本 架构设计 简单架构图 部署图 存储设计 存什么 单个事件(每次点击) 聚合数据 数据库选型 结构化数据库 数据分区 主从复制 读写分离 ShardingSphere 本身需要高可用 NoSql…
Keep Reading →
flavor wheel 高内聚是指相近的功能、行为应该放到同一个组件中。 设计原则 高內聚、低耦合 什么是“高内聚” 高内聚是指相近的功能、行为应该放到同一个组件中。 什么是“低耦合” 组件间的依赖关系清晰,交互不复杂。 面向对象编程、面向对象分析 面向对象编程不是使用面向对象的编程语言进行编程,而是利用多态特性进行编程,面向对象语言真正区别于其他高级语言的地方是多态。 框架(frameworks) 框架是用来实现某一类应用的结构性程序,是对某一类架构方案可复用的设计与实现。 架构师通过开发或者维护框架来把控系统的质量。 面向对象设计的基本原则 OOD 原则一:开/闭原则(OCP) OCP - Open/Closed Principle 对扩展是开放的(Open for extension) 对更改是封闭的(Closed for modification…
Keep Reading →
flavor wheel Basic 位运算 Hash 表的时间复杂度为什么是 O(1) Hash表数组长度不足怎么办? 多线程并发修改Hash表怎么办?如何保证线程安全?
JDK的ConcurrentHashMap是如何解决的? 如何使Hash表中的数据分布更加均匀,减少Hash聚集? 余数Hash算法应用于分布式缓存路由的时候有什么问题?如何解决?一致性Hash算法原理是什么? 用你熟悉的编程语言20分钟写一个一致性Hash算法实现。 LRU 算法 DB 数据库怎么处理的网络抖动等的事务 需要应用程序手动 commit。commit 成功但是网络异常?这个时候怎么处理的。 结构化数据库范式 NoSQL 反规范化 数据库优化 根据业务来决定是否开启数据库缓存 分布式 or 微服务 架构设计 高可用 高性能 可扩展 集群 负载均衡 缓存集群路由算法 一致性 Hash hashcode…
Keep Reading →
Collections markmap-lib markdown 转 mindmap 的前台组件
Visualize your Markdown as mindmaps with Markmap. gatsby-remark-markmap 集成到 gatsby 时样式没有办法调整,mindmap 图片宽度太小 astral github stars 项目管理 jsdelivr 用于开源免费 CDN A free, fast, and reliable Open Source CDN for npm and GitHub excalidraw 手写体的画板工具(现文字支持中文手写体) Virtual whiteboard for sketching hand-drawn like diagrams github myslide 一个提供PPT分享服务的平台 draw.io…
Keep Reading →
数据结构 算法复杂度 算法执行需要多时间/空间。 时间复杂度/空间复杂度。 Big-O 表示法 表示一个算法在最坏的情况下的计算复杂度。 Constant: O(1) Logarithmic: O(log(n)), 底数据为 2 Linear: O(n) Linearithmic: O(nlog(n)) Quadratic: O(n^2) Cubic: O(n^3) Exponential: O(b^n), b > 1 Facorial: O(n!) 数组 静态数组 动态数组 创建新的静态数组,容量为原数组的 2 倍。将原数组内容拷贝过
Keep Reading →
CS(Computer Science) 一门运用计算机解决问题的科学。 计算机设备运用计算方法解决问题。 找出解决问题的方法和途径,分析解决问题的效率和可行性。 软件工程训练学习编程。 编程(Programing) 编程是一种工具(artifact),它是我们用计算机来解决计算机科学中提到的问题工具,是计算机科学的一部份。 编程的本质 计算机只能识别 0 和 1 也就是二进制(binary),0 和 1 分别代表通过或者断开(on or off)。机器语言(Machine Language)一种计算机能懂的语言,能够把左移或者右移等指令转换成一串 0 和 1 的序列。机器语言由计算机集成芯片定义。 为了方便人阅读机器语言,发明了汇编语言,定义助记符来描述机器语言指令。 高级语言 人很难写出计算机读懂的机器语言,所以开发出了高级语言(High-level Language)。 Java C…
Keep Reading →
Intenet do base linux type exec exec is a shell builtin : 一切皆文件 建立 tcp 通信链接 http 协议是什么 tcp 面向连接的可靠的传输 为什么是三次握手: 通信是双向的,客户端发送请求,服务端给出响应,客户端收到响应,客户端确认到服务端的请求响应是通的。客户端再次向服务端发出请求,服务端收到请求,服务端确认对客户端的请求和响应都是通的。 传输控制层 -> TCP -> 连接 -> 三次握手 <-> 数据发送 <-> 四次挥手 socket 套接字(唯一表示一个应用)
ip + port : ip + port
ip - 主机 port - 应用 65535 个 port 最多连接数 65535
ipA+i -- ipB:80
c(A) ---- s(B:80)
Keep Reading →
需求描述 需求分析 部署图 组件图 时序图 并发:在一个时间段内发生若干事件; 并行:在同一时刻发生若干事件; 例如使用单核 CPU,多个工作任务是以并发方式运行的,因为只有一个 CPU,各个任务分别占用一段时间,再切换到其他任务,等到下一次 CPU 使用权是再次执行未完成的任务。 使用多核 CPU 时,可以将任务分配到不同的核同时运行,实现并行。 CPU 的基本组成 超线程 超线程技术把多线程处理器内部的两个逻辑内核模拟成两个物理芯片,让单个处理器就能使用线程级的并行计算。 缓存对齐 CPU 的乱序执行(指令重排) 为了提升计算性能,CPU 从单核升级到了多核甚至用到了超线程技术最大化提高 CPU 的处理性能。CPU增加了高速缓存,操作系统增加了进程、线程,通过CPU时间片的切换最大化的提升CPU的使用率。 Java 程序验证 顺序执行 SingleThreadPool NUMA…
Keep Reading →
Java 通过 CAS 实现无锁的线程安全。 atomiclinuxx86.inline.hpp
Keep Reading →
并发与并行 并发:在一个时间段内发生若干事件; 并行:在同一时刻发生若干事件; 例如使用单核 CPU,多个工作任务是以并发方式运行的,因为只有一个 CPU,各个任务分别占用一段时间,再切换到其他任务,等到下一次 CPU 使用权是再次执行未完成的任务。 使用多核 CPU 时,可以将任务分配到不同的核同时运行,实现并行。 CPU 的基本组成 超线程 超线程技术把多线程处理器内部的两个逻辑内核模拟成两个物理芯片,让单个处理器就能使用线程级的并行计算。 缓存对齐 CPU 的乱序执行(指令重排) 为了提升计算性能,CPU 从单核升级到了多核甚至用到了超线程技术最大化提高 CPU 的处理性能。CPU增加了高速缓存,操作系统增加了进程、线程,通过CPU时间片的切换最大化的提升CPU的使用率。 Java 程序验证 顺序执行 SingleThreadPool NUMA linux…
Keep Reading →
Unified Modeling Language 统一建模语言 统一建模方法,用于 IT 人员间沟通的语言。UML 本意是成为一种标准语言,但是实际情况下对语言并没有严格的要求,不同团队可能会使用不同的方言。 UML 图的分类 静态图 通过描述类、对象和数据结构以及它们之间存在的关系,来描述软件要素中不变的逻辑结枃。 用例图(Use Case Diagram) 对象图(Object Diagram) 类图(Class Diagram) 组件图(Component Diagram) 包图(Package Diagram) 部署图(Deployment Diagram) ... 动态图 通过描绘执行流程或者实体状态变化的方式,来展示软件实体在执行过程中的变化过程。 协作图(Collaboration Diagram) 序列图(Sequence Diagram) 活动图(Activity…
Keep Reading →
Backend Roadmap Reference roadmap.sh
Keep Reading →
chemex 架构文档是架构师的主要交付产物,由主要描述架构元素以及架构元素间关系的架构视图组成,体现了软件设计阶段不同相关方的利益诉求。 架构视图 软件架构={元素,形式,关系约束} 单一的视图无法完整的表达架构,因此需要具备完整的视图集。 4+1 视图模型 由 IBM 提出的业界比较出名的架构设计方案 逻辑视图(Logical View),设计的对象模型(使用面向对象的设计方法时)。 过程视图(Process View),捕捉设计的并发和同步特征。 物理视图(Physical View),描述了软件到硬件的映射,反映了分布式特性。 开发视图(Development View),描述了在开发环境中软件的静态组织结构。 场景视图( scenarios…
Keep Reading →
chemex 看山是山,看山不是山,看山还是山。
Keep Reading →
chemex 凡见诸相非相,即见如来~《金刚经》 凡事不拘泥于具体的形式,而是要理解表相背后的设计原理和思想 什么是软件架构 软件架构(software architecture)就是软件的基本结构。
图片来自维基百科。 Software Architecture…
Keep Reading →
chemex JDK versions jdk5 java 内存模型 jdk6 jdk7 jdk8 lambda 惰性求值 lazy evaluation Funcational Interface 提供函数式编程能力 方法引用 hashmap 调整 hashmap 底层实现 Interface Default method 新增 default 关键字,接口方法支持默认实现 TemporalQuery @Contended 缓存对齐
JVM -XX:-RestrictContended 禁止竞争 jdk9 jshell 一个 REPL(Read Eval Print Loop) 工具 Thread 自旋锁 spin lock jdk10 var jdk11 GC 改进垃圾回收机制 AQS 去掉了 AbstractQuenueSynchronizer state 的 volatile…
Keep Reading →
chemex JVM 并发原理 POSIX Thread 基础 API jvm C 语言创建线程 os_linux.cpp pthread_create java 创建线程 Java 中创建线程只有 new Thread(Runable) 一种方式 同步 API 互斥(Mutex) Lock Java 内存模型(Java Memory Model - JMM) since jdk 1.5
Doug Lea 共享变量(Shared Variables) Java 普通对象存放在 Heap 中。
对于一个对象来说他的地址是确定的,但是对象中的属性地址是计算出来的。 重排序
Java 中 String 比较特殊
Java 不是完全的面向对象语言, Object + 基本类型 + 数组 object 地址 + offsets
Java 针对对象属性采用相对地址计算真实地址,在 cpu…
Keep Reading →
chemex To be a introduction of Groovy quick start install Homebrew download is very slowly echo 'export PATH="/usr/local/opt/openjdk/bin:$PATH"' >> ~/.bash_profile groovy version(3.0.3) and dependency openjdk(openjdk-13.0.2)。 not installed after groovy down. because Maybe impact local java enviroment witch had been installed JDK8(Oracle) and openjdk(14) verify groovy -version Groovy Version: 3.0.…
Keep Reading →
(/img/chemex To be a introduction of Groovy quick start base on spring dependencies management & spring boot bom plugin new a dependencies gradle module with self dependec file witch will be a gradle plugin import the plugin on parent project just use The Java Platform Plugin include project use for quote The Java Platform Plugin
Keep Reading →
chemex The Gradle/Maven repository Repositories Declaring repositories
Keep Reading →
We expect the shipment of a limited quantity of green beans next Monday. We’ll be offering the roasted beans from Tuesday, but quantities are limited, so be quick. Blue Mountain Peak is the highest mountain in Jamaica and one of the highest peaks in the Caribbean at 7,402 ft. It is the home of Blue Mountain coffee and their famous tours. It is located on the border of the Portland and Saint Thomas…
Keep Reading →
chemex This week we’ll take a look at all the steps required to make astonishing coffee with a Chemex at home. The Chemex Coffeemaker is a manual, pour-over style glass-container coffeemaker that Peter Schlumbohm invented in 1941, and which continues to be manufactured by the Chemex Corporation in Chicopee, Massachusetts. In 1958, designers at the Illinois Institute of Technology said that the…
Keep Reading →
flavor wheel The SCAA updated the wheel to reflect the finer nuances needed to describe flavors more precisely. The new descriptions are more detailed and hence allow cuppers to distinguish between more flavors. While this is going to be a big change for professional coffee tasters, it means a lot to you as a consumer as well. We’ll explain how the wheel came to be, how pros use it and what the…
Keep Reading →





