自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(113)
  • 资源 (5)
  • 收藏
  • 关注

原创 Linux奇技淫巧之-使用setarch 禁止地址空间随机化

了解Linux内核地址空间布局随机化(ASLR)以及如何禁用该特性

2024-02-23 18:35:54 491

原创 理解typeid操作符

17-18 : int 和 int& 都输出i,即引用类型返回该引用所引用的对象的类型。28:是函数的类型名称,与29函数指针的名称不相同,即函数也没有退化为函数指针。此外,当涉及继承时还有一些细节需要考虑,未来会在另一篇文章中讨论。20-21,24-25: 顶层const被忽略。对比17和22可以看到,顶层const被忽略。为了方便理解,这里将返回的类型名称进行还原。26-27:可以说明数据未发生退化。

2024-02-22 17:30:30 137

原创 使用c++filt 还原RTTI返回的类型名称

typeid操作符会返回一个const type_info&对象,调用该对象的name()方法会返回一个const char*,但是具体的内容是跟编译器的实现相关的。可以看到g++输出的是一个mangled name,那怎么知道这个这个字符串具体代表什么意思呢?在g++ 编译后输出。

2024-02-22 16:27:20 150

原创 C++ 11 Reference qualifier or ref-qualifier

成员函数名后面的& 和&&代表什么意思?有什么应用场景?这篇文章可以帮你理解

2024-02-07 17:29:35 287

原创 Linux read命令详解

2.read从标准输入读取一行数据,并将其split,再将split后的字段赋值给read命令最后指定的变量,下面的例子中,从标准输入读取一行,split后将第一个字段的值赋值给yourname变量,即Gilbert,将第二个字段的值赋值给yourage变量,即30,split默认的分隔符是IFS变量的值,这个值默认是空格。6.默认遇到换行符read命令返回,可以限制读入的总字符数,当输入的总字符数达到后read立即返回,7. 指定结束符,默认遇到换行符结束读取,read返回,通过-d可以指定新的结束符。

2024-01-10 13:37:35 591

原创 如何高效阅读Linux的man page

本文讲解了如何查找bash内置命令(如read,kill 等)的参考手册,并以较为美观的方式展示出来

2024-01-09 10:57:14 565

转载 batch脚本字符串切割问题

Scripting Batch File: Split String

2023-12-21 13:44:10 52

原创 c++ Templates:The Complete Guide第二版英文版勘误

看到这里的时候觉得不对劲,一查,果然是写错了,Values应该改成Vs。

2023-11-01 23:38:04 206

原创 特殊成员函数生成规则

2023-10-16 23:13:21 81

原创 移动一个const对象会发生什么?

我们知道,通过移动操作从一个对象中“窃取”数据的时候,被窃取的那个对象会被修改。这也是为什么移动构造函数要声明成Test(Test&&)的原因。当我们对一个const对象进行移动时,直觉上可能会认为,无法编译通过。毕竟移动操作会修改源对象,但是原对象又是一个const对象,很矛盾。但是实际上上面的代码可以编译通过。但是最好不要对const对象应用移动操作,如果这个对象尺寸很大的话,拷贝操作的代价很高。可见,如果试图对一个const对象进行移动操作,最终会使用拷贝来作为一个变通方法。

2023-10-16 22:30:34 183

原创 修改cmake默认使用的编译器

通过上面的输出可以看到,在/usr/bin目录下,有三个文件:gcc,g++,c++,其中gcc和g++都是软连接,指向gcc9.1和g++9.1,而c++是一个普通的可执行文件。机器上的当前编译器是gcc4.8,无法完全支持c++11的正则表达式,于是安装了gcc9.1.同时也修改了/usr/bin/gcc和/usr/bin/g++软连接的指向。使用的编译器还是gcc4.8.5,而且编译器的文件名不是/usr/bin/g++,而是/usr/bin/c++.从下面输出可以看到,版本已经更改。

2023-09-27 09:40:00 471

原创 char*加上一个整数会发生什么?

a指向一个字符串"hello", "hello"代表这个字符串的起始地址,那么,"hello" + 1就代表这个字符串的第二个字符所在的地址。因此b相当于在a的基础上向后移了一位,因此b指向的字符串为"ello",此时a和b会指向同一个字符串的不同位置吗?不过通过这个例子可以说明给字符串加上整数会发生什么。

