自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 GDB调试加入LD_PRELOAD选项

【代码】GDB调试加入LD_PRELOAD选项。

2023-06-07 09:33:59 299

原创 20分钟学会GDB调试技巧

在linux下的C/C++编程中,调试是经常会用到的手段,在没有可视化调试的情况下,往往就需要用到最原始高效的工具——GDB。如果需要对可执行程序作调试,那么在编译程序时就需要加上部分编译选项(-g)才能使生成的可执行程序具备调试信息。如果没有-g,当你想使用gdb命令调试程序时,会提示“(No debugging symbols found in a.out)”,你也就无法正常地使用接下来的gdb相关命令操作了。

2023-03-30 20:32:12 789

原创 Scons编译工具入门

env.Append(CPPDEFINES=['BIG_ENDIAN']) #预处理定义env.Append(CPPDEFINES={'RELEASE_BUILD' :'1'}) #包含预处理值定义。

2023-03-22 10:35:24 871

原创 jenkins pytest返回ci错误问题解决

在python项目中,可以通过执行测试用例来确保代码功能正确性,可以使用pytest配置Jenkins来实现。在实际使用中,当在一个不存在py测试用例的目录中执行pytest时,jenkins ci默认返回的并不是success,而是failed。经过网上查询得知,执行pytest命令包含多类状态码如下: 于是我在执行完pytest之后,输入命令,发现返回值果然为5。而对于Jenkins来说,任何非0的返回值均被视为构建失败,所以才导致failed。可以通过以下方式来修正:1、首先需要安装pytest

2022-12-05 14:32:37 632

原创 An enhanced dynamic packet buffer management.论文核心部分

DADT算法与动态算法具有相似的属性(即队列的控制阈值与缓冲区中的剩余空间成正比),但每个队列的阈值不同。DADT算法是专门为数据包缓冲区开发的,而动态算法最初是为ATM交换机开发的。ATM交换机具有固定大小的传入ATM数据包。由于每个队列的数据包大小不同,所有队列都有一个阈值可能会让一个队列独占整个缓冲区空间。根据我们的仿真结果,通过分别控制每个队列的阈值,所提出的DADT算法可以有效地减少其他队列的丢包。DADT算法与动态算法相似,只是它具有多个阈值,而不是动态算法中的单个控制阈值。...

2022-07-29 16:43:54 94

原创 Threshold-based filtering buffer management scheme in a shared buffer packet switch论文核心部分

其中Sa(t)是时间t的活动输出端口集,Sin(t)是时间t的非活动输出端口集。其中Xi(t)是输出端口i在时间t的最大允许缓冲区大小,Ai(t)是在时间t发往输出端口i的所有传入数据包的数量。在图1(a)中,所有到达的数据包都被允许进入缓冲区,无论它们的目的地是活动的还是非活动的输出端口,其中Q(t)表示为时间t的总队列长度。通过在定义2中的过载模式下为所有非活动输出端口保留足够的缓冲区大小,TF可以保护目的地为非活动输出端口的到达数据包被丢弃。...

2022-07-29 16:36:14 86

原创 Dynamic Thresholds Buffer Management in a Shared Buffer Packet Switch论文总结

如果输出端口i的队列长度大于平均缓冲区大小,即B/W,则输出端口i称为活动端口;发往此活动端口的已到达数据包将被丢弃,直到队列长度低于控制阈值T(t)或T(t)上升到队列长度以上,PSPP可以动态适应流量变化。如果队列长度超过控制阈值,则所有到达的数据包将在它们排出时暂时被阻止,从而为新的活动端口释放更多缓冲区。稳定后,所有活动端口,无论是旧的还是新的,都将具有相同的队列长度。例如,Qi表示活动端口i的最大允许队列长度,T表示T(t)的稳态值。t时刻分配给所有非活动端口的缓存。......

2022-07-27 09:59:02 127

原创 An Optimal Buffer Management Scheme with Dynamic Thresholds论文总结

此后,每1000个时隙,直到t=5000,其中一个源进入关闭状态,过载队列的数量从6减少到1。每当总队列长度Q(t)小于Q0时,到达的信元总是被接受到其各自的队列中,并且动态阈值T被更新为新的队列长度(例如,包括接受的到达)或其当前的值阈值,以较大者为准。在Eq.(1)中,当Q(t)>a*B时,公式Tnew(t)=max(Told-1,Tm)可以推广为Tnew(t)=max(Told-c,Tm),其中c>0,尽管我们在本文中选择了c=1。......

2022-07-25 15:14:01 147

原创 计算机网络知识笔记

