自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(79)
  • 问答 (1)
  • 收藏
  • 关注

原创 DNS域名解析过程

首先浏览器发送解析请求,然后解析器(其实就是一段代码)发送对应的解析请求给本地DNS服务器,本地DNS服务器就会咨询根域名服务器,然后再咨询顶级域名服务器(.com域名服务器),最后咨询权威域名服务器(.bilibili.com域名服务器),于是本地DNS服务器就得到了IP地址,然后将IP地址返回给解析器,解析器再将IP地址返回给浏览器,因此浏览器就可以通过这个IP地址进行网页链接了。:将方便我们记忆的域名 解析 为便于计算机直接读取的IP地址。

2022-08-19 23:36:16 422 1

原创 ARP协议详解

ARP协议就是根据目标IP地址获取MAC地址的一种TCP/IP协议,主机会将包含目标IP地址的包广播到局域网上的所有主机,然后对应ip地址就会做出相应,发送相应包里面包含自己的Mac地址,收到之后并保存到本机的ARP缓存中,以供下次方便使用。

2022-08-19 23:19:38 1504

转载 编写程序求过点最多的直线所对应的斜率和截距

map中以斜率和截距的键值对作为键,点出现的次数为值。通过嵌套循环依次求出两点的截距和斜率,统计其出现的次数存放在这个map中。然后遍历map寻找值最大的那个键,将这个值和它的键输出。首先第一行给你一个数字n,表示一共有n个点,第二行之后依次是点的坐标。请你输出过这些点最多的那条直线的斜率和截距。

2022-08-19 21:20:48 506

原创 接口测试重点内容看这一篇就够了

有关接口测试的相关重点内容,以及使用Postman工具进行接口测试时的必会点。将其整理到当前文章中,以供大家学习。

2022-08-16 21:56:23 2464

原创 HTTP1.x , 2.0 , 3.0 版本之间的对比

1、采用短链接,每一次发送请求都要建立TCP的三次握手2、没有host头域,那么在一个IP地址下,如果有使用多个虚拟主机,它们共享一个IP地址,就会报错4003、不支持断点续传。

2022-08-06 11:38:21 303

原创 shell基础知识合集

shell是一个命令行解释器,它接收应用程序以及用户的命令,然后调用操作系统内核。所以外层应用程序是通过操作shell来操作内核,从而控制硬件,达到外层应用操作底层硬件的目的。(1)声明普通变量直接写出”变量名=变量值“即可,需要注意的是等号两边不能有空格(2)声明静态变量声明:readonly 变量,注意声明静态变量之后不能用unset来撤销变量(3)声明全局变量“ export 变量名 ”将变量声明为全局有效注:变量的定义规则(1)基本语法{Action;]}funname。......

2022-08-03 23:06:50 616

原创 C11新特性——auto、decltype类型指示符

(1)auto是让编译器通过初始值来推算变量的类型,因此auto定义的变量必须要有初始值。(2)auto可以在一条语句中声明多个变量,其中多个边的初始基本数据类型必须一样。(3)auto 会忽略掉顶层的const,保留底层的const。例如:(4) 设置一个类型为auto 的引用时,初始值中的顶层常量属性仍然保留。例如:2、decltype 类型指示符(1)decltype能够从表达式的类型推断出要定义的变量的类型,所以不一定用该表达式的值初始化变量。例如:编译器并不需要调用某个函数,而是可

2022-06-28 21:06:55 371

原创 C++的异常处理

异常处理是一种允许两个独立开发的程序组件在程序执行期间遇到程序不正常的情况时,相互通信的机制。在本文里面,我总结了异常处理的基本概念,包括在继承的情况下,异常处理的相关注意事项。......

2022-06-14 15:21:56 3286

原创 RTTI运行时刻类型识别

RTTI(运行时刻类型识别)允许“用指向基类的指针或引用来操纵对象”的程序能够获取到“这些指针或引用所指对象”的实际派生类型。在C++中,为了支持RTTI提供了两个操作符:dynamic_cast操作符和typeid操作符。(1)使用dynamic_cast操作符的原因:在某些情况下,不希望扩展类库,就不能增加虚拟成员函数,但是仍然希望可以增加功能的时候,就必须使用dynamic_cast。使用dynamic_cat来解决上述问题的一般思路是:首先在我们想要扩展的那个类库的定义中增加我们希望添进去的函数的声

2022-06-13 09:30:09 181

原创 “C++继承与多态”常见面试题

