自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

欢迎来到jiantaoyab博客

学习过程的记录

  • 博客(104)
  • 收藏
  • 关注

原创 MAC帧

数据链路层的协议有很多,但是都有三个基本问题:封装成帧,透明传输和差错检测。

2024-06-01 19:48:56 1520

原创 BOOST_SREATCH

Boost是一个由C++社区开发的开源库,为C++语言标准库提供扩展。这个库由C++标准委员会库工作组成员发起,旨在提供大量功能和工具,帮助C++开发者更高效地编写代码。Boost库强调跨平台性和对标准C++的遵循,因此与编写平台无关,是C++标准化进程的重要开发引擎之一。但是BOOST没有站内的搜索引擎,我们在使用想快速查找信息的时候十分不方便,所以我们自己动手实现一个。

2024-06-01 16:57:31 584

原创 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 1252

原创 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 742

原创 c语言IO

老是忘记c语言IO操作,故写个文章记录一下。

2024-05-26 21:22:52 349

原创 UDP协议

无连接:知道对端的IP和端口号就直接进行传输, 不需要建立连接不可靠: 没有确认机制, 没有重传机制;如果因为网络故障该段无法发到对方, UDP协议层也不会给应用层返回任何错误信息;面向数据报: 不能够灵活的控制读写数据的次数和数量,应用层交给UDP多长的报文,UDP就照样发送,所以应用程序必选好报文的大小。

2024-05-26 20:12:19 542

原创 http协议

超文本传输协议(HTTP)是一个用于传输超媒体文档(例如 HTML)的应用层协议。它是为 Web 浏览器与 Web 服务器之间的通信而设计的,但也可以用于其他目的。HTTP 遵循经典的客户端—服务端模型,客户端打开一个连接以发出请求,然后等待直到收到服务器端响应。HTTP 是无状态协议,这意味着服务器不会在两个请求之间保留任何数据(状态)。学习HTTP要学习的点HTTP是一种应用层的协议,通过 TCP,或者是TLS——一种加密过的 TCP 连接——来发送,当然,理论上来说可以借助任何可靠的传输协议。

2024-05-26 14:25:26 696

原创 c++类型转换

强类型语言也称为强类型定义语言,是一种总是强制类型定义的语言。常见的强类型语言包括Java、C/C++、.NET等。

2024-05-22 15:30:00 894

原创 c++特殊类的设计

如果单例对象构造十分耗时或者占用很多资源,比如加载插件, 初始化网络连接,读取文件等等,而有可能该对象程序运行时不会用到,那么也要在程序一开始就进行初始化,就会导致程序启动时非常的缓慢。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息,这种方式简化了在复杂环境下的配置管理。一个类只能创建一个对象,即单例模式,该模式可以保证系统中该类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。

2024-05-22 08:59:56 633

原创 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 616

原创 socket编程

网络字节序是指多字节变量在网络传输时的表示方法,它采用大端字节序的表示方式。大端字节序是指将高序字节存储在起始地址,而低序字节存储在后续地址。

2024-05-12 18:28:49 886

原创 STL-Hashtable

