被裁员玩了快一年了
当时还只是 codepilot 辅助编程,现在 ai 编程这么广泛先进,年后准备找工作了,想知道最近找工作的朋友,现在面试还是要刷题和背八股吗?面试有什么新的变化可以准备的吗
xiaohack博客专注前沿科技动态与实用技术干货分享,涵盖 AI 代理、大模型应用、编程工具、文档解析、SEO 实战、自动化部署等内容,提供开源项目教程、科技资讯日报、工具使用指南,助力开发者、AI 爱好者获取前沿技术与实战经验。
当时还只是 codepilot 辅助编程,现在 ai 编程这么广泛先进,年后准备找工作了,想知道最近找工作的朋友,现在面试还是要刷题和背八股吗?面试有什么新的变化可以准备的吗
Adobe Acrobat Pro DC 2025 是一款专门用于PDF阅读以及编辑的办公辅助软件。它将全球最佳的PDF解决方案提升到新的高度,配有直观触控式界面,通过开发强大的新功能,为用户工作带来许多的便利。 解压安装包: 找到下载的安装包文件,右键点击 → 选择【解压到当前文件夹】(建议解压至非系统盘,如D盘,避免C盘空间不足)。 进入安装目录: 解压完成后,双击打开生成的文件夹(如“Acrobat2022”),找到并打开【setup】子文件夹。 启动安装程序: 在setup文件夹中,右键点击【setup.exe】→ 选择【以管理员身份运行】(管理员权限可避免安装路径写入失败或权限报错)。 选择安装模式: 弹出安装向导后,点击【自定义安装】(若无需修改路径,可直接点击【安装】,跳过后续路径设置步骤)。 修改安装路径(关键) : 开始安装: 确认路径无误后,点击【安装】,等待进度条完成(期间勿关闭窗口,耗时约3-8分钟,取决于电脑性能)。 完成主程序安装: 进度条满格后,点击【完成】(此时主程序已安装至指定路径,但尚未激活)。 准备补丁: 返回最初的安装包解压文件夹,找到【crack】子文件夹并打开。 处理杀毒拦截: 复制补丁文件: 选中crack文件夹内的补丁(通常为.exe或.dll文件),按 定位软件安装目录: 在桌面找到“Adobe Acrobat”快捷方式,右键点击 → 选择【打开文件所在的位置】(自动跳转至主程序安装路径,如 粘贴并运行补丁: 完成激活: 在补丁运行窗口中,点击【应用】→ 等待提示“成功”后,点击【退出】。 双击桌面“Adobe Acrobat”图标启动软件,若能正常打开且无激活提示,说明安装成功。 一、准备工作
二、安装主程序
D:\Program Files\Adobe\Acrobat2022);三、激活(关键步骤)
Ctrl+C复制。D:\Program Files\Adobe\Acrobat2022)。Ctrl+V粘贴补丁文件,若提示“是否替换目标文件”,点击【继续】;四、验证与使用
下载安装包 准备服务器环境 确认环境要求 解压工具 上传文件到服务器 设置目录权限 在服务器上给这些目录可写权限: 创建数据库 开始安装 安装完成后的收尾 Discuz_X1.5_SC_UTF8.zip是 Discuz! X1.5 简体中文 UTF-8 版本 的压缩包,这是国内很老牌的论坛程序,用来搭 BBS 社区,装好之后你就能有自己的论坛。一、准备工作
Discuz_X1.5_SC_UTF8.zip,注意是 SC(简体) 和 UTF-8(编码) ,别下错成繁体或 GBK 版。.htaccess(Apache)或 Nginx 伪静态规则。upload目录,里面才是网站文件。二、部署步骤
upload目录里的所有文件传到你的网站根目录(比如 /www/wwwroot/bbs/)。http://你的域名/或 http://你的IP/。configdatauc_client/datauc_server/datadiscuz_bbs。http://你的域名/install/。pre_就行。install目录(防止别人再次安装)。
安装其实很简单,下面用大白话一步步说,跟着做就能跑起来。 下载 OllyDbg 确认系统版本 用管理员身份运行(推荐) 如果是安装版 如果是绿色版(压缩包) 创建快捷方式(可选) 打开 OllyDbg: 加载程序调试 常用操作 保存工作 Ollydbg是 OllyDbg 调试工具 的主程序文件,它是 Windows 平台上一款经典的动态调试器,主要用来分析、调试 EXE、DLL 这类可执行文件,改代码、查漏洞、逆向分析都会用到。一、准备工作
Ollydbg.exe或安装包 → 选“以管理员身份运行”,避免权限不足打不开。二、安装步骤
ollydbg_setup.exe)→ 选语言(一般只有英文)→ 点 “Next”。C:\Program Files\OllyDbg或类似路径)→ 点 “Next”。D:\Tools\OllyDbg。Ollydbg.exe双击就能运行,不需要安装。Ollydbg.exe→ 发送到 → 桌面快捷方式,以后找起来方便。三、首次运行与基本使用
Ollydbg.exe或桌面快捷方式,第一次打开是空的主界面。
持有 10K token 的用户数第一次来到 1000 。
截图中对比的是 0218 和 0114 的一些数据( 0114 算是今年的一个 local high )。
很高兴无论市场状况如何,愿意尝试 Solana 的 V2EX 用户一直在增长。

