自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 在protobuf里定义描述rpc方法的类型

service类中包含两个虚函数即在UserServiceRpc中的两个方法,UserServiceRpc_Stub继承UserServiceRpc,此类多了RpcChannel指针,方法将会通过Rpcchannel指针调用CallMethod函数,我们将用自己写的类继承Rpcchannel,重写其中的CallMethod方法,将派生类对象传给基类指针从而调用派生类里的函数。service UserServiceRpc //在test.proto中定义。

2024-04-21 22:03:00 719

原创 RPC分布式通信框架

分布式将一个工程分为多个模块,不同模块针对不同的功能,共同组成一个完成的项目,一个模块的改变不会将整体的项目进行重新编译部署。3.在系统中,有些模块属于CPU密集型,有些属于I/O密集型,各模块对于硬件资源的需求不一样。2.任意模块的修改都将导致整个项目代码重新编译部署。2.各模块之间的访问,无法完成通信的问题如何解决。1.受限于硬件资源无法提高并发量。1.系统模块划分不是很容易。

2024-04-21 20:15:57 556

原创 protobuf的使用

3、安装所需工具:sudo apt-get install autoconf automake libtool curl make g++ unzip。1、解压压缩包:unzip protobuf-master.zip。4、自动生成configure配置文件:./autogen.sh。二、protobuf文件test.proto的实现。生成test.pb.cc test.pb.h文件。7、安装:sudo make install。5、配置环境:./configure。三、编译test.proto文件。

2024-04-21 20:04:55 174

原创 C++生产者消费者模式(条件变量和互斥锁)

条件变量的wait操作:先释放互斥锁,将其放入互斥变量的等待队列中,等待其他线程唤醒,再放入互斥锁的等待队列中去获得锁进行操作。

2024-04-15 17:05:01 280

原创 系统监测工具-tcpdump的使用

因为该同步报文段是从客户端IP地址和端口号到服务器IP地址和端口号这个传输方向上的第一个TCP报文段,所以这个序号值也就是此次通信过程中该传输方向的ISN值。并且,因为这是整个通信过程中的第一个TCP报文段,所以它没有针对对方发送来的TCP报文段的确认值(尚未收到任何对方发送来的 TCP 报文段)。因为这是一次 TCP 通信的第一个 TCP报文段,所以它针对对方的时间戳的应答为0(尚未收到对方的时间戳)。因为这是一个同步报文段,所以win值反映的是实际的接收通告窗口大小。一个简单的tcpdump抓包过程。

2024-04-07 01:58:23 544 3

原创 TCP挥手中TIME_WAIT存在的原因

新的化身可能接收到属于原来的连接的、携带应用程序数据的TCP报文段(迟到的报文段),这显然是不应该发生的。另外,因为TCP报文段的最大生存时间是MSL,所以坚持2MSL时间的TIMEWAIT状态能够确保网络上两个传输方向上尚未被接收到的、迟到的TCP报文段都已经消失(被中转路由器丢弃)。因此,一个连接的新的化身可以在2MSL时间之后安全地建立,而绝对不会接收到属于原来连接的应用程序数据,这就是TIMEWAIT状态要持续2MSL时间的原因。2.保证让迟来的 TCP报文段有足够的时间被识别并丢弃。

2024-04-06 21:35:33 255

原创 事务的隔离级别

事务隔离级别(图文详解) - 知乎 (zhihu.com)

2024-03-20 08:56:25 86

原创 epoll函数的剖析

events 参数是一个用户数组,这个数组仅仅在 epoll_wait 返回时保存内核检测到的所有就绪事件,而不像 select 和 poll 的数组参数那样既用于传入用户注册的事件,又用于输出内核检测到的就绪事件。timeout 参数指定超时时间,单位为毫秒,如果 timeout 为 0,则 epoll_wait 会立即返回,如果 timeout 为-1,则 epoll_wait 会一直阻塞,直到有事件就绪。epoll_wait()成功返回就绪的文件描述符的个数,失败返回-1,超时返回 0。

2024-03-05 17:11:57 358

原创 select函数

首先将文件描述符放到文件描述符集合当中,select去检测是否有事件发生,调用select产生返回值,返回值大于0代表有事件发生,去处理该事件,在处理事件时也可能加入新的文件描述符。maxfd 参数指定的被监听的文件描述符的总数。它通常被设置为 select 监听的所有文件描述符中的最大值+1,readfds、 writefds 和 exceptfds 参数分别指向可读、可写和异常等事件对应的文件。需要指出的是, I/O 复用虽然能同时监听多个文件描述符,但它本身是阻塞的。如果要提高并发处理的能力,可以。

2024-03-05 11:41:52 258

原创 生产者消费者模型

在生产者消费者模型中,此项目使用到了互斥锁、条件变量。例如当生产者获得锁的时候,但是进入了wait函数此时需要有四步才可以进入下一阶段。3.当消费者调用notify函数的时候,进入到互斥锁的等待队列中。4.在互斥锁等待队列中的随机获得锁。此时才可以通过wait操作。2.进入条件变量的等待队列中去。

