自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【毕业设计/简单后端】运行一个简单的后端server.js文件

你的代码是基于 Node.js 和 Express 框架编写的,所以首先需要安装 Node.js。你的代码中使用了 MongoDB 数据库,因此需要在 Mac 上安装 MongoDB。安装完成后,你需要启动 MongoDB 服务。如果使用 Homebrew 安装,你可以运行。命令,确保 Node.js 和 npm(Node 包管理器)都已正确安装并能显示版本号。,为了安全起见,你可以将其设置为环境变量。的输出信息,表明服务器已成功启动并监听在 3000 端口上。服务器启动后,你应该能在终端中看到类似。

2025-02-27 02:22:57 370

原创 下载python312,sudo apt install python312失败

在已有python版本的基础上,再添加版本python312

2025-02-25 18:51:52 343

原创 gtest使用方法

多个测试用例可能需要使用相同的或稍微不同的测试夹具。例如,可能多个测试都涉及到某个特定的组件(如图形界面库的字体或画刷),在这种情况下,应该将这些共享的初始化和清理工作放在一个父夹具中。TEST(FactorialTest, Negative):第一个参是测试套件的名称,是一个测试功能或者测试模块,第二个参数是测试用例名称,Negative为测试的值为负数的这种行为。(super fixture)来创建多个子夹具,每个子夹具可以重用父夹具中的资源和初始化工作,但也可以根据具体需求做出调整。

2025-02-21 13:50:32 865

原创 微服务开源框架TARS的RPC源码 之 初识TARS C++服务端

Application:一个服务端代表一个Application,主要是读取用户的配置文件,根据配置文件初始化代理,启用网络线程和业务线程。TC-epollServer:管理业务模块和网络模块。网络模块:NetThread网络模块中有TC_Epoller作为io复用,TC_socket可以建立socket的连接,ConnectionList是网络连接的的记录,这个模块主要和数据的收发有关。业务模块: HandleGroup与Handle这些是业务模块,Handle是一个业务线程,Handlegroup是一组

2024-10-15 18:50:17 666

原创 Tars RPC源码--C++客户端

客户端最重要的一个类,一个客户端只能生成一个Communicator类的实例,CommunicatorPtr& Application::getCommunicator(),获取线程安全的单例。ServantProxy是服务代理,可以由ServantProxyFactoy生成,用户往往通过stringtoProxy()接口间接调用getServantProxy()获取服务代理。通过服务代理进行rpc调用。

2024-10-14 16:01:20 545

原创 Tars使用的一个实例

1.写Hello.tars文件2. 命令:/usr/local/tars/cpp/tools/tars2cpp Hello.tars,生成Hello.h3.写Hellolmp.h 和Hellolmp.cpp,此文件是实现接口,接口为两个函数test和testhello4.make 生成tgz文件。

2024-10-12 14:59:10 546

原创 Tars的特性

首先tars使用的是接口描述语言(idl),使得通过这个接口来进行生成不同的编程语言,供开发使用。优势有:二进制、可扩展、代码自动生成、支持多平台。2.调用方式对于服务端来说:服务端只需要完成本地的业务而不必去考虑其他的事情(比如数据传输过程)即可对外界提供服务。对于客户端来说,有三种调用方式同步调用,异步调用,单向调用。同步需要等服务返回结果;异步不用等,执行接下来的逻辑,返回结果后回调处理。单向调用,服务端不用返回结果。

2024-10-10 15:31:41 440

原创 Tars简介

定义:Tars协议的高性能rpc开发框架功能:可扩展协议编解码、高性能rpc通信框架、名字路由和发现、发布监控、日志统计、配置管理。

2024-10-10 13:58:51 308

原创 卡夫卡的理解

消息流转过程大致为:单聊消息和登录相关操作产生的数据进入 Kafka,然后由 chatConsumerServer 进行消费处理,可能将单聊历史纪录存储到 Pika/TairDb 等存储系统中,同时转发单聊消息等操作也基于这个数据流转过程进行。在这个单聊新架构中,涉及多个服务器组件共同协作来实现单聊功能。

2024-09-29 17:11:23 701

原创 实习前学一学git

工作区 暂存区 本地仓库 远程仓库 git commit -m "提交信息" 提交的是暂存区里的内容,没有git add 的不会被提交到本地仓库。

2024-09-27 15:17:57 228

