自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C语言和C++关键字总结——一篇就够了

C语言和C++关键字总结C语言和C 关键字总结一、auto* 1、C语言* 2、C 二、struct三、static* 1、程序的内存分配* 2、局部静态变量* 3、全局静态变量* 4、静态函数* 5、类的静态成员变量* 6、类的静态成员函数* 7、static const 成员四、register* 1、皇帝身边的小太监----寄存器* 2、regist...

2019-05-27 23:09:25 4311

原创 特殊字符和整数之间对应转换问题(LeetCode12 整数转罗马数字)

LeetCode12 整数转罗马数字罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符数值I1V5X10L50C100D500M1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。...

2019-05-19 14:23:10 532

转载 什么是鸡尾酒排序和地精排序?

什么是鸡尾酒排序和地精排序?从冒泡排序开始,先来看回顾一下冒泡排序的思想和原理。冒泡排序的思想冒泡排序的每一个元素都可以像小气泡一样,根据自身大小,一点一点向着数组的一侧移动。冒泡排序算法的原理比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。针对所有的元素重复以上的步骤,除了最后一...

2019-05-13 20:12:30 215

原创 内存映射文件原理

之前一直对虚拟地址映射物理地址有比较浅显的认识,后面学习了页面置换算法,就对于磁盘文件的映射产生了疑惑,后来知道了内存映射的概念,不知道它和虚拟内存有什么区别,而且映射这个词也很让人迷茫,今天终于搞清楚了。。。下面,我先解释一下我对映射这个词的理解,再区分一下几个容易混淆的概念,之后,什么是内存映射就很明朗了。原理首先,“映射”这个词,就和数学课上说的“一一映射”是一个意思,就是建立一种一一对...

2019-04-11 21:26:03 304

原创 解读TCP的四种定时器

一、TCP的四种定时器TCP 是提供可靠的传输层,它使用的方法之一就是确认从另一端收到的数据。但是数据和确认都可能会丢失。TCP 通过在发送时设置一个定时器来解决这个问题。如果当定时器溢出时还没收到确认,它就会重传该数据。关键在于超时和重传策略,即怎样决定超时的时间间隔和如何确定重传的频率。TCP使用四种定时器(Timer,也称为“计时器”):重传计时器:Retransmission Tim...

2019-04-09 18:30:02 360

转载 HTTP Session、Cookie机制详解

