文章主要介绍了使用 MySQL 时容易踩的 15 个坑,包括查询不加 where 条件、未使用索引、不处理 NULL 值、选错数据类型、深分页问题、未用 explain 分析查询、字符集设置不当、SQL 注入风险、事务问题、校对规则问题、过多使用 SELECT *、索引失效、频繁修改表或数据、未定期备份、忘了归档历史数据,并针对每个问题给出正例和反例,还提供了一些优化建议和解决办法。
本文主要介绍了 MySQL 中 InnoDB 的逻辑存储结构,包括两层架构、多种存储引擎(如 MyISAM 和 InnoDB)的特点与对比,InnoDB 将数据划分为页以提升性能,其逻辑存储结构包含表空间、段、区、页、行等。页又有文件头部、页面头部等部分,行有隐藏字段和不同行格式,还讲解了记录在页中的存储、页目录等相关内容。
文章主要介绍了限流机制,包括限流的概念(阈值和拒绝策略)、限流原因(防系统过载、提升稳定性、处理瞬时高峰)以及四种限流基本算法:固定窗口限流,简单但有请求分布不均等缺点;滑动窗口限流,精度高但仍存限流不准确问题;漏斗限流,能平滑处理但无法应对突发流量;令牌桶限流,可平滑流量且能应对流量增大。
JavaScript已经演变成现代应用程序不可或缺的语言。随着2024年引入的新特性,它使我们能够编写更简洁、更高效且性能更优的代码。异步过程、函数式数组、现代错误处理和性能优化最大化了JavaScript的潜力。文章汇总了2024年JavaScript最新特性,包括现代语法、逻辑赋值运算符、管道操作符、记录与元组等新的数据结构、顶层 await等。异步操作管理、错误管理、数组操作、性能优化等方面的新特性和用法,文章还总结了新特性对编写高效代码的帮助。
主要解析了 Go 语言日常开发中的常见坑位,包括核心数据结构(值类型、指针类型、切片、映射、通道、数组等)、变量(遮蔽、可为空类型、类型转换)、字符串特性、nil 值比较,以及 defer、panic、recover 的使用和相关注意事项,还提及了一些运行时的致命错误情况。
一说到 go channel,很多人会使用“优秀”“哲学”这些词汇来描述。殊不知,go channel 恐怕还是 golang 中最容易造成问题的特性之一。很多情况下,我们使用 go channel 时,常常以为可以关闭 channel,但实际上却没有关闭,这就是导致 go channel 内存泄漏的元凶。
信号处理是Go程序设计中的重要一环,它不仅关系到程序的健壮性,还直接影响用户体验。通过合理设计信号处理逻辑,可以确保程序能够优雅地响应外部信号,及时释放资源,避免数据丢失或服务异常。记住,信号处理应当简洁高效,避免阻塞和重复处理,同时利用Go的并发特性来优化清理流程,以实现真正的“优雅退出”。
本文深入介绍了 Redis 的多种底层数据结构,包括全局哈希表、SDS、双向链表、压缩列表、整数集合、跳表、listpack、quicklist 等,还阐述了 HyperLogLog 算法及其存储结构、计数缓存、源码解析,以及 GEO 的编码方式、与 zset 的关系等。
协程(goroutine) 作为一种轻量高效的并发模型,通过巧妙的调度器设计和动态栈管理等底层机制,能够在现代软件开发中处理高并发、高并行的任务,并且极大地简化了复杂并发问题的管理。Go 的 GPM 模型完美体现了编程语言中平衡高效和简单性的设计思路,这也是 Go 在高并发应用场景中大获成功的重要原因。
秒杀是一个非常典型的活动场景。比如双11、618等电商活动中,都会有秒杀的场景。秒杀场景的业务特点是限时限量,业务系统要处理瞬时的大量高并发操作,而Redis就经常被用来支撑秒杀活动。本文介绍了 Redis 支撑秒杀场景,包括秒杀活动对系统的要求,如瞬时并发访问量高、读多写少。阐述了基于原子操作和分布式锁支撑秒杀场景的方法,如原子操作通过 Lua 脚本实现,分布式锁需确保命令原子性及考虑多种情况,还对比了两种方式的优缺点。