Blog

Blog 标签下共有 94 篇文章

Rsa 使用公钥进行解密

• bwangel rsa crypto blog

RSA 加密算法相关的数学概念

互质

如果两个正整数,除了 1 以外没有其他的公因数,则他们互质。比如,14 和 15 互质。注意,两个数构成互质关系,他们不一定需要是质数,比如 7 和 9。

欧拉函数

欧拉函数是一个数学函数,用来表示一个整数 n 的“相对质数”的个数,也就是说,它计算的是小于 n 且与 n 互质的数的数量。举个例子:

对于 n = 9,1, 2, 4, 5, 7, 8 都与 9 …

envoy 线程模型

• bwangel Envoy blog

线程模型

envoy 的线程可以分成三类

main thread

main thread 负责进程的管理,和 xDS Server 的通信,统计信息 stat 刷新,admin 设置。

main 线程中所有的工作都是异步 & 非阻塞的, 而且它负责的重要功能通常都不会用到大量的 CPU,所以它可以以单线程的模式运行。

worker thread

worker …

Python2 的正则在 Mac 和 Linux 上的不同表现

• bwangel Python Unicode re blog

表现

s = u'玛丽黛佳眉笔只-需-18,冲p腹t製o2𝒂I5EfW4xPmTq𝒃o2打🤔开桃o寶'

这个字符串 s 是一段淘口令,核心内容就是 𝒂 和 𝒃 之间的 ID I5EfW4xPmTq, 我们想用一个正则表达式将 ID 捕获出来。

𝒂 和 𝒃 的 unicode 码点不在基本平面内,在1号平面内。Unicode 各个平面的字符范围参考 维基百科

在 MacOS …

细说:Unicode, UTF-8, UTF-16, UTF-32, UCS-2, UCS-4

• bwangel unicode utf-16 ucs blog

原文链接: Malecrab 的博客

这篇文章讲的非常清楚了,我这里复制一份用于备份,查找。

Unicode与ISO 10646

全世界很多个国家都在为自己的文字编码,并且互不相通,不同的语言字符编码值相同却代表不同的符号(例如:韩文编码 EUC-KR 中 “한국어” 的编码值正好是汉字编码GBK中的“茄惫绢”)。

因此,同一份文档,拷贝至不同语言的机器,就可能成了乱码,于是人们就想:我们能不能定 …

Thrift Python Client 解析负数 field id 失败

• bwangel Python Thrift blog

thrift python 的 fastbinary 是什么

thrift 在进行通信的时候,Python client 需要将 idl 中定义的方法参数,结构体序列化成字节流。这是在 thrift 的 Protocol 层实现的。

序列化的方式有多种,JSON, Binary, Compact。

Binary 和 Compact 协议的实现有两种,分别是纯 Python 实现和 C++ 实 …

Leetcode第96题

• bwangel algo leetcode blog

题目

给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。

示例 1:

输入:n = 3 输出:5

示例 2:

输入:n = 1 输出:1

提示:

1 <= n <= 19

解题思路

这个题目主要的难度在公式推导上,我们可以用动态规划的思路来求解。

  • 令 \( G(N) \) 表示 n 互不相同的整数组 …

Python2 使用 Thrift 为什么会出现 EINTR 错误

• bwangel python thrift blog

EINTR 错误是什么

man 7 signal 中写到,

If a signal handler is invoked while a system call or library function call is blocked, then either:

• the call is automatically restarted after the signal handler …

在 Ubuntu 22.04 上搭建 NFS Server

• bwangel nfs linux blog

环境准备

我准备了两台机器

name ip user user_id
server 191.168.58.11 vagrant 1000 …

Thrift golang client 如何设置超时时间

• bwangel blog thrift Golang

简介

本文以 golang thrift binary 协议为例,讲述 thrift golang client 如何设置超时时间

如何设置超时时间

golang thrift client 有两个超时时间

  1. socket timeout

在创建 TSocket 的时候,我们可以传入 ConnectTimeoutSocketTimeout 两个配置。

  • ConnectTimeout 表示建 …

利用 VirtualBox 和 Ubuntu 22 重现抓包实验

wireshark blog

实验介绍

《Wireshark网络分析就这么简单》 第一章,讲述了一道面试题。

