自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MySQL-表的增删改查操作(DML)

之前我们学习了对数据库和表的DDL操作,今天我们来学习对表的增删改查操作(DML)。以下是本篇文章正文内容,下面案例可供参考。

2024-07-19 22:23:03 926

原创 MySQL-表的约束

以实际需求来讲,我们在插入表的时候,这里的姓名和学号是一定不能为空的,所以为了约束程序员在对表插入信息的行为,就可以使用添加是否允许一个字段的数据可以被设置为NULL。当从表student在向class_id插入1,2,3时都是非常顺利地插入进去的,但是当插入4的时候就报错了,这是因为我们的主表class只有1,2,3三个class_id,没有4这个班级编号,所以当从表student在插入4时才会报错,这就说明了这两个表已经建立了约束关系。从表为student,它有学生的所属班级和学生的个人信息。

2024-07-14 22:41:48 886

原创 MySQL-MySQL数据类型

本章主要详细讲解了MySQL数据类型,大多数情况都在图片中展现了出来。其中一个非常重要的结论是,在mysql中插入数据,如果插入的数据超出的该类型的取值范围,mysql是会直接将你这次的错误插入拦截的,所以mysql的数据是比较具有合法性的。

2024-07-13 18:42:28 873

原创 MySQL-对数据库和表的DDL命令

DDL(Data Definition Language),是数据定义语言的缩写,它是SQL(Structured Query Language)语言的一个子集,用于定义或修改数据库的结构。DDL主要包括创建(CREATE)、修改(ALTER)、删除(DROP)等操作。

2024-07-12 18:47:03 790

原创 MySQL-ubuntu环境下安装配置mysql

数据库本质上来讲其实就是一种存储数据的方式。可是为什么需要数据库来存储管理数据?我们学过Linux操作系统,存储数据我们可以使用磁盘文件,而对于打开的文件我们的OS也有对应的数据结构来进行管理,那为什么我们还需要数据库呢?这是因为OS对于文件内容的管理对于用户来讲,并不是那么的方便。我们如果要对文件中的内容来进行大量的增删查改操作,就需要我们上层的二次编码来进行操作。而数据库就很好的为用户解决了这一问题,它能更有效的管理数据。数据库可以提供远程服务,即通过远程连接来使用数据库,因此也称为数据库服务器。

2024-07-10 17:48:52 1001

原创 高级IO_多路转接之ET模式Reactor

Reactor模式是一种事件驱动的并发模型,它通过将事件处理逻辑与事件分发机制解耦,实现高性能、可扩展的并发处理。Reactor模式适用于大量短时连接或需要高效I/O处理的场景,如Web服务器、聊天服务器等。所以对于ET模式而言,就需要逼服务器一次性将所有缓冲区数据全部读完,也算是逼着你效率提高。今天我们所实现的Reactor是基于ET模式下的多路转接模式。以我们的epoll为例,我们的epoll默认是LT模式。ET模式:只有事件从无到有,从少到多的情况,才会提醒。LT模式:只要有事件就绪,就会不断提醒。

2024-07-07 04:38:52 355

原创 高级IO_多路转接之epoll

今天我们所要学习的epoll作为多路转接的后起之秀,会弥补之前所讲的select和poll的所有缺点,可以说从思想上,epoll与select、poll完全不同。

2024-07-05 00:20:45 551

原创 高级IO_多路转接之Poll

上一章我们学习了select,但是select作为早期的多路转接接口,缺点十分明显,于是又出现poll和epoll等接口,今天我们就来学习一下poll的使用提示:以下是本篇文章正文内容,下面案例可供参考poll相比较于select,弥补了两个缺点。不再需要繁琐地更新需要关心的fd和其对应事件。可关心的fd数量不再受其接口内置的数据结构大小限制,可以根据用户需求自由调整。但是仍然还有缺点,那就是每次进行一次poll都是一次从用户态拷贝数据到内核态的过程。

2024-07-04 15:04:11 375

原创 高级IO_多路转接之select

关于IO,我们已经用过了不少IO接口,从最简单的printf、scanf->C语言文件接口fprintf、fscanf->系统文件接口read、write->再到我们的系统网络套接字接口send、recv。这些接口见证了我们的学习历程,但是这些接口真的就只有读写吗?不光有读写,还有等。就像是我们使用scanf的时候,需要我们去输入一些字符,程序才能继续运行,否则就会一直阻塞住,这就是等的过程。实际等的过程,其实也可以理解为,等待资源准备就绪的过程。而当等的时候,该线程。

