- 博客(82)
- 收藏
- 关注
原创 DNS劫持问题
DNS劫持是一种网络攻击方式,攻击者通过篡改DNS查询结果,将用户流量重定向到恶意网站。用户可能在不知情的情况下访问了伪装成合法网站的恶意网站,从而泄露个人信息或遭受其他形式的网络攻击。DNS劫持是一种网络攻击方式,攻击者通过篡改DNS查询结果,将用户的流量重定向到恶意网站。此过程通常是通过修改DNS服务器的设置或通过中间人攻击来实现的。用户可能会在不知情的情况下访问伪装成合法网站的恶意网站,从而泄露个人信息或遭受其他攻击。
2024-08-27 21:20:33
2312
1
原创 go的并发模型
GMP 的基本概念GMP 模型是 Go 语言中用于实现高效并发的机制。它主要涉及三个核心概念:Goroutines(G)、Machine(M)和 Processor(P)。这些组件的设计目的是高效地调度和执行大量的 Goroutines。定义: Goroutine 是 Go 语言中的一个轻量级线程。它由 Go 运行时管理,能够并发执行任务。特点轻量级: 创建和销毁开销较小,通常内存占用较少。栈管理: Goroutine 使用动态增长的栈,初始栈小,能够根据需要增长。调度。
2024-08-25 23:08:41
1211
1
原创 使用redis设计延迟队列
基本概念:延迟队列是一种数据结构,它允许任务或消息在一定延迟后执行。这在很多场景下非常有用,比如定时任务、异步处理、批处理作业等。工作原理:任务被放入队列中,并设定一个特定的时间点。在这个时间点到来之前,任务不会被执行。一旦时间到达,任务就会从队列中移除并执行。数据结构:通常使用优先队列来实现,其中任务根据预定的执行时间进行排序。业务需求:随着业务量的增长,需要一个能够处理高并发和高可靠性的延迟队列系统,以支持其电子商务平台的订单处理、库存管理等业务。技术挑战。
2024-08-25 20:02:36
802
原创 goweb框架-gin
基数树(Radix Tree),又称前缀树(Trie),是一种用于快速检索的数据结构,特别适用于处理字符串的前缀匹配问题。节点:基数树由多个节点组成,每个节点代表字符串中的一个字符。根节点:代表空字符串,是树的起点。路径:从根节点到某一节点的序列,代表一个字符串的前缀。叶子节点:代表一个完整的字符串或模式。压缩:如果一个节点的所有子节点都只有一个子节点,该节点可以被压缩,从而节省空间。基数树的工作原理基于字符串的公共前缀,通过共享这些前缀来减少存储空间。
2024-08-20 22:16:43
1251
1
原创 Redis常见的数据类型和应用场景
Redis(Remote Dictionary Server)是一个开源的高性能键值数据库,以其内存中数据存储、支持数据持久化、丰富的数据结构和原子操作而闻名。它通常用作数据库、缓存和消息队列系统。String类型是Redis中最基础的数据结构,它提供了简单的key-value存储功能。其中,key是数据的唯一标识符,而value可以是字符串或者数字。List类型在Redis中是一个双向链表结构,它可以存储一系列的字符串元素,元素在链表中有序,并且可以支持从链表的头部或尾部插入或删除元素。
2024-08-15 14:59:07
1559
1
原创 MySQL的InnoDB存储引擎中的Buffer Pool机制
Buffer Pool是MySQL数据库中的InnoDB存储引擎使用的一个内存区域,用来缓存数据库中的页(pages),以提高数据库的读写性能。每个页通常是16KB的大小,但这个大小可以根据配置进行调整。提高I/O效率:通过将数据和索引缓存到内存中,减少对物理磁盘的访问次数。支持数据局部性:利用数据访问的局部性原理,预加载可能会访问的数据,提高访问速度。事务支持:通过undo页支持事务的回滚和MVCC(多版本并发控制)。脏页管理:记录数据的变更,并通过刷新机制确保数据的持久性。
2024-08-15 13:24:43
1312
1
原创 grpc简单知识
RPC(Remote Procedure Call)是一种允许程序调用另一个地址空间(通常是在不同的机器上)的程序的函数或方法的协议。RPC使得开发者能够像调用本地函数一样调用远程服务,隐藏了网络通信的复杂性。RPC的重要性在于它简化了分布式系统中的服务间通信,使得开发者可以专注于业务逻辑的实现,而不必关心底层的网络细节。服务注册是服务端实现的第二步,其中涉及到定义服务的接口和实现。使用IDL(如Protocol Buffers),开发者可以定义服务的方法和传输的消息类型。
2024-08-14 22:38:49
1440
原创 mysql中log
Undo Log记录事务前的数据状态,用于回滚和多版本并发控制。Redo Log记录事务对数据页的修改,确保事务的持久性。Binlog记录数据库变更操作,用于复制、备份和审计。
2024-08-14 22:13:27
488
原创 RSA算法解析
数据加密:TLS通过加密技术保护数据传输过程中的隐私,防止数据在网络中被截获。身份验证:使用数字证书,TLS可以验证通信双方的身份,确保通信的双方是可信的。数据完整性:TLS通过消息摘要和签名机制确保数据在传输过程中没有被篡改。前向保密:即使密钥被泄露,过去的通信内容也不会被解密。兼容性:TLS广泛支持,几乎所有现代浏览器和服务器都支持TLS,确保了广泛的兼容性。TLS的作用端到端加密:TLS为客户端和服务器之间的通信提供了端到端的加密,确保数据传输的隐私性。数据完整性。
2024-08-13 15:48:28
824
原创 select,poll,epoll之间的关系和区别
文件描述符(File Descriptor,简称FD)是一个抽象的非负整数,用于在操作系统中唯一标识一个打开的文件或其他资源,如管道、设备等。每个进程在执行时,操作系统会为其维护一个文件描述符表,这个表记录了该进程打开的所有文件和其他资源的引用。文件描述符在这个表中作为索引使用,指向表中的一个条目,每个条目包含了资源的相关信息和操作该资源的能力。标识资源:为系统中的每个打开资源提供一个唯一的标识符。简化操作:通过文件描述符,进程可以方便地对文件进行读写操作,而无需关心底层的实现细节。资源管理。
2024-08-13 11:33:29
1029
原创 非对称加密算法-ECDHE
密钥交换算法是现代加密通信的基础。它允许两个通信方在不安全的通道上安全地建立一个共享的密钥,而无需事先共享任何秘密信息。这个共享密钥随后可以用于加密和解密双方的通信,确保数据的机密性和完整性。离散对数是一个数论问题,它在密码学中非常重要。具体来说,如果我们有一个整数bb、一个整数gg(通常称为基或生成元),以及一个整数yy,那么离散对数问题就是找到一个整数xx,使得: gx≡y(modp)gx≡y(modp) 这里的pp是一个大素数,而≡≡表示同余。
2024-08-12 22:28:12
2258
原创 Mysql 解决幻读的问题
事务是数据库管理系统中执行的一系列操作,这些操作作为一个整体被执行,以确保数据的完整性和一致性。原子性(Atomicity):事务中的所有操作要么全部完成,要么全部不完成,不会结束在中间某个点。一致性(Consistency):事务必须保证数据库从一个一致的状态转移到另一个一致的状态。隔离性(Isolation):并发执行的事务之间不会互相影响。持久性(Durability):一旦事务提交,它对数据库的改变就是永久性的,即使系统发生故障也不会丢失。
2024-08-12 18:40:02
1496
原创 mysql中索引失效的原因
索引是数据库中用来提高数据检索效率的数据结构。在数据库中,索引的作用类似于书籍的目录,它可以帮助数据库管理系统(DBMS)快速定位到数据存储的位置,而不必扫描整个数据表。使用索引可以显著减少查询数据所需的时间,特别是在处理大型数据集时。以下是使用Mermaid对B+树索引结构的图示:在这个图中,A代表B+树的根节点,它包含了子节点的键值范围和指向子节点的指针。B和C是根节点的子节点,进一步细分键值范围。D和E是叶子节点,它们直接包含了数据记录。F和G表示数据记录中更细粒度的数据,例如具体的数据行。
2024-08-12 16:23:49
881
原创 mysql中为什么使用B+树作为索引
B树是一种自平衡的多路搜索树,用于数据库索引和文件系统。多路搜索:每个内部节点可以有多个子节点。键值分布:键值分布在内部节点和叶子节点,每个节点的键值将子节点分隔开。平衡性:B树在插入和删除操作中自动保持平衡。适用性:适用于读写操作,尤其是随机访问。B+树是B树的变体,专为数据库索引设计。所有数据在叶子节点:所有记录数据仅存储在叶子节点。非叶子节点仅存储键值:非叶子节点不存储实际的数据记录,只存储索引键和子节点的指针。叶子节点形成有序链表:叶子节点通过指针相连,便于范围查询和顺序访问。高扇出性。
2024-08-10 18:42:27
1345
原创 mysql中B+树的数据存储
InnoDB存储引擎简介InnoDB是MySQL数据库的默认存储引擎之一,以其高性能、可靠性和ACID事务支持而闻名。InnoDB支持行级锁定和外键约束,提供了高并发的数据访问能力。ACID事务:确保数据库事务的原子性、一致性、隔离性和持久性。行级锁定:提高并发性能,减少锁冲突。外键约束:支持数据库的完整性和数据的一致性。崩溃恢复:通过日志文件和恢复机制,确保数据库在崩溃后能够恢复到一致状态。数据存储方式InnoDB存储引擎将数据存储在磁盘上的表空间中,表空间由数据文件组成。
2024-08-09 21:27:22
3653
1
原创 mysql数据存储问题
InnoDB是MySQL的默认存储引擎,广泛用于需要事务支持和外键约束的场景。ACID事务: 保证了事务的原子性、一致性、隔离性和持久性。行级锁定: 提高了并发性能,只在修改行上加锁。MVCC(多版本并发控制): 允许在不锁定资源的情况下读取数据,提高了读取性能。系统表空间: 包含所有的表数据和索引,通常以ibdata1命名。独立表空间: 由参数控制,每个表的数据和索引存储在独立的文件中,提高了空间管理的灵活性。NULL值列表。
2024-08-09 17:54:25
500
原创 mysql中select的执行流程
描述:MySQL数据库由Server层和存储引擎层组成。Server层是处理客户端请求、SQL语句解析和优化的中心,而存储引擎层则负责数据的物理存储和索引。总结SELECT查询语句执行的关键步骤强调优化器和索引在查询性能中的重要性总结本文深入探讨了MySQL执行SELECT查询语句的内部机制,从连接器的连接建立到查询缓存的检查,再到解析器、预处理器、优化器和执行器的协同工作,最后由存储引擎完成数据的检索。连接器确保了安全、有效的连接,并进行了用户认证。查询缓存。
2024-08-09 09:59:28
1060
原创 装饰器模式
基本定义: 装饰器模式是一种设计模式,它允许在不修改原有对象的基础上,通过创建装饰类来动态地给对象添加额外的职责。这种模式提供了一种灵活的替代方案,用于继承,以实现代码的复用和扩展。动态功能增加: 装饰器模式的核心在于其动态性。与传统的继承不同,装饰器模式允许开发者在运行时根据需要来添加或修改对象的行为。这种动态性为软件设计提供了极大的灵活性,使得我们可以轻松地应对需求的变化。优势动态扩展:装饰器模式允许在运行时动态地添加或修改对象的功能,提供了比继承更高的灵活性。低****耦合性。
2024-08-08 09:50:15
1120
原创 单机数据库的实现(上)
Redis 服务器实例可以包含多个数据库,默认情况下有 16 个数据库(编号从 0 到 15),用户可以通过配置文件中的databases参数修改数据库数量。Redis 默认从 0 号数据库开始工作,可以通过SELECT命令切换到其他数据库。数据库切换只会影响当前连接,其他连接不会受影响。Redis 的键空间(key space)是数据库的核心部分,存储了所有的键值对。每个数据库的键空间由一个字典(dict)实现,提供高效的增删改查操作。Redis 支持为键设置生存时间(TTL)或过期时间。
2024-08-07 17:13:54
919
原创 观察者模式
观察者模式(Observer Pattern),又称为发布-订阅模式(Publish-Subscribe Pattern),是一种行为设计模式,用于在对象之间建立一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。当主题对象状态发生变化时,所有依赖于它的观察者都会得到通知并自动更新。同步模式下的是的一个具体实现,它在接收到主题对象状态变化时,会按照订阅的顺序,一个接一个地通知所有观察者。这种模式保证了事件处理的顺序性,但可能因为单个观察者的长时间处理而阻塞其他观察者的处理。异步模式下的是。
2024-08-07 12:13:01
904
原创 redis的数据结构与对象
SDS(Simple Dynamic String)是一种由Redis引入的字符串数据结构,旨在提高字符串处理的效率和灵活性。与C语言中的传统字符串(C字符串)相比,SDS提供了一些额外的功能和改进,特别是在内存管理和性能方面。SDS通过引入长度存储、动态扩展、空间预分配和惰性空间释放等机制,在处理字符串操作时比传统的C字符串更加高效和安全。同时,SDS的二进制安全特性和兼容部分C字符串函数的设计,使其成为一种灵活且功能强大的字符串数据结构。在Redis中,SDS的应用极大地提高了系统的性能和可靠性。双向。
2024-08-06 16:15:45
735
原创 go的工厂模式
工厂模式是一种常用的软件设计模式,它属于创建型模式之一,其核心思想是将对象的创建和使用分离,以此来提高代码的模块化和可维护性。定义:创建相关或依赖对象的家族,而不需明确指定具体类。提供一个接口以创建一族相关或依赖的对象,而不需要构造它们的具体类。适用场景:当需要生成多个产品族时。优点:易于扩展新的产品族,同时保持了产品的一致性。缺点:新增产品等级结构困难,增加了系统的复杂度。简单工厂模式是一种创建型设计模式,它使用一个工厂类根据传入的参数来决定创建出哪一种产品类的实例。
2024-08-06 10:50:19
1079
原创 git版本控制的底层实现
Git的重要性Git是一个开源的版本控制工具,广泛用于编程开发领域。它极大地提高了研发团队的开发协作效率。对于开发者来说,Git是一个不可或缺的工具。学习底层原理的必要性逻辑性: 工科领域强调逻辑性,结论往往基于推导而非记忆。深度理解: 了解Git的底层存储原理,可以避免仅靠记忆操作指令,实现真正的随学随用。知识拓展: 掌握原理后,即使忘记具体命令,也可以基于原理重新推导,降低学习新知识的难度。学习目标全面掌握: 理解Git的每个命令背后的模型变动和实现原理。灵活应用。
2024-08-05 12:19:24
892
原创 缓存一致性问题
在本节中,我们探讨了数据库和缓存在工程实践中的应用,以及缓存一致性问题的重要性。理解这些基本概念对于后续深入分析缓存一致性问题和解决方案至关重要。在接下来的章节中,我们将详细分析缓存一致性问题,并探讨不同的解决方案。在本节中,我们深入分析了缓存一致性问题,并探讨了几种常见的解决方案,包括缓存双删策略、缓存延时双删策略和写缓存禁用机制。这些策略各有优势和适用场景,选择合适的策略需要根据具体的业务需求和系统特点来决定。在实际应用中,可能需要结合多种策略来达到最佳的缓存一致性效果。
2024-08-04 22:31:32
902
原创 InnoDB锁机制
定义:锁是一种同步机制,用来控制对共享资源的并发访问,防止数据竞争和不一致。作用:确保在某一时刻,只有一个事务能够修改数据,维护数据的完整性和一致性。死锁Deadlock:指两个或多个事务在执行过程中,因争夺资源而造成的一种僵局,这些事务相互等待对方持有的资源,导致无法继续执行。
2024-08-04 14:47:00
776
原创 WaitGroup
WaitGroup是 Go 语言标准库sync包中的一个并发同步工具,它用于协调主goroutine与多个工作goroutine的执行。通过计数器跟踪还未完成的工作goroutine的数量,WaitGroup能够确保主goroutine在所有工作goroutine完成之前不会继续执行。以下是一个使用 Mermaid 语法绘制的WaitGroup工作原理图,它展示了WaitGroup的三个主要方法如何协同工作:这个图解提供了一个清晰的视角,展示了WaitGroup。
2024-08-04 12:01:31
877
原创 MySQL的InnoDB存储引擎
事务是数据库管理系统执行过程中的一个逻辑单位,它由一系列操作组成,这些操作要么全部成功,要么全部失败,以此来保证数据的完整性。在数据库系统中,一致性意味着数据库的状态符合所有预定义的规则、约束和域。事务执行的结果必须从一个有效的数据库状态转换到另一个有效的状态。事务隔离级别定义了事务间的隔离性,决定了一个事务能够看到其他并发事务的哪些更改。InnoDB的锁机制是实现事务隔离性的关键部分,它控制了并发事务间的资源访问,防止数据竞争和不一致问题。
2024-08-03 16:57:21
696
原创 分布式事务原理
原子性(Atomicity):事务中的所有操作必须全部完成,如果任何一个操作失败,整个事务将撤销所有更改,返回到事务开始前的状态。一致性(Consistency):事务必须保证数据库从一个一致的状态转移到另一个一致的状态,遵循系统中所有的完整性约束和规则。隔离性(Isolation):并发执行的事务之间不会互相影响,每个事务都像在独立运行一样,以避免数据的不一致性。持久性(Durability):一旦事务提交,它对数据库的改变就是永久性的,即使系统发生故障也不会丢失。
2024-08-03 11:00:15
1061
原创 WaitGroup
WaitGroup是 Go 语言标准库sync包中的一个并发同步工具,它用于协调主goroutine与多个工作goroutine的执行。通过计数器跟踪还未完成的工作goroutine的数量,WaitGroup能够确保主goroutine在所有工作goroutine完成之前不会继续执行。以下是一个使用 Mermaid 语法绘制的WaitGroup工作原理图,它展示了WaitGroup的三个主要方法如何协同工作:这个图解提供了一个清晰的视角,展示了WaitGroup。
2024-07-29 21:54:30
1140
原创 go中的读写锁
场景描述:在并发编程中,经常会遇到对共享资源的读写操作。当读操作远多于写操作时,使用互斥锁(Mutex)可能导致读操作效率低下,因为它不允许多个读操作同时进行。性能问题:使用Mutex时,即使没有写操作,多个读操作也会被串行化,导致性能瓶颈。读写锁(RWMutex):是一种同步原语,用于控制对共享资源的并发访问,允许多个读操作同时进行,但写操作是排他的。选择依据:根据应用场景的读写操作比例来选择合适的锁。如果读操作远多于写操作,RWMutex可能是更好的选择。
2024-07-29 11:14:47
1173
原创 go中map
哈希表是一种基于哈希函数的数据结构,它提供了快速的数据插入和检索功能。哈希表通过使用哈希函数将键(key)映射到表中的位置来访问数据,这通常使得大多数情况下的查找、插入和删除操作的时间复杂度为O(1)。这种数据结构在多种编程语言中都有广泛的应用。sync.Map是 Go 语言提供的一个并发安全的 Map 类型,它在 Go 1.9 版本中引入。与内建的 Map 类型相比,sync.Map通过内部同步机制,允许多个 goroutine 安全地并发读写,而不需要外部加锁。
2024-07-21 21:57:54
1061
原创 go的Mutex实现原理及演进
深入理解Mutex:通过学习 Mutex 的实现,我更深入地理解了并发编程中的同步机制和挑战。性能与公平性的权衡:理解了在设计并发系统时,性能和公平性之间的权衡是不可避免的。代码实践的重要性:理论知识需要通过实践来巩固,实际编写和测试并发代码是提高理解的关键。通过这些笔记,我希望能够更好地理解和应用 Go 语言中的并发原语,编写出更高效、更可靠的并发程序。同时,这些知识也为我提供了一个思考并发编程问题的框架,帮助我在面对并发挑战时做出更明智的设计决策。
2024-07-19 18:25:15
1434
2
原创 go的内存分配机制
在引言部分,我们概述了内存管理的重要性,特别是对于 Go 语言。我们强调了自动垃圾回收和并发安全在 Go 内存管理中的核心地位,并预告了后续内容将详细解析这些机制。这为读者提供了一个宏观的视角,为深入理解 Go 的内存管理打下基础。在这一节中,我们回顾了操作系统的内存模型,包括多级存储模型、虚拟内存与物理内存的关系,以及分页管理的基本原理。这些概念为理解 Go 语言的内存管理机制提供了基础。通过分页管理,操作系统能够有效地管理内存资源,而 Go 语言则在此基础上进一步优化了内存的分配和回收策略。
2024-07-18 19:27:24
963
原创 用go实现限流算法
固定窗口限流算法是一种基础的限流策略,适用于需要简单限流控制的场景。然而,它可能不适合那些需要更平滑流量控制或需要根据实际流量动态调整限流策略的系统。在实际应用中,可能需要结合其他限流算法(如滑动窗口或令牌桶算法)来满足更复杂的业务需求。import ("sync""time"// FixedWindowLimiter 结构代表一个固定窗口限流器。// 它使用固定大小的时间窗口来限制请求的数量。limit int // 请求上限,窗口内允许的最大请求数。
2024-07-16 21:13:37
1196
原创 redis中使用stream实现mq(代码)
redis中使用stream实现mq(代码)首先从整体的代码文件上面来分析到底使用到了什么,这些是怎么串联起来的。loglog.go 主要的是整个消息队列启动之后,需要记录日志函数的封装redis 对与redis命令的封装config.go 在使用redis之后。需要对于redis有一些信息的配置redis.go 主要使用的redis命令封装testconfig.go 对于所编写的生产者,消费者队列的配置consumer.go 消费者。
2024-07-15 15:31:36
1007
原创 redis中的streams实现mq
具体的redis指令就不做过多的分析,接下来就要是通过小徐先生的几张图,来了解里面的具体流程,让大家先清楚一个大概过程,然后再进行深究具体问题。外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传下面这个是别人公众号上面的图,利用这个图,可以很清楚的看到客生产者使用redis的命令将数据放到redis的streams里面之中,然后消费者通过获取信息进行消费,如果消费成功的话,就是要给redis回应一个ack,这样就完美的保证了数据被消费。
2024-07-15 14:32:21
873
原创 etcd基础知识总结
由于云原生的出现,有了很多的分布式微服务的概念,所以也需要很多的技术去支持,这里的etcd是k8s内部的一大关键组件,etcd可以进行可靠的分布式数据存储。etcd:是一个用于配置共享和服务发现的键值存储系统。归根结底是一个存储组件,并且可以实现配置共享和服务发现。,是一款实现了元数据信息可靠存储的组件。可以几种管理配置信息。需要注意的是,etcd是由go语言实现的。
2024-05-19 15:22:26
908
原创 docker基础
就来说说我对于docker的理解,它就像是一个容器,把所以咱们需要使用的一些应用程序放在里面,在使用的时候进行管理操作,可以对于每个软件进行隔离,保护。主要是对于环境没有要求,在部署的时候,也非常方便,就算出现问题,也是很容易去解决的。
2024-05-18 16:15:27
650
1
原创 vue3知识总结-5
在之前的内容中有很多的,是关于Vue2的配置,组合式和选择式api需要都会,下面主要的就是一些新特性的总结,总体看完之后,就是基本上,可以理解清楚,是怎么样的,然后后面底层的肯定是需要深度剖析的。基本的基础知识就到这里。
2024-05-18 15:32:52
766
原创 Vue3知识总结-4
当使用在多个组件切换时候,被切换掉的组件会被卸载,可以用过组件强制被切换掉的组件任然保持“存活状态”在某些场景中,可能想要为子组件传递一些模版片段,让子组件在他们的组件中渲染这些片段。插槽内容可以访问到父组件的数据作用域,因为插槽内容本心是在父组件模版中定义的。Provide 和inject只能由上往下传递。需要同时使用父组件和子组件域内的数据。如果没有传数据,可以有一个默认的值。同步:多个功能,一个一个执行。异步:多个动能,同时运行。创建到销毁的生命周期。
2024-05-15 16:02:08
358
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人