自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 python基础1

a = 10创建变量的语句非常简单, 其中a 为变量名. 当我们创建很多个变量的时候, 就可以用名字来进行区分.= 为赋值运算符, 表示把 = 右侧的数据放到 = 左侧的空间中.注意:变量的名字要遵守一定规则.硬性规则(务必遵守)变量名由数字字母下划线构成. 数字不能开头.变量名不能和 "关键字" 重复.变量名大小写敏感. num 和 Num 是两个不同的变量名.软性规则(建议遵守)变量名使用有描述性的单词来表示, 尽量表达出变量的作用.

2025-09-17 02:29:50 530

原创 Qt信号与槽

在 Qt 中,用户与控件的交互(如点击按钮、关闭窗口)被定义为事件,每个事件会触发一个信号,而控件对信号做出的响应动作则称为槽。信号与槽是 Qt 特有的消息传输机制,能将独立的控件关联起来(例如 “点击按钮关闭窗口”),实现交互逻辑。除了 Qt 内置的信号槽,开发者可根据需求自定义,需遵循严格的语法规范。1.头文件(widget.h)声明2.源文件(widget.cpp)实现场景:老师发出 “上课了” 信号,学生响应 “回到座位学习”。1.在源⽂件中新建两个类,⼀个是⽼师类,⼀个是学⽣类;

2025-09-14 20:03:55 1034

原创 C++中enable_shared_from_this()的使用

enable_shared_from_this 是 C++11 定义在头文件 include 中的一个模板类,其作用是在类的内部安全的得到 this 指针的 shared_ptr 版本。多次通过原始指针创建 shared_ptr 不会增加引用计数,且会造成内存重复释放。这种 “双重释放” 是 C++ 中严重的未定义行为,会直接导致程序崩溃。shared_ptr 是通过引用计数来判断对象是否可以被销毁。使用enable_shared_from_this。②.通过 this 创建 shared_ptr。

2025-09-12 03:27:31 375

原创 Qt 基础编程核心知识点全解析:含 Hello World 实现、对象树、坐标系及开发工具使用

然后,代码继续执⾏,在 window 析构之后,quit 也会被析构,因为 quit 也是⼀个局部变量,在超出作⽤域的时候当然也需要析构。⼯程新建好之后,在⼯程⽬录列表中有⼀个后缀为 ".pro" 的⽂件, ".pro" ⽂件就是⼯程⽂件 (project) ,它是 qmake ⾃动⽣成的⽤于⽣产 makefile 的配置⽂件。因此,这段代码在超出作⽤域时,会先调⽤ quit 的析构函数,将其从⽗对象 window 的⼦对象列表中删除,然后才会再调⽤ window 的析构函数。

2025-09-11 20:42:08 710

原创 Reactor模式

Reactor模式叫反应器模式也可以叫做分发者模式或通知者模式,大多数IO相关组件如redis也在使用该模式。reactor模式原理是I/O 多路复用监听事件,收到事件后,根据事件类型分配(Dispatch)给某个进程 / 线程。

2025-09-10 15:47:24 777

原创 make_shared的使用