(注:以下内容是在阅读相关书籍以及课程学习之后的总结内容,如果错误,希望大佬指点!)1、解释一下C++的多态?首先,C++的多态机制是指:派生类对象的地址可以赋值给基类指针。对于通过基类指针调用基类和派生类中都有同名、同参数表的虚函数语句,编译时并不需要确定调用的这个函数是基类的函数派生类的,在程序运行到这条语句的时候,如果基类指针指向的是一个基类对象,则基类的虚函数被调用,如果基类的指针指向的是一个派生类的对象,则派生类的虚函数被调用。其次,多态性只存在子类继承层次中。另外C++中支持多态性的几种方

2022-06-10 21:02:02 1114

原创 总结:位置无关代码

通过位置无关代码(位置无关代码,简称:PIC,简而言之就是可以加载而无需重定位的代码),使得共享模块的代码被加载到内存的任何位置而无需链接器修改。这里还是就上述例子而言就是:共享单车不需要专门停放在指定的区域内,只要停放在人行道的路边任意位置都可以,不要管理人员进行专门的搬移。

2022-05-21 11:35:20 1018

原创 库打桩机制

1.编译时打桩2.链接时打桩3.运行时打桩

2022-05-19 20:09:27 1002

原创 总结C程序中常见的与内存有关的错误

1.引用错误的地址在日常的程序编写中,容易由于粗心出现的一个问题:没有映射到有真正意义的数据比如:scanf(“%d”,val);由于粗心导致我们将val的地址误写为val这个值,那么在执行scanf的时候,就会把val的这个值解释为地址并去寻找这个地址,然后去覆盖那个地址的值。2.读未初始化的内存刚接触C语言的同学总会如认为指针所指向的地址的值总是为0,其实并不是这样的,如果没有进行初始化,那么指针指向的地址的值是一个随机值,并不是03.内存越界(1)栈缓冲区溢出比如程序不检查输入串的大

2022-05-18 21:05:09 494 2

原创 在系统上运行程序的链接过程(详细)

链接器一般采用两步链接的方法:(1)空间与地址分配:扫描所有输入的目标文件,然后将符号表中所有的符号定义与符号引用收集起来放到全局部符号表中。获取输入目标文件段的长度,并将它们合并,计算出输出文件中各个段合并后的长度与位置,然后建立映射关系。(2)符号解析与重定位:读取输入文件中段的数据、重定位信息,进行符号解析与重定位、调整代码中的地址。1.静态链接1.1空间与地址分配1.1.1相似段合并对于输入的多个目标文件,链接器一般采用“相似段合并”的方法将相同性质的段合并到一起,如下图:1.1.2

2022-05-18 20:12:25 1652

原创 关于内存的布局、栈与堆的学习

1.程序的内存布局首先需要明确应用程序使用的内存空间里有四个“默认”区域:栈 用于维护函数调用的上下文(向低地址增长) 堆 用来容纳应用程序动态分配的区域(向高地址增长) 可执行文件映像 由装载器在装载时将可执行文件的内存读取或映射到这里 保留区 是对内存中收到保护而禁止访问的内存区域的总称 此外还有一个区域需要了解——动态链接库映射区:用于映射装载的动态链接库。注:程序出现“段错误”或者“非法操作,该内存地址不能read/write”的错误信息.

2022-05-16 15:33:56 564

原创 静态链接的学习笔记

链接器一般采用两步链接的方法:(1)空间与地址分配:扫描所有输入的目标文件,然后将符号表中所有的符号定义与符号引用收集起来放到全局部符号表中。获取输入目标文件段的长度,并将它们合并,计算出输出文件中各个段合并后的长度与位置,然后建立映射关系。(2)符号解析与重定位:读取输入文件中段的数据、重定位信息,进行符号解析与重定位、调整代码中的地址。1.空间与地址分配(1)相似段合并对于输入的多个目标文件,链接器一般采用“相似段合并”的方法将相同性质的段合并到一起,如下图:(2)符号地

2022-05-14 14:45:22 674

原创 对目标文件的深入学习

在之前写的文章“编译和链接”这篇中讲述了C语言程序经过预编译、编译生成目标文件,那么目标文件里面究竟是如何存储编译后的内容呢?本篇文章做以讲述。1.目标文件的格式目标文件是源代码经过编译之后但没有进行链接的中间文件,和可执行文件的内容与结构很相似,因此目标文件的格式和可执行文件格式几乎是一样的。在Windows下,称为PE_COFF文件格式,Linux下为ELF文件格式。注:ELF格式的文件有一下四类:①可重定位文件:此类文件包含代码和数据,可以被用来链接成可执行文件或共享目标文件。②共