2024-07-04 00:17:58 1135

原创 内网穿透_frp的使用

由于NAT技术的存在,我们的内网设备是无法从内网直接与公网设备或者其他内网的设备进行连接的,所以,今天我们来学习一种内网穿透技术,来实现内网之间互相访问。其原理很简单,先让架设服务的内网服务器先与一台处于公网的主机建立连接,然后所有其他需要访问这台处于内网的服务器的客户端主机只需要连接那台公网主机,向公网主机发送服务请求数据,再由这台公网主机将你对应的数据转发至内网服务器暴露的端口中,而之后所有的数据通讯都要经过公网主机的转发,这就是内网穿透的原理。本次实验需要使用到frp工具。

2024-06-26 16:08:15 748

原创 Linux网络-网络层IP协议、数据链路层以太网协议、ARP协议、ICMP协议和NAT技术

上一章我们已经学习了传输层的TCP协议和UDP协议,本章我们来讲传输层的下一层,网络层IP协议。

2024-06-26 15:00:34 860

原创 Linux网络 - 再谈、详谈UDP和TCP协议

上一章我们已经学习了HTTPS协议,知道了HTTPS协议的基本原理。本章我们将回过头来重新深度讲解UDP协议和TCP协议,不能保证,不过大家可以想一想,就算服务端也再发一次ACK请求给客户端,那客户端要不要响应呢?如果又发送响应是不是就一直这么循环下去了?所以干脆我们就只需要三次握手就行了。MSL就是一段TCP报文数据在网络中最大生存时间。所以,等待2MSL的时间就可以在出现问题的时尽可能的让服务端有时间进行补发重传。

2024-06-21 00:53:41 884

原创 大学课设项目,Windows端基于UDP的网络聊天程序的服务端和客户端

本次项目可以作为之前内容的一个扩展,学会在Windows端进行网络通信。该项目需要用到的知识手段较多,在编写该项目的同时也可以对之前C++方面的知识进行一个不错的回顾。本次项目用到 Windows网络套接字编程,多线程,线程池,线程安全,互斥锁,IO流,文件管理,数据结构设计,序列化,反序列化,自定义协议,STL等相关知识和技术。提示:以下是本篇文章正文内容,下面案例可供参考。

2024-06-17 22:05:01 1550

原创 Linux-Https协议

之前我们学习了Http协议,也试着做了一个HttpServer。所以对于Http我们也有了一个比较清晰的认识。• 数字指纹(数据摘要),其基本原理是利用单向散列函数(Hash函数)对信息进行运算,生成一串固定长度的数字摘要。数字指纹并不是一种加密机制,但可以用来判断数据有没有被篡改。• 摘要常见算法:有MD5、SHA1、SHA256、SHA512等,算法把无限的映射成有限,因此可能会有碰撞(两个不同的信息,算出的摘要相同,但是概率非常低)。

2024-06-15 00:30:13 772

原创 Linux网络-HttpServer的实现

之前我们简单理解了一下Http协议,本章我们将在LInux下使用Socket编程自主完成一个HttpServer。可以做到接收Http报文数据,加以解析再向远端发送Http报文数据。之前写过很多遍的网络套接字编程代码就不再重复写了,这里直接写关于HttpServer的代码本章学习了如何搭建一个建议的httpServer,并通过浏览器进行访问。下一章我们将学习https协议。

2024-06-14 12:06:29 980 1

原创 Linux网络 - HTTP协议

上一章内容我们讲了在应用层制定了我们自己自定义的协议、序列化和反序列化。协议的制定相对来讲还是比较麻烦的,不过既然应用层的协议制定是必要的,那么肯定已经有许多计算机大佬们已经制定好了非常完善的协议了,我们今天就来学习我们日常生活经常会用到的HTTP协议。需要用到的软件为 postman,fiddler。这些都是知名的抓包工具。本章主要讲解了一下http协议中的url与请求报文和响应报文。下一章我们来讲解如何自己实现一个httpserver。

2024-06-11 17:39:21 465

原创 Linux网络 - json,网络计算服务器与客户端改进

本章内容主要对上一章的网络计算器客户端和服务器进行一些Bug修正与功能改进。并学习如何使用json库和daemon函数。

2024-06-06 01:36:53 507

原创 Linux网络-自定义协议、序列化和反序列化、网络计算服务器的实现和Windows端客户端

