- 博客(154)
- 收藏
- 关注
原创 Gin 与消息队列集成:使用 RabbitMQ 处理异步任务
RabbitMQ 通过不同的“交换机-队列-绑定”组合,形成了多种消息传递模式,以适配不同的业务场景。import ("fmt""sync""time"// RabbitMQ 连接实例结构体conn *amqp.Connection // RabbitMQ TCP连接channel *amqp.Channel // 通信信道mutex sync.Mutex // 互斥锁,保证并发安全。
2025-12-16 20:00:00
739
2
原创 MQ消息队列相关知识与对比
MQ,即Message Queue(消息队列),是一种基于“生产者-消费者”模式的分布式通信中间件。从字面意思上看就个FIFO 先入先出的队列,只不过队列中存放的内容是 message 而已,它是一种具有接收数据、存储数据、发送数据等功能的技术服务。简单来说,它就像现实生活中的“快递驿站”——生产者(发送消息的系统/模块)将消息投递到队列中,无需等待消费者(接收并处理消息的系统/模块)立即响应;消费者则可以根据自身能力,从队列中异步获取消息并处理。
2025-12-12 21:45:00
611
原创 CDN(内容分发网络) 知识详解
CDN,即内容分发网络(Content Delivery Network),是一套由分布在不同地理区域的服务器集群(边缘节点)、中心管理平台和客户端接入技术组成的分布式网络系统。其核心目标是将源站的内容(如网页、图片、视频、软件安装包等)高效、快速地分发到靠近用户的网络边缘,让用户能够从距离最近的节点获取所需内容,而非直接访问遥远的源服务器。简单来说,CDN就像“内容快递站”:源站是“总仓库”,边缘节点是分布在各地的“本地快递点”,用户请求内容时,无需远赴总仓库,只需从就近的快递点取货,大大提升效率。
2025-12-09 14:08:20
1082
原创 福利速递:1000 万 AI 模型 Token 免费领,注册即享,无门槛调用主流大模型
对于国内开发者来说,七牛云这次的 AI 模型推理 Token 免费领取活动,无疑是一个零成本体验优质大模型的好机会。1000 万 Token 足够支撑从测试到小型项目开发的需求,而且平台功能完善、操作简单,无论是新手还是资深开发者都能快速上手。如果你正在寻找高性价比的 AI 模型调用平台,或者想尝试不同模型的效果,不妨按照上面的步骤领取 Token,亲身体验一下。如果在领取或使用过程中遇到其他问题,也可以在评论区留言,我们一起交流解决!
2025-11-22 23:00:59
216
原创 解决本地开发Cos对象存储跨域问题
前端本地配置的核心目标是让开发环境的“域名+协议”与Cos服务的访问规则对齐,主要包含自定义本地域名、启用HTTPS两个关键操作。本地Vue项目默认使用(或其他端口)访问,需将其映射为自定义域名(如),具体步骤如下:打开本地域名配置文件:进入路径,找到hosts文件,以管理员权限用记事本或专业编辑器打开;添加域名映射:在文件末尾添加一行配置,其中为自定义的本地域名,可根据实际需求命名;验证配置:保存hosts文件后,打开浏览器输入。
2025-11-20 09:40:15
801
原创 Gin + JWT 认证机制详解:构建安全的Go Web应用
在现代Web开发中,用户身份认证是几乎所有应用的核心功能。随着前后端分离架构的普及,基于Token的认证机制(如JWT)因其无状态可扩展性强等特点,逐渐成为主流。本文将详细介绍如何在Go语言的Gin框架中集成JWT(JSON Web Token)实现安全的用户认证。JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在各方之间安全地传输信息作为JSON对象。它通常用于身份验证和信息交换。Header(头部):包含令牌类型和使用的签名算法(如HS256)。
2025-09-25 20:00:13
898
原创 Gin 集成 Redis:从连接到实战
Redis作为一款高性能的内存数据结构存储系统,常被用作缓存、消息队列和数据库。Redis 集成到项目中合理利用,可以极大地提升 Web 应用的性能和响应速度。通过以上步骤,我们成功地将 Redis 集成到了 Gin 框架中。我们学习了如何建立连接、使用各种数据类型、利用管道和事务提升性能,并通过一个实际的缓存示例展示了其价值。合理使用 Redis 可以显著提升 Web 应用的性能和用户体验。记得在生产环境中妥善管理连接、处理错误并考虑缓存失效策略。
2025-09-18 19:44:37
702
原创 Gin + Gorm:完整 CRUD API 与关系操作指南
GORM 是 Go 语言中最流行、功能最强大的 ORM(对象关系映射)框架之一。它为开发者提供了简洁、直观的 API 来操作数据库,极大地简化了数据库交互的复杂性。以下是对 GORM 的全面深入介绍。在 models/models.go 中定义我们的核心模型。我们将创建一个博客系统,包含用户(User)、文章(Post)和标签(Tag)。import ("time"// User 用户模型BaseModelPassword string `json:"-"` // JSON序列化时忽略。
2025-09-16 19:39:31
574
原创 Gin + Zap 日志:构建高性能、结构化的应用日志系统
在项目开发和运维过程中,日志记录是不可或缺的一环,它帮助我们追踪请求、排查问题和监控系统状态。Gin 框架本身提供了两个非常实用的默认中间件:gin.Logger() 和 gin.Recovery()。理解它们的功能是构建更强大日志系统的基础。本文会先介绍这两个中间件,并演示如何将 Gin 与功能强大的日志库 Zap 集成,以实现高性能、结构化的日志输出。
2025-09-09 17:25:04
747
原创 Gin + Viper 实现配置读取与热加载
在现代 Go 应用开发中,配置管理是构建灵活、可维护服务的基础。Viper 是 Go 生态中最流行的配置管理库之一,它支持多种格式(JSON, YAML, TOML, env, flags 等)、环境变量覆盖、远程配置(etcd/Consul)以及配置热加载。灵活的配置读取:支持多格式、多环境、环境变量覆盖。配置热加载:监听文件变更,动态更新应用配置。结构化管理:使用 Go struct 组织配置,类型安全。热加载是强大功能,但需谨慎使用。
2025-09-05 17:17:30
1165
原创 Gin Validator 错误信息翻译与自定义校验规则详解
在使用 Go 语言的 Gin 框架开发 Web 应用时,数据校验是保障接口数据完整性和安全性的关键环节。Gin 集成了 go-playground/validator/v10 作为其默认的校验引擎,提供了强大且灵活的结构体字段验证能力。然而,其默认的英文错误信息对中文用户不够友好,且内置规则无法覆盖所有业务场景。本文将深入探讨 Gin Validator 的两大核心功能:错误信息的翻译(国际化) 和 自定义校验规则的实现,帮助你构建更健壮、更用户友好的 API 接口。
2025-08-28 14:58:39
995
原创 Go语言的gRPC教程-超时控制
通过使用,我们可以精细化的控制gRPC中服务端、客户端两端的建连,调用,以及在拦截器中的超时时间。同时gRPC还提供了超时传递的能力,让超时的请求不继续在链路中往下传递,提高链路整体的性能。
2025-08-08 11:53:46
1096
原创 Go语言的gRPC教程-错误处理
我们先介绍了gRPC最基本的错误处理方式:返回error。Status,它包含codemessagedetails等信息,通过Status与error的互相转换,利用error来传输错误。
2025-08-05 11:10:37
982
原创 Go语言的gRPC教程-拦截器
gRPC的拦截器和其他框架的拦截器(也称middleware)作用是一样的。利用拦截器我们可以在不侵入业务逻辑的前提下修改或者记录服务端或客户端的请求与响应,利用拦截器我们可以实现诸如日志记录权限认证限流等诸多功能上一篇提到gRPC的通信模式分为unary和streaming和,两种拦截器可以分别应用在服务端和客户端,所以gRPC总共为我们提供了四种拦截器。它们已经被定义成了go中的接口,我们创建的拦截器只要实现这些接口即可。
2025-08-01 18:02:01
1168
原创 Go语言的gRPC教程-通信模式
✨ 前文提到过protobuf协议是平台无关的。演示的客户端和服务端都是 golang 的,即使客户端和服务端不同语言也是类似的可以通信的✨ 对于上面介绍的的这种类似于http1.x的模式:客户端发送请求,服务端响应请求,一问一答的模式在 gRPC 里叫做Simple RPC(也称Unary RPC 一元RPCgRPC 同时也支持其他类型的交互方式。streaming";// 服务端流模式:客户端发送一次请求,服务端持续返回数据// 1 是字段编号,用于在消息定义中标识字段,不是值。
2025-07-31 10:09:30
929
原创 go语言的gRPC教程-protobuf基础
gRPC是谷歌开源的一款高性能序列化协议。gRPC使用protobuf,首先使用protobuf定义服务,然后使用这个文件来生成客户端和服务端的代码。因为pb是跨语言的,因此即使服务端和客户端语言并不一致也是可以互相序列化和反序列化的网络传输层。gRPC使用http2.0协议,http2.0相比于HTTP 1.x,大幅度的提升了 web 性能。protobuf里最基本的类型就是message,每一个messgae都会有一个或者多个字段(field),其中字段包含如下元素类型:类型不仅可以是标量类型(int。
2025-07-29 10:45:30
522
原创 轻松管理多个Go版本:g工具安装与使用
Golang 的版本控制工具 g是一个用于方便地管理和切换 Go 语言版本的命令行工具。它让用户可以轻松地安装、卸载和切换不同版本的 Go,从而更好地适应不同项目的需求。类似于Python的pyenv或Node.js的nvm,是专为Go设计的轻量级版本管理工具。同时支持windows、linux、mac三个系统。通过本文的详细介绍,我们了解到 g 是一个非常强大的工具,能够极大地简化 Go 语言版本管理的过程。安装方式自动化安装:适用于希望快速上手且不需要自定义配置的用户。只需执行简单的命令即可完成安装。
2025-07-15 19:52:44
2052
原创 Golang实战:使用 Goroutine 实现数字与字母的交叉打印
在 Go 语言中,goroutine 是轻量级的并发执行单元,它使得我们能够非常方便地实现并发编程。本文将通过一个经典的案例 —— 使用两个 goroutine 交替打印数字和字母,来演示如何利用 channel 控制 goroutine 的执行顺序,并加深对 Go 并发模型的理解。技术点应用场景说明Goroutine并发执行多个任务Channel协调 goroutine 之间的执行顺序主 goroutine 等待确保程序不会提前退出。
2025-07-12 19:58:41
515
原创 浏览器工作原理41 [#] 性能分析工具:如何分析Performance中的Main指标?
本文主要的目的是让学会如何分析 Main 指标。通过页面加载过程的分析,就能掌握一套标准的分析 Main 指标的方法,在该方法中,我将加载过程划分为三个阶段:导航阶段;解析 HTML 文件阶段;生成位图阶段。在导航流程中,主要是处理响应头的数据,并执行一些老页面退出之前的清理操作。在解析 HTML 数据阶段,主要是解析 HTML 数据、解析 CSS 数据、执行 JavaScript 来生成 DOM 和 CSSOM。
2025-07-07 19:40:43
973
原创 浏览器工作原理40 [#]页面性能工具:如何使用Performance?
首先介绍了如何去配置 Performance 并生成报告页,然后将焦点放在了如何解读报告页上。之后介绍了报告页面主要分为三个部分,概览面板、性能面板和详情面板。可以通过概览面板来定位问题的时间节点,然后再使用性能面板分析该时间节点内的性能数据。不过在分析数据时,需要弄明白性能面板内各项数据指标的含义,要了解这些,需要了解浏览器渲染流水线、浏览器的进程架构等知识点,因此结合这些知识点,接下来分析了性能面板的各项指标的含义。
2025-07-06 13:25:48
1034
原创 浏览器工作原理 39 [#] 加载阶段性能:使用 Lighthouse 来优化 Web 性能
Lighthouse 是前端性能优化的强大工具,通过全面的分析和详细的优化建议,开发者可以发现网页性能问题并进行改进。
2025-07-04 10:36:26
862
原创 浏览器工作原理 38 [#]任务调度:有了setTimeOut,为什么还要使用 requestAnimationFrame
要想利用 JavaScript 实现高性能的动画,那就得使用这个 API,简称 rAF,那么为什么都推荐使用 rAF 而不是 setTimeOut 呢?要解释清楚这个问题,就要从渲染进程的任务调度系统讲起,理解了渲染进程任务调度系统,你自然就明白了 rAF 和 setTimeOut 的区别。其次,如果你理解任务调度系统,那么你就能将渲染流水线和浏览器系统架构等知识串起来,理解了这些概念也有助于你理解 Performance 标签是如何工作的。
2025-07-03 19:45:10
816
原创 浏览器工作原理37 [#] 浏览上下文组:如何计算Chrome中渲染进程的个数?
在默认情况下,如果打开一个标签页,那么浏览器会默认为其创建一个渲染进程。如果从一个标签页中打开了另一个新标签页,当新标签页和当前标签页属于同一站点(相同协议、相同根域名)的话,那么新标签页会复用当前标签页的渲染进程。多个标签页运行在同一个渲染进程:从标签页中打开新的标签页多个标签页运行在不同的渲染进程中:新建一个标签页打开简而言之,noreferrer 标记在单击链接时隐藏引用者信息。如果有人从使用此标记的链接到达您的网站,您的分析将不会显示谁提到该链接。
2025-07-02 10:04:20
433
原创 浏览器工作原理32 [#]同源策略:为什么XMLHttpRequst不能跨域请求资源
要了解什么是同源策略,先来看看什么是同源。如果两个 URL 的协议域名和端口都相同,就称这两个 URL 同源。比如下面这两个 URL,它们具有相同的协议 HTTPS、相同的域名 time.geekbang.org,以及相同的端口 443,所以就说这两个 URL 是同源的。category=1category=0浏览器默认两个相同的源之间是可以相互访问资源和操作 DOM 的。两个不同的源之间若想要相互访问资源或者操作 DOM,那么会有一套基础的安全策略的制约,这称为同源策略。
2025-07-01 17:25:27
1097
原创 浏览器工作原理31 [#] HTTP3:甩掉TCP、TCL包袱 构建高效网络
首先分析了 HTTP/2 中所存在的一些问题,主要包括了 TCP 的队头阻塞、建立 TCP 连接的延时、TCP 协议僵化等问题。这些问题都是 TCP 的内部问题,因此要解决这些问题就要优化 TCP 或者“另起炉灶”创造新的协议。由于优化 TCP 协议存在着诸多挑战,所以官方选择了创建新的 QUIC 协议。HTTP/3 正是基于 QUIC 协议的,你可以把 QUIC 看成是集成了“TCP+HTTP/2 的多路复用 +TLS 等功能”的一套协议。
2025-06-30 15:57:09
628
原创 浏览器工作原理30 [#]HTTP2:如何提升网络速度
首先分析了影响 HTTP/1.1 效率的三个主要因素:TCP 的慢启动、多条 TCP 连接竞争带宽和队头阻塞。接下来分析了 HTTP/2 是如何采用多路复用机制来解决这些问题的。多路复用是通过在协议栈中添加二进制分帧层来实现的,有了二进制分帧层还能够实现请求的优先级、服务器推送、头部压缩等特性,从而大大提升了文件传输效率。HTTP/2 协议规范于 2015 年 5 月正式发布,在那之后,该协议已在互联网和万维网上得到了广泛的实现和部署。
2025-06-29 20:00:00
799
原创 浏览器工作原理29 [#] HTTP1:HTTP性能优化
本文重点强调了 HTTP 是浏览器和服务器的通信语言,然后从需求演变的角度追溯了 HTTP 的发展史,在诞生之初的 HTTP/0.9 因为需求简单,所以和服务器之间的通信过程也相对简单。由于万维网的快速崛起,带来了大量新的需求,其中最核心的一个就是需要支持多种类型的文件下载, 为此 HTTP/1.0 中引入了请求头和响应头。在支持多种类型文件下载的基础之上,HTTP/1.0 还提供了 Cache 机制、用户代理、状态码等一些基础信息。
2025-06-29 15:02:26
978
原创 浏览器工作原理28 [#] webComponent:像搭积木一样构建web应用
首先,介绍了组件化开发是程序员的刚需,所谓组件化就是功能模块要实现高内聚、低耦合的特性。不过由于 DOM 和 CSSOM 都是全局的,所以它们是影响了前端组件化的主要元素。基于这个原因,就出现 WebComponent,它包含自定义元素、影子 DOM 和 HTML 模板三种技术,使得开发者可以隔离 CSS 和 DOM。在此基础上,还重点介绍了影子 DOM 到底是怎么实现的。
2025-06-27 21:15:00
1725
原创 浏览器工作原理27 [#]PWA:解决了web应用哪些问题
先来看看 Service Worker 是怎么解决离线存储和消息推送的问题。其实在 Service Worker 之前,WHATWG 小组就推出过用 App Cache 标准来缓存页面,不过在使用过程中 App Cache 所暴露的问题比较多,遭到多方吐槽,所以这个标准最终也只能被废弃了,可见一个成功的标准是需要经历实践考量的。所以在 2014 年的时候,标准委员会就提出了 Service Worker 的概念,它的主要思想是在页面和网络之间增加一个拦截器,用来缓存和拦截请求。
2025-06-27 16:57:54
912
原创 浏览器工作原理26 [#]虚拟DOM:虚拟DOM和实际DOM有何不同
在谈论什么是虚拟 DOM 之前,先来看看虚拟 DOM 到底要解决哪些事情。将页面改变的内容应用到虚拟 DOM 上,而不是直接应用到 DOM 上。变化被应用到虚拟 DOM 上时,虚拟 DOM 并不急着去渲染页面,而仅仅是调整虚拟 DOM 的内部状态,这样操作虚拟 DOM 的代价就变得非常轻了。在虚拟 DOM 收集到足够的改变时,再把这些变化一次性应用到真实的 DOM 上。基于以上三点,再来看看什么是虚拟 DOM。
2025-06-26 17:57:44
930
原创 浏览器工作原理25 [#]页面性能:如何系统优化页面
主要讲解了如何系统优化加载阶段和交互阶段的页面。在加载阶段,核心的优化原则是:优化关键资源的加载速度,减少关键资源的个数,降低关键资源的 RTT 次数。在交互阶段,核心的优化原则是:尽量减少一帧的生成时间。可以通过减少单次 JavaScript 的执行时间、避免强制同步布局、避免布局抖动、尽量采用 CSS 的合成动画、避免频繁的垃圾回收等方式来减少一帧生成的时长。
2025-06-25 17:53:11
905
原创 TypeScript — d.ts 类型声明文件
生成tsconfig.json文件这个文件是通过tsc --init命令生成的配置详解"compilerOptions": { "incremental": true, // TS编译器在第一次编译之后会生成一个存储编译信息的文件,第二次编译会在第一次的基础上进行增量编译,可以提高编译的速度 "tsBuildInfoFile": "./buildFile", // 增量编译文件的存储位置 "diagnostics": true, // 打印诊断信息 "target": "E.
2025-06-24 19:20:16
1079
原创 浏览器工作原理24 [#]分层和合成机制:为什么css动画比JavaScript高效
本文主要讲解渲染引擎的分层和合成机制,因为分层和合成机制代表了浏览器最为先进的合成技术,Chrome 团队为了做到这一点,做了大量的优化工作。了解其工作原理,有助于拓宽你的视野,而且也有助于你更加深刻地理解 CSS 动画和 JavaScript 底层工作机制。每个显示器都有固定的刷新频率,通常是 60HZ,也就是每秒更新 60 张图片,更新的图片都来自于显卡中一个叫前缓冲区的地方,显示器所做的任务很简单,就是每秒固定读取 60 次前缓冲区中的图像,并将读取的图像显示到显示器上。那么这里显卡做什么呢?显卡的职
2025-06-24 15:57:29
1021
原创 浏览器工作原理23 [#]渲染流水线:CSS如何影响首次加载时的白屏时间?
首先介绍了 CSS 在渲染流水线中的位置,以及 CSS 是如何影响到渲染流程的;接下来通过渲染流水线分析了从发出请求到页面首次绘制的三个阶段;最后重点介绍了第二个白屏阶段以及优化该阶段的一些策略。通过今天的内容可以知道虽然 JavaScript 和 CSS 给我们带来了极大的便利,不过也对页面的渲染带来了很多的限制,所以要关注资源加载速度,需要小心翼翼地处理各种资源之间的关联关系。
2025-06-23 16:59:12
674
原创 浏览器工作原理22 [#]DOM树:JavaScript是如何影响DOM树构建的
从网络传给渲染引擎的 HTML 文件字节流是无法直接被渲染引擎理解的,所以要将其转化为渲染引擎能够理解的内部结构,这个结构就是 DOM。DOM 提供了对 HTML 文档结构化的表述。在渲染引擎中,DOM 有三个层面的作用从页面的视角来看,DOM 是生成页面的基础数据结构。从 JavaScript 脚本视角来看,DOM 提供给 JavaScript 脚本操作的接口,通过这套接口,JavaScript 可以对 DOM 结构进行访问,从而改变文档的结构、样式和内容。
2025-06-21 09:16:08
724
原创 浏览器工作原理21 [#]页面性能分析:利用chrome做web性能分析
首先我们简单介绍了 Chrome 开发者工具 10 个基础的面板信息;然后重点剖析了网络面板,再结合之前介绍的网络请求流程来重点分析了网络面板中时间线的各个指标的含义;最后我们还简要分析了时间线中各项指标出现异常的可能原因,并给出了一些优化方案。其实通过今天的分析,我们可以得出这样一个结论:如果你要去做一些实践性的项目优化,理解其背后的理论至关重要。因为理论就是一条“线”,它会把各种实践的内容“串”在一起,然后你可以围绕着这条“线”来排查问题。
2025-06-18 17:59:36
723
原创 浏览器工作原理20 [#] async await使用同步方式写异步代码
Promise 的编程模型依然充斥着大量的 then 方法,虽然解决了回调地狱的问题,但是在语义方面依然存在缺陷,代码中充斥着大量的 then 函数,这就是 async/await 出现的原因。使用 async/await 可以实现用同步代码的风格来编写异步代码,这是因为 async/await 的基础技术使用了生成器和 Promise,生成器是协程的实现,利用生成器能实现生成器函数的暂停和恢复。
2025-06-17 11:20:36
705
原创 浏览器工作原理19 [#]使用Promise告别回调函数
首先,我们回顾了 Web 页面是单线程架构模型,这种模型决定了我们编写代码的形式——异步编程。基于异步编程模型写出来的代码会把一些关键的逻辑点打乱,所以这种风格的代码不符合人的线性思维方式。接下来我们试着把一些不必要的回调接口封装起来,简单封装取得了一定的效果,不过,在稍微复制点的场景下依然存在着回调地狱的问题。多层嵌套的问题;每种任务的处理结果存在两种可能性(成功或失败),那么需要在每种任务执行结束后分别处理这两种可能性。
2025-06-15 14:30:42
944
原创 浏览器工作原理18 [#] 宏任务和微任务:不是所有的任务都是一个待遇
首先我们回顾了宏任务,然后在宏任务的基础之上,我们分析了异步回调函数的两种形式,其中最后一种回调的方式就是通过微任务来实现的。接下来我们详细分析了浏览器是如何实现微任务的,包括微任务队列、检查点等概念。最后我们介绍了监听 DOM 变化技术方案的演化史,从轮询到 Mutation Event 再到最新使用的 MutationObserver。MutationObserver 方案的核心就是采用了微任务机制,有效地权衡了实时性和执行效率的问题。
2025-06-13 15:40:44
903
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