自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 资源 (2)
  • 收藏
  • 关注

原创 macbookpro M1芯片 CLion编译c++文件报no member named ‘at_quick_exit‘ in the global namespace

电脑是M1芯片的,使用CLion来编译运行c++文件。

2023-12-09 15:36:51 569

原创 C++配置使用zookeeper(ubuntu18.04)

前提:安装好JDK1、下载zookeeper安装包在http://archive.apache.org/dist/zookeeper/ 进行下载,下面以zookeeper-3.4.10为例。2、进入conf目录执行mv zoo_sample.cfg zoo.cfg3、进入bin目录执行sudo ./zkServer.sh start看是否能启动zk服务端4、接下来进入 src/c 目录,执行下面的指令:sudo ./configuresudo makesudo make install

2021-05-10 21:07:12 1074

原创 Linux timerfd定时器的介绍及使用

Linux提供了timerfd系列的定时器接口,由于是通过文件描述符timerfd进行组织的定时器,所以可以配合select/epoll进行对timerfd的监听,进而处理超时的事件。timerfd系列主要包含三个相关的函数:#include <sys/timerfd.h>int timerfd_create(int clockid, int flags);int timerfd_settime(int fd, int flags, const struct itimerspec *n

2021-03-28 15:53:03 1169

原创 redis save命令报错

执行save命令的时候,出现了一个错误:(error) ERR,通过查看redis的日志进行错误定位,我的日志放在/var/log/redis/redis-server.log下,具体可以通过设置redis.conf的logfile选项进行修改。如上图,错误的原因在于Permission denied,也就是权限问题,而我的dump.rdb目录在/usr/local/bin下,所以也就是说该目录的权限不足,通过chmod 757 /usr/local/bin修改其权限即可。如果你的rdb文件在别的路径,

2021-02-16 13:57:07 2081

原创 shared_ptr源码结构分析

shared_ptr是智能指针的一种,相较于unique_ptr,引入了引用计数的概念,可以支持多个智能指针指向同一资源,由引用计数的增减来描述资源的共享或内存释放,引用计数降为0的时候,资源所占用的内存空间会被释放。观察其源码结构,可以发现shared_ptr是一个模板派生类,_Ptr_base为它的基类。Shared_ptr模板类分析shared_ptr模板类没有自己的数据成员,而是只提供了一些供调用的接口,其中包括:构造函数(有多个不同版本的构造函数,对应不同的函数参数),值得注意的是,其中有

2021-02-10 17:06:21 563

原创 二分查找的思想

leetcode 35 https://leetcode-cn.com/problems/search-insert-position/leetcode 34 https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/

2020-12-02 23:37:23 524

原创 基于C++写一个线程池

线程池的设计大致需要包含这几部分:线程请求队列(存放业务请求)、工作线程(进行业务处理)、线程同步模块(互斥量、信号量)以及操作请求队列的接口(append)。下面代码封装了一个简易的线程池,采用模板类进行实现template<class T>class threadpool{public:

2020-11-29 19:17:26 194

原创 基于C++写一个mysql连接池

思想:封装mysql基本操作API,以stl中的list容器包装连接对象,采用单例模式创建连接池类对象,采取RAII机制进行实现。其中,涉及到对连接队列的操作的,全部都加上互斥锁,保证原子操作。具体的,Pool类成员变量包括:主机名或IP地址m_url,如果NULL或"localhost",连接将被视为与本地主机的连接。数据库名称m_dbName、登录用户名m_dbUser、用户密码m_dbPswd、连接端口m_port,当前连接数m_curconn、空闲连接数m_freeconn以及一个封

2020-11-27 19:06:11 220 1

原创 leetcode关于“组合“的题目合集

最近做leetcode每日一题,连续三四天都做到一个主题,叫做“组合”,核心算法思想是 回溯法,跟子集、子集II、全排列、路径规划等思想较为相似,这里做一个记录。77. 组合给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。示例:输入: n = 4, k = 2输出:[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],]39.组合总数给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidat

2020-09-11 19:03:34 310

原创 VS2017网络编程中bind冲突问题

