- 博客(702)
- 资源 (24)
- 收藏
- 关注
原创 linux系列文章
linux文章汇总VIMbashMakefileubootu-boot编译过程分析linuxLinux系统编程Linux/UNIX网络编程
2019-11-09 22:07:43
1139
原创 linux开发常用工具集
工具集 – linuxMarkdown 编辑器 – TyporaGit版本管理软件 – SmartGitDiff 比较软件 – Meld Diff 差异查看器代码编辑器 – Source Insight代码查看 – Visual Studio Code抓包 – WireShark截图软件-- Shutter串口软件 – PUTTY桌面壁纸软件 – Wallch浏览器 – ...
2019-03-05 22:51:24
934
原创 Ubuntu 24.04 完整安装 zsh + Oh My Zsh + Powerlevel10k + 字体图标配置指南
字体没切换,回到第六步确认终端字体设置。安装过程中会询问是否设为默认,选。按需选择即可,随时可以重跑。装完后自动进入 zsh。不想用 Nerd Font。
2026-09-29 09:50:38
196
原创 深入理解kubernetes - 第五章 Kubernetes DNS
本实验深入探讨Kubernetes集群中DNS的工作原理,重点解析kubelet如何配置Pod的DNS(通过/etc/resolv.conf指向kube-dns),CoreDNS如何实现服务发现与名称解析。通过验证kube-dns服务及CoreDNS Pod状态、检查Corefile配置,明确了集群内域名(如nginx.svc.cluster.local)的解析机制,以及外部域名的转发策略。实验表明,DNS在实现动态服务发现、避免硬编码IP、保障服务间通信可靠性方面至关重要。
2026-09-26 16:42:33
196
原创 深入理解kubernetes - 第四章 Kubernetes Services - ClusterIP
Kubernetes Service为Pod提供稳定的虚拟IP和DNS名称,实现集群内L4负载均衡与服务发现。通过ClusterIP类型服务,kube-proxy基于iptables或IPVS将流量转发至后端Pod,支持跨节点通信且无需SNAT。实验验证了Service VIP(10.96.102.172)与EndpointSlice中Pod IP的一致性,确保客户端可通过稳定入口访问动态变化的Pod实例。
2026-09-25 21:47:27
274
原创 深入理解kubernetes - 第三章 Pod Routing Across Nodes 跨节点的Pod路由
Calico通过高效路由机制解决Kubernetes Pod通信挑战,支持节点内与跨节点通信。采用确定性主机路由和节点块分配,实现无SNAT的Pod身份保留、稳定路由及可观测性。结合ECMP均衡流量,提升性能并避免路由空洞。通过DaemonSet部署multitool测试服务,验证网络连通性,确保集群环境稳定可靠。
2026-09-24 22:34:51
239
原创 深入理解kubernetes - 第二章 Pod Networking
Kubernetes 中,Calico 通过 CNI 插件实现 Pod 网络配置:kubelet 调用 Calico CNI 分配 IP(如 192.168.131.130/32),创建 veth 接口并连接容器与主机网络,更新路由与数据存储。Pod 通过虚拟网关通信,实现跨节点互通。部署 multitool Pod 后,可通过 kubectl exec 验证其网络连通性与 IP 分配,确保集群内服务发现与通信正常。
2026-09-23 20:01:11
156
原创 深入理解kubernetes-第一章 calico IPAM
本文通过ContainerLab与Kind搭建Kubernetes实验环境,配置Calico IPAM实现Pod IP自动分配。利用自定义IP池(192.168.0.0/16,块大小/26),避免冲突并支持跨节点通信。通过deploy.sh自动化部署,结合Tigera Operator和自定义资源,完成Calico无CNI模式安装,验证了IPAM在动态集群中的高效性与可扩展性。
2026-09-23 15:43:49
237
原创 k8s中nginx worker process自动设置
在Kubernetes中,Nginx容器的worker_processes auto会读取宿主机CPU核心数,而非Pod的CPU Limit,导致资源分配不匹配。即使Pod限制为200m CPU,Nginx仍可能启动多个worker,因时间片过小影响性能。解决方案是通过环境变量或启动脚本动态设置worker_processes为实际可用核数(如基于cgroup限制),实现资源合理利用。
2026-09-21 20:39:33
288
原创 深入理解go语言-第8章 质量保障
本文介绍了Go语言内置的质量保障体系,重点阐述了单元测试和基准测试的设计哲学与实现方式。Go的测试框架遵循"约定优于配置"原则,通过_test.go文件、Test/Benchmark前缀函数和testing包实现统一测试标准。文章展示了表格驱动测试、子测试、并行测试等最佳实践,并通过基准测试对比不同实现方式的性能差异。Go的内置测试工具链提供了覆盖率分析、竞态检测等一站式功能,体现了"少即是多"的设计哲学,使质量保障成为开发生命周期的自然组成部分。
2026-07-31 15:15:42
279
原创 深入理解go语言-第7章 标准库深入
本文深入探讨了Go语言标准库中的I/O操作、文件处理和缓冲I/O三个核心模块。主要内容包括: I/O设计哲学:Go采用"组合优于继承"的设计理念,基于简单的Reader/Writer接口构建了整个I/O生态,通过接口组合和装饰器模式实现高度灵活性。 io包核心功能: 通过UpperReader示例展示了自定义Reader实现 演示了io.Copy、io.LimitReader等实用函数 使用io.Pipe实现内存中的同步管道通信 os包文件操作: 文件创建、读写基本操作 文件指针定位与内容读取 批量读写文件
2026-07-31 14:51:05
259
原创 深入理解go语言-第6章 接口与面向组合设计
文章摘要 Go语言通过独特的接口设计实现了"组合优于继承"的编程哲学。其接口系统主要特点包括: 隐式实现:类型无需显式声明实现接口,只要包含接口所有方法即自动满足,实现接口与实现的解耦 Duck Typing:"像鸭子一样走路和叫的就是鸭子"的设计理念,强调行为而非类型 接口值双层结构:包含动态类型和动态值,需注意nil指针赋给接口后的非nil判断 空接口与类型断言:interface{}或any可接收任意类型,配合类型断言实现运行时类型检查 接口组合:遵循小接口原则,通过组合多个小接口构建复杂功能 这种设
2026-07-31 14:48:17
312
原创 深入理解go语言-第5章 并发编程——Go的灵魂
本文摘要: Go语言并发编程的核心是goroutine和Channel,遵循CSP模型"通过通信共享内存"的理念。goroutine是轻量级执行单元,初始栈仅2KB可动态扩缩,创建成本仅0.3μs,通过M:N调度模型高效利用多核。文章对比了并发与并行的本质区别,强调并发是程序结构属性,并行是硬件执行属性。通过代码示例展示了goroutine创建、WaitGroup同步、栈动态扩容以及避免泄漏的最佳实践。Go的并发模型在用户态实现高效调度,既保持轻量级特性,又能充分利用多核并行能力。
2026-07-31 14:22:56
454
原创 深入理解go语言- 第4章流程控制与接口
本文介绍了Go语言中的流程控制结构和接口设计。主要内容包括: 控制结构: if语句:支持基本条件判断、if-else链以及带初始化语句的if结构 switch语句:提供多值匹配、无条件switch、类型判断和fallthrough穿透功能 for循环:涵盖经典for、while式、无限循环和for-range四种形式 重点剖析: 详细讲解了for-range的底层实现原理,包括对切片、map和channel的遍历机制 揭示了for-range常见陷阱及解决方案 说明Go 1.22对循环变量语义的重要变更 设
2026-07-29 23:48:11
271
原创 深入理解go语言- 第3章 基础语法与数据类型
本文摘要: 本文详细介绍了Go语言的基础语法与数据类型,重点解析变量与常量的声明和使用。主要内容包括: Go语言的4种变量声明方式,强调静态类型语言与动态语言在变量声明上的本质差异,以及零值机制的设计哲学。 短变量声明的特点与注意事项,包括作用域限制、多变量赋值规则等。 常量声明方法,展示iota枚举器的基本用法和高级应用(如位标志模式、存储单位计算)。 无类型常量与类型常量的区别,说明Go中唯一的隐式转换场景。 文章通过大量代码示例,展示了Go语言在类型系统设计上的严谨性和实用性,特别是编译期安全检查、零
2026-07-29 23:25:05
294
原创 深入理解go语言- 第2章 程序结构与项目管理
本文介绍了Go语言程序的基本结构和项目管理要点。主要内容包括: 程序基本结构:Go程序由包组成,main包为入口,详细说明了文件组成顺序(包声明→导入→常量→变量→类型→函数)。 包管理机制:讲解包声明规则、import的多种用法(标准导入、别名导入、点导入和空白导入),以及通过首字母大小写控制可见性的设计哲学。 初始化流程:介绍特殊的init函数执行规则和初始化顺序,比较了Go与OOP语言在初始化设计上的差异。 内部包管理:演示了internal目录的特殊作用,限制包的可访问范围。 文章包含多个代码示例,
2026-07-29 22:57:49
266
原创 深入理解go语言- 第1章 语言概览与哲学
文章摘要: Go语言诞生于2007年,由Google工程师Rob Pike、Ken Thompson和Robert Griesemer设计,旨在解决大型C++项目开发中的编译慢、依赖混乱和并发困难等问题。Go融合了C语言的语法风格、Oberon的包机制和CSP的并发模型,专注于简单性、显式表达、组合、并发和工程实用性。其设计哲学强调"少即是多",省略了继承、异常等复杂特性,采用组合和错误返回值等更简单直接的方案。Go凭借静态编译、高效并发和跨平台能力,成为云原生基础设施(如Docker、Kubernetes
2026-07-26 22:56:22
564
原创 Traefik 中 EntryPoint 和Router 以及Service 三者之间的关系
本文介绍了反向代理中三个核心组件的协作关系:EntryPoint(入口点)、Router(路由器)和Service(服务)。EntryPoint负责监听端口并接收网络请求,类似小区大门;Router根据请求特征(如域名、路径等)决定由哪个服务处理,类似前台接待;Service则负责将请求转发到具体后端服务器,并实现负载均衡。三者形成"EntryPoint→Router→Service"的严格处理链,支持一对多的层级关系。文中通过电商系统示例和Docker配置展示了实际应用场景,并解释了代码层面的实现逻辑,最
2026-07-26 15:06:51
209
原创 《从零实现cobra》手写一个 mini 版 Cobra
文章摘要: 本文剖析了命令行工具库 Cobra 的核心实现原理,作者通过200行Go代码实现了一个简化版命令框架。核心结构体 Command 包含名称、描述、执行函数和子命令列表,形成命令树结构。递归派发逻辑 execute 负责解析参数并路由到对应命令,处理包括帮助请求、参数校验等场景。虽然省略了Cobra的flag解析等高级功能,但清晰展示了"命令树+递归派发"的核心机制。这种实现方式解释了 git commit --amend 等复杂命令背后的路由原理,为理解主流CLI库的工作机制提供了简洁的参考模型
2026-07-19 23:17:50
276
原创 常用寄存器总结
本文介绍了80386处理器的寄存器组成及其功能,主要分为通用寄存器、指令指针和标志寄存器、段寄存器、系统地址寄存器等类别。重点讨论了通用寄存器(EAX、EBX等)在函数调用和系统调用中的参数传递规则,指令指针寄存器EIP和标志寄存器EFLAGS的作用,以及段寄存器(CS、DS等)如何通过段选择子索引描述符表。此外,还简要说明了系统地址寄存器(GDTR、IDTR等)在地址转换和保护机制中的关键作用,包括全局描述符表、中断描述符表等系统结构的定位方式。这些寄存器共同构成了80386处理器的基础架构,支持其保护模
2026-06-01 22:54:28
89
原创 What is Virtual Memory?
摘要: 虚拟内存是一种利用二级存储扩展主存容量的技术,通过分页和分段机制实现。当物理内存不足时,操作系统将不活跃的页面暂存到硬盘的交换文件中,利用虚拟内存管理器(VMM)动态调度进程。主要技术包括按需分页(仅加载被引用的页面)和页面置换算法(如FIFO、OPT、LRU)。优点包括支持大进程和多任务,但可能因频繁硬盘访问降低性能。典型应用场景为物理内存不足时,通过置换最近未使用的页面为新页面腾出空间,平衡内存使用效率。
2026-06-01 22:49:59
97
原创 useful tools to detect memory leaks with examples
Detecting Memory Leaks in Linux This tutorial explores tools and methods to identify memory leaks in Linux processes like Apache (httpd) or Java, which can lead to out-of-memory (OOM) errors. Memory leaks occur when allocated memory is not freed after use,
2026-06-01 22:43:13
92
原创 Go 设计模式实战:一文看懂抽象工厂(Abstract Factory)
文章摘要: 抽象工厂模式用于创建一组相关对象(产品族),确保对象之间的一致性。通过定义抽象工厂和产品接口,实现不同业务场景(如酒店、机票)的具体工厂和产品。Go语言中利用interface+struct实现该模式,客户端只需依赖抽象接口,无需关心具体实现。优势包括保证产品一致性、符合开闭原则、降低耦合度,适用于多组相关产品且需要强一致性的场景(如订单系统、UI主题等)。新增业务只需扩展新工厂,无需修改现有代码。
2026-05-30 18:27:19
267
原创 Docker 多阶段构建:优化 Go 应用镜像大小的最佳实践
本文介绍了使用Docker多阶段构建技术优化Go应用镜像的方法。通过分离构建环境和运行环境,将传统800MB+的镜像缩减至20-30MB,体积减少95%以上。具体实现包括:第一阶段使用golang-alpine镜像编译静态二进制文件;第二阶段基于极简Alpine镜像运行,仅包含必要组件。这种方案显著提升了部署效率,降低了存储成本和安全风险。文章以Gin框架Web服务为例,展示了如何通过多阶段构建实现更小的镜像体积、更高的安全性和更快的部署速度,为Go开发者提供了容器化部署的最佳实践参考。
2026-05-20 22:48:30
501
原创 从 Atomic 到 Futex:深入解析并发同步的三重境界
原子操作是硬件层面提供的最小同步机制,通过CPU指令直接保证内存操作的不可分割性。现代CPU通过缓存一致性协议(如MESI/MOESI)实现原子性,相比锁总线更高效。不同架构(x86/ARM)实现方式不同,但都提供内存顺序保证。原子操作性能优于锁,但仅适用于简单数据类型。自旋锁基于原子操作构建,Ticket Lock通过票据机制解决公平性问题,但存在缓存行颠簸的性能瓶颈。这些底层同步机制为构建更高级并发控制提供了基础。
2026-05-17 19:52:17
454
原创 Go语言并发编程中的死锁防范与破解之道
Go语言并发编程中的死锁防范与破解之道 摘要:本文深入探讨Go语言并发编程中的死锁问题及其解决方案。首先分析了死锁发生的四个必要条件(互斥、请求与保持、不可剥夺、循环等待),指出破解死锁的关键在于打破其中至少一个条件。重点介绍了"锁定顺序"这一高效防死锁策略,通过强制所有goroutine按照统一顺序获取资源,从根本上消除循环等待的可能性。文章通过银行转账案例展示了锁定顺序的具体实现方式,包括静态预定义顺序和动态退让重试两种范式。虽然锁定顺序可能带来一定性能开销,但它是最有效的预防性策略,能从根本上杜绝死锁
2026-05-17 18:58:54
477
原创 Concurrency patterns - Go 并发模式
文章摘要: 本文探讨了Go语言的并发编程哲学与实践。第一部分从经典的"Hello, goroutine"示例入手,阐述了goroutine作为轻量级执行单元的特性(初始栈仅2KB),以及Go"通过通信共享内存"的核心理念。通过channel实现的数据所有权转移机制,相比传统共享内存方式更安全高效。第二部分分析了CSP模型的适用边界,指出在性能敏感的简单状态保护、复杂内部状态管理等场景下,sync.Mutex等传统同步原语可能比channel更合适。文章强调现代Go并发应是channel与mutex的分层协作
2026-05-17 17:06:39
518
原创 Channel 编程实战:从底层原理到踩坑心法
无论你是学习go的还是学习ts,欢迎加入wedm开发团队 : https://github.com/andrewbytecoder/wedm别急,先喝口水。我承认,关于 的文章,怕是比 Go 项目里飘着的 还多。那为啥我还非得凑这个热闹,再写一篇呢?这就得从咱们 Go 官方那句著名(也快被说烂了)的格言说起:“不要通过共享内存来通信,而应通过通信来共享内存” (Do not communicate by sharing memory; instead, share memory by communic
2026-05-17 15:52:13
516
原创 Selecting channels:Go 并发里的“多路开关”
Go语言中的select语句是专为通道设计的并发控制结构,其核心功能是监控多个通道的状态并执行就绪的操作。与switch不同,select会随机选择一个可立即执行的case,避免通道饥饿。常见用法包括:多通道读取(随机选择就绪通道)、非阻塞操作(通过default)、超时控制(结合time.After)以及退出通知(使用done通道)。需注意处理已关闭通道(设为nil可禁用该case)。select体现了Go"通过通信共享内存"的并发哲学,能清晰构建非阻塞、可取消的并发逻辑,是Go并发编程的关键工具。
2026-05-16 23:04:10
461
原创 go语言使用消息传递进行通信
本文介绍了Go语言中通过通道实现goroutine间消息传递的机制。主要内容包括: 通道的基本使用:通过make创建通道,使用<-操作符发送/接收消息,默认同步通信会阻塞发送方或接收方。 通道阻塞问题:当没有对应的接收方时,发送方会阻塞;反之接收方也会阻塞等待消息,可能导致死锁。 缓冲通道:通过指定缓冲区容量,允许消息暂存,发送方在缓冲区未满时不会阻塞,缓解接收方处理速度慢的问题。 实际示例:展示了缓冲通道的工作方式,包括缓冲区填满后的阻塞行为,以及消息按顺序处理的特点。 文章通过图示和代码示例,清晰展示了
2026-05-16 12:05:22
533
原创 WEDM:用go语言重新定义ETCD管理体验的跨平台桌面神器
摘要:WEDM是一款基于Wails+Vue3+Go开发的现代化ETCD桌面管理工具,提供可视化界面替代传统命令行操作。核心功能包括键值树形管理、租约管理、用户权限控制、集群监控等,支持多平台运行。相比etcdctl,WEDM具有更直观的交互界面、实时数据刷新、批量操作等优势,大幅提升ETCD管理效率。该项目完全开源免费,欢迎访问GitHub仓库获取更多信息和使用体验。
2026-05-15 23:40:15
676
原创 go语言中使用等待组(waitgroups)和内存屏障(barriers)进行同步
Go语言中的等待组和屏障是两种重要的同步机制。等待组(sync.WaitGroup)用于协调多个并发任务的完成,通过Add()增加计数、Done()减少计数、Wait()阻塞等待来实现。文章详细介绍了等待组的工作原理,并展示了如何使用信号量自行实现等待组功能,包括文件搜索等实际应用场景。同时指出了自行实现的局限性,如无法动态调整大小、仅支持单协程等待等问题。最后提出可以利用条件变量来实现更完善的等待组功能,使其更接近Go内置WaitGroup的行为。这些同步机制为处理复杂的并发任务提供了基础支持。
2026-05-10 17:22:42
455
原创 go 语言条件变量和信号量
本文介绍了Go语言中条件变量的使用场景及实现方式。条件变量与互斥锁配合使用,可以解决并发编程中的同步问题。通过银行账户示例,展示了当消费速度超过存款速度时,如何利用条件变量避免账户余额为负:当余额不足时,消费协程通过Wait()暂停执行,存款协程在增加余额后通过Signal()唤醒消费协程。相比简单的休眠方案,条件变量能更高效地实现协程间的同步。文章详细说明了条件变量的工作原理,包括Wait()的原子性操作和Signal()的唤醒机制,并提供了Go语言中sync.Cond的具体实现代码示例。
2026-05-08 22:35:52
580
1
原创 看图学k8s
本项目的目标是为 Windows、Linux 和 macOS 提供一个高效、现代化的桌面应用程序,覆盖 ETCD 的所有功能。凡是你能够使用 etcdctl 完成的操作,都应该能够通过本工具轻松实现。WEDM 是一个免费、跨平台的 ETCD v3 客户端和图形界面工具,基于 Wails v2、Go 和 Vue 3 构建。
2026-05-05 23:32:40
255
原创 go语言使用互斥锁进行同步
摘要:本文介绍了互斥锁在并发编程中的应用,重点阐述了如何利用互斥锁保护临界区以避免竞争条件。文章通过Go语言示例展示了互斥锁的基本使用方法,包括sync.Mutex的Lock()和Unlock()操作,并指出过度使用互斥锁会导致程序性能下降。特别强调了读写互斥锁(sync.RWMutex)在提升读多写少场景下的性能优势,允许并发读取但互斥写入。最后通过HTTP请求统计字母频率的案例,演示了合理缩小锁范围对提升并发性能的重要性,建议开发者精确界定临界区范围以优化程序效率。(150字)
2026-05-02 22:40:20
505
原创 go语言中利用共享内存进行线程间通信
文章摘要: 本文深入探讨了多线程协作中的通信机制,重点分析了共享内存与消息传递两种方式。在共享内存模型中,详细阐述了单处理器与多处理器系统下的缓存一致性协议及其实现策略,通过图示展示了线程间通过缓存同步数据的过程。以Go语言为例,演示了协程间共享变量的实现方式,包括逃逸分析机制如何决定变量存储位置(栈或堆)。通过倒计时器和网页字母统计两个具体案例,对比了顺序执行与并发版本的实现差异,揭示了编译器优化与并行执行之间的权衡关系。文章还指出随着处理器核心数量增长,缓存一致性可能成为性能瓶颈的技术挑战。
2026-05-01 21:07:52
552
原创 go语言并发编程
操作系统作为系统资源的管理者,通过进程和线程两种抽象机制实现并发处理。进程提供隔离的执行环境但资源消耗大,线程作为轻量级替代方案共享内存空间更高效。文章详细阐述了进程创建(fork/exec)和线程并发的工作原理,并通过UNIX管道命令示例展示了多进程协作的典型应用场景。同时分析了上下文切换开销和写时复制等优化技术,指出线程共享内存的特点使其成为并发编程的主流选择。
2026-04-28 21:02:07
468
原创 go语言中类型别名和定义类型之间的区别
Go语言中类型别名(type A = B)与类型定义(type A B)有本质区别:类型别名只是原类型的另一个名称,完全等价且共享方法集;类型定义则创建全新类型,需要显式转换且不继承原类型方法。类型别名适用于代码重构和简化复杂类型,类型定义则用于增强类型安全和扩展功能。Go 1.24还支持泛型类型别名。选择依据:需要无缝兼容用别名,需要类型安全或添加方法用定义。
2026-04-22 22:53:33
312
1
goGo语言分布式系统构建与云原生架构实战:从语言基础到生产部署的全栈技术体系
2026-07-25
Sqlite3.pdf
2019-06-30
strtok的赞歌.pdf
2020-04-19
GDB就该这样用
2019-05-04
C++基础课程讲义.pdf
2020-09-26
Getting Started with LevelDB-Andy Dent
2023-08-15
Technical Overview of LoRa and LoRaWAN-TÜV Rheinland
2023-08-15
The Robert C. Martin Clean Code Collection - Martin, Robert C-.m
2023-08-15
Alice and Bob: A History Of The World’s Most Famous Couple
2023-08-07
IPC进程间通信
2019-05-03
在ubuntu上配置ftp服务器的说明文档,亲测可用(图片)
2018-08-26
福昕阅读器--linux最新版
2020-11-14
配置samba服务器的配置文件备份
2018-08-25
最新GeoLite2资源整合.zip
2020-10-03
dbeaver-ce_7.2.4_amd64最新版本|dbeaver-ce_7.2.4_amd64.deb
2020-11-14
自己参考网上的资源配置的vim编译器配置文件
2018-08-25
bsearch.zip
2020-04-18
RFC2616中文翻译-有待改进.odg
2020-01-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