写bug还得是我
码龄3年
关注
提问 私信
  • 博客:8,880
    8,880
    总访问量
  • 25
    原创
  • 314,245
    排名
  • 69
    粉丝
  • 0
    铁粉
  • 学习成就
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:湖南省
  • 加入CSDN时间: 2022-04-01
博客简介:

z85123789的博客

查看详细资料
  • 原力等级
    成就
    当前等级
    3
    当前总分
    313
    当月
    0
个人成就
  • 获得66次点赞
  • 内容获得23次评论
  • 获得46次收藏
创作历程
  • 1篇
    2024年
  • 14篇
    2023年
  • 10篇
    2022年
成就勋章
创作活动更多

如何做好一份技术文档?

无论你是技术大神还是初涉此领域的新手,都欢迎分享你的宝贵经验、独到见解与创新方法,为技术传播之路点亮明灯!

180人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

I/O多路复用之select

2、在使用select函数之前,还需要一个数据结构来保存要放到fd_set对象中的文件描述符,因为在select函数返回后,需要对数据结构中的文件描述符进行判断,判断该文件描述符事件是否就绪(判断函数:FD_ISSET(),上面有它的简单介绍),还有一个原因就是select函数返回后,没有就绪的文件描述符会被置0,等下次使用需要重新放到fd_set对象中。那么,select函数中,中间三个参数分别表示需要检测的读文件描述符集合、写文件描述符集合、异常文件描述符集合。其中第一个参数n:表示文件描述符+1。
原创
发布博客 2024.01.29 ·
358 阅读 ·
8 点赞 ·
0 评论 ·
9 收藏

位图和布隆过滤器

按照上面的思路,用一个bit位表示一个数据是否存在,一个char类型就可以表示8个数据是否存在,我们把512MB分为多个char数组,一个数组表示8个数据,当往里面插入数据时,先用这个数据除以数组个数,得到这个数据应该存在哪个数组里,再用这个数据模8(因为一个数组存8个数据),得到这个数据应该在这个数组中的哪个位置,最后把这个位置变成1(表示存在)。所以,布隆过滤器如果说某个元素不存在时,该元素一定不存在,如果该元素存在时,该元素可能存在,因为有些哈希函数存在一定的误判。快速查找某个数据是否在一个集合中。
原创
发布博客 2023.07.09 ·
124 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

哈希表及unordered_map、unordered_set的模拟实现

顺序结构及平衡树中,元素关键码与其存储位置之间没有对应的关系,因此在查找一个元素时,必须经过关键码的多次比较,顺序查找时间复杂度为O(N),平衡树中为树的高度,即O(log_2 N),搜索的效率取决于搜索过程中元素的比较次数。如果有一种数据结构,存储的数据与存储的位置呈映射关系,那么不需要进行比较直接通过对应的位置找到映射的数据。其实这种数据结构就叫哈希表或者散列表,插入的数据通过哈希函数得到对应的位置,然后数据就插入在表中对应的位置上,
原创
发布博客 2023.07.09 ·
254 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

红黑树的模拟实现

从红黑树的性质中可以看出,一条路径中,最短的情况就是全是黑色节点,最长的情况就是一红一黑。另外由于红黑树的第四条性质,告诉我们,所有根节点到叶子节点的路径中黑色节点数量相同得知,如果要插入一个新节点,那么默认情况下是插入红色节点,因为如果默认插入的是黑色的,那么有一边的黑色节点一定比另一边的数量多。{}T _data;Col _color;
原创
发布博客 2023.07.01 ·
115 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

面向对象的三大特性之一 —— 多态

编译器在执行调用虚函数这个命令时,先是到指针或引用所指向的对象空间里面找虚表,从而拿到要调用的虚函数指针,再通过虚函数指针找到函数最后调用。
原创
发布博客 2023.05.24 ·
91 阅读 ·
0 点赞 ·
1 评论 ·
0 收藏

面向对象的三大特性之一 —— 继承

这里是表示B类是以公开的继承方式继承到C1类中,这里我们又讲到继承方式:public:公开继承,protected:保护继承,private:私有继承。理解起来和访问限定符差不多,但是这是两个东西。接下来,我们来看看继承基类成员访问的规则:这里我们不难发现,基类的私有成员不管是通过什么继承方式,在派生类中都不可见,这里的不可见不是没有继承,而是不管是在类里面还是在类外面都不可以访问。
原创
发布博客 2023.05.21 ·
70 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

关于C++迭代器失效问题

所谓迭代器失效就是原有的空间被销毁,而继续用迭代器来进行访问,导致程序崩溃。我们以vector为例来讲解迭代器失效问题。
原创
发布博客 2023.04.29 ·
265 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

C++模板

一个非模板函数和一个模板函数同名是不会产生报错的,并且在调用函数时,如果两个函数都可以调用,那么编译器会优先调用非函数模板,如果模板可以产出一个匹配性更高的,就会选择模板。这就跟我们小时候在超市买冰棍模子,然后自己回家往模子里放料,再放冰箱,冻好后就成冰棍了,料是可乐就是可乐冰棍,料是雪碧,就是雪碧冰棍。虽然C++支持了函数重载,但是对于上面这段代码,看着还是觉得冗余,同样的功能,却要给不同类型分别写上对应的函数。这时候就体验了模板的好处了,我们只要写一个模板,然后让编译器推演类型自动生成对应的函数。
原创
发布博客 2023.04.04 ·
51 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

C++内存管理

我们先来回顾一下C语言的内存管理内存分为这几个段:栈区:非静态的局部变量都是存在栈区的,它是向下增长的。堆区:用于程序运行时动态内存分配,它是向上增长的。数据段:存在全局变量和静态变量。代码段:可执行代码、常量。而在堆区动态内存开辟的函数有malloc、calloc、realloc。malloc和calloc的区别在于,前者开辟空间不初始化,而后者会初始化为0.realloc是扩容。C++是兼容C语言的,所以,它们两个的内存管理是差不多的。
原创
发布博客 2023.04.04 ·
53 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