📰 内容说明:本文为 AI 资讯摘要与编辑评论,所有内容均已标注原文链接。如涉及版权问题请联系处理。
今天 AI 圈的焦点是谷歌 Gemini 正式上线音乐生成功能,背后的 Lyria 3 模型希望能与 Suno 一较高下,但初步体验反馈喜忧参半。同时,AI Agent 的安全问题再次被推上风口浪尖,无论是学术界对“僵尸 Agent”的担忧,还是开源项目 OpenClaw 引发的系统权限泄露讨论,都提醒我们对 AI 自治能力的警惕。此外,AI 对写作、内容消费和信息生态的深远影响,也引发了社区的广泛热议。
核心信息:Google Gemini 整合 DeepMind 的 Lyria 3 模型,用户现可通过文本、图片或视频描述生成 30 秒的原创音轨、歌词及封面图,支持多语言。
💡 编辑观点: 这是谷歌在多模态领域的又一重要布局,其庞大的用户基础可能迅速改变 AI 音乐的市场格局。然而,30 秒的时长限制和早期用户反馈显示,与 Suno、Udio 等专业平台相比,Gemini 的定位更偏向娱乐化和轻量级应用。其内置版权和水印机制值得关注,但也揭示了 AI 音乐版权合规化的挑战。
📎 查看完整报道 | 来源: twitter-宝玉
核心信息:OpenAI 团队的 RAG(检索增强生成)医疗助手 DR. INFO,在 HealthBench 基准测试中表现出色,在沟通、指令遵循和准确性方面优于 GPT-5 家族、Grok 3 等领先 LLM。
💡 编辑观点: 医疗 AI 对准确性和安全性要求极高,HealthBench 作为一个以专家标注、开放式对话为核心的评估标准,为 AI 医疗助手的实际能力提供了更真实的检验。DR. INFO 的优秀表现预示着 RAG 技术在增强 LLM 专业领域可靠性上的巨大潜力,但也提醒我们对 AI 在复杂临床情景中的“上下文感知”和“完整性”仍需谨慎。
📎 查看完整报道 | 来源: arXiv:2509.02594v2
核心信息:Rebrain.gg 旨在将“无目的刷屏”转化为微学习,但因产品 bug、交互体验及 AI 生成内容可靠性等问题在社区引发广泛讨论。
💡 编辑观点: 这款产品触及了 AI 时代一个核心痛点:如何对抗信息过载和“多巴胺式”的内容消费。然而,它也暴露了 AI 辅助学习应用在用户体验和内容质量控制上的挑战。如果 AI 生成内容不能保证绝对准确,那么在教育领域引入 AI 工具时,就必须慎之又慎,避免“认知债”的产生。
📎 查看完整报道 | 来源: News Hacker | 极客洞察
AI 对写作的影响已不仅仅是效率提升,更是深入到我们认知方式和社会价值判断的层面。
💡 编辑观点: AI 正在加速内容生产的“快餐化”,让大量标准、易消化的信息充斥网络,挤压了深度思考和原创写作的空间。虽然顶尖的深度内容仍有付费市场,但对于教育和批判性思维的培养无疑是巨大的挑战。我们必须警惕“认知债”的积累,不能让 AI 成为思维的替代品,而应是其放大器。
📎 深度报道
X(原 Twitter)的算法调整,已经不只是技术迭代,更是深远地影响了用户政治态度和社会信息传播格局。
💡 编辑观点: 这个案例再次证明了平台算法的巨大社会影响力。当算法以最大化参与度为目标时,往往会放大争议性、煽动性的内容,导致信息茧房和极化。更令人担忧的是,平台所有权和内容审查政策的变化,能够直接驱动用户群体迁徙,从而结构性地改变公众舆论。这不仅是对信息民主的挑战,也迫使我们重新审视技术公司在公共领域扮演的角色及其责任。
📎 深度报道
随着 AI Agent 能够调用本地工具、执行复杂任务,其安全漏洞被放大的风险也日益凸显。
💡 编辑观点: 将 LLM Agent 与系统权限结合,就像把一个高智能但仍可能被“忽悠”的孩子单独留在装满危险工具的房间里。Prompt injection 等攻击方式一旦成功,可能导致数据泄露、账户劫持甚至系统破坏。尽管有隔离运行、分层执行等缓解策略,但其操作复杂性远超普通用户理解范围。这不仅考验 AI 安全技术,更呼唤行业建立更严格的责任与问责机制,避免技术普及走在安全防护和用户教育之前。
📎 深度报道
这是什么操作,www.gogogolian.net => 43.162.244.14 ,是国家队还是过备案
已经是 2 月 19 日了,之前因为使用 openclaw 或者 opencode 反代理 antigravity 被封禁的有没有申诉成功的,解封的啊?
真的是匪夷所思! 这样的大公司做出来的产品居然连这么基本的事情都能搞砸! 我数十条对话记录一夜之间就突然消失了!
网上也有许多相同的遭遇的记录, 大家都愤怒但是毫无办法。 Google 至今没有给合理解释和解决方案。
让我想起之前的 Google read, Google+ 等等众多产品。 这真是一个可怕而糟糕的公司
大型 Python 项目的架构设计需要考虑可维护性、可扩展性和可测试性。本文将深入探讨大型项目的模块化设计和依赖注入实践,帮助读者构建健壮、灵活的 Python 应用架构。 模块化设计是大型项目架构的基础,它将复杂系统分解为可管理的模块。 分层架构将系统按职责划分为不同的层次,每层只与相邻层交互。 依赖注入是一种实现控制反转的技术,它将依赖对象的创建和使用分离。 依赖注入容器负责管理和解析依赖关系。 模块间的通信机制决定了系统的耦合度和可维护性。 配置管理是大型项目的重要组成部分。 插件系统提供了灵活的扩展机制。 中间件模式提供了请求处理的扩展点。 服务发现机制支持动态服务注册和查找。 统一的错误处理机制提高了系统的健壮性。 完善的日志系统对于大型项目的调试和监控至关重要。 全面的测试策略确保了系统的质量。 大型 Python 项目的架构设计需要综合考虑模块化、依赖注入、分层架构等多个方面。通过合理的设计模式和实践,我们可以构建出可维护、可扩展、可测试的大型应用系统。 掌握这些架构设计原则和实践,对于开发高质量的 Python 应用至关重要。在实际项目中,需要根据具体的业务需求和技术约束,灵活应用这些设计理念。大型 Python 项目架构:模块化与依赖注入实践
模块化设计原则
class Module:
def __init__(self, name):
self.name = name
self.dependencies = []
def add_dependency(self, module):
self.dependencies.append(module)
def initialize(self):
print(f"初始化模块: {self.name}")
for dep in self.dependencies:
dep.initialize()
def modular_design_demo():
print("模块化设计演示:")
database_module = Module("数据库模块")
auth_module = Module("认证模块")
api_module = Module("API 模块")
api_module.add_dependency(database_module)
api_module.add_dependency(auth_module)
api_module.initialize()
modular_design_demo()分层架构
class DataLayer:
def save(self, data):
print(f"保存数据: {data}")
return True
class BusinessLayer:
def __init__(self, data_layer):
self.data_layer = data_layer
def process(self, data):
processed_data = f"处理后的 {data}"
return self.data_layer.save(processed_data)
class PresentationLayer:
def __init__(self, business_layer):
self.business_layer = business_layer
def handle_request(self, request):
return self.business_layer.process(request)
def layered_architecture_demo():
print("分层架构演示:")
data_layer = DataLayer()
business_layer = BusinessLayer(data_layer)
presentation_layer = PresentationLayer(business_layer)
result = presentation_layer.handle_request("用户数据")
print(f"处理结果: {result}")
layered_architecture_demo()依赖注入基础
class Database:
def query(self, sql):
return f"查询结果: {sql}"
class Service:
def __init__(self, database):
self.database = database
def get_data(self):
return self.database.query("SELECT * FROM users")
def dependency_injection_demo():
print("依赖注入演示:")
database = Database()
service = Service(database)
result = service.get_data()
print(result)
dependency_injection_demo()依赖注入容器
class Container:
def __init__(self):
self._services = {}
self._factories = {}
def register(self, name, factory):
self._factories[name] = factory
def get(self, name):
if name not in self._services:
self._services[name] = self._factories[name](self)
return self._services[name]
def container_demo():
print("依赖注入容器演示:")
container = Container()
container.register('database', lambda c: Database())
container.register('service', lambda c: Service(c.get('database')))
service = container.get('service')
result = service.get_data()
print(result)
container_demo()项目架构设计
模块通信机制
class EventBus:
def __init__(self):
self._subscribers = {}
def subscribe(self, event_type, handler):
if event_type not in self._subscribers:
self._subscribers[event_type] = []
self._subscribers[event_type].append(handler)
def publish(self, event_type, data):
if event_type in self._subscribers:
for handler in self._subscribers[event_type]:
handler(data)
def event_bus_demo():
print("事件总线演示:")
event_bus = EventBus()
def handler1(data):
print(f"处理器1收到: {data}")
def handler2(data):
print(f"处理器2收到: {data}")
event_bus.subscribe("user_created", handler1)
event_bus.subscribe("user_created", handler2)
event_bus.publish("user_created", {"name": "张三"})
event_bus_demo()配置管理
class Config:
def __init__(self):
self._config = {}
def set(self, key, value):
self._config[key] = value
def get(self, key, default=None):
return self._config.get(key, default)
def load_from_dict(self, config_dict):
self._config.update(config_dict)
def config_management_demo():
print("配置管理演示:")
config = Config()
config.load_from_dict({
"database": {
"host": "localhost",
"port": 5432
},
"debug": True
})
print(f"数据库主机: {config.get('database', {}).get('host')}")
print(f"调试模式: {config.get('debug')}")
config_management_demo()插件系统
class Plugin:
def initialize(self):
pass
def execute(self, data):
pass
class PluginManager:
def __init__(self):
self._plugins = []
def register_plugin(self, plugin):
self._plugins.append(plugin)
plugin.initialize()
def execute_all(self, data):
results = []
for plugin in self._plugins:
result = plugin.execute(data)
results.append(result)
return results
def plugin_system_demo():
print("插件系统演示:")
class LoggingPlugin(Plugin):
def initialize(self):
print("日志插件初始化")
def execute(self, data):
print(f"记录日志: {data}")
return data
class ValidationPlugin(Plugin):
def initialize(self):
print("验证插件初始化")
def execute(self, data):
print(f"验证数据: {data}")
return data
manager = PluginManager()
manager.register_plugin(LoggingPlugin())
manager.register_plugin(ValidationPlugin())
manager.execute_all({"name": "测试数据"})
plugin_system_demo()中间件模式
class Middleware:
def __init__(self):
self.next_middleware = None
def set_next(self, middleware):
self.next_middleware = middleware
return middleware
def handle(self, request):
if self.next_middleware:
return self.next_middleware.handle(request)
return request
class LoggingMiddleware(Middleware):
def handle(self, request):
print(f"日志中间件: {request}")
return super().handle(request)
class AuthMiddleware(Middleware):
def handle(self, request):
print(f"认证中间件: {request}")
return super().handle(request)
def middleware_pattern_demo():
print("中间件模式演示:")
logging = LoggingMiddleware()
auth = AuthMiddleware()
logging.set_next(auth)
result = logging.handle({"user": "admin"})
print(f"最终结果: {result}")
middleware_pattern_demo()服务发现
class ServiceRegistry:
def __init__(self):
self._services = {}
def register(self, name, address):
if name not in self._services:
self._services[name] = []
self._services[name].append(address)
def discover(self, name):
return self._services.get(name, [])
def service_discovery_demo():
print("服务发现演示:")
registry = ServiceRegistry()
registry.register("user-service", "localhost:8001")
registry.register("user-service", "localhost:8002")
registry.register("order-service", "localhost:8003")
user_services = registry.discover("user-service")
print(f"用户服务: {user_services}")
order_services = registry.discover("order-service")
print(f"订单服务: {order_services}")
service_discovery_demo()错误处理
class ErrorHandler:
def __init__(self):
self._handlers = {}
def register_handler(self, exception_type, handler):
self._handlers[exception_type] = handler
def handle(self, exception):
exception_type = type(exception)
if exception_type in self._handlers:
return self._handlers[exception_type](exception)
return f"未处理的异常: {exception}"
def error_handling_demo():
print("错误处理演示:")
handler = ErrorHandler()
def handle_value_error(e):
return f"值错误: {e}"
def handle_key_error(e):
return f"键错误: {e}"
handler.register_handler(ValueError, handle_value_error)
handler.register_handler(KeyError, handle_key_error)
print(handler.handle(ValueError("无效的值")))
print(handler.handle(KeyError("未找到键")))
error_handling_demo()日志系统
import logging
from logging.handlers import RotatingFileHandler
class Logger:
def __init__(self, name, log_file):
self.logger = logging.getLogger(name)
self.logger.setLevel(logging.INFO)
handler = RotatingFileHandler(log_file, maxBytes=1024*1024, backupCount=5)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
self.logger.addHandler(handler)
def info(self, message):
self.logger.info(message)
def error(self, message):
self.logger.error(message)
def logging_system_demo():
print("日志系统演示:")
logger = Logger("app", "app.log")
logger.info("应用启动")
logger.error("发生错误")
print("日志已记录到 app.log")
logging_system_demo()测试策略
import unittest
class Calculator:
def add(self, a, b):
return a + b
def subtract(self, a, b):
return a - b
class TestCalculator(unittest.TestCase):
def setUp(self):
self.calculator = Calculator()
def test_add(self):
self.assertEqual(self.calculator.add(2, 3), 5)
def test_subtract(self):
self.assertEqual(self.calculator.subtract(5, 3), 2)
def testing_strategy_demo():
print("测试策略演示:")
suite = unittest.TestLoader().loadTestsFromTestCase(TestCalculator)
runner = unittest.TextTestRunner(verbosity=2)
runner.run(suite)
testing_strategy_demo()总结
FastAPI 是现代 Python Web 开发的热门选择,它基于 Starlette 和 Pydantic 构建,提供了高性能和开发效率的完美平衡。本文将深入剖析 FastAPI 的底层原理,从异步处理机制到性能优化策略,帮助读者全面理解 FastAPI 的高性能实现。 FastAPI 的架构设计充分利用了 Python 的异步特性,通过 ASGI 协议实现高性能的 Web 服务。 ASGI(Asynchronous Server Gateway Interface)是 FastAPI 高性能的基础,它支持异步请求处理。 FastAPI 的路由处理完全基于异步机制,能够高效处理大量并发请求。 FastAPI 的依赖注入系统是其核心特性之一,提供了灵活的组件管理和代码复用机制。 FastAPI 使用 Pydantic 进行请求验证和响应序列化,确保数据的安全性和一致性。 FastAPI 的中间件机制提供了请求/响应处理的扩展点,可以用于日志、认证、CORS 等功能。 FastAPI 可以与异步数据库驱动配合使用,实现高性能的数据库操作。 FastAPI 原生支持 WebSocket,可以实现实时的双向通信。 FastAPI 提供了多种性能优化策略,可以进一步提升应用性能。 FastAPI 可以高效处理大量并发请求,这是其高性能的核心体现。 完善的错误处理和日志记录是构建健壮 Web 应用的关键。 FastAPI 的高性能源于其基于 ASGI 的异步架构、高效的依赖注入系统、强大的请求验证机制以及灵活的中间件支持。通过深入理解这些底层原理,开发者可以更好地利用 FastAPI 构建高性能的 Web 应用。 掌握 FastAPI 的异步处理、数据库操作、WebSocket 支持、性能优化等核心技术,对于构建现代、高效的 Python Web 应用至关重要。FastAPI 不仅是开发工具,更是现代 Python Web 开发的最佳实践体现。异步 Web 框架底层:FastAPI 高性能原理剖析
FastAPI 架构概览
from fastapi import FastAPI
import uvicorn
app = FastAPI()
@app.get("/")
async def read_root():
return {"message": "Hello World"}
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)ASGI 协议基础
import asyncio
async def asgi_app(scope, receive, send):
if scope['type'] == 'http':
await send({
'type': 'http.response.start',
'status': 200,
'headers': [[b'content-type', b'text/plain']],
})
await send({
'type': 'http.response.body',
'body': b'Hello from ASGI!',
})
async def test_asgi():
scope = {
'type': 'http',
'method': 'GET',
'path': '/',
}
async def receive():
return {'type': 'http.request', 'body': b''}
messages = []
async def send(message):
messages.append(message)
await asgi_app(scope, receive, send)
print("ASGI 响应:", messages)
asyncio.run(test_asgi())异步路由处理
from fastapi import FastAPI, BackgroundTasks
import asyncio
app = FastAPI()
@app.get("/sync")
def sync_endpoint():
import time
time.sleep(1)
return {"message": "同步响应"}
@app.get("/async")
async def async_endpoint():
await asyncio.sleep(1)
return {"message": "异步响应"}
@app.post("/background")
async def background_task(background_tasks: BackgroundTasks):
def process_data():
import time
time.sleep(2)
print("后台任务完成")
background_tasks.add_task(process_data)
return {"message": "任务已提交"}
def demonstrate_async_routing():
print("异步路由处理演示:")
print("1. 同步端点会阻塞事件循环")
print("2. 异步端点可以并发处理")
print("3. 后台任务不阻塞响应")
demonstrate_async_routing()FastAPI 性能架构
依赖注入机制
from fastapi import FastAPI, Depends, HTTPException
from typing import Optional
app = FastAPI()
async def get_db():
print("获取数据库连接")
yield {"connection": "db_connection"}
print("关闭数据库连接")
async def get_current_user(token: Optional[str] = None):
if not token:
raise HTTPException(status_code=401, detail="未授权")
return {"user_id": 1, "username": "test_user"}
@app.get("/users/me")
async def read_users_me(current_user: dict = Depends(get_current_user)):
return current_user
@app.get("/items/")
async def read_items(db: dict = Depends(get_db)):
return {"db": db, "items": []}
def demonstrate_dependency_injection():
print("依赖注入演示:")
print("1. 依赖自动解析和注入")
print("2. 支持异步依赖")
print("3. 依赖缓存和复用")
print("4. 嵌套依赖支持")
demonstrate_dependency_injection()请求验证与序列化
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel, Field
from typing import List
app = FastAPI()
class Item(BaseModel):
name: str = Field(..., min_length=1, max_length=50)
description: Optional[str] = None
price: float = Field(..., gt=0)
tax: Optional[float] = None
class User(BaseModel):
username: str
email: str
items_db = []
@app.post("/items/", response_model=Item)
async def create_item(item: Item):
item_dict = item.dict()
item_dict["id"] = len(items_db) + 1
items_db.append(item_dict)
return item
@app.get("/items/", response_model=List[Item])
async def read_items():
return items_db
def demonstrate_validation():
print("请求验证演示:")
valid_item = Item(name="测试商品", price=99.99)
print(f"有效商品: {valid_item}")
try:
invalid_item = Item(name="", price=-10)
except Exception as e:
print(f"无效商品错误: {e}")
demonstrate_validation()中间件机制
from fastapi import FastAPI, Request
import time
app = FastAPI()
@app.middleware("http")
async def add_process_time_header(request: Request, call_next):
start_time = time.time()
response = await call_next(request)
process_time = time.time() - start_time
response.headers["X-Process-Time"] = str(process_time)
return response
@app.get("/")
async def read_root():
return {"message": "Hello World"}
def demonstrate_middleware():
print("中间件演示:")
print("1. 请求前处理")
print("2. 调用下一个处理器")
print("3. 响应后处理")
print("4. 支持多个中间件")
demonstrate_middleware()异步数据库操作
import asyncio
from typing import List, Dict
class AsyncDatabase:
def __init__(self):
self.data: Dict[int, Dict] = {}
self.next_id = 1
async def create(self, item: Dict) -> Dict:
await asyncio.sleep(0.01)
item_id = self.next_id
item["id"] = item_id
self.data[item_id] = item
self.next_id += 1
return item
async def get(self, item_id: int) -> Dict:
await asyncio.sleep(0.01)
return self.data.get(item_id)
async def get_all(self) -> List[Dict]:
await asyncio.sleep(0.01)
return list(self.data.values())
async def demonstrate_async_db():
print("异步数据库演示:")
db = AsyncDatabase()
item1 = await db.create({"name": "商品1", "price": 100})
print(f"创建商品: {item1}")
item2 = await db.create({"name": "商品2", "price": 200})
print(f"创建商品: {item2}")
retrieved = await db.get(item1["id"])
print(f"获取商品: {retrieved}")
all_items = await db.get_all()
print(f"所有商品: {all_items}")
asyncio.run(demonstrate_async_db())WebSocket 支持
from fastapi import FastAPI, WebSocket
app = FastAPI()
@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
await websocket.accept()
try:
while True:
data = await websocket.receive_text()
await websocket.send_text(f"收到消息: {data}")
except Exception as e:
print(f"WebSocket 错误: {e}")
finally:
await websocket.close()
def demonstrate_websocket():
print("WebSocket 演示:")
print("1. 建立连接")
print("2. 接收消息")
print("3. 发送响应")
print("4. 保持连接")
demonstrate_websocket()性能优化策略
import asyncio
from functools import lru_cache
class CacheManager:
def __init__(self):
self.cache = {}
async def get(self, key: str):
return self.cache.get(key)
async def set(self, key: str, value, ttl: int = 60):
self.cache[key] = value
@lru_cache(maxsize=100)
def cached_computation(self, n: int):
return sum(i * i for i in range(n))
async def demonstrate_optimization():
print("性能优化演示:")
cache = CacheManager()
await cache.set("key1", "value1")
value = await cache.get("key1")
print(f"缓存值: {value}")
result = cache.cached_computation(1000)
print(f"计算结果: {result}")
result2 = cache.cached_computation(1000)
print(f"缓存结果: {result2}")
asyncio.run(demonstrate_optimization())并发请求处理
import asyncio
import time
async def handle_request(request_id: int):
await asyncio.sleep(0.1)
return f"响应 {request_id}"
async def demonstrate_concurrency():
print("并发处理演示:")
start = time.time()
tasks = [handle_request(i) for i in range(100)]
results = await asyncio.gather(*tasks)
elapsed = time.time() - start
print(f"处理 100 个请求耗时: {elapsed:.2f}秒")
print(f"平均每个请求: {elapsed/100:.4f}秒")
print(f"并发性能: {100/elapsed:.1f} 请求/秒")
asyncio.run(demonstrate_concurrency())错误处理和日志
from fastapi import FastAPI, HTTPException, Request
from fastapi.responses import JSONResponse
import logging
app = FastAPI()
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
@app.exception_handler(Exception)
async def global_exception_handler(request: Request, exc: Exception):
logger.error(f"未处理的异常: {exc}")
return JSONResponse(
status_code=500,
content={"detail": "内部服务器错误"}
)
@app.get("/items/{item_id}")
async def read_item(item_id: int):
if item_id < 0:
raise HTTPException(status_code=400, detail="无效的商品 ID")
if item_id > 1000:
raise ValueError("商品不存在")
return {"item_id": item_id, "name": f"商品 {item_id}"}
def demonstrate_error_handling():
print("错误处理演示:")
print("1. 全局异常处理器")
print("2. HTTP 异常")
print("3. 自定义异常")
print("4. 日志记录")
demonstrate_error_handling()总结
设计模式是软件工程中的最佳实践,Python 作为一门灵活的语言,为各种设计模式的实现提供了优雅的语法支持。本文将通过实际场景深入讲解 23 种设计模式在 Python 中的落地应用,帮助读者掌握设计模式的实际运用。 创建型模式关注对象的创建过程,提供了灵活的对象创建机制。 单例模式确保一个类只有一个实例,并提供全局访问点。 工厂方法模式定义创建对象的接口,让子类决定实例化哪个类。 抽象工厂模式提供创建相关或依赖对象的接口,无需指定具体类。 建造者模式将复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。 原型模式通过复制现有对象来创建新对象,提高创建效率。 结构型模式关注类和对象的组合,形成更大的结构。 适配器模式将一个类的接口转换成客户希望的另一个接口。 桥接模式将抽象与实现分离,使它们可以独立变化。 组合模式将对象组合成树形结构以表示"部分-整体"的层次结构。 装饰器模式动态地给对象添加额外的职责。 外观模式为子系统中的一组接口提供一个一致的界面。 享元模式运用共享技术有效地支持大量细粒度的对象。 代理模式为其他对象提供一种代理以控制对这个对象的访问。 行为型模式关注对象之间的通信和职责分配。 责任链模式使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。 命令模式将请求封装为对象,从而可用不同的请求对客户进行参数化。 迭代器模式提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。 中介者模式用一个中介对象来封装一系列的对象交互。 备忘录模式在不破坏封装性的前提下,捕获一个对象的内部状态。 观察者模式定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知。 状态模式允许一个对象在其内部状态改变时改变它的行为。 策略模式定义一系列算法,把它们一个个封装起来,并且使它们可相互替换。 模板方法模式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。 访问者模式表示一个作用于某对象结构中的各元素的操作。 23 种设计模式在 Python 中的实现体现了面向对象设计的精髓。通过实际场景的落地应用,我们可以更好地理解每种模式的适用场景和实现方式。 掌握设计模式不仅能够提高代码的可维护性和可扩展性,还能帮助开发者更好地理解和应用面向对象设计原则。在实际项目中,合理使用设计模式可以大大提高代码质量和开发效率。Python 设计模式实战:23 种模式场景化落地
创建型模式
单例模式
class Singleton:
_instance = None
def __new__(cls):
if cls._instance is None:
cls._instance = super().__new__(cls)
cls._instance.initialized = False
return cls._instance
def __init__(self):
if not self.initialized:
self.value = 0
self.initialized = True
def singleton_demo():
print("单例模式演示:")
s1 = Singleton()
s2 = Singleton()
print(f"s1 is s2: {s1 is s2}")
print(f"s1.value: {s1.value}")
s1.value = 100
print(f"s2.value: {s2.value}")
singleton_demo()工厂方法模式
from abc import ABC, abstractmethod
class Animal(ABC):
@abstractmethod
def make_sound(self):
pass
class Dog(Animal):
def make_sound(self):
return "汪汪"
class Cat(Animal):
def make_sound(self):
return "喵喵"
class AnimalFactory:
@staticmethod
def create_animal(animal_type):
if animal_type == "dog":
return Dog()
elif animal_type == "cat":
return Cat()
else:
raise ValueError("未知的动物类型")
def factory_method_demo():
print("工厂方法模式演示:")
dog = AnimalFactory.create_animal("dog")
cat = AnimalFactory.create_animal("cat")
print(f"狗叫声: {dog.make_sound()}")
print(f"猫叫声: {cat.make_sound()}")
factory_method_demo()抽象工厂模式
from abc import ABC, abstractmethod
class Button(ABC):
@abstractmethod
def render(self):
pass
class Checkbox(ABC):
@abstractmethod
def render(self):
pass
class WindowsButton(Button):
def render(self):
return "Windows 按钮"
class WindowsCheckbox(Checkbox):
def render(self):
return "Windows 复选框"
class MacButton(Button):
def render(self):
return "Mac 按钮"
class MacCheckbox(Checkbox):
def render(self):
return "Mac 复选框"
class GUIFactory(ABC):
@abstractmethod
def create_button(self):
pass
@abstractmethod
def create_checkbox(self):
pass
class WindowsFactory(GUIFactory):
def create_button(self):
return WindowsButton()
def create_checkbox(self):
return WindowsCheckbox()
class MacFactory(GUIFactory):
def create_button(self):
return MacButton()
def create_checkbox(self):
return MacCheckbox()
def abstract_factory_demo():
print("抽象工厂模式演示:")
windows_factory = WindowsFactory()
mac_factory = MacFactory()
print(f"Windows: {windows_factory.create_button().render()}, {windows_factory.create_checkbox().render()}")
print(f"Mac: {mac_factory.create_button().render()}, {mac_factory.create_checkbox().render()}")
abstract_factory_demo()建造者模式
class Computer:
def __init__(self):
self.cpu = None
self.memory = None
self.storage = None
def __str__(self):
return f"CPU: {self.cpu}, 内存: {self.memory}, 存储: {self.storage}"
class ComputerBuilder:
def __init__(self):
self.computer = Computer()
def set_cpu(self, cpu):
self.computer.cpu = cpu
return self
def set_memory(self, memory):
self.computer.memory = memory
return self
def set_storage(self, storage):
self.computer.storage = storage
return self
def build(self):
return self.computer
def builder_demo():
print("建造者模式演示:")
computer = (ComputerBuilder()
.set_cpu("Intel i7")
.set_memory("16GB")
.set_storage("512GB SSD")
.build())
print(f"配置的电脑: {computer}")
builder_demo()原型模式
import copy
class Prototype:
def __init__(self, value):
self.value = value
def clone(self):
return copy.deepcopy(self)
def prototype_demo():
print("原型模式演示:")
original = Prototype("原始对象")
cloned = original.clone()
print(f"原始对象: {original.value}")
print(f"克隆对象: {cloned.value}")
print(f"是否相同: {original is cloned}")
prototype_demo()结构型模式
适配器模式
class Target:
def request(self):
return "目标接口"
class Adaptee:
def specific_request(self):
return "特定接口"
class Adapter(Target):
def __init__(self, adaptee):
self.adaptee = adaptee
def request(self):
return self.adaptee.specific_request()
def adapter_demo():
print("适配器模式演示:")
adaptee = Adaptee()
adapter = Adapter(adaptee)
print(f"适配器请求: {adapter.request()}")
adapter_demo()桥接模式
class DrawingAPI:
def draw_circle(self, x, y, radius):
pass
class DrawingAPI1(DrawingAPI):
def draw_circle(self, x, y, radius):
return f"API1 绘制圆形: ({x}, {y}), 半径: {radius}"
class DrawingAPI2(DrawingAPI):
def draw_circle(self, x, y, radius):
return f"API2 绘制圆形: ({x}, {y}), 半径: {radius}"
class Shape:
def __init__(self, drawing_api):
self.drawing_api = drawing_api
def draw(self):
pass
class Circle(Shape):
def __init__(self, x, y, radius, drawing_api):
super().__init__(drawing_api)
self.x = x
self.y = y
self.radius = radius
def draw(self):
return self.drawing_api.draw_circle(self.x, self.y, self.radius)
def bridge_demo():
print("桥接模式演示:")
circle1 = Circle(1, 2, 3, DrawingAPI1())
circle2 = Circle(4, 5, 6, DrawingAPI2())
print(circle1.draw())
print(circle2.draw())
bridge_demo()组合模式
class Component:
def operation(self):
pass
def add(self, component):
pass
def remove(self, component):
pass
class Leaf(Component):
def operation(self):
return "叶子节点"
class Composite(Component):
def __init__(self):
self.children = []
def add(self, component):
self.children.append(component)
def remove(self, component):
self.children.remove(component)
def operation(self):
results = [child.operation() for child in self.children]
return f"组合节点: {', '.join(results)}"
def composite_demo():
print("组合模式演示:")
leaf1 = Leaf()
leaf2 = Leaf()
composite = Composite()
composite.add(leaf1)
composite.add(leaf2)
print(composite.operation())
composite_demo()装饰器模式
class Component:
def operation(self):
return "基本操作"
class Decorator(Component):
def __init__(self, component):
self.component = component
def operation(self):
return self.component.operation()
class ConcreteDecorator(Decorator):
def operation(self):
return f"装饰 {super().operation()}"
def decorator_demo():
print("装饰器模式演示:")
component = Component()
decorated = ConcreteDecorator(component)
print(decorated.operation())
decorator_demo()外观模式
class SubsystemA:
def operation_a(self):
return "子系统 A 操作"
class SubsystemB:
def operation_b(self):
return "子系统 B 操作"
class Facade:
def __init__(self):
self.subsystem_a = SubsystemA()
self.subsystem_b = SubsystemB()
def operation(self):
return f"{self.subsystem_a.operation_a()}, {self.subsystem_b.operation_b()}"
def facade_demo():
print("外观模式演示:")
facade = Facade()
print(facade.operation())
facade_demo()享元模式
class Flyweight:
def __init__(self, intrinsic_state):
self.intrinsic_state = intrinsic_state
def operation(self, extrinsic_state):
return f"内蕴状态: {self.intrinsic_state}, 外蕴状态: {extrinsic_state}"
class FlyweightFactory:
def __init__(self):
self.flyweights = {}
def get_flyweight(self, key):
if key not in self.flyweights:
self.flyweights[key] = Flyweight(key)
return self.flyweights[key]
def flyweight_demo():
print("享元模式演示:")
factory = FlyweightFactory()
flyweight1 = factory.get_flyweight("共享对象")
flyweight2 = factory.get_flyweight("共享对象")
print(f"是否相同: {flyweight1 is flyweight2}")
print(flyweight1.operation("外蕴状态 1"))
print(flyweight2.operation("外蕴状态 2"))
flyweight_demo()代理模式
class Subject:
def request(self):
pass
class RealSubject(Subject):
def request(self):
return "真实请求"
class Proxy(Subject):
def __init__(self):
self.real_subject = None
def request(self):
if self.real_subject is None:
self.real_subject = RealSubject()
return self.real_subject.request()
def proxy_demo():
print("代理模式演示:")
proxy = Proxy()
print(proxy.request())
proxy_demo()行为型模式
责任链模式
class Handler:
def __init__(self):
self.next_handler = None
def set_next(self, handler):
self.next_handler = handler
return handler
def handle(self, request):
if self.next_handler:
return self.next_handler.handle(request)
return None
class ConcreteHandler1(Handler):
def handle(self, request):
if request == "请求1":
return "处理请求1"
return super().handle(request)
class ConcreteHandler2(Handler):
def handle(self, request):
if request == "请求2":
return "处理请求2"
return super().handle(request)
def chain_of_responsibility_demo():
print("责任链模式演示:")
handler1 = ConcreteHandler1()
handler2 = ConcreteHandler2()
handler1.set_next(handler2)
print(handler1.handle("请求1"))
print(handler1.handle("请求2"))
chain_of_responsibility_demo()命令模式
class Command:
def execute(self):
pass
class Receiver:
def action(self):
return "执行操作"
class ConcreteCommand(Command):
def __init__(self, receiver):
self.receiver = receiver
def execute(self):
return self.receiver.action()
class Invoker:
def __init__(self):
self.command = None
def set_command(self, command):
self.command = command
def execute_command(self):
return self.command.execute()
def command_demo():
print("命令模式演示:")
receiver = Receiver()
command = ConcreteCommand(receiver)
invoker = Invoker()
invoker.set_command(command)
print(invoker.execute_command())
command_demo()迭代器模式
class Iterator:
def has_next(self):
pass
def next(self):
pass
class ConcreteIterator(Iterator):
def __init__(self, collection):
self.collection = collection
self.index = 0
def has_next(self):
return self.index < len(self.collection)
def next(self):
if self.has_next():
item = self.collection[self.index]
self.index += 1
return item
return None
def iterator_demo():
print("迭代器模式演示:")
collection = [1, 2, 3, 4, 5]
iterator = ConcreteIterator(collection)
while iterator.has_next():
print(iterator.next())
iterator_demo()中介者模式
class Mediator:
def send(self, message, colleague):
pass
class Colleague:
def __init__(self, mediator):
self.mediator = mediator
def send(self, message):
self.mediator.send(message, self)
def receive(self, message):
pass
class ConcreteColleague1(Colleague):
def receive(self, message):
return f"同事1收到: {message}"
class ConcreteColleague2(Colleague):
def receive(self, message):
return f"同事2收到: {message}"
class ConcreteMediator(Mediator):
def __init__(self):
self.colleague1 = None
self.colleague2 = None
def send(self, message, colleague):
if colleague == self.colleague1:
return self.colleague2.receive(message)
else:
return self.colleague1.receive(message)
def mediator_demo():
print("中介者模式演示:")
mediator = ConcreteMediator()
colleague1 = ConcreteColleague1(mediator)
colleague2 = ConcreteColleague2(mediator)
mediator.colleague1 = colleague1
mediator.colleague2 = colleague2
print(colleague1.send("你好"))
print(colleague2.send("再见"))
mediator_demo()备忘录模式
class Memento:
def __init__(self, state):
self.state = state
class Originator:
def __init__(self):
self.state = None
def set_state(self, state):
self.state = state
def save_state(self):
return Memento(self.state)
def restore_state(self, memento):
self.state = memento.state
class Caretaker:
def __init__(self):
self.mementos = []
def add_memento(self, memento):
self.mementos.append(memento)
def get_memento(self, index):
return self.mementos[index]
def memento_demo():
print("备忘录模式演示:")
originator = Originator()
caretaker = Caretaker()
originator.set_state("状态1")
caretaker.add_memento(originator.save_state())
originator.set_state("状态2")
caretaker.add_memento(originator.save_state())
originator.restore_state(caretaker.get_memento(0))
print(f"恢复状态: {originator.state}")
memento_demo()观察者模式
class Observer:
def update(self, message):
pass
class Subject:
def __init__(self):
self.observers = []
def attach(self, observer):
self.observers.append(observer)
def detach(self, observer):
self.observers.remove(observer)
def notify(self, message):
for observer in self.observers:
observer.update(message)
class ConcreteObserver(Observer):
def __init__(self, name):
self.name = name
def update(self, message):
return f"{self.name} 收到: {message}"
def observer_demo():
print("观察者模式演示:")
subject = Subject()
observer1 = ConcreteObserver("观察者1")
observer2 = ConcreteObserver("观察者2")
subject.attach(observer1)
subject.attach(observer2)
print(subject.notify("新消息"))
observer_demo()状态模式
class State:
def handle(self):
pass
class ConcreteStateA(State):
def handle(self):
return "状态 A"
class ConcreteStateB(State):
def handle(self):
return "状态 B"
class Context:
def __init__(self):
self.state = None
def set_state(self, state):
self.state = state
def request(self):
return self.state.handle()
def state_demo():
print("状态模式演示:")
context = Context()
state_a = ConcreteStateA()
state_b = ConcreteStateB()
context.set_state(state_a)
print(context.request())
context.set_state(state_b)
print(context.request())
state_demo()策略模式
class Strategy:
def execute(self):
pass
class ConcreteStrategyA(Strategy):
def execute(self):
return "策略 A"
class ConcreteStrategyB(Strategy):
def execute(self):
return "策略 B"
class Context:
def __init__(self, strategy):
self.strategy = strategy
def set_strategy(self, strategy):
self.strategy = strategy
def execute_strategy(self):
return self.strategy.execute()
def strategy_demo():
print("策略模式演示:")
context = Context(ConcreteStrategyA())
print(context.execute_strategy())
context.set_strategy(ConcreteStrategyB())
print(context.execute_strategy())
strategy_demo()模板方法模式
from abc import ABC, abstractmethod
class AbstractClass(ABC):
def template_method(self):
self.primitive_operation1()
self.primitive_operation2()
@abstractmethod
def primitive_operation1(self):
pass
@abstractmethod
def primitive_operation2(self):
pass
class ConcreteClass(AbstractClass):
def primitive_operation1(self):
return "操作1"
def primitive_operation2(self):
return "操作2"
def template_method_demo():
print("模板方法模式演示:")
concrete = ConcreteClass()
concrete.template_method()
template_method_demo()访问者模式
class Visitor:
def visit_element_a(self, element):
pass
def visit_element_b(self, element):
pass
class ConcreteVisitor(Visitor):
def visit_element_a(self, element):
return f"访问元素 A: {element.operation_a()}"
def visit_element_b(self, element):
return f"访问元素 B: {element.operation_b()}"
class Element:
def accept(self, visitor):
pass
class ElementA(Element):
def operation_a(self):
return "元素 A 操作"
def accept(self, visitor):
return visitor.visit_element_a(self)
class ElementB(Element):
def operation_b(self):
return "元素 B 操作"
def accept(self, visitor):
return visitor.visit_element_b(self)
def visitor_demo():
print("访问者模式演示:")
visitor = ConcreteVisitor()
element_a = ElementA()
element_b = ElementB()
print(element_a.accept(visitor))
print(element_b.accept(visitor))
visitor_demo()总结
Python C 扩展允许开发者用 C 语言编写高性能的 Python 模块,是加速核心计算的有效手段。本文将深入探讨 Python C 扩展的开发方法,从基础的 API 使用到高级的优化技巧,帮助读者掌握用 C 语言加速 Python 程序的核心技术。 Python C API 提供了丰富的接口,用于在 C 代码中操作 Python 对象和调用 Python 函数。 编写好 C 扩展后,需要在 Python 中编译和调用它。 使用 C 语言进行数值计算可以显著提高性能。 对比 Python 原生实现和 C 扩展的性能差异。 在 C 扩展中正确管理内存是避免内存泄漏的关键。 在 C 扩展中正确处理错误对于构建健壮的模块至关重要。 C 扩展可以与 NumPy 集成,实现高性能的数组操作。 在 C 扩展中支持多线程需要正确使用 GIL。 掌握 C 扩展的性能优化技巧可以进一步提升性能。 正确调试和测试 C 扩展是确保其稳定性的重要环节。 Python C 扩展是加速核心计算的有效手段,通过用 C 语言重写关键代码段,可以获得显著的性能提升。掌握 Python C API、内存管理、错误处理等核心技术,以及多线程支持、性能优化等高级技巧,可以构建出高性能的 Python 扩展模块。 在实际开发中,需要平衡开发成本和性能收益,选择合适的优化策略。C 扩展虽然开发复杂度较高,但对于性能要求极高的场景,仍然是不可替代的解决方案。Python C 扩展:用 C 语言加速核心计算
Python C API 基础
#include <Python.h>
static PyObject* hello_world(PyObject* self, PyObject* args) {
return Py_BuildValue("s", "Hello from C!");
}
static PyMethodDef module_methods[] = {
{"hello_world", hello_world, METH_NOARGS, "Say hello from C"},
{NULL, NULL, 0, NULL}
};
static struct PyModuleDef moduledef = {
PyModuleDef_HEAD_INIT,
"hello_module",
"A simple hello module",
-1,
module_methods
};
PyMODINIT_FUNC PyInit_hello_module(void) {
return PyModule_Create(&moduledef);
}Python 调用 C 扩展
import sys
import ctypes
def call_c_extension():
print("Python 调用 C 扩演示:")
try:
import hello_module
result = hello_module.hello_world()
print(f"结果: {result}")
except ImportError:
print("C 扩展模块未找到")
print("需要先编译 C 扩展")
call_c_extension()数值计算优化
#include <Python.h>
static PyObject* sum_squares(PyObject* self, PyObject* args) {
PyObject* list_obj;
if (!PyArg_ParseTuple(args, "O", &list_obj)) {
return NULL;
}
if (!PyList_Check(list_obj)) {
PyErr_SetString(PyExc_TypeError, "Expected a list");
return NULL;
}
Py_ssize_t length = PyList_Size(list_obj);
long long sum = 0;
for (Py_ssize_t i = 0; i < length; i++) {
PyObject* item = PyList_GetItem(list_obj, i);
if (PyLong_Check(item)) {
long value = PyLong_AsLong(item);
sum += value * value;
}
}
return PyLong_FromLongLong(sum);
}
static PyMethodDef math_methods[] = {
{"sum_squares", sum_squares, METH_VARARGS, "Calculate sum of squares"},
{NULL, NULL, 0, NULL}
};
static struct PyModuleDef math_moduledef = {
PyModuleDef_HEAD_INIT,
"math_extension",
"High-performance math operations",
-1,
math_methods
};
PyMODINIT_FUNC PyInit_math_extension(void) {
return PyModule_Create(&math_moduledef);
}性能对比
import time
def python_sum_squares(numbers):
return sum(x * x for x in numbers)
def performance_comparison():
print("性能对比测试:")
numbers = list(range(100000))
start = time.time()
result1 = python_sum_squares(numbers)
time1 = time.time() - start
print(f"Python 实现: {time1:.4f}秒, 结果: {result1}")
try:
import math_extension
start = time.time()
result2 = math_extension.sum_squares(numbers)
time2 = time.time() - start
print(f"C 扩展实现: {time2:.4f}秒, 结果: {result2}")
print(f"性能提升: {time1/time2:.1f}x")
except ImportError:
print("C 扩展模块未找到")
performance_comparison()C 扩展开发流程
内存管理
#include <Python.h>
static PyObject* create_large_array(PyObject* self, PyObject* args) {
int size;
if (!PyArg_ParseTuple(args, "i", &size)) {
return NULL;
}
PyObject* result = PyList_New(size);
if (result == NULL) {
return NULL;
}
for (int i = 0; i < size; i++) {
PyObject* item = PyLong_FromLong(i * i);
if (item == NULL) {
Py_DECREF(result);
return NULL;
}
PyList_SET_ITEM(result, i, item);
}
return result;
}
static PyMethodDef memory_methods[] = {
{"create_large_array", create_large_array, METH_VARARGS, "Create large array"},
{NULL, NULL, 0, NULL}
};
static struct PyModuleDef memory_moduledef = {
PyModuleDef_HEAD_INIT,
"memory_extension",
"Memory management examples",
-1,
memory_methods
};
PyMODINIT_FUNC PyInit_memory_extension(void) {
return PyModule_Create(&memory_moduledef);
}错误处理
#include <Python.h>
static PyObject* safe_divide(PyObject* self, PyObject* args) {
double a, b;
if (!PyArg_ParseTuple(args, "dd", &a, &b)) {
return NULL;
}
if (b == 0.0) {
PyErr_SetString(PyExc_ZeroDivisionError, "Division by zero");
return NULL;
}
return PyFloat_FromDouble(a / b);
}
static PyObject* validate_input(PyObject* self, PyObject* args) {
PyObject* obj;
if (!PyArg_ParseTuple(args, "O", &obj)) {
return NULL;
}
if (!PyLong_Check(obj)) {
PyErr_SetString(PyExc_TypeError, "Expected an integer");
return NULL;
}
long value = PyLong_AsLong(obj);
if (value < 0) {
PyErr_SetString(PyExc_ValueError, "Value must be non-negative");
return NULL;
}
return PyLong_FromLong(value * value);
}
static PyMethodDef error_methods[] = {
{"safe_divide", safe_divide, METH_VARARGS, "Safe division"},
{"validate_input", validate_input, METH_VARARGS, "Validate input"},
{NULL, NULL, 0, NULL}
};
static struct PyModuleDef error_moduledef = {
PyModuleDef_HEAD_INIT,
"error_extension",
"Error handling examples",
-1,
error_methods
};
PyMODINIT_FUNC PyInit_error_extension(void) {
return PyModule_Create(&error_moduledef);
}NumPy 集成
import numpy as np
import time
def numpy_integration_demo():
print("NumPy 集成演示:")
array = np.random.rand(1000000)
start = time.time()
result = np.sum(array ** 2)
time1 = time.time() - start
print(f"NumPy 实现: {time1:.4f}秒")
start = time.time()
result = sum(x ** 2 for x in array)
time2 = time.time() - start
print(f"Python 实现: {time2:.4f}秒")
print(f"性能提升: {time2/time1:.1f}x")
numpy_integration_demo()多线程支持
#include <Python.h>
#include <pthread.h>
struct thread_data {
long start;
long end;
long long* result;
};
void* thread_function(void* arg) {
struct thread_data* data = (struct thread_data*)arg;
long long sum = 0;
for (long i = data->start; i < data->end; i++) {
sum += i * i;
}
data->result[0] = sum;
return NULL;
}
static PyObject* parallel_sum_squares(PyObject* self, PyObject* args) {
long n;
if (!PyArg_ParseTuple(args, "l", &n)) {
return NULL;
}
int num_threads = 4;
pthread_t threads[num_threads];
struct thread_data thread_data[num_threads];
long long results[num_threads];
long chunk_size = n / num_threads;
for (int i = 0; i < num_threads; i++) {
thread_data[i].start = i * chunk_size;
thread_data[i].end = (i == num_threads - 1) ? n : (i + 1) * chunk_size;
thread_data[i].result = &results[i];
pthread_create(&threads[i], NULL, thread_function, &thread_data[i]);
}
for (int i = 0; i < num_threads; i++) {
pthread_join(threads[i], NULL);
}
long long total_sum = 0;
for (int i = 0; i < num_threads; i++) {
total_sum += results[i];
}
return PyLong_FromLongLong(total_sum);
}
static PyMethodDef thread_methods[] = {
{"parallel_sum_squares", parallel_sum_squares, METH_VARARGS, "Parallel sum of squares"},
{NULL, NULL, 0, NULL}
};
static struct PyModuleDef thread_moduledef = {
PyModuleDef_HEAD_INIT,
"thread_extension",
"Threaded operations",
-1,
thread_methods
};
PyMODINIT_FUNC PyInit_thread_extension(void) {
return PyModule_Create(&thread_moduledef);
}性能优化技巧
import time
from functools import lru_cache
def python_fibonacci(n):
if n <= 1:
return n
return python_fibonacci(n - 1) + python_fibonacci(n - 2)
@lru_cache(maxsize=None)
def cached_fibonacci(n):
if n <= 1:
return n
return cached_fibonacci(n - 1) + cached_fibonacci(n - 2)
def optimization_demo():
print("优化技巧演示:")
n = 35
start = time.time()
result1 = python_fibonacci(n)
time1 = time.time() - start
print(f"递归实现: {time1:.4f}秒")
start = time.time()
result2 = cached_fibonacci(n)
time2 = time.time() - start
print(f"缓存实现: {time2:.4f}秒")
print(f"性能提升: {time1/time2:.1f}x")
optimization_demo()调试和测试
import sys
import time
def test_c_extension():
print("C 扩展测试:")
try:
import math_extension
test_cases = [
([1, 2, 3], 14),
([], 0),
([0, 1, -1], 2)
]
for input_data, expected in test_cases:
result = math_extension.sum_squares(input_data)
assert result == expected, f"测试失败: {input_data} -> {result} (期望 {expected})"
print(f"测试通过: {input_data} -> {result}")
print("所有测试通过")
except ImportError:
print("C 扩展模块未找到")
except AssertionError as e:
print(f"测试失败: {e}")
test_c_extension()总结
有没有不需要谷歌框架的油管安卓客户端(不要 TV 版,无法触控)?我网上找了很多,但都不支持触摸屏,只有 TV 版,必须要遥控器的,触摸屏肯定无法操作,愁死了
现在涉及价值判断和社会科学的问题我都不问 GPT 了,因为它会一直端水、和稀泥、扮好人,想教育我的价值观。指责他错他还会先狡辩,然后继续装圣母输出道德正确的废话。Grok 感觉过于刻意俏皮,一定要嘻嘻哈哈,有效信息密度很低。Gemini 稍微平衡点
https://movie.douban.com/subject/21371686/
假期里没事干的,强烈推荐。
刚需 16+512 ,希望 2-3k 价位的,24-25 年度旗舰机
op 使用的是去年发布的 iPhone 17 pro, SIM 卡是中国联通
从上一代 iPhone 13 迭代上来, SIM 没有更换, 发现 17 的定位似乎比 13 还不靠谱
一直以为是中国联通的问题, 毕竟三大运营商里面它的信号最差了
当然我也知道 iPhone 本身也有问题, 但显然更换 SIM 卡的成本更低
想起来有一些手表是有 GPS 功能的, 而且它们也不需要插入 SIM 卡, 那么就说明 GPS 不需要 SIM 卡的帮助也能进行
问了一下 ai. 果然, SIM 卡的定位精度更差, 我的跑步路线虽然很乱, 但确确实实没有出现 10m 这么大的误差, SIM 卡主要是在 GPS 中充当了辅助的定位
那么新的问题来了, 既然更换 SIM 卡的增益不大, 难道只能更换手机了吗? 还是说我哪里的操作有问题?
以下因素已排除
ai 推荐我买一个带 GPS 功能的手表, 但我已经有一个小米手环(无 GPS). 专门买一个运动手表, 成本有点高, 而且我不太喜欢手上戴东西(可以的话, 其实手机我也不想带)
如果你最近在关注 AI Agent,一定会发现一个趋势: AI 不再只是聊天工具,而是开始变成真正的"执行者"。 它能写代码、做设计、分析数据、自动完成任务。 但问题来了: 答案是: 给它安装 Skills(技能)。 今天介绍的这个网站,就是专门做这件事的: 它正在成为 AI Agent 世界的"技能商店"。 用一句话解释: 就像: 现在,AI Agent 也可以安装 Skills。 安装之后,AI 就不只是"会聊天",而是: 未来 AI 的能力取决于: 没有 Skills 的 AI: AI:给你一段基础代码。 安装了专业 Skills 的 AI: 这就是区别。 Skills,正在成为 AI Agent 的"外挂系统"。 Skills.sh 是一个开源的 AI Agent Skills 目录生态。 你可以把它理解为: 它最大的特点是可以一键安装 Skills: 简单直接。 目前支持多种主流 AI Agent 工具,包括: 这是一个开放生态,而不是单一平台。 目前已有超过 61,000+ Skills,涵盖: Skills 正在让 AI 从"聊天工具"变成"生产力工具"。 本质上,Skills 是: 一个资深工程师的经验,可以封装成 Skill。 任何 AI 安装后,都能拥有类似的能力。 这是非常颠覆性的事情。 Skills.sh 正在构建 AI Agent 的技能生态系统。 它的意义是: 一句话总结: 未来最强的 AI, 不是模型最大, 而是 Skills 最多。 当 AI 可以不断安装技能, 它将不再只是工具, 而是你的数字分身。 本文由mdnice多平台发布如何让 AI Agent 拥有更多能力?
一、什么是 Skills?
Skills = AI Agent 的可安装能力模块
二、为什么 Skills 很重要?
模型能力 × Skills 数量 × Skills 质量
"帮我设计一个网站"
直接生成符合设计规范、结构清晰、可上线的完整项目。
三、Skills.sh 是什么?
npx skills add owner/repo四、支持哪些 AI Agent?
五、目前已有多少 Skills?
编程开发
AI Agent 能力增强
内容创作
办公能力
六、Skills 的本质是什么?
把专家经验模块化
七、总结
Skills,是 AI Agent 的外挂系统。
结语