自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 sylar--线程模块

本模块是基于pthread实现的。自己封装了pthread,并提供信号量、互斥锁、读写锁和自旋锁。线程模块定义的类class Semaphore:封装了信号量class Mutex:封装了互斥锁class RWMutex:封装了读写锁class SpinLock:封装了自旋锁class Thread:封装了线程pthread对于上述相关的信号量和锁,如果没有调用对应init函数进行初始化,任何尝试使用相关信号量和锁的的行为,都是未定义的。

2025-06-04 20:32:50 701

原创 sylar--配置模块

采用约定优于配置的设计思想,如果配置项有默认值,可以不用每次都指定该项的值。如果YAML文件配置项做出改变,那么也会改变相应的配置参数。

2025-06-03 10:29:36 696

原创 sylar——日志模块

日志模块定义的类。

2025-05-27 09:47:47 902

原创 SQL命令

INNER JOIN 关键字在表中存在至少一个匹配时返回行,返回的是两个表中满足连接条件的交集,即同时存在于两个表中的数据。RIGHT JOIN 关键字从右表返回所有的行,即使左表中没有匹配。LEFT JOIN 关键字从左表返回所有的行,即使右表中没有匹配。插入数据,有默认值的、没有约束“not null”的属性可以不插入其值,但是其它的必须插入相应的值。用于对输出结果按照某个列的值进行升序(asc)/降序(desc)的排序。使用distinct可以保证输出是唯一的,即输出的内容不重复。

2025-04-01 11:25:23 789

原创 STL标准库

介绍了STL中的相关容器、仿函数、算法和函数适配器

2025-03-15 22:23:14 1151

原创 C++之OOP

1、类是属性、行为的封装,将数据的表示和数据的处理集中到一起2、类内成员的访问权限为:public、protected、private3、类的相关成员函数的定义指向同一块内存4、this指针this指针指向类的实例化对象,是一个顶层const,即不可以修改指向,但是可以借助this指针来修改类内的成员5、静态数据成员6、虚函数指针和虚函数表当一个类中有一个或多个虚函数时,编译时会为其生成一张虚函数表(vftable),在类的对象中,有一个虚函数指针(vfptr),指向该虚函数表。

2025-03-15 13:28:34 917

原创 C++泛型编程

class mepublic:public:/*函数在类外进行定义*/T obj;obj.test();return 0;

2025-03-14 21:16:34 418

原创 《C++ primer》第六章

函数的定义包括:返回类型、函数名、形参列表、函数体。

2025-03-09 16:21:24 311

原创 《C++ primer》第五章

空语句:空语句只有一个单独的分号。复合语句(块):一个块就是一个作用域,块不需要以分号结束,快内可包含多条语句。

2025-03-09 00:51:25 317

原创 《C++ primer》第四章

优先级、结合率和运算对象的求值顺序。如果优先级不同,则先算优先级高的运算;如果优先级相同,则按照结合律确定如何计算。在大多数情况下,不会明确指定求值顺序。括号无视优先级和结合律右值左值对象的值对象的身份。

2025-03-08 19:31:09 491

原创 《C++ primer》第三章

string s1;//默认初始化,s1是一个空字符串//使用s1初始化s2//使用字符串字面值初始s5,注意,字符串字面值不是string对象//把s8初始化成10个c组成的串/*C++中有两种不同的初始化方式:*拷贝初始化:使用等号初始化一个变量*直接初始化:不使用等号初始化一个变量*///默认初始化,v1不包含任何元素//n个元素均为val//包含n个重复执行了值初始化的对象。

2025-03-08 10:02:36 389

原创 《C++ primer》第二章

自定义数据结构数据结构是一组相关的数据元素组织起来,同时提供操作数据的方法struct://data_1、data_2是定义的对象/*每个对象由自己的一份数据成员的拷贝*可以为数据成提供一个类内初始值,在创建类时,类内初始值将用于初始化数据成员*没有初始值的成员使用默认初始化*/编写头文件/*头文件通常包括只能被定义一次的实体,例如类、const、constexpr变量*头文件一旦改变,相关的源文件必须重新编译以获得更新过的声明*/#endif。

2025-03-03 22:48:02 855

原创 计算机网络:自顶向下方法——第四、五章 网络层

