自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 多态及编译器实现

多态性:简单概括“一个接口,多种方法” 目的:接口重用,自适应调用实现方法 分为: 编译时多态(静态多态):重载函数 运行时多态(动态多态):虚函数实现 重写有两种,直接重写成员函数和重写虚函数,只有重写了虚函数的才能算作是体现了C++多态性。 注:覆盖也称重写 编译器实现: 当类中声明虚函数时,编译器会在类中生成一个虚函数表: (1)虚函数表是一个存储类成员函数指针的数据结构,它是一个类中所有虚成员函数的集合; (2)虚函数表是由编译器自动生成与维护的; (3)virtual成员函数会被编译器放入虚函数表

2021-08-20 10:08:21 203

原创 c++四种类型转换

const_cast 只能对指针或者引用去除或添加const属性。 static_cast 编译时处理 只有上行转换是安全的(上行转换:子类向基类的转换) dynamic_cast 运行时处理且只能用于含有虚函数的类 上行转换是安全的,下行转换会进行类型检查。 转换不成功:指针返回空,应用抛出异常。 reinterpret_cast 1.指针和整数之间的转换 2.不同类型的指针/成员指针/引用之间的转换 ...

2021-08-14 11:58:20 87

原创 强连通-Tarjan算法

在一次聚会中,教授们被要求写下自己认可哪位教授的学术成果(也可以写自己,且可能出现重复)。已知,如果教授 A 认可教授 B ,且教授 B 认可教授 C,那么即可视为教授 A 也认可教授 C。现在我们想知道有多少对教授是两两互相认可的? 输入描述: 第一行两个正整数,教授人数 n,以及认可关系总数 m ; 接下来 m 行,每行两个正整数 x 和 y,表示教授 x 认可教授 y(x , y可能相等且可能出现重复) 输出描述: 一行一个数字表示答案,即互相认可的教授有多少对。 题解 #include<io

2021-07-27 16:29:19 129

原创 SGI STL空间配置

大于128B的内存申请用一级空间配置器,直接使用malloc(),realloc()、free()函数。 对于小于128B的二级空间配置器,采用内存池技术。 注释:内存池=大内存+16个空闲链表(free-list) ①申请空间 ②对应的8字节的倍数在16个空闲链表找对应的区域。如果够了,直接结束。 ③如果没有找到,再申请20块数据库(一般),如果没有20块,能申请多少算多少。如果如果够了,直接结束。 注:这个阶段用refill重新充填空闲列表。 ④这里从内存池取空间给空闲链表是用chunk_alloc工作

2021-07-14 14:52:41 95

原创 段与页寻址

内存管理: 连续分配管理方式和非连续分配管理方式(基本分页存储管理、基本分页存储管理、段页式存储管理) 区别分页: 页: 1.是信息的物理单位 2.用户不可见 3.实现离散分配,提高内存利用率 段: 段是信息的逻辑单位 2.用户可见 3.更好满足用户的编程 基本分页存储管理: 注释: 1.页框=页帧=内存块=物理块=大小相等的分区; 2.每个进程建立一张页表(查页面存放的位置) 3.页表:页号 +块号 4.页表寄存器(PTR) 页表在内存中的起始位置F+页表长度M(未执行二者在PCB中); 分页存储管理流

2021-07-06 14:34:46 297

原创 进程/线程通讯方式

进程间的通信方式: 1.管道: 是指用于连接读写进程的一个共享文件。 1.1.无名管道(PIPE): 1.1.1用于有亲缘关系的父子进程 1.1.2半双工 1.1.3管道写满时,write阻塞,管道变空read被阻塞。 1.1.4.不是不同文件,不属于任何文件系统,只存在内存中 1.2命名管道(FIFO): 1.2.1还允许无亲缘关系的进程通讯 1.2.2有文件路径名与之关联,特殊设备文件形式存在文件系统中。 2.系统IPC 消息队列 信号量(PV) 共享内存 3.套接字 线程通信的方式: 临界区 锁机制:

2021-07-06 11:46:03 58

原创 进程与线程的区别

1.进程是资源调度的最小单位,线程是CPU调度的最小单位。 2.一个进程对应一个或多个线程。 3.进程拥有独立内存空间,而线程不是。 每个线程 独自占有一个虚拟处理器,独自的寄存器组,指令计数器和处理器状态。 共享同一地址空间(代码段(代码和常量),数据段(全局变量和静态变量),映射文件,拓展段(堆)),但是每个线程都有自己的栈段(局部变量+临时变量)。 4.系统开销。 1.进程:CPU环境的设置与内存空间分配,IO设备等。 2.线程:保持设置少量寄存器 5.通信方式 6.进程调试简单。 7.进程不会互相影

2021-07-06 11:22:26 39

原创 CPU内存结构

