自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 对比不同代码托管平台应用pr-agent的webhook的实现思路

那么针对仓库或版本控制系统的事件,对比不同的webhook,他们的实现方式略有差异,下面将针对架构模式、认证机制、事件处理差异、URL构建差异、命令处理差异、过滤逻辑差异、错误处理差异等展开说明。通过上述差异,提出几个可以在perforce_webhook以及swarm中可以优化及修改的措施。

2025-12-22 17:14:56 96

原创 moduo库的模拟实现--TimeWheel

timewheel的整体结构为一个循环数组,那么我们就使用vector来管理它,为达到循环操作,我们不需要设计成循环链表那样,只需要利用好取模操作即可。这里很明显不是简单的int、long、short等类型,而是一个支持在这个类型中至少完成一个函数的回调,设置超时时间等方法。有个这个类之后,我们就可以用OOP的那一套方法,在TimeWheel类中,创建TimeTask对象来对其进行管理。定义:** 实现共享所有权的智能指针,使用引用计数管理资源。对 shared_ptr 管理的对象的非拥有引用。

2025-11-17 21:00:53 384

原创 “史上最装逼的”前中后序遍历一颗二叉树!!!--Moris(本文也会讲解非递归实现 面试重点哦)

Moris遍历及非递归实现二叉树遍历

2025-04-07 20:53:08 197

原创 模拟实现LRU和LFU缓存

例如,在网页缓存中,用户访问过的页面更可能再次访问,因此LRU缓存能够优先保留最近使用的页面,减少重复加载的开销;例如,在热点数据缓存中,社交媒体平台的热门帖子或电商平台的畅销商品即使不是最近访问的,也因访问频率高而需优先保留;我们可以这么设计,根据LRU的启发,也是将元素存在链表中,那么只需要再加一个频率参数就可以,为了方便更新,我们设计一个频率桶的结构,每个桶里放一个列表,表示当前在这个频率下的所有元素,且在每个链表中从头到尾,优先级以此降低。

2025-04-06 21:40:34 321

原创 基于命名管道实现进程间的通信(C++)

首先处理server,它需要先创建一个FIFO管道,然后我们知道文件的一些列系统调用,本质上就是拿到fd(文件描述符)进行操作,于是我们创建并打开文件,获得文件描述符,然后就是要处理读取操作,读取到哪呢?那么本文介绍的命名管道方式是一种基于FIFO管道的通信方式,FIFO可以理解为一种特殊的文件类型,他支持不同进程的读写操作,而不是像普通文件,当进程对其I/O时,会将内容刷新到缓冲区,而命名管道只是针对于两个进程间的I/O交互。如何理解进程间通信?为什么采取命名管道的方式?

2025-04-03 20:52:58 231

原创 基于golang高并发机制,浅谈项目中如何利用好高并发

Goroutine的实现思路大体为:在用户态层面,自己创建并维护一个队列,而非传统的Java线程池的方式,维护多个状态机,完成各个任务,这个实现较为轻量级。最近初学了go语言的一些基础,对其语言特性部分的高并发部分非常有兴趣,下面浅谈一下有哪些收获和实践意义。等同于Java的线程池或者C++的ThreadPool,即生产者-消费者模式,向任务队列中不断添加任务并分配执行。可以看出,Java在实现时,需要显示的处理线程和中断以及错误,使得代码冗余,且实现简单游戏的逻辑不够灵活。

2025-04-02 21:19:24 304

原创 设计实现环形环形缓冲器

读者可以模拟一个数组,插入数据时,rear不断++,到达数组末尾时,再取模回到起点,此时和头指针位置相同。当生产速度快于消费者时,缓冲区能够存储临时数据,反之亦然。那么我们采取多给数组一个空位的思路解决这个问题,每次让尾指针指向下一个当前数据的下一个位置,这样判满时,只需要判断(rear+1)%capacity==head,判空时,只需要让capacity==head.这样做的原理是,通过一个哨兵位的空节点,实际上满元素状态比实际长度少一,所以判断满时,必须采取第一个式子,而判断空时,就是两指针相遇。

2024-09-11 09:45:25 503 2

原创 动态规划之背包相关问题

对于当前要产生最大值,取决于这两个集合的最大值(这里使用一点集合论的思想)第一个集合就是不取当前第i个物品,第二个是取当前第i个物品,如果不取,那也就是前i-1个的最大值,即为dp[i-1][j],如果取,我们先取i-1个的最大值,也就是dp[i-1],再取第i件物品,也就是j-v[i]先去除当前i物品的体积,再加上第i件物品的价值,即dp[i-1][j-v[i]]+w[i],直到遍历到m的容量后,就取到了当前的最大值。这时,当我们处理第i层的数据时,不会用到本层更新的值,只会单纯用到上一层的值。

2024-09-07 11:26:34 817

原创 深度理解C++类和对象

无参数、无返回值,不可构成重载,生命周期结束自动调用析构函数,对于非动态申请的内存,无需写析构函数,比如只有类似int/char等成员,亦或者在这个类中没有动态申请,例如用两个栈实现队列,系统会调用两个栈自己的析构函数,除此之外,只要在类中动态申请了内存,一定要写析构函数释放内存。分装成员变量和实现方法。前置:我们已经知道了构造函数充当初始化对象成员的作用,那么除了直接赋值实参给构造函数,这样的初始化方式之外,我们还可以采用一个已有的对象,对其初始化,形象的认为是将这个对象拷贝给要初始化的对象。