原创 close_wait状态的实例:一次 MySQL 主动关闭,导致服务出现大量 CLOSE_WAIT 的全流程排查过程【个人总结】

文章主要是通过观察实例来说明close_wait状态的问题,一般导致close_wait状态都不是有意的,而是操作不注意就会导致此问题的出现。根据当时的表现是分别进行了以下猜想。这基本是不可能的,如果负载均衡器出问题了,那么问题大多出现是大面积的故障,而不但单单是一个服务,所以排除这个选项。目前看起来应该是代码质量问题,加之本次数据有异常,触发到了以前某个没有测试到的点,目前看起来很有可能是这个原因。有了上面的的依据,推出的结果是肯定是该服务依赖的底层资源除了问题,要不然不可能独立集群的服务同时出问题。

2024-09-17 22:39:01 695

原创 CLOSING和CLOSE_WAIT状态【个人理解】

CLOSING状态是指:双方都发送了FIN报文,双方都希望收到对方的ACK报文,但是却收到了FIN报文,此时是CLOSING状态,但是这个状态一般不会持续很长时间。当收到对方发送的ACK后,两者进入TIME_WAIT状态。CLOSE_WAIT状态:首先说明这个状态不是安全的,他可能会一直持续到程序的结束。产生原因,对方已经发送了FIN报文,而己方还未发送FIN报文,一直处于close_wait状态,这种情况的产生往往不是有意的。在平时我们调用close时关闭套接字,往往不会真正关闭,而是当引用计数降为0时才

2024-09-14 12:13:52 398

原创 epoll的剖析mmap

一张图总结一下select,poll,epoll的区别:epoll是Linux目前大规模网络并发程序开发的首选模型。在绝大多数情况下性能远超select和poll。目前流行的高性能web服务器Nginx正式依赖于epoll提供的高效网络套接字轮询服务。但是,在并发连接不高的情况下,多线程+阻塞I/O方式可能性能更好。既然select,poll,epoll都是I/O多路复用的具体的实现,之所以现在同时存在,其实他们也是不同历史时期的产物:select出现是1984年在BSD里面实现的。

2024-09-09 21:51:38 611

原创 ARP协议和DNS的工作原理

ARP协议的工作原理:首先主机向自己的网络广播发送一个arp请求,请求报文包括目的端的ip地址和目的端的以太网地址。网络上的其他机器收到这个请求,但只有被请求的才会回应一个应答报文,报文中有自己的物理地址。arp维护了高速缓存包括最近访问的ip地址到物理地址的映射。提高了发送数据包的速度。可以防止多次发起arp请求。

2024-09-02 21:28:44 716

原创 TCP的流量控制深入理解

当窗口缩小到0时将不能在发送数据,此时处于等待状态,等待接收方发送ack使得窗口变大,但是倘若ack报文丢失,双方将处于死锁状态,为了防止这种情况发生就使用一个定时器,当一段时间后发送方给接收方发送报文询问窗口是否扩大,以此来解决问题。其中第一个是已经发送并且已经收到确认的,另一个是已经发送但是未收到确认的,另一个是未发送的,最后一个是不能发送的。其中第一个是已经被应用程序读取的,另一个是还未收到的,另一个是收到的,另一个是不允许接收的。窗口滑动的时机是:收到对方的ack,此时滑动窗口开始移动。

2024-09-01 17:54:13 1021

原创 syn泛洪攻击

倘若是二次握手,首先对于客户端来说,收到了服务端的ack报文,确定了服务端可以收到自己的报文。而对于服务端来说并没有收到服务端的确认报文,不确定服务端是否能收到自己的报文所以两次肯定不够。所以在第二次挥手中告诉客户端我知道了,我处理完之后就结束连接,等处理完之后发送第三次挥手。发送缓冲区的大小可以通过setsockopt()函数进行设置,但通常不建议主动设置,因为操作系统会根据网络环境和系统资源自动调整。当应用程序调用发送函数(如send())时,数据并不是直接发送到网络上,而是先被复制到发送缓冲区中。

2024-09-01 17:11:23 453

原创 Mysql的索引