编写socket网络通信程序的时候,在服务端用到bind函数进行绑定,写了如下语句if (SOCKET_ERROR == bind(m_listen, (struct sockaddr*)&sin, sizeof(sin))){ cout << "绑定失败!" << endl; closesocket(m_listen); return 0;}但是编译的时候一直出现下面的问题:错误 C2678 二进制“==”: 没有找到接受“int”类型的左操作数的运算符(

2020-08-27 16:30:30 680 2

原创 进程间通信之FIFO

FIFO俗名叫 命名管道(有名管道),是进程间通信的一种方法。其实,所谓的管道,就是内核里面的一块缓存。从管道的一段写入的数据,实际上是缓存在内核中的,另一端读取,也就是从内核中读取这段数据。另外,管道传输的数据是无格式的流且大小受限。第二个参数为管道权限,一般设置为0666就可以了,即管道文件有读®写(w)权限,不需要执行(x)权限。区别于pipe(匿名管道),在pipe中,我们可以使用 fork 创建子进程,创建的子进程会复制父进程的文件描述符,这样就做到了两个进程各有两个fd[0](读端) 与 fd

2020-08-04 11:34:18 1220 3

原创 C++实现-用三个线程分别打印’A’、’B’、’C’,线程1打印A,线程2打印B,线程3打印C,请实现三个线程同时启动并协作始终打印 ABCABCABC….

题目为:用三个线程分别打印’A’、’B’、’C’,线程1打印A,线程2打印B,线程3打印C,请实现三个线程同时启动并协作始终打印 ABCABCABC….,是在牛客网上看到的阿里一面的题目。首先要实现轮次有序打印ABC,就必须让线程1先执行,然后再让线程2执行,最后再让线程3执行,最后再回到线程1,以此循环往复。所以就需要保证线程的执行顺序,且单个线程在执行的时候,不能受到其他两个线程的干扰,那比较容易想到采用锁。那肯定不能单纯的让三个线程去竞争锁,因为无法保证线程1首先拿到锁,再到线程2和线程3,所以需

2020-07-13 11:08:28 1598

原创 windows编程线程同步之条件变量

条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待 “条件变量的条件成立” 而挂起;另一个线程使 “条件成立”,然后唤醒另一个等待线程。C++11提供了多线程线程同步的条件变量接口可以调用,一般都需要配合互斥量进行使用,常说到的生产者-消费者模型就可以用条件变量进行实现。主要用到的结果接口有:void wait(std::unique_lock<std::mutex>& lock);//Predicate 谓词函数,第二个参数可为lambda表

2020-07-11 11:04:37 591

原创 极其简单0难度配置vim代码提示ycm

众所周知,ycm的安装过程以及配置过程是十分**的,最近自己在安装这个的时候也是碰到很多麻烦,并且很多文章也无法解决,后来发现有一个开源的github项目,全自动安装配置vim所需的几乎所有东西,包括 开发界面、代码提示、对齐等等,完全打造成了一个vscode级别的编辑器。地址: https://github.com/chxuan/vimplus.git具体步骤:首先要先装好vim,git和gmake,然后接下来:① git clone https://github.com/chxuan/vimpl

2020-07-08 14:57:02 371

原创 git冲突的产生以及解决

在只有一个本地master分支的情况下是不会产生冲突的,但是通常开发都需要多分支开发,就容易产生合并冲突。以两个分支的冲突为例,具体是两个已经commit的分支对相同文件相同位置的不同操作(比如对代码的同一行进行了不同的修改),然后在主分支进行合并,就会产生冲突。下面举个例子,环境是vscode。先在master分支创建一个新文件t1.cpp并提交接下来新建两个分支,模拟两个人来修改t1.cpp先新建一个分支b1,然后在b1中修改t1.cpp并提交,如下图然后再创建另一个分支b2做修改,如下图:

2020-07-01 16:02:46 854

原创 错误:error while loading shared libraries: libmxml.so.1解决方法

执行包含mxml动态库的程序时,出现这个错误,解决办法有两个:① 执行这句话:export LD_LIBRARY_PATH=/usr/local/lib但是每次重启运行 都得继续执行这句话,不然就报错,比较麻烦。② 执行locate libmxml.so.1查看这个库的系统路径sudo vi /etc/ld.so.conf ,在最下面加入这个库所在的目录:/usr/local/libsudo ldconfig问题解决...

2020-05-10 16:20:12 1132 1

原创 minixml开源库的使用

minixml是一款轻量级、可供C语言调用的XML文件创建、解析的开源库,安装包https://github.com/michaelrsweet/mxml/releases/tag/v3.1可以下载。 使用时需要包含头文件<mxml.h>,编译时需要加上-lmxml链接动态库。下面是一些常用接口:生成XML文件接口:1. 创建一个新的xml文件mxml_node_t *mxmlNewXML(const char *version);//返回新创建的xml文件结点,默认编码utf-8/

2020-05-10 16:06:51 1778

原创 libevent框架常用接口及通信测试

下面是libevent框架的简单测试代码,是在学习libevent的时候写的测试代码,目的是熟悉libevent的API接口和使用流程,没有涉及到数据格式或数据解析,就是单纯的收发数据并输出到终端,并且不会对原理做解释,只是单纯的使用libevent。代码都有很详细的注释,比较容易看懂。常用接口:struct event_base *event_base_new(); //创建一个事件处理框...

2020-05-05 23:28:20 465

原创 解决winscp只能下载,无法上传的问题

我用winscp从linux下载文件到本地没有出现任何问题,但是把windows的文件上传到linux的时候,就一直出现权限的问题,照了网上很多方法去修改配置文件,也都行不通,最后发现直接用root登录,然后把文件上传到/root,再去移动就好了。注意用scp协议就可以了,不需要sftp然后再把它移动到我需要的文件中就可以了...

2020-05-05 10:47:22 1875

原创 解决linux环境下无法ping通github,clone项目

使用git去克隆github上的项目出现 fatal: unable to access xxx : 连接超时 这个报错,并且ping不通我是ubuntu18.04环境,解决方法如下:编辑 /etc/hosts增加以下这一段更新ip地址192.30.253.113 github.com192.30.252.131 github.com85.31.16.185 github.g...

2020-04-28 16:47:01 9341 10

原创 矩阵中的路径+机器人的运动范围题目分析

“矩阵中的路径” 和 "机器人的运动范围"是剑指offer的倒数第2,3道题目,因为这两道题思路类似,就放在一起说。矩阵中的路径(leetcode版本)请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3×4的矩阵中包...

2020-04-07 13:26:57 261

原创 c/c++ mysql编程接口

c语言提供了连接mysql的一些接口,可以实现增查改删等操作,主要有以下:头文件 <mysql.h>MYSQL //句柄MYSQL * mysql_init(MYSQL *mysql); //初始化一个MYSQL连接的实例对象,如果mysql不为空,返回该对象地址。void mysql_close(MYSQL *sock); //释放一个MYSQL连接实例MY...

2020-04-06 19:27:56 447

原创 共享内存机制——mmap和shm

共享内存是进程间通信的一种方法,常用到的有mmap和shm,下面做一个比较。mmap机制:在磁盘上建立一个文件,然后把文件内容映射到虚拟内存上,在每个进程的虚拟存储器里面,单独开辟一个空间来进行映射。在多进程情况下,不会对实际的物理存储器(主存)消耗太大。即将一个文件或者其它对象映射到进程的虚拟地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一 一对映关系。实现这样的映射关系后...

2020-03-29 22:03:55 2734

原创 简单udp通信例程

udp面向无连接,成为数据报的传输层通信协议(DGRAM),不同于tcp面向连接的基于字节流(STREAM)的传输层通信协议。主要用到几个函数:服务端int socket(int domain, int type, int protocol);int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);ssi...

