芥为之舟

卡片笔记法实践

自己从开始工作就有记录笔记的习惯,从最早的 Evernote 到现在 Obsidian,中间除了积累很多有用或者没有用的笔记,也积累了很多自己对于如何记录笔记和如何使用笔记的体会,在阅读《卡片笔记法》的时候,讲这些串联起来,作为一种实践的心得,将我关注的一些细节问题解答清楚,不模棱两可,形式也不拘泥,用一个长长的 QA 笔记来创作。 卡片笔记法复杂吗? 答案: 卡片笔记法并不复杂,而且只有...

谈一谈 TCP 协议

前面我将网络通信中,主要是协议层和软件层做了一下串联和分析。大致了解了整个通信的过程,一个信息要经过非常多的中间节点、协议转换才能最终到达目的地。中间的过程要怎么控制?怎么尽量保证传输过程的可靠性。在 TCP/IP 协议族中,就是 TCP 传输控制协议了。谈到 TCP 协议,我们都能够想到,面向连接、可靠、字节流传输、拆包粘包、三次握手、四次挥手等等。 我们先看一下 TCP 的报文结构 ...

Ruin&Recreate算法

在解决 NP 问题的时候,采用启发式算法是目前比较可行的方案,2017到2018两年,在公司实现了两个此类的算法,分配解决 VRP(车辆路由) 和 CLP (容器装箱),使用的核心算法就是这里的 Ruin&Recreate 算法,算法本身也并不复杂,却很有用。 先假设拿到一个VRP问题,并且已经基本构建了初始的路径。 Ruin步骤,从其中移走一些点,这些点认为已经不需要进...

RPC 白银时代—— Alibaba Dubbo

前面讲到的系统通信架构和分布式应用一直存在一定的矛盾,于是架构团队开始着手思考解决的思路。 在现有的RPC模块的基础上进行改造,增加服务注册、发现、服务调度以及客户端自负载等服务治理相关的功能 上面的方案有更好的实现阿里巴巴开源的 Dubbo 框架 在中间的负载均衡层也就是 Nginx 层添加服务动态注册、限流等功能,同时也可以将灰度发布服务熔断等功能加进去,形成一个全面的服...

RPC 青铜时代—— Flex BlazeDS 和 Spring Remoting

系统间交互 2012年第一次到公司上班,问的第一个问题就是 Flex 怎么和后台的 Java 代码交互呢?那时候 low 哥的头发还没全白,不知道他还记不记得。 远程调用是多系统之间交互绕不过去的一关,一个系统一旦引入网络就会带来更多的不确定性和复杂性。现在的系统间通信基础基于 TCP/IP 协议之上,但是在应用层,依然有很多不同的选择和架构方式会对整个交互过程和效果产生影响。在几年的工...

Spring应用架构(三)AOP原理和实现

”代码重复是最糟糕的代码坏味道,只要有出现重复的代码,必定有什么地方存在严重的问题,要么是实现的问题,要么是设计的问题“ 在前面的章节,我们系统性地描述了Spring最重要的基石——IoC容器。但是为了更好地提供企业服务和开发支持,还需要借助另一个重要的技术——AOP框架,下面就来分析一下Spring中AOP框架的原理和实现。 AOP的全称是面向方面编程(Aspect-Orien...

Spring应用架构(二)核心容器原理和实现

组件模型和企业级服务是开发中两个重要的方面。前者通过一个轻量级的容器来实现,后者是一个独立的框架,在Spring中提供了允许开发者通过编程方式或者声明方式轻松访问各种企业级服务的能力(AOP),这些服务与轻量级容器紧密结合在一起,但又不是密不可分。这是Spring最大的优势,强大又灵活,这是它之所以能够流行的原因。 在Spring中,组件可以是细粒度的POJO也可以是粗粒度的服务Servi...

Spring应用架构(一)设计理念

设计初衷 对于一个应用程序,如果达到一定的复杂程度,都会需要一个基础骨架,在这个骨架的基础上来维护引用程序的秩序,管理提供业务服务功能的各个程序组成要素。对于开发者而言,这个骨架就是开发框架,一个好的开发框架甚至可以带动一门编程语言的发展,典型的就是Ruby On Rails。对于Java体系而言,SpringFramework也起到了类似的作用。在现在的Java企业级程序中,Spring...