自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 GTest编译和使用

1. 初体验编译googletest下载googletest https://github.com/google/googletestcd googletestmkdir build 建编译目录cd buildcmake .. 生成makefilemake 编译后生成libgmock.a libgmock_main.a libgtest.a libgtest_main.asudo make install 将头文件导入到/usr/local/include, 静态库导入到/usr/loc

2021-09-29 15:52:43 2473

原创 markdown中特殊符号用html中标签实现

https://www.jianshu.com/p/80ac23666a98https://blog.csdn.net/html5_/article/details/21639475

2020-03-21 15:02:24 470

原创 c++ lambda

lambda1. 仿函数(函数对象)、闭包closure、closure对象仿函数functors仿函数,也称函数对象function object,类中重载operator()操作符,使得类的使用看上去像一个函数,通常用于STL算法中的最后一个自定义参数。// 仿函数class Test {public: Test(int value) : value_(value) ...

2020-03-20 15:04:07 326

Leetcode刷题--链表

反转链表解题思路:三个指针:一个指针pre保存老链表的next节点,一个指针cur保存当前节点,一个指针tmp为新链表头指针。ListNode* reverseList(ListNode* head) { // 3个指针, 保存老链表下一个元素,cur前元素,新链表头元素 ListNode *next = nullptr; ListNode *cur = hea...

2020-02-19 21:04:50 186

原创 windows下 vscode 配置c++环境(MINGW)

下载并安装 vscode、mingw安装vscode插件,配置mingw bin到环境path下在vscode里添加文件夹、launch.json和task.jsonlaunch.json : Debug->AddConfiguration"version": "0.2.0", "configurations": [ { "nam...

2020-01-19 19:33:34 603

原创 堆、堆排序

1. 堆1.1 堆的定义:1) 堆的父节点总是大于或小于所有字节点2) 堆总是一棵完全二叉树 完全二叉树:为满二叉树的子集 满二叉树:每一层的节点数都是最大节点数1.2 堆的实现:堆的建立、插入一个元素、删除一个元素、堆排序1 )堆的建立 O(n)堆逻辑上是个完全二叉树,物理上可以用数组实现,完全二叉树经过位置调整后满足父节点小于等于或者大于等于子节点条件后形成...

2020-01-14 11:08:18 230

原创 python基础篇2

1. 函数定义一个函数:关键字def开头,后接函数标识符和参数列表,然后加上冒号def 函数名(参数列表): 函数体参数类型必须参数:正常声明时指明的参数关键字参数:在函数调用时将具体的实参指明传递给形参,这样函数调用可以不用按照顺序传递。默认参数:函数声明时指明参数默认值不定长参数:声明时加星号*param 表示tuple方式传入可变参数, **param表示字典方式传入...

2020-01-12 21:55:48 159

原创 python基础篇1

1.hello world#!/usr/bin/env pythonprint("hello world");2. 基本数据类型int, float, bool(True, False), str(‘a’, ‘acvb’, “aaaa”)可以使用内置函数 type(x)来得到类型。3.序列tuple 元组 s = (2, 23, ‘a’, ‘ac’) 空序列 s = ()...

2020-01-12 16:51:14 172

原创 04 共享内存

共享内存是最快的IPC,一旦内存区映射进程序的地址空间,进程间的数据传递就不在需要涉及内核,只是再共享内存区内存取数据需要用到同步,同步的方法有:互斥锁、条件变量、读写锁、记录锁和信号量。将文件映射进程序时,这时的映射文件共享内存呈随文件系统的持续性。管道、FIFO、消息队列读写数据时(消息队列可以通过内存映射实现、这时不涉及内核)。共享内存读写数据mmap、munmap和msync...

2019-12-17 20:42:20 281

原创 帮助链接

c++cppreferencecpluspluslinux api

2019-12-15 16:33:28 118

原创 参考链接

知乎:进程间通信的7种方式你都了解吗

