自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

心灵迷宫

一个c++er不停地造轮子的博客

  • 博客(60)
  • 资源 (1)
  • 收藏
  • 关注

原创 右值和移动语义进阶

右值和移动文章目录右值和移动1. 前言2. 左值和右值3. 右值引用4. 完美转发4.1 万能引用和右值引用区别1. 前言这里就不谈右值和移动的一些基础概念。这里主要谈一下,是不是我们可以无脑使用std::move2. 左值和右值我们都知道C++实际上分为左值和右值的。一般情况下,我们认为可以这样区分能够被取地址的值称为左值,不能被取地址的被称为右值。当然这里C/C++的原生字符串例外。...

2019-12-31 22:47:30 233

原创 leetcode-245-最短单词距离(找俩个有序数组中的差的最小值)

题目给定一个单词列表和两个单词 word1 和 word2,返回列表中这两个单词之间的最短距离。word1 和 word2 是有可能相同的,并且它们将分别表示为列表中两个独立的单词。示例:假设 words = [“practice”, “makes”, “perfect”, “coding”, “makes”].输入: word1 = “makes”, word2 = “coding”...

2019-12-18 22:53:10 677

原创 Redis源码学习-8-Redis源码网络部分简要分析

main函数流程文章目录main函数流程0. 前言1. 简要源码分析1.1 小结0. 前言接下来,我们就跟随一下代码,或者说函数调用栈,来看下。Redis是怎么做的。1. 简要源码分析当前,我们先刨除一些业务上的代码,仅仅只看有关网络的代码。// redis.cint main(int argc, char **argv) { // 初始化服务器 // 这里主要设...

2019-12-17 23:39:59 211

原创 shared_from_this使用注意

文章目录1. shared_from_this只能被shared_ptr管理对象调用2. 禁止在栈/堆上构造对象2.1 更加优雅的方式3. 只能在栈上或者堆上构造对象这里算是为我的智能指针学习补上最后一块知识。1. shared_from_this只能被shared_ptr管理对象调用在cppreference里有这么一句话这里提到了这么一句话,只允许在shared_ptr所管理的对象上...

2019-12-15 21:48:38 1658

原创 从零开始写一个Redis-2

Reactor和Log文章目录Reactor和Log1. Logger1.1 EasyLogging++1.2 muduo::Logging2. Reactor2.1 我的文章参考2.2 简单说明2.3 第一个版本2.3.1 Event2.3.2 EventLoop2.3.3 Poller2.3.4 例子2.4 第二个版本3. Acceptor3.1 源码实现3.1 echo服务器测试4. 结语...

2019-12-15 20:54:51 176

原创 从零开始写一个Redis-3

Redis-03文章目录Redis-031. Timestamp1.1 源代码2. TcpConnection2.1 类简要2.2 handleRead2.3 Send和handleWrite3. TcpServer4. EchoServer1. Timestamp时间点。如何理解时间点呢,对于点来说,一定要有参考点,单独一个点的值是没有意义的,对于距离点来说,比如5,这实际上是相对于0偏...

2019-12-15 20:52:54 153

原创 从零开始写一个Redis-1

Redis为了学习Redis和更好地理解Redis,决定自己写一个C++版本的Redis文章目录Redis0.写在前面的话1.NoSQL究竟是什么?1.1 测试1.2 完整源码1.3 小结2. Redis协议解析2.1 简单协议分析2.2 参考2.3 简单的Redis客户端2.4 简单的Redis服务器0.写在前面的话第一,我这里仅仅只是学习Redis的思想。所以使用的是C++,而且很多...

2019-12-04 20:08:15 461

原创 Redis源码学习-7-事件驱动2

事件驱动文章目录事件驱动1. 数据结构1.1 Demultiplexer1.1.1 创建epoll实例1.1.2 关联事件到fd,并修改epfd的兴趣列表1.1.3 轮询1.2 Dispatcher1.2.1 初始化Dispatcher1.2.2 添加文件事件1.2.3 处理事件1.3 事件的抽象1.3.1 文件事件1.3.2 时间事件1.4 小结2. 实践1. 数据结构1.1 Demult...

2019-12-01 17:12:28 150

原创 Redis源码学习-6-事件驱动1

事件驱动编程文章目录事件驱动编程1 回顾1.1 阻塞编程1.2 Tips:read和write的局限2. 事件驱动编程2.1 问题1:什么时候读2.2 问题2:读多少3. Reactor模式伪代码3.1 结构3.2 简单运行1 回顾这里的回顾主要涉及到我自己的学习。如果是初学者的话,可以跳过,直接到2.1.1 阻塞编程一般情况下,我们在最开始学习网络编程的时候,这里主要指socket编程...