我们已经学会了Tcp、Udp网络传输协议,并且之前我们也实现了简易的聊天室和翻译器。我们知道,传输层是OS系统里就给我们写好的, 应用层才是我们自己需要去编写的,现在我们对应用层来进行一些初步的了解。在之前我们使用Tcp和Udp服务进行网络通信,我们一直都是以字符串的形式互相发送消息。那么我们就只能发送字符串吗?当然不是,Udp是基于数据流进行网络通信,Udp是基于字节流进行网络通信,虽然我们对字节流和数据流并没有一个特别清晰的认识,但是我们可以知道的是,我们其实是可以传各种各样的类型进行通行的。

2024-06-04 19:35:45 1143 1

原创 Linux网络-守护进程版字典翻译服务器

根据上章所讲的后台进程组和session会话,我们知道如果可以将一个进程放入一个独立的session,可以一定程度上守护该进程。

2024-06-02 16:57:33 418

原创 Linux系统-前台任务组,后台任务组

通过上述的知识内容,我们是否可以创建一个不会受任何终端影响的进程,只要我们的云服务器不关机,这个进程就不会被终止!这就是下一节课进程守护的内容,我们基于上节课的翻译字典服务再添加上上进程守护的功能。

2024-06-02 14:12:43 719

原创 Linux网络-使用Tcp协议进行网络通信并通过网络接口实现远端翻译

作用:处于listen状态的网络套接字将持续监听是否有其他网络套接字对本套接字进行链接,该接口函数会阻塞,直到有套接字进行链接,链接成功后将返回一个。简单了解一下Tcp协议,他与Udp协议都是传输层协议,而他与Udp协议的区别就是Tcp是有连接、可靠传输并且是面向字节流的一种协议。参数socklen_t *restrict address_len: 输出型参数,用于保存远端主机的套接字的长度。参数socklen_t address_len: 目标网络套接字的struct sockaddr的长度。

2024-06-01 02:29:50 1148

原创 Linux网络-Socket套接字_Windows与Linux端双平台基于Udp传输协议进行多线程跨平台的服务器与客户端网络通信的简易聊天室实现

由于我们习惯将IP地址 写成这样的格式xxx.xxx.xxx.xxx(例如192.168.0.1),而在网络层面,我们肯定是采用四字节的int来存储IP,所以有这么一个函数将一个xxx.xxx.xxx.xxx的格式的IP转换为四字节int。我们已经知道,内存中的多字节数据相对于内存地址有大端和小端之分, 磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小端之分, 网络数据流同样有大端小端之分. 那么如何定义网络数据流的地址呢?绑定这样的默认IP,就可以收到任意IP发来的消息。

2024-05-28 18:57:35 1031 25

原创 Linux网络_网络基础预备

OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范。

2024-05-28 14:55:22 497

原创 Linux-线程池

线程池主要是对之前内容的一个巩固,并且初步了解池化概念。

2024-05-19 01:31:05 605

原创 生产消费者模型-环形队列与信号量

之前我们使用互斥锁和条件变量实现过一个生产者消费者模型,那么那个生产消费者模型具有一个缺点那就是只能串形生产与消费。在某些环境与需求下,我们可以拥有比较大的数据空间,且我们的数据是批次分布在该空间中,我们是否可以让生产与消费并行呢?通过环形队列我们其实是可以实现的,并且我们本次学习尝试学习认识和如何使用信号量。信号量的本质其实就是一个计数器,他分别具有P操作和V操作,其中P操作可以简单的理解为计数器–,V操作可以简单的理解为计数器++。

2024-05-15 00:46:41 380

原创 C++_类型转换

对于这些类型转换,显示的还好些,隐式类型的转换就有些麻烦,因此C++提出了自己的类型转化风格,注意因为C++要兼容C语言,所以C++中还可以使用C语言的。实际上这是因为编译器的优化导致的,由于i为const属性,所以编译器在打印i时,直接将早已被保存在寄存器的i的初始值10进行打印了,并没有去访问内存。static_cast用于非多态类型的转换(静态转换),编译器隐式执行的任何类型转换都可用static_cast,但它不能用于两个不相关的类型进行转换。不相关就是像指针,int 等类型就是互相不相关类型。

2024-04-20 01:53:01 749

原创 C++_特殊类的设计和单例模式

