自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 简单shell脚本练习

最近刚刚接触脚本语言,先从shell开始,练习一些简单的脚本。<1>制作程序菜单编写的脚本运行结果<2>统计基本信息利用$可以在脚本中引用环境变量<3>利用变量(打印环境变量)<4>添加用户变量...

2020-04-19 18:03:49 346

原创 最高的山峰(力扣845)

大概题意:我们把数组 A 中符合下列属性的任意连续子数组 B 称为 “山脉”:B.length >= 3存在 0 < i< B.length - 1 使得 B[0] < B[1] < ... B[i-1] < B[i] > B[i+1] > ... > B[B.length - 1](注意:B 可以是 A 的任意子数组,包括整个数...

2019-08-20 16:32:51 313

原创 交换两个数组使得两个数组和相等

题目描述:给定两个数组,交换数组中的两个元素,使得两个数组的元素和相等解题思路:首先分别求出数组1和数组2的和,开辟一个数组res将交换后的数字存进去,然后求出两个数组的平均值,平均值就是数组1和数组2交换之后数组中的和,在这里我用一个set将brr的值保存进去,然后遍历数组1,如果要把数组一中的值换掉,则数组一的和就变成sum1-arr[i],还差avg-(sum1-arr[i]),...

2019-08-20 12:26:44 2236

原创 Liunx之HTTP,HTTPS协议

HTTP是客户端和服务端之间数据传输的格式规范.HTTPS是基于安全套接字层的HTTP协议(加密传输,身份认证)HTTP的过程:1.浏览器打开一个TCP连接2.浏览器发送HTTP请求到服务器端3.服务器发送HTTP回应信息到浏览器4.TCP连接关闭SSL的过程:1.验证服务器端2.允许客户端和服务器端选择加密算法和密码,确保双方都支持3.验证客户端4.使用公钥加密技术来生成共...

2019-08-19 12:41:39 192

原创 C++题目之合并两个有序数组(力扣88)

给定两个有序整数数组 nums1 和 nums2,合并nums1和nums2为有序数组输入:nums1 = [1,2,3], m = 3nums2 = [2,5,6], n = 3输出: [1,2,2,3,5,6]**解题思路:**先求出两个数组的大小,开辟一个新数组来保存合并之后的数据,给两个指针指向两个数组中最后一个元素,判断如果第一个数组最后一个元素小于第二个数组最后一...

2019-08-19 11:45:09 659 1

原创 力扣之三数之和问题

给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[[-1, 0, 1],[-1, -1, 2]]解题思路:a+b+c=0可以转化...

2019-08-18 20:31:46 411

原创 libevent库

libevent库是一个轻量级的网络I/O库它向libevent框架中注册相应的事件和回调函数,当这些事件发声时,libevent会调用这些回调函数处理相应的事件(I/O读写,定时和信号)它的优点:(1)轻量级,专注于网络,不如ACE那么臃肿庞大(2)源代码相当精炼,易读(3)可以支持跨平台操作(4)支持多种I/O多路复用技术(5)支持I/O,定时器和信号等事件我们首先来学习一下Re...

2019-08-14 18:35:36 160

原创 设计模式之单例模式

一.单例模式的定义单例模式,是一种常用的设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。二.单例模式的结构图三.具体实现方法(1)将构造方法私有化,使其不能在类的外部通过new关键字实例化该类对象。(2)在该类内部产生一个唯一的实例化对象,并且将其封装为private static类型。(...

2019-08-12 09:46:34 121

原创 一致性哈希算法

一.哈希算法假设有3万张图片需要映射到A1,A2,A3三台服务器上,最好的效果是能够均匀的存放在这三台服务器上,简单的做法是对键进行哈希计算,计算之后的值是一个整数,对这个整数进行取模运算,通过得到的余数来决定放在哪台服务器上.hash(名称)%机器数=余数(这里机器数量为3,取余得到的结果是0,1,2(服务器编号)弊端:假如增加一台服务器的话,对应的机器数变化引起余数变化,服务器的编号失...

2019-08-11 11:41:37 191 1

原创 内核内存管理

一、内核内存管理的物理单位:页1、物理页的结构flags :用来存放页的状态,每一位可以表示一种状态,共可以表示32中状态(page-flags.h)_count : 用来存放页的引用次数,内核代码不可以直接检查该域,应该使用page_count()函数来检查,返回值为0则代表该页空闲,返回值为正数则表示该页正在被使用virtual:页在虚拟内存中的地址2、内核使用struct ...

2019-08-10 16:58:25 194 2

原创 C++之智能指针

C++98引入了auto_ptrauto_ptr:**特点:**管理权限唯一,控制权限唯一<所有权唯一>只有一个指针对象进行管理,剩下的都会失效.数据无法共享不能在容器中保存auto_ptr,也不能从函数中返回auto_ptr.上图所示是错误的,因为所有权是唯一的.所以在C++11摒弃了auot_ptr:要避免因为潜在的内存问题导致程序崩溃.auto_ptr的简单实现:...

2019-08-04 16:28:42 153 1

原创 线程同步

实现线程同步的方式和方法:信号量,互斥锁,读写锁,条件变量1.信号量:信号量可以分为二值信号量和计数信号量.信号量的使用函数信号量实际上就是一个值,这个值被用来解决临界区问题以及实现进程在多处理器环境下的进程同步。互斥锁:在访问共享资源之前进行加锁操作,在访问完成之后进行解锁操作.加锁后,任何其他试图再次加锁的线程会被阻塞,直到当前进程解锁.可以确保同一时间内只有一个线程可以访...

2019-08-03 20:20:16 116

原创 哈希表

一.哈希表的概念哈希表又称散列表:把关键码值映射到表中的一个位置来访问记录,以加快查找的速度,映射函数叫散列函数,存放记录的数组叫散列表.把key通过一个固定的算法函数转换成一个整型数字,然后就将该数组对数组长度取余,取余结果就当做数组的下标,将value存储在一以该数字为下标的数组空间里.二.哈希函数的构造方法(函数本身便于计算,计算出来的地址分布均匀)1.数字分析法:如果事先知道有关键...

2019-08-03 15:50:45 185

原创 I/O复用

select系统调用:在一段指定时间内,监听用户感兴趣的文件描述符上的可读,可写和异常等事件.select系统调用原型:n==-1 失败n==0 超时n>0 有n个描述符上有事件就绪(n是返回值)select调用返回时,内核修改它们来通知应用程序哪些文件描述符已经就绪,fd_set结构体仅包含一个整型数组,该数组的每个元素的每一位标记一个文件描述符,timeout参数用...

2019-08-02 20:53:18 127

原创 TCP可靠机制

超时重传:可以重传超时事件内未收到确认的TCP报文段.为此,TCP每个模块为每个TCP报文段都维护一个重传定时器,该定时器在TCP报文段第一次被发送时启动.如果超时时间内未收到接收方的应答,TCP模块将重传TCP报文段并重置定时器.TCP一共执行5次重传,每次重传超时时间都增加一倍,在5次重传均失败的情况下,底层的IP和ARP开始接管,直至客户端放弃连接为止.Linux有两个重要的内核参数与...

2019-07-31 12:07:51 223 1

原创 两个栈实现一个队列,两个队列实现一个栈

上图://两个栈实现一个队列templateclass CQueue{public:CQueue(void);~CQueue(void);void appendTail(const T& node);T deleteHead();private:stack stack1;stack stack2;};templateCQueue::CQueue(void){...

2019-07-30 11:51:11 148 1

原创 常用端口号总结

FTP(20/21)(文件传输协议)其中20用于传输数据,21用于传输控制信息(主动模式/被动模式)SSH (网络协议,用于计算机的登录加密) 22 telnet 23 远程通讯协议SMTP 25 简单邮件传输协议DNS(53)域名解析http 80 超文本传输协议pop3 110 (邮局协议) 995 密文//rpcbind 111NTP 123 ...

2019-07-29 19:46:54 275

原创 网络四层模型

数据链路层:实现了网卡接口的网络驱动程序,以处理数据在物理媒介上的传输.主要协议:ARP(地址解析协议)RARP(逆地址解析协议):实现了IP地址和物理地址之间的转换.网络层:实现数据报包的选路和转发.核心协议:IP协议:(因特网协议)根据数据包的目的地址来决定如何投递它.如果数据包不能直接发送给目标主机,那么IP协议就为它寻找合适的下一跳路由器,并将数据包交付给该路由器来转发.多次重复这...

2019-07-27 19:13:06 513

原创 C++中oop的思想

oop通常来说就是面向对象的编程思想.面向对象三大特性:封装,继承,多态现实世界是由一个个对象组成的,因此面向对象的思维方式更加接近现实世界,面向对象编程的组织方式也更加贴近现实世界。面向对象以对象为中心,将对象的内部组织与外部环境区分开来,将表征对象的内部属性数据与外部隔离开来,其行为与属性构成一个整体,而系统功能则表现为一系列对象之间的相互作用的序列,能更加形象的模拟或表达现实世界。在编程...

2019-07-23 12:00:48 333 1

原创 c++基本知识

函数重载:C语言的符号生成规则:只和函数名有关C++的符号生成规则:函数原型(函数头部),1.返回值返回值不能作为重载的依据,可能会产生二义性2.函数名C语言的符号生成规则只和函数名有关,如果把函数名作为返回值的话,就和C语言冲突了.3.函数形参(1)参数个数(2)参数类型(3)参数顺序函数形参作为函数重载的依据.函数重载的三要素:1.同名2.不同参3.同作用域malloc和ne...

2019-07-23 11:12:05 128 1

原创 函数堆栈调用

以上两张图做了四件事情:(1)将调用方的栈底指针入栈.(2)让原本指向调用方栈底的ebp指向当前函数的栈底.(3)给当前函数开辟栈帧.(4)对开辟的栈帧进行初始化.总结:函数的运行都是在栈上开辟内存的.栈是通过esp(栈顶指针),ebp(栈底指针)两个指针来标识的对于栈上的访问都是通过栈底指针的偏移来访问的在call一个函数时,有两件事情:先将调用函数的下一行指令的地址压入栈...

2019-07-19 16:47:55 100

原创 程序编译链接,运行原理,虚拟地址空间布局

(1)预编译过程:(.i)1.删除#define文本替换2.#if#endif #elif3.#include递归展开4.删除注释5.添加行号(主要目的是为了方便调试)6.保留#pragma(2)编译(.s)1.词法分析(例:int 8a=10//变量不能以数字开头2.语法分析(根据一条表达式分析)3.语义分析(根据上下文分析)4.代码优化5.生成汇编指令(3)汇编过程...

2019-07-18 19:37:32 482

原创 进程间通信方式——管道

1.管道的创建:管道是由调用pipe函数来创建#include <unistd.h>int pipe (int fd[2]); //返回:成功返回0,出错返回-1是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系(父子进程)的进程间使用。2.有名管道和无名管道的区别:有名管道:可以在任意两个进程之间,有名的名字存在磁盘中无名管道:只可以在父子进程之间3.管...

2019-07-03 16:24:21 119

原创 复制进程fork与替换进程exec

(1)fork复制进程的过程:一个现有进程可以用fork()函数通过系统调用创建一个新进程#include <unistd.h>pid_t fork(void);// 返回:若成功则在子进程中返回0,在父进程中返回子进程PID,若出错则返回-1fork调用仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:1)在父进程中,fork返回新创建子进程的进程ID;2)在子...

2019-07-02 16:51:36 383 2

原创 库文件及静态库和动态库

1、什么是库文件?库:预先编译好的方法的集合。库分为静态库和动态库。(1)静态库:libxx.a 库里用到的方法包含在可执行程序中(2)共享库:libxx.so 库里用到的方法只做标记,运行时才加载无论动态库或者静态库都是从.o文件生成的,因此在讲解动态库和静态库之前,我们先执行以下命令生成 hello.o 文件和 test.o 文件:gcc -c hello.cgcc -c te...

2019-06-26 20:44:38 189

原创 文件操作命令

文件操作命令(1)touch:创建一个文件 touch file创建多个文件 touch file1 file2 file3(2)mkdir:删除空的目录将工作目录下,名为 AAA 的子目录删除 :rmdir AAA在工作目录下的 BBB 目录中,删除名为 Test 的子目录。若 Test 删除后, BBB 目录成为空目录,则 BBB 亦予删除:rmdi...

2019-05-27 19:56:42 408 1

原创 指针与引用的区别_孤单--剪影_新浪博客

<1>非空区别。在任何情况下都不能使用指向空值的引用,引用定义时必须初始化。如果你使用一个变量并让它指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时应将该变量设置为指针。<2>合法性区别,在使用引用之前不需要进行判空操作,而指针必须测试其不为空。<3>可修改区别,指针可以重新被赋值以指向另一个不同的对象,引用总是指向在初始化时被指定的对象,以...

2019-01-12 20:45:25 123

原创 继承与派生_孤单--剪影_新浪博客

继承和派生:主要有基类(又称父类)和派生类(又称子类)主要结构://类标识 类名 : 继承方式 基类类名派生类继承了父类的什么?除了基类的构造函数和析构函数以外的所有成员(成员方法,成员变量,作用域)Public:任意位置都可以访问Protected:本类类中,子类中可以访问Private:本类类中访问**基类中不同的访问限定符下的成员以不同的继承方式在派生...

2018-12-04 11:39:41 122

原创 写时拷贝_孤单--剪影_新浪博客

写时拷贝:通俗一点就是说修改时做拷贝。(修改前做浅拷贝,修改后做深拷贝)给出一个引用计数,有多少个对象来指向,将最后一个delete掉不能放在对象或类中,只能放在内存中,开辟时多开辟4个字节当我们在使用拷贝构造或者赋值时,可以直接给引用计数加1,并且让这个新创建的对象指向这个已存在的对象的字符串,当指字符串的指针减少时(每减少1个),引用计数就减1,引用计数为0时,这段空间将被回...

2018-11-28 19:23:31 121

原创 调用约定与类与对象初_孤单--剪影_新浪博客

_cdecl(c标准调用约定)调用方开辟形参,调用方进行清理_stdcall(Windows的标准调用约定)调用方开辟形参内存,被调用方清理_fastcall(快速调用约定)两种情况:1.形参字节小于等于四前两个形参值不开辟内存,寄存器带入被调用方第三个形参开始和_stdcall调用约定相同2.形参字节大于四调用方开辟内存,被调用方清理内存_thiscall...

2018-11-25 15:02:30 126

原创 内联函数_孤单--剪影_新浪博客

内联函数:inline修饰的函数叫内联函数内联函数在调用点之间展开,不生成符号内联函数没有开栈清栈内联函数执行的开销小于函数开栈的开销内联函数最好写在头文件中内联函数在debug版本下不生效,只在release版本下生效其实内联函数只是给编译器一个建议,所以只在release版本下生效。问题一:递归函数系统为什么不会处理成内联函数?因为在编译期间无法确定递归的深度...

2018-11-25 14:11:10 158

原创 对象的生存周期_孤单--剪影_新浪博客

内置类型的临时量:常量自定义类型的临时量:变量隐式生成的临时量:常量类对象:临时量形参const的作用:1.防止实参被修改2.接收隐式生成的临时量类类型-》从临时量中拿出-》调构造函数初始化对象空间可以取地址优化:临时对象的生成目的是为了生成新的对象,以生成临时对象的方式生成新的对象引用可以提升临时对象的生存周期,提升到和引用的对象一样具体代码及分析:...

2018-11-23 19:44:54 136

原创 类的默认函数

1.构造函数:是进行初始化的函数,主要特点:名称和类名相同,没有返回值默认构造函数:不带任何参数的构造函数构造函数主要步骤:1、开辟空间2、给开辟的内存进行初始化(主要是为了生成对象)构造函数可以重载2、析构函数:是进行清理资源的函数结构:~类名();析构函数的主要步骤:1.清理资源2.清理空间(主要是为了对象的销毁)先构造的后析构,析构函数不可以重载析构函...

2018-11-23 18:56:02 167

原创 可变参数编程_孤单--剪影_新浪博客

可变参数编程可以具体用一个例子来进行说明和分析:#include#includefloat average(int n_values,...){ va_list var_arg;int count;float sum=0;va_start(var_arg,n_values);for(count=0;count{sum +=va_arg(var...

2018-03-23 19:46:56 125

原创 float转int与位运算_孤单--剪影_新浪博客

复习:float在内存中的存储方式:我们想把float的整数部分提出来,可以用整型指针来看成整型进行解引用:1.int *p=(int *)&f也可以用char进行解引用,可以解出第一个字节,一个字节占八位,分离指数位和尾数位比较麻烦。2.char *s=(char *)&f;第二个问题就是提取指数位和尾数位的问题:这时候可以使用位运算来进行。...

2018-03-22 19:20:03 686 1

原创 函数指针_孤单--剪影_新浪博客

int Max(int a,int b){return a>b ? a : b;}int Min(int a,int b){return a}int Avg(int a,int b){return (a+b)/2;}以上三个函数的参数相同,返回值为int型,像这种相似的可以使用函数指针来进行设计设计形式:int (*p)(int,int);//函数指针(...

2018-03-08 19:36:20 97

原创 结构体的大小_孤单--剪影_新浪博客

struct A{...

2018-03-08 18:15:01 126 1

原创 深拷贝与浅拷贝_孤单--剪影_新浪博客

浅拷贝:多个指针指向同一段内存(字符串常量)在一个工程中,不管定义多少次,在内存中只有一份,所有字符串常量不能被修改《属于浅拷贝》深拷贝:每个指针指向单独的内存char buf[100]; 1.计算字符串长度char *arr[3]...

2017-12-02 11:16:11 102

原创 结构体_孤单--剪影_新浪博客

c语言中聚合类型有两种:结构体和数组聚合类型的特点:只初始化部分,其余部分就为0如何访问结构体的成员?1.通过结构体的普通变量,通过“.”访问他的成员2.通过结构体的指针,通过“->”访问他的成员struct A *pa = &sa;(*pa).b = 200;pa->b = 300;stu1.name="zhangfei"<错误>...

2017-11-20 20:36:49 97

原创 const_孤单--剪影_新浪博客

const的作用:1.限制变量的写权限2.无论什么数据类型对const而言是透明的3.const右边直接的内容不能做左值4.权限可以等价传递,或者缩小传递const int a=10就把a变成常变量,即不能修改a的值,即为只读变量。而const int b;毫无意义,因为b的结果是一个随机值const int *p1=&a; *p1=10...

2017-11-04 22:50:10 138 1

空空如也

空空如也

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

TA关注的人

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