索引:从本质上来说索引就是一个数据结构,索引也是磁盘文件。使用索引需要进行磁盘IO操作。当索引文件过多时,数据的改变会导致索引的更改,而索引也涉及了磁盘的IO操作。当没有索引时,进行全表扫描,而有索引时只需要进行索引扫描速度会更快一些。当给name列加上索引时:经常作为where过滤条件时要加上索引,字符串列创建索引时尽量控制索引的长度不能过程。总结来说,InnoDB引擎下的数据确实是存储在索引树节点上的,具体的存储方式取决于数据是通过聚簇索引还是辅助索引进行访问的。索引的类型:单列索引 多列索引。

2024-08-29 20:16:57 600

原创 有效的括号--利用栈

思路:从字符串的第一个位置开始遍历,若是该位置和栈顶元素能配对那么让栈顶元素出栈,若是不能和栈顶元素配对则讲该元素压入栈中。若是有效的字符串那么当栈中将没有字符串元素。,判断字符串是否有效。

2024-08-29 15:45:57 317

原创 数据库的范式

你在关系型数据库管理系统(RDBMS),例如SQL Server,Oracle,MySQL中创建数据表的时候,如果数据表的设计不符合这个最基本的要求,那么操作一定是不能成功的。也就是说,只要在RDBMS中已经存在的数据表,一定是符合1NF的。第三范式:属性不依赖于其他的非主属性。应该把学生表和学院表单独作为一个表,是一对多的关系。一对多的关系时需要加一个外键子表关联父表的主键。第二范式:非联合主键的每一个属性都和联合主键的每个键都有关系。所示的情况,就不符合1NF的要求。作用是减小表的冗余。

2024-08-26 13:50:24 245

原创 哈希-赎金信字母相关

【代码】哈希-赎金信字母相关。

2024-08-25 17:19:51 285

原创 最长递增子序列---动态规划

dp【i】为在位置为i时的子序列的最大长度。dp【i】的值取最大的一个。是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。最长递增子序列是 [2,3,7,101],因此长度为 4。,找到其中最长严格递增子序列的长度。

2024-08-25 16:59:25 226

原创 动态规划--爬楼梯

从而得出转移方程为:F(i) = min(F(amount - 1) , F(amount - 2) F(amount - 5)F(amount - 7)) ...............;给你一个整数数组 coins ,表示不同面额的硬币;计算并返回可以凑成总金额所需的 最少的硬币个数。则,当 i==0 时无法用硬币组成,为 0。当 i<0 时,忽略 F(i)你有多少种不同的方法可以爬到楼顶呢?F(0) 0 //金额为0不能由硬币组成。F(i) 最小硬币数量。

2024-08-24 17:16:15 318

原创 单词拆分【动态规划】

返回 true 因为 "applepenapple" 可以由 "apple" "pen" "apple" 拼接成。dp[i]的递推公式:dp[i] = find(substr(s,i - j))&&dp[j];返回 true 因为 "leetcode" 可以由 "leet" 和 "code" 拼接成。单词拆分我们可以看作是背包问题,即字典中的物品是否可以放满背包。不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。如果可以利用字典中出现的一个或多个单词拼接出。注意,你可以重复使用字典中的单词。

2024-08-15 17:02:42 360

原创 股票买卖的最佳时机一、二

随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3。我们用dp[i][0]表示第i天持有股票的最大利润,dp[i][1]代表第i天不持有股票的最大利润。dp[i][1] 在第i天不持有股票意味着 第 i-1 天可能持有然后在第i天卖了,也可能第 i-1 天也不持有保持不变。在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。你也可以先购买,然后在。

2024-08-14 18:43:04 594

原创 Mysql的完整性约束

主键约束:一个表中只有一个主键,通过主键找到唯一的记录。主键不能为空不能重复。数据库的重启停止启动,以及连接数据库。

2024-08-13 20:05:39 383

原创 合并两个有序数组

此题通过双指针来解答,一个i指针指向nums1数组的尾部,j指针指向nums2数组的尾部,大的写到nums1数组的最尾部(注意不是真正的尾部)。,5,6] ,其中斜体加粗标注的为 nums1 中的元素。最终,合并后数组不应由函数返回,而是存储在数组。需要合并 [1,2,3] 和 [2,5,6]。个元素表示应合并的元素,后。中,使合并后的数组同样按。

2024-08-13 15:51:36 165

原创 智能指针shared_ptr的交叉引用

在程序结束的时候p2在栈上将会释放new B()的资源,此时new B()被应用的次数为2,此时引用计数减一,不进行释放。p1的结束时释放new A()的资源,此时new A()被引用的次数为2,引用计数减一不进行释放。所以最后未进行释放。

