自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 CMake入门

Makefile想必大家都不陌生吧,它能够解决我们的自动化编译问题,大多是IDE软件都集成了make,譬如 Visual C++的 nmake、linux 下的 GNU make、Qt 的 qmake 等等。不同的IDE所集成的make工具所遵循的规范和标准都不同,也就导致其语法、格式不同,也就不能很好的跨平台编译,会再次使得工作繁琐起来那么cmake为了解决这个问题而诞生了,其允许开发者指定整个工程的编译流程,在根据编译平台,生成本地化的Makefile和工程文件,最后用户只需make编译即可。

2025-02-22 23:53:00 787 2

原创 【网络】高级IO——Reactor版TCP服务器

Reactor主要围绕事件派发和自动反应展开的,就比如连接请求到来,epoll_wait提醒程序员就绪的事件到来,应该尽快处理,则与就绪事件相关联的sock会对应着一个connection结构体,这个结构体我觉得就是反应堆模式的精华所在,无论是什么样就绪的事件,每个sock都会有对应的回调方法,所以处理就绪的事件很容易,直接回调connection内的对应方法即可,是读事件就调用读方法,是写事件就调用写方法,是异常事件,则在读方法或写方法中处理IO的同时,顺便处理掉异常事件。

2025-02-22 23:39:51 1290

原创 【网络】高级IO(2)

由于select函数有下面几个特别明显的缺点,就推演出了改进版本——poll函数比如select监视的fd是有上限的,我的云服务器内核版本下最大上限是1024个fd,主要还是因为fd_set他是一个固定大小的位图结构,位图中的数组开辟之后不会在变化了,这是内核的数据结构,除非你修改内核参数,否则不会在变化了,所以一旦select监视的fd数量超过1024,则select会报错。

2025-02-22 22:46:44 1164

原创 【网络】高级IO

在计算机中,输入/输出(即IO)是指信息处理系统(比如计算机)和外部世界(可以是人或其他信息处理系统)的通信。输入是指系统接收的信号或数据,输出是指从系统发出的数据或信号。这个术语可以用作某个动作的一部分:“执行I/O”就是指执行输入输出动作。I/O设备是指用户和计算机之间沟通的硬件部分。例如,键盘或鼠标就是计算机的输入设备,显示器和打印机是输出设备。用来在计算机之间通信的设备,例如调制解调器和网卡,通常同时执行输入输出动作。还记得冯诺依曼体系不?

2025-02-22 21:41:40 1254

原创 【项目设计】自主HTTP服务器

协议分层网络协议栈的分层情况如下:应用层:根据特定的通信目的,对数据进行分析处理,以达到某种业务性的目的。传输层:处理传输时遇到的问题,主要是保证数据传输的可靠性。网络层:完成数据的转发,解决数据去哪里的问题。链路层:负责数据真正的发生过程。HTTP的五大特点在一条通信线路上必定有一端是客户端,另一端是服务器端,请求从客户端发出,服务器响应请求并返回。

2025-02-22 14:26:25 1097

原创 【Linux】HTTP:Cookie 和 Session 详解

服务器将 Cookie 返回给浏览器, 客户端(浏览器)这边就会通过 Cookie 保存当前用户的状态,当客户端访问服务器时,就会自动把 Cookie 内容带入到请求中,服务器接收到之后,就能知道当前客户是谁,现在客户端处于什么状态了,当前客户的服务提供到哪个环节了。expires:指定了coolie的生存期,默认情况下cookie是暂时存在的,他们存储的值只在浏览器会话期间存在,当用户退出浏览器后这些值也会丢失,如果想让cookie存在一段时间,就要为expires属性设置为未来的一个过期日期。

2025-02-20 16:34:38 1242

原创 HTTPS详解

加密就是把明⽂(要传输的信息)进⾏⼀系列变换⽣成密⽂解密就是把密⽂再进⾏⼀系列变换还原成明⽂在这个加密和解密的过程中,往往需要⼀个或者多个中间的数据,辅助进⾏这个过程,这样的数据称为密钥加密解密到如今已经发展成⼀个独⽴的学科:密码学.⽽密码学的奠基⼈,也正是计算机科学的祖师爷之⼀,艾伦·⻨席森·图灵加密和解密首先需要简单了解一下 加密与解密 的概念加密:把明文经过一系列变换,形成密文解密:把密文经过一系列变换,还原成明文。

