- 博客(66)
- 收藏
- 关注
原创 Celery系列-05-生产实践与源码阅读
这是Celery系列收官篇,聚焦生产落地。讲解Beat定时任务,要避免多实例重复调度,任务需保证幂等。介绍多队列做任务资源隔离,对比多种Worker并发池,说明并发数受多方瓶颈约束,讲解预取、进程回收、优雅发布等配置。介绍Flower监控与关键监控指标,阐述序列化、凭据等安全要点,分析队列积压、任务重复等常见故障。给出单元、集成、故障演练测试手段,提供源码阅读路径与生产上线检查清单,强调Celery只负责任务分发,业务正确性依赖幂等、资源治理等设计。
2026-08-24 10:15:33
456
原创 Celery系列-04-Canvas任务编排
本文讲解 Celery Canvas 任务编排,解决多异步任务业务流程编排问题。Signature 是编排基础,`.s()`接收上游结果,`.si()`为不可变签名。Chain 实现任务顺序执行;Group 实现任务并行;Chord 结合 Group 与回调,完成并行后汇总,要求配置 Result Backend。还介绍 Map、Starmap、Chunks 处理批量任务,控制任务粒度。指出不要在任务内`.get()`阻塞等待、不传递大数据等常见错误,强调幂等、可观测性,Canvas 不适合复杂长周期流程。
2026-08-24 09:49:02
352
1
原创 Celery系列-03-任务可靠性与幂等
本文剖析Celery任务可靠性,区分暂时性、永久性错误,强调仅对临时故障重试。介绍手动重试与带指数退避、随机抖动的自动重试,规避重试风暴。讲解消息确认机制,`acks_late=True`可减少任务丢失,但增大重复执行概率。队列提供至少一次投递语义,需通过幂等键、数据库唯一约束、状态机、第三方幂等接口实现业务幂等。注意数据库事务未提交就发任务的竞态问题,高一致性可使用事务发件箱模式。永久失败需告警留存,提供人工补偿,文末附可靠任务模板与上线检查清单。
2026-08-21 15:25:51
352
原创 Celery系列-02-Redis快速入门
这篇教程讲解用 Redis 作为 Broker 和 Result Backend 跑通 Celery 异步任务。搭建最小 Demo 项目,借助 Docker 启动 Redis,配置 celery_app,编写任务函数。区分三种任务调用方式:直接同步调用、delay()简易异步、apply_async()可配置延时 / 过期的异步调用。介绍任务各状态含义,提供任务日志写法,针对未注册任务、任务一直 PENDING 等高频故障给出排查命令与原因。提示开发修改代码需重启 Worker,生产推荐按业务拆分任务,参数
2026-08-21 15:02:29
298
1
原创 智枢 ZhiHub——基于 Langchain、LangGraph 的企业智能 agent 平台
智枢ZhiHub是一个面向企业客服场景的多智能体系统,通过整合知识问答、业务查询、人工接管等功能,构建了一个可控、可审计的业务闭环。系统采用分层架构,包含展示层、接入层、AI编排层、检索层等,使用LangGraph进行显式状态图编排,结合Milvus+Elasticsearch混合检索和自建JSON-RPC工具网关。关键特性包括:多租户支持、权限控制、人工接管机制、完整的审计追踪,以及围绕业务场景优化的工作流设计。系统通过Docker Compose编排18个服务,实现了从用户咨询到问题解决的全流程自动化与
2026-08-21 14:55:11
700
原创 Celery系列-01-彻底理解Celery
本文介绍了Celery分布式任务队列的基本概念和核心组件。文章首先通过"导出年度报表"的案例,说明了异步任务处理的必要性,解释了Celery的作用是将任务发起和执行分离。接着详细阐述了Celery的五大核心角色:任务生产者、消息代理Broker、任务执行Worker、结果存储Backend和周期任务调度器Beat。文章还澄清了常见误解,如Celery与Redis、async/await的区别,并列举了适合使用Celery的典型场景。最后,文章总结了Celery的核心特征,并预告后续将介绍如何实际搭建Cele
2026-08-19 18:59:36
207
原创 GLM-5.3 发布:编程、Agent 与网络安全能力全面升级
智谱AI发布新一代旗舰模型GLM-5.3,在保持与GLM-5.2相同基础架构的同时,通过后训练显著提升了复杂软件工程、长程Agent任务和网络安全三大核心能力。该模型编程性能提升约50%,在Terminal-Bench等评测中表现突出;Token使用效率提高,相同任务下输出更精准且消耗更少;网络安全能力实现突破,漏洞发现和分析能力大幅增强。GLM-5.3强制启用思考模式,提供low/high/max三档推理强度,支持1M Tokens上下文窗口和流式输出等功能。开发者需注意从5.2迁移时需调整API参数,目
2026-08-19 16:40:07
725
1
原创 05-vibe-coding-向agentic-engineering演进
摘要 Vibe Coding(直觉式编程)曾因Karpathy的推崇而风靡,但其四大问题(代码质量不稳、逻辑矛盾、缺乏架构、协作困难)导致快速衰退。Karpathy转而倡导"脚手架工程化",标志编程范式正经历三次跃迁: 从直觉编程到智能体工程化:人类角色从"打字员"转变为"需求定义者",AI智能体自主规划执行闭环任务 从单智能体到规范驱动开发:通过严格规范约束AI行为,确保代码一致性 从单智能体到多智能体协作:专业化AI团队分工完成复杂项目 核心转变是人类从代码执行者升级为系统架构师,精力从语法细节转向需求
2026-08-05 15:38:35
458
原创 04-vibe-coding-边界与风险
Vibe Coding是一种依赖AI生成代码的直觉式编程方法,在特定场景下能显著提升效率,但其适用性存在明显边界。四类舒适场景包括:原型开发(快速验证想法)、个人/学习项目(无协作压力)、探索性编程(假设驱动)和UI前端开发(即时视觉反馈)。这些场景的共同特点是容错率高、反馈周期短、试错成本低。 然而,在三大禁区中需谨慎或禁用Vibe Coding:生产环境核心系统(如金融交易)、安全敏感代码(如身份认证)以及多人协作的大型项目。这些场景对代码质量、安全性和可维护性要求极高,AI生成的代码可能存在隐蔽缺陷。
2026-08-05 15:36:30
143
原创 03-vibe-coding-工具生态与模型选择
摘要 2026年AI编程工具市场已从技术验证阶段进入工具选型阶段。本文提出两个关键分类维度:交互模式(对话式、IDE集成型、Agent工具、平台型Agent)和能力层级(L1代码补全到L5自主工程)。这两个维度交叉分析可帮助开发者精准选择工具。当前主流工具中,Claude Code等L3级Agent工具能自主执行任务,真正实现"凭感觉编程"(Vibe Coding),而L1-L2工具仍需开发者参与代码搬运。文章建议根据任务复杂度匹配工具层级,避免用低层级工具完成高层级工作。最后深入对比了Claude Cod
2026-08-05 15:33:52
225
原创 02-vibe-coding-核心原则与工作流
摘要: Vibe Coding(感觉驱动编程)强调开发者通过自然语言描述意图,由AI生成代码,但需遵循四大原则确保高效协作: 意图优先:明确效果与约束,减少AI猜测; 快速迭代:通过生成→测试→修正循环快速优化,依赖短反馈环提升效率; 信任但验证:关键逻辑(如安全、支付)需人工审查,避免隐蔽错误; 上下文经营:维护AI的背景信息(如项目约定、历史决策),保障输出质量。 与传统聊天式AI不同,Agent(如Claude Code)能自主执行多步操作(读写文件、运行命令),通过LLM Loop(思考→行动→观察
2026-08-05 15:32:25
307
原创 01-vibe-coding-起源与本质
摘要 Andrei Karpathy(OpenAI联合创始人、特斯拉前AI总监)提出的"Vibe Coding"概念在开发者社区引发热议。这种编程范式强调:1)凭整体感觉判断方向而非逐行检查代码;2)适应AI能力的指数级提升节奏;3)将代码视为中间产物而非终极目标。它颠覆了传统编程中"先学后用"的模式,转变为"边用边学",将开发者的核心能力从代码实现转向需求表达和产品判断。虽然存在"不需要技术"、"不验证结果"等误解,但实践表明Vibe Coding已能用于生产级应用开发。这一命名现象折射出AI时代程序员角
2026-08-05 15:26:58
434
原创 PRD 的工程化:从模糊需求到可验收交付
PRD不是简单的需求记录工具,而是消除模糊性、构造可执行工程约束的关键文档。本文揭示了PRD的本质在于将用户愿望(如"搜索功能")拆解为可验证的工程细节(如响应时间、匹配规则等),并构建了一套完整骨架:通过项目概述确立目标共识,用需求范围划定边界,以功能详述覆盖主流程/异常处理/业务规则,强调非功能性需求(性能/安全等)的量化标准,最终形成可测试的验收标准。文章还指出三大常见翻车场景(混淆解决方案与需求、忽视异常路径、缺乏变更追溯),并强调PRD应与研发流程明确分工——定义"做什么"而非"怎么做"。
2026-07-29 11:29:59
366
原创 AI 工程的五个层级:从 Prompt 到 Graph,一次完整的范式跃迁
2026年AI工程圈概念演进全景图 摘要: 本文系统梳理了2026年AI工程领域五大核心概念的递进关系:Prompt Engineering→Context Engineering→Harness Engineering→Loop Engineering→Graph Engineering。这五个概念不是并列关系,而是构成了一条从单次对话优化到多Agent协作的技术演进链。每个层级都在解决上一层的瓶颈问题,最终形成完整的Agent系统架构。文章通过计算机系统类比(CPU/RAM/操作系统)和工程实践案例,详
2026-07-28 15:26:59
385
原创 Anthropic 疯了?Opus 5 性能直逼自家旗舰 Fable 5,价格却砍一半
摘要:Anthropic在57天内密集更新了Claude系列产品线,最新发布的Opus 5以旗舰模型Fable 5一半的价格实现了相近性能,直接对标OpenAI的GPT-5.6 Sol。评测显示Opus 5在编程、陌生问题求解、商业自动化和科研等场景表现突出,尤其在工具缺失时能自主开发解决方案。该模型还具备生成交互式三维可视化内容的能力,同时保持了Claude系列最佳的安全对齐表现。这种"中端价格、旗舰性能"的产品策略,既挑战竞争对手也倒逼自身技术迭代,反映出AI行业加速内卷的竞争态势。(149字)
2026-07-25 11:17:49
384
原创 七轮死磕:首页定位始终显示北京,一个被 Redis 缓存“投毒“的全栈调试实录
项目背景:HalfCart 半仓智拼,一个基于 Vue 3 + FastAPI 的同城拼团电商系统,集成高德地图 SDK 提供定位与选点能力。问题现象:用户在长沙打开首页,左上角定位地址始终显示"北京市海淀区三里屯133号"。进入地图选点页面却能正确定位到长沙。调试耗时:7 轮迭代,横跨前端、后端、Docker、Redis 四个技术层。
2026-07-25 09:14:11
367
原创 为什么所有 AI 厂商都强制要求 POST?从 HTTP 底层协议说起
AI接口禁用GET请求传输Prompt文本的主要原因: 安全风险:GET请求参数会明文记录在URL、浏览器历史、服务器日志等多个环节,可能泄露敏感信息(如个人隐私、商业机密等)。 HTTP协议限制:主流浏览器和服务器对URL长度有严格限制(通常2KB-8KB),而AI Prompt往往包含长文本和多轮对话上下文,极易超出限制。 日志记录差异:POST请求的body内容默认不会被Nginx等服务器记录到访问日志中,而GET请求的完整URL会被明文记录。 行业实践:所有主流AI厂商(OpenAI、Google等
2026-07-23 15:34:45
273
原创 AI 知识库文件上传安全:后缀白名单与魔数双重校验实战
文件上传安全防御体系摘要(150字) AI知识库系统面临严重的文件上传安全风险,攻击者可通过修改文件后缀(如.php伪装为.pdf)绕过基础校验。有效的防御需采用纵深策略:①后缀白名单校验(仅允许PDF/DOCX等业务必需格式);②文件头魔数校验(检测%PDF-、PK..等真实格式标识);③存储隔离(禁用web目录脚本执行权限);④异步解析防护(限制PDF/Word解析库权限)。特别警惕多重后缀(shell.pdf.php)、空字节截断(shell.pdf%00.php)等绕过手段,通过Python的os.
2026-07-22 16:03:36
335
原创 SSE 协议与 AI 流式输出:从 HTTP 底层机制到前端打字机效果
SSE协议与AI流式交互技术解析 SSE(Server-Sent Events)是一种基于HTTP的长连接技术,被广泛应用于AI对话场景中实现逐字输出效果。与普通JSON接口相比,SSE通过保持HTTP连接不关闭,使服务器能持续推送数据块,而前端通过EventSource API实时接收并渲染这些数据块,形成打字机般的交互体验。 技术特点对比: 连接模型:SSE使用长连接持续推送,而普通JSON接口是短连接一次性响应 数据格式:SSE采用text/event-stream纯文本格式,通过特定字段结构组织数据
2026-07-18 08:00:00
326
原创 面试官问 GET 和 POST 的区别,千万别只说“参数位置不同”
HTTP 请求方法核心要点 HTTP 请求方法的本质差异源于 RFC 规范定义而非约定俗成。GET 方法语义是获取资源表示,规范未禁止携带请求体但不推荐;POST 方法语义更宽泛,处理目标资源数据。PUT 用于全量替换资源(幂等),PATCH 用于部分修改(通常非幂等)。RESTful 是一种架构风格而非强制标准。 GET 与 POST 的关键区别: 参数位置是工程惯例而非规范强制 GET 不安全源于信息暴露渠道多(URL 记录于浏览器历史、日志等) 缓存行为差异:GET 默认可缓存,POST 默认不可缓存
2026-07-17 10:58:09
484
原创 全家桶、乐高积木与类型引擎:重新认识 Django、Flask 与 FastAPI
本文分析了Python三大Web框架Flask、Django和FastAPI的核心差异:Django作为"全家桶"框架提供开箱即用的完整解决方案,遵循DRY原则;Flask作为微框架只提供基础功能,强调灵活性和可扩展性;FastAPI专注于高性能API开发,基于类型注解和异步处理。文章从设计哲学、请求处理模型(WSGI/ASGI)、路由机制等方面进行了技术对比,指出Django适合传统Web应用,Flask适用于需要高度定制的项目,而FastAPI在API开发领域具有性能优势。随着异步支持的演进,三个框架的
2026-07-17 10:27:37
844
原创 搞懂 This event loop is already running:Python asyncio 嵌套陷阱与三种解法
Python asyncio事件循环嵌套问题解析与解决方案 本文深入分析了Python asyncio事件循环嵌套问题,特别针对FastAPI服务集成异步脚本时常见的RuntimeError: This event loop is already running错误。文章首先解释了asyncio的协作式多任务调度机制和事件循环的工作原理,指出单线程内只能有一个运行中的事件循环这一核心约束。接着剖析了问题根源:asyncio.run()的防御性检查阻止了在已有运行循环的上下文中创建新循环。 文章提出了三种解决
2026-07-14 11:25:18
598
原创 Python list 与 numpy 数组:从内存布局到向量计算的底层差异
本文比较了Python原生列表(list)和NumPy数组(ndarray)在内存布局和计算性能上的根本差异。Python列表存储的是指向分散对象的指针数组,内存开销大且缓存不友好;而NumPy数组采用连续内存块存储统一类型数据,支持SIMD指令和高效缓存利用。性能测试表明,NumPy向量化运算比列表循环快30-100倍,特别适合大规模数值计算。这两种数据结构的选择本质上反映了灵活性与性能的权衡。
2026-07-14 11:19:40
297
原创 从 x86 到 ARM:深度解析 Python C 扩展与 AI 算子跨架构编译
文章摘要(149字): 在信创ARM服务器部署AI项目时,常见Illegal instruction错误源于x86预编译包与ARM指令集不兼容。解决方案分三步:优先安装PyPI已有的aarch64版本(如PyTorch);若遇依赖冲突,使用Ubuntu容器隔离环境;无预编译包时(如flash-attn),在外网交叉编译为whl后内网安装。关键痛点为小众AI库缺乏ARM适配,需注意SIMD指令集差异(ARM NEON≠x86 AVX)及BLAS库优化。避免裸机硬编译,容器化或离线移植更高效。
2026-07-13 15:30:00
359
原创 凌晨两点的报错:别让原生的 Python schedule 库拖垮你的 AI 知识库
摘要 在AI知识库系统中,定时同步脚本是核心组件,但原生Python的schedule库存在异常处理缺陷。文章分析指出: schedule库采用极简设计,任务执行时未捕获异常,导致单个任务失败会中断整个调度循环,甚至使进程崩溃。 提供了两种容错方案: 函数装饰器方案:通过@safe_task装饰器隔离每个任务的异常 类封装方案:通过BaseScheduledTask基类实现更复杂的任务状态管理和失败处理 特别强调记录完整堆栈信息(使用traceback.format_exc())对调试的重要性,尤其是在处理
2026-07-13 14:39:34
436
原创 服务器 64 核全开却跑不满?你可能忽略了 CPU 亲和性
摘要 本文探讨了Linux系统中CPU亲和性(CPU Affinity)的原理与应用。当多进程脚本在服务器上运行时,操作系统调度器(如CFS)可能导致进程频繁跨核心迁移,造成缓存失效和性能下降。文章详细分析了进程迁移的开销,包括上下文切换、缓存失效(L1/L2/L3)、TLB刷新以及伪共享问题,指出缓存失效是主要性能瓶颈。此外,还介绍了NUMA架构对内存访问延迟的影响。通过sched_setaffinity系统调用,可以绑定进程到指定CPU核心,避免跨核迁移,从而提升计算密集型任务(如AI训练)的性能。正确
2026-07-13 09:54:23
401
原创 从内存结构到 copy 模块源码:把 Python 深浅拷贝扒得底朝天
本文摘要: Python中的浅拷贝与深拷贝本质区别在于复制对象的层级深度。浅拷贝只复制最外层容器,内部元素仍共享引用;深拷贝则会递归复制所有嵌套对象,创建完全独立的副本。直接赋值仅创建新标签指向原对象。对于可变对象(如列表、字典),浅拷贝可能导致意外修改共享数据,而深拷贝能确保各层级独立。Python通过copy模块实现这些操作,其内部采用分派表优化常见类型的复制性能,并支持自定义__copy__和__deepcopy__方法。理解这些概念对避免数据共享引起的bug至关重要。
2026-07-10 19:25:21
287
原创 Python 跨平台踩坑:被 os.path 折磨后,我全面拥抱了 pathlib
本文对比了Python中路径处理的两大模块:传统函数式的os.path和现代面向对象的pathlib。os.path作为早期解决方案采用字符串拼接方式,存在API命名不一致等问题;而pathlib通过Path对象提供更直观的面向对象操作,支持路径运算符、模式匹配等特性。文章详细列举了两者在常见操作中的对比,特别强调了pathlib在跨平台处理、模式匹配和路径解析方面的优势,同时指出os.path在性能上的潜在优势。最后建议在AI项目中优先使用pathlib以提高代码可读性,但在性能敏感场景可考虑os.pat
2026-07-10 19:08:23
613
原创 Python argparse 知识点详解
本文介绍了Python标准库中的argparse模块,它可以帮助开发者轻松实现命令行参数解析功能。文章从实际场景出发,通过咖啡店点单的类比,解释了命令行参数的必要性。 主要内容包括: 四步创建命令行程序:创建解析器、添加参数、解析参数、使用参数 区分位置参数(必须按顺序)和可选参数(带短名/长名,顺序无关) add_argument()函数的详细参数解析: name/flags:定义参数名称 type:自动类型转换 default:设置默认值 required:使可选参数成为必选 文章通过多个实用示例,展示
2026-07-10 11:26:24
351
原创 HalfCart:基于LBS的1\.5km本地拼单系统全栈实践与踩坑复盘
摘要: HalfCart是一款基于LBS的1.5km本地拼单系统,旨在解决传统拼单场景中的信息过载、履约周期长等问题。项目采用轻量级架构,后端使用FastAPI+MySQL+Redis,前端采用多页面HTML+Vue3方案,快速实现MVP验证。核心技术包括:基于LLM的自然语言发单解析、高德LBS地理围栏与距离排序、统一鉴权体系。开发中踩坑包括第三方服务对接、多页面状态治理等,通过解耦职责、规范命名、Mock机制等解决。核心经验是技术选型需匹配业务阶段,MVP阶段优先效率而非架构复杂度。后续将优化交互体验、
2026-07-07 16:55:58
381
原创 TypeScript核心知识全解析
本文摘要: 《TypeScript 核心知识全解析》是一份从入门到实战的全面指南,系统介绍了 TypeScript 的核心概念和高级特性。文章首先阐述了学习 TypeScript 的必要性,它能显著减少代码错误并已成为现代前端开发的事实标准。然后深入讲解了类型系统两大核心机制:类型声明和类型推断,并提供了使用场景建议。接着展示了 TypeScript 的类型全景图,涵盖基础类型、新增类型、对象类型和自定义类型。文章重点解析了六大常用类型,特别是字面量类型的实战应用,展示了如何结合 React/Vue 等框架
2026-06-07 23:49:43
305
原创 轻阅小说阅读平台项目实战(附带全套资源代码)
轻阅小说平台架构复盘 本文总结了轻阅小说阅读平台的技术架构演进,重点分析了高并发异步设计与大模型防幻觉实践。主要亮点包括: 技术选型:采用FastAPI全异步架构+SQLAlchemy 2.0异步ORM,解决高频读场景的阻塞问题,搭配Pydantic实现严格数据校验。 架构设计:分层架构通过FastAPI依赖注入优雅解耦,全链路异步处理从数据库到外部API的请求,确保高并发性能。 核心实现: 精心设计的数据库会话管理机制,包含连接池保活、事务自动提交/回滚 异步生成器模式确保资源安全释放 全链路异步处理AI
2026-06-07 23:35:39
347
原创 一篇搞定Javascript中的数组,看不懂直接砍作者
书架上的书:每本书都有一个位置(第1本、第2本、第3本…)日历上的日期:1号、2号、3号…按顺序排列储物柜:每个柜子都有编号,你可以根据编号找到对应的柜子它是一组按顺序排列的数据集合,每个数据都有一个对应的索引(位置编号)。
2026-06-01 00:48:44
209
原创 Javascript中的对象
本文摘要: JavaScript对象是键值对的集合,是引用数据类型。创建对象有6种主要方式:1)对象字面量(最常用);2)new Object()构造函数;3)Object.create()基于原型创建;4)工厂函数返回对象;5)构造函数配合new关键字;6)ES6 Class语法糖。对象具有无序性、键为字符串/Symbol、值为任意类型、引用传递等特点。每种创建方式各有特点:字面量简洁高效,构造函数适合共享方法,Object.create()可创建纯净对象,ES6 Class提供了更清晰的面向对象语法。理
2026-05-25 00:03:37
457
原创 JavaScript 基础语法完全指南
本文介绍了JavaScript中的变量声明方式和基本数据类型。变量声明有三种方式:var(不推荐,存在变量提升和重复声明问题)、let(推荐,具有块级作用域)和const(推荐用于常量)。基本数据类型包括字符串(String)和数字(Number),字符串使用单引号、双引号或模板字符串表示,数字统一采用64位浮点数格式。文章还详细讲解了字符串常用方法和数字运算注意事项,如0.1+0.2的精度问题。建议默认使用const声明变量,仅在需要重新赋值时使用let,避免使用var。
2026-05-13 19:51:39
697
原创 Python中面向对象基础
Python面向对象编程基础摘要 本文系统讲解了Python面向对象编程(OOP)的核心概念和应用。主要内容包括: 基础概念:介绍了类(Class)作为对象模板、对象(Object)作为具体实例,以及封装、继承和多态三大特性。 类与对象:详细说明了如何定义类、创建对象,重点讲解了构造方法__init__和self参数的含义与用法。 属性详解:区分了类属性(所有对象共享)和实例属性(每个对象独立),并展示了动态添加属性的方法。 方法类型:介绍了三种方法: 实例方法(操作对象数据) 类方法(@classmeth
2026-05-12 10:11:47
522
原创 Python中的函数
本文全面介绍了Python函数的核心知识,包括函数基础概念、定义语法、参数详解和返回值处理。主要内容有:1) 函数的作用和分类(内置/自定义/匿名/高阶函数);2) 定义函数的语法和文档字符串规范;3) 参数类型详解(位置/关键字/默认参数,*args和**kwargs);4) 返回值处理(单值和多值返回)。文章通过大量代码示例展示了函数的各种用法,适合Python初学者系统学习函数编程。
2026-05-12 10:07:20
258
原创 前端入门必备:CSS基础知识详解
CSS基础知识完全指南摘要 CSS(层叠样式表)是用于描述HTML文档外观的样式语言,实现内容与样式分离。核心特性包括层叠性、继承性和优先级。CSS发展经历了CSS1到CSS3的演进,CSS3采用模块化设计。 CSS有三种引入方式:行内样式(优先级最高)、内部样式表和外部样式表(推荐使用)。选择器是CSS的核心,包括基础选择器(元素、类、ID、通配)和组合选择器(后代、子元素、兄弟等)。类选择器最常用,ID选择器优先级高但不推荐滥用。 掌握CSS基础知识是构建现代网页的基础,理解选择器、引入方式和核心特性对
2026-05-11 15:45:28
454
PyAutoGUI:跨平台 GUI 自动化的工程化指南(含可复用框架)
2025-12-24
Python网络爬虫-掌上高考-高校信息采集-包含图片下载-数据分析源码
2025-12-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