2023-09-27 09:16:45 204

原创 scanf函数使用注意事项

别碰scanf格式化字符串中如何插入宏定义?

2023-08-06 22:34:56 33

原创 为什么crontab无法拉起进程

你有没有经历过这种情况,你写了一个进程自动拉起脚本,然后将这个脚本配到crontab,当你手动执行这个脚本的时候,是可以拉起这个进程的,但是crontab就是无法拉起。要验证这个猜想很简单,在你的自动拉起脚本中加一句env > /path/to/your/file,这样,当crontab运行这个脚本时就会将环境变量导入到这个文件中,你再将它和你当前会话shell中的环境变量比较一下,就能发现差异了。怎么解决这个问题呢?

2023-03-08 15:08:57 211 1

原创 windows下通过端口监控服务

本文说明了如何在Windows环境下通过编写脚本监控端口状态达到监控服务状态的目的

2023-03-02 11:15:17 1340

原创 Java concurrency - Task Execution

所谓的“任务递交和任务执行解耦”就是说你可以轻易地通过实现自己的Executor接口改变某个任务的执行策略。Executor接口支持多种执行策略,将任务的递交和任务的执行解耦。:当当前的线程池大小超出处理任务所需数量时,销毁一些空闲线程,另一方面,当需求增加时,再创建新的线程,对线程数量没有限制。多个线程可以提升吞吐量,但线程数不能无限制地增长,因此要限制线程的数量。:单线程执行器,创建单个线程来处理任务,任务保证是序列化处理的。:固定大小的线程池,支持滞后的或者周期性的任务,类似于定时器。

2023-02-25 01:07:09 349

原创 Java concurrency - dead locks

如果一个任务在线程池中执行,同时它又依赖另一个任务,就可能会死锁。在一个单线程的执行器中,如果一个任务A把另一个任务B提交给同一个执行器并等待其结果,那么一定会造成死锁。第二个任务B干坐在任务队列中等待第一个任务A结束,但是第一个任务A永远不会结束,因为它在等待第二个任务B的计算结果。dead lock的常见形式。

2023-02-23 00:09:04 53

原创 Java concurrency-thread confinment

thread-local数据是线程安全的,因为只有一个线程可以访问这些数据,这就消除了竞争的风险。由于竞争不存在,因此不需要对数据进行加锁,因此thread confinement这个实践可以使得你的代码更加安全(从源头上大大降低了编码错误的隐患)且扩展性更好(无锁)。thread confiment 是一种实践,确保只有一个线程可以访问数据,这样的数据叫做thread-local数据,因为它是与某一特定的线程相关的。

2023-02-22 23:32:04 43

原创 MongoDB的查询

MongoDB查询语句基本用法

2023-02-22 17:38:24 335

原创 排序