HostA 和 HostB 在同一个局域网中,它们的 IP 配置如下,请问这两台机器能否 ping 通?

HostA: 
    IP: 192.168.26.129/24
    Gateway: 192.168.26.2
HostB: 
    IP: 192.168.26.3/27
    Gateway: …

HTTP 协议中带下划线的 header 说明

• bwangel blog http nginx

lsof

• bwangel lsof linux blog

按照网络状态筛选进程的 fd

sudo lsof -i -sTCP:LISTEN -a -p <pid>
  • -a 表示 and, 前后两个条件要一起生效

  • -i-s 一起用,表示可以按照 TCP/UDP 状态来筛选 fd

  • 列出进程 <pid> 建立的所有 TCP 连接

sudo lsof -i -sTCP:ESTABLISHED -a -p …

从 none 开始,用网桥模式启动容器的网络

• bwangel docker network blog

用 none 网络模式启动的容器,创建一个可以对外通信的网络

Thrift 协议学习笔记

• bwangel thrift blog

本文主要讲了 thrift 的协议格式

Leetcode 142: 环形链表 II

• bwangel Algo blog

Ubuntu 下安装 Containerd 及配置代理

• bwangel containerd k8s blog

介绍了安装 containerd 的方法

K8S 中观察 CPU Throttling 情况的指标

• bwangel kubernetes prom blog

解释了一下观察 CPU Throttling 情况的指标

ZigZag 变长整数编码

• bwangel 编码 zigzag blog

变长整数编码的实现

修复 Ubuntu 中 chrome vimium-c 插件失效的问题

• bwangel ubuntu vimium-c blog

记录一次折腾 Ubuntu 的经历

Go gcflags/ldflags 的说明

• bwangel dlv go blog

Go 链接选项和编译选项的说明

Review 《Don’t use Go’s default HTTP client (in production)》

• bwangel 翻译 Go HTTP blog

Review 《How eBPF will solve Service Mesh - Goodbye Sidecars》

• bwangel 翻译 blog

Review 《File Descriptor Transfer over Unix Domain Sockets》

• bwangel 翻译 linux blog

Redis 主从同步细节

• bwangel redis blog

介绍了 Redis 的主从同步流程及一些配置选项

Docker 客户端连接远程 Docker Daemon

• bwangel docker blog

Golang 链接时注入额外信息

• bwangel go blog

Go 编译器注入 git 版本,时间等信息到可执行文件中

《Golang Error》学习笔记

• bwangel 笔记 Go blog

Golang Error 学习笔记

如何生成自签名 HTTPS 证书

• bwangel HTTPS blog

Review 《Using pipelining to speedup Redis queries》

• bwangel 翻译 Redis blog

Go 的调度模型学习笔记

• bwangel 笔记 Go blog

阅读 Go 调度模型 后记的笔记

Rabbitmq Tutorial 学习笔记

• bwangel Go RabbitMQ Tutorial blog

词法分析器生成工具 Lex 简介

• bwangel Flex 编译原理 blog

结合例子简单介绍了Lex 程序和 Lex 工具的用法

Golang 中的 ServeMux 路由简介

• bwangel Go HTTP blog

简单介绍了一下 Golang 中 ServeMux 的功能以及路由方式。

Review 《github.com/stretchr/testify》

• bwangel 翻译 Go blog

Go 并发模式之发布订阅模型

• bwangel Go PubSub 并发编程 blog

发布订阅模型的一个简易单机实现

Review 《JSON and Go》

• bwangel 翻译 Go JSON blog

strings.Builder 转换字符串的时候为什么比 bytes.Buffer 要快

• bwangel Go blog

strings.Builderbytes.Buffer底层都是[]byte, 为什么strings.BuilderString()方法比bytes.Buffer的要快?

Review 《Golang Trick: Export unexport method for test》

• bwangel 翻译 Go ARTS blog

urfave/cli 学习笔记

• bwangel Go cli ARTS blog

Review 《Go Concurrency Patterns: Pipelines and cancellation》

• bwangel Go Concurrency blog

关于线程同步操作的一道面试题

• bwangel Go Channel blog

Go 调度器的一个无法执行陷阱

• bwangel Go AtomicInteger blog

