
C/C++
文章平均质量分 71
广州市民林先生
无。
展开
-
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 · 1372 阅读 · 0 评论 -
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 · 1457 阅读 · 0 评论 -
shared_ptr源码结构分析
shared_ptr是智能指针的一种,相较于unique_ptr,引入了引用计数的概念,可以支持多个智能指针指向同一资源,由引用计数的增减来描述资源的共享或内存释放,引用计数降为0的时候,资源所占用的内存空间会被释放。观察其源码结构,可以发现shared_ptr是一个模板派生类,_Ptr_base为它的基类。Shared_ptr模板类分析shared_ptr模板类没有自己的数据成员,而是只提供了一些供调用的接口,其中包括:构造函数(有多个不同版本的构造函数,对应不同的函数参数),值得注意的是,其中有原创 2021-02-10 17:06:21 · 658 阅读 · 0 评论 -
基于C++写一个线程池
线程池的设计大致需要包含这几部分:线程请求队列(存放业务请求)、工作线程(进行业务处理)、线程同步模块(互斥量、信号量)以及操作请求队列的接口(append)。下面代码封装了一个简易的线程池,采用模板类进行实现template<class T>class threadpool{public:原创 2020-11-29 19:17:26 · 239 阅读 · 0 评论 -
基于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 · 283 阅读 · 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 · 371 阅读 · 0 评论 -
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 · 1881 阅读 · 0 评论 -
libevent框架常用接口及通信测试
下面是libevent框架的简单测试代码,是在学习libevent的时候写的测试代码,目的是熟悉libevent的API接口和使用流程,没有涉及到数据格式或数据解析,就是单纯的收发数据并输出到终端,并且不会对原理做解释,只是单纯的使用libevent。代码都有很详细的注释,比较容易看懂。常用接口:struct event_base *event_base_new(); //创建一个事件处理框...原创 2020-05-05 23:28:20 · 528 阅读 · 0 评论 -
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 · 488 阅读 · 0 评论 -
回溯递归思想的一些经典算法题
回溯:可以归结为一个模板result = [ ]void backtrack(路径, 选择列表): if 满足结束条件: result.add(路径) return; for 选择 in 选择列表: 做选择 backtrack(递归) 撤销选择题目1:路径问题class Solu...原创 2020-03-15 21:38:10 · 290 阅读 · 0 评论 -
linux多线程socket通信与互斥量
什么是线程每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程,可以把线程称作程序执行流的最小单位。每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。可以用下面的图表示,更加直观,协程是更加轻量级的线程,这里就不叙述了。单线程与多线程单线程:单线程在程序执行时,所走的程序路径按照连续顺序排下来,前面的必须处理好,后面的才会执行...原创 2020-01-29 12:24:28 · 745 阅读 · 0 评论 -
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 · 2019 阅读 · 0 评论 -
剑指offer——替换空格
题目描述:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。Input:“A B”Output“A%20B”解题思路:一看是字符串处理问题,最先想到的是从前往后遍历,然后根据需求处理。这个题,如果从前往后遍历,每次遇到空格,便要将空格替换为%20,也就是说,每遇到一个空格,需要往...原创 2020-01-21 22:06:43 · 172 阅读 · 0 评论 -
剑指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 · 351 阅读 · 0 评论 -
剑指offer——数组中重复的数字(C++)
题目描述:在一个长度为n的数组里,所有的数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数是重复的,也不知道每个数重复几次,请找出数组中任意一个重复的数。**(时间复杂度O(n),空间复杂度O(1)**刚看到这个题目的时候,第一个想到的就是把数组先排好序,然后前后比较就可以得出来结果。不过这样子的话,时间复杂度会比较大,后来看了解释,一开始也看不太懂,琢磨了一番后明白了。...原创 2020-01-18 19:49:55 · 560 阅读 · 0 评论 -
基于C++——在Linux环境下简单封装socket
学习 **TCP/IP** 协议的时候,非常重要的一个内容就是利用**socket**进行通信,接下来贴出一个 **点对点通信** 的服务端代码与客户端代码,利用C++进行简单封装。原创 2019-11-11 21:49:52 · 1344 阅读 · 3 评论 -
C/C++实现栈的一些基本操作
接下来,我将用一段C/C++代码实现栈的一些基本操作,带有注释,简单易懂,适合新手入门。这是我刚刚学数据结构时自己写的(看视频+看博客+视频),代码的深度可能比较浅,也没有调用C++的stl库进行实现,可能比较适合刚入门的朋友看,有什么错误希望大家可以指出,谢谢。#include <iostream>#include <Windows.h>#include &l...原创 2019-09-26 18:17:18 · 1250 阅读 · 1 评论 -
C/C++实现双向链表及基本操作
接下来,我要用一段C/C++代码实现双向链表的构建,插入,删除操作。这是链表操作中比较基本的操作,我是模仿单向链表来进行双向链表的构建,其插入和删除操作也和单向链表大同小异,代码并不晦涩难懂,适合新手研读,有错误或者不够完善的希望大家指出。#include "pch.h"#include <stdlib.h>#include <iostream>#include &...原创 2019-09-26 19:30:04 · 1312 阅读 · 0 评论 -
c/c++实现二叉树的一些基本操作
**刚学到数据结构的二叉树时,总结了下它的一些基本操作,构建、遍历以及一些简单计算很多都基于递归思想,也就是递归栈的思想,如果一开始觉得难理解,可以试着画画图,从栈的角度去理解,注意深刻理解先进先出接下来贴出代码typedef struct BinaryTree{ int data; BinaryTree *Left, *Right; }Node;//先创建根节点,然后创建左结点,...原创 2019-10-02 11:16:23 · 626 阅读 · 0 评论