本博客是通过学习中国科大郑烇老师的课程所写的笔记网络层的两个主要功能是:转发(数据平面)和路由(控制平面),其中转发有传统和SDN两种模式网络层提供的”尽力而为“的服务,即不保证最终的交付、不保证按照发送顺序被接收、不保证端到端的时延、不保证最小带宽。一句话,就是啥都不保证,不可靠!

2025-03-02 10:45:42 961

原创 计算机网路:自顶向下方法——第三章 运输层

本博客是通过学习中国科大郑烇老师的课程所写的笔记网络层实现主机之间的逻辑通信,而传输层实现不同主机的进程之间的逻辑通信传输层不提供保证时延、保证带宽的服务。

2025-02-26 22:31:38 1211 1

原创 leetcode刷题第十三天——二叉树Ⅳ

本次刷题顺序是按照卡尔的代码随想录中给出的顺序。

2025-02-20 17:00:46 487

原创 leetcode刷题第十三天——二叉树Ⅲ

本次刷题顺序是按照卡尔的代码随想录中给出的顺序。

2025-02-20 15:57:39 411

原创 leetcode刷题第十二天——二叉树Ⅱ

一个思想框架,直接怒斩leetcode十道题,啊哈哈哈,下面开干!今天的刷题内容是二叉树的层次遍历,基本上都是一个套路。本次刷题顺序是按照卡尔的代码随想录中给出的顺序。

2025-02-18 21:58:11 262

原创 leetcode刷题第十一天——二叉树Ⅰ

迭代算法,上述实现中,三种方式的代码也基本相同。比较妙的是,在当前遍历到的结点,如果不为空,说明需要对该结点及其左右子树进行入栈,入栈顺序看是哪种遍历方式,对于该结点,使用NULL标识它,当栈顶为NULL时,即可输出它。如果难以想象的话,可以去看卡尔在哔哩哔哩的讲解,或者拿一棵二叉树来走一遍流程。本次刷题顺序是按照卡尔的代码随想录中给出的顺序。递归算法,三种遍历方式的代码相差不大。

2025-02-15 23:50:42 229

原创 leetcode刷题第十天——栈与队列Ⅱ

今天刷题,顺带复习了哈希表和小根堆的内容。小根堆和大根堆的思维框架是完全二叉树,所以使用数组实现小根堆时,有骚操作,在调整过程中,很妙,多看几遍H_Pop和H_Push的代码,好好体会。写这个系列的博客主要是给自己一个坚持刷题的理由,今天是第十天,感觉敲代码的流畅度有所提高,虽然思维上没有质变,但是相信坚持下去一定会有更大的收获,奥里给!本次刷题顺序是按照卡尔的代码随想录中给出的顺序。栈比较适合求解括号匹配、字符去重、逆波兰表达式。

2025-02-14 23:57:12 311

原创 leetcode刷题第九天——栈与队列

本次刷题顺序是按照卡尔的代码随想录中给出的顺序。

2025-02-14 00:05:21 218

原创 leetcode刷题第八天——字符串

提到字符串,不得不提经典的匹配算法KMP,KMP比暴力算法高效,是因为它维护了next数组,next数组中存储的是当前下标以前的字符串中,最大相等前后缀的长度。那必然是,当模式串(假设下标为j)与文本串(下标为i)当前字符不匹配时,使用next[j - 1]处与i处的字符进行匹配……这样子,在当前字符不匹配时,文本串的下标不需要回退,模式串的下标进行回退即可。对于c语言,没有string类型,所以,字符串只能使用char* s的形式来表示。如果还是不太理解,可以参考下边这篇博客!明天开始栈与队列,奥里给。

2025-02-12 21:48:00 347

原创 Leetcode刷题第七天——哈希表Ⅱ

本次刷题顺序是按照卡尔的代码随想录中给出的顺序。

2025-02-11 10:40:30 186

原创 《C++ Primer第五版》第一章

每个C++程序都包含一个或多个函数,其中有且只有一个名为main的函数。函数包括函数返回值类型、函数名、形参列表和函数体。使用return返回。

2025-02-10 21:57:50 314

原创 leetcode刷题第六天——哈希表Ⅰ

