自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(542)
  • 资源 (4)
  • 收藏
  • 关注

原创 Python 描述符协议:从一个点号到语言核心机制

任何实现了__get__()__set__()或这三个方法中至少一个的对象,就是一个描述符。descr.__get__(self, obj, type=None) # 读取属性时被调用descr.__set__(self, obj, value) # 赋值时被调用descr.__delete__(self, obj) # 删除时被调用descr.__set_name__(self, owner, name) # 类创建时被自动调用,告知描述符自己的"名字"注意一个至关重要。

2026-05-02 07:59:56 446

原创 Python Mixin 深度解析:从原理到实战

Mixin(混入)是面向对象编程中的一种设计模式,本质上是一个为其他类提供可选功能的类。它不是为了独立实例化而存在的,而是为了被其他类继承,从而"混入"一些通用的能力。在 Python 中,Mixin 利用了语言的多继承机制来实现。“我不是一个完整的东西,我只是给别人添加能力的工具。举个生活中的类比:咖啡本身是一杯完整的饮品,但你可以往里面"混入"牛奶变成拿铁,“混入"巧克力变成摩卡。牛奶和巧克力本身不是饮品,但它们能为饮品增添风味。Mixin 就是代码世界里的"牛奶"和"巧克力”。

2026-05-02 07:59:09 293

原创 深入理解 Pydantic 的 model_dump_从基础到高级实践

model_dump看上去只是「把模型变成字典」,但它实际上是 Pydantic 暴露给开发者的一个高度可组合的序列化引擎。理解它的每一个参数,本质上是在理解「我打算把数据交给谁、对方期望什么样子」这个工程问题。下次你写下接收方是 Python 还是 JSON?mode是全量还是增量?内部命名还是对外命名?by_alias多态吗?这数据待会儿要再喂回模型吗?round_trip把这些问题答清楚,你写出的序列化代码就不会再有「为什么生产环境少了一个字段」式的玄学问题。

2026-04-30 08:05:32 1095

原创 vars(cls)深度解析:Python 命名空间的一扇窗

