2024.10 期
2024.10 期
10.30
聊聊大厂潜规则:完美胜于完成:作者从中小厂跳到大厂后的范式转变——小厂强调「完成胜于完美」(敏捷快速试错、不写设计方案直接撸码、长不出精通领域),大厂强调「完美胜于完成」(写技术方案 / SOP / 重构方案的时间多于写代码,光干活不够还要会推销项目挑战);附 6 个亮点话术模板:需求复杂如何沟通、高并发低延迟如何突破、上下游一致性如何对齐、扩展性如何预留、项目梳理如何拆解、项目周期短如何快速交付。
MySQL 核心模块揭秘 | 24 期 | 锁等待超时:基于 MySQL 8.0.32 InnoDB 源码拆解锁等待超时机制——后台线程
ib_srv_lock_to每秒扫一遍waiting_threadsslot 数组(同时兼任死锁检查),用当前时间 - suspend_time > wait_timeout判定超时,命中后从trx_locks链表与 rec_hash / 表 locks 链表双向删除锁结构、触发 slot.event 唤醒事务,由innodb_rollback_on_timeout决定是否回滚。
10.28
- 微信全文搜索技术优化:iOS 微信 2021 年全文搜索全面升级——从 SQLite FTS3 / Like / 内存遍历升级到 SQLite FTS5(事务能力、技术风险、读写性能综合最优);在 WCDB 中实现 FTS5 segment 自动 merge 把 merge 操作搬到子线程,避免 crisismerge 卡顿;自研 VerbatimTokenizer 分词器替代旧 OneOrBinaryTokenizer,索引体积减小同时支持英文 stemming / Unicode 归一化 / 简繁转换 / 符号过滤;扩展 FTS5 多级分隔符 + 自定义 SubstringMatchInfo 辅助函数实现属性级精准搜索;落地优化:UNINDEXED 约束去冗余索引、cache 未建索引数据兜底、并行搜索 + 中断机制。
10.27
- 来聊聊Java的反射机制:Java 反射机制实战教程——三种获取 Class 对象方式(类名.class / 对象.getClass() / Class.forName(),仅最后一种属于反射)、反射获取构造方法 / 成员变量 / 方法(getXxx vs getDeclaredXxx 的非私有 vs 全部差异),通过
setAccessible(true)暴力访问私有成员;附通过反射调用 main 方法、利用反射绕过泛型擦除往ArrayList<String>塞 Integer 等实验。
10.26
- 为什么单线程的 Redis 如何做到每秒数万 QPS ?:飞哥从 Redis 源码拆解高 QPS 网络原理——核心就两个函数:
initServer启动时(创建 epoll 对象、监听端口、把 listen socket 注册给 epoll)+aeMain事件循环(epoll_wait 发现可读可写事件 → 接新连接挂到 epoll → 读命令处理后挂到写任务队列 → beforesleep 真正发出去 → 一次写不完则注册写事件回调);本质是 Linux epoll 多路复用 + Reactor 模式的工程化运用。
10.22
- Java高性能缓存库 - Caffeine:Caffeine 本地缓存全面教程——四种 Cache 类型(Cache / LoadingCache / AsyncCache / AsyncLoadingCache)对应四种加载策略;驱逐策略支持基于大小(W-TinyLFU 算法接近最优命中率)+ 基于时间(最后访问 / 最后写入)+ 基于引用(弱引用 key / 弱软引用 value);刷新机制
refreshAfterWrite异步刷新避免击穿;附 SpringBoot CacheManager +@Cacheable/@CacheEvict/@CachePut三注解 + sync 同步模式实战。
10.20
- 长篇图解java反射机制及其应用场景:图解版 Java 反射全景——反射要解决的本质问题是「运行期动态根据配置改变程序调用行为」,比如服务任务工作流根据 A 任务结果决定 B 调哪个类的哪个方法;类加载时方法区为每个类生成唯一 java.lang.Class 对象,反射围绕 Class / Constructor / Method / Field / Modifier / Annotation 六个核心类展开;常用场景:通过配置调用类方法、结合自定义注解实现 mybatis-plus
@TableName之类的功能(用org.reflections包扫描带注解的类)、按需加载 jar / class。
10.18
- 缓存和数据库一致性问题,看这篇就够了:Kaito 全面拆解缓存与 DB 一致性——「更新 DB + 更新缓存」并发下不一致且浪费机器;「先删缓存再更 DB」并发下还会被旧值回写覆盖,需配「延迟双删」;推荐「先更 DB 再删缓存」+ 消息队列 / 订阅 binlog 重试保证两步都成功;读写分离 + 主从延迟场景下用延迟双删 + 控制主从延迟缓解;底层心法:性能与一致性不可兼得,只能做最终一致性,把 MySQL 当 leader、Redis / ES 当 follower 通过订阅变更日志同步。
10.17
- 从一个事故中理解Redis(几乎)所有知识点:一次大 Key 高峰期把 Redis 内存打到 100% 的事故复盘串起 Redis 全知识点——破解迷思:内存 100% ≠ Redis 不可用(默认有 LRU 淘汰策略),但本次根因是输出缓冲区被大 Key 打爆(
mem_clients_normal占满used_memory_overhead,used_memory_dataset仅 2%);用info memory拆 Redis 内存组成、过期 key 删除算法(每 100ms 采样、超 25% 过期则循环删导致阻塞);最后落到业务部署 / Key 设计 / SDK 使用 / 命令使用 / 运维管理五大规范。
10.16
EasyExcel处理Mysql百万数据的导入导出案例,秒级效率,拿来即用!:SpringBoot 整合 EasyExcel 百万级 Excel 导入导出基线版——技术选型对比 EasyExcel vs POI vs JXL vs JXLS(EasyExcel 简单 API + 高性能 vs POI 稳定但繁琐);通过
ReadListener.invoke+BATCH_COUNT分片读取、模板下载、前端配合的完整可跑案例;坦诚指出导入耗时仍在分钟级,下一篇专门做优化。厉害了!12秒将百万数据通过EasyExcel导入MySQL数据库中:上一篇 500 秒 → 20 秒的优化复盘——耗时点 1 读取:把线程安全但慢的
CopyOnWriteArrayList换成ArrayList、单批从 2w 提到 10w;耗时点 3 写入:双方案对比 JDBC 分批插入 + 手动事务控制(addBatch/executeBatch/commit)vs 多线程 + MyBatis-Plus 批量插入,最终多线程 + 手动事务把单字段百万行写入压到 12s。
10.13
Elasticsearch 基础入门详文:腾讯 IEG 工程师的 ES 入门长文(v7.7)——从 Lucene / ES 历史背景与版本破坏性变更切入,再到 Cluster / Node / Shard / Replica / Index / Type / Document 基础概念,强调 ES 默认值多但需要数据使用者人工限制(如字段类型一旦定下来再变只能 reindex)。
浅谈 Elasticsearch 的入门与实践:阿里云开发者从 ES 两大核心特性(分布式存储 + 分析检索)切入——分布式概念(Node / Cluster / Shard / Replica)、数据模型(Index / Type / Document,7.0 起 Type 弃用)、检索能力(倒排索引 = 词汇表 + 倒排列表、Analyzer 三步走过滤 / 标准化 / 分词、中文用 jieba 替代默认暴力拆字);查询类型分单词级 / 全文级 / Bool / 关联查询 + 数据同步实践案例。
一文轻松图解搞懂 Elasticsearch 原理!:图解版 ES 工作原理——倒排索引(词汇表 + 倒排列表)vs 正排索引;分布式架构(master 节点协调 + data 节点分片副本);写入路径:协调节点 → 路由到主分片 → 同步副本;写入底层:buffer + translog → refresh 生成 segment 进 file system cache → flush 落盘 + 清空 translog → segment merge;读 / 搜索 / 删 / 更新底层逻辑(删除是标记 + segment merge 清理)。
ElasticSearch (ES从入门到精通一篇就够了) :单篇 ES 全栈实战长文——倒排索引基础 → ES 数据库基本概念 → 安装 ES / Kibana / IK 分词器 → 索引库 Mapping 与 CRUD → 文档 CRUD → RestAPI(Java 客户端操作索引库与文档) → DSL 设置查询条件 + 搜索结果处理(高亮 / 排序 / 分页 / 聚合) → 拼音分词器 + 自动补全 → ES 与 MySQL 数据同步三种方案(同步双写 / 异步通知 / binlog 监听) → 集群搭建 + 脑裂 + 分布式存储与查询 + 故障转移。
10.10
- MySQL 是怎么做并发控制的?:基于 MySQL 8.0.35 InnoDB 源码整体梳理三层并发控制——表级(MDL 锁保护表结构,DDL 升级 SHARED_UPGRADABLE → EXCLUSIVE,5.6+ Online DDL / 8.0+ Instant DDL 几乎不锁表,非 InnoDB 表才走 Server 层表锁),页级(B+ tree Index / Page 上的 SX 锁保护节点安全,乐观写入只锁叶子、悲观写入 SMO 锁路径上所有节点),行级(行锁保护记录一致性,配合 MVCC 实现读写不冲突)。
10.09
- 防御性编程:让系统坚不可摧:京东物流的防御式编程实战——五个最易踩坑的点(输入验证与清理 / 预防死循环 / 异常处理 / 边界条件检查 / 断言做内部不变量校验),每点配反例与修正实践;实践原则:通用性防御 > 细节性防御、按使用场景调防御力度、不是越多越好(防御过度会带来维护与性能成本)。
10.06
分库分表,可能真的要退出历史舞台了!:作者认为分库分表正被分布式数据库吃掉存量市场——单机 MySQL 三大瓶颈(单表过大查询吃力 / 单库资源告急 / 读高峰挤压写)历史上催生了框架层 / 驱动层(ShardingSphere)/ 代理层(MyCat)三种中间件,但 ElasticSearch、Cassandra 等 NoSQL 一直内置分片副本;如今 Aurora / PolarDB / TiDB / OceanBase 等分布式 / 兼容 MySQL 的产品已成熟,新业务直接选分布式数据库比加分库分表中间件更划算。
分库分表也没吹的那么神…… 这 7 个问题难以解决:分库分表的七大死结——分布式事务难(XA / TCC / 最大努力都有代价)、非分片字段查询能力差(要么全表扫要么维护异构索引)、全局主键问题(雪花 ID / 号段服务额外引入)、全局唯一约束难建立(必须查所有分片)、需要持续造轮子(路由 / 拆分 / 聚合)、扩容困难(数据搬迁 + 路由变更 + 双写灰度)、运维成本激增;最后反问:为什么业务系统要替数据库负重前行?
10.02
- Web 性能优化|了解 HTTP 协议后才能理解的预加载:从 HTTP 协议层串起前端预加载技术全景——CDN 动态加速(边缘节点 + 智能路由替代静态加速)、
dns-prefetch提前 DNS 解析、preconnect提前 TCP+TLS 建连、preload高优强制加载关键资源、prefetch低优空闲下载下一跳资源、prerender预渲染(弊端多少用)、流式渲染、HTTP Early Hints(103 状态码提前下发资源 hints)、HTTP/2 Push;进阶玩法:mousedown 比 click 早 200ms 触发 prefetch、prefetch 默认不携带 cookie 需credentials="include"、服务端识别Sec-Purpose: prefetchHeader 短期缓存避免重发请求。
