那些有趣的数据结构——BitMap

在开发的时候,时常会遇到去重或者校验是否存在的需求,在 Java 中当数据量小的时候可以直接使用 Set 集合进行去重或者校验存在,但数据量逐渐变大的时候使用这种去重策略可能会导致内存溢出的问题,可以根据数据的特性决定是否使用 Bitmap 解决相关需求。

Read More

Zookeeper Cluster

Zookeeper 提供单机和集群两种搭建方式,在生产环境中通常使用集群部署的方式来提高可用性。其作为分布式协调服务,应保持数据的一致性。

Zookeeper 集群是一个 CP(一致性+分区容错性)的分布式系统,任何时刻对正常工作的 Zookeeper 集群的任意节点发起的请求都尽量得到一致的数据结果,对于Zookeeper的操作是原子性的,只有成功和失败,不存在只产生部分结果的情况。

Read More

CAP理论

在一个分布式系统中,存在一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)三种特性。 这三种特性在一个系统(运行)中只能同时满足其中两项。CAP理论的前提是 “分布式”系统 ,如果一个系统不满足分布式这一性质,那就无从提起CAP理论,下文中的系统代指”分布式系统“。

Read More

MySQL日志

在 MySQL 数据库中,BinLog、RedoLog、UndoLog 都是数据库运行后产生的日志文件,但它们的作用的范围有所不同。其中 RedoLog 和 UndoLog 只适用于 InnoDB 存储引擎,而 BinLog 在 MyISAM 这种存储引擎也可以生效。

Read More

Zookeeper ZNode

ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务。ZooKeeper 由不同分层的命名空间组成,命名空间与文件系统的目录非常相似,命名空间的数据存储的节点在 Zookeeper 中称为ZNode。

每个ZNode都有唯一的命名空间,如 /test1/test2 是两个不同的节点,节点中存储了数据以及其自身的状态信息(如zxID、ACL访问控制、版本号、子节点等信息)。每一个节点都可以拥有子节点,子节点也是属于不同的节点,如 /test1/test1/follow 也是不同的节点,但上级节点删除时可以递归删除子节点。

Read More

HTTP 状态码与重定向

从微信公众号跳转微信小程序时,如果传入的参数过长会导致填写“小程序路径”选项无法填写,这时需要实现类似“短链接”的功能,让前端获取保存的信息、解析、重定向到目的页。

这个需求与短链接中心有很大的相似之处,除微信小程序之外的 Web 应用也可以使用,只要在生成短链接时传入是否需要重定向的参数即可。需要注意由于 HTTP 标准和浏览器的历史设计的原因,重定向使用的 HTTP 状态码需要酌情选择。

Read More

Redis数据结构

Redis 是用 C 语言开发的一个开源的高性能非关系型数据库,大多数情况下数据存储在内存中,因此其读写速度相比基于磁盘的关系型数据库快。由于其速度快的特点所以被广泛应用在缓存方面,它支持多种数据类型如字符串、列表、集合、有序集合、哈希等。

Read More

MySQL锁机制

MySQL 有多种存储引擎,每种存储引擎有各自的优缺点,较常出现的是 MyISAM 和 InnoDB,在 MySQL 5.1 之前的版本默认存储引擎是 MyISAM,之后的版本是 InnoDB。由于 MyISAM 存储引擎不支持数据库事务以及随着版本升级后默认存储引擎的切换,存储引擎的选择逐渐转向了 InnoDB。MySQL 在不同的存储引擎下有不一样的锁机制,如无特殊说明,本文的内容主要介绍 MySQL InnoDB 存储引擎下基于事务的锁机制。

Read More

PhpSpreadsheet 的一些使用方法

PhpSpreadsheet 是一个遵循最新 PSR 标准、完全使用 PHP 编写的用于处理 Excel 表格的第三方库,其前身是 PHPExcel,但 PHPExcel 由于历史技术债的问题被放弃维护。本文基于 PHP 7.4 和 PhpSpreadsheet 1.16.0 的官方文档选取翻译介绍部分使用方法。

Read More