蛮荆 https://dbwu.tech/ Recent content on 蛮荆 Hugo -- gohugo.io en [email protected] Mon, 01 Apr 2024 00:00:00 +0000 如何获取更多的免费服务器 https://dbwu.tech/posts/other/free-cloud-services/ Mon, 01 Apr 2024 00:00:00 +0000 https://dbwu.tech/posts/other/free-cloud-services/ Kubernetes 调度器队列 - 设计与实现 https://dbwu.tech/posts/k8s/source_code/scheduler_queue/ Tue, 23 Jan 2024 00:00:00 +0000 https://dbwu.tech/posts/k8s/source_code/scheduler_queue/ Kubernetes 调度器 - 核心流程 https://dbwu.tech/posts/k8s/source_code/scheduler/ Sat, 20 Jan 2024 00:00:00 +0000 https://dbwu.tech/posts/k8s/source_code/scheduler/ Kubernetes Networking Model & CNI https://dbwu.tech/posts/k8s/network/cni/ Fri, 12 Jan 2024 00:00:00 +0000 https://dbwu.tech/posts/k8s/network/cni/ Kubernetes 控制器管理总结 https://dbwu.tech/posts/k8s/source_code/controller/ Sun, 07 Jan 2024 00:00:00 +0000 https://dbwu.tech/posts/k8s/source_code/controller/ Kubernetes CronJob 设计与实现 https://dbwu.tech/posts/k8s/source_code/cronjob_controller/ Wed, 03 Jan 2024 00:00:00 +0000 https://dbwu.tech/posts/k8s/source_code/cronjob_controller/ Kubernetes Job 设计与实现 https://dbwu.tech/posts/k8s/source_code/job_controller/ Tue, 02 Jan 2024 00:00:00 +0000 https://dbwu.tech/posts/k8s/source_code/job_controller/ Kubernetes HPA 设计与实现 https://dbwu.tech/posts/k8s/source_code/hpa_controller/ Sun, 31 Dec 2023 00:00:00 +0000 https://dbwu.tech/posts/k8s/source_code/hpa_controller/ Kubernetes Deployment 滚动更新实现原理 https://dbwu.tech/posts/k8s/source_code/deployment_controller/ Thu, 28 Dec 2023 00:00:00 +0000 https://dbwu.tech/posts/k8s/source_code/deployment_controller/ Kubernetes GC 设计与实现 https://dbwu.tech/posts/k8s/source_code/gc_controller/ Mon, 25 Dec 2023 00:00:00 +0000 https://dbwu.tech/posts/k8s/source_code/gc_controller/ Kubernetes Pod 驱逐 - 设计与实现 https://dbwu.tech/posts/k8s/source_code/kubelet_eviction/ Thu, 21 Dec 2023 00:00:00 +0000 https://dbwu.tech/posts/k8s/source_code/kubelet_eviction/ Kubernetes Daemonset 设计与实现 https://dbwu.tech/posts/k8s/source_code/daemonset_controller/ Mon, 18 Dec 2023 00:00:00 +0000 https://dbwu.tech/posts/k8s/source_code/daemonset_controller/ Kubernetes ReplicaSet 设计与实现 https://dbwu.tech/posts/k8s/source_code/replicaset_controller/ Fri, 15 Dec 2023 00:00:00 +0000 https://dbwu.tech/posts/k8s/source_code/replicaset_controller/ Kubernetes EndPoint 设计与实现 https://dbwu.tech/posts/k8s/source_code/endpoint_controller/ Fri, 08 Dec 2023 00:00:00 +0000 https://dbwu.tech/posts/k8s/source_code/endpoint_controller/ Kubernetes Informer 设计与实现 https://dbwu.tech/posts/k8s/source_code/informer/ Thu, 30 Nov 2023 00:00:00 +0000 https://dbwu.tech/posts/k8s/source_code/informer/ 降本增效之应用优化 (三) 日志存储与检索 https://dbwu.tech/posts/optimize/remove_efk_from_log_system/ Mon, 27 Nov 2023 00:00:00 +0000 https://dbwu.tech/posts/optimize/remove_efk_from_log_system/ Kubernetes Pod 设计与实现 - 创建流程 https://dbwu.tech/posts/k8s/source_code/pod_create/ Thu, 23 Nov 2023 00:00:00 +0000 https://dbwu.tech/posts/k8s/source_code/pod_create/ Kubernetes 探针设计与实现 https://dbwu.tech/posts/k8s/source_code/prober/ Mon, 20 Nov 2023 00:00:00 +0000 https://dbwu.tech/posts/k8s/source_code/prober/ Unix 编程艺术名句摘录 https://dbwu.tech/posts/engineering/unix/ Sat, 11 Nov 2023 00:00:00 +0000 https://dbwu.tech/posts/engineering/unix/ Kubernetes - CRI 概述 https://dbwu.tech/posts/k8s/source_code/cri/ Tue, 07 Nov 2023 00:00:00 +0000 https://dbwu.tech/posts/k8s/source_code/cri/ Golang 编译速度为什么这么快? https://dbwu.tech/posts/golang/why_golang_compiles_so_fast/ Sat, 28 Oct 2023 00:00:00 +0000 https://dbwu.tech/posts/golang/why_golang_compiles_so_fast/ Kubernetes Pod 设计与实现 - Pause 容器 https://dbwu.tech/posts/k8s/source_code/pause/ Thu, 26 Oct 2023 00:00:00 +0000 https://dbwu.tech/posts/k8s/source_code/pause/ Kubernetes - kube-proxy 代理模式工程优化 https://dbwu.tech/posts/k8s/kube_proxy/ Mon, 23 Oct 2023 00:00:00 +0000 https://dbwu.tech/posts/k8s/kube_proxy/ Kubernetes 应用最佳实践 - 优雅关闭长连接 https://dbwu.tech/posts/k8s/best_practice/terminating_with_grace/ Fri, 20 Oct 2023 00:00:00 +0000 https://dbwu.tech/posts/k8s/best_practice/terminating_with_grace/ Kubernetes Service 类型和会话亲和性 https://dbwu.tech/posts/k8s/service/ Mon, 16 Oct 2023 00:00:00 +0000 https://dbwu.tech/posts/k8s/service/ Kubernetes 为什么需要 Ingress https://dbwu.tech/posts/k8s/ingress/ Fri, 13 Oct 2023 00:00:00 +0000 https://dbwu.tech/posts/k8s/ingress/ Kubernetes 架构 - 控制平面和数据平面 https://dbwu.tech/posts/k8s/arch/ Thu, 12 Oct 2023 00:00:00 +0000 https://dbwu.tech/posts/k8s/arch/ 降本增效之应用优化 (二) 大报表 https://dbwu.tech/posts/optimize/big_data_file_export/ Thu, 21 Sep 2023 00:00:00 +0000 https://dbwu.tech/posts/optimize/big_data_file_export/ Go 语言如何获取 CPU 利用率 https://dbwu.tech/posts/golang/check_cpu_utilization/ Mon, 18 Sep 2023 00:00:00 +0000 https://dbwu.tech/posts/golang/check_cpu_utilization/ 降本增效之应用优化 (一) Redis https://dbwu.tech/posts/optimize/redis_application_scenarios/ Thu, 07 Sep 2023 00:00:00 +0000 https://dbwu.tech/posts/optimize/redis_application_scenarios/ 业务规则引擎演变过程简述 https://dbwu.tech/posts/system_design/logcial_rule_correlate/ Mon, 07 Aug 2023 00:00:00 +0000 https://dbwu.tech/posts/system_design/logcial_rule_correlate/ 微服务中的熔断算法 https://dbwu.tech/posts/golang_hystrix/ Mon, 24 Jul 2023 00:00:00 +0000 https://dbwu.tech/posts/golang_hystrix/ 熔断机制是微服务调用链路中的的自我保护机制,当链路中某个服务响应时间过长甚至不可用时,会进行服务熔断,快速返回错误响应,停止级联故障,避免雪崩效应。 漏桶算法和令牌桶算法 https://dbwu.tech/posts/golang_ratelimit/ Thu, 20 Jul 2023 00:00:00 +0000 https://dbwu.tech/posts/golang_ratelimit/ 漏桶算法和令牌桶算法是接口限流设计中常用的两种算法,本文通过 Go 语言中两个常用的开源组件,研究下两种算法的区别和具体代码实现。 jsonparser 为什么比标准库的 encoding/json 快 10 倍 ? https://dbwu.tech/posts/golang_jsonparser/ Mon, 17 Jul 2023 00:00:00 +0000 https://dbwu.tech/posts/golang_jsonparser/ zap 高性能设计与实现 https://dbwu.tech/posts/golang_zap/ Sun, 16 Jul 2023 00:00:00 +0000 https://dbwu.tech/posts/golang_zap/ zap 是 Uber 开源的 Go 高性能日志库,性能远超于标准库和其他开源日志库。zap 使用简单,支持多种格式结构化日志、可以设置不同的日志级别,并且能够记录堆栈信息和 &hellip; HTTP Router 算法演进 https://dbwu.tech/posts/http_router/ Thu, 13 Jul 2023 00:00:00 +0000 https://dbwu.tech/posts/http_router/ 布谷鸟过滤器 https://dbwu.tech/posts/cuckoo_filter/ Mon, 10 Jul 2023 00:00:00 +0000 https://dbwu.tech/posts/cuckoo_filter/ 布谷鸟过滤器是一种节省内存空间的概率数据结构,基于布谷鸟哈希算法实现的过滤器,和布隆过滤器一样,用于检测指定元素是否存在于某个集合中,返回结果语义是“元素一定不存在”或“有较大可能存在”。 fastcache 高性能设计与实现 https://dbwu.tech/posts/golang_fastcache/ Thu, 06 Jul 2023 00:00:00 +0000 https://dbwu.tech/posts/golang_fastcache/ Web 常见的三个安全问题 https://dbwu.tech/posts/web_security/ Wed, 05 Jul 2023 00:00:00 +0000 https://dbwu.tech/posts/web_security/ ants Code Reading https://dbwu.tech/posts/golang_ants/ Fri, 30 Jun 2023 00:00:00 +0000 https://dbwu.tech/posts/golang_ants/ ants 是一个高性能且低损耗的 goroutine 池,组件内部会创建一个固定容量的 goroutine 池,并且管理和回收池中的 goroutine,主要应用场景是允许开发者限制并发程序中的 goroutine 数量,更多的特性 &hellip; 布谷鸟过滤器 https://dbwu.tech/posts/cuckoofilter/ Fri, 30 Jun 2023 00:00:00 +0000 https://dbwu.tech/posts/cuckoofilter/ 布谷鸟过滤器是一种节省内存空间的概率数据结构,基于布谷鸟哈希算法实现的过滤器,和布隆过滤器一样,用于检测指定元素是否存在于某个集合中,返回 “元素一定不存在” 或 “有较大可能存在” 两种语义之一。 Go 线程安全 map 方案选型 https://dbwu.tech/posts/golang_thread_safe_map/ Sun, 25 Jun 2023 00:00:00 +0000 https://dbwu.tech/posts/golang_thread_safe_map/ Go 语言标准库中的 map 数据类型并不是线程安全的,多个 goroutine 可以并发读取同一个 map, 但是不能并发写入同一个 map, 否则会引发 panic, 为了解决这个问题 &hellip; 布隆过滤器 https://dbwu.tech/posts/bloom_filter/ Tue, 20 Jun 2023 00:00:00 +0000 https://dbwu.tech/posts/bloom_filter/ 布隆过滤器(英语:Bloom Filter)是 1970 年由布隆提出的,是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。 死锁、活锁、饥饿、自旋锁 https://dbwu.tech/posts/os_lock/ Mon, 19 Jun 2023 00:00:00 +0000 https://dbwu.tech/posts/os_lock/ sync.Pool Code Reading https://dbwu.tech/posts/golang_sync_pool/ Thu, 15 Jun 2023 00:00:00 +0000 https://dbwu.tech/posts/golang_sync_pool/ sync.Pool 是 Go 语言标准库中的一个并发安全的对象池,可以用来缓存那些需要重复创建和销毁的对象,从而避免频繁地进行内存分配和回收,降低内存和 GC 压力。本文通过底层源代码来分析 sync.Pool 高性能背后的设计与实现&hellip; Go 内存管理概述 https://dbwu.tech/posts/golang_memory/ Tue, 13 Jun 2023 00:00:00 +0000 https://dbwu.tech/posts/golang_memory/ Go 语言的底层内存分配实现方案参考了 TCMalloc, 通过多级缓存机制、 内存对象大小分类来完成不同的分配策略以提升性能。 Go netpoll Code Reading https://dbwu.tech/posts/golang_netpoll/ Mon, 12 Jun 2023 00:00:00 +0000 https://dbwu.tech/posts/golang_netpoll/ goroutine 泄漏与检测 https://dbwu.tech/posts/golang_goroutine_leak/ Sun, 11 Jun 2023 00:00:00 +0000 https://dbwu.tech/posts/golang_goroutine_leak/ Go 语言内置 GC,因此一般不会内存泄漏,但是 goroutine 可能会发生泄漏,泄漏的 goroutine 引用的内存同样无法被 GC 正常回收 &hellip; time/Timer Code Reading https://dbwu.tech/posts/golang_timer/ Sat, 10 Jun 2023 00:00:00 +0000 https://dbwu.tech/posts/golang_timer/ Go 语言中的计时器常用于定期执行某个操作或者在指定时间内执行某个操作,例如实现超时、周期性执行任务等场景,主要通过标准库的 time 包中的相关方法来实现,如 time.After(), time.Tick() 等。 GMP Scheduler Code Reading https://dbwu.tech/posts/golang_gmp/ Fri, 09 Jun 2023 00:00:00 +0000 https://dbwu.tech/posts/golang_gmp/ Go 语言中的 GMP 是指用于管理 goroutine 的调度器,其内部使用了一种称为 M:N 的调度模型,其中 M 个用户级 goroutine 被分配到 N 个内核级线程上执行。调度器负责将 goroutine 分配给处理器 P, 并在需要时将 goroutine 从一个处理器 P 转移到另一个处理器 P &hellip; Go channel 的 15 条规则和底层实现 https://dbwu.tech/posts/golang_channel/ Thu, 08 Jun 2023 00:00:00 +0000 https://dbwu.tech/posts/golang_channel/ Go 语言中 channel 发送、接收、关闭规则都有哪些?底层又是如何实现的呢? 为什么 Linux “一切皆文件” https://dbwu.tech/posts/linux_everything_is_a_file/ Fri, 19 May 2023 00:00:00 +0000 https://dbwu.tech/posts/linux_everything_is_a_file/ 在 Linux 中,包括硬件设备、目录、文本文件、二进制文件、输入输出流、套接字、管道、TTY 终端等各种资源都被抽象成文件,并且它们之间没有太大的区别。每个文件都有一个唯一的路径进行标识,因此可以通过文件系统中的路径来访问和管理这些资源 &hellip; context.Context Code Reading https://dbwu.tech/posts/golang_context/ Fri, 12 May 2023 00:00:00 +0000 https://dbwu.tech/posts/golang_context/ context.Context 类型表示上下文信息,作用是在 API 通信、进程通信、函数调用之间传递超时时间、取消信号和其他数据值。 runtime/HACKING.md https://dbwu.tech/posts/golang_hacking/ Thu, 11 May 2023 00:00:00 +0000 https://dbwu.tech/posts/golang_hacking/ 最近阅读标准库源代码时,偶然间发现 runtime 包下面的一个 markdown 文件,大致读了一下,感觉对理解 GMP 调度的基础概念和标准库中的各类注解指令非常有帮助,决定翻译出来,正好提高一下自己的英文水平。 Goland 最佳实践 https://dbwu.tech/posts/goland_best_practice/ Wed, 10 May 2023 00:00:00 +0000 https://dbwu.tech/posts/goland_best_practice/ 互联网开发与金庸武学 https://dbwu.tech/posts/other/jywx/ Tue, 09 May 2023 00:00:00 +0000 https://dbwu.tech/posts/other/jywx/ 为什么 Redis 6.0 引入多线程模型? https://dbwu.tech/posts/redis/why_redis_use_multi_threading_model/ Wed, 03 May 2023 00:00:00 +0000 https://dbwu.tech/posts/redis/why_redis_use_multi_threading_model/ Kubernetes 应用最佳实践 - 金丝雀发布 https://dbwu.tech/posts/k8s/best_practice/canary_release/ Mon, 01 May 2023 00:00:00 +0000 https://dbwu.tech/posts/k8s/best_practice/canary_release/ 容器中如何正确配置 GOMAXPROCS ? https://dbwu.tech/posts/golang_automaxprocs/ Sun, 30 Apr 2023 00:00:00 +0000 https://dbwu.tech/posts/golang_automaxprocs/ singleflight Code Reading https://dbwu.tech/posts/golang_singleflight/ Fri, 28 Apr 2023 00:00:00 +0000 https://dbwu.tech/posts/golang_singleflight/ singleflight 是将 多个请求的返回结果相同 + 计算过程次数限制 这一过程抽象出来,将所有细节隐藏在内部实现中,只提供 GET 和 DELETE 两种类型 API, 简化了调用方法。一个比较常见的场景是使用 singleflight 来限制同一个缓存 key 的重复请求,避免发生 缓存击穿 时,避免请求全部落到数据库,减少性能影响和宕机风险。 sync.Map Code Reading https://dbwu.tech/posts/golang_sync_map/ Thu, 27 Apr 2023 00:00:00 +0000 https://dbwu.tech/posts/golang_sync_map/ 从内部底层实现来说,sync.Map 通过 entry 类型将 map 的变化和元素的变化进行隔离的同时, 还保证了底层数据的复用 (read map 和 dirty map 指向同一个 entry), read, dirty 2 个字段加原子操作的紧密配合,非常简洁优雅地实现了 sync.Map 根据读写比例动态变化和转换内部字段数据结构, 尤其是 read 和 dirty 两个字段保持&hellip; sync.Cond Code Reading https://dbwu.tech/posts/golang_sync_cond/ Wed, 26 Apr 2023 00:00:00 +0000 https://dbwu.tech/posts/golang_sync_cond/ sync.Cond 不是一个常用的同步机制,在条件变量长时间无法满足时,sync.Cond 能够让出处理器的使用权,和单纯使用 for {} 进行无限等待相比,可以提高 CPU 的利用率。 sync.WaitGroup Code Reading https://dbwu.tech/posts/golang_sync_waitgroup/ Tue, 25 Apr 2023 00:00:00 +0000 https://dbwu.tech/posts/golang_sync_waitgroup/ sync.RWMutex Code Reading https://dbwu.tech/posts/golang_sync_rwmutex/ Mon, 24 Apr 2023 00:00:00 +0000 https://dbwu.tech/posts/golang_sync_rwmutex/ 如果一个 goroutine 持有了读锁进行操作,此时其他的 goroutine 可能尝试获取写锁 (参与竞争),那么在读锁被释放之前,不会有其他 goroutine 获取到读锁 (避免竞争写锁的 goroutine 被饿死), 一个 goroutine 在阻塞获取写锁的过程中,会阻止其他 goroutine 获得读锁。 sync.Mutex Code Reading https://dbwu.tech/posts/golang_sync_mutex/ Sun, 23 Apr 2023 00:00:00 +0000 https://dbwu.tech/posts/golang_sync_mutex/ 互斥锁可以在两种模式下操作:正常模式和饥饿模式,正常模式的性能要好很多,因为 goroutine 可以连续多次获得互斥锁,即使存在阻塞的 goroutine, 与此同时,饥饿模式是防止尾部的 goroutine 被饿死的重要机制 (高尾延时)。 sync.Once Code Reading https://dbwu.tech/posts/golang_sync_once/ Sun, 23 Apr 2023 00:00:00 +0000 https://dbwu.tech/posts/golang_sync_once/ sync.Once 可以保证某段程序在运行期间的只执行一次,典型的使用场景有初始化配置, 数据库连接等,那么它的内部是如何实现的呢? Go 无锁编程 https://dbwu.tech/posts/golang_lockfree/ Sat, 22 Apr 2023 00:00:00 +0000 https://dbwu.tech/posts/golang_lockfree/ 锁是一种常见的同步机制,用来解决多个线程同时访问共享资源导致的数据竞争问题。在高并发场景下,锁的使用可能会成为性能瓶颈,因为线程需要频繁地加锁和释放锁,这会增加上下文切换开销并降低程序的吞吐量。 sync/atomic Code Reading https://dbwu.tech/posts/golang_atomic/ Fri, 21 Apr 2023 00:00:00 +0000 https://dbwu.tech/posts/golang_atomic/ sync/atomic 包提供了原子同步操作原语,整个操作过程无需加锁,也不会产生 goroutine 上下文切换。 goroutine 交替打印奇偶数 https://dbwu.tech/posts/goroutine_alternate_print/ Thu, 20 Apr 2023 00:00:00 +0000 https://dbwu.tech/posts/goroutine_alternate_print/ 使用两个 <code>goroutine</code> 交替并且顺序地打印数字 1&hellip;10, 要求其中一个 <code>goroutine</code> 打印奇数,另一个 <code>goroutine</code> 打印偶数。 GODEBUG https://dbwu.tech/posts/golang_godebug/ Wed, 19 Apr 2023 00:00:00 +0000 https://dbwu.tech/posts/golang_godebug/ GODEBUG 环境变量可以控制程序运行时的调度信息输出,方便开发者了解程序运行内部细节。 Go 并发模式 https://dbwu.tech/posts/golang_concurrency_patterns/ Tue, 18 Apr 2023 00:00:00 +0000 https://dbwu.tech/posts/golang_concurrency_patterns/ Go 语言常用的并发模式代码模板,已更新。 Go 汇编 https://dbwu.tech/posts/golang_asm/ Mon, 17 Apr 2023 00:00:00 +0000 https://dbwu.tech/posts/golang_asm/ 为什么要学习汇编语言?更加接近硬件底层,性能极致优化,可以降维打击所有高级编程语言。 UUID 通用技术选型 https://dbwu.tech/posts/uuid/ Mon, 17 Apr 2023 00:00:00 +0000 https://dbwu.tech/posts/uuid/ 分布式唯一 ID 是指在分布式系统中生成的全局唯一标识符。在分布式系统中,由于多个节点同时操作数据可能会导致数据冲突或者重复,因此需要为每个数据对象赋予一个唯一的标识符,以便在系统范围内进行区分。 Kubernetes 应用最佳实践 - 水平自动伸缩 https://dbwu.tech/posts/k8s/best_practice/hpa/ Fri, 14 Apr 2023 00:00:00 +0000 https://dbwu.tech/posts/k8s/best_practice/hpa/ Go 高性能 Tips https://dbwu.tech/posts/golang_performance_tips/ Mon, 10 Apr 2023 00:00:00 +0000 https://dbwu.tech/posts/golang_performance_tips/ 阅读 Go 标准库和开源框架代码时,经常会发现这些 Tips 的踪迹。 fasthttp 为什么比标准库 net/http 快 10 倍 ? https://dbwu.tech/posts/golang_fasthttp/ Fri, 07 Apr 2023 00:00:00 +0000 https://dbwu.tech/posts/golang_fasthttp/ 技术文章配图指南 https://dbwu.tech/posts/image_tool/ Tue, 04 Apr 2023 00:00:00 +0000 https://dbwu.tech/posts/image_tool/ 为什么技术文章需要配图?一图胜千言。 ChatGPT 初体验 https://dbwu.tech/posts/chatgpt/ Mon, 03 Apr 2023 00:00:00 +0000 https://dbwu.tech/posts/chatgpt/ 概述 ChatGPT 从 2 月份热度一直持续到现在,并且在接下来的一段时间内,热度还会持续下去。笔者从 3 月初开始慢慢接触,从最初的在 搜索引擎 和 ChatGPT 之间来回切换并验证, 到目前的简单搜索场景 80% 的时间都是直接用 ChatGPT 的,本文总结下这一个月的时间,笔者用到的最多的 4 个功能。 Docker 网络原理概览 https://dbwu.tech/posts/docker_network/ Mon, 03 Apr 2023 00:00:00 +0000 https://dbwu.tech/posts/docker_network/ <code>Docker</code> 原生网络是基于 Linux 的 <code>网络命名空间</code>(net namespace) 和 <code>虚拟网络设备</code>(veth pair)实现的。当 <code>Docker</code> 进程启动时,会在宿主机上创建一个名称为 <code>docker0</code> 的 <strong>虚拟网桥</strong>,在该宿主机上启动的 <code>Docker</code> 容器会连接到这个虚拟网桥上 &hellip; iptables 的五表五链 https://dbwu.tech/posts/iptables/ Mon, 03 Apr 2023 00:00:00 +0000 https://dbwu.tech/posts/iptables/ iptables 是一个配置 Linux 内核防火墙的命令行工具,它基于内核的包过滤框架(packet filtering framework) netfilter, 主要用于管理数据包过滤和 NAT 规则。 Kubernetes 应用最佳实践 - 亲和性和污点容忍度 https://dbwu.tech/posts/k8s/best_practice/affinity_and_taint_toleration/ Fri, 31 Mar 2023 00:00:00 +0000 https://dbwu.tech/posts/k8s/best_practice/affinity_and_taint_toleration/ Go 的反射与三大定律 https://dbwu.tech/posts/golang_reflect/ Thu, 30 Mar 2023 00:00:00 +0000 https://dbwu.tech/posts/golang_reflect/ 1.反射可以通过 interface{} 得到反射对象; 2.反射可以通过反射对象得到 interface{}; 3.修改反射对象的前提是值必须可以被修改; 反射三大定律背后的实现原理是什么? Docker 官方提供的最佳实践 https://dbwu.tech/posts/docker_best_practices/ Wed, 29 Mar 2023 00:00:00 +0000 https://dbwu.tech/posts/docker_best_practices/ Go 语言内置的设计模式 https://dbwu.tech/posts/golang_design_patterns/ Wed, 22 Mar 2023 00:00:00 +0000 https://dbwu.tech/posts/golang_design_patterns/ 和传统的 GOF, Java, C# 教科书式的设计模式不同,Go 语言设计从一开始就力求简洁,已经有其他编程语言基础的读者在学习和使用 Go 语言时,万万不可按图索骥、生搬硬套,简单的事情复杂化。 HTTP1 到 HTTP3 的工程优化 https://dbwu.tech/posts/http_evolution/ Sat, 18 Mar 2023 00:00:00 +0000 https://dbwu.tech/posts/http_evolution/ Kubernetes 应用最佳实践 - Sidecar 模式 https://dbwu.tech/posts/k8s/sidecar/ Thu, 16 Mar 2023 00:00:00 +0000 https://dbwu.tech/posts/k8s/sidecar/ Kubernetes 应用最佳实践 - init 容器和钩子函数 https://dbwu.tech/posts/k8s/best_practice/init_container/ Wed, 15 Mar 2023 00:00:00 +0000 https://dbwu.tech/posts/k8s/best_practice/init_container/ 为什么 recover 必须在 defer 中调用? https://dbwu.tech/posts/golang_panic_recover/ Mon, 13 Mar 2023 00:00:00 +0000 https://dbwu.tech/posts/golang_panic_recover/ 为什么 defer 的执行顺序和注册顺序不同? https://dbwu.tech/posts/golang_defer/ Sun, 12 Mar 2023 00:00:00 +0000 https://dbwu.tech/posts/golang_defer/ Go map 设计与实现 https://dbwu.tech/posts/golang_map/ Sat, 11 Mar 2023 00:00:00 +0000 https://dbwu.tech/posts/golang_map/ 本文从源代码的角度分析 Go map 数据结构使用中的常见问题,例如: 为什么 map 未初始化写入时报错 ? map 是线程安全的吗 ? 为什么遍历 map 是无序的 ? &hellip; Go 切片扩容底层实现 https://dbwu.tech/posts/golang_slice/ Fri, 10 Mar 2023 00:00:00 +0000 https://dbwu.tech/posts/golang_slice/ Go 语言中的零拷贝 https://dbwu.tech/posts/os/zero_copy/ Fri, 10 Mar 2023 00:00:00 +0000 https://dbwu.tech/posts/os/zero_copy/ Go Delve https://dbwu.tech/posts/golang_delve/ Thu, 09 Mar 2023 00:00:00 +0000 https://dbwu.tech/posts/golang_delve/ Delve 用来调试 Go 语言开发的程序,该工具的目标是为 Go 语言提供一个简单、功能齐全的调试工具。 云原生和边缘计算简介 https://dbwu.tech/posts/what_is_cloudnative/ Wed, 08 Mar 2023 00:00:00 +0000 https://dbwu.tech/posts/what_is_cloudnative/ Kubernetes Pod 服务质量等级 https://dbwu.tech/posts/k8s/best_practice/qos/ Tue, 07 Mar 2023 00:00:00 +0000 https://dbwu.tech/posts/k8s/best_practice/qos/ Kubernetes 应用最佳实践 - 探针 https://dbwu.tech/posts/k8s/best_practice/probe/ Fri, 03 Mar 2023 00:00:00 +0000 https://dbwu.tech/posts/k8s/best_practice/probe/ Kubernetes 应用最佳实践 - 资源请求和限制 https://dbwu.tech/posts/k8s/best_practice/requests_and_limits/ Wed, 01 Mar 2023 00:00:00 +0000 https://dbwu.tech/posts/k8s/best_practice/requests_and_limits/ CDN 原理 https://dbwu.tech/posts/cdn/ Tue, 28 Feb 2023 00:00:00 +0000 https://dbwu.tech/posts/cdn/ CDN 的基本原理为反向代理,反向代理(Reverse Proxy)方式是指以代理服务器来接受 Internet 上的连接请求,然后将请求转发给内部网络上的服务器, 并将从服务器上得到的结果返回给 Internet 上请求连接的客户端,此时代理服务器对外就表现为一个节点服务器 &hellip; Kubernetes 应用最佳实践 - 开篇 https://dbwu.tech/posts/k8s/best_practice/base/ Mon, 27 Feb 2023 00:00:00 +0000 https://dbwu.tech/posts/k8s/best_practice/base/ 缓存策略和模式 https://dbwu.tech/posts/system_design/cache/ Sat, 25 Feb 2023 00:00:00 +0000 https://dbwu.tech/posts/system_design/cache/ Go 内存模型 https://dbwu.tech/posts/memory_model/ Fri, 24 Feb 2023 00:00:00 +0000 https://dbwu.tech/posts/memory_model/ 为什么要学习 Go 内存模型? 因为这是理解和掌握 Go 并发编程的基础,也是学习 Go 标准库底层源码实现的前提。 Kubernetes 核心概念 https://dbwu.tech/posts/k8s/summary/ Fri, 24 Feb 2023 00:00:00 +0000 https://dbwu.tech/posts/k8s/summary/ 软件版本语义化 https://dbwu.tech/posts/version_semantics/ Fri, 24 Feb 2023 00:00:00 +0000 https://dbwu.tech/posts/version_semantics/ 字节序概述 https://dbwu.tech/posts/byte_order/ Mon, 20 Feb 2023 00:00:00 +0000 https://dbwu.tech/posts/byte_order/ DNS 原理 https://dbwu.tech/posts/dns/ Sat, 18 Feb 2023 00:00:00 +0000 https://dbwu.tech/posts/dns/ Go pprof 从入门到精通 https://dbwu.tech/posts/golang_pprof/ Thu, 16 Feb 2023 00:00:00 +0000 https://dbwu.tech/posts/golang_pprof/ 如何设计一个无状态应用 https://dbwu.tech/posts/cloudnative/how_to_design_stateless_app/ Thu, 16 Feb 2023 00:00:00 +0000 https://dbwu.tech/posts/cloudnative/how_to_design_stateless_app/ Go 1.20 发布了 https://dbwu.tech/posts/go1.20/ Sat, 11 Feb 2023 00:00:00 +0000 https://dbwu.tech/posts/go1.20/ 前言 这几天所有的热度都集中到了 ChatGPT,不过我对这件事情没有什么兴趣,原本计划换换脑,看一下 Docker 基础相关技术,恰巧这时 兔兔大佬 发来了灵魂拷问 &hellip; Docker 基础支撑技术概览 https://dbwu.tech/posts/docker_arch/ Tue, 07 Feb 2023 00:00:00 +0000 https://dbwu.tech/posts/docker_arch/ Go 逃逸分析 https://dbwu.tech/posts/goland_escape/ Fri, 03 Feb 2023 00:00:00 +0000 https://dbwu.tech/posts/goland_escape/ Go 语言的编译器使用逃逸分析决定哪些变量分配在栈上,哪些变量分配在堆上。 Go 数据竞态 https://dbwu.tech/posts/golang_data_race/ Thu, 02 Feb 2023 00:00:00 +0000 https://dbwu.tech/posts/golang_data_race/ 数据竞态是并发系统编程中最常见和最难调试的错误类型之一。当两个 goroutine 同时访问同一个变量并且至少有一个是写入操作时,就会发生数据竞态。 异或运算的妙用 https://dbwu.tech/posts/algorithm/xor/ Wed, 01 Feb 2023 00:00:00 +0000 https://dbwu.tech/posts/algorithm/xor/ Go 如何实现 implements 功能 https://dbwu.tech/posts/golang_implements/ Tue, 31 Jan 2023 00:00:00 +0000 https://dbwu.tech/posts/golang_implements/ Go 语言中检测一个类型是否实现了某个接口,通常分为两类机制: 编译期间和运行期间。 Go 的面向对象编程 https://dbwu.tech/posts/golang_oop/ Mon, 30 Jan 2023 00:00:00 +0000 https://dbwu.tech/posts/golang_oop/ Go 语言如何实现封装、继承、多态等面向对象的特性? 为什么需要 VXLAN 网络 https://dbwu.tech/posts/network/vxlan/ Thu, 12 Jan 2023 00:00:00 +0000 https://dbwu.tech/posts/network/vxlan/ 为什么需要 VLAN 网络 https://dbwu.tech/posts/network/vlan/ Thu, 05 Jan 2023 00:00:00 +0000 https://dbwu.tech/posts/network/vlan/ 网络编程框架的作用和价值 https://dbwu.tech/posts/network/programming-framework/ Tue, 25 Oct 2022 00:00:00 +0000 https://dbwu.tech/posts/network/programming-framework/ 如何实现可靠的 UDP ? https://dbwu.tech/posts/network/how-to-implements-reliable-udp/ Sat, 15 Oct 2022 00:00:00 +0000 https://dbwu.tech/posts/network/how-to-implements-reliable-udp/ TCP 到底有什么性能问题? https://dbwu.tech/posts/network/why-tcp-does-performance-issues/ Mon, 10 Oct 2022 00:00:00 +0000 https://dbwu.tech/posts/network/why-tcp-does-performance-issues/ 计算机网络中的设计模式 https://dbwu.tech/posts/network/design-patterns/ Mon, 25 Jul 2022 00:00:00 +0000 https://dbwu.tech/posts/network/design-patterns/ 动态规划简明教程 - 5 https://dbwu.tech/posts/algorithm/dynamic_programming_5/ Sat, 25 Jun 2022 00:00:00 +0000 https://dbwu.tech/posts/algorithm/dynamic_programming_5/ 动态规划简明教程 - 4 https://dbwu.tech/posts/algorithm/dynamic_programming_4/ Sun, 19 Jun 2022 00:00:00 +0000 https://dbwu.tech/posts/algorithm/dynamic_programming_4/ 动态规划简明教程 - 3 https://dbwu.tech/posts/algorithm/dynamic_programming_3/ Wed, 15 Jun 2022 00:00:00 +0000 https://dbwu.tech/posts/algorithm/dynamic_programming_3/ 动态规划简明教程 - 2 https://dbwu.tech/posts/algorithm/dynamic_programming_2/ Thu, 09 Jun 2022 00:00:00 +0000 https://dbwu.tech/posts/algorithm/dynamic_programming_2/ 动态规划简明教程 - 1 https://dbwu.tech/posts/algorithm/dynamic_programming/ Sun, 05 Jun 2022 00:00:00 +0000 https://dbwu.tech/posts/algorithm/dynamic_programming/ LeetCode 回溯 刷题模板 https://dbwu.tech/posts/algorithm/leetcode_backtrack_pattern/ Mon, 30 May 2022 00:00:00 +0000 https://dbwu.tech/posts/algorithm/leetcode_backtrack_pattern/ LeetCode Binary Search Tree 刷题模板 https://dbwu.tech/posts/algorithm/leetcode_binary_search_tree_pattern/ Wed, 25 May 2022 00:00:00 +0000 https://dbwu.tech/posts/algorithm/leetcode_binary_search_tree_pattern/ LeetCode 拓扑排序 刷题模板 https://dbwu.tech/posts/algorithm/leetcode_topological_sorting_pattern/ Tue, 17 May 2022 00:00:00 +0000 https://dbwu.tech/posts/algorithm/leetcode_topological_sorting_pattern/ LeetCode BFS 刷题模板 https://dbwu.tech/posts/algorithm/leetcode_bfs_pattern/ Wed, 11 May 2022 00:00:00 +0000 https://dbwu.tech/posts/algorithm/leetcode_bfs_pattern/ LeetCode DFS 刷题模板 https://dbwu.tech/posts/algorithm/leetcode_dfs_pattern/ Thu, 05 May 2022 00:00:00 +0000 https://dbwu.tech/posts/algorithm/leetcode_dfs_pattern/ LeetCode Binary Search 刷题模板 https://dbwu.tech/posts/algorithm/leetcode_binary_search_pattern/ Mon, 25 Apr 2022 00:00:00 +0000 https://dbwu.tech/posts/algorithm/leetcode_binary_search_pattern/ LeetCode Binary Tree 刷题模板 https://dbwu.tech/posts/algorithm/leetcode_binary_tree_pattern/ Mon, 18 Apr 2022 00:00:00 +0000 https://dbwu.tech/posts/algorithm/leetcode_binary_tree_pattern/ LeetCode Sliding Window 刷题模板 https://dbwu.tech/posts/algorithm/leetcode_sliding_window_pattern/ Sun, 10 Apr 2022 00:00:00 +0000 https://dbwu.tech/posts/algorithm/leetcode_sliding_window_pattern/ LeetCode 双指针 刷题模板 https://dbwu.tech/posts/algorithm/leetcode_two_points_pattern/ Tue, 22 Mar 2022 00:00:00 +0000 https://dbwu.tech/posts/algorithm/leetcode_two_points_pattern/ LeetCode Stack 刷题模板 https://dbwu.tech/posts/algorithm/leetcode_stack_pattern/ Thu, 17 Mar 2022 00:00:00 +0000 https://dbwu.tech/posts/algorithm/leetcode_stack_pattern/ LeetCode Hash 刷题模板 https://dbwu.tech/posts/algorithm/leetcode_hash_pattern/ Tue, 15 Mar 2022 00:00:00 +0000 https://dbwu.tech/posts/algorithm/leetcode_hash_pattern/ LeetCode Linked List 刷题模板 https://dbwu.tech/posts/algorithm/leetcode_linked_list_pattern/ Thu, 10 Mar 2022 00:00:00 +0000 https://dbwu.tech/posts/algorithm/leetcode_linked_list_pattern/ LeetCode 位运算刷题模板 https://dbwu.tech/posts/algorithm/leetcode_bit_pattern/ Wed, 16 Feb 2022 00:00:00 +0000 https://dbwu.tech/posts/algorithm/leetcode_bit_pattern/ LeetCode 刷题必懂位运算 https://dbwu.tech/posts/algorithm/bit_operations/ Wed, 02 Feb 2022 00:00:00 +0000 https://dbwu.tech/posts/algorithm/bit_operations/ I/O 多路复用模型 https://dbwu.tech/posts/network/io-multiplexing/ Sun, 23 Jan 2022 00:00:00 +0000 https://dbwu.tech/posts/network/io-multiplexing/ 计算机网络到底难学在哪里? https://dbwu.tech/posts/network/reasons-for-difficulty-in-mastering/ Sat, 22 Jan 2022 00:00:00 +0000 https://dbwu.tech/posts/network/reasons-for-difficulty-in-mastering/ I/O 模型的阻塞/非阻塞, 同步/异步 https://dbwu.tech/posts/network/io-model/ Sun, 09 Jan 2022 00:00:00 +0000 https://dbwu.tech/posts/network/io-model/ Effective TCP/IP Programming https://dbwu.tech/posts/network/effective-tcp-ip-programming/ Sat, 01 May 2021 00:00:00 +0000 https://dbwu.tech/posts/network/effective-tcp-ip-programming/ Mac 边边角角 https://dbwu.tech/posts/tools/mac/ Wed, 11 Nov 2020 00:00:00 +0000 https://dbwu.tech/posts/tools/mac/ TDD 和敏捷开发 https://dbwu.tech/posts/engineering/agile_with_tdd/ Wed, 11 Nov 2020 00:00:00 +0000 https://dbwu.tech/posts/engineering/agile_with_tdd/ 为什么应用层心跳检测是必要的 https://dbwu.tech/posts/network/why-app-keepalive-is-necessary/ Sat, 17 Oct 2020 00:00:00 +0000 https://dbwu.tech/posts/network/why-app-keepalive-is-necessary/ PHP 边边角角 https://dbwu.tech/posts/php_summary/ Sun, 09 Feb 2020 00:00:00 +0000 https://dbwu.tech/posts/php_summary/ Python 快速入门 https://dbwu.tech/posts/python/quick-start/ Fri, 24 Jan 2020 00:00:00 +0000 https://dbwu.tech/posts/python/quick-start/ 工程师面试指北 https://dbwu.tech/posts/other/interview/ Wed, 01 Jan 2020 00:00:00 +0000 https://dbwu.tech/posts/other/interview/ Git 边边角角 https://dbwu.tech/posts/tools/git/ Mon, 11 Nov 2019 00:00:00 +0000 https://dbwu.tech/posts/tools/git/ MySQL 运维 SQL 备忘 https://dbwu.tech/posts/database/mysql_ops_sql/ Sat, 16 Mar 2019 00:00:00 +0000 https://dbwu.tech/posts/database/mysql_ops_sql/ TCP 100 万长连接的参数调优 https://dbwu.tech/posts/network/how-to-optimize-tcp-performance/ Sat, 05 Jan 2019 00:00:00 +0000 https://dbwu.tech/posts/network/how-to-optimize-tcp-performance/ TCP Fast Open https://dbwu.tech/posts/network/what-is-tcp-fast-open/ Sat, 05 Jan 2019 00:00:00 +0000 https://dbwu.tech/posts/network/what-is-tcp-fast-open/ TCP 可靠传输实现原理 - 3.拥塞控制 https://dbwu.tech/posts/network/what-is-tcp-congestion-control/ Sun, 30 Dec 2018 00:00:00 +0000 https://dbwu.tech/posts/network/what-is-tcp-congestion-control/ TCP 可靠传输实现原理 - 2.滑动窗口 (流量控制) https://dbwu.tech/posts/network/what-is-tcp-sliding-window/ Tue, 25 Dec 2018 00:00:00 +0000 https://dbwu.tech/posts/network/what-is-tcp-sliding-window/ TCP 可靠传输实现原理 - 1.确认和重传 https://dbwu.tech/posts/network/what-is-tcp-ack-with-retx/ Fri, 21 Dec 2018 00:00:00 +0000 https://dbwu.tech/posts/network/what-is-tcp-ack-with-retx/ 为什么 TCP 粘包 是正常现象 https://dbwu.tech/posts/network/why-tcp-does-not-need-handle-sticky/ Sun, 16 Dec 2018 00:00:00 +0000 https://dbwu.tech/posts/network/why-tcp-does-not-need-handle-sticky/ 为什么 TCP 需要 TIME_WAIT 状态 https://dbwu.tech/posts/network/why-tcp-does-needs-time-wait/ Tue, 11 Dec 2018 00:00:00 +0000 https://dbwu.tech/posts/network/why-tcp-does-needs-time-wait/ 为什么 TCP 建立连接需要三次握手 https://dbwu.tech/posts/network/why-tcp-does-needs-three-way-handshake/ Sat, 08 Dec 2018 00:00:00 +0000 https://dbwu.tech/posts/network/why-tcp-does-needs-three-way-handshake/ Nginx 快速安装优化指南 https://dbwu.tech/posts/nginx/install/ Tue, 23 Oct 2018 00:00:00 +0000 https://dbwu.tech/posts/nginx/install/ 磁盘结构和调度算法 https://dbwu.tech/posts/os/disk-scheduling-algorithm/ Fri, 09 Mar 2018 00:00:00 +0000 https://dbwu.tech/posts/os/disk-scheduling-algorithm/ HTTP 鲜为人知的细节 https://dbwu.tech/posts/network/http/ Fri, 16 Feb 2018 00:00:00 +0000 https://dbwu.tech/posts/network/http/ System Design Principles https://dbwu.tech/posts/system_design/principles/ Fri, 16 Feb 2018 00:00:00 +0000 https://dbwu.tech/posts/system_design/principles/ 网络基础: 内网穿透 是如何实现的 ? https://dbwu.tech/posts/network/how-nat-traversal-works/ Fri, 16 Feb 2018 00:00:00 +0000 https://dbwu.tech/posts/network/how-nat-traversal-works/ 网络基础: NAT 是如何工作的 ? https://dbwu.tech/posts/network/how-nat-works/ Sat, 10 Feb 2018 00:00:00 +0000 https://dbwu.tech/posts/network/how-nat-works/ 网络基础: 交换机和路由器的区别 https://dbwu.tech/posts/network/diff-between-switch-and-router/ Thu, 25 Jan 2018 00:00:00 +0000 https://dbwu.tech/posts/network/diff-between-switch-and-router/ 硬件延迟级别 https://dbwu.tech/posts/hardware/latency/ Tue, 16 Jan 2018 00:00:00 +0000 https://dbwu.tech/posts/hardware/latency/ TCP VS UDP 区别 https://dbwu.tech/posts/network/diff-between-tcp-and-udp/ Tue, 12 Dec 2017 00:00:00 +0000 https://dbwu.tech/posts/network/diff-between-tcp-and-udp/ 网络基础: IP 协议 (拾遗补缺) https://dbwu.tech/posts/network/ip/ Fri, 01 Dec 2017 00:00:00 +0000 https://dbwu.tech/posts/network/ip/ 网络基础: 网络层和路由器 (拾遗补缺) https://dbwu.tech/posts/network/router/ Tue, 21 Nov 2017 00:00:00 +0000 https://dbwu.tech/posts/network/router/ 网络基础: 什么是 DDoS ? https://dbwu.tech/posts/network/what-is-ddos/ Mon, 30 Oct 2017 00:00:00 +0000 https://dbwu.tech/posts/network/what-is-ddos/ 网络基础: ICMP 是如何工作的? https://dbwu.tech/posts/network/how-icmp-works/ Sat, 30 Sep 2017 00:00:00 +0000 https://dbwu.tech/posts/network/how-icmp-works/ 网络基础: ARP 是如何工作的? https://dbwu.tech/posts/network/how-arp-works/ Mon, 25 Sep 2017 00:00:00 +0000 https://dbwu.tech/posts/network/how-arp-works/ 网络基础: DHCP 是如何工作的? https://dbwu.tech/posts/network/how-dhcp-works/ Sat, 16 Sep 2017 00:00:00 +0000 https://dbwu.tech/posts/network/how-dhcp-works/ 网络基础: 公网/子网 地址是如何分类的? https://dbwu.tech/posts/network/subnet/ Sun, 10 Sep 2017 00:00:00 +0000 https://dbwu.tech/posts/network/subnet/ 网络基础: 交换机 (拾遗补缺) https://dbwu.tech/posts/network/switch/ Sun, 16 Jul 2017 00:00:00 +0000 https://dbwu.tech/posts/network/switch/ 网络基础: MTU 和 MSS https://dbwu.tech/posts/network/mtu-with-mss/ Wed, 01 Feb 2017 00:00:00 +0000 https://dbwu.tech/posts/network/mtu-with-mss/ netstat 命令常用操作 https://dbwu.tech/posts/linux/tools/netstat/ Thu, 26 Jan 2017 00:00:00 +0000 https://dbwu.tech/posts/linux/tools/netstat/ ping 命令常用操作 https://dbwu.tech/posts/linux/tools/ping/ Mon, 23 Jan 2017 00:00:00 +0000 https://dbwu.tech/posts/linux/tools/ping/ ifconfig 命令 https://dbwu.tech/posts/linux/tools/ifconfig/ Sun, 22 Jan 2017 00:00:00 +0000 https://dbwu.tech/posts/linux/tools/ifconfig/ nc 命令常用操作 https://dbwu.tech/posts/linux/tools/nc/ Wed, 18 Jan 2017 00:00:00 +0000 https://dbwu.tech/posts/linux/tools/nc/ DNS 命令行工具 https://dbwu.tech/posts/linux/tools/dns/ Sun, 15 Jan 2017 00:00:00 +0000 https://dbwu.tech/posts/linux/tools/dns/ 查看 IP 地址归属地 https://dbwu.tech/posts/linux/tools/show-ip/ Wed, 11 Jan 2017 00:00:00 +0000 https://dbwu.tech/posts/linux/tools/show-ip/ curl 命令常用操作 https://dbwu.tech/posts/linux/tools/curl/ Tue, 10 Jan 2017 00:00:00 +0000 https://dbwu.tech/posts/linux/tools/curl/ 网络基础: 杂七杂八 https://dbwu.tech/posts/network/summary/ Mon, 02 Jan 2017 00:00:00 +0000 https://dbwu.tech/posts/network/summary/ Linux 快捷键 https://dbwu.tech/posts/linux/shortcut_keys/ Tue, 09 Feb 2016 00:00:00 +0000 https://dbwu.tech/posts/linux/shortcut_keys/