4GCPU=(0-3G)用户态+(3-4G)内核空间 静态区域 代码段(text segment): 只读存储区(字符串常量)+文本区(程序的机器代码) 数据段(date segment): 存储程序中已初始化的全局变量+静态变量 bss segment: 未初始化的全局变量+静态变量 动态区域: 堆区(heap) 调用malloc分配堆,运行阶段break改变堆的大小 映射区(memory mapping segment) 存动态链接库等文件映射,大内存用mmap函数分配到匿名内存映射(目前以128KB为

2021-07-06 10:56:08 104

原创 OSI模型

应用层:提供应用程序间通信; 表示层:处理数据格式、数据加密等; 会话层:建立、维护和管理会话; 传输层:建立主机端到端连接; 网络层:寻址和路由选择; 数据链路层:提供介质访问、链路管理等 物理层:比特流传输。 ...

2021-07-06 10:08:10 70

原创 socket编程

socket用于客户端与服务器之间通信的。 socket接口是TCP/IP网络的api,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解Socket接口。 tcp 服务器端程序: 1.用函数socket()创建一个socket; 2.用函数bind()绑定IP地址、端口号等信息到socket上; 3.用函数listen()设置最大连接数; 4.用accept()接收客户端上来的连接; 5.收发数据,用函数send

2021-07-06 09:59:10 56

原创 io多路复用

源:多线程 上下文切换耗时 select模型 sockfd = socket(AF_INET, SOCK_STREAM, 0); memset(&addr, 0, sizeof(addr); addr.sin_port = htons(2000); addr.sin_addr.s_addr = INADDR_ANY; bind(sockfd, (struct sockaddr*)&addr, sizeof(addr)); listen(sockfd, 5); //创建一个socket服务端

2021-07-05 22:02:18 41

原创 http协议

webservice=http协议+XML Rest=http协议+json http请求信息和响应信息的格式 请求行:请求方法+请求路径+所用协议版本 请求行信息 n* key value 空格 请求主体信息(可以没有) 请求方法:GET POST PUT DELETE TRACE OPTION 响应行:协议版本+状态码+状态文字(解释状态码) 响应头信息 n* key value(content-length:主体长度) 响应主体信息 head和get一样,只不过head不返回内容 1** 信息 2**

2021-07-05 20:47:13 42

原创 GET和POST的区别

1.GET用url传递参数(url尾部,HTTP的请求头里),而POST用request body(请求体)。 2.GET有长度限制,而POST没有。 3.GET暴露在url里,更没有安全性。 4.GET只能进行url编码(只允许ASCLL字符),而POST(对数据类型没有要求)可以支持多种编码方式。 5.GET请求可以被缓存、收藏、保留到历史记录中。 6.GET和POST本质上都是tcp连接,但是http的规定和浏览器/服务器的权限,所以导致了差异。 7.GET只产生一个tcp数据包,而POST产生两个。

2021-07-05 20:35:29 64

原创 https连接过程

1.客户端向服务端发布请求,同时发送客户端支持的一套加密规则(包括对称加密、非对称加密、摘要算法) 2.服务端从中选出一组机密算法和hash算法,并将自己的身份信息以证书的形式发送给浏览器(证书包括:网站地址,加密公钥(非对称加密使用,客户端使用),证书颁布机构) 3.客户端判断服务器证书的合法性。(包括:证书是否过期,CA是否可靠,发行者证书的公钥是否能正确解开服务器证书的“发行者的数字前面”,服务器证书上的域名是否和服务器的实际域名相匹配。) 4.如果证书不受信任,或者证书不受信任,浏览器会生成一个随机

2021-07-05 20:20:02 112

原创 字符串读取

cin.get()每次读取一整行并把由Enter键生成的换行符留在输入队列中,然而cin.getline()每次读取一整行并把由Enter键生成的换行符抛弃。

2021-04-24 13:14:18 149

原创 二分法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.引入库

2021-04-12 11:49:19 146 3

原创 vim编辑器

vim tutor 启动tutor文件 :wq保存退出 :q!不保存退出 x删除字符 i插入 A行末添加 dw删除单词,不包括它的第一个字符 de删除单词,包括它的第一个字符 d$删除光标到行末 C++生成可执行文件的过程可简单分为三步:第一步就是源文件的编写,每二步就是编译,生成的文件为.obj(windows平台)或者.o(linux平台),最后就是链接生成可以执行文件,一般windows下主是.exe文件。而第二步所生成的文件就称为目标文件 ...

2021-03-20 18:40:18 36

原创 c++形成可执行文件过程

C++生成可执行文件的过程可简单分为三步:第一步就是源文件的编写,每二步就是编译,生成的文件为.obj(windows平台)或者.o(linux平台),最后就是链接生成可以执行文件,一般windows下主是.exe文件。而第二步所生成的文件就称为目标文件 ...

2021-03-20 18:24:48 557

原创 链表指针

swap()只能改变指针内容,而对于结构体,链表等数据类型,无法改变上一级指向的内容。 swap对于这种类型的数据只能在链首使用 两个指针的定义int *p1,*p2。 容易忽视p2的星。

2021-03-17 14:37:46 551

原创 面向对象设计模式

1.简单工厂模式 例:计算器 按加减乘除功能分类 2.策略模式 例:超市打折 先定义抽象类,在抽象类的子类里写各功能类(打折,满减。。。)

2021-02-23 10:55:35 113

空空如也

空空如也

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

TA关注的人

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