2020-03-19 22:19:14 1155

原创 IO多路复用之epoll

epoll同select,poll等,都是IO多路复用的一种方式,但是性能上远超前面两个。以select为例,select监听多个文件描述符的时候,当其中某些文件描述符有事件发生,select需要我们自己去轮询,也就是从头到尾扫描所有文件描述符(下面简称fd),看是哪一个被置位,这种情况下效率是比较低的。并且,select和poll的实现均存在拷贝的过程,也就是执行的时候,需要把 fd 集合从...

2020-03-16 22:49:05 177

原创 回溯递归思想的一些经典算法题

回溯:可以归结为一个模板result = [ ]void backtrack(路径, 选择列表): if 满足结束条件: result.add(路径) return; for 选择 in 选择列表: 做选择 backtrack(递归) 撤销选择题目1:路径问题class Solu...

2020-03-15 21:38:10 250

原创 MYSQL事务隔离级别

mysql有4种事务隔离级别,分别为:read uncommited(读未提交数据)read commited(读已提交数据) ,repeatable read(可重复读) 和 serializable(串行化)。其默认隔离级别为为repeatable read。这些隔离级别是为了解决同时运行多个事务时,当这些事务访问数据库中相同的数据时引发的并发问题。一般有三种:脏读,不可重复读,幻读,在下...

2020-02-18 16:59:14 360 1

原创 windows下select服务器模型

设计一个高性能的网络服务器的时候可以用到I/O多路复用,意思就是通过一种机制,可以监听多个文件描述符,比如说socket,以此可以达到多个客户端同时请求连接到服务端,并可以进行数据的交互。select、poll、epoll等都是这类机制。当然,要实现多个客户端同时和服务端通信,多线程也是一种办法。select服务器模型最大的优势是用户可以在单线程内同时处理多个客户端的IO请求,用户可以注册多个so...