快乐数那道题,可以使用哈希表来做,因为哈希表可以存储已经出现过的数,如果该数再度出现并值不等于1,那么说明出现了环,该数不是快乐数。用哈希表判断是否有环还是有局限的,如果环中有重复出现的数,例如环“2-1-1-2-3-4-2”,用哈希表是不能判断的,这时候快慢指针就可以处理。h(k)=k%p,其中,p为大小于TableSize的素数时,效果最好,k为映射得到的索引。本次刷题使用c语言,后面学完c++再用c++标准库中的容器再做一遍,奥里给!滑动窗口+哈希真是太妙了,用在一些匹配类题目还是挺好用的。

2025-02-10 11:20:39 469

原创 leetcode刷题第五天——链表Ⅱ

142不会做,先留着,链表就到此告一段落了,明天开始刷哈希表了,奥里给。太妙了啊,有时候,在链表中双指针也嘎嘎好用啊!本次刷题顺序是按照卡尔的代码随想录中给出的顺序。

2025-02-09 11:22:55 233

原创 leetcode刷题第五天——链表Ⅰ

需要注意的是,要控制好链表的访问,不能“越界”,最后一个结点的next域是NULL,不能访问它,即假设ListNode* tmp指向链表的最后一个结点,tmp->val、tmp->next这样的访问是错误的!这两道题,比本人在学数据结构的时候的实验要简单很多,但是一年过去了,代码阅读能力和写代码的速度都下降了,还是得多敲,奥里给!因为,首结点的存在,使得头节点的插入和删除变得与链表中的其它结点没有任何区别,这样子,就可以统一操作头结点和其它结点的代码了,YYDS。//结点指针域,指向下一个链表结点。

2025-02-09 09:34:54 386

原创 leetcode刷题第四天——数组之螺旋矩阵

只不过,在代码具体实现时,第一题内层四个for中,手动控制了处理变量idx2的值,使得“左”、“右”不会重合,“上”、“下”不会重合。第二题用“left”、“right”、“top”、“bottem”来控制遍历,但是可能会出现“left==right”或者“top==bottem”的情况,这样也许会导致某个或几个元素多遍历了,会导致res的越界。在一层循环中,先向右、向下再向左、向上遍历,然后开始更里层的遍历。,则抛弃该预处理,改用下一个方向预处理得到下一个元素的位置,继续判断该位置是否合理……

2025-02-08 09:33:46 237

原创 leetcode刷题第三天——数组之滑动窗口

由于没有系统使用过哈希表,所以上面两道用到哈希表的题目,都是使用数组来代替了。后面需要用哈希表再实现以下。for循环用来遍历“终止位置”来扩展窗口,而“起始位置”则在有需要的时候在循环内部进行收缩。在匹配问题中,滑动窗口常常与哈希表结合使用。借助哈希表中的信息,判断需不需要进行收缩。有时候,思路就在眼前,却写不出来,有点让人感到沮丧,但是还得咬咬牙,继续肝!滑动窗口,有点类似与快慢指针。我们通过扩张、收缩窗口来得到我们需要的结果。本次刷题顺序是按照卡尔的代码随想录中给出的顺序。

2025-02-07 09:49:30 310

原创 计算机网络:自顶向下方法——第1章 计算机网络和因特网

结点主机结点(主机及其上运行的应用程序)、数据交换结点(路由器、链路层交换机等)边接入网链路:主机连接到互联网的链路主干链路:交换机之间的链路协议协议控制发送、接受信息,是对等型实体在通信过程中应当遵守的规则的集合定义了报文的格式顺序,以及报文发送/接收或其它事件所采取的操作。

2025-02-06 20:54:00 510

原创 leetcode刷题第二天——数组之移除数组元素

数组是存放在连续内存空间上的相同类型的数据的集合。可以实现随机访问,但是增加和移除元素,需要挪动数组中的相关元素。在移除数组元素时,可能要求保持数组元素相对顺序不变,此时一般可以使用快慢指针来解题。为什么能用该方法呢?因为,退格符只会对其前面的字符有作用,对其后的字符没有作用。官方题解中,有个从后向前遍历的方法,绝了,下次再刷这道题时,可以使用该方法。在数组中,双指针和二分法是比较常用的思想,多练多练多练。本次刷题顺序是按照卡尔的代码随想录中给出的顺序。

2025-02-06 10:15:32 287

原创 leetcode刷题第一天——数组之二分查找

