最近我们在调查某个 bug 涉及到 C++ 异常。平时较少用 C++ 异常,借此机会把 C++ 异常机制梳理清楚。互联网上现有的资料不多,大多过于深奥。因此写下这篇文档备忘。 C++ 异常的实现机制有 SJLJ、Dwarf CFI、EHABI。具体选择哪种实现和操作系统及体系结构相关。它是 C++ ABI 的一部分。这里我们仅关注 Dwarf CFI,它是 Linux 在 x86_64 和 arm64 上的默认实现。 完整的 C++ 异常机制需要编译器生成的代码、C++ 运行时(libstdc++ 或 libc++)、unwind 库分工协作完成。本文为了描述浅显易懂,并不区分它们三者。
我们新推出大淘宝技术年度特刊《长期主义,往往从一些小事开始——工程师成长总结专题》,专题收录多位工程师真诚的心路历程与经验思考,覆盖终端、服务端、数据算法、技术质量等7大技术领域,欢迎一起沟通交流。
在系列的前一篇文章中,阐述了 Paxos 的单法令教会协议,也在文章的总结中提到了教会协议只是作为 Paxos 最核心的共识算法,并不具备实际的单独应用场景。本篇文章接着教会协议,一步一步地阐述如何基于它来推导出实用的多法令议会协议。
本文介绍了LangChain框架,它能够将大型语言模型与其他计算或知识来源相结合,从而实现功能更加强大的应用。接着,对LangChain的关键概念进行了详细说明,并基于该框架进行了一些案例尝试,旨在帮助读者更轻松地理解LangChain的工作原理。
本文主要讲述了应对复杂性的一些原则和经验,通过实际案例解构设计思想,个人认为好的设计是体现在「职责分离」、「抽象分层」和「变化扩展」上,在类的结构设计上尤其要花心思去想,如「变与不变分离」、「配置域与执行域分离」、「查询与命令分离」。
G6VP 是由蚂蚁集团 AntV 图可视化小组开源的图可视化与分析平台。用户可以在 G6VP 中连接自己的数据,包括本地文件上传,或多种图数据库,并组装 G6VP 提供的丰富图可视化与分析资产,进行数据分析,或设计和开发出自己的图可视分析产品,嵌入到自己的系统当中。
微服务是一个广泛使用的应用架构,而如何使得微服务应用云原生化却是近些年一直在演进的课题。国内外云厂商对云原生概念的诠释大同小异,基本都会遵循 CNCF 基金会的定义: 云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式 API。 这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。 弹性可扩展,是企业选择上云的一个重要原因。它可以为企业节省大量成本,同时保障服务稳定性。我们有个电商客户,平时只有 200 多个服务节点,但在大促时轻松扩容到上千个节点。这个扩容动作通过平台一键完成,只需要秒级的时间。操作之简单、时间之短是在上云之前是不可想象的,那些复杂漫长的硬件采购、环境搭建和服务部署流程被自动化完成。