- 博客(13)
- 收藏
- 关注
原创 你真的懂微服务的RPC吗?
拦截器的作用,是在执行核心业务方法的前后,创造出一个统一的切片,来执行所有业务方法锁共有的通用逻辑。此外我们还能够通过这部分通用逻辑的执行结果,来判断是否需要熔断当前的执行链路,以起到拦截的效果有关grpc拦截器的内容,其实和gin框架中的handlersChain是异曲同工的。req:业务处理方法的请求参数info:当前所属的业务服务servicehandler:真正的业务处理方法// 前处理校验err!= nil{// 前处理校验不通过,则拦截,不调用业务方法直接返回。
2025-12-30 15:08:51
956
原创 从0到1理解位图!
先来看一个场景:有一个项目,需要支持查询某个用户是否在线。你会怎么做?第一个想法大概是使用哈希表存储所有在线的用户ID,然后查询用户ID是否在哈希表中来判断用户是否在线。这样当然可以,但是有没有更好的方法呢?先来看哈希表的瓶颈,假设用户ID我们用一个int32类型来存储,那么每个在线用户光key就需要4byte的存储空间(我们假设value为空结构体),而哈希表还有别的内存开销。假设我们有一亿个用户,那么哈希表光key占用的空间为4byte * 1亿 = 400MB,而且哈希表其它部分的内存开销更大。
2025-12-29 19:53:44
272
原创 真正理解Raft共识算法(上)
对于存储型系统来说,为了消除单点故障,提高可用性,系统会用集群方案部署,而数据则以副本形式存储在多个节点,那多个节点间的数据如何保证一致呢?答案就是使用共识算法。Paxos算法难以理解,所以Raft算法出现了。1. 问题分解 2. 状态简化。
2025-12-28 13:48:57
859
原创 一文带你彻底弄懂GMP调度模型!
在这里我们介绍了Go语言调度器中常见的数据结构,下面就介绍Go语言调度器是怎么运作的至此,GMP就大概结束了,但是我们发现,似乎所有调度路径,都要使用mcall()切换到g0栈才能执行,这是为什么?栈空间不足风险:用户G的栈是动态增长的,可能只剩几百字节schedule()函数本身调用链很深,需要大量栈空间可能导致栈溢出。所以此时我们要切换到g0,因为g0的栈空间通常比用户G的栈空间大破坏用户G的上下文schedule()内部可能会修改寄存器,调用其它函数,甚至触发GC。
2025-12-27 20:02:43
725
原创 彻底搞懂golang的IO复用(二)
单一线程阻塞等待时,只能处理一个IO读写请求,非阻塞+忙轮询,又会导致CPU大量空转,影响性能,那么,我们要怎么处理大量IO读写请求呢?
2025-12-26 13:28:29
255
原创 一文带你了解两大分布式基本理论!
分布式架构相信大家或多或少都听说过或者开发迭代过程中应用过,这篇文章就介绍两个分布式领域的基础理论,即:CAP与BASE理论。
2025-12-24 17:15:21
793
原创 一文带你弄懂反射!
反射是指在程序运行期间对程序本身进行访问和修改的能力。程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分。在运行程序时,程序无法获得自身的信息。对于没有反射机制的情况,程序运行时:知道内存里存了什么值(比如x=42)但不知道这个值对应的变量叫x也不知道x是int类型,属于哪个结构体,有没有方法等这是为什么呢?看下面的解释:对于变量name:=“rose”:编译器知道的:该变量的名字是name,类型是string。
2025-12-22 10:31:05
537
原创 你真的会Context吗?
context是golang中的经典工具,主要在异步场景中用于控制并发以及控制goroutine,此外,context还有一定的数据存储能力。本人在学习过程中,在许多地方都看到了context,大致了解了使用方法,但是不了解底层使我非常难受,这篇文章就探究一下context的底层原理。
2025-12-22 10:28:45
886
原创 Java学习笔记4
成员变量:成员变量是定义在类中,方法体之外的变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。看看周围真实的世界,会发现身边有很多对象,车,狗,人等等。在软件开发中,方法操作对象内部状态的改变,对象的相互调用也是通过方法来完成。拿一条狗来举例,它的状态有:名字、品种、颜色,行为有:叫、摇尾巴和跑。类变量:类变量也声明在类中,方法体之外,但必须声明为static类型。一个类可以拥有多个方法,在上面的例子中:创建Java对象的模板。声明:声明一个对象,包括对象名称和对象类型。
2024-11-03 16:23:40
138
原创 JAVA学习笔记3
当保存文件的时候,你应该使用类名作为文件名保存(切记 Java 是大小写敏感的),文件名的后缀为 .java。类名:对于所有的类来说,类名的首字母应该大写。大小写敏感:Java 是大小写敏感的,这就意味着标识符 Hello 与 hello 是不同的。方法名:所有的方法名都应该以小写字母开头。首字符之后可以是字母(A-Z 或者 a-z),美元符($)、下划线(_)或数字的任何字符组合。所有的标识符都应该以字母(A-Z 或者 a-z),美元符($)、或者下划线(_)开始。Java 所有的组成部分都需要名字。
2024-11-03 16:19:08
323
原创 JAVA学习笔记2
一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作。下面简要介绍下类、对象、方法和实例变量的概念。对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;下面看一个简单的 Java 程序,它将打印字符串 Helpublic class HelloWorld {方法:方法就是行为,一个类可以有很多方法。实例变量:每个对象都有独特的实例变量,对象的状态由这些实例变量的值决定。类:类是一个模板,它描述一类对象的行为和状态。
2024-10-27 18:31:48
334
原创 JAVA学习笔记1
一、JAVA语言概述1.1 诞生类C语言发展和衍生的产物;纯粹的面向对象;舍弃C语言中的容易引起错误的指针;增加垃圾回收器功能;1.2 特征易学的;强制面向对象的;分布式的;健壮的;安全的;体系结构中立的;解释性的;性能略高的;原生支持多线程的;
2024-10-27 18:28:44
265
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