2025-02-19 16:26:23 1437

原创 Linux应用层自定义协议

在网络编程中,协议是一个关键概念。协议本质上是一种“约定”,规定了两方在通信时如何格式化和处理数据。本文将深入探讨如何通过协议进行。

2025-02-18 20:04:12 895

原创 一些网络编程的补充知识

由于云服务器的IP地址是由对应的云厂商提供的,这个IP地址并不一定是真正的公网IP,这个IP地址是不能直接被绑定的,如果需要让外网访问,此时我们需要bind 0。系统当当中提供的一个INADDR_ANY,这是一个宏值,它对应的值就是0。因此如果我们需要让外网访问,那么在云服务器上进行绑定时就应该绑定INADDR_ANY,此时我们的服务器才能够被外网访问。绑定INADDR_ANY的好处。

2025-02-18 17:11:08 1031

原创 linux网络编程(1.5w字+内部程序理解网络)

/清理网络库return 1;一、成功返回值当socket函数调用成功时,它会返回一个非负整数,这个整数就是新创建的套接字的描述符。在Unix-like系统中,文件描述符是一个用于标识打开文件的整数,而套接字作为一种特殊的文件类型,同样使用文件描述符进行标识。文件描述符的特性文件描述符是一个非负整数。每个进程都有自己独立的文件描述符空间。文件描述符在进程的生命周期内有效,进程终止后文件描述符随之失效。套接字描述符的作用套接字描述符用于在后续的网络编程操作中标识该套接字。

2025-02-18 15:29:16 958

原创 类与对象(下)

在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。虽然上述构造函数调用之后,对象中已经有了一个初始值,但是不能将其称为对对象中成员变量 的初始化,构造函数体中的语句只能将其称为赋初值,而不能称作初始化。因为初始化只能初始 化一次,而构造函数体内可以多次赋值。

2024-04-20 16:44:38 683

原创 类与对象(中)

注意:C++11 中针对内置类型成员不初始化的缺陷,又打了补丁,即:内置类型成员变量在 类中声明时可以给默认值。

2024-04-20 16:34:24 791

原创 类与对象(上)

/ 类体:由成员函数和成员变量组成// 一定要注意后面的分号class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分 号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者 成员函数。成员函数如果在类中定义,编译器可能会将其当成内 联函数处理。· 2.类声明放在.h文件中,成员函数定义放在.cpp文件中,注意:成员函数名前需要加类名一般情况下,更期望采用第二种方式。// 我们看看这个函数,是不是很僵硬?

2024-04-18 17:02:08 1274

原创 初始C++

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{} 中即为命名空间的成员。// bit是命名空间的名字,一般开发中是用项目名字做命名空间名。// 我们上课用的是bit,大家下去以后自己练习用自己名字缩写即可,如张三:zs// 1. 正常的命名空间定义// 命名空间中可以定义变量/函数/类型int val;//2. 命名空间可以嵌套int a;int b;int c;int d;

2024-04-18 13:30:52 1100

原创 1.5w字长文,搞懂基本的所有排序

直接选择排序思考非常好理解,但是效率不是很好。实际中很少使用时间复杂度:O(N^2)空间复杂度:O(1)稳定性:不稳定*p1 = *p2;*p2 = temp;i

2024-04-14 23:48:41 1060

原创 leetcode每日一题1969

注意点3:接着继续考虑,尽可能的形成1这个思路没错了,问题是最多有多少个1可以形成,接着我看示例3:我先是疑惑了一下,为什么是 1 1 1 6 6 6 7呢,和不变的情况下,差大积小,为什么不是 1 1 1 5 6 7 7呢,明显积更小啊,之后就被我发现了注意点三:在二进制位上的0、1数量是相对不变的,p=3举例,每个二进制位上都是4个1,3个0;,假如能形成 1 1 1 1 1 ……1 n,那肯定积最小,但是,这种情况是达咩的,这就是注意点二:交换是交换,上限不会超过2^p-1,数字的上限已经决定了。

2024-03-21 14:57:52 672

原创 leetcode每日一题2671

如果一个数字出现了,那么原来次数的次数就要少一次,原来次数+1的次数就要多一次,freq_cnt[freq[i]]--如果一个数字要删除,那么原来的次数的次数要少一次,原来次数-1的次数就要多一次;其实我们可以用两个哈希表来解决这道题,接着freq【i】++