void shellSort(int array[], int n) { // Rearrange elements at each n/2, n/4, n/8, ... intervals for (int interval = n / 2; interval > 0; interval /= 2) { for (int i = interval; i < n; i += 1) { int temp = array[i]; int j; f.

2021-05-27 15:19:24 68

翻译 enable_shared_from_this

一点基础std::shared_ptr是一个共享所有权的智能指针,它可以让我们安全地访问和管理对象的生命周期。多个std::shared的实例通过一个共享的控制块结构来控制对象的生命周期。控制块维护了一个引用计数,一个弱计数和其他必要的信息来管理内存中对象的存在。当用一个裸指针来构造或者初始化一个shared_ptr对象时,就创建了一个新的控制块。为确保一个对象仅由一个共享的控制块管理。其他的要指向这块内存的shared_ptr实例必须通过拷贝已存在的指向这块内存的shared_ptr实例来创建。例

2021-04-04 15:05:51 808

原创 [咬文嚼字学C++]一个对象包含的shared_ptr不能指向自己

今天看到一篇文章,里面有这么一句话:ashared_ptris a strong reference and influences the lifetime of the managed object. An object that keeps ashared_ptrto itself becomes immortal, thus causing a memory leak:shared_ptr是一个强引用,会影响它所管理的对象的生命期。一个对象若是包含了指向自己的shared_ptr...

2021-04-04 01:34:13 219

原创 [咬文嚼字学C++]用来初始化智能指针的普通指针必须指向动态内存

如果违反了会有什么后果看一个例子:#include <iostream>#include <memory>int main(int argc, char **argv){ int x = 10; std::shared_ptr<int> spi{&x}; std::cout << *spi << std::endl; //10 std::cout << "usre_count:" &

2021-04-04 01:02:44 241

原创 字符串排序陷阱题

编写一个程序,将输入字符串中的字符按如下规则排序。规则 1 :英文字母从 A 到 Z 排列,不区分大小写。 如,输入: Type 输出: epTy规则 2 :同一个英文字母的大小写同时存在时,按照输入顺序排列。 如,输入: BabA 输出: aABb 规则 3 :非英文字母的其它字符保持原来的位置。 如,输入: By?e 输出: Be?y 注意有多组测试数据,即输入有多行,每一行单独处理(换行符隔开的表示不同行)如果不考虑规则3, 那么就是一个简单的排序问题,对现有的稳定排序算法稍加改进

2021-04-03 17:38:34 345 1

原创 对数组做交换(swap)会发生什么?

在C++ Primer 9.2.5中讲道:与其他容器不同,swap两个array会真正交换他们的元素。因此,交换两个array所需的时间与array中元素的数目成正比。因此,对于array,在swap操作之后,指针、引用和迭代器所绑定的元素保持不变,但元素值已经与另一个array中对应元素值进行了交换。说明交换操作并不改变元素的内存地址,只是将两个数组相同索引所对应的内存中的值进行交换。写测试程序验证一下:#include <iostream>#include &lt..

2021-03-30 01:37:39 1772

原创 为什么C++中拷贝赋值运算符必须返回一个引用

通过一段代码说明这个问题#include <iostream>class A{public: A() : m_age(0){ std::cout << "construvtor invoked." << std::endl; } A(const int age):m_age(age){ std::cout << "int constructor invoked" << std::endl; }

2021-03-08 01:28:20 919

原创 mysql使用游标cursor时循环额外多出一次的解决办法

mysql cursor 中使用循环(loop, 或者 repeat)时,循环每次会多执行一次。比如说,一次查询返回5条记录,使用cursor遍历时,循环会执行6次,当返回10条记录时,循环会遍历11次。出现这个现象的原因是,循环中的代码逻辑有点问题,稍加修改就能正常工作了。先贴出有问题的代码:DELIMITER //CREATE PROCEDURE traverse_tables()BEGIN DECLARE tabnames_smsi varchar(50); DECLARE...

2021-01-08 16:22:51 1018

原创 Windows下通过进程名称获取进程pid

例如,通过devenv.exe找到进程id号为14376在msdn查到api接口为:DWORD GetProcessId( HANDLE Process);需要传入一个HANDLE,那问题又来了,怎样获得这个HANDLE呢?网上找了很久的答案,最后在stack overflow找到了答案https://stackoverflow.com/questions/865152/how-can-i-get-a-process-handle-by-its-name-in-c原...

2020-09-29 17:04:55 6386

原创 关于虚函数的默认实参的问题

A.hclass A{public: //... virtual void log(int a, int b = 2, int c = 3) const;};A.cppvoid A::log(int a, int b, int c) const{ std::cout << "A class \n"; std::cout << "{" << a << "," << b << "," <&lt.

2020-08-13 00:23:24 241

原创 C++中可能会出现内存泄漏的情况

1.new之后没有调用对应的delete;2.调用了delete但是delete没有执行,比如说delete在for循环内部,由于过早的continue,break,goto语句跳过了delete语句。或者由于出现异常导致delete语句没有执行。3.在有继承关系的类中,父类的析构函数没有声明为virtual,这样的话,当一个子类对象析构时父类的析构函数不会调用,从而造成子类对象中父类部分的内存没有释放。...

2020-08-12 22:36:39 170

原创 ros2踩坑记

在构建一个激光雷达点云的包时,遇到一个很奇怪的问题,包能构建成功,但是使用ros2 run 时,无法用Tab键补全可执行文件名(包名是可以补全的),手动输入 ros2 run <package_name> <executable_name> 会提示:No executable found这个问题困扰了我好久,最终在这里 找到了原因。...

2020-07-01 11:17:42 3011 5

原创 ros2 接口

/** \mainpage rclcpp: ROS Client Library for C++ * * `rclcpp` provides the canonical C++ API for interacting with ROS. * It consists of these main components: * * - Node * - rclcpp::Node * - rclcpp/node.hpp * - Publisher * - rclcpp::Node::c.

2020-06-15 14:33:28 937

原创 关于C++ 输出操作符重载

写了这样一个测试程序头文件:#ifndef C_TEST_BASICCONCEPTTEST_H#define C_TEST_BASICCONCEPTTEST_H#include <iostream>class cal {public: friend std::ostream &operator<<(std::ostream &os, const cal &print) ; friend cal operator+(cons

2020-05-09 18:30:41 168

原创 bazel安装

官网https://github.com/bazelbuild/bazel/releases利用二进制文件安装详细步骤第一步:安装预先需要的支持包sudo apt-get install pkg-config zip g++ zlib1g-dev unzip python第二步:下载Bazel从官网中下载命名格式为的Bazel二进制安装包第三步:安装Bazel比如我...

2020-05-06 15:35:08 1369

转载 std::istream::ignore

istream& ignore (streamsize n = 1, int delim = EOF);Extract and discard charactersExtracts characters from the input sequence and discards them, until eitherncharacters have been extracted...

2020-05-06 11:22:37 328

转载 Varint编码

LevelDB内部通过采用变长编码,对数据进行压缩来减少存储空间,采用CRC进行数据正确性校验。下面就对varint编码进行学习。传统的integer是以32位来表示的,存储需要4个字节,当如果整数大小在256以内,那么只需要用一个字节就可以存储这个整数,这样就可以节省3个字节的存储空间,Google varint就是根据这种思想来序列化整数的原贴https://www.cnblogs...

2020-04-30 15:21:36 265

转载 google test 检查宏总结

布尔值检查Fatal assertion Nonfatal assertion Verifies ASSERT_TRUE(condition); EXPECT_TRUE(condition); conditionis true ASSERT_FALSE(condition); EXPECT_FALSE(condition); conditioni...

2020-04-30 10:54:41 558

原创 google test安装

#复制代码到本地git clone [email protected]:google/googletest.gitcd googletest/googletest/#在CMakeList.txt中作如下修改#添加一行SET( CMAKE_CXX_FLAGS "-std=c++11 -O3")#将下面一行的OFF改成ON # BUILD_SHARED_LIBS is a stand...

2020-04-30 10:39:22 1006

原创 关于C++委托构造函数

#include <iostream>class randomClass{ int a_; long b_; double c_;public: randomClass(int a, long b, double c):a_(a),b_(b),c_(c){ std::cout << "3 agrv constructo...

2020-04-28 15:52:11 199

原创 C++中的类型转换测试程序

template< typename T>std::string quireTypeName(T value){ std::string type; if(typeid(value).name() == typeid(bool).name()) type = "bool"; else if(typeid(value).name() == typeid(un...

2020-04-28 11:48:20 115

rate() versus irate() in Prometheus (and Grafana).pdf

Prometheus 中rate()和irate()的区别,两者都用来计算counter类型数据的变化率

2020-10-13

core file 机制.pdf

Core dumped, but core file is not in the current directory?

2019-11-15

errno(3) - Linux manual page.pdf

当linux系统函数出错时,通常会返回一个负值,而且整型变量errno通常被设置为具有特定信息的值。例如,open 函数如果成功执行 则返回一个非负文件描述符,如出错则返回−1。在 open出错时,有大约15种不同的errno值(文件不存在、权限问题等)。而有些函数对于出 错则使用另一种约定而不是返回负值。例如,大多数返回指向对象指针的函数,在出错时会返回一个null指针。 文件<errno.h>中定义了errno以及可以赋与它的各种常量。这些常量都以字符E开头。

2019-11-11

ROS::TF_TePRA2013_Foote.pdf

tf: The transform library tf is a package that lets the user keep track of multiple coordinate frames over time. tf maintains the relationship between coordinate frames in a tree structure buffered in time, and lets the user transform points, vectors, etc between any two coordinate frames at any desired point in time.

2019-10-18

UNIX Time-Sharing System

Since PDP-11 Unix became operational in February, 1971, over 600 installations have been put into service. Most of them are engaged in applications such as computer science education, the preparation and formatting of documents and other textual material, the collection and processing of trouble data from various switching machines within the Bell System, and recording and checking telephone service orders. Our own installation is used mainly for research in operating systems, languages, computer networks, and other topics in computer science, and also for document preparation.

2019-05-08

空空如也

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

TA关注的人

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