自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 csdn_export_md

调用sheptherd_server中queryGroupInfo方法syncGroupInfoupdateActivitySyncGroupStatusliveCodeExpireActivitysyncServingTimesendDelActivityMessageupdateActivitySyncGroupStatus活码同步群二维码定时任务扫描所有在线的群查询群信息添加群信息到任务队列...

2021-03-02 15:33:31 150

原创 csdn_export_md

调用sheptherd_server中queryGroupInfo方法syncGroupInfoupdateActivitySyncGroupStatus活码同步群二维码定时任务扫描所有在线的群查询群信息添加群信息到任务队列接受群信息同步结果更新活动同步群信息非拉人入群无需同步活动状态若果活动状态ONLINE更新状态为SYNC_GROUP_SUCCESS提交获取群二维码任务,每个顾问均不同查询群信...

2021-03-02 15:32:48 122

原创 java线程基础概念

多线程的实现继承Thread类实现多线程Runnable()接口实现多线程如果一个类为了实现多线程继承Thread类就会有但继承局限Callable实现多线程[](从JDK1.5开始追加新的开发包:java.uit.concurrent, 这个开发包主要是进行高并发编程使用的,包含很多在高并发操作会使用的类。在这个包里定义有一个新的接口Callable)线程的同步与死锁同步处理sy...

2019-09-18 21:09:02 186

原创 哈希之开散列,闭散列

先从数据查找开始说起吧,在线性结构,树形结构当中查找一个元素必须经过多次和一些元素进行比较,然后通过比较,查找到对应元素,这种方法多多少少,时间复杂度都是比较高的。有没有一种方法时间复杂度,仅仅O(1)尼,那么我们就要构造一种存储结构,通过某种函数是之元素与它对应的关键码之间能建立一一映射的关系,那么自然通过之中一一映射的关系,我们就可以很快的找到我们需要的元素。所以进入哈希这个这题首先我们需...

2019-02-22 19:51:43 804

原创 四种智能指针的用法以及实现原理

先来说一下四种常用的智能指针,我按使用度从低到高排一下顺序,分别是auto_ptr, unique_ptr, shared_ptr, weak_ptr,先来列举一下啊,剩下的我在一个一个慢慢说呀首先来说一下智能指针的实现原理主要是通过对象生命周期来控制程序资源的简单技术,然后了既然是指针就是可以进行和指针类似的行为(解引用和空间内容的访问)先来看一下auto_ptrd的实现原理吧temp...

2019-02-09 13:24:23 2880 5

原创 红黑二叉树节点的插入

进行红黑树节点的插入时候我们必须结合红黑树的性质,要不是真的很容易忙半天却发现写的代码漏洞百出不符合红黑树的性质主要总的来说是性质,其实笼统的来说我感觉两条性质用来验证就差不多了好了,列举额一下吧。每个结点不是红色就是黑色根节点是黑色的如果一个节点是红色的,则它的两个孩子结点是黑色的对于每个结点,从该结点到其所有后代叶结点的简单路径上,均 包含相同数目的黑色结点每个叶子结...

2019-02-03 22:03:14 490

原创 AVL树节点的插入

先声明一下这里为什么只写了AVL树节点的插入哈 首先说一下AVL树的查找,因为查找并没有破坏节点位置。而我们的AVL树是在搜索树的基础上限定了树的左右树之间的高度不超过(-1 || 1),所以说查找是完全类比搜索二叉树的。 在来说一下删除吧,因为删除是也是要考虑树的高度,还有顺序的,这个想一想就有一点麻烦,不过只要多画几张图,把分类的几种情况理清楚了,还是可以画出来的,但是要清楚一个概念...

2019-02-02 23:42:10 1221

原创 搜索二叉树的增,查,删操作