如果在 ** 步骤 2(分配控制块)** 时发生异常(比如内存不足,抛出。这样要么全部成功,要么全部回滚,不会泄漏资源。,用于创建并返回一个指向动态分配对象的。它是创建共享所有权对象的标准推荐方式。3. make_shared 的核心优势。比传统方式快 10-30%是 C++11 引入的。

2025-09-07 15:09:48 886

原创 网络层协议——IP协议

因此一个数据在路由的时候,随着数据不断路由进入更小的子网,其网络号的位数是在不断变化的,准确来说其网络号的位数是在不断增加的,这也就意味着IP地址当中的主机号的位数在不断减少。需要注意的是,未分片报文的“更多分片”标志位为0,最后一个分片报文的“更多分片”标志位也为0,但当接收端只收到分片报文中的最后一个分片报文时,接收端不会将其识别成一个未分片的报文,因为未分片的报文所对应的13位片偏移的值也应该是0,而最后一个分片报文所对应的13位片偏移的值不为0。

2025-09-06 16:59:19 883

原创 C语言模拟实现多态

通过结构体表示“基类”,并为其定义一个函数指针成员,该指针指向虚拟函数(在派生类中实现)。

2025-08-25 00:05:18 717

原创 项目基础配置

Build targets :可指定 platform (平台)、 type (项目类型)、 output filename (输出文件,相对 *.cbp 路径)、 execution working dir (工作目录,相对 *.cbp 路径)、 objects output dir (目标文件输出目录,相对 *.cbp 路径)。End of line mode :注意默认为 LF ( '/n' ),在 MS 中打开需要先用相关工具( UE 或 VS2005 )转换成 CRLF (“ /r/n” )。

2025-08-24 01:33:04 579

原创 Code::Block的安装和使用

在新建项目对话框中,您需要设置项目名称、项目类型(静态库、动态库、可执行文件等)、源文件、头文件等。当您选择新建项目后,CodeBlocks 会创建一个包含您设置的文件和目录结构的项目,并进入项目管理模式。在项目管理模式下,您可以方便地添加、删除、修改源文件和头文件,以及查看项目依赖关系、编译项目等。新建文件方式是针对单个文件的创建,它适用于那些只需要编写一个或几个 C/C++ 文件的小型项目。在新建文件对话框中,您可以设置文件名、文件类型(C/C++ 源文件或头文件等)、文件路径等。

2025-08-24 01:06:06 1122

原创 设计模式之工厂模式

假如我们要买水果,水果的产地来自中国、日本、美国,每个国家的水果种类都可以分为苹果、香蕉、梨子。作为开发者,我们就不得不创建苹果类(香蕉和梨子类似),然后每种苹果都继承自苹果类。每上架一个国家的苹果我们都要实现一次苹果类,这样就会有成千上万的苹果类需要被创建,AbstractFactory 模式就是用来解决这类问题的:要创建一组相关或者相互依赖的对象。

2025-08-21 11:11:29 755

原创 编译和链接

例如:在.c中声明了add函数,但是外部并没有它的定义,在链接期间进行合并符号的时候,由于给add函数声明生成的符号是一个无效地址,而且并没有相同的符号(该函数外部的实现)进行合并,所以在链接期间这种情况就会报错。并且包含的头⽂件都被插⼊到.i⽂件中。将源代码程序被输⼊扫描器,扫描器的任务就是简单的进⾏词法分析,把代码中的字符分割成⼀系列的记号(关键字、标识符、字⾯量、特殊字符等)。汇编期间:将每个文件中的符号分配一个有效的地址,无意义的符号分配一个无效的地址(例如函数声明),最后生成符号表。

2025-08-14 17:45:23 850

原创 云服务器下git的使用

直观展示文件的变更情况(如新增、修改、删除等),以及这些变更是否已被跟踪或暂存。使用 git clone + 仓库网址 就能创建一个本地仓库。scott_data.sql当前是在工作区的。(方便回收,避免提交错误的代码到远程仓库)这里注意第一次使用的用户它会提醒你输入你的。我这里因为已经输过了所以它没有提醒。将文件从本地仓库推送到远程仓库。将文件拷贝到本地仓库中。

2025-08-14 00:41:49 381

原创 [项目]云备份项目

云备份系统搭建云备份服务器与客⼾端,客⼾端程序运⾏在客⼾机上⾃动将指定⽬录下的⽂件备份到服务器,并且能够⽀持浏览器查看与下载,其中下载⽀持断点续传功能,并且服务器端对备份的⽂件 进⾏热点管理,将⻓时间⽆访问⽂件进⾏压缩存储。centos7.6/vim、g++、gdb、makefile 以及 windows10/vs2017http 客⼾端/服务器搭建, json 序列化,⽂件压缩,热点管理,断点续传,线程池, 读写锁,单例模式。

2025-08-11 01:52:02 682

原创 MySQL内置函数

在显示评论信息时,如果只想显示评论的日期而不显示评论的时间,可以在查询sendtime字段时,通过date函数截取sendtime的日期部分进行显示。对于多字节字符来说,不同编码中一个字符所占的字节个数是不同的,比如utf8中一个字符占用3个字节,而gbk中一个字符占用2个字节。现有如下成绩表,要求以“XXX的语文是XX分,数学是XX分,英语是XX分”的格式显示成绩表中的信息。需要注意的是,向下取整本质是向负无穷方向取整,因此负数向下取整后得到的是第一个小于等于该数的整数。

2025-07-30 00:13:29 684

原创 MySQL表的增删查改

在select的column列表中添加表达式查询,查询的表达式为语文、数学和英语成绩之和,为了方便观察可以将表达式对应的列指定别名为“总分”,在where子句中指明筛选条件为三科成绩之和小于200。需要注意的是,MySQL中不支持+=这种复合赋值运算符,此外,这里在查看更新后的数据时不能查看总成绩倒数前三的3位同学,因为之前总成绩倒数前三的3位同学,数学成绩加上30分后可能就不再是倒数前三了。

2025-07-28 18:04:53 1478

原创 MySQL表的约束

创建客户表的时候,将客户编号设置成主键并且可以将其设置成自增长字段,然后给姓名设置not null属性,将邮箱设置成唯一键,将性别设置成enum类型并仅提供男女性别选项,此外,题目虽然没有对身份证做要求,但正常来说身份证也应该保证唯一性,最好也设置成唯一键。查看表中插入的数据可以看到,表当中有重复的IP地址,也有重复的端口号,但是不会出现IP和端口均重复的,这就是复合主键的作用,复合主键可以有多个相同的key值但是必须保证有一个key值是唯一的。

2025-07-26 18:34:07 1140

原创 MySQL的数据类型

此外,由于MySQL在保存值时会进行四舍五入,因此实际可插入float(4,2)的范围为-99.994~99.994,如果插入的数据不在该范围内,那么插入数据时就会产生报错。无符号float类型的取值范围,实际就是把对应有符号float类型中的负数部分拿走了,因此float(4,2)的取值范围为0~99.99,实际可插入的范围是0~99.994。向表中插入一条记录,记录中指定id和a的值均为10,插入记录后查看表会发现a的值显示的十六进制的10(mysql的版本不同可能bit类型的呈现方式不一样)。

2025-07-25 17:03:49 1166

原创 MySQL表的基本操作

原本应该是三个文件,还有一个.frm(表结构),由于未使用的是MySQL 8.0 及之后的版本,默认使用 InnoDB 存储引擎,并且将表结构元数据存储在。新增列SQL中的after表示将该列新增到哪一列之后,如果想要将新增的列放到第一列,可以将after及其之后的SQL换成not null first。修改表的过程中可能会影响到表中的数据,为了演示这个过程,我们在修改表之前先在user表中插入两条数据。本篇博客讲的是表的DDL操作,也就是操作表结构的SQL语句。将user表的表名改成employee。

2025-07-24 15:51:46 625

原创 MySQL库的操作

创建数据库如果创建数据库时未指明数据库的编码格式或校验规则,则默认使用MySQL配置文件中对应的编码格式或校验规则。

2025-07-24 12:24:39 967

原创 MySQL数据库基础

也就是说,MySQL服务器本质是一个网络服务器,我们使用mysql命令连接MySQL服务器时,本质就是MySQL客户端在向MySQL服务器发起连接请求,连接建立成功后MySQL客户端就会将用户输入的SQL语句发送给MySQL服务器,之后MySQL服务器就会根据SQL语句对数据进行对应的操作。存储引擎就是数据库管理系统如何存储数据、如何为存储的数据建立索引、如何更新数据、如何查询数据等技术的实现方法,MySQL中的存储引擎是插件式的存储引擎,它可以支持多种存储引擎。

2025-07-23 14:36:26 710

原创 Ubuntu下MySQL的安装

apt update如果已下载过,重新执行该指令会更新你的MySQL服务器。

2025-07-22 12:53:08 489

原创 [项目] 高并发内存池(C++)

1.池化技术所谓“池化技术”,就是程序先向系统申请过量的资源,然后⾃⼰管理,以备不时之需。之所以要申 请过量的资源,是因为每次申请该资源都有较⼤的开销,不如提前申请好了,这样使⽤时就会变得⾮ 常快捷,⼤⼤提⾼程序运⾏效率。在计算机中,有很多使⽤“池”这种技术的地⽅,除了内存池,还有连接池、线程池、对象池等。以 服务器上的线程池为例,它的主要思想是:先启动若⼲数量的线程,让它们处于睡眠状态,当接收到 客⼾端的请求时,唤醒池中某个睡眠的线程,让它来处理客⼾端的请求,当处理完这个请求,线程⼜进⼊睡眠状态。

2025-07-21 21:15:43 1367

原创 I/O多路转接 —— epoll

其中文件描述符0、1、2是默认打开的,分别对应的是标准输入、标准输出和标准错误,3号文件描述符对应的是服务器创建的epoll模型,4号文件描述符对应的是监听套接字,5号和6号文件描述符对应的分别是正在访问服务器的两个客户端。在epoll中,对于每一个事件都会有一个对应的epitem结构体,红黑树和就绪队列当中的节点分别是基于epitem结构中的rbn成员和rdllink成员的,epitem结构当中的成员ffd记录的是指定的文件描述符值,event成员记录的就是该文件描述符对应的事件。

2025-07-17 14:36:07 937

原创 I/O多路转接 —— select, poll

当我们借助telnet工具向select服务器发起连接请求后,select函数就会立马检测到监听套接字的读事件就绪,此时select函数便会成功返回,并将我们设置的提示语句进行打印输出,因为当前程序并没有对就绪事件进行处理,此后每次select函数一调用就会检测到读事件就绪并成功返回,因此会看到屏幕不断打印输出提示语句。此时如果select监视的文件描述符上有事件就绪,那么select函数的返回值就是大于0的,如果select监视的文件描述符上没有事件就绪,那么select的返回值就是等于0的。

2025-07-15 13:51:47 941

原创 五种IO模型

因此在以非阻塞方式读取数据时,如果调用read函数时得到的返回值是-1,此时还需要通过错误码进一步进行判断,如果错误码的值是EAGAIN或EWOULDBLOCK,说明本次调用read函数出错是因为底层数据还没有就绪,因此后续还应该继续调用read函数进行轮询检测数据是否就绪,当数据继续时再进行数据的读取。阻塞IO和非阻塞IO的区别在于,阻塞IO当数据没有就绪时,后续检测数据是否就绪的工作是由操作系统发起的,而非阻塞IO当数据没有就绪时,后续检测数据是否就绪的工作是由用户发起的。

2025-07-12 18:03:38 756

原创 TCP相关实验

现在我们让telnet退出,就相当于客户端向服务器发起了连接断开请求,但此时服务器端并没有调用close函数关闭对应的文件描述符,所以当telnet退出后,客户端维护的连接的状态会变为FIN_WAIT_2,而服务器维护的连接的状态会变为CLOSE_WAIT。当面试官让你用UDP实现可靠传输时,你一定要立马想到TCP协议,因为TCP协议就是当前比较完善的保证可靠性的协议,面试官让你用UDP这个不可靠的协议来实现可靠传输,无非就是让你在应用层来实现可靠性,此时就可以参考TCP协议保证可靠性的各种机制。

2025-07-06 08:35:44 828

原创 传输层协议——TCP协议

例如图中的1001-2000的数据包如果在传输过程中丢包了,此时虽然2001-5000的数据都被对方收到了,此时对方发来的确认序号也只能是1001,当发送端补发了1001-2000的数据包后,对方发来的确认序号就会变为5001,此时发送缓冲区当中1001-5000的数据也会立马被归置到滑动窗口的左侧。TCP建立连接,数据通信,断开连接,一定会发送TCP报文,TCP发送的报文一定是各种类型的,不同的类型,决定了服务端要做不同的动作,接收方如何得知,报头的类型各自是什么呢?

2025-06-30 18:21:52 1452

原创 传输层协议——UDP协议

而socket接口往下的传输层实际就是由操作系统管理的,因此UDP是属于内核当中的,是操作系统本身协议栈自带的,其代码不是由上层用户编写的,UDP的所有功能都是由操作系统完成,因此网络也是操作系统的一部分。UDP就是通过报头当中的目的端口号来找到对应的应用层进程的。需要注意的是,UDP协议报头当中的UDP最大长度是16位的,因此一个UDP报文的最大长度是64K(包含UDP报头的大小)。报文在网络中进行路由转发时,并不是每一个报文选择的路由路径都是一样的,因此报文发送的顺序和接收的顺序可能是不同的。

2025-06-26 12:44:54 1121

原创 应用层协议——HTTP协议

HTTP(yperText Transfer Protocol)协议又称超文本协议,是一个简单的请求-响应协议,HTTP通常运行在TCP之上URL叫做统一资源定位符,也就是外面平常上网所看到的网址,是因特网的万维网服务程序上用于指定信息位置的表示方法一个完整的URL大致由以下几部分构成:协议方案名http://协议方案名称,表示请求时需要使用的协议,通常使用的是HTTP协议或安全协议HTTPS。HTTPS是以安全为目标的HTTP通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。

2025-06-13 12:26:16 907

原创 C++ IO流

使用itoa函数进行转化。int a = 10;//将整型的a转化为十进制字符数字存储在字符串arr当中使用sprintf函数进行转化。int a = 10;//将整型的a转化为字符串格式存储在字符串arr当中虽然itoa函数和sprintf函数都能完成转化,但是在两个函数在转化时,都需要先给出保存结果的空间,而空间的大小是不太好界定的,除此之外,转化格式不匹配时,可能还会得到错误的结果甚至程序崩溃。在C++中,我们可以使用stringstream类对象来避开此问题。

2025-05-18 10:41:57 890 1

原创 Linux任务管理与守护进程

每当有一个用户登录Linux时,系统就会创建一个会话(session)任何进程都可以被设置为前台进程,只要前台进程被干掉系统会自动的将bash放到前台变成前台进程我下面写了一个死循环,创建一个文件 test.cc 测试它被干掉之后bash进程是否会自动顶替它可以看到在a.out运行期间不管我们输入多少次指令都是没有响应的,原因就是此时的前台进程已经不是bash了,当我们使用ctrl + c。

2025-05-16 19:10:59 779

原创 STL,智能指针和线程安全&&自选锁&&读者写者问题

不是.原因是, STL 的设计初衷是将性能挖掘到极致, 而一旦涉及到加锁保证线程安全, 会对性能造成巨大的影响. 而且对于不同的容器, 加锁方式的不同, 性能可能也不同(例如hash表的锁表和锁桶). 因此 STL 默认不是线程安全. 如果需要在多线程环境下使用, 往往需要调用者自行保证线程安全.

2025-05-14 14:25:40 637

原创 网络套接字(二)

与UDP相比,TCP是流式的,多了一个监听。

2025-05-14 13:41:45 1033

原创 unordered_map和unordered_set的介绍和使用

方式一: 指定key和value的类型构造一个空容器。//构造一个key为int类型,value为double类型的空容器方式二: 拷贝构造某同类型容器的复制品。//拷贝构造同类型容器um1的复制品方式三: 使用迭代器拷贝构造某一段内容。//使用迭代器区间构造方式一: 构造一个某类型的空容器。//构造int类型的空容器方式二: 拷贝构造某同类型容器的复制品。//拷贝构造同类型容器us1的复制品方式三: 使用迭代器拷贝构造某一段内容。//构造string对象某段区间的复制品。

2025-05-14 12:15:50 932

原创 网络编程套接字(一)

如果一台主机上的数据要传输到另一台主机,那么就应该作为该数据传输时的。但仅仅知道目的IP地址是不够的,当对端主机收到该数据后,对端主机还需要对该主机做出响应,因此对端主机也需要发送数据给该主机,此时对端主机就必须知道。因此一个传输的数据当中应该涵盖其和,目的IP地址表明该数据传输的目的地,源IP地址作为对端主机响应时的目的IP地址。在数据进行传输之前,会先完成数据的封装,其中在网络层封装的IP报头当中就涵盖了源IP地址和目的IP地址。

2025-05-05 11:55:42 1014 9

原创 线程池&&单例模式

单例模式是一种 "经典的, 常用的, 常考的" 设计模式.IT行业这么火, 涌入的人很多. 俗话说林子大了啥鸟都有. 大佬和菜鸡们两极分化的越来越严重. 为了让菜鸡们不太拖大佬的后腿, 于是大佬们针对一些经典的常见的场景, 给定了一些对应的解决方案, 这个就是 设计模式。

2025-04-26 22:24:05 1300

原创 哈希的应用 ——> 布隆过滤器

我们在使用新闻客户端看新闻时,它会给我们不停地推荐新的内容,它每次推荐时要去重,去掉 那些已经看过的内容。问题来了,新闻客户端推荐系统如何实现推送去重的?用服务器记录了用 户看过的所有历史记录,当推荐系统推荐新闻时会从每个用户的历史记录里进行筛选,过滤掉那 些已经存在的记录。如何快速查找呢?

2025-04-25 11:39:06 850

原创 【STL】bitset(位图) 的介绍,使用,模拟实现

给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中?将这一堆数进行排序,然后通过二分查找的方法判断该数是否在这一堆数中。将这一堆数插入到unordered_set容器中,然后调用find函数判断该数是否在这一堆数中。单从方法上来看,这两种方法都是可以,而且效率也不错,第一种方法的时间复杂度是O (NlogN) ,第二种方法的时间复杂度是O(N)。但问题是这里有40亿个数,若是我们要将这些数全部加载到内存当中,那么将会占用16G的空间,空间消耗是很大的。

2025-04-24 23:21:36 1005

原创 C++11 线程库

由于thread提供了移动赋值函数,因此当后续需要让该线程对象与线程函数关联时,可以以带参的方式创建一个匿名对象,然后调用移动赋值将该匿名对象关联线程的状态转移给该线程对象。线程函数的参数是以值拷贝的方式拷贝到线程栈空间中的,就算线程函数的参数为引用类型,在线程函数中修改后也不会影响到外部实参,因为其实际引用的是线程栈中的拷贝,而不是外部实参。当线程函数的参数类型为引用类型时,如果要想线程函数形参引用的是外部传入的实参,而不是线程栈空间中的拷贝,那么在传入实参时需要借助ref函数保持对实参的引用。

2025-04-23 21:45:53 1001

空空如也

空空如也

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

TA关注的人

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