2019-12-01 17:09:06 137

原创 Redis源码学习-5-对象

对象文章目录对象1. 对象分类2. 数据结构2.1 类型2.2 编码3. 接下来的目标5. 各种对象5.1 创建一个新 robj 对象5.2 字符串对象5.2.1 编码5.2.2 embstr的创建5.3 列表对象5.3.1 编码5.4 哈希对象5.4.1 编码5.5 集合对象5.5.1 编码5.5.2 zset几个概念澄清。Redis并不直接使用之前学习的数据结构,而是使用对象1. 对象分...

2019-12-01 17:08:12 102

原创 Redis源码学习-4-整数集合

整数集合文章目录整数集合1. 数据结构2. 有序结构3. 升级3.1 具体演示3.2 为什么设置升级?主要存放在intset.h1. 数据结构typedef struct intset { // 编码方式 uint32_t encoding; // 集合包含的元素数量 uint32_t length; // 保存元素的数组 in...

2019-11-24 15:34:24 115

原创 Redis源码学习-3-跳表

跳表-skipList文章目录1. 跳表和红黑树2. 跳表的c++简单实现2.1 源码2.2 一个普通的跳表2.3 查找3. Redis跳表的数据结构3.1 跳表节点3.2 跳跃表3.3 跳表的创建3.4 插入跳表节点到跳表中3.5 属性解释4. 跳表的特有API文章目录redis.h 中的 zskiplist 结构和 zskiplistNode 结构, 以及t_zset.c 中所有以 zsl...

2019-11-14 22:16:36 196

原创 lldb在vscode显示STL内容

文章目录1. 参考回答2. 我的实践1. 参考回答github issue reply2. 我的实践环境 macOS + lldb + clang, 尝试用gcc + gdb的方式,但是pretty-printer的问题没有解决。安装codelldb修改配置文件,只用修改launch.json即可注意添加断点结果图另外一种方法没有尝试。感觉有了对STL的debug,才...

2019-11-14 16:20:21 1882

原创 Redis源码学习-2-字典

哈希表文章目录哈希表1. 数据结构1.1 哈希表节点1.2 哈希表1.3 字典2. 一个普通状态下的字典3. 字典的变化3.1 创建一个字典3.2 插入一个元素3.3 发生哈希冲突之后3.4 哈希算法3.5 rehash渐进式rehash3.6 rehash期间的字典操作在文件<<dict.h>>和<<dict.c>>中1. 数据结构对于类似...

2019-11-13 19:27:55 132

原创 数据结构绘制利器——graphviz和dot语言

在学习和写博客的时候常常要画一些数据结构。这里我认为使用graphviz + vscode的方式可以较为成熟的解决这个问题。只需要花费一点点时间熟悉。如果精修至大成,将会成为你的一个非常优秀的技能。

2019-11-13 15:49:57 1814

原创 Redis源码学习-1-简单字符串

简单字符串(SDS)文章目录简单字符串(SDS)1. 预备知识1.1 字节对齐1.1.1 影响1.1.21.2 buf[]使用1.2.1 有什么用?1.2.2 正确例子char[]不能想用就用2. 数据结构2.1 优点3 SDS API3.1 简单分析 sdslen3.2 如何兼容C字符串函数在文件<<sds.c>>和<<sds.h>>中1. ...

2019-11-12 21:08:24 138

原创 leetcode-搜索专题

搜索1. 关于搜索1.1 BFS和DFS小谈1.1.1 BFS模板1.1.2 DFS模板2. 题目一览2.1 排列和组合问题2.1.1 排列问题1. 综述2. 送上来的排列问题2.1.2 组合问题1. 综述2. 问题2.1 子集问题2.2. 终极思考2.2 固定长度子集问题2.3 回溯问题2.4 BFS问题2.5 Partition问题(插点问题)利用map加快字符串转化1. 关于搜索在lee...

2019-11-09 11:32:55 509

原创 利用zc序列进行简单的帧同步

帧同步zc序列的产生同步算法参考文章 https://wenku.baidu.com/view/accce6d1240c844769eaeea9.htmlzc序列的产生产生zc序列,根据论文公式得出,K值可以用来评价ZC序列的好坏。1位最好,其次为signal_length-1.function [cazac_sequence] = CreatCazac(signal_length, K)...

2019-11-02 16:38:42 4952

原创 chatroom项目手册

chatroom-go项目手册0. 前言第一次写项目手册,有以下几个目的吧。回顾下使用go语言的感受思考一些编程细节思考整体项目的流程github地址1. 项目简单说明这个项目算是自己学习完go语言使用之后的一个简单总结吧。顾名思义,项目本身就是完成个聊天室的功能。功能比较简单,但经过自己的优化后,还是有些能看得过眼的东西。项目数据库使用了redis,纯粹的目的是为了下一...

2019-10-25 22:05:09 551

原创 leetcode-回溯法-全排列

题目题目源自leetcode这三道题leetcode-46leetcode-47leetcode-267思路这里总结下上述问题的思路。假设给定一个数组,里面的数字均唯一。比如[1, 2, 3, 4, 5, 6]如何做出他们的全排列。这里我们的思路有很多个解释。1. 直觉法根据直觉我们知道。我们可以在第一个位置上,从6个数字中任选一个。然后在第二个位置从5个中选一个。结果就是6 * ...

2019-10-08 23:04:39 213

原创 leetcode-259-较小的三数之和-双指针

题目描述给定一个长度为 n 的整数数组和一个目标值 target,寻找能够使条件 nums[i] + nums[j] + nums[k] < target 成立的三元组 i, j, k 个数(0 <= i < j < k < n)。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/3sum-smaller思...

2019-09-27 15:45:50 788

原创 leetcode-256-粉刷房子-动态规划

题目描述假如有一排房子,共 n 个,每个房子可以被粉刷成红色、蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同。当然,因为市场上不同颜色油漆的价格不同,所以房子粉刷成不同颜色的花费成本也是不同的。每个房子粉刷成不同颜色的花费是以一个 n x 3 的矩阵来表示的。例如,costs[0][0] 表示第 0 号房子粉刷成红色的成本花费;costs[1][2] ...

2019-09-27 09:28:34 1737

原创 leetcode-253-会议室2-优先队列的应用

会议室2给定一个会议时间安排的数组,每个会议时间都会包括开始和结束的时间 [[s1,e1],[s2,e2],…] (si < ei),为避免会议冲突,同时要考虑充分利用会议室资源,请你计算至少需要多少间会议室,才能满足这些会议安排。示例 1:输入: [[0, 30],[5, 10],[15, 20]]输出: 2示例 2:输入: [[7,10],[2,4]]输出: 1来源:力扣...

2019-09-26 17:31:49 1795

原创 码元速率估计-速率信号法

速率信号法源自师姐论文《卫星信号频谱监测系统关键技术研究与实现-董雪》速率信号法的实现思想算法思想看论文,这里主要就是注意index那里的细节,记得减1.没有用czt细化频谱,用了zoomfft来细化,这个方法更加容易工程实现。所有的频谱变换全部只用移动数组就可以,不用去做指数计算。减少计算量。zoomfft原理可以参考了这里问题:为什么细化后得到的结果不对,和估计的结果值有所偏差,目...

2019-09-23 10:17:36 3335 1

原创 码元速率的盲估计-包络谱法

码元速率的盲估计实现自论文算法的大致原理请看论文,本文这里是帮助实现了论文代码。分享出来。源代码clc clear close all% 这是一个对码元速率的盲估计程序,先经过谱分析粗估计码元速率,然后利用% CZT细化频谱,然后对码元速率精估计Rs = 1000; % 设置码元速率,每秒1000个码元T = 5; % 设置持续时间,[0,5]sN = Rs * T; % ...

2019-09-04 21:55:28 2291 2

原创 leetcode-俩指针遍历数组

俩指针遍历数组注意:这里的指针指的一般是index。leetcode对于这种方法题型有很多。而且也可以衍生出很多方法,今天想总结总结。简单leetocde-830题目-830在一个由小写字母构成的字符串 S 中,包含由一些连续的相同字符所构成的分组。例如,在字符串 S = “abbxxxxzyy” 中,就含有 “a”, “bb”, “xxxx”, “z” 和 “yy” 这样的一些分组...

2019-09-02 21:15:27 300

原创 leetcode-位运算-136&260——只出现一次的数字

题目给定一个非空整数数组,除了某(1或者2)个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。示例1输入: [2,2,1,3]输出: 1,3 解法解法1. hashset这个解法就是利用一个hashset,用来代码来talk,很简单。 vector<int> singleNumber(vector<int>& nums...

2019-09-02 15:45:29 156

原创 leetcode-分治-96——不同的二叉搜索树 II

文章目录题目分治+memo题目给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?示例:输入: 3输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ \ 3 2 1 1 ...

2019-08-28 22:09:15 97

原创 leetcode-分治-95——不同的二叉搜索树 II

文章目录题目分治+memo题目给定一个整数 n,生成所有由 1 … n 为节点所组成的二叉搜索树。示例:输入: 3输出:[[1,null,3,2],[3,2,null,1],[3,1,null,null,2],[2,1,3],[1,null,2,null,3]]解释:以上的输出对应以下 5 种不同结构的二叉搜索树:1 3 3 2 ...

2019-08-28 21:38:31 89

原创 leetcode-分治-241——为运算表达式设计优先级

文章目录题目分治+记事本 解题题解1题解2题目给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果。你需要给出所有可能的组合的结果。有效的运算符号包含 +, - 以及 * 。示例 1:输入: “2-1-1”输出: [0, 2]解释:((2-1)-1) = 0(2-(1-1)) = 2示例 2:输入: “23-45”输出: [-34, -14, ...

2019-08-28 20:23:03 303

原创 leetcode-146——LRU缓存机制

文章目录LRU缓存机制CodeLRU缓存机制LRU缓存机制的原理就是内存的一种缓存机制,当缓存达到上限时,淘汰最晚没有使用的缓存数据。有以下要求。get根据key获得数据,要求以O(1)的速度,即查找要求以O(1)的速度完成。插入和删除数据也要求以O(1)的速度我们知道,对于hashtable来说,可以做到以O(1)的速度查找,插入和删除。但是hashtable是无序的,即我们无法...

2019-08-28 09:17:36 184

原创 leetcode-134——加油站

加油站题目在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。说明:如果题目有解,该答案即为唯一答案。输入数组均为非空数组,且长度相同。输入数组...

2019-08-27 21:19:59 560

原创 c++ set使用多维坐标点结构

set我们知道STL中自带了俩个方便的关于set的模板类供我们使用。set——红黑树底层unordered_set——hashtable底层在遇到自定义结构体的时候,比如二维坐标点,我遇到了一些小小的问题。问题我的set中出现了重复的数据结构。struct Data{ int x; int y; bool operator<(const Data&rhs)co...

2019-08-27 17:04:19 925

原创 leetcode-365——水壶问题

水壶问题这个问题算是水壶问题的简单版本,也是小时候竞赛中遇到过的,当时一直不知道怎么解。偶然看到这么一个问题。其问题是,给定一个8升的满的水壶,一个5升的,一个3升的空水壶。问如何倒水可以倒出一个4升的水壶。每次只能将一个水壶倒满或者倒空。以前一直不知道,原来这道题的核心思想就是bfs的状态表示。思路如下:将8升往5升倒。将8升往3升倒。将5升往8升倒。将5升往3升倒。将3升依次...

2019-08-27 11:56:00 1203

原创 数据结构和算法——位图

位图问题位图的引出,主要还是在于当我们想做一个很大的set的时候,位图可以帮助我们节省非常大的空间。比如说:我们有1千万个整数,整数的范围在1到1亿之间。如何快速查找某个整数是否在1千万个整数中呢?非常简单的话,我们可以用一个桶来做。但是会浪费90%的空间。即做一个1亿大小的bool数组,哪个数存在,哪个置为true。需要100M空间用一个散列表。假设散列函数非常完美,有50%的占有率...

2019-08-24 23:54:19 158

原创 从零开始写一个内存池

写了些如何写内存池,算是C++的基本功之一吧。谈了谈我对造轮子的理解。

2019-08-10 21:49:43 334 1

原创 从零开始写一个XML解析-02思路

给出了如何通过解析字符串来建立一个XML树的思路。

2019-08-06 23:26:54 369

原创 从零开始写一个XML解析-01简单介绍

MyXML0. 前言1. TinyXML的大体逻辑1.1 从测试开始1.2 逻辑0. 前言这算是从零开始的第二个系列了。上一次是从零开始写日志01,从零开始写日志2。这次阅读了TinyXML的源码(Ps:我看的是1,TinyXML2大概使用过)想着就开始了这个系列的第二部。1. TinyXML的大体逻辑1.1 从测试开始这里简单介绍下自己是怎么阅读源码的。阅读源码时候,切忌不要一上来...

2019-08-06 23:04:58 189

原创 《Linux多线程muduo》读书笔记3——高效的异步日志

高效的异步日志。将日志分为前后端。使用双缓冲技术。有效降低磁盘写的频率。

2019-07-31 15:33:33 366

原创 《Linux多线程muduo》读书笔记2——如何从零开始写一个日志

从零开始写一个日志工具本文主要将muduo中的日志库剥离下来,挑选出关键的东西,给大家在写自己的日志工具时候提供一些思路。文章目录从零开始写一个日志工具1. 版本11.1 思路1.2 源代码2. 版本22.1 设置日志工具的全局级别1. 版本11.1 思路在构造函数中根据日志级别完成format重载operator <<,将一句话中的多条日志信息append到buffer...

2019-07-27 18:26:53 262

空空如也

空空如也

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

TA关注的人

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