虹少侠
码龄7年
关注
提问 私信
  • 博客:40,202
    40,202
    总访问量
  • 25
    原创
  • 688,571
    排名
  • 15
    粉丝
  • 0
    铁粉

个人简介:唯有知识不会辜负你

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:北京市
  • 加入CSDN时间: 2018-02-10
博客简介:

虹少侠的博客

查看详细资料
个人成就
  • 获得61次点赞
  • 内容获得10次评论
  • 获得141次收藏
  • 代码片获得133次分享
创作历程
  • 1篇
    2023年
  • 2篇
    2021年
  • 2篇
    2020年
  • 14篇
    2019年
  • 6篇
    2018年
成就勋章
TA的专栏
  • 面试攻略~
    1篇
  • Qt
    1篇
  • 安装搭建
    1篇
  • 微服务
    3篇
  • 数据结构
    12篇
  • 读书总结
  • c++
    5篇
  • linux
    2篇
  • Redis源码阅读
兴趣领域 设置
  • 数据结构与算法
    排序算法
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

LruCache结合Any容器类型实现任意类型缓存

使用unordered_map 和 双向链表实现,支持设置缓存过期时间;通过Any容器可实现任意类型的缓存
原创
发布博客 2023.02.13 ·
174 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

面试经典:TCP粘包是怎么回事?

前言关于TCP协议的问题在面试中会经常被问道,尤其是在应届生面试中。TCP协议是面向连接的可靠性协议。说它可靠并不表示数据信息一定会被对端接受,而是在传输失败后会放弃重传机制并中断连接来通知用户。它提供的只是数据可靠性的传输和故障通知。回到TCP粘包这个问题上,TCP是数据流传输,数据流是只有起点和终点的字节数据序列,只有输入流和输出流。根本不存在“包”的概念。那大家常说的粘包的“包”是指什么呢?其实大家说的是应用层的包,应用层协议规定了包的结构和大小,本质上就是一段数据报文。具
原创
发布博客 2021.08.06 ·
378 阅读 ·
2 点赞 ·
0 评论 ·
1 收藏

VS2019安装QT5.14.1全过程

前言作为一个VS的老用户,在开发Qt项目时,实在不想使用QtCreator来开发,我相信很多人和我一样,用过VS编写C++就不想在用其他IDE了????。记录一下我安装VS2019+Qt5.4.1的全过程(保姆级教程),帮大家快速安装。安装QT15.4.1https://download.qt.io/在这里面选择一个要使用的Qt版本我这里选择5.14.1选择windows版本下载安装需要你的账号密码,如果没有可以使用邮箱注册VS2019和VS201..
原创
发布博客 2021.07.25 ·
5306 阅读 ·
14 点赞 ·
0 评论 ·
47 收藏

分级时间轮c++简单实现

在实际工作中我们不能为每一个定时任务创建一个定时器,因为定时器也是一种珍贵的资源,在linux中可以使用alarm信号,timerfd,epoll_wait,select都可以来实现定时器。其中epoll_wait和select提供了延时作用,alarm采用异步的信号,timerfd系列需要在select/epoll中注册定时器事件EPOLLIN,并在事件发生后uint64_t x; read(timerfd,&x,sizeof(x));否则select和epoll的水平触发模式下会不断的提醒...
原创
发布博客 2020.08.16 ·
1006 阅读 ·
1 点赞 ·
0 评论 ·
4 收藏

C++ 利用linux函数makecontext等实现简单协程

我是一个编程新手,最近了解到协程这个概念,协程可以理解为用户级线程,在用户空间实现调度,在处理异步IO时,可以在子程序中让出cpu交给其他协程,等事件完成再切换到子程序中。当然回调也可以实现,但是使用协程会使程序“看起来”是顺序执行的。我利用linux系统函数getcontext,makecontext,swapcontext来实现协程之间的切换。getcontext(ucontext_t*)初始化上下文,makecontext(ucontext_t*,void(*)(void),int args)
原创
发布博客 2020.06.13 ·
1842 阅读 ·
2 点赞 ·
2 评论 ·
2 收藏