C++中关于类和对象的一些细枝末节

我们先来看看这段代码:这里我们发现这两个都是拷贝构造,有两种实例化的方式,但其实内部是不一样的,第一个是把1传递给a的构造函数中,之后再把a这个对象中的成员变量赋值成1。第二个是将1隐式类型转换成A类型,然后拷贝给b这个对象。如果不想发生隐式类型转换就可以用explicit这个关键字来修饰,只需要在该类的构造函数前面加上explicit:另外还补充一点:Static成员变量在学C语言时我们就知道被static修饰的变量叫静态变量,那么在类中,被static修饰的成员就叫静态成员,其中,如果
原创
发布博客 2023.04.03 ·
49 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

C++类和对象

构造函数:内置类型得自己写,自定义类型不用写。析构函数:有资源要清理就写,否则不用。拷贝构造:要深拷贝就是自己写,浅拷贝用默认生成的。赋值重载:析构要写,那赋值重载就写,否则就不需要取地址和const取地址操作符:不需要自己写。
原创
发布博客 2023.03.14 ·
88 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

C++入门

C++,全称:C Plus Plus,它是在C语言的基础上不断加东西加出来的,所以C++兼容于C。
原创
发布博客 2023.03.12 ·
58 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

C排序算法

排序的概念**排序**:就是将数据进行递增或者递减的操作。还有一个**稳定性**的概念:在一组不有序的数组中,有两个相同的数据,排完序之后,左边那个依然在左边,右边那个依然在右边。
原创
发布博客 2023.03.03 ·
213 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

关于Linux基本权限

对于文件夹来说,可读并不意味着可以直接查看该文件夹中的文件,要先有可执行权限,可执行是可以对该文件夹进行指令操作,其中就包括进入该文件夹,如果没有x(可执行)权限,那么哪怕有r(可读)权限也不能查看文件里的内容。起始权限是系统设定的,普通文件设定的起始权限默认是666,目录的起始权限默认是777,系统为了更好的控制权限,系统会有默认的权限掩码(umask)的概念。刚创建的new_dir第一个字母是d,表示它是一个文件夹,并且该目录的拥有者和所属组拥有可读可写可执行的权限,而其他人只有可读和可执行的权限。
原创
发布博客 2023.02.25 ·
120 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

【数据结构】二叉树及二叉树的基础oj练习

在数组存储中我们发现:假设一个父节点在数组中的下标为i,并且有左右子树的情况下(左右子树都不为空),那么它的左子树下标为2i+1,右子树下标为2i+2,如果2i+1>=n(n为总结点数),那么该节点没有左子树,同理,如果2i+2>=n,则该节点没有右子树。:如果一个节点含有子节点,则这个节点称为其子节点的双亲结点,如上图1是2的父节点,也是3的父节点。:具有相同父节点的子节点互称为兄弟节点,如上图中2,3都是1的子节点,2和3互为兄弟节点。:度为0的节点称为叶节点,例如上图中的4,5,6,7都是叶节点。
原创
发布博客 2023.01.09 ·
404 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏

栈和队列、及Leetcode的循环队列和用栈模拟实现队列、用队列模拟实现栈

栈,是一种特殊的线性表,只能在固定的一端进行增加删除数据,进行数据操作的一端叫做栈顶,另一端叫栈底,栈中的数据元素遵循后进先出LIFE(last in first out)的原则。对栈的数据操作,其中栈顶放入数据叫做压栈,从栈顶出数据叫做出栈。栈的定义二、队列1、队列的概念它和栈差不多,只不过队列的数据操作是一头放入数据,另一头出数据,放数据的那一头叫队尾,出数据的那一头叫对头,队列的数据元素遵循先进先出FIFE(first in first out)的原则。队列的定义三、Leetcod
原创
发布博客 2022.12.05 ·
274 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

LeetCode链表习题解析

还是一样,设甲速度为n,乙速度为2n,环的周长为c,这次设环的第一个节点到相遇点的距离为n,直线的距离为l,则甲到相遇点走的路程是l+n,乙走的路程是l+k×c+n(其中k是圈数),时间相同,乙速度是甲的2倍,所以,2(l+n)=l+k×c+n,结果为l=k×c-n,得出,甲从起点出发,乙从相遇点出发,第一次相遇的点就是环的第一个节点。再回到这个题目中,我们可以创建两个指针,慢的指针一次走一步,快的指针走两步,这样,如果相遇则一定是环,否则快的指针一定会先走到NULL。所以,和练习一一样,用快慢指针来走。
原创
发布博客 2022.11.16 ·
123 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

关于预处理指令的讲解

return 0;}在预编译期间,系统会自动把代码里的MAX替换成#define定义的MAX的值,就变成了:x + 2。这里要注意一点:定义的标识符后面最后不要写分号,可能会有bugint main(){int x = 3;x += MAX;return 0;}这个代码走进if语句,执行x += MAX,而(MAX == 2);,替换之后就变成了(x += 2;;
原创
发布博客 2022.10.17 ·
165 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

C语言文件相关操作

首先,我们要知道一个东西叫文件类型指针,简称“文件指针”,可以理解为是存放文件的指针,每个被使用的文件都会在内存中开辟出一个空间,叫文件信息区,用来存放文件的信息,比如名字,状态,当前位置。
原创
发布博客 2022.10.15 ·
237 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

有关动态内存管理的解析

动态内存开辟的函数及柔性数组
原创
发布博客 2022.10.05 ·
342 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏
加载更多