2020-02-12 15:44:06 731

原创 几种常见的排序算法-c++

class SORT {public: SORT() { for (int i = 0; i < array_SIZE; i++) { cout << "...Please input the num: "; cin >> a[i]; } int p; cout...

2020-02-04 11:15:19 193

原创 linux多线程socket通信与互斥量

什么是线程每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程,可以把线程称作程序执行流的最小单位。每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。可以用下面的图表示,更加直观,协程是更加轻量级的线程,这里就不叙述了。单线程与多线程单线程:单线程在程序执行时,所走的程序路径按照连续顺序排下来,前面的必须处理好,后面的才会执行...

2020-01-29 12:24:28 643

原创 C++单例模式与多线程安全

用代码实现如下:class Singleton {public: static Singleton* CreateObj() { if (m_pInstance == NULL) { m_pInstance = new Singleton(); } return m_pInstance; } void test() { cout << "访问单例类的接...

2020-01-23 17:21:53 1893

原创 剑指offer——替换空格

题目描述:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。Input:“A B”Output“A%20B”解题思路:一看是字符串处理问题,最先想到的是从前往后遍历,然后根据需求处理。这个题,如果从前往后遍历,每次遇到空格,便要将空格替换为%20,也就是说,每遇到一个空格,需要往...

2020-01-21 22:06:43 139

原创 剑指offer——构建乘积数组(C++)

题目描述:给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1], 其中B中的元素B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-1],不能使用除法。对于这个题目,如果没有“不能使用除法”这个规定,可以通过计算A[0]A[1]…A[i]…*A[n-1]除以A[i]来计算B[i]的值(考虑A[i]是否为0的情况)现在多了这个条件,我们可以这么考虑,如下面的...

2020-01-19 21:45:18 305

原创 剑指offer——数组中重复的数字(C++)

题目描述:在一个长度为n的数组里,所有的数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数是重复的,也不知道每个数重复几次,请找出数组中任意一个重复的数。**(时间复杂度O(n),空间复杂度O(1)**刚看到这个题目的时候,第一个想到的就是把数组先排好序,然后前后比较就可以得出来结果。不过这样子的话,时间复杂度会比较大,后来看了解释,一开始也看不太懂,琢磨了一番后明白了。...

2020-01-18 19:49:55 509

原创 基于C++——在Linux环境下简单封装socket

学习 **TCP/IP** 协议的时候,非常重要的一个内容就是利用**socket**进行通信,接下来贴出一个 **点对点通信** 的服务端代码与客户端代码,利用C++进行简单封装。

2019-11-11 21:49:52 1203 3

原创 c/c++实现二叉树的一些基本操作

**刚学到数据结构的二叉树时,总结了下它的一些基本操作,构建、遍历以及一些简单计算很多都基于递归思想,也就是递归栈的思想,如果一开始觉得难理解,可以试着画画图,从栈的角度去理解,注意深刻理解先进先出接下来贴出代码typedef struct BinaryTree{ int data; BinaryTree *Left, *Right; }Node;//先创建根节点,然后创建左结点,...

2019-10-02 11:16:23 577

原创 C/C++实现双向链表及基本操作

接下来,我要用一段C/C++代码实现双向链表的构建,插入,删除操作。这是链表操作中比较基本的操作,我是模仿单向链表来进行双向链表的构建,其插入和删除操作也和单向链表大同小异,代码并不晦涩难懂,适合新手研读,有错误或者不够完善的希望大家指出。#include "pch.h"#include <stdlib.h>#include <iostream>#include &...

2019-09-26 19:30:04 1262

原创 C/C++实现栈的一些基本操作

接下来,我将用一段C/C++代码实现栈的一些基本操作,带有注释,简单易懂,适合新手入门。这是我刚刚学数据结构时自己写的(看视频+看博客+视频),代码的深度可能比较浅,也没有调用C++的stl库进行实现,可能比较适合刚入门的朋友看,有什么错误希望大家可以指出,谢谢。#include <iostream>#include <Windows.h>#include &l...

2019-09-26 18:17:18 1177 1

模式识别课程资料-20200316.rar

opencv一些资料,包括opencv示例库、Linear Algebra Review and Reference的pdf,以及一个示例cpp程序

2020-06-12

matlab基础学习课件

matlab基础知识的应用与学习,matlab是一门强大的数学工具 广泛用于各种计算与项目

2019-02-02

空空如也

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

TA关注的人

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