在docker中部署consul

consul可用于服务发现,并提供可视化工具,默认端口9000首先在docker中拉取consul最新版本docker pull consul:lasest启动脚本,搭建consul集群,并设置consul服务随docker启动而启动 1 #!/bin/bash 2 3 PORT=8500 4 IP=172.19.0.8 5 rm -fr /data/cons...
原创
发布博客 2019.12.17 ·
479 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

在docker中发布微服务

Dockerfile文件//使用最新的debian作为基础镜像,debain为linux环境FROM debian:latest//运行mkdir 创建app目录RUN mkdir /app//切换目录WORKDIR /app//将当前目录中的可执行文件添加到/app目录中ADD email-service /app/email-service//运行邮件服务CMD ["....
原创
发布博客 2019.12.14 ·
336 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

在搭建centos7 go微服务环境中遇到的问题汇总

首先安装go环境首先下载一个go的版本https://golang.google.cn/dl/在网站中找到链接后使用wget https://studygolang.com/dl/golang/go1.13.1.linux-amd64.tar.gz 下载压缩包解压:tar -xvf go1.13.1.linux-amd64.tar.gz 会生成一个go文件夹,这个文件夹就是goroot...
原创
发布博客 2019.10.18 ·
646 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

centos7安装protocol buffer

centos7安装protocol buffer因为搭建go环境需要使用protoc,所以记录一下对于protoc的安装记录:是用wget下载protobuf包wget https://github.com/protocolbuffers/protobuf/releases/download/v3.10.0/protobuf-all-3.10.0.tar.gztar zvxf pr...
原创
发布博客 2019.10.17 ·
1062 阅读 ·
0 点赞 ·
0 评论 ·
3 收藏

任意类型容器Any

利用模板类继承非模板类,实现一个可以存储任意类型的容器#ifndef _ANY_H#define _ANY_H#include <string>#include <algorithm>class IAnyItem abstract{public: virtual ~IAnyItem() {} virtual const type_info& ...
原创
发布博客 2019.08.13 ·
667 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏

c++实现LFU算法

LFU (Least Frequently Used),是一种缓存算法,它对每一个数据块都有一个访问次数的记录,也就是一个数据块的访问次数越大,在将来越可能访问。1.每个节点(数据块)都有一个访问次数,新插入的节点访问次数为12.相同访问次数的依据时间排序,后插入的在前面3.当需要淘汰数据时,会从尾部,也就是访问次数从小到大,开始淘汰这里是使用c++实现的LFU缓存:主要利用了一个mu...
原创
发布博客 2019.08.09 ·
5091 阅读 ·
5 点赞 ·
0 评论 ·
23 收藏

c++实现LRU算法

LRU算法(Least Recently Used),是内存管理中为了保证命中率的一种页面置换算法,可用于内存和辅存之间也可用用在cache和内存之间,redis中的过期淘汰策略中也使用了lru算法。它是利用了程序局部性的原理,简单说就是此刻访问的页面很可能在下一时刻也会访问。这里使用c++实现简单的LRU缓存#ifndef _LRU_H#define _LRU_H#include...
原创
发布博客 2019.07.31 ·
1169 阅读 ·
2 点赞 ·
0 评论 ·
4 收藏

跳跃表实现

跳跃表:跳跃表与链表结构相似,只是引入“分层”的概念,从上到下的每一层都是一个链表。借个图:从图中可观察到跳跃表有以下的性质:1.每个节点有多个层,每层都有一个指向同层的下一节点的指针2.每层的链表都是一个有序链表,根据给定的key排序3.最底层也就是第一层,的链表包含所有节点4.存在于 k 层的节点,同样也存在于 <k 层的链表中引入多层的链表的概念是为...
原创
发布博客 2019.07.04 ·
578 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