1.DNS协议DNS(Domain Name System)是一个分布式数据库,提供了域名和IP地址之间映射的服务。DNS可以用UDP或者TCP传输,使用的端口号都为53。大多数情况下在进行域名解析时都使用UDP进行传输(负载更低,响应更快),但是如果报文或返回的相应超过512字节,那么会转为TCP传输;另外在区域传送(指主域名服务器向辅助域名服务器传送变化的那部分数据,辅域名服务器会定时向主域名服务器查询了解数据是否有变动)时也会使用TCP传输。2.FTP协议FTP(File Transfer Proto

2022-07-07 20:05:43 350

原创 WSL2 linux下做C++开发(Ubuntu18.04)

近期上海疫情持续,笔者也是在家办公2个多月了,平时都是用的家里的台式机远程办公,但是也想自己捣鼓点开源项目学习学习。由于电脑系统是windows11,没有linux开发环境还是有点头疼,于是捣鼓了下win10之后就出来的windows子系统,WSL2。下面是自己的一些操作笔记,作为备忘,以防日后还会用到。1、安装Ubuntu18.041)首先需要打开卸载程序的地方,控制面板\程序\程序和功能,把“适用于Linux的Windows子系统”勾选上,勾选上之后重启。2)第二步就是直接重启电脑,然后

2022-05-28 21:51:26 809

原创 快速学会mysql基本操作

简介MySQL是关系型数据库,可以理解为“表格”的概念;一个关系型数据库由一个或多个表格组成。一张表格中,一般包括表头(header),内容(value),列一般是具有相同数据类型的数据集合,行一般描述某个物品的具体属性信息,键(key)一般是指表中能够唯一标识某物品的属性,在当前列中具有唯一性,比如学生的学号,两个不同的学生不存在相同学号,那么学号就可以成为键值。使用MySQL数据库接下来直接学习如何使用mysql完成一些操作。1. 登录到mysql:mysql -h 主机名 -u

2022-03-23 15:56:02 1409

原创 IPC进程间通信C++开发:共享内存

不同进程之间通信,通常可以用共享内存/消息队列/信号量/管道等方法,在Linux系统下提供了相关的库函数来方便使用。共享内存共享内存就相当于开辟了一块物理内存空间,不同的进程通过虚拟地址的映射都访问到同一块物理内存,这样就能直接在内存读写数据。下面说一下具体用到的函数:1. shmget创建共享内存函数原型:int shmget(key_t key , size_t size , int shmflag)key:共享内存的标识符,一般通过ftok函数得到。size:申请的内存大小,一

2022-03-19 11:14:01 3033

原创 C++段错误(Segmentation fault)快速定位

问题背景写过C++的朋友都知道,有时候程序编译通过,并不能代表程序就是对的。在linux下做开发时,经常会遇到跑崩溃的情况,但是在终端只会报Segmentation fault,这种情况大部分原因都是诸如访问越界,指针非法操作等等问题,如果工程代码量少,你还能重新debug一下慢慢找,但是对于大型工程,想短时间内找到是很难的。问题解决实际上,程序运行崩溃或中止时,会在当前目录下生成一种core文件,记录了异常时的运行状态等信息,通过gdb调用这个core文件就可以快速定位到错误。这里举例说明:

2022-03-17 16:07:05 13084 3

原创 GDB调试基础命令总结

# 假设源文件为hello.cpp,需要编译生成可执行。# 编译时加入-g参数,表示以debug方式编译,支持gdb调试。g++ -g hello.cpp -o hello# 进入gdb调试的两种方式:# 1. gdb hello# 2. 先运行gdb,再start hello(gdb) start //开始调试(gdb) n //一条一条执行(gdb) step/s .

2022-03-16 16:40:52 276

原创 C/C++代码覆盖率统计:gcov/lcov/gcovr以及集成到jenkins

使用gcov/lcov或gcovr工具进行代码覆盖率统计时,都需要在编译选项中加入"-fprofile-arcs -ftest-coverage"两个选项,才能生成.gcno和gcda文件。如果是CMAKE工程,则可以添加编译选项如下:set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage")1. gcov这是gcc自带的内建工具,不需要额外安装,使用起来比较简单,但是生成的报告可视效果比较差,简单了解一

2022-02-14 20:10:03 2955

原创 UNIX网络编程学习笔记:套接字

1. socket函数socket函数原型如下:#include <sys/types.h>#include <sys/socket.h> int socket(int domain, int type, int protocol);# domain表示套接字要使用的协议簇,常见的有:AF_UNIX(本机通信)AF_INET(TCP/IP-IPv4)AF_INET6(TCP/IP-IPv6)# type表示套接字类型,常用的类型有:SOCK_

2022-01-11 15:01:22 411

原创 ubuntu-server18.04安装&环境配置记录