2022-05-13 21:50:46 634

原创 C语言:关于动态内存的复习总结(分配器)

1.内存管理1.1内存分为三部分(1)栈区:存放局部变量。函数调用结束,栈上相应内容被销毁。(2)堆区:由malloc或者new分配的内存。由free或者delete决定生命周期,如果没有释放,会一直存在,直到程序结束。(3)数据区:存放全局变量、静态变量。(4)补充栈区和堆区的区别:①管理方式:堆区的空间需要程序员自己利用malloc函数申请,调用free函数释放的。而栈区的空间是程序进行分配与释放管理的。②增长方式:堆区的增长方式是通过低地址向高地址进行扩展的,是不连续的内存区域。而

2022-05-08 17:22:32 961

原创 C语言:关于文件的相关操作函数总结

1.文本文件与二进制文件的操作文本文件就是把每一个字符的ASCII码存放到文件中二进制文件就是把数据对应的二进制形式存储到文件中1.1打开文件:FILE* fopen(const char* filename,const char* mode);(1)函数参数: filename:文件名 mode:文件打开的权限,权限包括如下:模式 含义 “r” 只读 “w” 只写 “a” 文件末尾只写 “r+” 在读的基础上增加...

2022-05-03 19:23:12 2739 2

原创 简单实现线程池

1.线程池的基本概念2.使用线程池的目的3.线程池工作原理3.1主要组成:3.2工作情况:3.3代码实现:

2022-05-01 14:29:22 1469 2

原创 对象池的解释与剖析

1.对象池的概念所谓对象池,就是一个池子里面放了指定数量的对象(在代码实现过程中使用链表将指定数量的对象串起来),我们需要使用的时候直接从池子中取出对象,使用完毕之后将对象还给池子,这个过程并不需要调用者创建对象或者销毁对象。对象池被较多的应用于游戏开发的场景中,比如在制作子弹射击的时候,每一次射击的子弹都被new出这样一个对象,消耗内存资源,当子弹射击到对应的物体上,在屏幕中不需要显示子弹了,(这个过程所需的时间往往很短),所以就需要再次释放,这样短时间内不断重复地创建和析构对象会使得程序的效率很低并

2022-04-23 23:32:36 3125 1

原创 关于死锁问题的基本概念总结

1、死锁产生的原因:是由进程请求和占有资源引起的2、死锁产生的必要条件:(1)互斥条件:指的是某一个临界资源只能被一个进程占有,如果其他进程想要使用该资源必须等待该临界资源被释放才能使用(2)请求和保持条件:指的是进程在请求其他资源的时候并不释放自身所拥有的资源(3)不可剥夺条件:指的是该进程自身所拥有的资源只能是程序用完之后进行释放,其他进程不可以剥夺该进程的资源,即使该进程此时可能并不运行(4)环路条件:一组进程{P1,P2……Pn}的资源占有情况与请求资源的情况构成了一个环形链

2022-04-17 19:46:16 764

原创 散列表查找(哈希表)

1、散列表(哈希表)的概述(1)散列技术:通过关键字直接找到记录的存储位置(此过程不需要进行比较)。(2)存储位置=f(关键字):每一个关键字对应一个存储位置,f成为散列函数,也叫哈希函数。对于存储位置=f(关键字),我理解的就是:一元线性方程y=f(x),每一个x都能取得对应的y值,这里的x就相当于关键字,y相当于存储位置,这个一元线性方程就相当于哈希函数.(3)散列表查找步骤:存放步骤:通过散列函数计算散列地址,把相关记录放到计算出来的散列地址中查找步骤:通过散列函数计算散列地址,在这个

2022-04-15 21:30:10 2744 2

原创 C++编程之单例模式

1.线程安全的方式#include <iostream>#include <thread>using namespace std;//1、线程安全的情况class Object{private: int value; static Object instance;//静态变量需要类外初始化 static int num;private: Object(int x = 0) :value(x) {}//构造函数设为私有,外部函数无法访问 Object(co

2022-02-28 23:56:16 1293

原创 TCP协议和UDP协议

