自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

JoJoJo1234的博客

菜鸟一个

  • 博客(42)
  • 收藏
  • 关注

原创 map insert 和下标运算 [ ] 插入数据的区别

1. 使用 insert :如果key存在,则插入失败,如果key不存在,就创建这个key-value。2. 使用下标运算插入:如果这个key存在,就更新value;如果key不存在,就创建这个key-value对。注意:下标运算可能会插入脏数据。...

2021-11-29 16:51:10 345

原创 C++ STL中的内存优化

C++中的内存优化采用两级的空间配置器机制来解决。二级配置器结构:1. 第一级配置器:第一级配置器是以malloc(),remalloc(),free()等C函数执行实际的内存配置,释放,重新配置等操作。一级空间配置器分配的是大于128字节的空间。如果分配失败,调用句柄释放一部分内存。如果还是失败,调用一个指定的函数。如果要分配的区块小于128字节,则以内存池进行管理,内存池又称为...

2019-08-18 13:56:33 1616

原创 C++相关面试题总结

讲一下static关键字的作用?1. 全局静态变量在全局变量前加上static关键字,全局变量就成了全局静态变量,它在数据段上存放,且在整个程序的运行期间一直都存在.未经初始化的全局变量的值会被自动初始化为0,全局静态变量在声明它的文件之外是不可见的,只在本文件可见。2. 局部静态变量在局部静态变量前加上static关键字后,局部变量就成了局部静态变量,局部静态变量也是存储在...

2019-08-18 12:07:45 162

原创 Git的简单使用(二)分支管理

分支管理在实际的软件开发环节中(虽然我还没有真正开发过),我们会遇到这样一些问题:假如我们采用的敏捷开发模式,需要让当前的每一个版本都是可用的。如果给我们分配了某个任务,让自己完成,你在写代码的时候,如果一次写不完,代码提交到主分支以后,可能会造成主分支上整个代码不能正常测试运行,所以我们就需要使用分支,几乎每一种版本控制系统都以某种形式支持分支。使用分支意味着你可以从开发主线上分离开来,...

2019-08-07 16:09:15 233

原创 Git的简单使用(一)

集中式版本控制和分布式版本控制:集中式版本控制系统 :集中式版本控制系统的版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。集中式版本控制系统最大的毛病就是必须联网才能工作,...

2019-08-05 18:27:54 156

原创 I/O复用(二)poll和epoll

