- 博客(36)
- 收藏
- 关注
原创 GC垃圾回收
根对象(root object)是指那些能够从全局可达的地方访问到的对象。垃圾回收器会从根对象开始,通过遍历根对象的引用关系,逐步追踪并标记所有可达的对象。任何未被标记的对象都会被认为是垃圾,最终被回收释放。简而言之:就是正在运行的所有程序的使用的空间里面的变量和全局变量全局变量:全局变量可以被程序中的任何位置引用到,因此是根对象。当前正在执行的函数的局部变量:当一个函数正在执行时,其局部变量可以被当前函数中的代码访问到,因此也是根对象。
2025-11-03 19:24:41
1172
原创 基于go-zero的短链生成系统
gozero(又称go-zero)是一款由知名开发者kevwan设计的Golang微服务框架,专注于高性能、低延迟和易用性。其核心目标是简化分布式系统的开发,提供开箱即用的工具链,涵盖API网关、RPC服务、缓存管理、数据库操作等模块。
2025-06-30 13:26:04
1090
原创 重拾GMP
线程是跑在操作系统内核上的一段程序,是内核态的一段程序,是操作系统调度的基本单位。可以举个例子,比如一个网站的程序整体就是一个线程。这个线程对于用户是不透明的。
2025-05-21 19:00:20
962
原创 Go编程中的并发安全和锁
有时候在Go代码中可能会存在多个goroutine同时操作一个资源(临界区),这种情况会发生竞态问题(数据竞态)。类比现实生活中的例子有十字路口被各个方向的的汽车竞争;还有火车上的卫生间被车厢里的人竞争。上面的代码中我们开启了两个goroutine去累加变量x的值,这两个goroutine在访问和修改x变量的时候就会存在数据竞争,导致最后的结果与期待的不符。
2025-04-23 17:31:43
471
原创 Go语言并发编程中的原子操作
代码中的加锁操作因为涉及内核态的上下文切换会比较耗时、代价比较高。针对基本数据类型我们还可以使用原子操作来保证并发安全,因为原子操作是Go语言提供的方法它在用户态就可以完成,因此性能比加锁操作更好。Go语言中原子操作由内置的标准库sync/atomic提供。
2025-04-23 17:31:10
238
原创 Go协程中select的调度
在某些场景下我们需要同时从多个通道接收数据。通道在接收数据时,如果没有数据可以接收将会发生阻塞。这种方式虽然可以实现从多个通道接收值的需求,但是运行性能会差很多。为了应对这种场景,Go内置了select关键字,可以同时响应多个通道的操作。select的使用类似于switch语句,它有一系列case分支和一个默认的分支。每个case会对应一个通道的通信(接收或发送)过程。select会一直等待,直到某个case的通信操作完成时,就会执行case分支对应的语句。
2025-04-23 17:27:48
277
原创 MongoDB(使用Golang)
MongoDB 是一个基于分布式文件存储的数据库,由 C++ 语言编写。它是一个 NoSQL 数据库,旨在为现代应用提供高性能、高可用性和可扩展性。
2025-03-08 19:47:26
881
原创 Go八股(Ⅵ)Goroutine 以及其中的锁和思想
互斥锁是一个用于保护临界区的同步用语,它的所用是确保统一时刻只有一个goroutine能访问被保护的共享资源。通过互斥锁,可以避免并发访问带来的数据竞争问题。读写锁(RWMutex)是为了优化读操作频繁的场景设计的锁。与互斥锁不同,读写锁允许多个 goroutine 同时进行读操作,但写操作是互斥的,只有在没有任何读操作或写操作进行时,才能进行写操作。RLock():用于加读锁,多个 goroutine 可以同时持有读锁,只要没有其他 goroutine 持有写锁。RUnlock():释放读锁。
2024-11-16 21:17:35
1188
原创 Go八股(Ⅴ)map
哈希表用来存储键值对,通过hash函数把键值对散列到一个个桶中。Go使用与运算,桶个数m,则编号[0,m-1],把键的hash值与m-1与运算。**为了保证所有桶都会被选中,m一定为2的整数次幂。**这样m的二进制数表示一定只有一位为1,m-1的二进制数表示一定是低于这一位的所有位均为1。
2024-11-14 20:58:23
1246
原创 Go八股(Ⅳ)***slice,string,defer***
Go语言中arry即为数据的一种集合,需要在声明时指定容量和初值,且一旦声明就长度固定,访问时按照索引访问。通过内置函数len可以获取数组中的元素个数。
2024-11-06 16:45:35
1304
原创 计算机网络(Ⅷ)FTP(文件传输协议)and EMail(电子邮件)
1.SMTP使用持久连接2.SMTP要求报文(首部和主体)为7位ASCII编码3.SMTP服务器使用CRLF,CRLF决定报文的尾部HTTP比较HTTP:拉(pull)SMTP:推(push)二者都是ASCII形式的命令/响应交互,状态码HTTP:每个对象封装在各自的响应报文中SMTP:多个对象包含在一个报文中。
2024-11-01 21:07:09
955
原创 计算机网络(Ⅶ)Web and HTTP
3.在浏览(HTTP客户端)与Web服务器(HTTP服务器server)交换HTTP报文(应用层协议报文)对象可以是HTML文件,JPEG图像,Java小程序,声音剪辑文件等。1.客户发起一个与服务器的TCP连接(建立套接字)端口号为80。如果对象不存在,缓存请求原始服务器,然后再将对象返回给客户端。4.通常缓存是由ISP安装(大学,公司,居民区ISP),该基本HTML文件又包含若干对象的引用(链接)访问协议:用户名,密码,口令字,端口等;:对请求进行相应,发送对象的Web服务器。
2024-10-31 19:56:03
1205
1
原创 Go语言八股(Ⅲ)
uintptr和unsafe.Pointer的区别?什么是rune类型?rune类型是Go语言的一种特殊数字类型,在builtin/builtin.go文件中,它的定义为:type rune = int32;官方对它的解释是:rune是类型int32的别名,在所有方面都等价于它,用来区分字符值跟整数值。
2024-10-30 12:20:18
925
原创 计算机网络(Ⅵ)应用层原理
对于使用面向连接服务(TCP)的应用而言,套接字是4元组的一个具有本地意义的标识。4元组:(源IP,源port,目标IP,目标port唯一的指定了一个会话(2个进程之间的会话关系)应用使用这个标示,与远程的应用进程通信就像使用操作系统打开一个文件,OS返回一个文件句柄一样,以后使用这个文件句柄,而不是使用这个文件的目录名,文件名简单,便于管理。
2024-10-30 11:59:01
1264
原创 计算机网络(Ⅴ)网络核心
频分(FDM):交换节点与交换节点之间带宽较宽,通过频分多路复用可以划分为多个小片,两个节点找到空闲的小片进行通信。因为每个节点都要进行存储,存储的时间会影响链路传输的时间,所以这种方式会有较大延迟。时分(TDM):讲节点之间的通信能力按照时间周期分解为一个个小片,每个用户使用每个周期对应的小片。优点是保障了性能,但是资源共享的能力较差(计算机的通讯不是持续的,具有突发性,不适用于电路交换)如果传输的文件过大,传输的时间过长,那么所占用的链路就无法被别人使用,使整个链路的效能下降。(资源共享,按需使用)。
2024-10-27 13:31:15
474
原创 计算机网络(Ⅲ)什么是Internet
网络包括节点和边与节点大小,边的长短无关。例子:神经元,蜘蛛网,人之间的关系网是支撑互联网工作的共同标准(Interoperative)根据层次不同分为:物理层协议,链路层协议,网络层协议,传输层协议,应用层协议。两个对等层实体通信时,两边的协议模块应该相通(不一定完全相同)。协议包括1.格式:PDU就是协议数据,什么字段,符号规范,包括语法和语义2.次序:指定做出动作的条件3.动作:指定做出的反应PDU(协议数据单元):就是协议的数据。
2024-10-24 20:15:21
298
原创 计算机网络(Ⅱ)比较杂,后续博客会展开
上图就是TCP的工作原理分为:1.建立联系 2.确认联系 3.请求对象 4.对象回复 这个过程有两次信息的往返比较浪费时间(round tirp time):下层通过层间相应的接口向上层提供服务,本层功能的实现要通过调用下层来实现。1.p to p-->point to point 中间网络设备。:可靠性非常高,时效性查(会消耗传输放,接收方空间,时间)2.e to e-->end to end 终端到终端。:可靠性不是很高,但是时效性好(直播,实时广播)3.网络层:数据平面(交换机,IP)
2024-10-24 20:14:04
227
原创 初探计算机网络Ⅰ
如图所示,如果多设备之间两两建立联系,则会导致线路混乱,使用例如 1发送的消息给HUB,然后HUB将信息全部转发给其他终端(广播)如果多终端同时时发送消息,则接收的终端无法分辨多个信号,为了解决这个问题出现了用来检测链路上是否已经有终端在发送信息。缺点:带宽利用率较低,只能有一台终端发送数据,链路的利用率很低。
2024-10-22 20:51:02
483
1
原创 GO语言中的字符串
Go语言中的字符串只能使用""包括Go语言中''包裹的是字符打印网络路径时,反斜线可能被认为是转移符号,在这些反斜线后面再加一个反斜线表示继续转义。示例。
2024-06-19 19:57:25
198
原创 顺序二叉树
二叉树一般在学校中要求重点掌握链式二叉树,殊不知数组有其区别于链表的优势,并且利用二叉树双亲节点和孩子节点的数量关系可以实现二叉树的基本功能。
2024-05-12 19:25:22
307
1
原创 边集数组(C++实现)
边集数组,顾名思义 就是使用数组存储图中边的信息。存储的信息有弧的起点,弧的终点,弧的权重。因为涉及到起点和终点,所以边集数组一般用来表示有向图。
2024-04-23 20:04:18
530
原创 链式二叉树C++(附带可执行源码)
于线性表的(一个节点只有一个直接前驱和一个直接后继),树是的一种数据结构。(一个节点对应多个直接后继)。由于n叉树在实现过程中其分叉数目不定,而n叉树的问题大多可以化解成二叉树来理解,所以二叉树是重点研究对象。链式二叉树是二叉树的一种存储形式,它的操作更加简单灵活,便于对于二叉树中的节点进行增删。
2024-04-09 17:16:39
519
原创 信息系统框架集成第三方产品案例(华为电报接口)
在工程实践中,一个大公司产品的实现需要各部门的互相协同,而产品的开发思路和设计用途()需要架构师编写(Interface),C++的可以指定类中函数的,在开发者明确产品要实现的功能后,利用架构师所提供的形参(接口)实现功能。文章以华为电报接受为例。
2024-03-20 16:57:31
404
1
原创 C++栈的顺序存储(可扩展空间)和链式存储
是一种常见的数据结构,它具有的特性,即最后入栈的元素最先出栈。栈的顺序存储是指使用来实现栈的存储结构。在顺序存储中,栈的底部对应数组的起始位置,栈的顶部对应数组的末尾位置。当元素入栈时,将元素放置在栈顶位置,栈顶指针向上移动;当元素出栈时,将栈顶元素移除,并将栈顶指针向下移动。栈的链式存储是指使用链表来实现栈的存储结构。在链式存储中,栈中的每个元素被视为链表的节点,节点包含一个数据域和一个指向下一个节点的指针。入栈操作将新元素插入链表的头部,将链表的头指针指向新的节点;
2024-03-20 16:32:36
668
1
原创 C++泛型双向链表(简单的学生老师管理系统)
public://头节点//后继指针//前驱指针//构造函数//析构函数public://添加节点//删除节点//改变节点数据//搜索节点//打印整条链表//检查新元素是否已经存在//排序//文件操作//运算符重载public:这段代码中的文件操作,是为了存储项目中的学生,老师,校长三个类的数据,暂时我没有好的方法对这段文件操作有所优化,希望大家有什么建议欢迎指出private:int id;int score;
2024-03-07 20:58:26
638
原创 泛型双向循环链表的创建及其方法
上次给大家展示了泛型单项循环链表的创建及其方法,接下来,让我们在学完双向链表后,进行双向循环链表的学习。泛型单向循环链表:泛型循环链表-优快云博客。
2024-03-01 20:39:55
1159
原创 泛型循环链表
注意:因为是循环链表,打印个数超过链表长度时会循环打印。删除,查询,增加,更改时,如果访问的位置大于链表长度,则会循环访问。这里的泛型链表,按照道理说可以操作很多数据类型,这里只展示了整形。这里按照传入的位置访问对应的节点。其实就是遍历整条链表。
2024-02-28 17:18:00
441
3
C++从初识到模板类-大一,面向对象编程
2024-03-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