跳至主要内容

博文

Python学习指南:从Go和PHP开发者的视角

Python 从入门到精通:写给 Go / PHP 开发者 本文假设你已经熟练掌握 Go 和/或 PHP,重点不是从零讲解"什么是变量""什么是函数",而是 用你已有的知识做类比 ,把精力集中在 Python 与 Go/PHP 真正不同的地方——尤其是类型系统、并发模型、包生态和"Pythonic"的编程习惯。 目录 核心定位差异:三门语言分别在解决什么问题 环境搭建与工具链 基础语法速成 类型系统:动态但可以强类型提示 核心数据结构 函数:从简单到高级 面向对象编程的 "Python 方式" 错误处理机制 迭代器、生成器与惰性求值 装饰器与上下文管理器 并发与并行模型(重点对比 Goroutine) 包管理与生态系统 代码风格与工程规范 测试 常用框架速览 性能优化与部署注意事项 进阶学习路线图 1. 核心定位差异:三门语言分别在解决什么问题 维度 Go PHP Python 设计哲学 简单、显式、编译期安全 Web 请求-响应模型,"能跑就行" 可读性优先,"应该只有一种明显的做法" 类型系统 静态强类型,编译期检查 动态弱类型(PHP 8 起类型提示增强) 动态强类型,可选静态类型提示(type hints) 执行方式 编译为原生二进制 解释执行(通常配合 PHP-FPM) 解释执行(CPython 字节码 + 虚拟机) 并发模型 Goroutine + Channel,语言原生 天然无状态、多进程模型,协程需额外扩展 GIL 限制下的多线程 + asyncio 协程 典型场景 后端服务、基础设施、CLI 工具 Web 应用(尤其传统 LAMP 架构) 数据科学、AI/ML、脚本自动化、Web 后端 哲学关键词 gofmt ,一切从简 实用主义,历史包袱重 import this (Python 之禅),"电池自带" 给你的心智模型 :如果说 Go 是"给你一套工具,逼你按规矩来",PHP 是"给你自由,出了问题算你倒霉",那 Pyt...
最新博文

SQL 等价改写优化案例集

范围说明:本文档只收录 不新增索引、不改表结构、仅靠改写SQL本身 就能拿到显著性能收益的案例。每个案例包含:问题场景、根因分析、改写方案、生效的前提条件、以及如何用 EXPLAIN 验证效果。默认以 MySQL 8.0 / InnoDB 为背景,个别案例会注明与 PostgreSQL 的差异。 案例一:深分页 —— 延迟关联(Deferred Join) 场景 订单表按状态筛选后翻到很靠后的页码,是后台管理系统里最常见的慢查询之一。 CREATE TABLE orders ( id BIGINT PRIMARY KEY , customer_id BIGINT NOT NULL , status VARCHAR ( 20 ) NOT NULL , create_time DATETIME NOT NULL , buyer_name VARCHAR ( 50 ), address VARCHAR ( 200 ), remark VARCHAR ( 500 ) -- 其余字段省略,实际共30+列 ); CREATE INDEX idx_status_time ON orders( status , create_time); SELECT * FROM orders WHERE status = 'shipped' ORDER BY create_time LIMIT 1000000 , 20 ; 根因 idx_status_time 是二级索引,叶子节点只存 (status, create_time, id) ,不含其余字段。执行过程是: 1. 在二级索引上定位 status='shipped' 的记录,按 create_time 排序; 2. 每扫到一行,都要拿 id 回聚簇索引取完整行(回表); 3. 前 1,000,000 行取出来后 直接丢弃 ,只保留最后 20 行。 问题的本质不是"排序慢",而是 做了 1,000,020 次没必要的回表 I/O 。 改写 SELECT o.* FROM ...

ClickHouse与MySQL的区别对比指南

ClickHouse 与 MySQL 对比指南 —— 写给有 MySQL 经验的用户 一、先说结论:两者根本不是同一类数据库 理解 ClickHouse 最容易踩的坑,就是把它当成"性能更强的 MySQL"。实际上两者的设计目标完全不同: 维度 MySQL ClickHouse 定位 OLTP(联机事务处理) OLAP(联机分析处理) 典型场景 下单、支付、用户信息增删改查 日志分析、报表、BI、时序数据、用户行为分析 存储方式 行式存储(row-based) 列式存储(column-based) 单次查询数据量 少量行,高频次 大量行,低频次但计算量大 事务 完整 ACID 事务 不支持传统事务,写入近似"追加" 单条数据修改 高效(UPDATE/DELETE 直接改) 低效,官方不推荐频繁做 一句话理解: MySQL 擅长"找到某一行/几行数据并精确修改",ClickHouse 擅长"扫描亿万行数据做聚合计算"。 二、使用方式与功能对比 2.1 建表语法差异 MySQL: CREATE TABLE orders ( id BIGINT AUTO_INCREMENT PRIMARY KEY , user_id BIGINT , amount DECIMAL ( 10 , 2 ), created_at DATETIME ) ENGINE = InnoDB ; ClickHouse: CREATE TABLE orders ( id UInt64, user_id UInt64, amount Decimal ( 10 , 2 ), created_at DateTime ) ENGINE = MergeTree() ORDER BY (user_id, created_at) PARTITION BY toYYYYMM(created_at); 几个关键差异点: 没有 AUTO_INCREMENT :ClickHouse 没有自增主键的概念,通常用雪花算法、UUID 或业务自带的唯一键。 ...