poll:函数原型:int poll(struct pollfd * fds, int nfds, int timeout);struct pollfd{ int fd;//指定的是用户关注的文件描述符的值 short events;//用户关注的事件 short revents;//由内核修改,表示关注的文件描述符发生了哪些事件}...

2019-08-04 16:03:05 347

原创 KMP算法总结(二)

说完了KMP算法的一些基本的操作,我们再来说一下KMP算法的代码实现:写代码的时候和上面我们所说的操作都是一样的:首先我们需要完成的就是prefix-table的构建,为了大家能更好的理解,我们使用一串新的字符串作为例子进行讲解:我们写出它所有的前缀和最长公共前后缀的长度为:我们从中可以发现一个规律:例如:我们拿字符串:“A B A B C A”和字符...

2019-08-04 11:08:42 444

原创 KMP算法总结(一)

这篇博客主要分享一下KMP算法的操作:本篇博客思想非本人原创,主要来源于B站大佬的一个教程视频:KMP算法 ,但是码字和图片都是本人亲手做的哈,首先我们有两段字符串:我们要做的就是来看一下在T里面能否找到P这段字符串,用肉眼我们应该能看到,当匹配到T里面下标为5的时候,是匹配上了的。我们一般用的解法就是暴力匹配法:首先看T[0]和P[O]是否匹配,匹配上了,再看T[1]和P[...

2019-07-31 21:28:48 233

原创 常用HTTP状态码总结

常用HTTP状态码总结: 100 客户端应当继续发送请求。这个临时响应是用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝。客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应。服务器必须在请求完成后向客户端发送一个最终响应。 200 请求已成功,请求所希望的响应头或数据体将随此响应返回。 ...

2019-07-31 19:24:13 212

原创 网络相关面试题总结(三)

讲一下集群 、负载均衡 和 分布式负载均衡:同样的业务,被分成了同样的几台服务器分布式:同样的业务,进行拆分,接收数据 ,一台主机只做一件事,使可以接入的客户端的数目更多例如:你被领导要求完成一份文档的编写工作,我们把它看做是计算机要进行处理的业务。1、这个文档由多个人分解成多个子文档,每个人完成一部分,最后拼装成完整的文档,这就是集群的工作2、如果这个文档放在一个机器上,...

2019-07-31 12:27:05 168

转载 【转载】session和cookie的区别

session原理:1、session是保存在服务器端,理论上是没有是没有限制,只要你的内存够大2、浏览器第一次访问服务器时会创建一个session对象并返回一个JSESSIONID=ID的值, 创建一个Cookie对象key为JSSIONID,value为ID的值,将这个Cookie写回浏览器3、浏览器在第二次访问服务器的时候携带Cookie信息JSESSIONID=ID的...

2019-07-31 10:41:25 179 1

原创 I/O复用(一)select

在《Linux高性能服务器编程》一书上对I/O复用是这么解释的:I/O复用使得程序能够同时监听多个文件描述符简单理解来说就是:一个进程或者一个线程能够同时对多个文件描述符提供服务,服务器上的进程或者线程 ,如何将多个文件描述符统一监听,当任意一个文件描述符上由事件发生,都能够及时处理。Linux上的I/O复用系统调用API有三个select / poll / epoll 先...

2019-07-31 09:58:30 165

原创 模拟实现C++迭代器

迭代器的基本概念 迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址。迭代器修改了常规指针的接口,所谓迭代器是一种概念上的抽象:那些行为上像迭代器的东西都可以叫做迭代器。然而迭代器有很多不同的能力,它可以把抽象容器和通用算法有机的统一起来。迭代器基本分为五种,输入输出迭代器,前向逆向迭代器,双向迭代器和随机...

2019-07-28 17:44:45 226

原创 网络相关面试题总结(二)

网络编程实例代码 : 手写客户端:#include<stdio.h>#include<stdlib.h>#include<string.h>#include<assert.h>#include<unistd.h>#include<sys/types.h>#include<sys/socket.h...

2019-07-28 11:17:05 191

原创 网络相关面试题总结(一)

讲一下为什么要分层?各层之间是相互独立的 *** 将大问题分割成小问题,易于实现 灵活性好 *** 各个层发生变化,只要接口不变,就不会影响其他层 结构上可分开 易于实现和维护 能促进标准化工作 *** 分层后可以进行复用, 用户只关心用到的应用层,其他层就可以复用讲某一层的功能?/《计算机网络第五版》第1,2,3,4章(1) 数据链路层 :完成两个相邻结点设备之间的...

2019-07-28 11:09:44 212

原创 内存池

内存池问题提出C/C++编程的时候,最让人头疼的莫过于内存管理:分配足够的内存、追踪内存的分配、在不需要的时候释放内存,这个任务相当复杂。而且在使用系统提供的new/delete malloc/free 的时候,可能会遇到以下的问题:(1)效率问题:内存资源属于硬件资源,所有的硬件资源都是由操作系统进行管理。当我们需要申请内存的时候,由操作系统给我们分配固定大小的内存块,这时候就需要...

2019-07-27 23:08:20 144

原创 OSI七层模型和TCP/IP协议族

1.基本概念:网络: 是把独立自主的计算机连接起来,构成了网络互联网: 把网络和网络连接起来, 构成了互联网IP地址: 在网络中唯一标识一台主机或者一个设备,或者一个结点端口: 应用程序的代号,一个整数值,可以在主机上唯一标识一个进程2.网络分层 : (1)OSI(开放互联参考模型)物理层、数据链路层、网络层、传输层、会话层、表示层、应用层为了使不同的网络厂商、硬件厂商...

2019-07-27 11:09:44 492 2

原创 通过写时拷贝实现String类

今天看到剑指offer上的一道题:如下为类型CMyString的声明,请你为该类型添加赋值运算符函数class CMyString{public: CMyString(char * pData = NULL); CMyString(const CMyString & str); ~CMyString(void);private:...

2019-07-21 16:05:11 169

原创 位运算中常见的操作

一、位运算1、位运算符号&,|,^ , ~(取反,不分正负数),<<(左移,标准规定在右边补0),>>(右移,正数则左边补0,负数标准没有规定在左边补充的数字,分为逻辑右移和算术右移,具体由编译器决定,windows平台和gcc采取算术右移即负数补1)2、常见的二进制位的变换操作下面列举了一些常见的二进制位的变换操作。 功能 ...

2019-07-20 20:56:16 328

原创 【Linux】基础复习3-gdb调试命令&链接文件和库文件

一、Linux调试工具gdb使用:源代码经过编译链接生成可执行文件一般有两个版本:debug版本 可调式版本 链接的时候最后加上-g ,里面添加了debug_*段,编译阶段加入debug信息,链接过程不会加入debug信息。默认的release 发行版本debug版本的可执行程序的生成:gcc -o main main.c -g调试命令:l : 显示源...

2019-05-05 21:26:48 503

原创 【Linux】基础复习2-文本编辑命令和编译链接原理

Linux下常用的命令还有文本编辑命令,Linux下常用的文本编辑器有vim编辑器,vim编辑器可以说是所有Linux新手刚上手就接触到的一款编辑器,其功能也是非常强大的,我们先来看一下vim文本编辑器的一些使用:1.文本编辑(普通文件) vi / vim(1)三种模式:命令模式:对于插入的内容惊醒批处理的插入模式:插入文本末行模式:对于整个文本的操作,替换,搜索……其...

2019-04-18 21:16:32 261

原创 【Linux】基础复习1-文件管理以及一些常用的命令

学习Linux的人肯定是听过一句话:Linux下一切皆文件。没错,Linux下最重要的一个任务就是进行文件管理。我们首先来看一下操作系统的概念。在《操作系统之哲学原理》这本书上对操作系统的定义是:操作系统是掌控计算机上所有事情的软件系统。这句话有点笼统,具体来说操作系统就是管理软硬件资源,并为用户提供与计算机进行交互的一种软件。一般为人所熟知的操作系统有Windows和Linux:1.Li...

2019-04-18 21:10:41 272

原创 【C++基础】string类的实现

前面说过,C++提供了string类,里面实现了对字符串的各种操作,string类的实现同时也是再面试和笔试的时候比较场考的一类题型。这次的博客就来进行C++里面string类的实现,因为主要是重载里面的一些运算符,所以也算是对运算符重载的练习。直接来看代码:String.h#ifndef STRING_H#define STRING_H class Mstring{pu...

2019-01-21 16:32:53 292

原创 【C++基础】运算符重载

一、运算符重载:1.类是用户自定义的数据类型,使用运算符重载可以i实现如下逻辑:(1)对象1 = 对象2+对象3,如描述复数的类,描述字符串的类。(2)提高程序的可读性。2.重载赋值运算符:(1)如果一个类没有提供赋值运算函数,则默认提供一个。(2)如果一个类提供了拷贝构造函数,那么也要提供一个重载的赋值运算函数。3.重载运算符的规定:(1)重载的运算符要保持原运算...

2019-01-20 18:34:00 367

原创 【C++】static类成员、动态内存分配、const关键字、友元函数和友元类

四、static类成员:假设我们使用C++来开发一款游戏没有如下的场景: 假设有一个具有火星人和其他人物的视频。每个火星人都很勇敢,而且当火星人注意到至少存在五个火星人的时候,它总是袭击其他空间的生物。如果少于五个人的话,则每个火星人非常胆小。所以每个火星人都要知道现在游戏中有多少个火星人。 我们现在考虑解决这个问题。如何定义变量,表示游戏中有多少火星人呢?1.使用全...

2019-01-19 20:19:24 220

原创 【C++基础】构造函数、析构函数、string类

一、构造函数1.首先我们知道一个常用的编码规范:声明变量赋初值。就是说我们在声明一个变量的时候,可以对它进行初始化,如果不对自己定义的变量进行初始化,一般编译器会指定一个随机值对它进行初始化,例如:int i = 0;int *p = NULL;mallo 申请到的内存区域使用memset进行设置。说白了,初始化就是给变量让它处于一个特定的状态、同理,成员函数在进行定义的时...

2019-01-18 18:16:57 284

原创 【C++基础】类与对象、封装

六、类与对象:我们首先看一下结构化程序设计语言(常见的就是C语言)的设计思想:程序 = 算法 + 数据结构其中算法第一,数据结构第二而面向对象的程序设计OOP(Object Oriented Programming)的设计思想则是:程序 = 对象 + 对象 + 对象 ……关键:让每一个对象负责执行一组相关的任务1.面向对象编程开发的特性:1)万物皆对象2)程序就...

2019-01-17 14:37:23 243

原创 【C++基础】引用、内联函数、默认参数传递、函数重载和函数模板

C++的语法非常多和繁杂,今天我们先了解一些最基础的语法知识点:引用、内联函数、默认参数传递、函数重载和函数模板这几个方面。一、引用和引用的参数传递:1.操作引用:&amp;只有在声明引用的时候是引用操作符,其他时候都是地址操作符。2.引用和变量指向同一个存储单元。引用一旦初始化,它就维系在一定的目标上,再也不分不开。3.引用和指针的差别:指针是一个变量,可以把它再赋值指向...

2019-01-16 16:11:51 361

原创 求数组中,重复的元素

先来看一下原题:在大小为 2N的数组 A中有 N+1 个不同的元素,其中有一个元素重复了 N 次。返回重复了 N次的那个元素。这道题来源于领扣,属于中等难度的题目。首先来对题目做一下分析:示例 1:输入:[1,2,3,3]输出:3示例 2:输入:[2,1,2,5,3,2]输出:2示例3:输入:[5,1,5,2,5,3,5,4]输出:5需要...

2019-01-13 16:25:05 361

原创 【C语言】main函数里面的参数的重要作用(转自百科)

对于main函数我们使用的是最多的,但是主函数其实也是有参数的,只是我们平常不太注意而已,所以我们来看一下,main函数的参数,以及其所代表的意思。  argc,argv 用命令行编译程序时有用。  主函数main中变量(int argc,char *argv[ ])的含义  有些编译器允许将main()的返回类型声明为void,这已不再是合法的C++  main(int argc,...

2018-10-18 12:43:45 2233

原创 【C语言】宏定义define 和类型重命名typedef

  C语言里面有两个不容易区分的语法概念,宏定义define 和类型重命名typedef。下面我们来谈一下两者之间的差异。  1.类型重命名typedef:关键字typedef提供了一种为已定义好的数据类型创建别名的机制,为了创建更简短的类型名,通常使用typeddef来为结构体起名字,这样就不需要结构体标记了。使用typedef可以提高程序的可移植性,可读性和可维护性。2.预处理命令...

2018-09-24 14:51:26 3012

原创 【C语言】动态内存分配

我们再了解内存的分配情况前,首先我们需要了解代码及其中的东西,在内存中都是怎么存放的。我们首先来看一个示意图。这张图片展示的就是代码在存储区的存储状况,最上面是代码段,代码段就是用来保存代码的文本文档的。全局变量区就是用来保存全局变量和静态变量的,所有的全局变量都在这一部分。而栈是用来保存局部变量的,栈里面保存的变量申请以后由操作系统来负责释放,而与之相对应的是堆,申请堆里面的内存,称为动态内存分...

2018-07-09 16:35:09 259

原创 C语言中const的用法

       有时候我们希望定义这样一种变量,它的值不能被改变,在整个作用域中都保持固定。例如,用一个变量来表示班级的人数,或者表示内存区的大小。为了满足这一要求,可以使用const关键字对变量加以限定,但其实const最常用的地方还是用来防止指针被修改。       我们就来看一下const在C语言里面的一些要点以及用法:1、限定写权限,将变量变成只读。2、基本数据类型对于const透明。3、c...

2018-06-08 14:18:28 502

原创 指针应用最重要的两点—传指针和解引用

我们定义一个函数,就是为了使用它,但是在进行参数传递的时候我们需要 注意两点,一个是传指针,另外一个就是解引用,这两点缺一不可,

2018-06-02 14:03:52 677

原创 Printf函数和Scanf函数的返回值

      要说起在C语言里面我们用的比较多函数是什么,可能有的人会说是main函数,确实是这样,一个函数里面不能没有主函数,而且只能有一个。其实除了主函数,还有最重要的两个函数那就是printf函数和scanf函数,这两个函数都是用来格式化输入输出数据的函数。但实际在编程里面我们要进行输入输出数据的话,可以通过函数的形参来进行传递数据,所以scanf函数的重要性就显得很低了,但是printf总是...

2018-05-30 19:29:21 1396 2

原创 C指针

       要是说起C语言里面哪一部分最难,可能大多数人的回答就是“指针”,确实不假。指针可能是好多初学C语言者的一大难题。但是其实指针难就难在了它的名字上。为什么这么说呢,你尝试着将所有用“指针”表达的地方,全部改为“地址”。比如你要表达“指针变量”,你就改成“地址变量”;你要表达“定义一个指针变量”,改成“定义一个地址变量”。然后你就会发现原来指针也并不是很难。那为什么可以将指针改为地址呢?...

2018-05-27 13:32:55 218

原创 浮点数里面的重要问题—精度

上一篇博客我写了浮点数的存储方式,但其实浮点数里面还有一个重要的问题,就是精度的问题。首先我们要了解的就是浮点数的精度的来源:为什么会有精度的问题?      首先我们得知道实数是一个连续的无穷集合,即使是范围在-1 - 1之间的实数组成的集合也是无穷的。而由浮点数表示方法来看,对于确定阶码和尾数位数的浮点数,其个数是有限的。同时随着阶码的增大,相邻俩浮点数间的 距离会越来越大。单精度浮点数最大值...

2018-05-05 18:34:52 2332

原创 浅谈浮点数的存储方式

    在谈浮点数的存放方式之前,我们先来复习一些有关于位和字节的基本的知识:    我们知道1字节=8位(1Byte=8bit),也就是说一个字节里面有八个位置,用来存放0和1这两种状态。而浮点数有float和double两种类型,我们先说比较简单的float类型,因为float类型只有四个字节,也就是一共有32位(4*8)。就是有32个位置来存放0和1.    复习完这些知识,我们在来看一下浮...

2018-04-17 13:44:16 2084

原创 详解函数的递归

    C语言的一个最大的特点就是允许函数的递归调用。递归调用指的是:在一个函数的调用过程中又出现直接或者间接地调用该函数本身,称为函数的递归调用。    首先来看一个比较经典的例题:    有五个学生在一起,问第五个学生多大,他说比第四个学生大两岁,问第四个学生,他说他比第三个学生大两岁,问第三个学生,他说他比第二个学生大两岁,问第二个学生,他说他比第一个学生大两岁。最后问第一个学生,他说他10...

2018-04-15 23:27:07 763

原创 通过折半查找来学一学Visual Studio 2012的调试

我们先来看一段代码:#include&lt;stdio.h&gt;int BinSearch(int *arr,int len,int key){ int low=0; int high=len-1; int mid; while(low&lt;=high) { mid=(low+high)&gt;&gt;1; if(arr[mid]==key) { return ...

2018-04-07 18:00:48 185

空空如也

空空如也

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

TA关注的人

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