自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 muduo网络库base之Timestamp时间戳类的学习笔记

muduo网络库 Timestamp时间戳类之源码学习。

2023-06-26 23:46:43 211

原创 LeetCode 115. 不同的子序列 和 72. 编辑距离

Leetcode 115. 不同的子序列 和 72. 编辑距离

2023-05-11 17:33:17 135

原创 N皇后问题与解数独问题

n皇后是由八皇后问题演变而来的。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。

2023-04-25 00:29:25 258

原创 自主实现Web服务器

Web服务器项目介绍项目背景:http协议被广泛使用,从移动端,pc端浏览器,http协议无疑是打开互联网应用窗口的重要协议,http在网络应用层中的地位不可能撼动,是能准确区分前后台的重要协议。项目描述:采用C/S模型,编写支持中小型应用的http,理解常见的互联网应用行为。对http协议的理论学习,从零开始完成web服务器开发,坐拥下三层协议,从技术到应用。

2023-04-23 22:16:35 281

原创 使用红黑树简单实现Set与Map容器

avl树和红黑树的简单实现,以及使用红黑树简单模拟实现map和set容器

2023-04-07 18:46:46 43

原创 TCP协议

文章目录TCP框架1.TCP概念2.TCP协议段格式(Tcp报头)确认应答(ACK)机制TCP框架1.TCP概念传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。2.TCP协议段格式(Tcp报头)1 . 源 / 目的端口号:表示数据是从哪个进程来,到哪个进程去2 . 32序号 :作用:(1)保证数据按位到达,由发送方来填。(2)去重功能假若数据在网络中出现拥堵现象,到达一定时间(由超时重传定时

2022-04-10 01:36:51 708 7

原创 C++项目:高并发内存池

项目介绍:高并发内存池三层缓存的简单实现

2022-04-08 22:03:08 1356

原创 HTTP协议

文章目录1.HTTP概念2.HTTP构成3.HTTP协议格式(1)HTTP方法(2)HTTP状态码1.HTTP概念超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在 TCP 之上。 它指定了客户端可能发送给服务器什么样的消息(request)以及得到什么样的响应。(response)2.HTTP构成3.HTTP协议格式(1)HTTP方法(2)HTTP状态码...

2022-04-02 10:21:13 2454 5

原创 C++多态理解与认识

1.什么是多态?多态是指函数调用的多种形态,使我们调用函数更加灵活。多态分为静态多态与动态多态1)静态多态:静态多态指的是编译时的多态,通过函数重载实现。根据函数命名规则找到函数地址,从而实现调用不同的方法。2)动态多态(运行时):父类指针或引用调用重写虚函数a.父类指针或引用指向父类,调用的就是父类的虚函数,指向哪个子类就去调用哪个子类里相应的虚函数。动态的多态构成的条件:1)必须通过基类的指针或者引用调用虚函数2)被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写。满足多态的

2022-01-26 14:46:53 1301

原创 C++中继承的基本理解

继承的自我认识:继承的核心目的就是实现类之间的代码复用,继承是类设计层次的复用。举个例子来说明使用继承的必要性:假设我们现在要写一个学校的管理系统。我们会则会创建学生类,老师类,舍管阿姨类等等每个类里面都应该有姓名,年龄,性别等成员变量,这样会造成代码的冗余性微高。若创建一个含有姓名,年龄,性别的Person类实现各类之间的复用。则会方便很多。class Person//父类{public: void Print() { cout << "name:" << _

2022-01-24 23:34:53 215

原创 priority_queue的简单模拟实现

priority_queue1.priirity_queue优先级队列是一种容器适配器。2.priority_queue底层的数据结构是vector,通过堆算法来来排序从而实现优先级队列3.默认情况下,priority_queue是大堆(降序)模拟实现代码如下://PriorityQueue.h#pragma once#include<vector>namespace yqx{ template<class T> class Less { public:

2021-11-26 11:34:40 506

原创 树的认识与理解

jj

2021-11-15 17:32:43 862

原创 建堆(堆化)与堆排的时间复杂度和空间复杂度的推导及TopK问题