return {name: valvars(cls)是 Python 对象模型的一个核心入口,它的精髓可以归结为以下几点:它返回,是只读保护的类命名空间视图。它只呈现当前类,不含继承属性,与dir()形成鲜明对比。它能绕过描述符协议,让你直接接触property等描述符对象本身。它是元编程、框架开发和运行时自省的基础工具。理解vars(cls)本质上是理解 Python 的命名空间分层模型——每个类都是一个独立的命名空间层,描述符协议负责把这些层粘合成你所看到的统一对象系统。

2026-04-30 08:04:44 478

原创 Python 中的 __set__ 与 __set_name__ 深度解析

└─ 在实例赋值时触发(obj.attr = value)└─ 使描述符成为"数据描述符",优先级高于实例 __dict__└─ 存储值时用 obj.__dict__ 或 setattr(obj, private_name, value)└─ 在类定义完成时由元类自动调用(一次性)└─ 提供描述符在类中的名称,解决自我引用问题└─ 也可感知宿主类,用于注册、元数据收集等└─ 动态挂载时需手动调用两者配合使用是构建可复用、类型安全的属性系统的标准模式,也是SQLAlchemyDjango ORM。

2026-04-29 08:07:08 359

原创 Python 中的 __new__深度解析

_new__在对象真正存在之前介入。当你需要控制的不是"对象初始化后的状态",而是"对象是哪个、是否创建、是什么类型"时,就该用__new__。单例、不可变类型继承、工厂方法。

2026-04-29 08:06:06 328

原创 深入理解 Python __init_subclass__

1. 忘记调用super()链式调用断裂,多重继承场景必现问题。2. 关键字参数未用**kwargs透传# 错误示范def __init_subclass__(cls, my_param=None): # 漏掉 **kwargssuper().__init_subclass__() # 漏掉 **kwargs一旦有其他父类也消费关键字参数,即报TypeError。3. 误以为cls是父类cls始终是正在被创建的那个子类,不是定义了的类。4. 在中访问未完全初始化的子类某些装饰器逻辑若依赖子类的。

2026-04-28 08:23:46 790

原创 Python __reduce__深度解析:序列化机制的核心引擎

能用解决的,优先用它们,语义更清晰,只需处理状态字典。__reduce__适用于构造函数参数与状态需要分开描述的场景,或者继承了内置类型(list/dict)的情况。不可序列化的资源(socket、文件句柄、锁)必须在中重新初始化,而非尝试序列化它们。callable 必须是模块顶层可导入的对象,lambda 和局部函数无法被 pickle 引用。时刻牢记安全边界,pickle 不是数据交换格式,是对象持久化格式,面向可信环境。__reduce__

2026-04-28 08:23:04 513

原创 Python __bool__:深入解析布尔协议

_bool__是 Python 数据模型中的特殊方法,当解释器需要判断一个对象的布尔值时,它会调用bool(obj),而bool()的底层逻辑,就是去调用。return self.celsius > 0 # 只有正温才是"真"if t:print("温度为正") # 输出:温度为正该方法必须返回True或False——严格的bool类型。返回其他类型会引发TypeError。

2026-04-27 07:55:41 399

原创 深入理解 asyncio 跨线程调度:call_soon_threadsaf与 run_coroutine_threadsafe

Python asyncio 的事件循环是单线程的。这既是它高效的原因,也是它最容易被误用的地方。当你需要从另一个线程与异步代码交互时,就必须借助两个关键工具。本文将深入剖析它们的原理、差异与正确使用姿势。

2026-04-27 07:55:01 468

原创 随机退避:让重试更聪明

退避解决"偶发失败",断路器解决"持续失败"。两者配合使用:当连续失败次数超过阈值时,断路器"断开",后续请求直接失败(fast-fail),不再等待重试,保护调用方资源。但这恰恰是最危险的做法。,此时同时连接它的 1000 个客户端立刻全部重试——这一波整齐划一的"报复性请求"会再次压垮服务,周而复始,形成。固定等待解决了"立即重试"的问题,但每个客户端等待时长完全相同,重试依然是。1000 个客户端同时失败后,每个人的等待时间各不相同,重试请求被。在整个时间窗口内,后端看到的是平稳的流量,而非脉冲。

2026-04-26 09:09:42 517

原创 asyncio.Queue 深入详解

是 Python 标准库asyncio模块中的异步队列实现,位于。它的设计思路与线程安全的类似,但专门为async/await 协程模型设计,不是线程安全的。核心定位:在异步并发环境下,作为生产者-消费者模式的协调桥梁,实现协程之间的数据传递与流量控制。queue = asyncio.Queue(maxsize=10) # 有界队列,容量10queue = asyncio.Queue() # 无界队列(maxsize=0)是异步编程中不可或缺的协调原语。它的设计简洁优雅——底层通过Future。

2026-04-26 09:08:55 473

原创 Python 哨兵值模式(Sentinel Value Pattern)深度解析

误区正确做法用==比较哨兵始终用isis not每次调用都创建object()在模块级别创建一次,多处引用哨兵没有__repr__添加可读的__repr__便于调试忘记处理 pickle / deepcopy重写__copy____reduce__在公开 API 中暴露哨兵类将哨兵类标记为私有(),只导出实例。

2026-04-25 17:29:11 326

原创 惊群效应(Thundering Herd)深度解析

惊群效应(Thundering Herd Problem)描述的是这样一种现象:当某个共享资源(锁、文件描述符、缓存 Key、连接池槽位)变得可用时,大量正在等待该资源的进程或线程被同时唤醒,但最终只有一个能真正获取资源,其余的全部重新进入等待状态。那些"无效唤醒"白白消耗了 CPU 时间片和上下文切换开销,正如受惊的兽群在狭窄出口前相互踩踏——热闹非凡,却一无所获。惊群效应的本质是资源稀缺性与唤醒粒度的不匹配——唤醒了 N 个竞争者,却只能满足 1 个。在 Python 中,无论是多进程accept()

2026-04-25 17:28:37 476

原创 Deep Agents 背后的控制面暗桩:为什么一个空壳`ToolOutputMixin 能决定工具调用是否还能“控制图”

数据通道负责把结果喂回模型控制通道负责改状态、跳转、恢复执行那么就是数据通道和控制通道之间的分流器。没有它,所有工具返回值都会被压平到。有了它,少数“高语义对象”才能穿过消息格式化层,进入真正的图执行层。继承它,是为了保留“我已经是合法工具消息”的身份。Command继承它,是为了保留“我不是消息,我是控制指令”的身份。这也是为什么一个看上去几乎什么都没做的类,实际上卡在了 Deep Agents、LangChain Tools 和 LangGraph Control Flow 的交界点上。

2026-04-24 09:00:15 496

原创 LangGraph核心类型深度解析:Command(Generic[N], ToolOutputMixin)

self,) -> None:...单一职责原则:每个Command对象应专注于完成一个完整的逻辑单元(如一个工具操作+一个状态更新+一个路由指令)状态更新原子性:避免在一个Command中进行多个不相关的状态更新,确保状态变更的可追溯性明确的路由意图goto参数应清晰表达业务逻辑,避免过度复杂的条件判断类型注解完整:为Command的泛型参数N提供明确的类型约束,提升代码可维护性与LangSmith集成:利用LangSmith追踪Command对象的传递与处理,便于调试复杂工作流。

2026-04-24 08:59:06 435

原创 Deep Agents中的ToolRuntime深度解析

ToolRuntime是LangChain Core中定义的工具运行时接口,专门为工具执行提供标准化的运行时环境抽象。功能描述价值自动注入在工具调用时自动注入,无需手动传递,且对LLM隐藏简化工具开发,避免工具签名污染上下文访问提供对运行时上下文(context)的访问支持用户ID、API密钥等配置的传递状态管理允许工具读取和修改智能体的图状态(graph state)实现工具间状态共享,支持复杂任务流程流输出通过stream_writer支持自定义流输出实现工具执行进度实时反馈长期记忆。

2026-04-23 05:31:29 401

原创 深入理解 Python 生成器

yield from 把当前生成器的控制权委托给另一个迭代器或生成器,并自动转发 next、send、throw、close,同时还能接收子生成器的最终返回值。生成器的优雅之处在于,它没有发明一套完全陌生的新模型,而是在普通函数基础上,只通过 yield 就把“过程”改造成了“可恢复的迭代器”。生成器的本质,不是“更省内存的列表替代品”,而是“把逐步计算过程对象化、迭代化、惰性化”的语言机制。因为生成器是单次消费对象,所以把同一个生成器传给多个地方时,经常会出现“有人读完了,别人就没了”的问题。

2026-04-23 05:29:18 368

原创 Python之Await 协议

await。

2026-04-22 08:53:20 572

原创 深入理解 Python inspect:对象内省、签名系统与运行时反射的工程实践

自动注册系统需要定位用户自定义函数的定义位置。IDE 或工具面板要实现“跳转到定义”或“查看源码”。测试框架要展示断言失败对应的用户代码。这决定了你该用还是。前者更动态,后者更克制。inspect的真正价值,不在于它能“看到很多内部细节”,而在于它把 Python 运行时中原本零散、隐含、易碎的信息,整理成了一套可编程、可组合、可工程化利用的抽象接口。对于普通业务开发者,掌握getdoc(),通常已经足以覆盖多数实际需求;Python 的调用契约可以被对象化。

2026-04-22 08:52:47 861

原创 asyncio 的 Event Loop:定义、运行机制与工程实践

从抽象层面说,event loop 是一个反复迭代的调度循环。取出已到期的定时回调。处理已经就绪的 I/O 事件。执行 ready queue 中的回调。推进被 Future 唤醒的 Task。计算下一次 poll 的等待时间,进入下一轮。这个过程并不是由业务代码手工逐步驱动,而是由循环本身持续执行,直到满足停止条件。当某个协程执行到await时,它会让出控制权。event loop 转而去执行其他就绪任务。

2026-04-21 06:24:07 724

原创 深入理解 Python 中的 asyncio.Lock

如何在不牺牲系统一致性的前提下,让多个协程安全地共享状态。它的价值不在于“把并发都关掉”,而在于为那些必须串行化的关键路径提供清晰、可证明、可维护的边界。真正成熟的异步代码,不是到处机械加锁,而是先识别不变量,再精确划定临界区,并在正常路径、异常路径、取消路径上都保持语义完整。如果把asyncio看成一种 I/O 编排模型,那么的意义就不是“防止多线程抢资源”,而是“在协作式调度环境中,为共享可变状态建立秩序”。从这个角度理解它,才能真正写出既正确又具备工程质量的异步程序。

2026-04-21 06:23:24 620

原创 深入理解 Python 中的异步迭代

Python 的异步迭代并不是对传统for循环的小修小补,而是面向现代 I/O 系统的一种语言级抽象。它把“值的序列”升级为“按时间到达的序列”,把“遍历”升级为“等待并消费”,也把程序设计的关注点从单纯的数据结构操作,推进到了调度、公平性、取消语义与资源生命周期管理。真正写好异步迭代代码,靠的不是记住几个语法点,而是建立这样一种工程判断:当数据不是一次性存在,而是在未来不断到达时,代码应如何以最小的资源成本、最清晰的控制流、最可靠的退出路径,把这一过程表达出来。

2026-04-20 08:50:58 477

原创 python之async with 深入详解

async with不是一个“异步版 with”这么简单,它本质上是 Python 为异步资源生命周期管理提供的语言级协议。当资源的获取和释放本身都可能需要等待时,如何仍然优雅、可靠、异常安全地控制作用域。async with依赖的是__aenter__和__aexit__两者都要可等待进入和退出阶段都允许await即使代码块抛异常,也会执行退出逻辑__aexit__返回True可以吞掉异常,但要谨慎它特别适合锁、连接、事务、会话、流等异步资源。

2026-04-20 08:50:08 469

原创 Asyncio 协程详解

原因不是它真的在三个 CPU 核上并行跑,而是三个协程都在等待同一种 I/O 型事件,事件循环在它们的等待间隙中完成了调度。只有建立了这个模型,后续学习异步 HTTP 客户端、异步 Web 框架、异步数据库库、消息中间件、流处理框架时,才不会停留在“会写语法,不懂行为”的阶段。在 asyncio 中,任务取消不是简单地“强制杀死”,而是通过向协程注入 CancelledError,让协程有机会清理资源后退出。它的作用不是“延迟一会儿”,而是“等待一个可等待对象完成,并在等待期间把执行权交还给事件循环”。

2026-04-19 08:01:36 377

原创 importlib:Python 导入系统的标准编程接口

根据官方文档,它的作用不只是“动态导入模块”,而是为 Python 的导入机制提供可编程接口,并公开导入系统中的核心抽象与扩展点。如果程序运行期间新增了模块文件、安装了新的分发包,或者修改了模块搜索路径,通常还需要调用 importlib.invalidate_caches,使 finder 内部缓存失效,以确保后续导入能够观察到最新状态。finder 的职责是“查找”模块,也就是在给定模块名的前提下,确定该模块是否存在,以及应当使用何种方式加载。这些抽象反映了导入系统的协议边界,而不是简单的实现细节。

2026-04-19 08:00:54 236

原创 Python 装饰器深度解析:从语法糖到工程实践

装饰器真正的本质,是在定义阶段拿到一个函数或类对象,对它做一次变换,然后把原来的名字重新绑定到变换后的对象上。理解到这一步,你再看 Python 里的 classmethod、property、lru_cache、dataclass,或者你当前工程中的 register、asynccontextmanager,就会发现它们其实都在用同一种语言能力,只是解决的问题不同而已。在这个例子里,返回的是 wrapper,所以后续调用 hello() 时,先进入 wrapper,再由 wrapper 调用原始函数。

2026-04-18 09:15:00 459

原创 Python之@dataclass

只要类的主要价值在“行为”而不在“数据结构”,dataclass 的收益会快速下降。比 dataclass 更成熟也更灵活,历史更早,很多高级能力更强,例如验证器、转换器等。这就是 dataclass 的第一层理解:它不是替你发明新的类,而是替你生成那些机械、重复、但又极其常见的类方法。如果答案是“是”,那么 dataclass 往往就是 Python 里最自然、最标准、也最优雅的表达方式之一。你在框架源码里经常看到 dataclass,并不是因为它“时髦”,而是因为它非常契合框架内部的数据组织需求。

2026-04-18 09:14:23 351

原创 Python Protocol:结构化子类型的优雅实现与深度解析

Protocol是Python 3.8通过PEP 544引入的类型系统核心特性,作为typing模块的一部分,它提供了结构子类型(structural subtyping)或静态鸭子类型(static duck typing)的支持。Protocol允许开发者定义一组方法和属性的规范,任何实现了这些规范的类(无论是否显式继承)都被视为该协议的子类型,无需显式声明继承关系。"""定义飞行能力的协议方法"""... # 使用省略号表示抽象方法体print("鸟类振翅高飞")

2026-04-17 09:02:53 759

原创 Python类型守卫深度解析

Python类型守卫从TypeGuard到TypeIs的演进,反映了Python静态类型系统的成熟与完善。TypeGuard提供了灵活性,TypeIs则带来了安全性与直观性,开发者应根据具体场景选择合适的工具。随着Python 3.13的普及和PEP 742的全面实施,TypeIs有望成为类型守卫的首选方案,而TypeGuard将继续在处理复杂容器类型和特殊场景中发挥重要作用。

2026-04-17 09:00:51 316

原创 Python中classmethod与staticmethod注解深度解析

职责分离:明确区分实例逻辑、类逻辑和工具逻辑代码内聚:将相关功能组织到合适的命名空间中设计灵活性:支持工厂模式、单例模式等高级设计模式性能优化:减少实例内存占用,提高方法调用效率从Python设计哲学来看,这两个装饰器体现了"显式优于隐式"和"简单优于复杂"的核心原则:通过明确的注解声明方法意图,让代码更具可读性和可维护性。最终建议:在类设计中,优先考虑方法的职责边界,合理选择方法类型,避免过度设计。

2026-04-16 08:09:00 471

原创 Python Union语法深度解析

Python的Union语法从最初的演进到现代的X | Y,反映了Python类型系统不断成熟和人性化的过程。作为类型系统中的"灵活选择器",Union解决了静态类型检查与动态语言特性之间的核心矛盾,为开发者提供了在保持Python灵活性的同时获得类型安全的途径。核心语义:Union表示"值可以是多种类型之一",等价于X | Y语法演进:3.10+推荐使用X | Y,更简洁且符合Pythonic风格关键特性:自动扁平化、去重、无序性,确保类型表达式简洁一致最佳实践。

2026-04-16 08:08:19 478

原创 Python多重分派:multipledispatch库深度解析

multipledispatch库为Python带来了完整的多重分派能力,显著提升了代码的表达力和可维护性,尤其适合处理复杂类型适配场景。强大的类型解析能力:基于所有参数类型组合选择最佳实现清晰的代码结构:替代冗长的isinstance分支,使逻辑更直观良好的扩展性:新增类型支持无需修改原有代码,符合开闭原则完善的冲突检测:提前发现潜在歧义,减少运行时错误随着Python类型注解生态的发展,多重分派机制有望在更多领域发挥作用,如自动生成API文档、静态类型检查增强等。

2026-04-15 09:10:43 481

原创 Python singledispatch 深度解析

通过类型驱动的动态分派机制,为Python带来了优雅的泛型编程能力,解决了传统isinstance链式判断的代码冗余问题。分离关注点:将不同类型的处理逻辑解耦到独立函数增强可扩展性:无需修改核心逻辑即可添加新类型支持提升可读性:代码意图更清晰,符合"显式优于隐式"的Python哲学兼容抽象基类:实现接口驱动的编程范式,适配多态场景在现代Python开发中,已成为处理异构数据、构建灵活API和实现通用库的必备工具,尤其适合数据处理、序列化框架和Web开发等场景。

2026-04-15 09:10:09 421

原创 Python 回退重载(Fallback Overloading)深入讲解

Python的回退重载是动态类型语言中实现多态行为的优雅解决方案,核心在于**“特定实现优先,默认实现兜底”**的设计理念。通过和运算符反向方法等官方机制,开发者可以在保持Python灵活性的同时,构建出类型安全、可维护、鲁棒性强的代码。在实际开发中,应根据项目规模和需求选择合适的实现方式:小型项目可使用简单的类型检查+回退,大型项目推荐结合与类型提示,库开发则应遵循官方规范,提供清晰的回退机制以提升用户体验。

2026-04-14 09:11:34 465

原创 Python Final 类型限定符详解

Python的Final特性是静态类型系统的重要补充,通过标注和装饰器,开发者可以明确表达"不可修改"和"不可继承/重写"的设计意图,帮助类型检查器提前捕获错误,提高代码质量和可维护性。需要注意的是,Final是静态类型提示的一部分,不会在运行时强制限制,这与Python动态类型的特性保持一致。在实际项目中,建议配合mypy等类型检查工具使用Final,充分发挥其静态检查的优势,同时避免对运行时行为的过度依赖。

2026-04-14 09:09:32 467

原创 Python @overload 装饰器深度解析

精确的类型表达:能够表达Union类型和TypeVar无法精确描述的复杂参数-返回类型映射关系增强的IDE支持:为IDE提供更详细的类型信息,实现更精准的代码补全和错误提示文档即代码:重载声明本身就是清晰的文档,描述函数在不同输入下的行为预期渐进式类型增强:无需修改运行时代码,即可为现有代码添加静态类型检查支持与动态特性的平衡:在保持Python动态特性的同时,提供静态类型检查的优势。

2026-04-13 08:13:39 447

原创 .NET10之SocketsHttpHandler 技术全景

SocketsHttpHandler 是库中实现抽象类的最终处理程序,是HttpClient的默认底层处理器。所有通过HttpClient发送的 HTTP 请求,最终都会由它完成网络传输、连接管理、协议解析等核心工作。内网穿透、双向 TLS 认证、自定义代理、Socket 定制场景;通过实现高度定制化的网络传输。// 连接池核心配置MaxConnectionsPerServer = 100, // 单域名最大连接数。

2026-04-13 08:12:05 498

原创 .NET10之 HttpClient 使用指南

HttpClient 使用的核心在于生命周期管理和连接池优化。.NET 官方明确推荐两种模式:对于现代 .NET 应用,优先选择静态/单例 HttpClient + PooledConnectionLifetime(2-15 分钟)解决端口耗尽和 DNS 缓存问题;依赖注入环境下,使用IHttpClientFactory 类型化客户端获得更丰富的配置和弹性能力。

2026-04-12 07:29:01 439

原创 Python Literal 类型深度分析

Literal是Python类型提示系统中的特殊构造,用于指示变量/参数/返回值必须取固定的字面量值之一,而非宽泛的类型范畴。它由PEP 586在Python 3.8中正式引入,运行时不生效,仅用于类型检查器、IDE等静态分析工具。# 定义:仅支持这3个字符串值Literal是Python类型系统的重要扩展,核心价值在于在静态类型层面实现值级别的精确约束,填补了基础类型与枚举之间的空白。它不是Enum的替代品,而是互补工具——Literal专注于静态类型安全,Enum专注于运行时对象封装与行为扩展。

2026-04-12 07:27:26 524

童继龙的ERP顾问感悟.pdf

做ERP顾问已经有些时间了,自己感觉到ERP顾问的成长是需要时间及感悟的。ERP顾问的历程一路走来,感悟颇多,陆续写了十几篇顾问成长的内容,现在把这些内容整理出来,与朋友们分享。 目录: 一、 ERP顾问成长感悟 3 1. “怀才不遇”与“怀才不孕”怎么办? 3 2. 从王永庆的“一粒米”看顾问能力修炼 5 3. 当你是虾米时要长骨格 6 4. 顾问过度包装后未来会吃亏 7 5. 不擅表达也是怀才不遇的一个重要原因 9 6. 其貌不扬就不能做顾问? 12 7. 顾问要像刺客般“一击而中”? 14 8. 你能让你的客户“亢奋”起来吗? 15 9. 你是知识型顾问还是知道型顾问? 16 10. 客户永远是顾问最好的老师 18 11. 成为顾问的方法--“三多”加“六多” 20 12. 顾问的知识需要“畅享” 23 二、 七嘴八舌说ERP顾问 24 1. ERP咨询顾问的资历要多深? 24 2. ERP顾问值这个价吗?ERP顾问是怎么死的? 25 3. 做ERP顾问就只能抛妻弃子? 27 4. ERP售前人员的红布与黑饵 28 5. 网友观点:IT售前6式 31 6. IT售前应该小心的几类客户 33

2010-04-03

ext 手册234324

ext 手册42342额外日日日日日日日日日日日日日日日日日日日日日日日日日

2010-03-19

ES2015规范

2016-05-02

C 信息管理系统(文件操作)

C语言做的实现信息的添删改查,实现了文件的大部分操作!

2008-12-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除