注意: 这篇文章的答案可以有正确的结果,但解题思路是不对的,正确的思路请参考 关于线程同步操作的一道面试题

Go Panic 的触发及恢复过程

• bwangel ARTS Go blog
  • Panic 过程
  • recover 函数
  • defer 函数

线程同步操作面试题使用锁的解法

• bwangel Go ARTS blog

注意: 这篇文章的思路是不正确的,正确的思路请参考 关于线程同步操作的一道面试题

Go 的测试

• bwangel ARTS Go Test blog

主要讲了 Go 相关的测试

HTTP 协议中的分块传输编码

• bwangel HTTP blog

说明了 HTTP 分块传输编码方式

Go 模板

• bwangel Template Go blog

关于 Go 模板的笔记

Go mod 说明

• bwangel go gomod blog

关于 Go mod 的介绍

哈希表学习笔记

Algorithm blog

素数生成器

Go blog

一个不太优雅的素数生成器,主要用来观察“Go-routine + 管道”的开发方式

变态跳台阶问题的解题思路

Algorithm blog

简介:本文主要记录了 变态跳台阶问题 的推导过程

Redis 源码阅读之 dict

redis C语言 blog

本文主要介绍了 Redis 的基础数据结构 dict 的实现,并描述了其渐进式 rehash 的操作

注意: 本文基于 Redis 3.0.0 的代码进行分析的

MySQL 外键分析

MySQL blog

本文主要介绍了 MySQL 外键的一些特性

InnoDB 锁机制

MySQL blog

本文试图讲清楚 InnoDB 中存在的各种锁,以及它们锁定的区别。

Go与数据结构之二叉搜索树

go blog algo

简介: 利用Go语言实现二叉搜索树并为其编写单元测试

Go 语言的 Type Switch 语句解析

Go blog

讲述了Go语言中 Type Swith 的用法以及获取对应变量的一些特殊情况。

InnoDB 行记录格式

MySQL blog

简介: 本文主要讲述了 InnoDB 的行如何在数据文件中进行存储的,同时简单分析了 InnoDB 的逻辑存储结构

Django get_or_create 执行过程

Python Django blog

关于 Django 文档get_or_create的解释

MySQL 日志管理

MySQL blog

简介: 讲述了MySQL中的日志及配置方式

Python Upgrade Importerror

Python ImportError blog
  • 记一次因 Python 升级导致的 ImportError

Go的并发编程简述

Go blog

简述了 Go 中的 goroutine,channel 和 WaitGroup,并通过例子来展示了这些功能的用法

Go 的反射包浅析

Go blog

本文主要介绍了反射包中的常用类型和方法,并使用了几个例子进行了说明。

算法复杂度小记

Algorithm Notes blog

本文主要书写了本人对于算法复杂度的一些理解,并辅以一些例子进行说明

Go 学习笔记

Go Notes blog

摘要:

  1. Golang的基础语法学习

Python的collections模块小结

Python Python标准库 blog

摘要:

  1. 本文章的目标是逐步总结Python中collection模块的用法,会不定期进行更新。
  2. 目前总结了Counter类的用法

Letsencrypt通过DNS TXT记录来验证域名有效性

Letsencrypt blog

摘要:

  1. Letsencrypt 通过dns记录来验证域名

Django的override_settings修饰器浅析

Python Django blog
  1. Django的Settings模块代码说明
  2. Django的override_settings修饰器分析

MySQL Character Set support

• bwangel MySQL blog

摘要:

  1. 本文是对MySQL文档 Character Set Support 的翻译

字符集(character set)和排序规则(collation)概要

一个字符集是一组符号和编码的集合。一个排序规则是一组字符集中用来比较字符的规则的集合。让我们使用一个假想的字符集的例子来分别区分它们。

假设我们有四个字母:A, B, a, b。我们给每个字母赋值一个数字,A = 0, B = 1, …

Redis Sort 命令简介

redis blog

sort命令是Redis中最强大的命令之一,本文试图通过一些例子来总结Redis Sort的常用方法。

Django中import_string的实现

Django Python blog

摘要:

  1. importlib.import_module 函数的功能
  2. import_string 函数的实现

简单聊聊Python中的wraps修饰器

Python blog

摘要:

Python 中的wraps修饰器分析

