编辑
2026-06-23
undefined
00

前言

热更新也叫Hot Module Replacement,是指当我们对代码修改并保存后,webpack 将会对代码进行重新打包,并将新的模块发送到浏览器端,浏览器用新的模块替换掉旧的模块,以实现在不刷新浏览器的前提下更新页面。热更新也是webpack原生提供的功能之一。

HMR的工作原理

  1. 监控文件变化:HMR 功能通过构建工具(如 Webpack)监控代码文件的变化。当文件被修改时,构建工具会重新编译并生成更新后的模块。
  2. 通知浏览器:一旦有模块更新,构建系统会通过 WebSocket 通知浏览器。这个过程通常是自动的,由构建工具的开发服务器管理。
  3. 替换模块:浏览器接收到更新通知后,会通过 HMR API 替换旧的模块,同时尝试保持应用状态不变。这意味着应用可以实时更新,而无需重新加载整个页面。
  4. 状态保持:HMR的一个关键特点是它尽可能地保持应用的状态(如用户输入的数据、应用的 UI 状态等)。这对于开发体验尤其重要,因为它允许开发者即时看到更改的效果,而不会丢失当前的应用状态。
编辑
2026-06-23
undefined
00

网络进程中的通讯

本地的进程间通信(IPC)有很多种方式,但可以概括为以下4类:

  • 消息传递(管道、FIFO、消息队列)
  • 同步(互斥量、条件变量、读写锁、文件和写记录锁、信号量)
  • 共享内存(匿名的和具名的)
  • 远程过程调用(Solaris门和Sun RPC)

在本地环境中,我们可以通过进程PID来唯一标识一个进程,但是在网络通信过程中,首要问题在于如何唯一标识一个进程,这是通信的基础。TCP/IP协议族为我们解决了这个问题,通过网络层的“IP地址”唯一标识主机以及传输层的“协议+端口”唯一标识主机中的应用程序(进程)。这样,利用三元组(IP地址,协议,端口),我们就能够唯一标识网络中的进程,从而实现进程间的通信。这种方式使得各个进程可以利用这个标识与其他进程进行交互。目前使用TCP/IP协议的应用程序通常采用应用编程接口:UNIX BSD的套接字(socket)和UNIX System V的TLI(已经被淘汰),来实现网络进程之间的通信。就目前而言,几乎所有的应用程序都是采用socket。

编辑
2026-06-23
undefined
00

背景

数据库的锁定机制是为了确保数据一致性而设计的重要规则。通过锁定机制,数据库管理系统能够管理并发访问数据时可能产生的冲突,确保数据的正确性和完整性。另一方面,MySQL也存在多种数据存储引擎,每种存储引擎的锁机制都是为各自的特定场景而优化设计,所以各存储引擎的锁机制也有较大区别。

锁的分类

我们可能听过Mysql各种叫法的锁,他们大部分是从不同维度来去划分而命名的,如下图。

编辑
2026-06-23
undefined
00

限流算法

限流,也称流量控制。是指系统在面临高并发,或者大流量请求的情况下,限制新的请求对系统的访问,从而保证系统的稳定性。限流会导致部分用户请求处理延迟或者被拒,从而影响用户体验,因此也属于一种降级。限流的使用场景包括限制上游访问或者下游调用。常见的限流算法有下面几种。

编辑
2026-06-23
undefined
00

背景

前面提到随着用户请求并发量的上升,系统复杂度随之提高,单体应用无论从开发效率还是运维管理都已经无法适应时代的发展,于是微服务和分布式系统越来越流行,每个服务都关注自己的业务领域,并通过远程调用的形式互相通信,形成了清晰却又复杂的调用拓扑关系网。服务拆分后的好处不言而喻,但也带来了一些痛点问题。比如,服务发现,服务稳定性,定向的流量调度和负载均衡等等。解决上述问题有几种方式,比如,通过服务框架集成,虽然能做到部分屏蔽功能细节,但缺点是框架逻辑过重,每种框架和语言需要各自实现一套,兼容性差且不够灵活,开发者必不可少得需要学习和使用框架提供的API。所以,我们通常会通过下面介绍的几种方式实现。