<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[LK-T.O.P的博客]]></title><description><![CDATA[Learning makes me happy!!!]]></description><link>https://blog.youkuaiyun.com/sinat_20791575</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; sinat_20791575]]></copyright><item><title><![CDATA[Falco vs. Tetragon：云原生运行时安全选型指南]]></title><link>https://blog.youkuaiyun.com/sinat_20791575/article/details/168140595</link><guid>https://blog.youkuaiyun.com/sinat_20791575/article/details/168140595</guid><author>sinat_20791575</author><pubDate>Fri, 16 Oct 2026 17:14:31 +0800</pubDate><description><![CDATA[Falco与Tetragon是云原生运行时安全的两大主流工具：Falco基于规则引擎，开箱即用、生态丰富，适合以检测告警为核心的团队；Tetragon依托eBPF，提供内核级可观测与原生阻断能力，性能优越，适用于深度集成Cilium、需精细控制的场景。选型关键在于匹配团队的安全成熟度、技术栈与运营能力——前者重“看得见”，后者重“拦得住”。建议分阶段落地，从观测起步，逐步构建闭环响应体系，最终实现DevSecOps全流程安全。]]></description><category></category></item><item><title><![CDATA[GitLeaks]]></title><link>https://blog.youkuaiyun.com/sinat_20791575/article/details/166248564</link><guid>https://blog.youkuaiyun.com/sinat_20791575/article/details/166248564</guid><author>sinat_20791575</author><pubDate>Mon, 21 Sep 2026 15:56:49 +0800</pubDate><description><![CDATA[Gitleaks 是一款基于 Go 语言的开源敏感信息检测工具，通过正则匹配、信息熵分析与上下文识别三重机制，精准检测 Git 仓库中的 API 密钥、密钥、令牌等敏感数据。支持本地/远程仓库扫描、CI/CD 集成、Pre-commit 钩子及 GitHub Action，可输出 JSON、SARIF 等多种格式报告。提供自定义规则与允许列表，适配多平台，助力实现“左移安全”。]]></description><category></category></item><item><title><![CDATA[Common Go Mistakes（V 函数和方法）]]></title><link>https://blog.youkuaiyun.com/sinat_20791575/article/details/155576488</link><guid>https://blog.youkuaiyun.com/sinat_20791575/article/details/155576488</guid><author>sinat_20791575</author><pubDate>Tue, 16 Dec 2025 23:00:00 +0800</pubDate><description><![CDATA[参考 100go接收器类型包含了值接收器（Value Receiver）和指针接收器（Pointer Receiver），这会影响方法的行为和性能。方法接收器类型决定了该方法操作的是数据本身的副本还是内存地址。如何选择接收器类型？命名返回参数是 Go 语言的一个特性，允许在函数签名中为返回值命名。这些命名参数会被初始化为其类型的零值，并可以在函数体内像普通变量一样使用。这是一个强大的特性，但很多开发者从不使用它，或者误用它。何时应该使用命名返回参数

作为文档，特别是在接口定义中