【流水账】利用闲置笔记本搭建自己的开发服务器

Ubuntu DNS 折腾 blog
  1. 对Ubuntu服务器进行基础配置
  2. 配置dnsmasq服务器
  3. 文章没什么技术含量,主要记录一些配置文件的位置

【非技术】 Arch 下的无线自动断开

Arch 折腾 blog

摘要:

  1. 折腾 ThinkPad E430 在 Arch WiFi 自动断开的问题
  2. 无线网卡型号推荐

说说 Python2 中的字符串编码

Python blog

摘要:

  • Python2 中 Str 和 Unicode 分别存了什么
  • raw_unicode_escape 编码的作用
  • Python2 中的一个经典编码问题

Python2 中 Str 和 Unicode 分别存了什么

在 Python2 中,str 存储的是字节流,unicode 存储的是 Unicode 码点

In [1]: '中'
Out[1]: ' …

MySQL from 部分的子查询

MySQL blog

摘要:

  1. MySQL 语句中 from 部分的子查询

Python concurrent.futures 文档翻译

Python 翻译 blog

摘要:

本文主要是对 Python3 标准库 concurrent.futures 文档的翻译

Gevent 的 KeyError

Python Gevent stackoverflow 翻译 blog

摘要:

  1. 本文翻译自 StackOverFlow 上的一篇答案
  2. 本文主要解释了gevent的猴子补丁和一个KeyError之间的关系

Python unittesting: run tests in another module

Python unittest blog

摘要:

记录一次解决问题的过程。

Python字符串Format方法示例

Python 翻译 blog

摘要:

本文翻译自Python3文档6.1.3.2. Format examples 主要讲述了Pythonstr.format()的一些使用方法

Python中的生成器和协程

Python blog

摘要:

今天读了《A Curious Course on Coroutines and Concurrency》的第一部分,以下为我的碎碎念。

  1. 生成器和协程的异同
  2. 协程的一些特性

Python的命名空间解析

Python blog

摘要:

  1. 什么是命名空间
  2. 命名空间有哪些
  3. 变量查找原则
  4. 分析一个UnboundLocalError的例子

Ubuntu缩小磁盘分区大小

Ubuntu 文件系统 blog

摘要:

  1. 通过resize2fs调整文件系统大小
  2. 通过parted调整磁盘分区大小

PEP 343: Python的with语句

• bwangel Python 翻译 blog

摘要:

  1. Python的with语句用法以及相关的上下文管理协议
  2. 如何自己写一个上下文管理器对象,如何利用contextlib来写一个上下文管理器对象
  3. 原文地址: PEP 343: The ‘with’ statement

MySQL单表查询

MySQL blog

摘要:

这是一篇关于MySQL的文章,主要介绍MySQL单表查询

MySQL多表查询

MySQL blog

摘要:

这是一篇关于MySQL的文章,主要介绍11. MySQL多表查询

MySQL存储过程

MySQL blog

摘要:

这是一篇关于MySQL的文章,主要介绍 MySQL 存储过程

MySQL安全机制

MySQL blog

摘要:

这是一篇关于MySQL的文章,主要介绍 MySQL 安全机制

MySQL常用函数

MySQL blog

摘要:

这是一篇关于MySQL的文章,主要介绍 MySQL 常用函数

MySQL数据类型_数值类型

MySQL blog

摘要:

这是一篇关于MySQL的文章,主要介绍MySQL数据类型_数值类型

MySQL数据类型-字符串类型

MySQL blog

摘要:

这是一篇关于MySQL的文章,主要介绍MySQL数据类型-字符串类型

MySQL索引

MySQL blog

摘要:

MySQL索引

1. 索引简介

索引在MySQL中也叫作键,是存储引擎用于快速找到记录的一种数据结构

索引优化应该是对查询性能优化最有效的手段了

相当于字典中的音序表,如果没有音序表,则需要一页一页去查

2. …

MySQL视图

MySQL blog

摘要:

这是一篇关于MySQL的文章,主要介绍MySQL视图

MySQL触发器

MySQL blog

摘要:

这是一篇关于MySQL的文章,主要介绍9. MySQL触发器

Python参数

IntermediatePython Python blog

摘要:

  1. IntermediatePython的学习笔记
  2. Python的三种参数