hashtable是通过某种函数(hashFunc)使元素的存储位置与它的关键码之间能够建立一一映射的关系,这样在查找的时候就可以很快的找到该元素。直接定制法:取关键字的某个线性函数为散列地址:Hash(Key)= A*Key + B优点:简单、均匀 缺点:需要事先知道关键字的分布情况使用场景:适合查找比较小且连续的情况除留余数法:设散列表中允许的地址数为m,取一个不大于m,但最接近或者等于m的质数p作为除数,按照哈希函数:Hash(key) = key% p(p

2024-05-12 13:46:11 666

原创 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 601

原创 信号量&线程池&读者写者模型

大家好,我是jiantaoyab,本篇文章接着给大家介绍线程有关的信号量及线程池的基本理解。

2024-05-06 22:57:35 1158

原创 AVL树浅谈

大家好,我是jiantaoyab,本篇文章给大家介绍AVL树。

2024-05-06 18:28:00 715 4

原创 Linux线程

创建一个新线程的代价要比创建一个新进程小得多与进程之间的切换相比,线程之间的切换需要操作系统做的工作要少很多线程占用的资源要比进程少很多,能充分利用多处理器的可并行数量在等待慢速I/O操作结束的同时,程序可执行其他的计算任务计算密集型应用,为了能在多处理器系统上运行,将计算分解到多个线程中实现,I/O密集型应用,为了提高性能,将I/O操作重叠。线程可以同时等待不同的I/O操作。

2024-05-01 22:34:44 962 2

原创 搜索二叉树模拟实现

大家好,我是jiantaoyab,在学习map和set之前,先来认识一下BST,搜索二叉树(Binary Search Tree,简称BST)是一种特殊的二叉树,它的每个节点都包含一个可比较的键(key)以及相关联的值。对于树中的每个节点X,其左子树中所有节点的键都小于X的键,而其右子树中所有节点的键都大于X的键。搜索二叉树的主要应用之一是高效地查找、插入和删除数据项。

2024-05-01 16:31:08 324

原创 Linux信号

大家好,我是jiantaoyab,本篇文章将给大家介绍信号,在认识信号之前,先看看什么是。平时在Linux下运行程序,当我们想终止这个程序可以在键盘下按下[ctrl + c]就会终止程序,程序会停止是因为收到信号,所以信号是进程之间事件异步通知的一种方式,属于软中断。信号类似硬件中断,但没有优先级,内核平等的对待所有的信号。每个信号都有一个编号和宏定义的名称,这些宏定义可以在signal.h中找到。

2024-04-24 20:57:41 847

原创 系统中断浅谈

大家好,我是jiantaoyab,本篇文章给大家介绍中断,我们可以把操作系统理解成一个“死循环”,它本身什么都做不了,是被动工作的,得用事件来驱动,这个事件是以中断形式通知操作系统的。

2024-04-24 15:08:36 798

原创 c++多态

被virtual修饰的函数就称为虚函数,这里的virtual和继承解决菱形继承用的virtual含义是不一样,只是用了同一个关键字。一会在多态的原理会更详细的介绍。

2024-04-21 23:45:10 912

原创 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 805

原创 c++IO

大家好,我是jiantaoyab,本篇文章给大家介绍c++中文件操作。先回忆一下c语言文件操作再看看c++中流的概念,是对一种有序连续且具有方向性的数据(单位可以是bit,byte,packet 的抽象描述。C++流是指信息从外部输入设备(如键盘)向计算机内部(如内存)输入和从内存向外部输出设备(显示器)输出的过程。这种输入输出的过程被形象的比喻为“流”。它的特性是:有序连续、具有方向性。为了实现这种流动,C++定义了I/O标准类库,这些每个类都称为流/流类,用以完成某方面的功能。

2024-04-20 14:39:07 678

原创 c++继承

大家好我是jiantaoyab,本篇文章给大家介绍继承。继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。继承的方式有访问限定符一样有三种,分别是public、protected、private。基类时,基类的成员也是派生类的成员,基类的成员也是派生类的成员,基类的。

2024-04-19 20:00:00 1182

原创 STL-List

我们将进入到C++STL 的学习。STL在各各C++的头文件中,以源代码的形式出现,不仅要会用,还要了解底层的实现。

2024-04-19 12:09:55 1112

原创 Linux读写文件

学习了文件系统,就能理解为什么说Linux下一切皆文件。在c语言的学习中我们可以使用fopen()函数对文件进行操作。FILE在c语言上是一个结构体,包含了文件操作的基本属性,对文件的操作都要通过这个结构的指针来进行。上面提到的这些函数都是库函数,而像open()、close()、read()、write()都是属于系统提供的接口。

2024-04-18 18:44:22 1057

原创 STL-Stack&Queue

我们将进入到C++STL 的学习。STL在各各C++的头文件中,以源代码的形式出现,不仅要会用,还要了解底层的实现。stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。

2024-04-18 13:50:04 540

原创 内存分页分段

在段式内存中,当申请内存的时候就划分一块内存给它,假如一个空间有4096MB大小内存,实际使用了3000MB,假如想运行一个程序是1024MB大小的看起来是能满足,但是数据段或者代码段对于内存的要求必须是连续了,实际的物理内存占用是非常碎片化的,所以不一定能满足这个程序的要求。为了解决这个问题,提出了分页的管理方式。把内存切分成等大的页面,常见的页面大小是4096,也就是2^12字节,这就是一个访问单位。寻找一个分页只需要知道高20位就可以了,低12位可以忽略(全是0)。

2024-04-13 14:30:00 1011

原创 刷题之动态规划-两个数组

大家好,我是jiantaoyab,开始刷动态规划的两个数组类型相关的题目。这道题目和上一道题目很像,不过是在数组中最长公共的子序列。这里的*是根据前面的字符来匹配的,不能单独使用。

2024-04-13 09:14:46 243

原创 刷题之动态规划-回文串

大家好,我是jiantaoyab,开始刷动态规划的回文串类型相关的题目。

2024-04-10 15:09:28 566

原创 实模式和保护模式

GDT只是一个段描述类型的数组,用于内存的寻找,为了对内存区域进行保护,将段描述符号设计成三部分。LDT和GDT类似,可以理解成GDT为1级描述符表,LDT为2级描述符表。LDT不在GDT中,GDT包含LDT描述符一个指向LDT起始地址的指针。

2024-04-10 14:02:41 634

原创 刷题之动态规划-子序列

大家好,我是jiantaoyab,开始刷动态规划的子序列类型相关的题目,子序列元素的相对位置和原序列的相对位置是一样的。在(0,i-1)中取一个j,是数对链的话得满足pairs[j] [1] < pairs[i] [0]dp[i]: 表示以i位置为结尾的最长数对链的长度。

2024-04-08 16:14:29 246

原创 STL-Vector

vector()无参构造构造并初始化n个val拷贝构造使用迭代器进行初始化构造。

2024-04-08 15:30:00 1275

原创 Linux环境变量

最大的差异就在于会不会被子进程继承继续用,当我们登录Linux的时候,我们获取的bash的一个独立的子进程,当我们执行一个命令,是由这个bash衍生出的子进程帮我们去执行,所以如果我们在bash定一个自定义变量在进入子进程之后就不见了,当离开子进程回到bash这个变量才又出现。

2024-04-04 14:02:20 929

原创 刷题之动态规划-子数组

大家好,我是jiantaoyab,开始刷动态规划的子数组类型相关的题目。dp[i] : 到达 i 位置所有子数组中的最大和。初始化:新增加一个数初始化为0。返回值:dp表中最大的元素。

2024-04-03 09:51:06 258

原创 Linux进程PCB|创建|优先级

大家好,我是jiantaoyab,这篇文章给大家介绍进程。,程序是一个可执行的文件,而进程(process)是一个执行中的程序实例。利用分时技术,在 Linux操作系统上同时可以运行多个进程。分时技术的基本原理是把 CPU 的运行时间划分成一个个规定长度的时间片,让每个进程在一个时间片内运行。当进程的时间片用完时系统就利用调度程序切换到另一个进程去运行。因此实际上对于具有单个 CPU 的机器来说某一时刻只能运行一个进程。但由于每个进程运行的时间片很短,所以表面看来好象所有进程在同时运行着。

2024-04-02 14:58:30 602

原创 刷题之动态规划-多状态

*初始化:**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 731

原创 Disruptor

CPU 从内存加载数据到 CPU Cache 里面的时候,不是一个变量一个变量加载的,而是加载固定长度的 Cache Line。如果是加载数组里面的数据,那么 CPU 就会加载到数组里面连续的多个数据。对于类里面定义的单独的变量,就不容易享受到 CPU Cache 红利了。因为这些字段虽然在内存层面会分配到一起,但是实际应用的时候往往没有什么关联。于是,就会出现多个 CPU Core 访问的情况下,数据频繁在 CPU Cache 和内存里面来来回回的情况。

2024-03-30 21:01:06 995

原创 C++String类

在cplusplus中,对String有着下面的介绍。stringThestringcharandallocatortypes (see可以看到string类不是STL的容器,string类是basic_string类模板的实例化。为什么basic_string要设计成类模板呢?

2024-03-30 20:48:08 1122

原创 malloc是如何分配内存|malloc(1)分配多大内存|free释放内存,会还给操作系统吗?

大家好, 我jiantaoyab,这篇文章给大家介绍mallo和free面试中常问到的问题。

2024-03-29 23:30:03 1150

原创 刷题之动态规划-路径问题

大家好,我是jiantaoyab,开始刷动态规划的题目了,要特别注意初始化的时候给什么值。动态规划5个步骤我们用动态规划来解决优化一下,可以看到只需要三个变量也能完成这个操作。

2024-03-29 11:06:04 1219

空空如也

空空如也

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

TA关注的人

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