一:建堆第一种情况:时间复杂度O(logn)若左右子树恰好都是小堆,如何建小堆呢?算法:向下调整算法1. 选出孩子中小的那一个a)小的孩子跟父亲相比,比父亲小则与父亲交换,并把原来孩子的位置当成父亲的新位置继续往下调整,直到parent走到叶子节点b)若比父亲大则不需要处理,调整完成,整个树已经是小堆。//向下调整算法void Swap(int* a, int* b){ int tmp = *a; *a = *b; *b = tmp;}void AdjustDown

2021-11-15 11:24:28 2140 3

原创 list的理解及基本模拟实现

顺序表与链表(双向带头循环链表)的优缺点对比:顺序表的优点1.按下标去进行随机访问,可能存在一定的空间浪费。2.cpu高速缓存,(cpu的预加载+顺序表物理空间连续)-》命中率比较高。(cpu访问数据时,在cpu缓存内,命中。不在cpu缓存内,不命中。)顺序表缺点:1.空间不够,需要增容。(一定程序的的性能消耗)2.头部或者中间插入删除数据时,需要挪动数据,效率比较低-》O(N)链表优点:1.按需申请内存,需要存一个数据,就申请一块内存,不存在程序的性能消耗,也不存在空间浪费2.任意位置以

2021-11-11 20:36:42 528

原创 Vector的理解及模拟实现

#pragma oncenamespace yqx{ template<class T> class vector { public: typedef T* iterator; typedef const T* const_iterator; vector()//构造 :_start(nullptr) ,_finish(nullptr) ,_endofstorage(nullptr) {} //模板里边套模板 //拷贝构造函数,迭代器用作

2021-11-09 11:41:26 560

原创 理解多线程的本质

1.进程的概念:是承担分配系统资源的基本实体。2.线程:是调度的基本单位,线程是进程内部的执行流(线程在进程的进程地址空间运行)一个进程可以有多个线程(多条执行流)linux中,没有真正意义上的线程,线程是用进程模拟的!所以说在linux中,线程是轻量级进程LWPlinux里通过pthread库来实现多线程的模拟。线程的优点:1.创建一个新线程要比创建一个新进程小得多分析:分配与创建相比,分配的代价比较小2.与进程之间的切换相比,线程之间的切换需要操作系统做的工作要少很多分析:只需切换上

2021-11-02 21:03:49 474

原创 string类做题小总结~

仅仅反转字母https://leetcode-cn.com/problems/reverse-only-letters/class Solution {public: bool Is_Az(char ch) { if((ch >= 'a'&& ch <= 'z') || (ch >='A' && ch <='Z')) return false; .

2021-10-28 17:25:42 170

原创 String类的理解及简单模拟实现