下载地址参考Ubuntu Releases安装过程略,制作镜像盘然后开机一步一步来就行,这里主要遇到的问题就是:1. 硬盘分区时,如果机器有两个硬盘,容易开机引导失败(grub rescue),并且如果硬盘容量大于2T也容易出现安装失败,主要是因为非GPT分区不支持2TB以上,但电脑必须支持EFI启动才行。或者在安装时只选择2T容量来装。2. DHCP配置失败的问题,如果有多个网口,一定要选择插上网线的网口。环境配置首先进入root模式,输入“sudo passwd root”创建roo

2022-01-05 15:56:16 939

原创 资源下载集合(不定期更新)

资源下载集合(不定期更新)

2021-12-13 10:47:19 276

原创 10分钟搞懂g++编译过程

1.基本编译过程g++可以用于编译C++代码生成可执行程序,从原始代码到生成可执行过程中实际经历了以下4个步骤:1. 预处理:宏替换,注释消除,查找相关库文件等[使用-E参数]。# 只激活预处理,不会自动生成.i文件,如果需要可以重定向到文件。g++ -S hello.cpp > hello.i2. 编译:将预处理后的文件转换成汇编语言,生成.s汇编文件[使用-S参数]。# 直接经过预处理,编译生成.sg++ -S hello.cpp# 将.i文件编译生成.sg+

2021-12-11 17:34:51 5468

原创 Linux常用命令学习总结(持续更新)

系统时间设置源于在远端编译cmake工程时,出现了“has modification time 13 s in the future”的warning告警,对编译没有太大影响,但是想到应该是由于本地修改文件的时间和服务器的系统时间不一样导致的,于是准备改服务器上的系统时间:timedatectl status #显示当前系统时间信息date 012811452021.30 #修改系统时间信息,表示2021.01.28 11:45:30date -s 1/28/2021 #修改日期date -s.

2021-09-17 15:16:17 97

原创 并查集/路径压缩/按秩合并

并查集主要解决一堆数据集合的合并和查询问题,是一种简单有效的数据结构。主要支持两种操作:合并:将两个不相交的元素合并。查询:查询两个元素是否在同一分组中。基本操作初始化合并查询优化算法...

2021-08-29 23:42:42 628 4

原创 OJ算法归纳-备忘

1、单调栈2、并查集3、滑动窗口4、前缀&Hash5、差分6、拓扑排序7、字符串8、二分查找9、BFS10、DFS11、动态规划12、贪心算法13、字典树

2021-08-04 14:59:47 219

原创 C++高级工程师技能树整理

2021-08-02 20:20:43 782

原创 C++设计模式Learning:原型模式

基本定义原型模式,属于创建型模式。原型模式(Prototype),用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。PS:原型模式,提供了对象拷贝的Clone接口,而在C++中,拷贝构造函数作为对象拷贝的一种实现方式。UML图原型模式总体结构比较简单,主要由抽象原型类和具体原型类组成。包含以下几类角色:Prototype:抽象原型类(一般可定义为接口),声明一个克隆自身的接口。ConcretePrototype:具体原型类,实现一个克隆自身的操作。原型模式.

2021-07-20 19:35:58 143

原创 C++设计模式Learning:抽象工厂

基本定义抽象工厂,属于创建型模式。抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。UML图抽象工厂包含的角色通常工厂方法一样,有以下4个要素组成,但是抽象工厂中方法个数不同,抽象产品的个数也不同。包含以下几类角色:AbstractFactory:抽象工厂角色(接口)。提供创建不同产品的方法接口CreateProduct1,CreateProduct2,...,由具体工厂角色实现。ConcreteFactory:具体工厂角色。用于实现抽象工厂的抽象.

2021-07-17 17:41:19 116

原创 C++设计模式Learning:工厂方法

基本定义工厂方法模式,属于创建型模式。工厂方法模式定义了一个用于创建工厂对象的公共接口,让子类决定实例化哪一个类。这样使得类实例化(具体产品的创建)延迟到工厂子类中。UML图简单工厂模式包含以下几类角色:AbstractFactory:抽象工厂角色(接口)。提供创建产品的接口(抽象方法)CreateProduct,由具体工厂角色实现。ConcreteFactory:具体工厂角色。用于实现抽象工厂的抽象方法,完成具体产品的创建。Product:抽象产品角色,是所有具体产品的父类,定

2021-05-18 19:34:53 92

原创 C++设计模式Learning:简单工厂

基本定义简单工厂模式又称之为静态工厂方法,属于创建型模式。在简单工厂模式中,可以根据传递的参数不同,返回不同类的实例。简单工厂模式定义了一个类,这个类专门用于创建其他类的实例,这些被创建的类都有一个共同的父类。UML图简单工厂模式包含以下几类角色:ProductFactory:工厂角色。专门用于创建产品示例的类,提供CreateProduct方法,可以根据参数类型返回不同类的具体示例。Product:抽象产品角色,是所有具体产品的父类。ConcreteProduct:具体产...