2024-08-12 00:48:16 269

原创 代理模式-

【代码】代理模式-

2024-08-10 02:03:24 442

原创 适配器模式

【代码】适配器模式。

2024-08-10 01:15:45 289

原创 工厂模式【简单工厂工厂方法抽象工厂】

工厂方法:奥迪工厂创建奥迪车,宝马工厂创建宝马车。

2024-08-09 18:56:57 385

原创 观察者模式

【代码】观察者模式。

2024-08-09 01:26:41 354

原创 单例模式(懒汉模式,饿汉模式)

线程安全的懒汉单例模式:懒汉单例模式是在调用函数的时候生成的,为了防止同一个线程调用需要加上互斥锁。同时减小锁的粒度,采用锁+双重判断的方式。极为简洁的懒汉单例模式:在局部的静态变量中默认存在着互斥锁,本身不存在线程安全问题,所以在局部变量的情况下不需要维护线程安全问题。单例的饿汉模式:在主函数未调用之前该单例就已经存在了,所以不存在线程安全的问题。

2024-08-08 21:13:00 573

原创 为RPC服务增加异步日志模块

//得到唯一的单例实例。缓冲队列来先接收日志信息,再由缓冲队列写到磁盘中。输送到一个中间件当中。

2024-08-08 16:28:52 1018

原创 使用RPC服务的步骤

1.首先服务的发布方在proto文件里面描述发布的方法,例如发送一个注册方法。这样就完成了一个服务方和调用方对rpc服务的使用。

2024-08-07 19:59:20 378

原创 RPC远程调用方在调用时需要进行的操作

protobuf允许我们使用 fixbug::UserServiceRpc_Stub stub(new MprpcChannel()),来调用rpc的服务方法。其中stub对象需要通过channel构造,在调用login函数时,会进入到callmethod方法。我们可以重写channel的callmethod方法来处理将login里面的参数序列化发送到服务的提供方。

2024-08-07 19:34:00 271

原创 ProviderRpc发送服务二将远程调用来的信息反序列化后调用服务方的方法,并将服务方的结果返回给发送方

/ 获取service对象 new UserService。// 获取method对象 Login。获取方法的参数:request和response,这些。

2024-08-06 18:44:20 352

原创 RpcProvider发送Rpc服务一

在此期间为了防止出现,粘包问题,在buffer中以此格式存放数据:”11helloworld4mess“,通过读取前四个字节来获取头部的长度为11字节。然后取前11个字节的数据,进行反序列化得到相应的值。再根据序列化的值会得到4从而得到最后“mess”。OnMessage函数用于处理连接到服务端的请求,接收到的buffer数据通过protobuf进行反序列化为rpcreader类,从而得到服务类和服务方法的名字。

2024-08-05 20:55:09 327 1

原创 RPC和gRPC的区别

头部压缩(Header Compression)是 HTTP/2 引入的一项技术,用于减少 HTTP 请求和响应头部的大小,从而提高网络传输的效率和性能。在 HTTP/1.x 中,每个请求和相应地都会承载完整的头部信息,这些头部信息往往包含大量的波形数据。在 gRPC 中,支持四种不同的 RPC 模式:单向 RPC、服务器流式 RPC、客户端流式 RPC 和双向流式 RPC。客户端请求一个用户的所有订单,服务器以流的形式返回订单信息。客户端发送一个请求来获取用户信息,服务器返回该用户的信息。

2024-08-05 19:48:15 1979

原创 RPC通信的简单流程

UserRpcServiceRpc和UseRpcServiceRpcStub是继承关系,UseRpcServiceRpcStub里面通过channel成员去调用callMethod方法。通过重写channel来调用不同的method方法。远程调用者假设需要调用Login方法,将调用的信息通过muduo库,同时进行了序列化和反序列化,发送到Rpcprovider上,RpcProvider通过对象和方法表来确定需要调用哪个服务对象的哪个方法。

2024-08-05 18:48:22 358

原创 RpcProvider启动网络服务

RpcProvider主要将一些服务发布为rpc方法,可供其他进程或者机器调用使用,之后启动该节点,开始提供远程网络调用服务。在run操作中主要使用muduo库来启动网络服务。

2024-08-05 17:10:20 314

空空如也

空空如也

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

TA关注的人

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