2024-07-12 21:40:17 558

原创 C++基础

但是我们又想使用我们自己的变量名,这时候就可以使用namesapce去限定一个使用的域,那么当我们再次使用变量时,可以对该变量进行限定。由于C语言的NULL的定义为(void*)0,这使得某些情况下对0和空指针的界定不清,产生错误,C++采用nullptr规避这一问题。1)引用是同一块内存的别名,引用一旦确定不可修改,引用传参,本质上是传地址,同一块内存可以有多个引用。2)cin为istream对象,cout为ostream的对象,二者为面向窄字符的标准输入输出流。引用可简化程序,避免使用较为复杂的指针。

2024-07-12 16:35:15 347

原创 蓝桥杯--小球反弹

思路:模拟一个坐标系,水平向右为x正方向 竖直向下为y的正方向。我们只需要写出状态判断逻辑,并让每个单位时间内的ds(一小段位移)去进行累加。这道题完美融合了编程和物理模拟 一时兴起,写了这道题。感觉一些游戏的模拟设计应该也是同样的思路。

2024-04-13 16:05:07 951 2

原创 深度解析利用队列的特性解决leetcode题目——反转

当遇到字符‘i’时,说明要反转,反转的本质就是和之前的元素形成相反的顺序,那么我们pusu_back元素,将其插入到队列后面,最后维护一个ans数组,如果说,最终的ishead为真,说明在当前条件下,需要正向返回,那么由于一开始我们将元素push_front到队列,也就是相对标准是逆序的,所以返回{q.rbegin(),q.rend()},同理,如果为假,那么需要反向返回,即返回{q.begin(),q.end()};前置:对于队列而言,我们知道最基础的操作是,先进先出,后进后出。

2024-04-01 09:08:33 523 5

原创 由排序问题引出对数器的应用

3.由于C语言的随机数生成本质是利用srand函数,其中种子作为参数,这里的种子为time(NULL),使得每次运行的结果都不一样。所以我们需要写一个copy函数,用于随机生成的两个数组保持一致。关于对数器的coding思路:利用随机数的生成,生成随机大小和范围的数组或其他数据结构的用例,对C语言来讲就是利用srand函数。在使用对数器之前,我们必须保证有一种完全正确的方法作为参照物,通过比对新方法和完全正确的方法在大样本下的运行是否一致。

2024-01-22 10:35:33 439 1

原创 初识算法--时间复杂度及空间复杂度

举一个简单的例子:在不同性能的电脑上,两者的结果可能完全不一样。具体走的次数即为输入的n,由于开辟为int 类型的空间,所以n的值有限,为一个常数,那么时间复杂度:O(1);可以用数学的阶数来理解,无论你n输入多大,均为常数阶的复杂度。这段代码中,每一次将相邻的数进行比较,每一轮将数值大的冒泡冒到最后,次数为:n+n-1+n-2+……1,为等差数列求和,阶数为n^2,时间复杂度为n^2.;那么下面考虑让n可以趋于无穷大,那么次数是随着n线性增加的,也就是阶数为n,时间复杂度为O(n).。

2023-12-24 17:27:40 380

原创 小白也能写扫雷游戏!

服务端需要生成一张记‘1’为雷,‘0’不为雷的棋盘,然后通过一些操作,使得玩家输入要排的坐标后,若是雷,则显示被炸死了;若不是雷,则统计该坐标周围的雷数。那么建立三个项目,分别为test.c(用于游戏的测试),game.c(用于整体游戏设计),game.h(用于声明各种头文件和函数)。首先分析可得,这个项目最好采用多个文件,分块处理不同部分,使得代码清晰,也方便调试。这里的set可以将服务端的棋盘设为‘0’,将客户端设为‘*’。本质就是二维数组的打印,但是我们最好给他加上坐标,方便玩家选择。

2023-12-10 21:38:37 108 2

原创 【无标题】以猜数字游戏为例,深度探索分支与循环语句

游戏规则非常简单,就是先随机生成一个数字,再让玩家输入数字,判断太小还是太大,还是答对,玩家据此信息调整新的输入,直到猜对停止游戏。remark:这里因为有不同的模式,使用switch case语句很好解决问题。即用if else语句判断,外层设置一个死循环,使玩家可重复游戏。代码非常容易,只需要控制好间距和换行,依次printf即可。游戏包括客户端的界面,即让玩家知道游戏规则,如何操作游戏。分别调用menu()和game(),让其循环执行即可。

2023-12-02 10:19:37 93

原创 初入IT行业的一些感想及展望

其次,编程不应该是照着答案去背诵复现,而应该是理解问题后,形成解决思路,自行一行一行的编程,并反复调试,以达到工作所需。初次接触到编程和计算机的一些操作时,便对IT行业产生浓厚兴趣,对各种新的问题和挑战也充满了强烈的求知欲。我想通过不懈的努力和日复一日的有效迭代,达到可以解决互联网企业工作中的大型工程问题、进行数据分析,以及可以在嵌入式相关领域展现自我。我最想进的IT公司是字节跳动,因为其企业理念和公司文化与我所追求的高度重合,希望终有一日可在字节跳动公司尽显个人价值。

2023-11-21 19:35:25 159

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除