- 博客(39)
- 收藏
- 关注
原创 深入浅出 AES 加密算法与 Go 语言实战
本文深入解析AES对称加密算法及其在Go语言中的实现。AES作为互联网安全基石,广泛应用于HTTPS、Wi-Fi、SSH等场景。文章首先介绍对称加密原理,对比流密码与分组密码的优劣,重点剖析AES算法结构(密钥扩展、轮函数等)。随后详细讲解ECB、CBC、CTR、GCM等加密模式的特点及Go实现,指出ECB的安全缺陷和CBC的常见误用。特别强调GCM模式的优势,其整合加密与认证于一体。最后提供生产环境Checklist,包括密钥管理、侧信道防护等实践建议。
2025-10-16 18:38:30
762
原创 游戏开发中的状态管理与定时器
:一个有限状态机可以表示为一个五元组 (S, Σ, δ, s₀, F),其中:S 是有限的状态集合Σ 是有限的输入字母表δ: S × Σ → S 是状态转移函数s₀ ∈ S 是初始状态F ⊆ S 是接受状态集合在游戏开发中,这个数学模型被具体化为:S:游戏实体可能处于的所有状态(如空闲、移动、攻击、死亡等)Σ:可能触发状态转换的事件(如玩家输入、计时器到期、碰撞发生等)δ:状态转换规则,定义在什么条件下从什么状态转换到什么状态s₀:实体创建时的初始状态。
2025-09-26 16:29:11
954
原创 深度剖析 IM 单聊与群聊架构设计
协议字段设计:消息头(版本号、长度、类型、会话ID)+ 消息体(正文、扩展信息)。序列化方式:JSON(易调试)、Protobuf(高性能)、FlatBuffers(零拷贝)。选择策略:大规模 IM 系统一般选 Protobuf。IM 单聊与群聊系统的架构,从最初的点对点消息,到大规模分布式系统,经历了长时间的演进。整体架构概览单聊与群聊架构设计细节存储、可靠性与性能优化网络协议与弱网优化分布式与高可用架构安全与合规性未来趋势与演进方向。
2025-09-19 16:11:26
829
原创 深度解析 IM 单聊与群聊架构(一)
在当今互联网应用中,即时通讯(Instant Messaging,简称 IM)已经成为不可或缺的功能模块。无论是企业级应用(如企业微信、钉钉)、社交应用(如微信、QQ、WhatsApp)、游戏应用,还是垂直行业平台(在线教育、在线医疗、电商客服等),IM 的单聊与群聊功能都是核心交互方式之一。然而,IM 系统的架构设计并非简单的“消息收发”,而是涉及等一系列复杂问题。本博客将带你从深度理解 IM 单聊与群聊架构的全貌,从基础原理到架构演进,再到工程实践,形成完整的知识体系。
2025-09-12 17:04:06
858
原创 AI 提示词工程与上下文工程:从入门到深入的系统实践指南
提示词工程(Prompt Engineering)是指通过精心设计输入提示(Prompt),以引导大语言模型产生更符合预期的输出的技术与方法。简单理解:提示词就是我们给模型的“问题或指令”;更深层理解:提示词是控制模型行为的隐性编程语言,我们通过自然语言而非代码与模型交互。请用中文解释牛顿第二定律。模型可能回答:牛顿第二定律是 F=ma,即力等于质量乘以加速度……你是一名物理老师,请用通俗易懂的语言,并结合生活中的例子,向初中生解释牛顿第二定律。那么模型的回答就会更贴近目标受众。
2025-09-05 15:17:00
1009
原创 从零到深度:IM单聊与群聊架构设计详解
本文系统介绍了即时通讯系统的架构设计,重点分析了单聊和群聊的技术实现。单聊架构主要涉及长连接维持、消息存储和可靠性保障;群聊则面临消息分发、成员管理和多端同步等复杂挑战。文章对比了写扩散和读扩散两种消息分发策略,并提出了混合方案。同时探讨了分布式架构设计、协议优化等关键技术,结合微信、Slack等实际案例,展示了IM系统从基础功能到复杂场景的演进路径。最后展望了未来与5G、AI等技术的融合方向。
2025-08-29 18:20:54
963
原创 深入理解 Elasticsearch:从原理到实战的系统性解析
本文深入解析Elasticsearch的核心原理与应用实践。首先剖析了索引、文档、分片等核心概念,以及7.x版本后废弃Type的深层原因;其次揭秘了倒排索引、分词器、近实时写入等底层机制;接着详细介绍了全文检索、聚合分析等核心功能;然后展示了ELK日志平台、电商搜索等典型应用场景;最后从分片优化、查询调优、JVM配置等方面给出性能优化建议。文章不仅讲解"如何使用",更注重"为何这样设计",帮助读者构建稳定高效的实时数据平台。
2025-08-22 12:13:03
957
原创 深入分析计算机网络面试题(完结)
由 Google 推出,基于 UDP,克服了 TCP 握手慢、丢包影响大的问题。集成了TLS 1.3 加密机制,连接更安全。支持0-RTT 建立连接,提高首次访问速度。广泛用于 HTTP/3 和 Chrome 浏览器通信。回答前要确认上下文,如“您是指 TCP 的连接状态,还是拥塞控制?常结合应用场景回答,如“这个机制在 CDN 中尤其重要”。画图解释复杂概念,如三次握手、TLS 握手、DNS 解析等。多用对比表格,让面试官理解你对多个技术点的区分能力。
2025-08-02 10:40:47
798
原创 深入分析计算机网络传输层和应用层面试题
传输层与应用层面试核心要点摘要:传输层TCP与UDP对比显示,TCP保证可靠传输但效率低,适合文件传输;UDP高效但不可靠,适合实时应用。TCP通过三次握手建立连接,四次挥手断开连接,并采用序列号、滑动窗口等机制确保可靠性。应用层重点包括HTTP/HTTPS区别(加密/端口)、HTTP版本演进(1.1长连接/2多路复用)、状态码分类及认证机制(Cookie/Session/JWT)。DNS解析过程涉及多级查询,结合CDN可优化访问。这些知识点是网络面试的核心考察内容。
2025-07-26 11:41:52
882
原创 深入分析计算机网络数据链路层和网络层面试题
子网掩码的定义子网掩码(Subnet Mask)是一个 32 位的二进制数,与 IPv4 地址配合使用,用于区分 IP 地址中的网络部分和主机部分。子网掩码的二进制表示中,“1” 对应的位表示 IP 地址的网络位,“0” 对应的位表示主机位。通常子网掩码也以点分十进制形式表示,如 255.255.255.0。子网掩码的作用NAT 的定义。
2025-07-21 09:04:30
907
原创 WebSocket:构建实时交互的 Web 应用
从 WebSocket 的工作原理,包括连接建立、数据传输和连接关闭的全过程,到使用 Go 语言和 gorilla/websocket 库实现一个简单但功能完整的 WebSocket 服务端,再到对服务端进行并发处理优化、添加认证授权、实现消息持久化、支持多种消息类型以及集群部署等高级功能的探讨,我们构建了一个较为全面的 WebSocket 知识体系。为了满足不同的业务需求,我们可以在 WebSocket 应用中支持多种类型的消息,并定义自定义的消息格式,使得客户端和服务端能够更灵活地进行通信。
2025-07-12 12:39:57
665
原创 Gin 框架中如何实现 JWT 鉴权中间件
JWT,全称是 JSON Web Token,它是一个开放标准(RFC 7519),用于在各方之间作为 JSON 对象安全地传输信息。每个 Token 是一个紧凑且 URL 安全的字符串,能够被签名和加密,从而保证信息的完整性、真实性和机密性。JWT 通常由三部分组成,分别是头部(Header)、载荷(Payload)和签名(Signature),它们之间用圆点(.)连接组合成一个完整的 Token。头部(Header)
2025-07-06 20:32:04
1021
原创 深度解析】使用Go语言实现JWT:从原理到实践
其典型结构包含三部分:Header(头部)、Payload(载荷)和Signature(签名),以点分隔形成`xxxxx.yyyyy.zzzzz`格式。Payload包含声明(claims),预定义的声明有`iss`(签发者)、`exp`(过期时间)、`sub`(主题)、`aud`(受众)等。2. 分布式缓存:将已签发的JWT黑名单存储于分布式缓存(如Redis),当需要使令牌失效时,将其加入黑名单。2. 缓存验证结果:对于频繁访问的API,可缓存已验证的JWT及其用户信息,设置合理的TTL(如5分钟)。
2025-06-29 18:04:15
1270
原创 彻底搞懂 Go语言内网穿透原理与实现
本文系统讲解基于Go语言的内网穿透原理与实现方案。主要内容包括:1)系统总体架构,分为公网Server、内网Client、隧道等模块;2)关键机制如控制连接与数据连接分离、TCP打洞;3)协议设计及握手机制;4)Server模块示例代码;5)TLS双向认证实现;6)多隧道映射配置;7)多路复用思路;8)常见调试技巧。文章对比了Ngrok、FRP等参考项目,适合开发者学习构建自定义内网穿透工具。通过分层讲解协议设计、模块实现和安全机制,为Go开发者提供完整的内网穿透技术方案。
2025-06-14 18:12:59
558
原创 Go 语言实现高性能 EventBus 事件总线系统(含网络通信、微服务、并发异步实战)
本文系统讲解了从零构建高性能事件总线(EventBus)的完整方案。首先介绍事件总线作为Pub/Sub机制的解耦优势,然后详细展示本地实现核心结构(事件注册、同步发布),并延伸讲解异步处理、通用接口封装等关键设计。文章重点剖析网络扩展方案,包括TCP/HTTP通信协议、跨服务事件传递及中间件机制(日志/鉴权/限流);还涵盖注册中心、延迟事件调度、链路追踪等高级特性。通过分层架构设计,最终实现支持本机、网络及分布式场景的通用事件总线系统,为构建弹性微服务架构提供核心技术支撑。
2025-06-07 18:22:19
1073
原创 Go语言事件总线EventBus本地事件总线系统的完整实现框架
基本概念:EventBus是一种设计模式,它充当一个中央集散地,负责在事件的发布者和订阅者之间进行消息的传递。在Go语言中,通过使用EventBus库,开发者可以轻松地实现事件的发布、订阅和处理。当某个事件发生时,发布者将事件发送到EventBus,EventBus根据事件的类型或主题,将事件通知给所有订阅了该事件的订阅者,订阅者接收到事件后执行相应的处理逻辑。主要功能:提供了事件的发布与订阅功能,使得组件之间可以通过事件进行通信,而无需直接调用彼此的方法。
2025-05-31 16:27:04
1183
3
原创 Go 语言学习 Protobuf 连接 gRPC 实现 AI 接口
本文介绍了使用Protobuf和gRPC实现AI接口的技术方案。首先讲解了Protobuf的安装与使用,包括.proto文件定义和Go代码生成;其次介绍了gRPC基础,包含服务端和客户端的实现方法;最后展示了如何将AI模型封装为gRPC服务,并提出了负载均衡、缓存机制等优化措施。该方案结合Go语言的高性能特性、Protobuf的高效序列化和gRPC的低延迟通信优势,能够构建高效、可扩展的AI接口,支持跨语言集成,为AI应用开发提供了可靠的技术基础。
2025-05-25 08:54:01
767
原创 Gorm框架进阶
很形象的一个例子,张三给李四转账100元,在程序里面,张三的余额就要-100,李四的余额就要+100 整个事件是一个整体,哪一步错了,整个事件都是失败的。事务就是用户定义的一系列数据库操作,这些操作可以视为一个完成的逻辑处理工作单元,要么全部执行,要么全部不执行,是不可分割的工作单元。但是,如果返回数据给前端,前端接收到的状态就是数字,不过问题不大,前端反正都要搞字符映射的。
2025-05-18 16:16:08
869
原创 Go语言安装proto并且使用gRPC服务(2025最新WINDOWS系统)
Protobuf(Protocol Buffers)是一种高效、跨平台的结构化数据存储格式,以二进制形式存储,占用空间小,但可读性较差。它的性能和效率优于JSON和XML,广泛应用于通信协议和数据存储领域。gRPC是Google开发的高性能、跨语言的RPC框架,使用Protobuf定义服务。要使用Protobuf,需从其官方GitHub下载并安装protoc工具,并配置系统环境变量。此外,还需安装protoc-gen-go和protoc-gen-go-grpc两个Go插件,用于生成Go代码。编写.proto
2025-05-11 09:06:30
1441
原创 MySQL完整版进阶及附录
MySQL体系结构:存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表而不是基于库的,所以存储引擎也可以被称为表引擎。默认存储引擎是InnoDB。相关操作:-- 查询建表语句show create table account;-- 建表时指定存储引擎CREATE TABLE 表名( ...) ENGINE=INNODB;-- 查看当前数据库支持的存储引擎show engines;
2025-04-20 10:52:09
414
原创 算法之并查集
并查集被很多OIer认为是最简洁而优雅的数据结构之一,主要用于解决一些的问题。它管理一系列当然,这样的定义未免太过学术化,看完后恐怕不太能理解它具体有什么用。。这其实是一个很有现实意义的问题。我们可以建立模型,把所有人划分到若干个不相交的集合中,每个集合里的人彼此是亲戚。为了判断两个人是否为亲戚,只需看它们是否属于同一个集合即可。因此,这里就可以考虑用并查集进行维护了。
2025-04-13 10:20:16
1112
原创 MySQL完整版基础
查询所有数据库:查询当前数据库:创建数据库:CREATE DATABASE [ IF NOT EXISTS ] 数据库名 [ DEFAULT CHARSET 字符集] [COLLATE 排序规则 ];删除数据库:DROP DATABASE [ IF EXISTS ] 数据库名;使用数据库:USE 数据库名;注意事项UTF8字符集长度为3字节,有些符号占4字节,所以推荐用utf8mb4字符集概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。
2025-04-05 15:57:13
705
原创 Gorm基础文档
模型是标准的 struct,由 Go 的基本数据类型、实现了Scanner和Valuer接口的自定义类型及其指针或别名组成定义一张表ID uint // 默认使用ID作为主键Email *string // 使用指针是为了存空值常识:小写属性是不会生成字段的自动生成表结构// 可以放多个的逻辑是只新增,不删除,不修改(大小会修改)例如将Name修改为Name1,进行迁移,会多出一个name1的字段生成的表结构如下默认的类型太大了修改大小我们可以使用gorm的标签进行修改有两种方式字段标签。
2025-03-30 09:58:08
543
原创 Gin框架
被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个 URI 之一。如果可能,拥有链接编辑功能的客户端应当自动把请求的地址修改为从服务器反馈回来的地址。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。Gin是一个非常受欢迎的Golang Web框架,在GitHub上已经有47k的星星,它和Golang的语法一样简洁明了,使得初学者得以迅速入门。不是标准也不是协议。当验证不通过时,会给出错误的信息,但是原始的错误信息不太友好,不利于用户查看。
2025-03-22 13:38:00
803
原创 go Web进阶
如果希望调用自定义函数,需要借助html/template包下的FuncMap进行映射FuncMap本质就是map的别名type FuncMap map[string]interface{}函数被添加映射后,只能通过函数在FuncMap中的key调用函数代码实现main代码import ("net/http""time"html代码。
2025-03-16 11:27:37
1162
原创 Go Web基础
Http:无状态协议,是互联网中使用Http实现计算机和计算机之间的请求和响应Http使用纯文本方式发送和接收协议数据,不需要借助专门工具进行分析就可以知道协议中数据Http报文(message)组成部分请求行(request-line)请求头(head)请求体(body)响应头响应体HTTP1.1实现了多种请求方式GET:向服务器请求资源地址HEAD:只要响应头POST:直接返回请求内容PUT:创建资源DELETE:删除资源TRACE:返回请求本身。
2025-03-09 09:11:46
1020
原创 超详细数据结构
一、绪论1.1、数据结构的研究内容1.数据的各种逻辑结构和物理结构,以及他们之间的相应关系2.对每种结构定义相适应的各种运算3.设计出相应的算法4.分析算法的效率1.2、基本概念和术语1.2.1、数据、数据结构、数据项和数据对象根据例子理解:假设有两张表,上表为人员表,下表为课程表, 表的格式如下:姓名性别身高课程代号小明男180A小红女180A小绿男180B课程代号课程名A语文B数学这两张表就是数据而单独的一张表就称为数据对象,即人员表是一个数据对象,课程表也是一个数据对象而每张表
2025-02-16 11:28:57
510
原创 史上最全!!!MySQL全方位最细笔记
对于那些是主键或者具有UNIQUE约束的列或者列组合来说,如果表中已存在的记录中没有与待插入记录在这些列或者列组合上重复的值,那么就把待插入记录插到表中,否则更新那条重复的记录中某些列的值。• 在BEFORE触发器中,我们可以使用SET NEW.列名 = 某个值的形式来更改待插入记录或者待更新记录的某个列的值,但是这种操作不能在AFTER触发器中使用,因为在执行AFTER触发器的内容时记录已经被插入完成或者更新完成了。驱动表中的记录在被驱动表中找不到匹配的记录,该记录不会加入到最后的结果集。
2025-02-08 19:44:18
959
原创 Linux进阶中的两个常用命令
awk 是一种处理文本文件的语言,是一个强大的文本分析工具。awk 通过提供编程语言的功能,如变量、数学运算、字符串处理等,使得对文本文件的分析和操作变得非常灵活和高效。之所以叫 awk 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。
2025-01-16 14:21:51
846
原创 Linux重点
Vim 是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。vim 则可以说是程序开发者的一项很好用的工具。连 vim 的官方网站 (https://www.vim.org/) 自己也说 vim 是一个程序开发工具而不是文字处理软件。
2024-12-07 15:48:20
1263
原创 Linux的Tree,Yum和Other命令
L level 限制目录显示层级-C 在文件和目录清单加上色彩,便于区分各种类型-p 列出权限标示。
2024-12-01 14:46:03
1000
原创 Win11设置Linux虚拟机配置静态IP地址
先查看虚拟机的两个WIFI是否已启用,然后点击VMnet8的编辑接着点击Internet协议版本4(TCP/IPv4),双击或者点击右下边的属性。首先点击使用下面的IP地址,然后再IP地址处输入192.168.136.1,在点击子网掩码后面的输入框后,会自动生成255.255.255.0,这个不用对其进行更改,最后点击确定就可以了。
2024-11-23 09:08:52
1281
1
原创 Channel(通道)
并发是指程序同时执行多个任务的能力Go 语言支持并发,通过 goroutines 和 channels 提供了一种简洁且高效的方式来实现并发。
2024-10-26 10:52:23
877
原创 go语言使用栈和队列实现计算器
逻辑十分简单,主要注意的是类型间的转化,要从空接口类型断言为string类型,再将string类型转化为int类型进行计算,使用float类型也可以实现小数计算,可以自己去尝试。上文只实现了正整数之间的加减乘除和小括号的运算,图方便未考虑其他可左右运算顺序的符号如:[]中括号 {}大括号 %取余,除此之外还可以尝试一下实现输入负数时处理的方法。,这种类型的表达式也被称为中缀表达式,我们很容易理解它的运算顺序。如果元素为数字,则直接入栈,若元素为运算符,则从栈中弹出两个数字进行运算,再将运算结果放入栈中。
2024-10-10 11:07:00
781
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