2024-03-21 13:59:12 457

原创 leetcode每日一题310.最小高度树

目录一.题目原型二.题目思路三.代码实现

2024-03-17 23:55:37 460

原创 leetcode每日一题--矩阵中移动的最大次数

然后依次进行遍历,找到下一列可以走到的所有行坐标,这些下一列的行坐标都是严格满足比其走过来的点值要大的,然后将这些行坐标的集合替换掉之前的集合,再进行遍历,找到下一列能够走到的行坐标。我们创建一个二维dp数组,初始化为0,我们从不同行的第一列元素开始走,能走到的地方我们做一个标记为1,已经标记过的我们就不再去走了,以免死循环。在这题中,我们从第一列开始,往后能走多少,到了第几列,其实就是这一次的走的步数,走到最远的列,就是最大的移动次数。在递归过程中,记录能访问到的最大列号,作为答案。

2024-03-16 22:59:39 687

原创 详细解释可变参数列表C语言

使用。

2024-03-16 19:27:06 1288

原创 考研C语言复习进阶(6)

_FILE__ //进行编译的源文件__LINE__ //文件当前的行号__DATE__ //文件被编译的日期__TIME__ //文件被编译的时间__STDC__ //如果编译器遵循ANSI C,其值为1,否则未定义这些预定义符号都是语言内置的。举个栗子:语法:#define reg register //为 register这个关键字,创建一个简短的名字;) //用更形象的符号来替换一种实现。

2024-03-16 11:10:00 1072

原创 考研C语言复习进阶(5)

磁盘上的文件是文件。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。

2024-03-15 22:22:25 1127

原创 考研复习C语言进阶(4)

C语言提供了一个动态内存开辟的函数:单位是字节这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针。如果开辟成功,则返回一个指向开辟好空间的指针。如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查。返回值的类型是 void* ,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己来决定。如果参数 size 为0,malloc的行为是标准是未定义的,取决于编译器。

2024-03-15 18:14:43 859

原创 考研复习C语言进阶(3)

有了结构体类型,那如何定义变量,其实很简单int x;int y;}p1;//声明类型的同时定义变量p1//定义结构体变量p2//初始化:定义变量的同时赋初值。struct Stu //类型声明//名字int age;//年龄//初始化int data;//结构体嵌套初始化//结构体嵌套初始化位段的声明和结构是类似的,有两个不同:1.位段的成员必须是 int、unsigned int 或signed int。2.位段的成员名后边有一个冒号和一个数字。

2024-03-15 14:37:34 1382 1

原创 考研C语言复习进阶(2)

strtok 函数大概的运行实现。

2024-03-14 20:52:36 802

原创 KMP算法!!

字符串匹配算法我们先了解BF算法,对我们理解KMP算法有帮助。

2024-03-14 19:23:20 710

原创 考研C语言复习进阶(2)

数组指针是指针?还是数组?答案是:指针。我们已经熟悉:整形指针: int * pint;能够指向整形数据的指针。浮点型指针: float * pf;能够指向浮点型数据的指针。那数组指针应该是:能够指向数组的指针。下面代码哪个是数组指针//p1, p2分别是什么?//解释:p先和*结合,说明p是一个指针变量,然后指着指向的是一个大小为10个整型的数组。所以p是一个指针,指向一个数组,叫数组指针。

2024-03-13 23:28:14 1702

原创 考研C语言复习进阶(1)

前面我们已经学习了基本的内置类型:char //字符数据类型short //短整型int //整形long //长整型long long //更长的整形float //单精度浮点数double //双精度浮点数以及他们所占存储空间的大小。类型的意义:1. 使用这个类型开辟内存空间的大小(大小决定了使用范围)。2. 如何看待内存空间的视角。

2024-03-12 23:35:41 1647 1

原创 考研C语言复习初阶(6)

有了结构体类型,那如何定义变量,其实很简单。int x;int y;}p1;//声明类型的同时定义变量p1//定义结构体变量p2//初始化:定义变量的同时赋初值。struct Stu //类型声明//名字int age;//年龄//初始化int data;//结构体嵌套初始化//结构体嵌套初始化Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。

2024-03-12 00:26:16 639 1

原创 考研C语言复习初阶(5)