2019-12-15 16:14:15 123

原创 03 Posix信号量

文章目录1. 基本概念2. 命名信号量2.1 打开或者创建 sem_open2.2 关闭一个信号量 sem_close2.3 删除一个信号量 sem_unlink2.4 信号量操作: sem_wait,sem_post, sem_getvalue3. 未命名信号量(基于内存的信号量、匿名信号量)3.1 初始化信号量3.2 销毁信号量4. 其他4.1 信号量相关宏限制1. 基本概念信号量是一种...

2019-12-12 20:31:00 189

原创 02 Posix 消息队列

一个进程向消息队列写入消息之前,并不需要某个进程在该队列上等待该消息的到达,而管道和FIFO如果没有读者就开始写,则会产生SIGPIPE信号、管道和FIFO是随进程的持续性,当管道和FIFO最后一次关闭发生时,仍在管道和FIFO中的数据会被丢弃。消息队列是随内核的持续性,即一个进程向消息队列写入消息后,然后终止,另外一个进程可以在以后某个时刻打开该队列读取消息。只要内核没有重新自举,消息队列没...

2019-12-10 20:39:53 217

原创 linux默认消息队列创建位置 &undefined reference to `mq_open'

unix网络编程 卷2进程间通信 Posix消息队列一章中,创建的消息队列在/tmp目录下,实际操作的时候发现该目录下没有新创建的消息队列,在Linux man page上发现默认创建位置在/dev/mqueue/下,参考https://linux.die.net/man/7/mq_overview在编译时报undefined reference to mq_open、undefin...

2019-12-10 11:20:17 2272

原创 01 管道

1. 管道简单理解管道实质上是在内存或文件系统中创建一个共享文件,通讯方共享这个文件,每一方只允许对文件进行读或者写,数据流是单向的。管道内是字节流传递,没有分界线,不能随机读取,只能顺序读写。管道分为匿名管道和命名管道2. 匿名管道使用同一管道的进程间必须有亲属关系,对文件系统不可见,内核在内存中模拟管道管道应用:ls -al | grep xxx : ls -al 输出为管...

2019-12-06 20:08:57 183

转载 c++ to_string

函数原型:string to_string (int val);string to_string (long val);string to_string (long long val);string to_string (unsigned val);string to_string (unsigned long val);string to_string (unsigned long ...

2019-12-05 15:09:05 121

转载 乐观锁与悲观锁

       悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。它指的是对数据被外界(包括本系统当前的其他事务,以及来自外...

2019-12-05 14:08:24 148

原创 unix/linux信号:2.API使用

1. 基本数据结构信号: int sig;信号集:sigset_t set;sigset_t类型有的是数组, 有的是unsigned long类型, 原理是每个信号在信号集里是一个位掩码。// 数组typedef struct {  unsigned long sig[_NSIG_WORDS];} sigset_t// unsigned longtypedef __sigs...

2019-12-03 09:46:57 252

原创 ps -aux | grep 进程名: 进程pid一直变化

欲通过命令ps -aux | grep 进程名 返回某进程的进程号,再通过kill杀掉改进程,在这个过程中,如果grep不能匹配到正确的进程号,则grep本身会产生一条(并不是对应进程的进程号),并且这条信息的pid一直在变化。剔除掉grep本身产生的一条输出,在命令后面加上-v grep : ps -aux | grep app | grep -v grep...

2019-12-02 09:20:24 13712

原创 SUSE core文件获取

For SLES12SP3 to SLES15SP1:查看 /proc/sys/kernel/core_pattern :|/usr/lib/systemd/systemd-coredump %P %u %g %s %t %e表示默认的core文件生成由 /usr/lib/systemd/systemd-coredump 程序处理,最终生成的core文件默认位置/var/lib/syste...

2019-11-20 12:01:33 667

原创 unix/linux信号:1. 基础介绍

基本概念信号是事件发生时对进程的通知机制,可以通知其他进程也可以通知进程自己。信号通常源自于内核。信号通常分为两类: 一是 内核向进程通知,通常称为标准信号或传统信号(1~31)。 二是另外的一组实时信号。进程可以通过信号掩码暂时将到来的信号阻塞。进程对信号的到来有如下几种默认处理方式:1.忽略信号2.终止进程3.产生核心转储文件,同时终止进程4.停止进程5.之前暂停后再...

2019-11-15 09:09:49 113

原创 《unix网络编程》- 卷2:进程间通信 --源码编译

SUSE Linux Enterprise Server 12 SP2 (x86_64) – kernal 4.4.21-69-default编译步骤:make 报错gcc -g -O2 -D_REENTRANT -Wall -D_POSIX_PTHREAD_SEMANTICS -c -o daemon_inetd.o daemon_inetd.cIn file in...

2019-11-06 15:00:39 314

转载 理解CAS与__sync_bool_compare_and_swap

      CAS是compare and swap,   简单来说就是,在写入新值之前, 读出旧值, 当且仅当旧值与存储中的当前值一致时,才把新值写入存储。__sync_bool_compare_and_swap是可供程序员调用的接口, 为什么需要CAS呢?...

2019-10-27 16:37:22 253

转载 C++和双重检查锁定模式(DCLP)的风险

https://blog.csdn.net/nodeathphoenix/article/details/51657973http://blog.jobbole.com/86392/

2019-10-14 20:11:12 186

转载 tcp 三次握手和四次挥手

https://blog.csdn.net/hyg0811/article/details/102366854

2019-10-10 12:13:37 107

原创 c++中比较罕见的关键字

c++关键字:mutable为了打破c++函数const限制而出现的一个关键字。mutable修饰的变量表示可变的,在被const修饰的类成员函数中,不能改变类中的所有数据成员,但如果某个数据成员确实和const无关,需要改变,可以将这个数据成员用mutable来修饰。explicit一般用在构造函数中,指明构造函数不能发生隐式类型转换。exportvolatileregister...

2019-10-09 12:08:06 183

原创 任何时候都适用的20个C++技巧

任何时候都适用的20个C++技巧

2019-10-09 11:25:45 348 1

原创 c++引用和指针的区别

引用是个别名,指针是个实体,有自己的地址。引用必须赋初始值,指针不需要。引用被初始值赋值后不能重新绑定新对象,指针可以随时切换指向不同对象。(使用引用的时候不用判空,使用指针的时候需要)引用不能用0来初始化,指针可以初始化为0,表示不指向任何对象。即引用不能为空,指针可以为空。(常引用可以引用常量0)可以有常引用,用来表示引用的对象是个常量,但引用本身不能为常量;指针可以有常指针和指向常量...

2019-10-07 13:51:00 166

原创 c++ function

std::function, 头文件functional ,是一个类模板Class template, c++11引入template< class R, class... Args > class function<R(Args...)>;std::function也被称为通用的多态函数包装器(也可以包装类成员变量),可以保存、复制和调用那些可以被调用的对象,例如函数...

2019-09-21 15:39:32 1474

原创 c++二元运算符 ->* 和 .*

->*和.*是两个‘二元运算符’ , 用来操作类成员变量和函数&class::member : 对于member为 nonstatic的变量, 取值后返回的是变量在对象内的偏移位置。对于static的成员变量,返回的是成员地址。 nonstatic和static变量取值都可以直接用*。&class::func : 返回的是成员函数的地址。对于nonstatic函数,通...

2019-09-19 14:49:16 3468

转载 c++重载函数为什么不能用返回值来区别呢?

转载自:https://www.cnblogs.com/skynet/archive/2010/09/05/1818636.html

2019-09-16 15:17:12 287

原创 vim(三):vim常见问题

1. vim环境配置~/.vimrc 配置文件 只对本用户生效/etc/vimrc 对所有用户生效2. 中文乱码问题在~/.vimrc中添加"解决中文乱码问题set fileencodings=utf-8,gbk,gb2312 "打开文件时可选的编码格式并参选一个合适的--解决打开gbk文件乱码的方法set termencoding=utf-8 "表示终端环境使用的编码格式set...

2019-09-15 15:09:09 244

原创 linux常用命令(一)

1.压缩解压缩1.1 zip解压:unzip xxx.zip -d mydir #解压到指定目录,不指定则解压到当前目录下的xxx文件夹压缩:zip -r xxx.zip mydir #压缩当前文件夹mydir查看压缩包内的信息: unzip -v xxx.zip 2. 查看系统中安装了什么软件使用rpm -qa查询rpm -qa | grep “软件或者包的名字 ...

2019-09-15 15:08:49 126

原创 vim(二):vim常见命令

1. vim分屏以下命令都是在vim的命令行执行创建一个空白分屏: :new新建分屏并打开任意文件::sp newfile #水平创建vsp newfile #垂直创建分屏切换ctrl+w 然后 w 在分屏之间切换ctrl+w 然后 h 向左分屏切换ctrl+w 然后 l 向右分屏切换ctrl+w 然后 j 向下分屏切换ctrl+w 然后 k 向上...

2019-09-15 15:08:34 320

原创 c++ new和delete简单探索

c++ new和delete简单探索new 和 delete 工作步骤new:1.使用标准库函数operator new或者operator new[] 分配出一块足够大的内存2. 调用相应的构造函数构造出对象并赋初值,对象安排在步骤1的内存上3. 返回指向这块内存的指针delete:1. 调用对象的析构函数2. 调用标准库函数operator delete或者operator d...

2019-09-15 15:04:57 146

原创 c/c++可变参数列表

1. c语言的可变参数列表va_list ptr: 定义一个指向可变参数列表的指针va_start(ptr, a):初始化指针,其中第二个参数为函数可变参数列表之前的固定参数va_arg(ptr,int):取出指针指向的元素,第二个参数为元素的类型,返回值为取出的元素,同时指针后移。va_end(ptr) : 还原ptr指针#include<stdarg.h>// 确定:要...

2019-09-15 10:37:09 1834

原创 linux下的软件安装

linux软件相关目录/etc : 配置文件/bin, /sbin/, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin 二进制程序/lib, /usr/lib, /usr/local/lib 库文件/usr/share/, /usr/local/share 帮助文档其中/usr/bin一般放系统级别程序,用户程序一般放在/usr...

2019-09-04 21:08:34 98

原创 vim(一):基本配置 & taglist &自定义快捷键代码高亮

vim基本配置set nu "显示行号synta on "自动语法高亮set tabstop=4 "tab代表4个空格

2019-09-04 16:08:50 1235

原创 c++ new内存分配失败后的new_handler

c++ new内存分配失败后的new_handler1. new_handler/ set_new_handler/get_new_handlerc++使用new分配内存,当operator new无法满足某一内存分配需求时,它会抛出异常,但c++允许在抛出异常前调用一个自定义函数(new_handler),用来给客户自定义指定“内存分配不足”这一行为的处理方式。加入我们自定义函数需要调...

2019-08-16 21:26:16 404

原创 c++ friend关键字

c++ friend关键字friend友元,指的是某些普通函数、成员函数、类为了访问指定类中的私有成员,将这些函数或者类用friend关键字修饰并放入到要访问的类中,即可提高原来的访问权限,能访问类中的私有成员。这破坏了被访问类的封装性,不太好,但是有的特定场景下用这种方法使得问题解决起来更加简单,比如之前实现的引用计数智能指针引用计数实现的智能指针类中声明友元称为友元声明,不是函数或...

2019-08-14 08:31:41 646

空空如也

空空如也

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

TA关注的人

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