跳转至

2025

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年提出该问题时,以拜占庭帝国(东罗马帝国)的将军围攻敌城为背景:

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

高级架构师高频题型总结

选择题

面向对象

  1. 在 UML 用例图中,参与者之间存在 __ 关系。

    A. 聚合 B. 包含 C. 继承/泛化 (✅) D. 扩展

    Note

    用例图描述了一组用例、参与者以及它们之间的关系。这里没考察用例之间的关系,而是考察了参与者之间的关系

    参与者、国际留学生与参与者、学生之间的关系是泛化关系

    • 用例与参与者之间有 扩展和包含 关系
    • 参与者与用例之间有 关联 关系
    • 用例与用例、参与者与参与者之间有 泛化 关系

  2. 数据资产的特性包括:可控制、可量化、可变现、虚拟性、共享性、时效性、安全性、交换性和规模性。

关于组合问题的算法设计

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

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

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

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

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

Tips

下载地址:爱的艺术

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

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

使用 C++ 实现 COM 组件的示例

COM(Component Object Model)是微软提出的用于构建组件化应用程序的标准。COM 允许不同编程语言编写的组件进行互操作。本文将展示如何用 C++ 创建和使用 COM 组件,涵盖接口定义、组件实现、引用计数、对象创建等基本概念。

1. 定义接口

在 COM 编程中,接口是定义组件之间交互的核心部分。所有的 COM 接口都必须继承自 IUnknown 接口,它提供了基本的引用计数和接口查询功能。

下面我们定义一个简单的接口 IHello,它包含一个方法 Hello 用于打印消息。

// IHello.h
#ifndef IHELLO_H
#define IHELLO_H

#include <objbase.h>

// 定义 IHello 接口
class IHello : public IUnknown {
public:
    virtual void Hello() = 0;
};

// 定义 IHello 的 GUID
// {D77A85A0-68F7-4F0C-9B5A-A6D84236A2D1}
DEFINE_GUID(IID_IHello, 
0xd77a85a0, 0x68f7, 0x4f0c, 0x9b, 0x5a, 0xa6, 0xd8, 0x42, 0x36, 0xa2, 0xd1);

#endif

在这段代码中,我们定义了一个接口 IHello,它继承自 IUnknown 并包含一个 Hello 方法。DEFINE_GUID 宏用于生成接口的唯一标识符(GUID),该标识符在 COM 中用于区分不同的接口。

深入了解 COM(Component Object Model)

COM(Component Object Model)是微软提出的一种二进制接口标准,允许不同编程语言编写的组件之间进行互操作。它的设计初衷是使得不同的应用程序可以使用和共享不同语言编写的组件。COM 作为一种中间层协议,定义了组件的交互接口,并通过它实现不同组件间的通信。

当时只道是寻常

浣溪沙 纳兰容若

谁念西风独自凉,萧萧黄叶闭疏窗,沉思往事立残阳。

被酒莫惊春睡重,赌书消得泼茶香,当时只道是寻常。

那些我们习以为常的日子,那些眼前的普通人,可能在某一天,都是你人生回忆里的美好,所以朋友啊,珍稀当下,珍惜眼前人。

男人来自火星,女人来自金星

这本书是关于男人和女人在性格、处理问题方式、情感表达等方面的差异。作者通过研究大量数据,揭示了这些差异的原因,并提出了如何更好地理解和沟通的建议。

Tip

恋爱总是奇异的,它让人感到永恒,好像爱情至死不渝。我们天真的相信自己可以避免父母亲会有的问题,不会遇上爱情死亡的机会,确信爱情就是两个人在一起,注定永远快乐的共同的生活。

但当日子一天天过去,奇异的感觉减少,男人期待女人以男人的方式思想和行动,女人期待男人以女人的方式感觉和表现的态度就原型毕露了。若没有清楚的了解我们的不同,我们就不会花时间彼此了解和尊重,反而会不断要求、愤恨、冲动、主观和固执己见。

爱情在强烈的爱的意图下继续死亡。问题莫名奇妙地爬升,愤恨形成,沟通破裂,不信任增加,导致二人间的拒绝与压制——奇异的爱情消失了。