- 博客(342)
- 资源 (12)
- 收藏
- 关注
原创 K8S的服务注册
本文主要用来介绍K8S的服务注册和发现,算是笔者对这部分知识的一个学习笔记。一、服务注册每个 Kubernetes 服务都会自动注册到集群 DNS 之中。注册过程大致如下:1.Servic...
2021-08-28 18:42:52
3104
1
原创 Envoy 中 UDP 网络通信实现分析
Envoy 的 UDP 实现通过抽象和优化,使得 UDP 通信在 Envoy 中变得可管理和高性能。UDP 是一种无连接、不可靠的传输协议,但在某些场景下(如实时音视频、DNS 查询等)具有重要的应用价值。Envoy 作为高性能的云原生代理,也提供了对 UDP 协议的支持。Envoy 的 UDP 实现展示了如何在保持 UDP 优势的同时,提供企业级的可靠性和可管理性,为云原生环境中的 UDP 应用提供了强大的基础设施支持。Envoy 中的 UDP 通信实现提供了高性能、可扩展的 UDP 数据包处理能力。
2026-04-12 22:42:57
496
原创 Envoy 多线程架构处理逻辑分析
一旦连接被监听器接受,该连接的整个生命周期将绑定到单个工作线程,这使得 Envoy 的大部分代码是单线程的(令人尴尬的并行),只有少量复杂代码负责处理工作线程之间的协调。通过将连接生命周期绑定到单个工作线程,Envoy 避免了复杂的线程同步问题,并实现了令人尴尬的并行。Envoy 被设计为 100% 无阻塞的,对于大多数工作负载,建议将工作线程数量配置为等于机器上的硬件线程数。通过深入理解 Envoy 的多线程架构,我们可以更好地配置和优化 Envoy,以满足不同工作负载的性能需求。
2026-04-11 10:45:53
267
原创 Envoy 底层 TCP 交互、UDS 和事件驱动技术文档
Istio 通过 UDS 与 SPIRE agent 通信,Envoy 通过 SDS API 从 SPIRE 获取工作负载身份。的设计目的是在高负载时平衡事件处理的响应时间和吞吐量,避免单次 event loop 处理过久影响其他事件的响应时效。:用于本地进程间通信,尤其在工作负载身份认证(SPIRE)场景中发挥关键作用。边缘触发(Edge-Triggered)模式,减少系统调用。三、UDS(Unix Domain Socket)实现。UDS(Unix Domain Socket)实现。
2026-04-11 09:48:35
474
原创 多线程端口复用选项SO_REUSEPORT
SO_REUSEADDR:主要解决重启服务时“Address already in use”的报错,允许复用系统中处于 TIME_WAIT 状态的端口。而使用 SO_REUSEPORT 后,内核会直接精准唤醒一个进程。SO_REUSEPORT 是一个套接字选项,主要解决多进程/多线程服务程序中端口冲突和性能瓶颈的问题。· SO_REUSEPORT:解决多个进程同时运行时的绑定问题,让它们同时、平等地监听同一端口。3. 支持热升级:可以启动新版本进程绑定同一端口,再优雅关闭旧进程,实现零停机更新。
2026-04-09 07:53:58
348
原创 Envoy 中 TCP 网络连接实现分析
当套接字可读时,onReadReady 方法被触发。HCM 本身就是一个网络过滤器,它的职责是将原始的 TCP 数据流解析为 HTTP 协议(HTTP/1.1, HTTP/2 等)的请求和响应,并将这些应用层消息分发给后续的 HTTP 过滤器链。如果处理过程中,read_buffer_ 的大小超过了配置的高水位线(read_buffer_high_watermark_),Envoy 会自动调用 readDisable(true),暂停从套接字读取数据,直到缓冲区大小因下游处理而回落到低水位线以下。
2026-04-08 21:04:07
502
原创 我对Ai Coding的几点认知:我们到底应该怎么用Ai来写代码
Vibe Coding 解决“能不能写”,SDD 解决“对不对”,胶水编程解决“像不像我们的”,而 Harness 是让这一切稳定落地的运行时系统——它把隐性经验变成显性资产,把流程和反馈编码为可执行的工程规则。通过笔者这段时间的对Ai Coding的接触和使用,笔者觉得Ai Coding的确是大势所趋,作为行业里面的开发和设计人员,我们应该尽快学习和使用它,不要排斥它。针对最新的一些技术分享和方法论,笔者做了一个整理,个人觉得下面的组合应该是代码能够通过Ai落下去比较可行的方式。
2026-04-07 09:09:16
500
原创 Claude Code 源码泄漏的元凶.map暴露
npm 是 Node Package Manager(Node.js 包管理器)的缩写,它是 JavaScript 生态系统中最大的软件包管理工具,随 Node.js 一同安装。Source Map 的出现解决了这个问题:它提供了“坐标”信息,让浏览器开发者工具能够还原原始代码的位置,调试时直接展示可读的源文件,错误堆栈也会指向原始文件的行号。· 如果使用错误监控服务,通常的做法是在构建时生成 Source Map,上传到监控平台,然后删除本地 .map 文件或将其置于私密位置。
2026-04-01 08:35:55
280
原创 DnsCheck介绍
它的核心目标是:模拟真实的 DNS 解析过程,从根域一路查到你的域名,验证每一步配置是否正确。它会把从父域(如 .com)查到的 NS 记录和你自己的 DNS 服务器返回的 NS 记录进行对比,找出不一致的地方。:检查父域(比如 .com 的服务器)里登记的 NS 记录,和子域(你自己的 DNS 服务器)上实际使用的 NS 记录是否一致。:如果启用了 DNSSEC,它会验证签名是否有效、是否过期,以及从根到你的域名的信任链是否完整。输出会显示从根域到子域的每一步结果,以及发现的错误和警告。
2026-03-31 09:09:28
220
原创 C++ 代码质量检测工具集合技术文档
clang-tidy 是基于 LLVM/Clang 的模块化静态分析工具,集成了 100+ 个检查器,支持自定义规则扩展。clang-format -style=file -i src/*.cpp # 使用 .clang-format。项目根目录创建 .clang-tidy、.clang-format、.cppcheck 等配置文件。├── .clang-tidy # clang-tidy 配置。clang-format 提供自动化的代码格式化功能,支持多种主流编码风格。
2026-03-27 21:05:57
538
原创 我对Ai Coding的几点认知:软件开发周期的变化
也正因为如此,才产生了不同的开发角色,比如:架构师,开发人员,测试人员等等。,因为引入了更多的人参与进来,这种个体差异势必会导致沟通和协作存在问题,这就产生了围绕这部分事情的标准sop,工具和专门的协调人。随着Ai Coding的普及,传统的软件开发生命周期和参与进来的人员角色会发生很大的变化。如此以来,我们想加速软件的产出,是完全没有必要让更多的人参与进来。来源可以是新加入行业的新人,原来的产品经理、需求分析师、架构师、开发人员、测试人员这些。:软件行业里面涉及到人的沟通和协作的环节会锐减,甚至消失!
2026-03-27 09:32:24
320
原创 Go代码质量检测资料整理:7大工具让你的代码无可挑剔
代码质量不是一蹴而就的,而是靠工具+规范+流程共同保障。这7款工具覆盖了从格式、风格、正确性到安全的方方面面,合理组合使用,可以显著提升Go项目的质量。今天,笔者整理了7款Go开发者必备的质量检测工具,覆盖从开发到上线的全流程,助你写出高质量代码。在Go语言开发中,写出能运行的代码只是第一步。· 📈 降低维护成本:减少技术债务,让代码更易读、易改。· 🚀 提升性能:发现低效代码,优化资源使用。· SA类:死代码、逻辑错误、资源泄漏。
2026-03-25 20:25:05
268
原创 Access-Control-Expose-Headers介绍
如果服务器返回了任何自定义的响应头(如 X-Total-Count、Authorization、X-User-Id),浏览器会将其屏蔽,不暴露给 JavaScript。服务器在预检响应中也可以包含 Access-Control-Expose-Headers,告知浏览器在实际请求中哪些头部可以被读取。在身份验证场景中,服务器可能在响应头中返回新的 Authorization 或 X-Refresh-Token,前端需要读取并存储。:该头既可以在实际响应中返回,也可以在预检(OPTIONS)响应中返回。
2026-03-24 22:35:43
258
原创 envoy扩展技术Envoy External Processing
External Processing (ext_proc) 是 Envoy 提供的一个 HTTP 过滤器,它允许将请求和响应的处理逻辑委托给一个外部 gRPC 服务。envoy是基于C++开发的,虽然提供了很完善的功能实现,但是还是会存在一些定制化的功能不支持的情况,而直接二次开发envoy 的门槛比较高,所以envoy提供了ext这种扩展技术。· 若仅需修改 Headers,设置 request_body_mode: NONE 和 response_body_mode: NONE。
2026-03-22 09:04:06
340
原创 自定义 Host 头访问 HTTPS 服务时的网关处理逻辑
如果 SNI 是 baidu.com,网关会转发给 baidu.com 的后端,即使 Host 头是 abc.in.com,后端收到后可能无法正确处理(因为后端可能依赖 Host 头)。此时可能出现“绕过”现象:外网用户通过 baidu.com 的入口,却访问到了本该只对内网暴露的 abc.in.com 服务(如果 abc.in.com 也在该网关的配置中)。网关的视角:看到来自客户端的 TCP 连接,目标 IP 是网关自身的 IP(如果网关就是 baidu.com 的入口),或者经过 NAT 转发。
2026-03-20 21:04:34
459
原创 我对Ai Coding的几点认知
Ai Coding来势汹汹,特别是2025年底之后,个人觉得这东西已经不在是玩具,真的可以帮助开发人员提效,并且随着龙虾模式的推出,已经能看出来Ai Coding在重复性,标准化比较清晰的产品上面产出能力已经远远超过了资深程序员。比如传统的银行系统,通讯系统,批量使用的嵌入式系统,靠近底层的操作系统类产品,与硬件绑死的驱动类产品,我们这里指的是在原有的基础上做迭代开发,不是重新写一套。,这些产品诞生的比较早,代码语言,设计方式都是比较早的,Ai 学习这些东西比较吃力,因为资料非常有限。
2026-03-19 09:22:54
303
原创 ebpf的可观测性利器obi
3. OpenTelemetry Collector Receiver:从 v0.5.0 版本开始,OBI 可以作为 Collector 的一个 Receiver 组件运行,将数据送入 Collector 强大的处理管道,进行过滤、采样、加密后,再分发到一个或多个后端。OBI 不侵入应用进程,而是作为一个独立的、运行在用户空间的守护进程,负责加载和管理内核中的 eBPF 程序。支持 Java (JDK 8+)、.NET、Go、Python、Ruby、Node.js、C、C++ 和 Rust。
2026-03-17 12:37:26
378
原创 eBPF程序性能监控与优化利器bpftop
bpftop正是这一理念的实践产物。bpftop是一个由Netflix开源的命令行工具,旨在为eBPF程序的性能监控与优化提供实时、动态的可视化视图。它能够显示系统所有运行中eBPF程序的平均执行时间、每秒处理的事件数以及估算的CPU使用率等关键指标,并以类似top命令的交互式界面或随时间变化的图表形式呈现。随着Netflix在生产环境中大规模部署基于eBPF的各类系统(如网络观测、安全监控等),工程师们发现需要一种能够精确量化eBPF程序开销的方法,以便在发挥eBPF强大能力的同时,避免对系统造成过载。
2026-03-16 21:19:00
243
原创 eBPF的高效构建依赖验证工具mkcheck2
mkcheck2的研究论文显示,通过采用eBPF,系统调用追踪的开销相比传统的ptrace方法降低了高达99.7%。mkcheck2的核心创新在于结合了eBPF(扩展伯克利数据包过滤器)的系统调用追踪能力与增量分析技术,从根本上解决了传统依赖验证工具的两大痛点:高运行时开销和全量分析的效率问题。这些eBPF程序将采集到的信息存储在内核的eBPF Maps中,并通过perf_buffer或ring_buffer机制高效地传递给用户空间的分析引擎。在大型软件项目中,维护正确的依赖规格说明是一个重大挑战。
2026-03-15 21:55:29
365
原创 eBPF 实用命令行工具详解
这些工具大多来自 BCC 项目,部分为独立项目。· Linux 4.1+(使用 tracepoint block/block_rq_issue 和 block/block_rq_complete)· Linux 4.5+(使用 tracepoint syscalls/sys_enter_open 及 sys_enter_openat)· 监控系统中建立的 TCP 连接,查看本地和远程地址、端口、发送/接收的数据量、持续时间等。· 查看每一次磁盘 I/O 的详细信息,包括进程、设备、扇区、大小、延迟等。
2026-03-14 19:07:29
293
原创 eBPF在云原生领域最成功的应用之一Cilium
假设要让所有带有role=frontend标签的Pod访问带有role=backend标签的Pod,传统的基于IP的防火墙需要在每一个运行backend Pod的节点上维护包含所有frontend Pod IP地址的访问控制列表。这个身份是一个简单的数字标识符,存储在Cilium内部的身份库中。3. 基于身份的执行:在接收端节点,Cilium的eBPF程序会解析数据包,提取出发送者的身份,然后仅根据这个身份(而非IP)与预先加载到内核中的网络策略进行匹配,快速决定是允许还是拒绝该数据包。
2026-03-09 09:43:10
291
原创 ebpf之bpftrace介绍
你可以把它想象成一个给 Linux 系统各个角落(函数调用、系统事件等)挂上“钩子”的工具,钩子触发时,可以按照你的意愿提取参数、返回值或执行自定义的计数、统计操作。pid(进程ID)、tid(线程ID)、comm(进程名)、nsecs(纳秒时间戳)、kstack(内核栈)、arg0...argN(函数参数)、retval(返回值)。内核中的 BPF 验证器会严格检查代码的安全性(如是否存在无限循环、非法内存访问)。· count()、sum(x)、avg(x)、min(x)、max(x):聚合函数。
2026-03-05 21:19:20
361
原创 ebpf之bcc介绍
ext4slower / btrfsslower / xfsslower / zfsslower:追踪特定文件系统(如ext4、XFS)的读、写、打开、同步等操作,并仅打印超过指定阈值的慢操作,帮助识别应用感知的延迟。· 自己动手开发:BCC的安装包通常还提供一个 bcc-doc 包(或类似的示例目录),里面包含了从 hello_world.py 开始的各种开发示例,供你学习如何编写自定义的BCC工具。· 功能:追踪块设备I/O层的每一个请求,打印进程、起始时间、延迟、扇区、大小等信息。
2026-03-05 09:48:07
406
原创 Istio Ambient Mesh 介绍
随着Ai coding的落地,笔者认为mesh下沉到宿主机层面,并暴露更加简单的能力给到Agent使用,会成为必然方向,而Ambient mesh就会成为大趋势,所以笔者计划推动一次架构升级。· 工作机制:它监听 Pod 的生命周期,并在宿主机上配置路由和 iptables 规则,或者配置 eBPF 程序,将应用程序 Pod 的流量转发到本节点的 ztunnel。· 安全覆盖层(四层治理):提供一个基础的、节点共享的零信任隧道(ztunnel),负责处理 L4 的流量加密(mTLS)、遥测和简单授权。
2026-03-04 22:35:41
282
原创 python自动化修改代码技术monkey patch
Monkey Patch(猴子补丁)是一种在运行时动态修改类或模块的技术。它允许我们替换、添加或修改已有的属性、方法,从而改变代码的行为,而无需修改原始源代码。看名字就知道是一种hack技术,不过只要应用得当,确实也是一个利器。本篇文章是笔者针对不同语言对代码进行自动注入的第三篇,目的是为了解决基础设施代码自动注入到业务代码的技术探讨,比如不在需要业务开发人员在业务代码中写类似全链路追踪这类功能的代码逻辑。Monkey Patch 会让代码行为变得隐式,增加调试难度,尤其是跨模块使用时。
2026-03-03 09:34:57
271
原创 go代码自动注入技术介绍
go build -toolexec="/my/instrument toolexec" 时,go 命令不会直接运行 compile,而是运行 /my/instrument toolexec,并将原始工具(如 compile)的路径及其参数作为参数传递给它。通过解析参数,它能获知当前编译的包路径(-p 标志)、目标文件(-o)、临时目录以及需要编译的所有 .go 文件列表。// 假设第一个参数是原始工具路径,如 /usr/lib/go/pkg/tool/linux_amd64/compile。
2026-03-02 21:19:16
337
原创 自动注入代码技术之java agent
Java Agent 是 Java 平台提供的一种工具包,允许开发者在 Java 虚拟机(JVM)启动后或运行时,修改已有程序的字节码,从而实现方法级别的增强或监控。当 JVM 加载类时,Agent 可以通过 java.lang.instrument 包提供的 API,拦截类加载过程,修改其字节码后再交给 JVM 执行。而这里采用的关键技术就是Java agent, 就我们目前使用的情况来看,这类字节码增强非常强大,不过线上使用的稳定性方面要额外关注,特别是attach时候,对cpu和mem的影响。
2026-03-02 12:28:29
330
原创 大批量的Connection: close请求会打爆服务器
即使你的业务代码在逻辑上忽略了或移除了这个头部,但底层的网络库(如Go的net包、Java的Socket)已经根据标准HTTP/1.1的语义做出了判断:既然客户端要求关闭,那么在响应结束后,就应该主动关闭这个连接。它维护了一堆建立好的连接,当有新的请求到来时,直接从池子里拿出一个来用,避免了重复建立TCP连接(三次握手)和可能的安全协商(TLS握手)的开销。当携带有 Connection: close 的请求到来时,即便使用的是连接池中的连接,请求完成后,该连接也会被强制关闭并从池中移除。
2026-02-28 09:08:39
431
原创 ebpf的关键技术xdp介绍
它提供了一种在内核中安全、高效运行沙箱程序的能力,包括指令集、验证器、即时编译器(JIT Compiler)和用于数据交互的eBPF映射(Maps)。它定义了一个特定的挂钩点(即网卡驱动中的xdp点),并规定了这个点上eBPF程序可以执行的动作(如XDP_DROP、XDP_PASS等)。· Katran:Facebook开源的基于XDP的四层负载均衡器,展示了XDP在大规模生产环境中的能力。简单来说,XDP是eBPF的一个关键挂钩点(Hook),而eBPF是XDP程序的执行引擎。
2026-02-27 15:48:06
303
原创 ebpf替换iptables做流量劫持
目前看到社区的性能压测提升20%左右,实话讲如果流量不大的话,比如qps不上万,其实没必要替换,反之建议替换。不过按照笔者的技术判断,ebpf是大趋势,还是需要做谈讨。本人落地的istio是通过iptables做定制化流量劫持的,目前计划往ambient模式演进,劫持流量计划用ebpf做替代,已便提升性能。
2026-02-26 10:45:48
320
原创 代码分析利器CodeQL介绍
污点跟踪(Taint Tracking)则是数据流分析的一种特殊形式,它关注“不可信数据”(污点)如何从源(Source)传播到汇(Sink),并在传播过程中是否经过有效的清理(Sanitizer)。CodeQL 的标准库提供了强大的污点跟踪模块,用户可以轻松地定义自己的源、汇和清理规则,从而发现各类注入漏洞(如 SQL 注入、XSS、命令注入等)。污点追踪(Taint Tracking)是静态分析中的一项核心技术,用于追踪程序中不可信数据的传播路径,从而发现潜在的安全漏洞。我们也可以手动匹配函数签名。
2026-02-25 21:51:56
543
原创 Envoy与Istio HTTP流量故障转移机制介绍
假设一个电商应用,包含用户服务(user-service)和订单服务(order-service),部署在多个地域(us-west1, us-west2, us-central1)。通过以上配置和策略,Envoy和Istio能够为HTTP流量提供企业级的故障转移保障,确保业务在复杂分布式环境中的高可用性。重试是Envoy处理瞬时故障的首要机制。VirtualService定义了HTTP请求的路由规则,是故障转移的核心配置。Envoy作为数据平面代理,通过多层级机制实现HTTP流量的智能故障转移。
2026-02-12 20:01:36
534
原创 分布式系统高可用架构核心机制:故障转移、离群点检测与集群聚合
例如,Oracle数据库的聚集(Cluster)是一种存储表数据的可选方法,将具有同一公共列值的行存储在一起,减少I/O操作次数。离群点检测与故障转移的联动机制十分明确:当离群点检测算法识别出异常节点后,系统可自动触发故障转移流程,将异常节点从服务池中剔除,并将流量重新分配到健康节点。故障转移系统通过持续的心跳检测机制监控主备节点状态,一旦发现主节点不可用,便迅速激活备用节点接管服务,整个过程可在秒级甚至毫秒级完成,对用户透明无感知。,实时识别异常节点,为故障转移提供触发信号。
2026-02-12 19:30:00
421
原创 istio从0到1:如何解决同一个应用不同功能的路由聚合问题
这个方案的核心是引入一个“配置聚合层”,它负责从数据库(或配置中心)读取针对同一应用的所有独立路由功能配置,按照预设的优先级和策略进行合并,最终生成一个完整的、下发到Istio的VirtualService。除此之外,istio的路由功能是在envoy的out bound这个上面实现的,也就是说每次的路由变更必须准确的变更到所有来源应用,也就是down streams上面才行,否则就会存在流量有损。1. 独立存储:金丝雀、环境分组、多活等每个功能的路由规则,都作为独立配置项存储(例如在DB中),彼此解耦。
2026-02-11 09:21:21
474
原创 网关针对api周期的管理思考
对于域名来讲往往是统一规划好的,哪些域名可以使用,那些不能使用,从申请到使用的生命周期相对来说简单很多,不过当中涉及到的dns切流是一个值得研究的点,因为它涉及到了切流的快慢,以及入口网络的延迟,这类问题绝大部分云厂商已经提供了基本解决方案,比如:httpdns的使用。协议的使用,对于网关来讲可能涉及到协议栈的适配,以及证书管理比如https,如何更快的处理这部分是需要好好研究的,不过对于目前的开源网关来讲都做的还不错,像ng类的,envoy类的。api是后端应用提供给前端使用的最小逻辑单位。
2026-02-10 23:34:40
324
原创 istio从0到1:如何解决分布式配置同步问题
istio的控制面istiod包装了virtual service和destination rules ,他们是应用粒度的,而istiod和envoy之间的交互又被拆分成了xds,也就是lds,rds,cds这些,特别是rds和cds,一旦配置下发的顺序不对,就会出现流量有损。同时,istio管控的数据面envoy是分布式的,通常情况下是成千上万的,而istiod的每次批次变更都是类似广播的方式下发到所有的envoy节点,一旦有些节点没有及时下发就会存在流量问题。(这个在后续文章中会单独介绍。
2026-02-05 20:39:36
435
原创 go response.Body.close()导致连接异常处理
Go 的 `http.Transport` 默认启用连接复用(HTTP Keep-Alive)。- `io.Copy(io.Discard, resp.Body)` 会读取并丢弃所有剩余数据。- 此时再调用 `Close()`,内核的 TCP 缓冲区已被清空,连接可安全放回连接池复用。_, err = io.Copy(io.Discard, resp.Body) // 重点!body, err := io.ReadAll(resp.Body) // 完全读取内容。// 主动丢弃残留数据,确保连接可复用。
2026-02-05 07:33:27
444
原创 性能分析工具比较pprof、perf、valgrind、asan
在C++开发中,内存管理和性能优化是核心挑战。本文将专门针对C++环境介绍这些工具的来源、使用场景、技术实现、适用开发阶段,并进行差异性比较,最后提供针对线上环境的CPU和内存排障操作方式。· 编译选项: -fsanitize=address -fno-omit-frame-pointer -g -O1。· 编译选项: -lprofiler -ltcmalloc -g -fno-omit-frame-pointer。· 编译选项: -g -fno-omit-frame-pointer -O2。
2026-02-04 09:02:09
376
原创 性能分析工具:pprof使用介绍
本文介绍一下如何在C++中使用pprof进行性能分析。pprof是Google的性能分析工具,主要用于CPU和内存分析。本文属于工具介绍篇,目的是对日常使用工具做个整理归类,方便使用时进行查看。pprof是一个强大的性能分析工具,特别适合分析C++程序的性能瓶颈。· 检查ProfilerStart/Stop是否被正确调用。// 设置采样频率(默认100次/秒)# 方法2:在代码中控制(更灵活)// ... 线程工作。# 使用pprof的web界面。2. profile文件为空。# 方法1:使用环境变量。
2026-02-04 07:58:25
411
原创 istio从0到1:iptables设置
└─ 规则1:-p tcp → REDIRECT --to-ports 15006(重定向)└─ 规则1:-p tcp → REDIRECT --to-ports 15001(重定向)└─ 规则2:--dport 8090 → ISTIO_IN_REDIRECT(自定义链)
2026-02-02 20:00:00
992
高质量C++(C) 编程指南
2009-08-16
vim用户手册
2013-03-20
笔试题集锦(C,C++)
2010-02-03
五子棋程序(C++)
2009-08-14
wxWidgets参考手册查询
2009-11-23
WindowsAPIdq.chm(中文版)
2009-08-13
mysee客户端的配置文件
2009-08-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