排序算法总结对比

/*常用排序算法分析*/void swap(int& x,int& y){ if(x != y){ x = x + y; y = x - y; x = x - y; }}/*冒泡排序时间复杂度为o(n^2)两两比较,交换,每次内层循环在未排序序列中找出最大值放到已排序中对于部分有序的序列来说,效率较高稳定*/void bubble_sor...
原创
发布博客 2019.04.28 ·
777 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏

B+树插入删除实现(c++)

B+树性质B+树B+树的实现有多种,有关键字和子树个数相等的,还有向B树一样的子树比关键字数量多一个。这里使用第二种方式。1.树的每个节点最多有M个子树2.根节点至少有两个子树(如果不是叶子节点)3.除根节点之外的所有非叶子节点,至少有M/2个子树(向上取整)4.所有非叶子节点包括keycount,child[0],key[1],child[1],key[2]..key[keyco...
原创
发布博客 2019.03.20 ·
1562 阅读 ·
1 点赞 ·
0 评论 ·
11 收藏

B树插入删除实现(c++)

B树的性质1、树的每个节点最多有M个子树。2、根节点至少有两个子树(除非它是叶子节点)。3、除根节点之外的所有非叶子节点至少有M/2个子树(向上取整)。4、所有非叶子节点包含keycount, childs[0],keys[1],childs[1],keys[2]........keys[keycount],childs[keycount]。也就是所有非叶子节点的子树在key值...
原创
发布博客 2019.03.14 ·
1272 阅读 ·
0 点赞 ·
0 评论 ·
8 收藏

使用mmap遇到总线错误bus error

先简单描绘一下错误发生的场景:#define MMAP_BUFF_SIZE 4096struct Message{ int len; char data[1024]; };int fd = open("./test",O_RDWR | O_CREAT);lseek(fd,MMAP_BUFF_SIZE,SEEK_SET);Message* m ...
原创
发布博客 2019.03.07 ·
5418 阅读 ·
14 点赞 ·
2 评论 ·
15 收藏

哈夫曼编码

哈夫曼树哈夫曼树就是一棵带权二叉树、它的WPL是最小的、也就是从根节点到每一个节点的路径长度(经过的边数)与权值乘积的总和是最小的、就称为哈夫曼树。哈夫曼编码把各个字符在整个串中出现的频率作为它的权重、通过使用0、1表示来缩短整个串的长度、可用于无损压缩。完成哈夫曼编码首先要先建立哈夫曼树、根据树中节点的路径、计算出对应节点的编码。下面我写了一个类其中就包含了建立哈夫曼树和完成...
原创
发布博客 2019.01.23 ·
1142 阅读 ·
2 点赞 ·
1 评论 ·
4 收藏

智能指针shared_ptr

说明:在使用c++语言编程时、为了防止忘记对申请的空间进行释放、我们通常使用智能指针来管理对象。智能指针有很多种、它们适用于不同的场合。auto_ptr:只允许唯一的一个auto_ptr对象管理一个资源、在拷贝时会自动将原auto_ptr指向置空。unique_ptr:同一时刻只允许一个unique_ptr对象指向指定资源、不允许拷贝、通过release()释放所有权、move移动所有...
原创
发布博客 2019.01.23 ·
196 阅读 ·
2 点赞 ·
0 评论 ·
0 收藏

遇到的错误以及一些配置、做个记录

Vs2012 重定义的错误2018-12-5今天我遇到了一个链接期错误“重定义”、以前也遇到过、但是以前是“真的重定义”、有重复的变量或者是重定义的函数、但是这次不一样、听我讲清整个事件的全过程:地点:一个头文件中、暂时命名为“app.h”,更细致一些是在一个命名空间中如下:namespace test{ namespace APP { boos...
原创
发布博客 2018.12.05 ·
185 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏
加载更多