自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 项目中常用的shell脚本

本文主要记录一下项目脚本中常常会使用到shell命令。以前处理文件夹和文件我更多选择python,提供了接口很方便。但是最近发现其实这些功能shell命令就能完成,而且更加简洁。更重要的,大多数shell命令是跨平台的,不像python那样还需要安装解释器。因此我尝试将项目中常常需要用到的功能记录下来。

2021-01-20 23:00:32 492

原创 gdb的使用总结

最近学习了[100个gdb技巧](https://github.com/hellogcc/100-gdb-tips/blob/master/src/index.md),总结了一些自己认为需要掌握的点。按照教程都进行了实践,相信熟练掌握之后,调试程序应该可以更有效率。

2021-01-19 22:20:50 986

原创 Eigen使用笔记:如何进行矩阵和标量加减、类似numpy where等方法

主要记录一些Eigen的使用方式.包括std::vector转Eigen数据格式,矩阵和标量的加减法,矩阵的最大值和最小值,提取矩阵的部分数据,以及类似numpy where的功能.

2020-09-15 14:10:01 5499 1

原创 ceres的学习笔记

Ceres solver 是谷歌开发的一款用于非线性优化的库,在谷歌的开源激光雷达slam项目cartographer中被大量使用。本文参考官网教程,编译了静态库使用。

2020-09-13 18:12:21 730

原创 网络性能衡量的指标有哪些?

衡量网络性能的指标吞吐量:是指主机之间单位时间内实际传输的数据量,单位通常为比特/秒,b/s。带宽:是指网络的最大数据传输速率,常用单位也是比特/秒,b/s。网络使用率:吞吐量/带宽。延迟:是指发出网络请求之后到收到相应的间隔时间。PPS:即包/秒,是指以网络包为单位的传输速率。查看网络参数运行ifconfig命令:$ ifconfig wlp3s0wlp3s0 Link encap:Ethernet HWaddr 28:b2:bd:ee:dd:ff in

2020-08-26 10:18:02 5522

原创 buffer和cache的区别,如何查看缓存命中率

查看buffer和cache在linux环境中,我们常常使用free命令来查看系统内存的使用情况:$ free total used free shared buff/cache availableMem: 7868592 3002332 1642244 735956 3224016 3761396Swap: 0 0

2020-08-16 16:03:49 1715

原创 平均负载和cpu使用率的区别,如何获取平均负载和cpu使用率

我们常常将平均负载和cpu使用率混淆,其实他们并不是同一个意思。平均负载是单位单位时间内,系统中可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数。CPU 使用率,是单位时间内 CPU 繁忙情况的统计,跟平均负载并不一定完全对应。

2020-08-01 14:45:15 1742

原创 申请的内存空间已经手动释放了,进程占用内存仍没有下降

在实际开发过程中,一些通过malloc动态分配的内存明明已经手动的使用free释放了,但是进程的内存的占用却没有下降,本文就分析一下其中具体的原因。

2020-07-25 13:14:04 2625 1

原创 远程执行命令传输文件 paramiko ssh sshpass nc

在持续集成任务中,有时候需要在不同的平台上进行自动化测试,完成后获取测试结果。这时就需要先将测试包发送到目标平台,然后传输一些测试命令到目标平台完成测试任务。本文主要总结一些远程执行命令的方式。

2020-06-17 22:22:45 714

原创 c++11设计模式 工厂模式 泛型抽象

当程序中许多的类需要使用共同的接口时,可以考虑工厂模式。传统的抽象工厂实现先定义用于创建不同产品的接口, 但将实际的创建工作留给了派生的具体工厂类。 每个工厂类型都对应派生出的不同产品。本文的工厂模式可以实现不同抽象工厂的异类集合,避免了定义多个工厂类。并且可以传递不同参数来构造生产不同类型的产品。

2020-06-07 16:20:04 1011 2

原创 c++11设计模式 对象池模式 可变参数构造 自动析构

当程序中需要用到一定数量的对象,且创建对象开销比较大时可以考虑使用对象池模式。和线程池类型,需要预先创建一定数量的对象,上层使用时可以从池子中获取创建好的对象。本文的对象池模式实现可变参数构造对象,使用完成之后自动析构。

2020-06-06 19:23:35 633

原创 c++11设计模式 观察者模式 任意参数注册 不继承

当对象间存在一对多的依赖关系时,当一个对象被修改时,则会自动通知所有依赖于它的对象。这种情况就可以使用观察者模式。本文的观察者模式消除了传统的观察者模式中观察者和主题的强耦合关系,可以注册任意参数的函数,灵活性更高。

2020-06-06 10:33:07 565 7

原创 c++11设计模式 单例模式 线程安全 泛型单例

本文主要总结几种单例实现的方式,实现单例时需要主要考虑线程安全。再者可以考虑泛型单例模式的实现,可以传入不同个数的参数和不同类型的参数来构造单例。

2020-06-05 22:44:44 888

原创 stl的比较器:自定义数据排序方式,set忽略大小写

主要列举了三种比较器的定义方式。分别以vector数值降序排列,自定义数据类型按照某个属性进行排序以及设置set忽略大小写。

2020-05-30 20:25:58 953

原创 tmux关机永久保存会话

tmux是linux终端的一款利器,它可以和服务器建立会话,之后就算本机网络断开或者关机,在会话中运行的程序仍然可以继续执行。下面想说的是怎么保存本地的会话,关机之后仍可以恢复。

2020-05-30 13:54:22 5983 4

原创 c++智能指针实现(二)shared_ptr unique_ptr的实现

前面我们介绍了shared_ptr和unique_ptr的基本使用,下面介绍使用c++简单的实现这两种类,包含了一些基本的接口以及如何添加自定义的删除器等。

2020-05-24 17:59:54 705

原创 c++智能指针实现(一)c++11中的智能指针

智能指针其实是可以保存指向动态分配内存的对象指针的类,它可以确保在自身周期结束的时候自动的销毁动态分配内存的对象,因此它可以有效的防止内存泄露。c++11中提供了三种智能指针,std::weak_ptr、std::shared_ptr和std::unique_ptr。本文主要介绍三种指针的一般使用以及需要注意的问题。

2020-05-24 10:58:02 539

原创 gdb基本使用及多线程调试

在linux环境下进行c++开发调试的时候,不可避免需要用到gdb,它可以控制程序的启动暂停、添加断点、打印堆栈,能够帮助我们尽快的发现问题、定位错误,是一把利器。本文打算总结一下gdb的简单使用

2020-05-23 17:43:00 2013

原创 c++线程池实现(四)线程池实现

线程池会预先创建一些线程,循环从同步队列中获取任务,然后执行。如果同步队列为空,线程将处理等待状态,直到上层添加任务到同步队列,唤醒线程执行任务。

2020-05-22 23:17:18 588

原创 c++线程池实现(三)同步队列实现

前面设计同步队列的代码,下面详细说说当中间其中具体的实现。包含添加任务,取出任务等功能。涉及到了mutex,unique_lock以及condition_variable等使用。

2020-05-21 22:32:29 726

原创 valgrind运行错误:Assertion tres.status == VexTransOK failed

使用valgrind检查内存泄露,发现提示有错误 Assertion 'tres.status == VexTransOK' failed

2020-05-20 22:10:19 642 1

原创 c++线程池实现(二)同步队列实现

同步队列是半同步半异步线程池三层中的中间层——排队层。它一方面提供接口给上面同步服务层添加新任务,一方面提供接口给下面的异步服务层获取任务。上层可能是并发的添加任务,因此同步队列需要保证任务是线程安全的,同时它还需要确保任务队列的长度不会超过上限,避免内存消耗过大。

2020-05-19 21:21:15 1398

原创 gitlab-ci 持续集成配置(三)runner配置

关于gitlab-runner的配置,如同时执行任务的数量、日志级别、以及检查间隔等等。

2020-05-18 19:18:00 2485

原创 c++线程池实现(一)半同步半异步线程池

线程池技术可以预先创建一定数量的线程,有任务需要处理时就从池子中安排一个线程去处理。处理完成之后不必销毁线程,会等待后续任务的到来。这样就可以避免频繁的创建和销毁线程,节省系统资源。主要应用于处理大量并发任务,且处理时间较短的项目。本文主要介绍半同步半异步线程池,将从需求开始分析,设计活动流程,最后编写代码实现。

2020-05-17 10:30:14 945

原创 gitlab-ci 持续集成配置(二)yml配置

配置gitlab-runner具体执行的功能和执行的顺序,是按照项目中.gitlab-ci.yml文件的内容进行的。配置好这个文件的内容才能实现持续集成。下面是一个很简单的例子:stages:    - buildbefore_script:    - cp /data/dependencies ./compile_linux_x86_64...

2020-05-15 23:11:34 2067

原创 链接的接口——符号(一)链接错误:symbol lookup error: xxx, undefined symbol: xxx

明明链接库存在对应的smybol,却还是报undefined symbol。详细说来其实和链接库的搜索顺序是有关系的。

2019-06-23 13:25:07 1632

原创 unrecognized relocation (0x2a) in section `.text`

使用的一个库更新了,升级新的版本之后,在服务器上编译linux-x86-64版本的时候会出现错误:**/usr/bin/ld: libsdk.a(Imagexxx.cpp.o): unrecognized relocation (0x2a) in section `.text`/usr/bin/ld: final link failed: Bad valuecollect2: error: ld returned 1 exit status**

2019-06-21 14:09:16 15086 5

原创 gitlab-ci 持续集成配置(一)注册runner

ci其实就是持续集成的过程,gitlab-ci可以实现当我们每次提交代码到gitlab服务器的时候,可以触发相关联的runner,按照我们配置的yml中定义的jobs,完成例如自动构建,代码风格、内存泄露、单元测试、静态代码检查,以及打包等工作,可以有效的提高开发的效率。本文主要介绍相关的配置过程。

2019-06-20 20:06:22 3737

原创 tmux 下 tab不能补全,文件没有颜色显示

tab 不能补全刚申请新的机子,拿到之后就立刻安装必需的工具。tmux不能缺少啊。安装好后,输入命令的时发现,按tab竟然不会自动补全,甚至向上的按键也是不对。解决方式如下:在 Home下新建 .tmux.conf 配置文件vi ~/.tmux.conf输入内容,设置默认shellset -g default-shell /bin/bash颜色显示这个时候再打开tmux,发现...

2019-04-30 19:43:04 2047 1

原创 astyle批量优化代码风格

本文主要介绍使用Astyle这个工具来批量优化我们的代码风格为Google style。

2017-12-14 23:12:49 2203

空空如也

空空如也

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

TA关注的人

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