1.传输控制协议TCP1.1TCP的主要特点:1.1.1面向连接的运输层协议socket部分讲述tcp连接的建立tcp连接的释放tcp的有限状态机1.1.2每一条TCP连接只能有两个端点,每一条TCP链接只能是点对点的(一对一)1.1.3TCP提供可靠交付的服务可靠传输的工作原理可靠传输的实现流量控制拥塞控制1.1.4TCP提供全双工通信1.1.5面向字节流流式服务的特点1.2与TCP有关的面试问题2.用户数据报协议UDP2.1UDP协

2022-02-19 13:02:22 25072 30

原创 左值、右值

左值、右值1.基本概念2.左值引用、右值引用3.移动构建:1.基本概念(1)左值:可以取它的地址右值:不可以取它的地址int main(){ //int& a=10;//错误:左值引用不能引用一个常量,左值引用等价于:int* const(常性指针), const int& a=10;//正确 /* 等价于: int tmp=10; const int* const a=&tmp; */}(2)int fun

2022-02-12 10:49:29 612

原创 C++编程语言关于模板的学习笔记

C++编程语言关于模板的学习笔记1.模板函数1.1基本概念1.2模板函数推演示例:1.3区分完全泛化、部分特化以及完全特化1.4注意点:2.模板类2.1模板类编译时的推演规则2.2可以有非类型,并且当我们的N为不同的值的时候,对象类型也会不同2.3类模板中函数的编译问题2.4模板类型参数可以赋默认值2.5模板类型参数可以有多个2.6什么时候是模板类型2.7类型萃取问题引入1.模板函数1.1基本概念模板是在编译时期产生代码,它的执行并不是宏的替换,而是重命名规则//传参后,模板函数编译时候如下,而不是

2022-02-12 10:03:24 783

原创 C++函数重载问题

函数的原型 :返回类型+函数名称+参数列表(形参类型和形参的个数)那么问题来了:为什么C++可以进行函数的重载呢?而C语言却不可以呢?

2022-02-12 09:25:48 1026

原创 Linux线程学习笔记

1.线程的相关概念1.1线程的概念线程是进程内部的一条执行序列或执行路径,一个进程可以包含多条线程。1.2线程的实现方式Linux把所有的线程都当作进程来实现。线程有自己的进程描述符以及堆栈空间,只是与其他一些进程共享某些资源,比如:地址空间,数据段。所以线程的创建和普通进程类似。线程的实现方式有三种:①内核级线程②用户级线程③组合级线程1.3进程与线程的区别摘自:线程和进程的区别(面试必备)区别主要概括为四点:①内存空间层面:进程有独立的堆栈空间和数据段,启动新的进程就会分配

2022-02-10 21:33:37 840

原创 进程间通信

1.管道管道用来在两个进程之间传递数据。1.1有名管道有名管道可以在任意两个进程之间通信利用mkfifo + 文件名 来促使系统调用创建管道文件#include <sys/types.h>#include <sys/stat.h>//filename 是管道名 mode 是创建的文件访问权限int mkfifo(const char *filename, mode_t mode)**示例1:**进程 a 将从键盘获取的数据循环传递给另一个进程 b//a.c 从屏

2022-02-08 19:28:24 782 1

原创 Linux中信号的使用

1、信号的基本概念信号是系统响应某个条件而产生的事件,进程接收到信号会执行相应的操作。2、修改信号的相应方式——signal()利用signal()可以将指定的信号修改为以下三种忽略信号:SIG_IGN默认处理:SIG_DFL自定义的:自己写的信号处理函数示例1:例如下面这段程序表明将SIGINT(键盘按下ctrl+c时,产生该信号)信号修改为自定义的fun处理函数#include<stdio.h>#include<stdlib.h>#include<un

2022-02-05 15:01:26 1485

原创 顺序表与链表的区别

什么时候该用顺序表?如果需要高效的随机存取,不在乎插入和删除的效率(很少进行插入和删除操作)就是选v用顺序表。此外顺序表具有空间局部性,如果一个存储器的位置被访问,那么将来它附近的位置的数据也会被访问,会降低程序执行的事件,提高程序执行的效率。什么时候该使用链表?如果需要大量的删除和插入操作,随机存取很少使用就是选用链表

2022-02-04 14:28:46 483

原创 linux进程管理

——本篇文章参考《LINUX内核设计与实现 第三版》完成进程是正在执行的程序以及它所包含的资源的总称。这里的资源不仅包括代码,还包括:打开的文件、挂起的信号、内核内部数据、处理器状态、地址空间、一个或者多个执行线程、存放全局变量的数据段等其他资源。(需要注意:程序本身并不是进程,实际上可能存在两个或者多个不同的进程执行同一个程序)线程是进程中活动的对象,也是内核调度的对象。对于linux而言,线程是一种特殊的进程。1、进程描述符及任务结构进程存放在名为任务队列(task list)的双向循环链表

2022-02-02 14:58:33 1899 2

原创 编译和连接

编译和连接1、预编译2、编译2.1词法分析2.2语法分析2.3语义分析2.4中间代码2.5目标代码生成与优化3.汇编4、静态链接4.1基本概念4.2静态链接的基本过程和作用:摘自《程序员的自我修养》,有所改动—————————————————————————————————————————————————————————————在我们平时编译程序的时候,比如下面的代码,当我们在windows系统下使用编译软件,比如VS2022进行调试的时候,看似简单,我们只需要点击“本地windows调试器”,我们的

2022-01-28 15:51:12 1631

原创 基于C、C11标准下静态变量的理解

基于C、C11标准下静态变量的理解1、静态变量的特点1.1、什么时候定义静态局部变量:1.2、什么时候定义全局变量:2、类中与static有关的问题2.1类中定义静态成员属性2.2类中定义静态成员方法1、静态变量的特点加了stack关键字之后变为静态变量,就会存放在数据区,值初始化一次生存期从当前源文件开始到当前源文件结束静态成员变量必须类外初始化,定义这个静态成员变量的类所实例化的所有对象会共享这一个静态成员变量,并且静态成员变量的大小不包含在对象的大小中,原因是:在数据区,不在栈区。静态成员变量

2022-01-23 20:49:24 311

原创 git相关操作及命令

1、基本概念:git的代码托管方式(上面是服务器端,下面是本地的),本地也保存以往的版本svn的代码托管方式,其中本地只保存最新的版本分支结构:2、有关git 的操作2.1本地的git基本操作合并分支如下:上述截图显示无法合并的原因在于:主分支的代码已经删除了部分,但是dev分时的代码中仍保留删除的那部分代码,因此git比较疑惑已经删除的恶那部分代码到底是删除还是保留:因此此时打开Main.c程序显示如下:修改之后提交再次合并:创建分支并删除分支:2.2本地版

2022-01-22 18:49:49 381

原创 详细讲述C++各种运算符重载

1、等号运算符重载我们需要注意的是,当我们不写等号运算符重载的时候,系统会默认生成浅赋值形式等号运算符重载,所谓的浅赋值就是将目标对象的成员属性直接赋值给当前对象(可以参考深拷贝和浅拷贝,在我的“C++——拷贝构造函数详解”这篇文章中有详细讲解)。Object {public://其他的构造函数、析构函数不是本篇文章重点,省略。 void operator=(const Object& obj) { this->value=obj.value;

2022-01-22 18:46:09 2708 1

原创 基础数据结构——八大排序详解

1、排序的分类:内排序:排序的整个过程中,待排序的所有记录全部放在内存中外排序:由于排序的记录个数太多,不能同时放在内存,整个排序需要在内外存之间交换数据才能进行

2022-01-21 20:26:22 9225 26

原创 sed用法介绍

1、sed命令介绍就是将原来的文件通过sed命令进行相应的修改,比如插入几行数据或者删除数据等,然后生成一个新的文件,但是源文件的内容不变。2、常用命令举例:2.1插入和附加(1)“sed ‘3i\sunny’ file > newfile”,这里面的3i表示在第三行写入(2)“sed ‘3a\rainy’ file > newfile”,这里面的3a表示在第三行后面附加(3)“sed ‘2,4i\abab’ file”,给第2行第三行第四行插入abab,然后把之前第2、3、4

2022-01-17 13:29:27 2189

原创 写脚本必用命令——awk命令的讲解

写脚本必用命令——awk命令的讲解1、awk使用示例2、处理规则:3、使用awk对某个命令结果进行提取awk:对文件里面的内容进行过滤,提取或者生成报文(结果)来让用户看。它回读取一个源文件,然后把榕湖想要的信息呈现出来。1、awk使用示例示例1:使用awk命令将一个文件中的整数部分提取出来,存到另外一个文件中。如果我们使用开发语言也可以,虽然执行效率高,但是开发速度很慢,使用awk命令就会很快很方便。awk命令解释如下:示例2:提取passwd文件里面的用户名 uid输出awk命令中

2022-01-13 18:46:23 1071

功能测试重点概念归纳总结:.md

内容总结自黑马程序员功能测试的相关课堂笔记,发布于此方便大家学习。

2022-08-16

空空如也

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

TA关注的人

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