- 博客(108)
- 收藏
- 关注
原创 mySQL
DDL 主要用于定义和管理数据库结构,包括创建、修改和删除数据库对象。// create) character set 字符集 collate 校验规则 engine 存储引擎;field 表示列名datatype 表示列的类型character set 字符集,如果没有指定字符集,则以所在数据库的字符集为准collate 校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准id int,name varchar(20) comment '用户名',
2025-02-10 10:19:24
736
原创 STL-空间配置器
定义一个类,通常继承自std::allocator或直接实现内存管理功能。实现allocate方法,用于分配指定大小的内存块。实现deallocate方法,用于释放已分配的内存块。在容器模板参数中指定自定义的空间配置器。// 使用自定义空间配置器的vector std :: vector < int , SimpleAllocator < int >> vec;
2025-02-04 10:40:28
960
原创 c++智能指针
智能指针是一种特殊的类模板,用于管理动态内存资源。它通过封装原始指针,并在其生命周期内自动管理内存释放,从而避免了手动内存管理的复杂性和潜在错误(如内存泄漏、双重释放等)。智能指针的设计基于RAII理念,确保资源在对象生命周期结束时自动释放。在智能指针发展的过程中,C++98的auto_ptr:C++98标准引入了auto_ptr,这是智能指针的早期实现。auto_ptr的设计目的是在对象被销毁时自动删除它所指向的内存。然而,auto_ptr。
2025-02-02 10:01:16
865
原创 深入理解字符编码
在这篇文章中,我们将深入探讨字符编码在Qt中的重要性,以及如何正确使用它来避免乱码问题。首先,让我们分析一段Qt代码,这段代码在中文环境下能够正常显示,但在英文环境下可能会出现乱码。计算机中所有文件,无论是文本还是视频文件,都是由一系列 0 到 255 的数字构成,这个数字序列称为字节流。在表示字符串时,字符会被映射为字节。ASCII是一种常见的编码规则,在其编码中,0-127 之间的数字用于表示字符,128-255 之间的数字几乎没有使用。
2024-08-02 11:03:40
966
原创 BOOST_SREATCH
Boost是一个由C++社区开发的开源库,为C++语言标准库提供扩展。这个库由C++标准委员会库工作组成员发起,旨在提供大量功能和工具,帮助C++开发者更高效地编写代码。Boost库强调跨平台性和对标准C++的遵循,因此与编写平台无关,是C++标准化进程的重要开发引擎之一。但是BOOST没有站内的搜索引擎,我们在使用想快速查找信息的时候十分不方便,所以我们自己动手实现一个。
2024-06-01 16:57:31
671
原创 I P协议
4个字节的32 bit值以下面的次序传输:首先是 0~7 bit,其次8~15 bit,然后1 6~23 bit,最后是24~31 bit。这种传输次序称作 big endian字节序。由于TCP/IP首部中所有的二进制整数在网络中传输时都要求以这种次序,因此它又称作网络字节序。以其他形式存储二进制整数的机器,如little endian格式,则必须在传输数据之前把首部转换成网络字节序。一个IP数据报由首部和数据部分组成,首部的前一部分是固定的20个字节,后面部分是可选字段,其长度是可变的。
2024-05-31 14:25:37
4890
原创 TCP协议
TCP虽然是面向字节流的,但TCP传送的数据单元是报文段。TCP segment由一个固定的20字节的头再加上Offset偏移的多个字节构成。Offset占4个比特位,基本单位是4字节,TCP首部最大能表示2^4 * 4 =60字节。Sequence Number是包的序号,范围是[0,2^32 - 1]不断循环,TCP传输的每一个字节都按顺序编号,传输的字节流在建立链接的时候要确认初始的序号,可以解决网络包乱序问题。
2024-05-29 15:30:00
850
原创 UDP协议
无连接:知道对端的IP和端口号就直接进行传输, 不需要建立连接不可靠: 没有确认机制, 没有重传机制;如果因为网络故障该段无法发到对方, UDP协议层也不会给应用层返回任何错误信息;面向数据报: 不能够灵活的控制读写数据的次数和数量,应用层交给UDP多长的报文,UDP就照样发送,所以应用程序必选好报文的大小。
2024-05-26 20:12:19
701
原创 http协议
超文本传输协议(HTTP)是一个用于传输超媒体文档(例如 HTML)的应用层协议。它是为 Web 浏览器与 Web 服务器之间的通信而设计的,但也可以用于其他目的。HTTP 遵循经典的客户端—服务端模型,客户端打开一个连接以发出请求,然后等待直到收到服务器端响应。HTTP 是无状态协议,这意味着服务器不会在两个请求之间保留任何数据(状态)。学习HTTP要学习的点HTTP是一种应用层的协议,通过 TCP,或者是TLS——一种加密过的 TCP 连接——来发送,当然,理论上来说可以借助任何可靠的传输协议。
2024-05-26 14:25:26
750
原创 c++特殊类的设计
如果单例对象构造十分耗时或者占用很多资源,比如加载插件, 初始化网络连接,读取文件等等,而有可能该对象程序运行时不会用到,那么也要在程序一开始就进行初始化,就会导致程序启动时非常的缓慢。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息,这种方式简化了在复杂环境下的配置管理。一个类只能创建一个对象,即单例模式,该模式可以保证系统中该类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。
2024-05-22 08:59:56
670
原创 c++11
C++11是C++编程语言的一个版本,它是ISO/IEC 14882:2011标准的简称,由国际标准化组织(ISO)和国际电工委员会(IEC)旗下的C++标准委员会(ISO/IEC JTC1/SC22/WG21)于2011年8月12日公布,并于2011年9月出版。C++11是C++98发布后13年来的第一次重大修正,也是C++编程语言的第三个官方标准。C++11引入了很多新特性,例如类型推导(auto关键字)、Lambda表达式、线程库、列表初始化、智能指针、右值引用、包装器等。
2024-05-17 15:00:00
687
原创 socket编程
网络字节序是指多字节变量在网络传输时的表示方法,它采用大端字节序的表示方式。大端字节序是指将高序字节存储在起始地址,而低序字节存储在后续地址。
2024-05-12 18:28:49
960
原创 STL-Hashtable
hashtable是通过某种函数(hashFunc)使元素的存储位置与它的关键码之间能够建立一一映射的关系,这样在查找的时候就可以很快的找到该元素。直接定制法:取关键字的某个线性函数为散列地址:Hash(Key)= A*Key + B优点:简单、均匀 缺点:需要事先知道关键字的分布情况使用场景:适合查找比较小且连续的情况除留余数法:设散列表中允许的地址数为m,取一个不大于m,但最接近或者等于m的质数p作为除数,按照哈希函数:Hash(key) = key% p(p
2024-05-12 13:46:11
760
原创 STL-Set&map
大家好,我是jiantaoyab,我们将进入到C++STL 的学习。STL在各各C++的头文件中,以源代码的形式出现,不仅要会用,还要了解底层的实现。与map/multimap不同,map/multimap中存储的是真正的键值对<key, value>,set中只放value,但在底层实际存放的是由<value, value>构成的键值对。set中的元素不可以重复(因此可以使用set进行去重)。multiset能插入重复的值,如果查找的话找的第一个节点是中序遍历的第一个节点。
2024-05-11 12:44:44
665
原创 Linux线程
创建一个新线程的代价要比创建一个新进程小得多与进程之间的切换相比,线程之间的切换需要操作系统做的工作要少很多线程占用的资源要比进程少很多,能充分利用多处理器的可并行数量在等待慢速I/O操作结束的同时,程序可执行其他的计算任务计算密集型应用,为了能在多处理器系统上运行,将计算分解到多个线程中实现,I/O密集型应用,为了提高性能,将I/O操作重叠。线程可以同时等待不同的I/O操作。
2024-05-01 22:34:44
1009
2
原创 搜索二叉树模拟实现
大家好,我是jiantaoyab,在学习map和set之前,先来认识一下BST,搜索二叉树(Binary Search Tree,简称BST)是一种特殊的二叉树,它的每个节点都包含一个可比较的键(key)以及相关联的值。对于树中的每个节点X,其左子树中所有节点的键都小于X的键,而其右子树中所有节点的键都大于X的键。搜索二叉树的主要应用之一是高效地查找、插入和删除数据项。
2024-05-01 16:31:08
369
原创 Linux信号
大家好,我是jiantaoyab,本篇文章将给大家介绍信号,在认识信号之前,先看看什么是。平时在Linux下运行程序,当我们想终止这个程序可以在键盘下按下[ctrl + c]就会终止程序,程序会停止是因为收到信号,所以信号是进程之间事件异步通知的一种方式,属于软中断。信号类似硬件中断,但没有优先级,内核平等的对待所有的信号。每个信号都有一个编号和宏定义的名称,这些宏定义可以在signal.h中找到。
2024-04-24 20:57:41
884
原创 系统中断浅谈
大家好,我是jiantaoyab,本篇文章给大家介绍中断,我们可以把操作系统理解成一个“死循环”,它本身什么都做不了,是被动工作的,得用事件来驱动,这个事件是以中断形式通知操作系统的。
2024-04-24 15:08:36
1006
原创 c++多态
被virtual修饰的函数就称为虚函数,这里的virtual和继承解决菱形继承用的virtual含义是不一样,只是用了同一个关键字。一会在多态的原理会更详细的介绍。
2024-04-21 23:45:10
945
原创 Linux管道共享内存
当没有数据可读时1.O_NONBLOCK disable:read调用阻塞,即进程暂停执行,一直等到有数据来到为止。2.O_NONBLOCK enable:read调用返回-1,errno值为EAGAIN。当管道满的时候1.O_NONBLOCK disable: write调用阻塞,直到有进程读走数据2.O_NONBLOCK enable:调用返回-1,errno值为EAGAIN。
2024-04-20 20:14:41
863
原创 c++IO
大家好,我是jiantaoyab,本篇文章给大家介绍c++中文件操作。先回忆一下c语言文件操作再看看c++中流的概念,是对一种有序连续且具有方向性的数据(单位可以是bit,byte,packet 的抽象描述。C++流是指信息从外部输入设备(如键盘)向计算机内部(如内存)输入和从内存向外部输出设备(显示器)输出的过程。这种输入输出的过程被形象的比喻为“流”。它的特性是:有序连续、具有方向性。为了实现这种流动,C++定义了I/O标准类库,这些每个类都称为流/流类,用以完成某方面的功能。
2024-04-20 14:39:07
708
原创 c++继承
大家好我是jiantaoyab,本篇文章给大家介绍继承。继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。继承的方式有访问限定符一样有三种,分别是public、protected、private。基类时,基类的成员也是派生类的成员,基类的成员也是派生类的成员,基类的。
2024-04-19 20:00:00
1208
原创 Linux读写文件
学习了文件系统,就能理解为什么说Linux下一切皆文件。在c语言的学习中我们可以使用fopen()函数对文件进行操作。FILE在c语言上是一个结构体,包含了文件操作的基本属性,对文件的操作都要通过这个结构的指针来进行。上面提到的这些函数都是库函数,而像open()、close()、read()、write()都是属于系统提供的接口。
2024-04-18 18:44:22
1308
原创 STL-Stack&Queue
我们将进入到C++STL 的学习。STL在各各C++的头文件中,以源代码的形式出现,不仅要会用,还要了解底层的实现。stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。
2024-04-18 13:50:04
644
原创 内存分页分段
在段式内存中,当申请内存的时候就划分一块内存给它,假如一个空间有4096MB大小内存,实际使用了3000MB,假如想运行一个程序是1024MB大小的看起来是能满足,但是数据段或者代码段对于内存的要求必须是连续了,实际的物理内存占用是非常碎片化的,所以不一定能满足这个程序的要求。为了解决这个问题,提出了分页的管理方式。把内存切分成等大的页面,常见的页面大小是4096,也就是2^12字节,这就是一个访问单位。寻找一个分页只需要知道高20位就可以了,低12位可以忽略(全是0)。
2024-04-13 14:30:00
1122
原创 刷题之动态规划-两个数组
大家好,我是jiantaoyab,开始刷动态规划的两个数组类型相关的题目。这道题目和上一道题目很像,不过是在数组中最长公共的子序列。这里的*是根据前面的字符来匹配的,不能单独使用。
2024-04-13 09:14:46
270
原创 实模式和保护模式
GDT只是一个段描述类型的数组,用于内存的寻找,为了对内存区域进行保护,将段描述符号设计成三部分。LDT和GDT类似,可以理解成GDT为1级描述符表,LDT为2级描述符表。LDT不在GDT中,GDT包含LDT描述符一个指向LDT起始地址的指针。
2024-04-10 14:02:41
792
原创 刷题之动态规划-子序列
大家好,我是jiantaoyab,开始刷动态规划的子序列类型相关的题目,子序列元素的相对位置和原序列的相对位置是一样的。在(0,i-1)中取一个j,是数对链的话得满足pairs[j] [1] < pairs[i] [0]dp[i]: 表示以i位置为结尾的最长数对链的长度。
2024-04-08 16:14:29
269
原创 Linux环境变量
最大的差异就在于会不会被子进程继承继续用,当我们登录Linux的时候,我们获取的bash的一个独立的子进程,当我们执行一个命令,是由这个bash衍生出的子进程帮我们去执行,所以如果我们在bash定一个自定义变量在进入子进程之后就不见了,当离开子进程回到bash这个变量才又出现。
2024-04-04 14:02:20
957
原创 刷题之动态规划-子数组
大家好,我是jiantaoyab,开始刷动态规划的子数组类型相关的题目。dp[i] : 到达 i 位置所有子数组中的最大和。初始化:新增加一个数初始化为0。返回值:dp表中最大的元素。
2024-04-03 09:51:06
285
原创 Linux进程PCB|创建|优先级
大家好,我是jiantaoyab,这篇文章给大家介绍进程。,程序是一个可执行的文件,而进程(process)是一个执行中的程序实例。利用分时技术,在 Linux操作系统上同时可以运行多个进程。分时技术的基本原理是把 CPU 的运行时间划分成一个个规定长度的时间片,让每个进程在一个时间片内运行。当进程的时间片用完时系统就利用调度程序切换到另一个进程去运行。因此实际上对于具有单个 CPU 的机器来说某一时刻只能运行一个进程。但由于每个进程运行的时间片很短,所以表面看来好象所有进程在同时运行着。
2024-04-02 14:58:30
647
原创 刷题之动态规划-多状态
*初始化:**dp[0] [0] = -prices[0];**返回值:**min(dp[n] [0],dp[n] [1],dp[n] [2]);f [i] : 到达 i 位置 nums[i] 选上,此时的最大点数。g [i] : 到达 i 位置 nums[i] 不选,此时的最大点数。返回值:max(f[n - 1], g[n -1]);**填表顺序:**从左到右,3个表同时填。初始化:f[0] = arr[0];和上一道题目是类似的。
2024-04-01 16:28:45
770
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人