自定义博客皮肤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 220

原创 c++四种类型转换

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

2021-08-14 11:58:20 99

原创 强连通-Tarjan算法

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

2021-07-27 16:29:19 145

原创 SGI STL空间配置

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

2021-07-14 14:52:41 112

原创 段与页寻址

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

2021-07-06 14:34:46 312

原创 进程/线程通讯方式

进程间的通信方式: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 63

原创 进程与线程的区别

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

2021-07-06 11:22:26 47

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

原创 OSI模型

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

2021-07-06 10:08:10 76

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

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

原创 http协议

webservice=http协议+XMLRest=http协议+jsonhttp请求信息和响应信息的格式请求行:请求方法+请求路径+所用协议版本请求行信息 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 48

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

原创 https连接过程

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

2021-07-05 20:20:02 121

原创 字符串读取

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

2021-04-24 13:14:18 159

原创 二分法

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

2021-04-12 11:49:19 177 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 41

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

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

2021-03-20 18:24:48 569

原创 链表指针

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

2021-03-17 14:37:46 561

原创 面向对象设计模式

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

2021-02-23 10:55:35 118

空空如也

空空如也

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

TA关注的人

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