2024-03-04 12:42:14 179

原创 1.线程池的实现机制

在处理并发问题时,倘若我们一个一个创建线程池再进行线程池的销毁,不但浪费资源还增加了上下文切换的开销。线程池主要是以空间来换取时间。项目将会实现固定线程池,缓存线程池,工作窃取线程池,计划线程池。开发环境:VS2022,Linux g++如图所示给任务队列分配在线程池里线程。线程池用到的模式是半同步、半异步模式。

2024-03-04 00:25:44 191

原创 同步和异步

所谓同步,就是在发出一个"调用"时,在没有得到结果之前,该“调用”就不返回。换句话说,就是由“调用者”主动等待这个“调用”的结果。而异步则是相反,"调用"在发出之后,这个调用就直接返回了,所以没有返回结果。同步——如果使用者在服务运行的过程中阻塞时崩溃了,当它重新启动时,将无法重新连接到正在进行的调用,所以响应丢失了。异步——如果使用者在发送了请求之后等待响应时崩溃了,当它重新启动时,可以继续等待响应,所以响应不会丢失。2. 异步,就是我调用一个功能,不需要知道该功能结果,该功能有结果后通知我(回调通知)

2024-03-04 00:05:20 193

原创 Libevent的使用及reactor模型

支持多种 I/O 多路复用技术, epoll、 poll、 dev/poll、 select 和 kqueue 等;libevent的流程可以分为三步:定义框架,注册事件,启动事件循环(epoll检测事件是否发生,发生的时候,通知子线程调用回调函数//此过程会阻塞)下图为编写的框架。事件源可以理解为我们的文件描述符,多路复用机制是我们的IO模型(select,poll,epoll),事件处理程序理解为回调函数。Reactor:事件源(描述符)、Reactor 框架、多路复用机制和事件处理程序。

2024-03-03 21:23:10 578

原创 【回溯】子集 子集||

其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。返回的解集中,子集可以按。返回该数组所有可能的子集(幂集)。1.给你一个整数数组。

2024-02-27 21:38:33 205

原创 [回溯]复原ip地址

思路:此题思路,注意使用insert和erase函数来完成回溯的过程。终止条件为"."为3个时即可进行结果的填充。在回溯时要注意因为将字符串进行了增加,所以递归时需要将+2而非+1。,用以表示一个 IP 地址,返回所有可能的。正好由四个整数(每个整数位于。之间组成,且不能含有前导。给定一个只包含数字的字符串。,这些地址可以通过在。

2024-02-27 19:31:24 118

原创 【回溯】分割回文子串

思路:此题的关键在于确定分割线,分割线即前面组合问题提到的开始下标。我们startindex到i位置的字串进行判断检验是否为回文串。结束标志为分割线到了字符串的末尾。是正着读和反着读都一样的字符串。分割成一些子串,使每个子串都是。所有可能的分割方案。

2024-02-26 22:03:29 335

原创 【回溯】组合问题||

思路:此题最重要的一个点为:通过used的符号来判断是否继续执行操作。先初始化used为false之后若是树的上下排列其中used的值会为true,而是树本层的操作的话,used的值通过回溯会返回到false,自此可以直接跳过操作。中的每个数字在每个组合中只能使用。给定一个候选人编号的集合。解集不能包含重复的组合。中所有可以使数字和为。

2024-02-26 20:33:23 121

原创 [回溯]组合总和

2 和 3 可以形成一组候选,2 + 2 + 3 = 7。注意 2 可以使用多次。如果至少一个数字的被选数量不同,则两种组合是不同的。7 也是一个候选, 7 = 7。,并以列表形式返回。中可以使数字和为目标数。对于给定的输入,保证和为。

2024-02-25 22:15:34 389

原创 [回溯算法]电话号码组合

思路:回溯三部分,先确定回溯的终止条件,即找到满足条件的个数的数组。然后进行for循环利用递归实现深层的循环,最后再进行回溯,通常情况是进行pushback。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。的字符串,返回所有它能表示的字母组合。

2024-02-25 15:58:29 157

原创 组合问题III

思路:先确定终止条件,在写for循环里的纵向操作,开始递归,然后回退,最后进行一定程度的剪枝即可得到结果。该列表不能包含相同的组合两次,组合可以以任何顺序返回。所有可能的有效组合的列表。没有其他符合的组合了。

2024-02-14 19:02:13 234 1

原创 【回溯算法】组合问题3

【代码】【回溯算法】组合问题3。

2024-02-05 21:48:29 99

原创 【回溯算法】组合

【代码】【回溯算法】组合。

2024-02-04 20:33:17 140

原创 [二叉树专题]线索二叉树的插入和删除

思路:此题二叉搜索树删除较为复杂。关键是递归的返回时直接将节点的父亲节点的指向改变。不用对父亲节点做出保存。5 左右孩子都不为空(此种情况需要将找到右节点的最左侧节点,将最左侧节点的left指向删除节点的左子树)3 左孩子为空,右孩子不为空。4 右孩子为空,左孩子不为空。2 找到但是为叶子节点。一、二叉搜索树的删除。二、二叉搜索树的删除。

2024-02-03 20:27:25 239

原创 [二叉树专题]验证二叉搜索树

二、二叉搜索树的最近公共祖先。

2024-02-01 22:54:17 213 1

原创 [二叉树]

返回以该节点为根的子树。如果节点不存在,则返回。你需要在 BST 中找到节点值等于。给定二叉搜索树(BST)的根节点。一、二叉搜索树的搜索。

2024-01-31 22:26:07 133

原创 【二叉树专题】最大二叉树

思路:类似于快排,时间复杂度n^2,最好n。给定一个不重复的整数数组。

2024-01-30 21:23:04 212

原创 [二叉树专题]判断平衡二叉树|二叉树所有路径|左叶子之和

思路:自下而上递归方法,其遍历顺序是后序遍历,将左右节点遍历结束后遍历根节点。如果有节点不符合条件,直接返回-1,之后所有节点都为-1。符合条件的话,将节点的值都返回高度,最后判断结果是否大于等于0;给定一个二叉树,判断它是否是高度平衡的二叉树。的左右两个子树的高度差的绝对值不超过 1。

2024-01-29 20:43:01 187

原创 构建二叉树-分治策略

【代码】构建二叉树-分治策略。

2024-01-27 22:41:47 363

原创 [二叉树专题]找树左下角的值|路径总和中后序构建二叉树|先中序构建二叉树

的路径,这条路径上所有节点值相加等于目标和。和一个表示目标和的整数。

2024-01-27 21:55:05 217

原创 [二叉树专题]二叉树最大高度|n叉树最大高度

【代码】[二叉树专题]二叉树最大高度|n叉树最大高度。

2024-01-26 22:25:08 150

原创 翻转二叉树

【代码】翻转二叉树。

2024-01-25 20:58:57 93

原创 [二叉树专题]二叉树的层次遍历|翻转二叉树|对称二叉树

【代码】[二叉树专题]二叉树的层次遍历|

2024-01-25 20:52:44 528

原创 [二叉树专题]前中后递归遍历和非递归遍历

【代码】[二叉树专题]前中后递归遍历和非递归遍历。

2024-01-24 22:17:48 494

原创 【栈与队列专题】滑动窗口的最大值

一、滑动窗口的最大值。

2024-01-23 22:36:31 531

原创 [栈的应用]有效的括号|删除字符串中的所有相邻重复项|逆波兰式求值

会选择两个相邻且相同的字母,并删除它们。在 S 上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。思路:每次和栈顶元素比较,匹配的话栈顶出栈,不匹配的话,压栈。最后栈只剩#代表是有效的括号。加入#的目的是因为为了防止最开始,无法和栈顶元素比较。3.每个右括号都有一个对应的相同类型的左括号。1.左括号必须用相同类型的右括号闭合。思路:此题和上面有效的括号异曲同工。2.左括号必须以正确的顺序闭合。二、给出由小写字母组成的字符串。

2024-01-21 21:45:58 373

原创 【栈实现队列】和【队列实现栈】

一个栈表示入栈,另一个栈表示出栈。队列进入即在第一个栈入栈,出队列时,如果第二个栈有元素,那么将第二个栈第一个元素出栈,如果第二个栈没有元素,那么必须将第一个栈所有元素都出栈到第二个栈中,再从第二个栈中拿元素。用到一个队列,正常入队列,在出队列时,先将除了最后一个数据的其他元素一道队列后面。

2024-01-20 18:48:26 393

原创 字符串算法总结|双指针的总结

right--指向元素小于基准时,将left指向的值改为right指向的值,之后left++,当left指向的值大于等于基准时,将right指向的值改为left指向的值。例如在进行快速排序时,left指向第一个元素,right指向第二个元素,当right指向元素的值小于基准时,left+1,并且left+1,和right位置的元素交换位置,当right走到结尾时,将left指向的元素和开头做交换。例如环形链表,快指针走一次走两步,慢指针一次走一步,当慢指针和快指针相遇时证明有环出现。

2024-01-19 21:23:35 395

原创 [字符串专题]反转|数字替换|单词反转|右旋转字符串

3.给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。5.字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k,请编写一个函数,将字符串中的后面 k 个字符移到字符串的前面,实现字符串的右旋转操作。最后单个反转,当为空格或者字符串结尾说明是一个单词,将单词进行反转。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。中使用至少一个空格将字符串中的。

2024-01-18 21:23:59 378

原创 [哈希专题]四数相加|赎金信|三数之和|四数之和

此题思路:定义两个指针left和right,遍历i,看三个位置的值是否为0。如果三个点值大于0,right--;如果小于0,left++。其中还要做去重操作。

2024-01-17 01:30:18 423

原创 [哈希专题]有效的字母异位词|两个数组交集|快乐数|两数之和

两数之和,用到map键值对映射。假设target为9,当前数组值为3,那么应当找之前有无出现过6,当出现某一个数是否在之前出现过就要用到哈希。

2024-01-15 23:12:16 888

空空如也

空空如也

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

TA关注的人

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