自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++虚函数

虚函数:在基类中使用关键字 virtual 声明的函数。 虚函数依靠虚指针vptr和虚函数表vtable来处理。vptr是一个指针,在类的构造函数中创建生成,并且只能用this指针来访问它,因为它是类的一个成员,并且vptr指向保存虚函数地址的vtable。如果子类没有定义同名覆盖虚函数,那么他会继承父类的虚函数表(子类和父类共用同一张虚函数表)(共用存疑),子类的虚指针会指向父类的虚函数表。如果子类中只重写了一部分虚函数,没有重写的虚函数的地址也会保存在子类独有的虚函数表中,不过其地址与父类的虚函数表中

2023-10-12 17:00:59 210

原创 TCP协议详解

当TCP模块真正开始发送数据时,发送缓冲区中这些等待发送的数据可能被封装成一个或多个TCP报文段发出。应用程序执行的读写操作次数和TCP模块发送/接收的报文段个数之间没有固定的数量关系。1.应答机制:发送端发送的每个TCP报文段都必须得到接收方的应答,才认为该报文段传输成功。3.接收端的TCP协议程序会对接收到的TCP报文段排序、去重,交给上层(应用层)应用程序。双方都必须为该链接分配必要的内河资源,以管理连接的状态和连接上数据的传输。TCP连接是全双工的,双方的数据读写可以通过一个连接进行。

2023-09-21 20:56:43 501

原创 计算机组成原理选择笔记

可屏蔽中断是一种硬件中断,可由CPU 指令禁用或忽略。 不可屏蔽中断是不能被CPU 指令禁用或忽略的硬件中断。 当发生可屏蔽中断时,可在执行当前指令后处理。 当不可屏蔽中断发生时,当前指令和状态被存储在堆栈中,供CPU 处理中断。

2023-09-20 17:10:28 133

原创 计算机网络选择题笔记

