跳转至

2025

Components

Components are the units of deployment. They are the smallest entities that can be deployed as part of a system. In Java, they are jar files. In Ruby, they are gem files. In .Net, they are DLLs. In compiled languages, they are aggregations of binary files. In interpreted languages, they are aggregations of source files. In all languages, they are the granule of deployment.

Components can be linked together into a single executable. Or they can be aggregated together into a single archive, such as a .war file. Or they can be independently deployed as separate dynamically loaded plugins, such as.jar or .dll or .exe files. Regardless of how they are eventually deployed, well-designed components always retain the ability to be independently deployable and, therefore, independently developable.


编辑于 2025-03-31

高频 R/W 场景下的性能设计方案

对于这个问题我们需要回归到计算机读写的核心上,计算机的读写速度是有限的,所以需要把数据缓存起来,来提高读写速度。为什么要使用缓存呢?从硬件角度我们知道计算机是有多级缓存架构的,每一级存储设备的读写速度是指数级下降的,越靠近终端存储设备(机械硬盘、固态硬盘)其读写速度越慢,越靠近 CPU 的存储设备其读写速度越快。

缓存是一个有着更快的查询速度的存储技术,这里的更快是指比起从初始的数据源查询(比如数据库,以下都称作数据库)而言。我们经常会把频繁请求的或是耗时计算的数据缓存起来,在程序收到请求这些数据的时候可以直接从缓存中查询数据返回给客户端来提高系统的吞吐量,现在我们来看看有哪些缓存模式可以考虑。

2025-03-23 有感

绕着困难走的人永远不会成为成功的人。一个成功的人,他是主动迎接挑战的人,因为他要开辟新赛道,他如同走在沙漠当中一样,这是任正非的话。

因为没有人会给你指明未来的方向,需要你去开辟新赛道,引领未来发展的方向,这才是伟大的成功者。

所以人呐,是否能成为一个对社会有贡献的人,一是要有信念,二是要有情怀,要敢于面对挑战,迎接挑战。人往往是在迎接挑战的时候,你的才能才会得到极大的释放。

共勉!

比特币的创新设计

比特币在创新上提出了很多亮点,值得我们去学习。主要考虑了避免作恶、负反馈调节和共识机制三个方面。

避免作恶

避免作恶基于经济博弈原理。在一个开放的网络中,无法通过技术手段来保证每个人都是合作的。但是可以通过经济博弈来让合作者受益,让非合作者遭受损失和风险。

分布式系统的核心问题

分布式系统是计算机科学中十分重要的一个研究领域。随着现代计算机集群规模的不断增长,所处理的数据量越来越大,同时对于性能、可靠性的要求越来越高,分布式系统相关技术已经变得越来越重要,起到的作用也越来越关键。

分布式系统中如何保证共识是个经典的技术问题,无论在学术上还是工程上都存在很高的研究价值。令人遗憾地是,理想的(各项指标均最优)解决方案并不存在。在现实各种约束条件下,往往需要通过牺牲掉某些需求,来设计出满足特定场景的协议。

实际上,工程领域中不少问题都不存在一劳永逸的通用解法;而实用的解决思路是,合理地在实际需求和条件限制之间进行灵活的取舍。


更新于 2025-03-18 15:26

PBFT(Practical Byzantine Fault Tolerance)共识算法

PBFT是 Practical Byzantine Fault Tolerance 的缩写,意为实用拜占庭容错算法。该算法是 Miguel Castro(卡斯特罗)和Barbara Liskov(利斯科夫)在 1999 年提出来的,解决了原始拜占庭容错算法效率不高的问题,将算法复杂度由指数级降低到多项式级,使得拜占庭容错算法在实际系统应用中变得可行。该论文发表在1999年的操作系统设计与实现国际会议上(OSDI99)。没错,这个 Loskov 就是提出著名的里氏替换原则(LSP)的人,2008年图灵奖得主。

拜占庭问题解析

拜占庭问题(Byzantine Generals Problem)是分布式系统领域的一个经典问题,旨在解决 在存在不可靠或恶意节点 的情况下,如何让分布式系统中的各个参与者(节点)就某一决策达成一致行动。以下是系统性解析:

一、问题起源与核心场景

  1. 军事隐喻

    莱斯利·兰伯特(Leslie Lamport)在1982年提出该问题时,以拜占庭帝国(东罗马帝国)的将军围攻敌城为背景:

    • 目标:所有忠诚将军需在同一时间发起总攻或撤退。
    • 挑战:部分将军可能是叛徒,会向不同阵营发送矛盾指令(如“进攻”或“撤退”)。
    • 关键约束
      • 每个将军只能通过信使传递口头命令。
      • 信使可能被叛徒截获或篡改。
      • 最终所有忠诚将军必须采取相同行动,否则战斗失败。

关于组合问题的算法设计

昨天做了力扣编号为 2597 的算法题,需要遍历数组的所有集合,并从集合中选出符合要求的集合。了解后发现需要使用回溯算法解决,特此记录。

递归 + 回溯是一种非常强大的算法设计技巧,特别适合解决组合问题(如遍历所有子集)。它的核心思路是通过递归探索所有的可能,并通过回溯撤销选择,从而覆盖所有可能的组合。

它是如何工作的,本质上子集问题的目标是找到所有可能的自己。对于一个长度为 \(n\) 的数组,总共有 \(2n\) 个子集(包括空集)。比如 \({1, 2, 3}\) 的子集是:

\[ \{1\}、\{2\}、\{3\}、\{1, 2\}、\{1, 3\}、\{2, 3\}、 \{\} \]

爱的艺术:心理学大师佛罗姆跨时代不朽经典

Tips

下载地址:爱的艺术

首先就被序言中的这句话吸引住了:爱某一个人并不只是一种强烈感情,它还是一个决定、一个判断和一个承诺。 如果当初懵懂的自己能够早些明白,也许就不会再有那么多遗憾了。

记得大学时选修了政法系的一门课程叫《爱情伦理学》,老师是一位很和蔼的小老头,回头看老师非常关注当时的社会现象和社会问题,能够感受到老师非常想让学生树立正确的爱情观,一切从娃娃抓起。