何时不应该使用命名返回]]></description><category></category></item><item><title><![CDATA[Kafka如何实现高性能IO？]]></title><link>https://blog.youkuaiyun.com/sinat_20791575/article/details/155537363</link><guid>https://blog.youkuaiyun.com/sinat_20791575/article/details/155537363</guid><author>sinat_20791575</author><pubDate>Thu, 04 Dec 2025 10:11:14 +0800</pubDate><description><![CDATA[强制顺序读写，规避机械硬盘的物理劣势。借力Page Cache减少 IO 并提升读性能。使用Zero Copy，解放 CPU。全链路Batching，以吞吐量换低延迟。]]></description><category></category></item><item><title><![CDATA[Common Go Mistakes（IV 字符串）]]></title><link>https://blog.youkuaiyun.com/sinat_20791575/article/details/155200923</link><guid>https://blog.youkuaiyun.com/sinat_20791575/article/details/155200923</guid><author>sinat_20791575</author><pubDate>Tue, 02 Dec 2025 19:30:00 +0800</pubDate><description><![CDATA[许多开发者在处理 I/O 时，会不断地在 string 和 []byte 之间来回转换。在 Go 语言中，不应该使用基于索引的传统 for 循环来遍历字符串，因为这样遍历的是“字节”而不是“字符”。连接字符串都会创建一个新的字符串对象。因此，频繁的字符串连接可能会导致内存分配和复制开销。包相似的操作，可以帮助避免 []byte/string 之间的转换。Go 语言中的字符串是不可变的（immutable），每次使用。系列函数移除的是字符集，而不是字符串前缀/后缀。，而不是创建新的副本。]]></description><category></category></item><item><title><![CDATA[Common Go Mistakes（Ⅲ 控制结构）]]></title><link>https://blog.youkuaiyun.com/sinat_20791575/article/details/154351093</link><guid>https://blog.youkuaiyun.com/sinat_20791575/article/details/154351093</guid><author>sinat_20791575</author><pubDate>Thu, 13 Nov 2025 16:22:50 +0800</pubDate><description><![CDATA[Go语言常见循环错误及解决方案：1. range循环变量是值拷贝而非引用，修改需通过索引或指针切片；2. range表达式仅循环前求值一次，数组遍历副本不受修改影响，切片和映射受影响；3. Go 1.22+已修复循环变量指针问题；4. 映射遍历无序且修改结果不确定；5. 不带标签的break仅中断最内层循环；6. 循环中使用defer会导致资源延迟释放，应封装函数处理。需注意值拷贝特性及控制结构的具体行为差异。]]></description><category></category></item><item><title><![CDATA[如何处理消费过程中的重复消息]]></title><link>https://blog.youkuaiyun.com/sinat_20791575/article/details/154194434</link><guid>https://blog.youkuaiyun.com/sinat_20791575/article/details/154194434</guid><author>sinat_20791575</author><pubDate>Fri, 31 Oct 2025 22:00:00 +0800</pubDate><description><![CDATA[消息队列中重复消息会导致数据错误，主要源于发送方重试或消费者ACK失败。解决关键是实现消费操作的幂等性，常见方法包括：1）唯一消息ID+去重表，通过Redis或DB检查记录是否已处理；2）数据库乐观锁，使用版本号机制确保数据一致性。这些方法能保证多次处理同一消息产生相同结果，避免数据异常。]]></description><category></category></item><item><title><![CDATA[Common Go Mistakes（Ⅱ 数据类型）]]></title><link>https://blog.youkuaiyun.com/sinat_20791575/article/details/152130581</link><guid>https://blog.youkuaiyun.com/sinat_20791575/article/details/152130581</guid><author>sinat_20791575</author><pubDate>Wed, 29 Oct 2025 20:00:00 +0800</pubDate><description><![CDATA[本文总结了Go语言中常见的数据类型使用错误，重点分析了切片和整型的典型问题。在整型方面，指出了八进制表示法的混淆风险、整型溢出的检测方法；在切片方面，详细讲解了长度与容量的区别、初始化优化、nil与空切片的差异、正确的拷贝方式以及append操作可能带来的副作用。特别强调了切片操作导致的内存泄漏问题，并提供了解决方案。这些总结对于编写高效、安全的Go代码具有重要指导意义。]]></description><category></category></item><item><title><![CDATA[消息队列如何确保消息不会丢失]]></title><link>https://blog.youkuaiyun.com/sinat_20791575/article/details/153787214</link><guid>https://blog.youkuaiyun.com/sinat_20791575/article/details/153787214</guid><author>sinat_20791575</author><pubDate>Mon, 27 Oct 2025 20:00:00 +0800</pubDate><description><![CDATA[对于单个节点的 Broker，需要配置 Broker 参数，在收到消息后，将消息写入磁盘后再给 Producer 返回确认响应，这样即使发生宕机，由于消息已经被写入磁盘，就不会丢失消息，恢复后还可以继续消费。在生产阶段，消息队列通过最常用的请求确认机制，来保证消息的可靠传递：生产者发送消息给 Broker，Broker 收到消息后，会给客户端返回一个确认响应，表明消息已经收到了。在编写发送消息代码时，需要注意，正确处理返回值或者捕获异常，就可以保证这个阶段的消息不会丢失。实现这一目标需要一个涵盖。]]></description><category></category></item><item><title><![CDATA[事务消息（Transactional Message）]]></title><link>https://blog.youkuaiyun.com/sinat_20791575/article/details/153270850</link><guid>https://blog.youkuaiyun.com/sinat_20791575/article/details/153270850</guid><author>sinat_20791575</author><pubDate>Tue, 14 Oct 2025 23:00:00 +0800</pubDate><description><![CDATA[事务消息是解决数据最终一致性的柔性事务方案中最常用且优雅的方式之一。它牺牲了严格的实时性（最终一致性）来换取更高的系统性能、可用性和吞吐量，特别适用于电商、金融等对数据一致性要求高的场景。]]></description><category></category></item><item><title><![CDATA[Common Go Mistakes]]></title><link>https://blog.youkuaiyun.com/sinat_20791575/article/details/152087124</link><guid>https://blog.youkuaiyun.com/sinat_20791575/article/details/152087124</guid><author>sinat_20791575</author><pubDate>Thu, 25 Sep 2025 16:48:57 +0800</pubDate><description><![CDATA[参考。]]></description><category></category></item><item><title><![CDATA[Common Go Mistakes（Ⅰ 代码与项目组织）]]></title><link>https://blog.youkuaiyun.com/sinat_20791575/article/details/150859837</link><guid>https://blog.youkuaiyun.com/sinat_20791575/article/details/150859837</guid><author>sinat_20791575</author><pubDate>Thu, 25 Sep 2025 16:35:20 +0800</pubDate><description><![CDATA[所有导出的元素都要被文档化，通常的做法是增加一行注释，以被导出元素的名称打头，以句号‘.’结尾，并且应当说明函数的作用和意图，而不是函数如何实现（这应该放到函数内部）。它不是一个单一的工具，而是一系列 Linter 的集合，可以用它精确地控制需要启用或禁用的 Linter，以及自定义规则。Linters 是一种代码审查工具，它会分析源代码，找出编译器可能忽略的常见错误、不规范的风格以及不符合最佳实践的代码。中提取key，可以有多种做法，最简单的做法就是编写2个函数，其次，可以使用如下接口的方式。]]></description><category></category></item><item><title><![CDATA[EKS Mountpoint for Amazon S3 CSI Driver]]></title><link>https://blog.youkuaiyun.com/sinat_20791575/article/details/148872697</link><guid>https://blog.youkuaiyun.com/sinat_20791575/article/details/148872697</guid><author>sinat_20791575</author><pubDate>Tue, 24 Jun 2025 20:30:00 +0800</pubDate><description><![CDATA[本文介绍在Amazon EKS集群上部署Mountpoint for Amazon S3 CSI Driver的方法，使Kubernetes应用可通过文件系统接口访问S3存储。主要内容包括环境要求（EKS集群、IAM配置等）、实施步骤（创建IAM角色与服务账户、安装CSI驱动）以及实践示例（静态配置PV/PVC挂载S3存储桶）。文章还指出了该方案的限制，如不支持某些POSIX文件操作。通过该方案，容器可直接以卷挂载方式访问S3对象存储，实现高效的数据访问。部署完成后可验证文件操作是否正常同步到S3存储桶。]]></description><category></category></item><item><title><![CDATA[选项模式(Options Pattern)]]></title><link>https://blog.youkuaiyun.com/sinat_20791575/article/details/146186006</link><guid>https://blog.youkuaiyun.com/sinat_20791575/article/details/146186006</guid><author>sinat_20791575</author><pubDate>Tue, 11 Mar 2025 23:00:00 +0800</pubDate><description><![CDATA[在Python语言中，创建一个对象时，可以给参数设置默认值，这样在不传入任何参数时，可以返回携带默认值的对象，并在需要时修改对象的属性。在Go语言中，我们经常会遇到一个结构体中有很多字段，我们只想设置其中的一部分字段，其他字段都使用默认值的情况，这时可以通过选项模式来解决。选项模式是指定义一个函数，这个函数的参数是一个结构体指针，这个结构体中包含了所有可选参数，函数根据参数的需求来设置结构体的字段值。第一种方法，我们要分别开发两个用来创建实例的函数，一个可以创建带默认值的实例，一个可以定制化创建实例。]]></description><category></category></item><item><title><![CDATA[Nextflow 可选输入文件]]></title><link>https://blog.youkuaiyun.com/sinat_20791575/article/details/140324918</link><guid>https://blog.youkuaiyun.com/sinat_20791575/article/details/140324918</guid><author>sinat_20791575</author><pubDate>Wed, 10 Jul 2024 20:00:00 +0800</pubDate><description><![CDATA[可以使用特殊的文件名来标记这类输入参数，类似于一个 placeholder。有时候存在需要 process 接收可选的输入文件的场景。控制是否真正的使用输入文件。这样就可以在运行时指定参数。]]></description><category></category></item><item><title><![CDATA[python 循环导入(circular imports)解决方法]]></title><link>https://blog.youkuaiyun.com/sinat_20791575/article/details/139657557</link><guid>https://blog.youkuaiyun.com/sinat_20791575/article/details/139657557</guid><author>sinat_20791575</author><pubDate>Thu, 13 Jun 2024 23:00:00 +0800</pubDate><description><![CDATA[正如在开头提到的，修复循环导入的最佳方法是对代码结构进行优化，这样模块就不会相互依赖。模块，这样是可以正常导入的，因为这两个模块都存在。就像上面提到的那样，它们此刻是空的，但是现在我们没有导入某个具体的函数名称。与函数调用一样，当 import 语句运行时，它开始执行导入的文件，直到导入完成后才返回当前文件。模块就都会包含了他们的内部的函数名称，我们可以使用模块名来引用其中的函数了。将函数名称查找延迟到函数体内，可以让所有模块完全初始化，避免循环导入的错误。模块已经存在，但是还没有定义。]]></description><category></category></item><item><title><![CDATA[vim常用快捷键]]></title><link>https://blog.youkuaiyun.com/sinat_20791575/article/details/138081016</link><guid>https://blog.youkuaiyun.com/sinat_20791575/article/details/138081016</guid><author>sinat_20791575</author><pubDate>Mon, 22 Apr 2024 21:00:00 +0800</pubDate><description><![CDATA[vim 快捷键]]></description><category></category></item><item><title><![CDATA[为容器添加非root用户]]></title><link>https://blog.youkuaiyun.com/sinat_20791575/article/details/131816193</link><guid>https://blog.youkuaiyun.com/sinat_20791575/article/details/131816193</guid><author>sinat_20791575</author><pubDate>Thu, 20 Jul 2023 00:00:00 +0800</pubDate><description><![CDATA[大多数的Docker镜像都使用root作为默认用户，但是有些场景下我们需要使用非root在容器里面。]]></description><category></category></item><item><title><![CDATA[Python detach 进程]]></title><link>https://blog.youkuaiyun.com/sinat_20791575/article/details/131741930</link><guid>https://blog.youkuaiyun.com/sinat_20791575/article/details/131741930</guid><author>sinat_20791575</author><pubDate>Sat, 15 Jul 2023 22:00:00 +0800</pubDate><description><![CDATA[有一个调度程序会周期性的读取任务来调度，并且这些任务的执行时间比较长，我们想要在调度程序退出或Ctrl+c中断时不要影响其启动的任务。]]></description><category></category></item><item><title><![CDATA[Ubuntu – apt-get update fails “The repository no longer has a Release file”]]></title><link>https://blog.youkuaiyun.com/sinat_20791575/article/details/128954501</link><guid>https://blog.youkuaiyun.com/sinat_20791575/article/details/128954501</guid><author>sinat_20791575</author><pubDate>Thu, 09 Feb 2023 20:15:00 +0800</pubDate><description><![CDATA[Ubuntu – apt-get update fails “The repository no longer has a Release file”]]></description><category></category></item></channel></rss>