我们写出的表达式如果不能通过操作符的属性确定唯一的计算路径,那这个表达式就是存在问题的。二.练习1.交换两个变量(不创建临时变量)

2024-03-11 21:05:37 1341

原创 每日一题leetcode -299.猜数字游戏

【代码】每日一题leetcode -299.猜数字游戏。

2024-03-11 00:25:28 422

原创 考研复习C语言初阶(4)+标记和BFS展开的扫雷游戏

C语言本身是不做数组下标的越界检查,编译器也不一定报错,但是编译器不报错,并不意味着程序就是正确的,数组在创建的时候如果想不指定数组的确定的大小就得初始化。所以数组的下标如果小于0,或者大于n-1,就是数组越界访问了,超出了数组合法空间的访问。仔细观察输出的结果,我们知道,随着数组下标的增长,元素的地址,也在有规律的递增。数组的下规定是从0开始的,如果数组有n个元素,最后一个元素的下标就是n-1。数组的初始化是指,在创建数组的同时给数组的内容一些合理初始值(初始化)。2. &数组名,取出的是数组的地址。

2024-03-09 19:14:19 1266 1

原创 每日一题leetcode-找出数组的第K大和

读完题目后我们知道,该题就是让我们在子序列中求和,我们要在不同的子序列中排序找到第K大的和。何为子序列?子序列就是在一个数组中抽出一些元素构成一个新的数组即可,不要求一定是连续的;例如:数组【4,5,6】,子序列有【4】【5】【6】【】【4,5】【4,6】【5,6】【4,5,6】我们其实就可以发现,一个数组中有N个元素,

2024-03-09 14:36:44 533

原创 考研复习-函数栈帧(详解)

我们在写C语言代码的时候,经常会把一个独立的功能抽象为函数,所以C程序是以函数为基本单位的。那函数是如何调用的?函数的返回值又是如何待会的?函数参数是如何传递的?这些问题都和函数栈帧 有关系。函数栈帧(stack frame)就是函数调用过程中在程序的调用栈(call stack)所开辟的空间,这些空间 是用来存放: 函数参数和函数返回值 临时变量(包括函数的非静态的局部变量以及编译器自动生产的其他临时变量) 保存上下文信息(包括在函数调用前后需要保持不变的寄存器)。

2024-03-09 00:14:20 952

原创 考研复习C语言初阶(3)

如果库函数能干所有的事情,那还要程序员干什么?所有更加重要的是自定义函数。自定义函数和库函数一样,有函数名,返回值类型和函数参数。但是不一样的是这些都是我们自己来设计。这给程序员一个很大的发挥空间。statement;//语句项ret_type 返回类型fun_name 函数名para1 函数参数函数返回类型不写,默认返回INT类型我们写一个可以找出两个数中最大值的函数//get_max函数的设计(x):(y);

2024-03-08 16:14:11 1319 1

原创 每日一题leetcode第2834:找出美丽数组的最小和

那我们很自然的就想到,比如N=5,那其最小和肯定是1+2+3+4+5,再给个条件说target=9,那我们会发现一件事情,4和5我们只能有一个,我们肯定舍弃5,拿个6,此时3+6=9,舍弃6,拿进来7,2+7=9,舍弃7,拿8,8+1=9,舍弃8,最后进来9,可以此时最小和是1+2+3+4+9.首先我们看到这个题,就是根据给出的数组元素个数N,从[1,N]找出N个元素,使得N个元素的和最小,其中随便抽两个数出来,两个数之和不能为target。序号2的和: 首先要知道后面有几个数:N-target/2;

2024-03-08 13:53:00 813 2

原创 leetcode每日一题2575

我们第一思路是每次从左往右拿一个数与之前的数组合然后整除,如果可以整除,那么到i这里的word[i]就可以改成1,但是这样的时间复杂度到了O(N);

2024-03-08 00:23:50 377 3

原创 C语言复习初阶(2)

EOF最强解释以及考研C语言复习初阶(2)

2024-03-07 23:48:35 1103 1

原创 考研复习c语言初阶(1)

c语言复习初阶(1)

2024-03-07 14:26:29 1232 1

原创 c语言实现三子棋(N子棋教程)+电脑超强博弈详解

c语言实现三子棋(N子棋教程)+电脑超强博弈详解

2022-11-09 23:51:09 2064 24

空空如也

空空如也

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

TA关注的人

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