34题,相对比较难,因为它不仅仅需要找到目标元素,而且需要找到第一个和最后一个。故而,在查找到目标元素后,仍然需要向左(右)进行查找,需要多琢磨几遍。怎么说呢,代码不敲久了,很容易生疏,希望自己可以坚持每天刷个几题吧,争取寒假把基本数据结构的相关题目做完。其中,704、35、367的代码流程与经典的二分查找基本一样,只是返回值上有一点区别。69题,需要查找的是满足“tmp*tmp <= x”的最大的tmp。z二分查找是基于有序数组的,否则不能用二分查找。本次刷题顺序是按照卡尔的代码随想录中给出的顺序。

2025-02-06 00:42:53 273

原创 《一个64位操作系统的设计与实现》第六章——处理器体系结构

PSE模式是32位分页模式的扩展,它允许处理器在保护模式下使用4MB的物理页,该模式只使用一级物理页。页表的基质依然是存于CR3(31~12)中。通过CPUID可以检测系统是否支持PSE功能,置位CR4.PSE将开启PSE模式(此时PDE中的PS应该置为1,表示索引的是物理页,而不再是二级页表PTE)如果处理器支持PSE-36模式,则在开启PSE模式时也会开启PSE-36模式,该模式使得PSE模式下使用超过4GB的物理内存,寻址位数取决于处理器的最高物理可寻址位宽值MAXPHYADDR。

2025-01-21 11:03:02 854

原创 《一个64位操作系统的设计与实现》第二章——环境搭建与基础知识

本博客是记录本人学习田宇大佬的《一个64位操作系统的设计与实现》的读书笔记与实践过程。

2025-01-10 18:49:50 1241

原创 操作系统真象还原学习日志——第5章

BIOS向MBR交权MBR向LOADER交权LOADER向KERNEL交权BIOS是计算机一启动就在运行的程序,主要做一些检查硬件和初始化的工作。完成工作之后,将磁盘中0盘0道1扇区中的MBR加载到内存的0x7c00处,然后跳转到0x7c00,实现了向MBR的交权在MBR中,我们可以通过BIOS中断或者直接操作显卡的方式,输出字符;可以直接操作磁盘,实现读盘和写盘。

2024-10-11 09:22:46 967

原创 操作系统真相还原学习日志——第4章

本文是笔者学习《操作系统真象还原》的读书笔记,部分图表来自《操作系统真象还原》,若有侵权,请联系删除。笔者也是处于学习阶段,所陈述的内容如有错误,欢迎指正!

2024-09-02 09:35:48 1322

原创 操作系统真象还原学习日志——第3章

栈的定义:栈首先需要是线性结构,并且数据的存取在线性结构的一端进行。需要维护一个指针,用它来指向线性结构的一端,数据存取都通过此指针。上述是逻辑上的栈,硬件是如何实现栈的呢?首先,栈是一片内存区域,内存本身就具有线性的特性,满足要求。栈在内存中是向下扩展的,访问栈也是采取“SS:SP”的形式。硬件提供了相应的方法来存取栈,即push和pop指令。push把数据压向哪里?pop如何取得栈顶数据?这些都依赖栈顶指针sp。sp的值是段内偏移地址,是栈顶相对于栈底的偏移量。磁盘是随机存取的。

2024-08-30 21:47:51 1247

原创 操作系统真象还原学习日志——第2章

本文是笔者学习《操作系统真象还原》的读书笔记,若有侵权,请联系删除。笔者也是处于学习阶段,所陈述的内容如有错误,欢迎指正!实模式下的内存布局BIOS 入口地址,内容是跳转指令。

2024-08-22 16:26:41 996

原创 操作系统真象还原学习日志——第0章

操作系统(Operating System,OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配,以提供给用户和其他软件方便的接口和环境,它是计算机系统中最基本的系统软件2、真象还原的解释①操作系统向用户进程提供系统调用,用户需要某一系统资源时,直接调用即可,不需要单独与硬件打交道。形象化解释:对于原始人狩猎,需要制作武器。随着部落的出现,部落中专门有人负责制作武器,专门有人负责狩猎,狩猎者只需向部落申领武器即可,各司其职,效率变高了。

2024-08-21 10:21:23 1001

原创 数据结构之二叉树

二叉树是一个有限的结点集合,这个集合或者为空、或者由一个根节点和两棵互不相交的左、右子树组成。

2024-08-18 11:12:29 451 1

空空如也

空空如也

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

TA关注的人

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