摘要: Go 1.24 迎来了 Map 实现的历史性变革:正式弃用沿用十余年的“拉链法”,重构为基于 **Swiss Table** 的开放寻址架构。 本次升级的核心杀手锏是引入了 **SIMD 并行匹配**与**三角形探测算法**,将原本离散的内存布局转化为高度紧凑的连续存储。这不仅消除了溢出桶带来的指针跳转开销,更将负载因子从 81% 提升至 87.5%。对于开发者而言,这意味着在零代码改动的前提下,即可获得更低的内存占用与更强悍的查询性能。
1. 回顾过去:Go 1.23 以前的拉链法 1.1 核心结构 hmap:Map 的头节点,保存了 count、B、buckets 指针等。 bmap (Bucket):每个桶固定存储 8 个键值对。为了内存对齐,它将 8 个 tophash 放在一起,接着是 8 个 key,最后是 8 个 value。 overflow:当桶满时,通过 overflow 指针挂载一个新的 bmap。 1.2 冲突与扩容 哈希冲突:使用拉链法。冲突的 Key 会被放入溢出桶中。 *...
摘要: 在爬取一些网站时经常会遇到Cloudflare自动化检测,playwright包处理此类验证码机制颇为繁琐,使用patchright可以有效遮蔽一些浏览器指纹的自动化检测机制,他的所有用法与playwright一致,可以无缝移植。
安装项目依赖 `shell python -m venv .venv source .venv/bin/activate pip install patchright pip install playwright_captcha 或使用 uv 安装 uv init demo uv install playwright_captcha uv install patchright #安装浏览器,当然你也可以不用安装 playwright 的浏览器,也可以使用系统自带的浏览器,通过 CDP 协议连接 (.venv) D:\Dev\Blog-demo\playwrig...
一、背景与起源 雪花算法(Snowflake)是Twitter开源的分布式ID生成算法,于2010年推出。在分布式系统中,我们经常需要生成全局唯一的ID,传统的数据库自增ID在分布式环境下会遇到性能瓶颈和单点故障问题。雪花算法应运而生,它能够在分布式环境下高效地生成趋势递增、全局唯一的64位长整型ID。 算法特点 全局唯一性:在分布式系统中保证ID不重复 趋势递增:生成的ID大致按时间递增,有利于数据库索引 高性能:本地生成,无需访问数据库或其他服务 高可用:不依赖第三方系统,可用性高 信息含量:ID中包含时间戳,...
一、为什么需要共识机制? 在去中心化的区块链网络中,没有一个"老大"来做决定。想象一下,如果100个人同时记账,怎么保证大家的账本是一致的?这就需要一套规则让所有人达成共识——这就是共识机制。 共识机制要解决的核心问题 1. 双花问题(Double Spending) 同一笔钱被花两次 就像用同一张支票在多个商店购物 2. 拜占庭将军问题(Byzantine Generals Problem) 如何在存在叛徒的情况下达成一致 区块链中即:如何防止恶意节点作恶 `mermaid graph TD A[区块链网络] -->...
一、 核心概念 1. 交易 分布式账本的参与者发生交易,导致账本状态的改变。 2. 区块(Block): 区块是区块链中的基本单位,包含了一批已验证的交易数据。每个区块都有自己的唯一标识符和时间戳,并包含对前一个区块的引用,形成一个连续的链条 区块= 【块头】+【块体】 块头:头哈希(当前页哈希)+父哈希(上一页账单哈希),前一区块的交易信息压缩 主体:记录前一区块结束到该区块创建前所有交易信息 3. 区块链(Blockchain): 区块链是一个被设计用来记录和验证交易的分布式账本系统。它由多个区块组成,每个区块包含一批...
前置要求 确保系统已安装以下工具: Docker 和 Docker Compose Node.js 20+ 和 Yarn 充足的磁盘空间(建议 500GB+) 一、配置 Graph Node 1.1 创建项目目录结构 mkdir -p ~/graph-node-deployment cd ~/graph-node-deployment mkdir -p data/postgres data/ipfs 1.2 配置 config.toml 创建 config.toml 文件,这是 Graph Node 的核...
摘要: 代码审查消耗我们大量精力,不得不在每次提交时排查可能潜在的问题,利用好自动化脚本工具,可以有效避免不规范的提交或代码潜在错误。
目录 Dependabot 快速上手 GitHub Actions 完整教程 实战:TypeScript 项目自动化 1. Dependabot 快速上手 1.1 什么是 Dependabot? Dependabot 自动管理项目依赖的三大功能: | 功能 | 作用 | 默认状态 | |------|------|----------| | Alerts | 发现安全漏洞时警报 | 公...
摘要: 在微服务中,日志通常分布在不同容器或文件中,排查问题极不友好,通过日志系统,将所有日志按时间顺序排列汇总,可以有效解决这一痛点。 同时借助ELK的日志系统我们还可以用它提供的各种插件实现监控报警等。
什么是 EFK? EFK 是一套完整的日志收集、存储、分析和可视化解决方案: Elasticsearch:分布式搜索和分析引擎,用于存储和检索日志数据 Filebeat:轻量级日志采集器,负责收集和转发日志到 Elasticsearch Kibana:数据可视化平台,提供友好的 Web 界面来查询和分析日志 系统架构 应用程序 → 日志文件 → Filebeat → Elasticsearch → Kibana 前提条件 Docker 已安装 Docker Compose 已安装 至少 4GB 可用内...
1. Redis 简介 1.1 Redis 是什么 Redis 是一个开源的,基于内存的Key - Value数据结构存储系统,它不仅支持数据的持久化 (可以将内存中的数据保存到磁盘,重启后再次加载),还可以作为数据库、缓存和消息中间件使用。 1.2 Redis 特点 高性能:数据存储在内存中,具备极快的读写速度(读 \11w/s,写 \8w/s, 读写混合大概在\~5 万/s)。 核心执行模型: 命令执行:采用单线程处理命令,避免了多线程带来的锁竞争和上下文切换开销,保证了操作的原子性。 **...
摘要: 在高并发或对外开放的服务中,如果不做限流,很容易因为突发流量、恶意请求或误用,把应用本身、数据库以及第三方接口直接打挂,因此需要限流器来控制单位时间内允许通过的请求数,保护系统稳定并实现按用户、按接口的配额和公平使用。常见的限流算法主要有四类:实现最简单但在窗口边界会有突刺问题的固定窗口;能更精确控制“最近一段时间”调用次数的滑动窗口;既控制平均速率又允许一定业务突发的令牌桶;以及把请求匀速“漏出”、特别适合保护脆弱下游服务的漏桶。
一、固定窗口算法(计数器) 1. 简介 固定窗口算法(Fixed Window Algorithm),又称计数器算法,是最简单、最直观的一种限流方式:把时间切成一个个连续的固定窗口,并对每个窗口内能够通过的请求数设定上限。 Fixed Window 2. 工作原理 可以把时间想象成一条被均匀切分的时间轴,例如: 按秒限流:每 1 秒是一个窗口; 按分钟限流:每 1 分钟是一个窗口。 在固定窗口算法中,一般会维护...