wekidi
码龄5年
关注
提问 私信
  • 博客:23,564
    23,564
    总访问量
  • 47
    原创
  • 2,195,133
    排名
  • 1
    粉丝
  • 0
    铁粉
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:山东省
  • 加入CSDN时间: 2020-03-27
博客简介:

wekidi的博客

查看详细资料
个人成就
  • 获得0次点赞
  • 内容获得1次评论
  • 获得16次收藏
创作历程
  • 42篇
    2022年
  • 7篇
    2021年
成就勋章
TA的专栏
  • Linux编程和网络编程
    6篇
  • mysql
    4篇
  • c++
    19篇
  • 设计模式
    1篇
  • c基础
    18篇
  • 算法与数据结构
    6篇
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

C++ | 实现mysql连接池

利用单利模式获取连接池实例,支持高并发,为每个连接记录存活时间,当连接总量大于最大连接数时会将时间过长的连接断开,当池子没有连接时会利用生产者线程进行生产Connpool *Connpool::instance = nullptr;//获得池子Connpool *Connpool::GetInstance(){ if (instance == nullptr) { std::lock_guard<std::mutex> lock(instance_mute
原创
发布博客 2022.04.24 ·
1909 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

C++ | function和bind

可调用对象可调用对象的定义:(满足一个即可)是一个函数指针是一个具有operator()成员函数的类对象(就是仿函数)是一个可被转换为函数指针的类对象是一个类成员(函数)指针关于一个可被转换为函数指针的类对象的举例:struct Bar{ using fr_t = void(*) (void);//返回值为空参数为空的函数指针类型定义为fr_t static void func(void) { //... } operator fr_t(void) { return f
原创
发布博客 2022.04.17 ·
723 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

C++并发 | std::future原理

只是了解future可以异步返回一个函数的返回值,和std::packaged_task一起使用,但是不了解其中原理,上网看了一些资料做个总结^^std::future 可以用来获取异步任务的结果,因此可以把它当成一种简单的线程间同步的手段.通过用packaged_task和目标任务和参数打包形成的packaged_task类,我的理解是里面重载了()运算符,使对象成为可调用的仿函数,struct st{ int val; void operator()(int x) { val = x;
原创
发布博客 2022.04.05 ·
1428 阅读 ·
0 点赞 ·
1 评论 ·
0 收藏

C++并发编程 | 实现通用线程池

此线程池采用了半同步半异步,而且实现了任意任务的传入,不限制参数和返回值,用到了std::packaged_task和future,利用lambda 表达式作为统一调用.SynbQueue为同步队列,在此类中添加要执行的任务ThreadPoll负责创建线程池并且没有任务时阻塞,当有任务添加时,将其唤醒并执行,大致模型为第一层为同步服务层,处理来自上层的任务请求,上层的任务请求是并发的,并不会马上处理,而是将这些任务放到一个同步队列中,等待处理。第二层为同步队列,来自上层的任务都会加到队列中等待处理
原创
发布博客 2022.04.05 ·
911 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

C++ | 对象池结合单例模式

思想就是一个对象只能有一个池子,用对象从池子里面取,每个池子有一个管理者来管理所对应的池子,取对象从管理者这里申请template<class _Ty>class ObjectPoll{private: enum { PollSize = 4 };protected: struct _Node { _Node* next; }; _Node* front; _Node* rear; void ReFull() { int total = sizeof(
原创
发布博客 2022.03.27 ·
816 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

mysql |

四大排名函数:一、ROW_NUMBER()Row_number() 在排名是序号 连续 不重复,即使遇到表中的两个一样的数值亦是如此1 2 3 4 5二、rank()Rank() 函数会把要求排序的值相同的归为一组且每组序号一样,排序不会连续执行1 2 2 4 4 6三、dense_rank()Dense_rank() 排序是连续的,也会把相同的值分为一组且每组排序号一样1 2 2 3 3 4 4四、ntile()Ntile(group_num) 将所有记录分成group_num个组,每组
原创
发布博客 2022.03.13 ·
969 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

c++ | 函数调用时栈使用情况分析(汇编)

int main(){ int a = 1; int b = 2; int c = sum(a , b); int d = 2; return 0;}sum调用前此时ebp:012FF98C ,esp:012FF890将b的值入栈,a的值入栈执行call。执行call的时候,先把下一条指令的地址入栈,再跳转。对于每一次push操作,%esp储存的地址会-1sum栈中:将ebp的值将入栈,还没入,此时ebp的值为0x012FF98C,esp为0x012FF884.
原创
发布博客 2022.03.12 ·
875 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

mysql | imit offset

offset X是跳过X个数据,limit Y是选取Y个数据limit X,Y 中X表示跳过X个数据,读取Y个数据
原创
发布博客 2022.03.11 ·
600 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

mysql | snull,ifnull,nullif

isnull(expr) 的用法: 如expr 为null,那么isnull() 的返回值为 1,否则返回值为 0。 mysql> select isnull(1+1); -> 0 mysql> select isnull(1/0); -> 1 使用= 的null 值对比通常是错误的。isnull() 函数同 is null比较操作符具有一些相同的特性。请参见有关is null 的说明。IFNULL(expr1,expr2)的用法:假如expr1 不为 NULL,则 IFNUL
原创
发布博客 2022.03.11 ·
159 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

linux | 从内核文件系统看文件读写过程

虚拟文件系统一个操作系统可以支持多种底层不同的文件系统(比如NTFS, FAT, ext3, ext4),为了给内核和用户进程提供统一的文件系统视图,Linux在用户进程和底层文件系统之间加入了一个抽象层,即虚拟文件系统(Virtual File System, VFS),进程所有的文件操作都通过VFS,由VFS来适配各种底层不同的文件系统,完成实际的文件操作。通俗的说,VFS就是定义了一个通用文件系统的接口层和适配层,一方面为用户进程提供了一组统一的访问文件,目录和其他对象的统一方法,另一方面又要和不
转载
发布博客 2022.03.08 ·
340 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

算法 | KMP算法

核心:主串不能回退,一直遍历当子串没有重复的时候子串回退到头部有重复的时候回退到最后一个重复位置如果发生失配,从失配位置向前看,看字串是否存在两个真子串一个顶头一个顶尾匹配到c的时候匹配失败,按照普通方式是子串回到起始位置,主串到上次开始匹配位置的下一个位置,也就是b,但是这样的话在匹配失败的位置c的前面等于发生"错位",这样错位一直到,这时候其实也是错位,但是刚好错位还跟第一次匹配错误位置前两个对应上了,由于并不知道第一次匹配错误的位置是否等于子串的下一个位置,所以需要比较一下b是否和a相等
原创
发布博客 2022.02.27 ·
200 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

vector | resize和reserve在底层上的差异

今天通过源码大概分析了一遍resize的流程,不是特别详细,只是了解了大致过程,简单来说就是当申请的尺寸大于当前的容量,会进行_Resize_reallocate,流程我大概总结了一下,就是先按照新容量进行空间的申请返回新的地址_Newvec,将_Appended_first置为新的地址+旧size*sizeof(class)在_Appended_first将额外新的对象进行构建,这样_Appended_first之上的几个对象空间用来存储以前就有对象然后在_Newvec进行拷贝构造,(以前就有
原创
发布博客 2022.02.26 ·
216 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

C++ | 虚继承和内存结构

虚继承和虚函数是完全无相关的两个概念。虚继承是解决C++多重继承问题的一种手段,从不同途径继承来的同一基类,会在子类中存在多份拷贝。这将存在两个问题:其一,浪费存储空间;第二,存在二义性问题,通常可以将派生类对象的地址赋值给基类对象,实现的具体方式是,将基类指针指向继承类(继承类有基类的拷贝)中的基类对象的地址,但是多重继承可能存在一个基类的多份拷贝,这就出现了二义性。虚继承可以解决多种继承前面提到的两个问题:虚继承底层实现原理与编译器相关,一般通过虚基类指针和虚基类表实现,每个虚继承的子类都有一个虚
原创
发布博客 2022.02.25 ·
222 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

排序 | 堆排序

思路:void adjustheap(int* ar,int start,int end){ int tmp = ar[start]; int i = start; int j = 2 * start + 1;//左孩子 while (j <= end) { if (j<end && ar[j + 1]>ar[j]) { j += 1; } if (ar[j] > tmp)//本来是要把tmp放到这个位置的,可是他如果小于他的孩子
原创
发布博客 2022.02.23 ·
149 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

排序 | 归并排序(递归和迭代)

利用分治的思想,将问题不断地划分为相同但是规模更小的问题,利用相同的解法解小问题,最终大问题得以解决一一合并完之后每一个元素个数为2的数组有序,然后两个两个的合并,四个四个的合并…直到最大容量,排序完成递归版void copy(int* src, int* dest, int left, int right){ for (left; left <= right; ++left) { dest[left] = src[left]; }}void merge(int* src, i
原创
发布博客 2022.02.20 ·
517 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

C++ | 实例化和具体化

实例化是将利用模板产生对象:Pair<string, string> ii; // 隐式 实例化对象template class Pair<int, double>; //显式实例化对象具体化是模板的细分,就是更加具体一些,但还是个模板template<class _Ty, class _Dx = default_Deletor<_Ty>>class my_share_ptr{};template<class _Ty, cl
原创
发布博客 2022.02.20 ·
489 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

排序 | 快速排序

思想每一次划分,使左边均小于基准,右边均大于,但是无序,然后再将左右边各划分一次,这样划分下去,直到分解数组大小为1,划分停止,此时已经有序.划分函数快排中划分函数时必不可少的,他的作用是确定一个基准,然后以此基准进行划分,划分的方式有很多种,最常用的是双指针在边界处进行遍历,右指针找小于基准的,左指针找大于基准的,然后交换,直到左右指针重合,再把基准放到最终指针位置,这样基准的左边均小,右边均大了.双指针指向最左和最右的划分函数int Partition(int* ar, int left, i
原创
发布博客 2022.02.17 ·
400 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

计算机网络 | 链路层

链路层和arp
原创
发布博客 2022.02.16 ·
1382 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

C++ | 智能指针

RAII资源的获取即初始化资源的使用经历三个步骤获取资源使用资源销毁资源引入智能指针的目的使用裸指针的缺点:难以区分是单个对象还是一个数组使用完无法判断是否应该销毁指针没有办法分辨一个指针处于悬挂状态难以保证在所有路径中只有一次的销毁指针操作智能指针所干的事就是当对象不再需要时就自动执行清理auto_ptr代码template<class _Ty>class my_auto_ptr{ bool _Owns; _Ty* _Ptr;public: ex
原创
发布博客 2022.02.15 ·
281 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

C/C++ | 内存模型的比较

今天看到一篇内容,讲的是new和malloc区别,虽然是老生常谈,但是这篇文章给我一个新的认知我们都知道在C++中,内存分为五个区:堆、栈、自由存储区、全局/静态存储区和常量存储区。在C中,分为代码区,全局初始化数据区/静态数据区...
原创
发布博客 2022.02.15 ·
549 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏
加载更多