首先说的应该是我们的搜索二叉树是的,而这个有序是中序的有序相对其他两个操作搜索二叉树的删除应该是最复杂的这个复杂的删除还是应该画图的,如果不画图是很难说清楚也很难理清楚的好了我们的图先派在这里了,下面操作也都是用这个图作为标准了当我们只是查看搜索二叉树时候我们并不需要修改搜索二叉树里面的节点也就是元素的顺序没有被我们打乱,所以了我们只需要清楚一个比较重要的概念就是头节点这个也是我们判断...

2019-02-02 16:34:47 192

原创 【剑指】通过前序,中序遍历来重建二叉树

已知二叉树的前序,中序遍历来重建二叉树好吧!既然是二叉树我们想到比较多的还是递归遍历,毕竟比较方便一点的。如果说前序和中序相比比较突出的一个特点就是根节点在数组下标当中的位置吧,毫无疑问,前序遍历根节点在数组首元素的位置这应该特点,我们剩下的重建二叉树完全是可以向侦探小说一样顺藤摸瓜还原真相了好吧看代码 /** * Definition for binary tree * stru...

2019-01-26 22:19:21 131

原创 索引的一些特性

先看一下一些常见的索引吧!主键索引(primary key)唯一键索引(unique)普通索引(index)全文索引(fulltext)在看一下索引的基本原理~首先索引相当于创建二叉树然后基于二叉树这种查找的性质当我们需要查找8000000的数据最多也就找一个23次就可以了但是了当我们对原有数据进行增删改查,那么在空间换时间的基础思想上理解,需要的维护速...

2019-01-24 18:08:00 254

原创 多表查询

先假设一下我们有A,B,C三张表,A表中位段(AA,CC,DD),B中表位段(CC,EE,FF),C中位段(FF,GG,YY)当我们想要查询CC,EE, YY时候我们需要访问三张表,那么我们可以通过一些基本的语句查询我们先见一个库,库里面我们放三张表。±----------------+| Tables_in_scott |±----------------+| dept ...

2019-01-24 16:43:03 165

原创 mysql数据库表的基本操作

先放一张mysql基本类型的表吧!表里面是我们常用创建表时候用到都数据类型 创建一个表MariaDB [workspace]> create table user( id int, name varchar(32) comment '用户名', -> password char(32) comment '密码是32位', -> birthday d...

2019-01-20 20:03:14 198

原创 select检测标准输入

我们先看一下select的参数列表 参数解释参数nfds是需要监视的最⼤大的⽂文件描述符值+1;rdset,wrset,exset分别对应于需要检测的可读⽂文件描述符的集合,可写⽂文件描述符的集 合及异常⽂文 件描述符的集合;参数timeout为结构timeval,⽤用来设置select()的等待时间 关于fd_set的接口void FD_CLR(int fd, fd_...

2019-01-15 16:51:07 1279

原创 线程池的创建

当我们需要追求性能时候,一个进程的 创建销毁时间也许不算什么,但是当进程需要调用大量进程时候,但是每一个线程运行时间在创建销毁这个线程当中所占比例并不是百分之百,换句话说线程的创建销毁时间是不可以忽略的那么类似与懒汉模式当我们需要创建大量线程时候,就提前创建一组线程然后我们用的时候直接在这个线程组里面拿这样不是牛逼很多了嘛!我们通过一个队列是线程有一个先来后到的顺序,然后在队列中取之运行你要运...

2019-01-14 20:22:30 148

原创 关于inet_ntoa的覆盖问题

现在man手册里面看一下inet_ntoa函数的作用吧~ man⼿册上说, inet_ntoa函数, 是把这个返回结果放到了静态存储区. 这个时候不需要我们⼿动进⾏释放.(inet_ntoa是一个int_addr转字符串的函数)那么问题来了, 如果我们调⽤多次这个函数, 会有什么样的效果呢? 参⻅如下代码:运行结果发现第一次的结果完全被第二次覆盖了 在来看一下多线程情况下的吧...

2019-01-14 11:11:24 666

原创 单继承与多继承的虚函数表

我们大部分时候使用的多态虚表实在public继承的基础上实现的这句话可以怎么说了?自己简单的思考逻辑认为基类中的成员或者成员函数子类中都会重新拷贝一份,也就是如果派生类中没有定义基类的某虚函数重写但是这个**虚函数的地址已经被写实拷贝写了一份放到派生类·虚表当中了** 好了,来看一下一种情况下的虚表情况吧!单继承虚表class Base{public: virtual void...

2019-01-13 20:50:27 1042

原创 菱形虚拟继承

先定义两个概念单继承:一个子类只有一个直接父类时候称之为单继承多继承:一个子类有两个或者两个以上的父类时候称之为多继承显然易见,菱形继承顾名思义当然是在继承上有一个菱形的传递关系。 菱形继承的问题:从上面对象中可以发现他的问题,数据沉(去点三点水旁)余和二义性问题。我们的菱形最顶下成员继承的元素可以来子drival1(),也可以来子drival2().我们无法确认访问name是来自...

2019-01-13 12:58:21 221

原创 模板之类型萃取

函数类模板萃取主要针对的是含有自定义类型的函数***我们的类型函数如果需要拷贝往往可以通过给定库函数经行萃取,但是尼?***我们的类型函数类型中每一个变量中含有的成员个数都是不知道的,我们就需要另外一种拷贝深拷贝的方式,对我们的自定义类型经行处理。好了,我们定义一种不需要传递第三参数的方法类型萃取一下。定义自定义类型和内置类型 // 代表内置类型 struct TrueType { ...

2019-01-11 15:25:40 449

原创 priority_queue自定义类型重载

**prioroty_queue我们可以认为就是一个堆,我们堆的性质和std里面的这个容器其实定义性质都是差不多的。在默认情况了,qriority_queue堆顶元素是最大的,也就是大堆,但是我们往往知道如果是内置类型我们想换成小堆只需要加上priority<int, vector,greater>就可以了这样也是比较简单的,虽然加上这么一个堆转换语句看起来一下子边长了,好像变麻烦了...

2019-01-07 18:46:55 629

原创 vector的模拟实现

vector和数组看起来的却别在于一个是静态的,另外一个是动态的。而vector扩容时候,现要数据搬移到新的空间然后在释放掉以前的空间。我们模拟实现我们感觉最需要注意的还是扩容问题什么时候扩容什么时候不用扩容。已经一个检查vector扩容的接口函数也不知怎么说vector常用的接口,感觉主要分三类,第一类创建vector类,第二类修改vector元素类,第三类遍历元素类。-感觉vector...

2019-01-05 10:25:02 205

原创 迭代器的失效

我们现要简单的理解一下std里面的迭代器,我们应该如何理解了。凭我自己最简单浅显目前的理解是迭代器就是提供遍历std容器的一个指针在访问vector时候迭代器就像是一个连续的有地址的空间假设末尾迭代器上我们在vector迭代器上删除pos位置,那么我们继续向后遍历没有了pos这个地址后面的地址空间就无法推到了。总而言之了,我脑海当中是这么想的。 好了,具体看一下吧,迭代器失效,我感觉耗时...

2019-01-04 21:05:34 195

原创 new和delete,new[],delete[]的简单模拟实现

我们清楚new,delete在底层通过调用operator new,operator delete来申请空间,和释放空间,operator new, operator delete则在顶层也是调用malloc来申请空间,free来释放空间。好啦,通过这么一个逻辑关系,我们完全可以通过malloc,free来模拟实现new,delete,new[],delete[]当然还有一点我们需在某个空间地...

2019-01-04 15:54:14 289

原创 只能在堆上创建对象or只能在栈上创建对象

在栈上常见对象特点最显著的就是最后系统调用完以后销毁对象 在堆上创建对象了,即是自己申请对象资源空间自己销毁。好吧,看一下在栈上创建对象吧。class StackOnly {public: static StackOnly CreateObject() { return StackOnly(); } private: StackOn...

2019-01-04 13:38:41 171

原创 友元类和类中类的一些浅显理解与对比

友元了,不管是友元类还是友元函数有应该特点是 比较鲜明的,这个特点就是不管是友元类还是友元函数他们具有一个单向的关系你可以说a是b的友元,但是你无法说b是a的友元看一个时间日期类来理解一下吧class date;class time{ friend class date;public: time(int hour, int minute, int second) :_year(h...

2019-01-04 13:02:40 456

原创 指针与引用的性能比较

我们先来看一下传指针与传引用的效率方面的对比吧本质上来说了,传引用是一个变量的别名而已。并没有开辟新的空间。而指针了是指向一个空间对应一个空间的地址好吧,我们分别通过两者效率,和本质方面看一下两者之间的区别吧。-首先看一下两者的效率看代码#include<iostream>#include<time.h>using namespace std;//me...

2019-01-03 22:31:16 3847 2

原创 二叉堆的一些基本操作,以及升序降序

我要理解二叉树如何定义一个堆的 必须是一颗完全二叉树 我们可以分大堆和小堆 这里主要通过顺序链表的方法定义堆 这是一个从上往下的大堆我们要如何存储这个堆了,显然我们需要一个数组,然后通过写算法实现这个堆的顺序存储。这里主要说一下堆的升序与降序,以及初始化,插入删除吧。堆其实理解起来相比二叉树的链式存储要容易很多,堆升序时候我们其实主要需要的这是一个判断条件结点是...

2019-01-02 15:02:16 313

原创 迷宫小游戏最短路径的选择

我们主要通过一个栈来实现一个迷宫,用压栈来记录路径迷宫我们定义66大小的迷宫这个走法原则上是可以无限的,但是我们定义的我们必须需要考录这个我们用栈实现这个迷宫需要考虑的问题,首先来说栈是有大小的啊,所以在没有回溯的前提下,这个迷宫一直不走老路线也就是压栈,这个对于66迷宫来说绰绰有余了我们定义的这个迷宫在计算x,y坐标时候的逻辑是x向下的,y向右的为正时候越界以及我们怎么样才算是走到出口了...

2018-12-31 21:19:38 602 2

原创 环形队列的创建以及一些基本的操作

我们的环形队列长什么样子的尼,那几句话也描述不出来概括不了他的样子,还是拿一张图看一下吧在没有插入数据时候他也就是长这个样子了,首位队外首位指针相交,都在这个初始队列块子的位置。唯一需要注意的一点是我们这里定义的这个环形队列的==头==只放了一个指针,我们数据的。我们的队外尾指针位置是随这个插入数据移动的,始终指向最后一个数据快的位置。插入数据移动一下吧,这样应该思路就比较清晰了。...

2018-12-31 16:33:03 2287

原创 string的模拟实现

我们来模拟实现一下string类的常用接口啊,不是常用类的就不模拟实现了哦,没有见过,估计也半天想不出来啊。我们看一下string类的常见接口吧函数名称 | 功能说明string() | 构造string类空字符串string(const char* s) | 构造字符串string(size_t n char c) | string类包含n个字符串strin...

2018-12-31 15:15:40 184

原创 通过栈实现括号的匹配

我们通过顺序表创建一个栈 如果我们需要实现一组括号的匹配,我们首先必须知道这个括号数组当中所有的括号符号。 常见的括号符号也就 ‘[]’ ‘{}’ ‘()’,还有的一些奇奇怪怪的括号就不说了啊。 我们首先需要按思维逻辑思考,需要完成括号的左右搭配,即相同类型的括号有左也有右。那么我们必须把这个括号数组重现的遍历一遍,把左右区分开。 我们区分开了一个左括号,和有括号,那么如果我们借助栈,我...

2018-12-24 21:24:51 232

原创 生产者消费者模型

我们在这里定义一个生产者消费这模型,及供求关系生产者在没有货时候,买家是不能买到东西的消费者之间存在原子性操作总的条件因素应该就是这样了,抱着这个操作,我们完成一个试着完成一个模型。#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <pthread.h>...

2018-12-24 17:22:43 207

原创 线程创建当中遇到的一些自我理解

首先说明一下我们的线程是在Linux下创建的,即pcb模拟线程。 扫一眼man手册里面的用法说明创建线程int pthread_create(pthread_t *thread, pthread_attr_t *attr,void *(*start_routine) (void *), void *arg);thread: 用于获取线程id(用户态的线程id)attr: ...

2018-12-23 16:34:13 169

原创 用命名管道实现两个进程间通信

首先说明一下匿名管道和命名管道之间的区别匿名管道根据其名字就可以理解到这个管道是隐藏在深海当中不可间的,使用我们进程间要是没有点练习连这条管道都找不到。但是如果我们嗯是想在两个不相关的文件当中通信的话,凭自己的理解来说我们无法找到这个管道,不相关文件就无法通信。所以我们需要使用一种特殊的管道,他的名字就是命名管道。创建命名管道的方法 通过命令创建命名管道的文件$...

2018-12-21 22:04:18 3214

原创 重定向

首先我们先来看一下重定向之输出重定向的基本流程理解。我们需要知道我们的文件描述符是什么了?通过自己理解浅显不深入的说文件描述符是一个进程指向一个文件结构体(file_struct)数组的下标,当然这个下标也是从0开始的,而且默认打开0,1,2对应的都是这个进程关联控制文件的功能。 即分别对应stdin(输入),stdout(输出),stderr(标准错误)。 我们的c库函数只是对这些系...

2018-12-21 16:25:14 253

原创 系统I/O

先看一下man手册对系统调用接口的说明> int open(const char *pathname, int flags, mode_t mode);pathname: 要打开的文件名flags:选项标志O_RDONLY 只读O_WRONLY 只写O_RDWR 读写 O_CREAT 文件不存在则创建,存在则打开 ...

2018-12-21 14:24:35 229

原创 带头双向循环链表

#pragma once#include<stdlib.h>#include<stdio.h>#include<assert.h>typedef int DataType;typedef struct DNode{ DataType data; struct DNode *next; struct DNode *prev;}DNode;DN...

2018-12-19 11:39:20 175

原创 复杂链表的复制,有一个next指针指向下一个结点,还有一个random指针指向这个链表中的一个随机结点或者NULL,先要求复制这个链表,返回复制后的新链表。

定义一个简单的复杂链表。注意1.复杂链表的复制先处理复杂链表为空,这之间返回。2.当复杂链表不为空,复制链表需要在原链表每个节点连接处插入新结点。3.新结点随机指针域,(随机指针域为原结点随机指针域的下一个节点。4.将新链表从原链表上拆下。#include <stdlib.h>#include <assert.h>typedef struct CLNo...

2018-12-18 20:07:11 262

原创 逆序链表

如图我们需要将一个正向链表首尾倒置,实现一个相反的链表。方法一:我们可以定义一个result节点并且把这个节点一直置空,那么我们就可以借助这样一个节点实现首位逆置了。ListNode * ReverseList(ListNode *first){ ListNode *cur = first; ListNode *node; ListNode *result = NULL; wh...

2018-12-18 19:42:16 359

原创 从尾到头打印单链表

可运用两种方法打印:方法一:循环算法方法二:递归压栈调用方法一:先调用我们已经写好的链表头文件List.h链表构造方面不过多说明。void PrintReverse(ListNode *first){ ListNode *end = NULL; // 要打印结点的后一个结点 while (end != first) { ListNode *cur = first; //...

2018-12-18 19:16:17 258

原创 日期类基本功能实现

实现基本日期类型的加减操作demo:通过给指定日期加减一个天数计算两个日期之间相差的天数通过数组给月份赋值通过operator重载符号对内置类型符号重载*注意operator赋值时候应该满足日期类的实际情况month < 12 && February == 29 || 28计算月份时候必须对闰年分开处理,因为闰年的Feburary是28天加减天数时候需要考虑闰...

2018-12-15 21:10:49 202 2

空空如也

空空如也

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

TA关注的人

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