令牌环:令牌环上传输的小的数据(3个字节的一种特殊帧)叫为令牌,谁有令牌谁就有传输权限。如果环上的某个工作站收到令牌并且有信息发送,它就改变令牌中的一位(该操作将令牌变成一个帧开始序列),添加想传输的信息,然后将整个信息发往环中的下一工作站。 ARP协议作用:数据帧从源节点传送到目标节点通常需要经过许多中间节点。通常,数据帧从源节点出发,如果源节点和目标节点不在同一子网内,则源节点将数据帧发送给本子网的网关,源节点的路由表内通常会保存网关的IP地址,在发送时,会使用ARP协议将目标IP地址(在这一跳中为网

2023-09-18 17:43:44 244

原创 Linux选择题笔记

参考:

2023-09-09 11:30:59 229

原创 数据库选择题笔记

参考:

2023-09-06 20:44:48 268

原创 操作系统笔记

内核态与用户态是操作系统的两种运行级别,运行在用户态下的程序不能直接访问操作系统内核数据结构和程序。当我们在系统中执行一个程序时,大部分时间是运行在用户态下的,在其需要操作系统帮助完成某些它没有权力和能力完成的工作时就会切换到内核态(比如操作硬件)。特权指令:只能由操作系统使用、用户程序不能使用的指令。非特权指令:用户程序可以使用的指令。内核态(Kernel Mode):运行操作系统程序,操作硬件。用户态(User Mode):运行用户程序。(使用户程序从用户态陷入内核态)设置程序状态字PSW。

2023-09-04 15:10:22 352

原创 做题常用小技巧

创建数组时行列比原本+1:省去边界检查,多出来的行列还可以用来参与计算或判定。

2023-09-04 14:50:01 61

原创 c++选择题笔记

sizeof。

2023-08-17 20:09:32 336

原创 c++构造函数和析构函数

当本地变量对象所在作用域结束时,本地变量会调用对象的析构函数析构该对象。如果类没有自定义的构造函数,系统会生成一个无参的空构造函数。析构函数无返回值类型且不可设置返回值类型且无参数。如果类有自定义的构造函数,系统不会生成构造函数。构造函数无返回值类型且不可设置返回值类型。

2023-08-14 15:23:02 81

原创 常用解题算法

可以用来解决一些查找满足一定条件的连续区间的性质(长度等)的问题。由于区间连续,因此当区间发生变化时,可以通过旧有的计算结果对搜索空间进行剪枝,这样便减少了重复计算,降低了时间复杂度。往往类似于“ 请找到满足 xx 的最 x 的区间(子串、子数组)的 xx ”这类问题都可以使用该方法进行解决。

2023-08-09 21:53:04 69

原创 Linux下的简单web服务器

异步线程:主线程负责接受连接请求并将I/O事件分发给工作线程执行。2.创建网络连接socket并监听之。4.设计逻辑处理类的事件处理函数。同步线程:工作线程竞争执行任务。半同步/半反应堆并发模式。1.设计线程池的创建逻辑。(注意修改注册事件列表)1.创建并初始化线程池。3.循环监听连接事件。

2023-08-08 15:29:43 119

原创 Linux下的CGI服务器

4.父进程收到SIGINT信号或SIGTERM信号,向所有子进程发送SIGTERM信号。处理:调用逻辑处理对象对应的处理函数。5.子进程收到SIGINT信号或SIGTERM信号,终止循环,从。处理:向子进程发送通知,让子进程接受连接。1.与父进程的通信管道(连接事件)。7.确认所有子进程都退出后,父进程也退出循环。1.设计进程池的创建逻辑(使用模板进行设计)半同步:工作子进程处理客户逻辑,顺序执行。信号,进行对应子进程的退出收尾工作。信号,通知父进程子进程已经终止。3.设计子进程的监听、处理逻辑。

2023-08-08 11:38:22 638

原创 Linux线程

2.创建了新的线程后,新的线程会和主线程以及已有的线程共享进程的时间片,并行执行(实际上是串行执行,因为串行使用时间片,但是通过调度算法切换时间片使得看起来像是并行执行)函数是程序的入口点,是主程序的执行起点。当程序启动时,操作系统会为程序创建一个主线程,然后从。1.在 C++ 或类似的编程环境中,程序的执行从。

2023-08-04 14:46:10 70

原创 c++堆和栈

在使用 C++ 编程时,通常推荐优先使用栈上的内存,尽量避免手动管理堆上的内存,以减少内存泄漏和潜在的内存安全问题。而对于较大的对象或需要动态大小的数据结构,可以使用堆上的内存进行存储。

2023-08-04 14:21:31 136

原创 Linux编译简单web服务器

我在http_conn.h声明了该静态变量,并在http_conn.cpp对改变了进行定义,但是我直接使用g++ server.cpp命令,这样链接器无法找到http_conn.cpp文件,也就无法找到静态变量m_epollfd的定义,就会出现undefined reference错误。共五个文件:threadpool.h,locekr.h,http_conn.h,http_conn.cpp,server.cpp。解决方法:g++ http_conn.cpp server.cpp。

2023-08-03 14:19:01 152

原创 Linux使用squid部署代理服务器

2、修改squid的配置文件:/etc/squid/squid.conf,在其中加入如下两行代码(需root权限)(此处将193.168.1.0/24换成你自己的客户端主机的IP地址)添加好环境变量后,便可直接在命令行中使用curl命令。1、在Linux上下载squid(或squid3)(此处将IP地址换成你自己的服务器主机的IP地址)

2023-08-01 16:12:47 841

原创 linux ftp

连接到的目录为使用ftp命令之前的目录,可以使用cd切换目录。使用get下载的文件会被保存到使用ftp命令之前的目录。1、下载vsftpd服务器程序。如果在本目录使用get会报错。3、使用ftp连接本机。

2023-08-01 15:10:43 752

原创 linux编程-telnet

启用或关闭Windows功能:在"程序"或"程序和功能"窗口中,找到并点击"启用或关闭Windows功能"(Turn Windows features on or off)链接。启用Telnet客户端:在Windows功能窗口中,找到并勾选"Telnet客户端"(Telnet Client)选项。然后点击"确定"按钮。选择"程序"(Programs)或"程序和功能"(Programs and Features):在控制面板中,根据您的Windows版本,选择"程序"或"程序和功能"。1.安装telnet。

2023-07-19 15:25:24 390

原创 创建并连接socket,chat

/ 在这里可以使用新的连接套接字与客户端进行数据交换。// 接受客户端连接请求,创建新的连接套接字。// 绑定套接字到指定地址和端口。// 接受连接请求并处理客户端。// 关闭连接套接字。// 设置服务器地址。// 关闭监听套接字。

2023-06-15 23:00:41 590

原创 二进制运算

1.使用固定位为1,其他位全为0的相同位数的几个二进制数,与原二进制数相与,将要交换的数位提取出来并右移/左移至相应位置。1.使用固定位为1,其他位全为0的相同位数的2个二进制数,与原二进制数相与,将要交换的数位提取出来。2.将原数的要交换的数位置为0,方法与1类似。2.将原数的要交换的数位置为0,方法与1类似。3.将1的结果和2的结果相或。3.将1的结果和2的结果相或。

2023-05-18 17:49:01 150

原创 c++ pair

【代码】c++ pair。

2023-05-18 16:43:53 117

原创 c++ error笔记

【代码】c++ error笔记。

2023-05-16 16:45:57 458

原创 c++ string类

/删除s中位置在position,长度为length的字串。删除单个字符的话,令length为1即可。空格“ ”占一个长度。

2023-05-15 15:49:13 63

原创 c++ stack文档

【代码】c++ stack文档。

2023-03-29 11:37:48 103

原创 c++ 编程笔记

会定义为一个int指针变量a和一个int变量b。×××××××××错。

2023-03-28 11:36:41 71

原创 链表(c++)

头结点(*head):第一个非正式节点,节点内的值域为空,head->next,指向的是第一个正式节点。头指针(*head):指向的是第一个正式节点,head->next,指向的是第二个节点!

2023-03-28 11:34:57 63

原创 c++ unordered set

un.insert(key) //返回值类型为pair :pair,如果插入成功,bool值为true,返回指向插入位置的iterator。如果插入失败(set中已有该值),bool为false,返回现有的iterator。un.count(key) //在容器中查找值为 key 的元素的个数。unordered set:(哈希set)

2023-03-27 10:08:50 195

原创 c++ 学习笔记

A->B则A为指针,->是成员提取,A->B是提取A中的成员B,A只能是指向类、结构、联合的指针;箭头(->):左边必须为指针;A.B则A为对象或者结构体;点号(.):左边必须为实体。符号.和->的作用和区别。

2023-03-25 18:47:28 68

原创 SQL笔记

substring_index(str,keyword,count):从str中截取到keyword第count次出现的位置,count为负则从后向前截取。select *,cast('自定义的值' as 自定义的字段类型) as '列名' from 表名。substing(str,position,length):position为负则从后向前截取。select *, '自定义的值' as '列名' from 表名 (简写)与:and 或:or 非:not。var1:被取余数,var2:除数。

2023-03-19 19:09:45 358

原创 c++ map

m[a] //运算符[],如果map中存在key=a,那么返回(如果可value的值是基本数据类型,那么返回0,如果value的值是string,那么返回""(空字符串),也就是说基本数据类型的默认值为0,string的默认值为"")

2023-03-18 20:05:56 86

原创 c++ set

返回值类型为pair :pair,如果插入成功,bool值为true,返回指向插入位置的iterator。如果插入失败(set中已有该值),bool为false,返回现有的iterator。取到iterator:s.insert(i).first。取到bool:s.insert(i).second。

2023-03-18 20:04:04 153

原创 c++ vector

/赋值运算符,将v1的内容复制给v。//构造函数,参数为vector的长度/容量。//返回向量v的长度(包含元素的个数)v.pushback(a);//将a插入到向量尾部。//返回地址add1到地址add2(

2023-03-18 20:03:52 103

原创 C语言 字符类型

scanf()第一个参数中,空格可以代表0-无穷多个空格。使用字符进行计算,会使用ASCII表中对应的数字进行计算。char 是字符型,也是整数型。大写转小写:A+'a'-'A'小写转大写:a+'A'-'a'

2023-03-16 18:21:43 145

原创 c++ 流 stream

istream参数不可以const,因为流的position(当前读到的位置)有解析(parse)和格式化(format)的过程。无解析(parse)和格式化(format)的过程。返回是istream:为了连续运算。第一个参数是receiver。自定义inserter。自定义operator。

2023-03-16 15:08:23 348

原创 c++ 内存管理

new 出来的数据 (

2023-03-16 15:08:02 115

原创 c++ 异常exception

有多个catch的时候,按照书写顺序,顺序执行,执行catch时会检查,是否完全匹配,是否是catch参数类型的子类(仅限引用和指针?throw的内容通常是本地变量,存储在堆栈中,在退出throw所在的程序段时并不会立即销毁,而是会被throw到向上的层级中。throw会带着throw的内容不断向上回溯并终止回溯到的每一级运行到的程序,直到回溯到try。在函数abc中,最多抛出MathErr,括号中的所有异常种类(不是一定会抛出)catch中的throw会自动将catch到的内容throw,无需参数;

2023-03-16 15:06:15 465

原创 c++ STL

Basic Algorithm(sort, search, 函数模板)所有的关键字存储在 std namespace中。Containers:(类模板)Deque(可双向扩展数组)Vector(可扩展数组)Sets(无重复无序集合)List(双向链表)所有关键字首字母小写。

2023-03-16 15:05:54 69

原创 c++ static

全局变量,跨文件,没有固定的初始化顺序(同文件中有),如果互相之间的构造函数有依赖关系,可能会造成问题。public static(成员函数和成员变量)可以使用对象访问也可以使用类名访问。static 成员函数只可以调用参数和静态成员变量,不可以调用非静态成员变量。全局变量(对象)的析构函数调用在main()exits或exit()被调用。private只可以使用类名进行定义/初始化,不可以使用类名进行访问。全局变量(对象)的构造函数调用在程序运行的最初,在main函数之前。Java中没有全局变量。

2023-03-15 20:24:06 162

原创 c/c++ 字符串

(返回字符串的长度,不包括“\0”)(return length of s)只有当要对内存进行操作或要使用byte *,才使用char *尽量使用string,抛弃char *本质是字符型数组 char *库函数:c++字符串:string。库函数

2023-03-15 20:23:54 98

空空如也

空空如也

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

TA关注的人

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