2021-04-30 16:22:01 108 2

原创 面向对象:类关系(泛化/实现/依赖/关联/聚合/组合)

泛化泛化,也称作继承关系。指面向对象中派生类与基类之间的关系,一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能。实现在C++中,对于拥有共同行为的类可以将它们抽象出一个接口(实际上可以理解为父类,该类里面只保留了公有接口,不包含成员属性),当一个类实现了该接口中的方法,称为实现。依赖两个相对独立的类对象,当类A中需要依赖类B的实例化对象时,称其为依赖关系。在C++中具体体现为,类A当中使用了类B,其中类B是作为类A的方法参数、方法中的局部变量、或者静态方法调用。关联指一个类

2021-02-19 15:21:21 2951 1

原创 C/C++误区:void main?

前言以前在学校刷题或写一些小程序时,测试的main函数经常为了省事写成void main,而且因为在一些书籍中也看到这样的写法,以为这种写法是成立的,今天才发现,这种写法是完全不符合C/C++规范的,C/C++ 中从来没有定义过void main( )。对于C语言在不需要从命令行中获取参数的情况下,可以使用的main定义方式为:int main(void) //要加上void在C中,当函数没有参数时,如果不使用void关键字,那么该函数是被认为需要不确定个数的参数,告诉编译器该函数没有参数的

2021-02-09 11:26:35 1289 2

原创 Linux项目搭建Gtest/Gmock框架总结

1. 前言近期组里项目代码出于后期测试和长期维护的考虑,需要集成测试框架和用例补全,现有开源测试框架里面,google的test框架对于C++项目的支持度较高,且官方文档的完善性也高,便于上手,所以选用gtest这一套。2. gtest环境搭建下载地址:https://github.com/google/googletest/环境搭建:Git下来的源码里面包含了googletest和googlemock的文件夹,如果是做简单的gtest学习可以直接cmake编译就可以直接使用。如果需要加入到自己

2021-02-08 19:32:27 1395 2

原创 Git学习——详细入门版

Git日常操作学习前言Git 工作区、暂存区和版本库概念:GIt常用的基本指令Git cloneGit 配置Git 提交与修改Git add: 将文件添加到暂存区Git status 查看在上次提交之后文件的修改状态Git diff 比较不同Git commit操作Git reset操作Git log操作待继续补充~~前言最近接触到组内项目的开发,需要经常涉及到版本的上库和代码提交,遂系统地了解了下git工具的常用操作,将学习内容用博客记录下来~~Git 工作区、暂存区和版本库概念:工作区:就是你

2020-11-24 14:22:27 480

原创 SLAM论文粗译:3D Mapping with an RGB-D Camera

Ⅰ简介摘要在本文中,我们提出了一种新的绘图系统,可以使用RGB-D摄像机稳健地生成高精度的三维地图。我们的方法不需要其他传感器或里程计。凭借微软Kinect等低成本,轻量级RGB-D传感器,我们的方法适用于小型家用机器人,如真空吸尘器,以及四轮机等飞行机器人。此外,我们的系统还可以用于详细的三维模型的徒手重建。除了系统本身,我们对公开可用的基准数据集进行了全面的实验评估。我们分析和讨论了几......

2018-12-06 19:51:04 1601

原创 SLAM学习笔记-三维空间刚体运动

转自欧式变换:相机运动是一个刚体运动,它保证了同一个向量在各个坐标系下的长度和夹角都不会变化,这种变换称为欧式变换 旋转矩阵:坐标系之间的欧式变换,通过一个旋转矩阵实现,3x3的,9个量表达3个自由度(也就是物体位置xyz的表示),a=Ra^,R是3x3矩阵 齐次坐标:三维向量后面加个常数1,(x、y、z、1),变成四维向量 变换矩阵:对于齐次坐标的四维向量,把旋转和平移写到一个矩阵里,...

2018-08-02 21:15:10 696

原创 SLAM学习笔记-回环检测

1.准确率和召回率准确率:算法提取的所有回环中确实是真实回环的概率召回率:在所有真实回环中被检测出来的概率在SLAM中,对准确率的要求更高。2.词袋模型(Bag-of-Words)词袋模型的提出是为了解决文档分类,主要应用在 NLP(Natural Language Process), IR(Information Retrival),CV(Computer Vision)等领...

2018-07-31 10:40:59 1900

wsl-update,用于windows中Ubuntu子系统报错解决

wsl-update,用于windows中Ubuntu子系统报错解决

2023-04-19

空空如也

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

TA关注的人

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