一:String类的四个默认成员构造函数1.构造函数a.初始化构造函数string ();将对象初始化为0;string (const char* s);将对象初始化为s字符串;string (const char* s, size_t n);将字符串s的前n个字符作为初始化内容,来初始化对象;b.拷贝构造函数string (const string& str);将str拷贝给生成的对象string (const string& str, size_t pos, size_t

2021-10-28 15:10:08 75

原创 信号的理解

进程信号:是一种软件中断,一种事件通知机制。通知进程发生了某个事件,打断进程当前操作,去处理这个事件。种类:使用kill -l指令进行查看;62种信号信号的生命周期:产生,注册,注销,处理。在生命周期外还会有阻塞信号的产生:(1)硬件产生: ctrl+c:会使当前终端前台进程退出(SIGINT) ctrl+\: (SIGQUIT) ctrl+z : 把当前进程转到后台运行,使用’ fg ‘命令恢复。比如top -d1 然后ctrl+z ,到后台,然后fg,重新恢复 (2)系统

2021-10-17 20:24:01 178

原创 《管道与共享内存》进程间通信

管道

2021-10-09 20:49:11 206

原创 文件管理的理解

文件=属性+内容stdin(fd = 0)stdout(fd = 1)stderr(fd = 2)open:打开文件接口介绍#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode);参数:mode

2021-10-07 17:01:34 229

原创 进程的深度理解

进程地址空间什么是进程地址空间?每个进程都有一个进程的地址空间,系统中可能存在多个进程,所以系统一定存在多个地址空间。地址空间是如何被管理的呢?答:先描述:地址空间本质是一个数据结构struct mm_struct{}再组织为什么要有进程地址空间呢?1.为了连续存储数据2.封装性,保护数据,防止野指针等非法访问。对于进程地址空间的理解:进程地址空间不是物理内存,它是对物理内存的一种虚拟。申请空间的本质:向内存索要空间,得到物理地址然后在特定区域申请没有被使用的虚拟地址,建立映射关系,

2021-10-07 15:50:18 390

原创 进程的基本概念

什么是进程是被加载到内存中的程序,是运行时的程序。进程=pcb等相关数据结构+程序的数据和代码。为什么要有进程任务需要被计算机完成,任务是可能存在多个的,就有了管理的需求,所以就有了pcb等相关数据结构,任务=代码+数据怎么办进程管理(如何新建,如何调度,如何释放,如何进行其他管理)进程=对应的文件+进程属性struct task_struct(PCB){1.标识符:pid,ppid。。。2.状态:任务状态,退出代码,退出信号等。R(运行态) S(浅度睡眠:可中断睡眠,可用wakeup唤醒

2021-10-07 13:40:38 428

原创 内存管理+函数模板与类模板

全局变量与全局静态变量的区别:链接属性不同,globavar在所有文件中可见,而全局静态只在该文件中可见。malloc->operator new-> new 之间的关系malloc new = malloc+失败抛异常;抛异常(面向对象处理错误的方式)new = operator new +构造函数。Date *p=operator new (sizeof(A)) 加上 new ( p )Date等价于Date *p = new Date;new比起malloc不一样的地方:

2021-09-26 21:58:52 136

原创 类与对象的笔记总结

类的访问限定符及封装1.封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。2.访问限定符:public修饰的成员在类外可以直接被访问;pritected和private修饰的成员在类外不能直接被访问(此处protect和private是类似的);class和struct的区别:class的默认访问权限为private;struct的默认访问权限为public。类的实例化类只是一个模型一样的东西,定义一个类实质上并没有分配实际的内存空间来存储它。当

2021-09-23 20:56:18 175

原创 字符串函数与内存函数的总结

库函数的模拟实现1.模拟实现strlen#include<stdio.h>#include<stdlib.h>#include<assert.h>size_t my_strlen( const char *str){assert(str != NULL);if (*str == '\0')//递归结束标志return 0;return (my_strlen(str+ 1)) + 1;//采用递归实现对字符串长度的计量}int main(){

2021-09-19 10:21:50 95

原创 2021-09-18

剑指 Offer 56 - II. 数组中数字出现的次数 II在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。示例 1:输入:nums = [3,4,3,3]输出:4示例 2:输入:nums = [9,1,7,9,7,9,7]输出:1限制:1 <= nums.length <= 100001 <= nums[i] < 2^31int Binary_decimal(int *p, int len)//二进制转化为

2021-09-18 16:55:46 48 1

原创 2021-09-18

剑指 Offer 56 - I. 数组中数字出现的次数一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。示例 1:输入:nums = [4,1,4,6]输出:[1,6] 或 [6,1]示例 2:输入:nums = [1,2,10,4,1,4,3,3]输出:[2,10] 或 [10,2]限制:2 <= nums.length <= 10000int* singleNumbers(i

2021-09-18 15:51:42 54 1

原创 2021-09-17

消失的数字(异或处理)数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?示例 1:输入:[3,0,1]输出:2示例 2:输入:[9,6,4,2,3,5,7,0,1]输出:8解法一(异或解法): int missingNumber(int* nums, int numsSize){ int ret = 0; int n = numsSize +1; int i = 0; for(;i&l

2021-09-17 08:47:37 83 1

原创 2021-09-15

qsort:“快排”的模拟实现```c#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<string.h>#pragma warning(disable:4996)typedef struct Student//定义结构体{ int id; char name[10]; int age; char sex[3];}Student;int my_intco

2021-09-15 21:46:27 64 1

空空如也

空空如也

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

TA关注的人

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