拷贝只会放生在两个场景中:拷贝构造函数以及赋值运算符重载,因此想要让一个类禁止拷贝,只需让该类不能调用拷贝构造函数以及赋值运算符重载即可。拷贝只会放生在两个场景中:拷贝构造函数以及赋值运算符重载,因此想要让一个类禁止拷贝,只需让该类不能调用拷贝构造函数以及赋值运算符重载即可。懒汉模式区别于饿汉模式就是饿汉是程序一起的就创建的单例对象,但是懒汉则是程序运行一段时间后,需要创建再创建单例对象。这里提出一个疑问,像懒汉这种写法方式,我们的唯一实例new出来的,析构需不需要写一个delete来释放资源?

2024-04-17 16:38:55 954

原创 C++_智能指针

智能指针是一种采用RAII思想来保护申请内存不被泄露的方式来管理我们申请的内存,对于RAII,我们之前也已经有过接触,在学习异常和guard_mutex都有过接触RAII思想。今天我们将RAII运用到指针就是智能指针。提示:这里对文章进行总结:例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

2024-04-15 19:00:38 855

原创 C++异常

一般我们会在可能会发生异常的代码区尝试抛异常,也就是try的区域,当发生(检测到)异常后,就会跳转到catch区域,catch区域是为了尝试解决异常,即便无法解决,也不让异常终止整个程序,并记录日志信息方便debug。在有些场景下,有可能单个的catch不能完全处理一个异常,在进行一些校正处理以后,希望再交给更外层的调用链函数来处理,catch则可以通过重新抛出将异常传递给更上层的函数进行处理。不是的,可以有多个catch区,当有多个catch时,会匹配对应类型的catch进行跳转。会匹配最近的那一个。

2024-04-02 11:19:29 484

原创 C++_Function包装器和bind

到目前为止的学习,我们知晓了三种方式来传函数。

2024-04-01 04:27:02 316

原创 C++_Windows系统下如何创建多线程和阻塞队列

对于多线程,之前几章内容已经详细讲解了Linux环境下如何创建多线程,本章内容主要讲解Windows环境下多线程的创建和使用,对于多线程的基本概念在这里不做过多的补充。

2024-03-29 13:19:45 662

原创 Linux-使用阻塞队列实现生产者与消费者模型

参照日常生活中,购买商品的人群可以被称之为消费者,生产商品的工厂可以被称之为生产者,而在两者之间还存在超市被称之为交易场所。它们还存在三种关系,生产者与生产者之间是互斥关系,消费者与消费者之间也是互斥关系,消费者与生产者存在互斥/同步关系。这三种关系在多线程有着重要体现,通过我们之前所学习的互斥锁和条件变量可以反映这三种关系。今天我们就需要用我们的多线程知识来构建一个简单的生产者与消费者模型。

2024-03-23 10:03:22 334

原创 Linux-线程同步

上节课学习了线程互斥,这节课针对线程互斥内容在做进一步的补充和完善,学习线程同步的概念。提示:以下是本篇文章正文内容,下面案例可供参考。

2024-03-19 09:40:50 991

原创 Linux - 线程互斥和互斥锁

前几节课,我们学习了多线程的基础概念,这节课,我们来对线程互斥和互斥锁的内容进行学习。

2024-03-17 07:45:24 816

原创 Linux-多线程2 ——线程等待、线程异常、线程退出、线程取消和线程分离

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档。

2024-03-13 01:12:26 987 1

原创 LInux-多线程基础概念

从本章的多线程开始,我们开始进入Linux系统的尾声,所以,在学习多线程的过程中,我们也会逐步对之前的内容进行复习,以达到知识巩固的效果。

2024-03-07 17:18:17 1033

原创 Linux-信号3_sigaction、volatile与SIGCHLD

本章内容主要对之前的内容做一些补充。提示:以下是本篇文章正文内容,下面案例可供参考。

2024-03-04 19:25:08 1095 1

原创 Linux-信号2

上节课我们学习了信号产生到处理过程的现象以及信号的捕捉,这节课主要学习信号的保存。我们需要熟练使用以下函数。

2024-02-29 00:56:20 938

原创 LInux-信号1

本章主要讲信号的产生与处理以及信号的作用,再延展出core dump的相关概念,信号对于进程十分重要。

2024-02-22 03:09:32 913

原创 Linux-共享内存

在这之前我们已经学习了两种进程间通信方式:匿名管道和命名管道。从我们之前的学习已经知道,想让多个进程间进行通信就需要让他们一起看到同一份资源。匿名管道是通过fork子进程来让子进程继承父进程的fd。命名管道是通过生成命名管道文件,并一起打开管道文件。

2024-01-24 22:38:38 1369

空空如也

空空如也

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

TA关注的人

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