一、什么是http session,有什么用HTTP协议本身是无状态的,本身并不能支持服务端保存客户端的状态信息,于是,Web Server中引入了session的概念,用来保存客户端的状态信息。这里用一个形象的比喻来解释session的工作方式。假设Web Server是一个商场的存包处,HTTP Request是一个顾客,第一次来到存包处,管理员把顾客的物品存放在某一个柜子里面(这个柜子...

2019-04-09 17:37:15 205

原创 页面置换算法

操作系统将内存按照页的进行管理,在需要的时候才把进程相应的部分调入内存。当产生缺页中断时,需要选择一个页面写入。如果要换出的页面在内存中被修改过,变成了“脏”页面,那就需要先写会到磁盘。页面置换算法,就是要选出最合适的一个页面,使得置换的效率最高。页面置换算法有很多,简单介绍几个,重点介绍比较重要的LRU及其实现算法。一、最优页面置换算法最理想的状态下,我们给页面做个标记,挑选一个最远才会被再...

2019-04-05 18:45:42 1252

原创 归并排序

一、介绍:归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。该算法的核心思想是二路归并。二、二路归并介绍在归并的过程中步骤如下:设定两个指针(不一定非是指针,只需要记住对应开始下标即可),最初位置分别为...

2019-03-15 13:25:12 446

原创 在浏览器中输入一个URL会发生什么?

最近看到一个题目,**当在浏览器中输入一个url后回车,后台发生了什么?**比如输入url后,你看到了百度的首页,那么这一切是如何发生的呢?网上各种的说法,不外乎都是这样的:第一步:客户机提出域名解析请求,并将该请求发送给本地的域名服务器。第二步:当本地的域名服务器收到请求后,就先查询本地的缓存,如果有该纪录项,则本地的域名服务器就直接把查询的结果返回。第三步:如果本地的缓存中没有该纪录...

2019-03-10 14:08:31 9775 3

原创 DNS域名解析

一、DNS域名解析步骤下图是DNS域名解析的一个示例图,它涵盖了基本解析步骤和原理。下面DNS解析步骤进行讲解,后面将采用命令行的形式来跟踪DNS解析过程。当用户在地址栏键入www.baidu.com并敲下回车键之后,域名解析就开始了。第一步:检查浏览器缓存中是否缓存过该域名对应的IP地址用户通过浏览器浏览过某网站之后,浏览器就会自动缓存该网站域名对应的IP地址,当用户再次访问的时候,浏...

2019-03-10 13:49:52 2749

原创 基于HTTP的文件共享服务器

基于TCP、HTTP的文件共享服务器服务器的基础架构构建TCP服务器对于文件的传输来说,我们必须要保证文件内容的准确性。所以在数据传输时我们选择保证数据可靠传输的TCP协议。首先使用socket创建套接字进行对端口号与IP地址进行绑定。然后监听来自客户端的请求。连接任务的处理对于来自客户端的连接请求,我们使用多线程对每个请求进行处理。能够保证并发性的请求处理。创建线程任务,将线程...

2019-03-03 22:27:06 4900

转载 c++11新特性

1. nullptrnullptr 出现的目的是为了替代 NULL。在某种意义上来说,传统 C++ 会把 NULL、0 视为同一种东西,这取决于编译器如何定义 NULL,有些编译器会将 NULL 定义为 ((void)0)*,有些则会直接将其定义为 0。C++ 不允许直接将 void * 隐式转换到其他类型,但如果 NULL 被定义为 ((void*)0),那么当编译char *ch = N...

2019-03-03 18:57:00 182

转载 send()和recv()函数

send()函数int send( SOCKET s, const char FAR *buf, int len, int flags );不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端发送数据。客户程序一般用send函数向服务器发送请求,而服务器则通常用send函数来向客户程序发送应答。该函数的第一个参数指定发送端套接字描述符;第二个参数指明一个存放应用程序要...

2019-02-25 17:30:59 380

原创 参考Google的TCMalloc内存池实现并发内存池ConcurrentMemoryPool

项目背景TCMalloc 是 Google 开发的内存分配器,在不少项目中都有使用,例如在 Golang 中就使用了类似的算法进行内存分配。它具有现代化内存分配器的基本特征:对抗内存碎片、在多核处理器能够 scale。之所以学习 TCMalloc,是因为想对内存管理进行深入理解。解决问题提高效率并发处理内存碎片(内碎片、外碎片)三大块thread cache:一个线程对应一个...

2019-02-19 18:16:41 1126

原创 2N皇后问题

题目描述给定一个nn的棋盘,棋盘中有一些位置不能放皇后。现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行、同一列或同一条对角线上,任意的两个白皇后都不在同一行、同一列或同一条对角线上。问总共有多少种放法?n小于等于8。*#include<iostream>#include<string>#include<vector>#incl...

2019-02-06 13:53:30 176

原创 多态的底层原理

在上一篇博客中https://blog.csdn.net/Jochebed666/article/details/86596585说明了多态,那么多态的底层原理是什么呢???他与虚函数有没有关联???虚函数的工作原理C++规定了虚函数的行为,但将实现方法留给了编译器作者。 不需要知道实现方法就可以使用虚函数。但了解虚函数的工作原理有助于更好地理解概念,因此,这里对其进行介绍。通常,编译器...

2019-01-22 17:37:49 818

原创 C++多态及静态联编和动态联编

程序调用函数时,将使用哪个可执行代码块呢?编译器负责回答这个问题。将源代码中的函数调用解释为执行特定的函数代码块被称为函数名联编(binding)。 在C语言中,这非常简单,因为每个函数名都对应一个不同的函数。在C++中,由于函数重载的缘故,这项任务更复杂。编译器必须查看函数参数以及函数名才能确定使用哪个函数。然而,C/C++编译器可以在编译过程完成这种联编。在编译过程中进行联编被称为静态联编...

2019-01-22 16:31:10 490 2

原创 多继承

多继承之前在https://blog.csdn.net/Jochebed666/article/details/86571445博客中主要提到了单继承,那么什么是多继承呢???多继承即一个子类可以有多个父类,它继承了多个父类的特性。C++ 类可以从多个类继承成员,语法如下:class <派生类名>:<继承方式1><基类名1>,<继承方式2>...

2019-01-22 12:44:59 266

原创 重载、重写、重定义、覆盖、隐藏的区别

重载重写=覆盖重定义=隐藏即函数重载或运算符重载,需要在同一作用域里,函数名相同,参数类型或者参数个数不同,返回值可同可不同用于多态,函数名和参数都相同,仅仅只有内部实现不同用于继承,基类和派生类中有同名成员,派生类成员将屏蔽基类对同名成员的直接访问,即在基类和派生类中的同名成员重载举个栗子:#include <iostream>using name...

2019-01-21 13:37:23 420

原创 实现一个不能被继承的类

// C++98中构造函数私有化,派生类中调不到基类的构造函数。则无法继承class NonInherit{public: //成员函数定义成static属于类,不属于对象 static NonInherit GetInstance() { return NonInherit(); }private: NonInherit() {}};//// C++11给出了新的关键字f...

2019-01-21 13:07:54 186

原创 c++继承

C++ 继承面向对象程序设计中最重要的一个概念是继承。继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易。这样做,也达到了重用代码功能和提高执行时间的效果。当创建一个类时,您不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的成员即可。这个已有的类称为基类,新建的类称为派生类。继承代表了 is a 关系。例如,哺乳动物是动物,狗是哺乳动物,因此...

2019-01-21 13:03:06 150

转载 迭代器失效问题

转自https://blog.csdn.net/lanbing510/article/details/8796048下面材料整理自Internet&著作。STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector 、deque);另一类是以不连续的节点形式存储的容器(如:list、set、map)。在使用erase方法来删除元素时,需要注意一些问题。在使用 li...

2019-01-20 17:16:24 248

原创 模板升华

之前写了一篇关于模板的博客https://blog.csdn.net/Jochebed666/article/details/86547166,对模板进行了简单的介绍和运用。下面详细介绍一下模板:模板参数什么是模板参数???template<typename T,……>/template<class T,……>,<>里的就是模板参数。模板参数分为类...

2019-01-20 15:44:24 197

原创 c++模板总结

C++ 模板模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。模板是创建泛型类或函数的蓝图或公式。库容器,比如迭代器和算法,都是泛型编程的例子,它们都使用了模板的概念。每个容器都有一个单一的定义,比如 向量,我们可以定义许多不同类型的向量,比如 vector 或 vector 。总结一句话,模板就是为了防止代码膨胀,让编程实现方便简单产生的一个模具模板有函数模板和...

2019-01-19 10:54:22 163

原创 有趣的sizeof和strlen

首先看一段代码:int main(){ char a1[] = ""; cout << sizeof(a1) << endl;//字符'\0',类型为char cout << strlen(a1) << endl;//检查到'\0'就结束,所以没有字符 return 0;}答案很简单:next:int main(){ ch...

2019-01-18 12:02:03 195

原创 c++的默认成员函数

构造函数成员变量为私有的,要对它们进行初始化,必须用一个公有成员函数来进行。同时这个函数应该有且仅在定义对象时自动执行一次,这时调用的函数称为构造函数(constructor)。构造函数是特殊的成员函数,其特征如下:函数名与类名相同,无返回值。(例:Test(){})对象构造(对象实例化)时系统自动调用对应的构造函数完成初始化。构造函数可以重载。构造函数可以在类中定义,也可以在类中...

2019-01-17 22:26:43 174

原创 c++指针与引用的总结

指针是引用吗????在回答这个问题之前先来看看什么是引用☟☟☟引用不是定义一个新的变量,而是给一个已经定义的变量重新起一个别名。引用需要注意的特点:一个变量可取多个别名(引用)引用必须初始化(类型& 引用变量名=已定义的变量名)引用只能在初始化时引用一次,不能再引用其他变量int main(){ int a = 1; int &b = a; cout &am

2019-01-17 15:57:04 269

原创 数组和指针深层理解

之前写了一篇关于数组与指针的博客https://mp.csdn.net/postedit/80377352最近有了新理解:先看一组代码://test.c//首先定义一个数组char arr[] = "abcdef";//main.cextern char *arr;int main(){ printf("%p\n", arr); system("pause")...

2019-01-15 13:52:09 192

原创 c++类和对象

首先,明白c++和C语言的区别:C语言面向过程,c++面向对象; 面向过程:即我们着力于项目的每个过程动作,实现每一个动作方法,分析出求解问题的步骤,通过函数调用逐步解决问题; 面向对象:即着力于对象,从对象个体出发,看对象的需求,将一件事情拆分成不同的对象,靠对象之间的交互完成; 由于c++面向对象的特点,类和对象就由此产生; 类:是抽象的一个类别; 对象:是类的实例化,相当于现实...

2019-01-13 15:26:38 3271

原创 结构体内存对齐与类内存对齐

为什么有内存对齐???       “内存对齐”应该是编译器的“管辖范围”。编译器为程序中的每个“数据单元”安排在适当的位置上,便于编译器管理数据。但是C语言的一个特点就是太灵活,太强大,它允许你干预“内存对齐”。如果你想了解更加底层的秘密,“内存对齐”对你就不应该再透明了。对于内存对齐问题,主要存在于struct和union等复合结构在内存中的分布情况,许多实际的计算机系统对基本类型数据在内...

2019-01-13 14:25:58 577

转载 内联函数

转自  https://blog.csdn.net/andrew_yau/article/details/7687356        在C++语言的设计中,内联函数的引入可以说完全是为了性能的考虑。因此在编写对性能要求比较高的C++程序时,非常有必要仔细考量内联函数的使用。       所谓“内联”,即将被调用函数的函数体代码直接地整个插入到该函数被调用处,而不是通过call语句进行...

2019-01-13 11:07:55 178

原创 不同情况下“零值”比较的写法

一、整形变量与“零值”的比较自然,if语句中用0和1(非0)就可以进行条件语句的判断。二、bool变量与“零值”的比较if()从句中bool变量与零值比较的写法每个人有每个人的不同,那么哪种写法比较好呢?bool bFlag = FALSE;//为什么一般初始化为FALSE 比较好?(由于普遍编译器里的FALSE值都为0,而TRUE值不确定!)A), if(bFlag == 0)...

2018-12-28 15:33:51 678

原创 求两个数的平均值总结

方法一:直接求平均数:(a+b)/2;或a/2+b/2;缺陷:整形溢出方法二:b+(a-b)/2;//两桶水的例子方法三:(a&b)+((a^b)>>1);//一个数和另一个数与的部分(a & b),在二进制序列里面就是两个数都为1的部分,即相同部分除以2,这样的话我们直接与取出来的部分就是原来两个数二进制序列相加进一后移一位的部分;而((a ^...

2018-12-24 14:58:20 1383

原创 volatile的理解

一、如何理解呢?volatile可理解为防止编译器优化,保持内存可见性;即确保本条指令不会因编译器的优化而省略,且要求每次直接读值。相当于假设我程序中有一个变量被register修饰,建议编译器优化,则该变量将存储于寄存器中,程序执行效率更快;这时若加上volatile关键字修饰变量,则编译器将不会优化,直接从内存取值。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这...

2018-11-30 18:05:07 207

转载 vs快捷键使用

转自https://blog.csdn.net/mrlisky/article/details/72622009 1、窗口快捷键记忆诀窍:凡跟窗口挂上钩的快捷键必有一个W(Windows);Ctrl+W,W: 浏览器窗口 (浏览橱窗用有道的翻译是window shopping)Ctrl+W,S: 解决方案管理器 (Solution)Ctrl+W,C: 类视图 (Class)Ct...

2018-11-29 15:55:31 214

转载 sizeof总结

转自 https://blog.csdn.net/EVEcho/article/details/81115683 字节 short int float long *(地址) double long long 32位...

2018-11-24 12:08:37 301

原创 c\c++中const详解

const修饰一个变量:在C语言中是一个变量,但具有常属性,不能直接被改变;而c++中是一个常量; const定义常量从汇编的角度来看,只是给出了对应的内存地址,const定义的常量在程序运行过程中只有一份拷贝; const修饰变量时,变量存放的位置与它没有太大的关系,一般而言,存放于栈上,若有static或者全局变量则放在数据段; const修饰指针,只有一个con...

2018-11-03 14:55:00 284

原创 进程调度

进程管理和调度基础:https://blog.csdn.net/Jochebed666/article/details/83049299下面将详细讲解进程创建、进程等待、进程程序替换、shell、进程终止!一、进程创建进程调用fork,当控制转移到内核中的fork代码后,内核分配新的内存块和内核数据结构给子进程; 将父进程部分数据结构内容拷贝至子进程; 添加子进程大奥系统进程列表中...

2018-10-31 10:51:25 131

原创 Linux下的简易shell实现

Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口。 它是命令语言、命令解释程序及程序设计语言的统称。 相当于bash的一个子进程,父进程等待,子进程进行程序替换。 shell充当一个桥梁:将使用者的命令翻译给核心(kernel)处理;同时,将核心的处理结果翻译给使用者。 shell在你成功地登录进入系统后启动,并始终作为你与系统内核的交互手段直至你退出系统。 你...

2018-10-31 10:49:35 543

原创 C++入门

一、名字空间在c++语言程序代码中有一行这样的语句:using namespace std; c++引入名字空间的概念是要解决全局命名冲突的问题; 用关键字namespace+一个名字可以表示变量、函数、嵌套的集合,std表示标准c++库中所有组件的一个名字集合; 所以有了这句话就可以直接使用标准c++库中所有有成员; 如果没有这句语句,则要使用std::成员的方式来使用标准c++库成...

2018-10-19 21:06:52 373

空空如也

空空如也

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

TA关注的人

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