自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 Ubuntu18.04安装教程

今天虚拟机因为磁盘空间太小,在调整磁盘大小的过程中,无奈因能力有限,将虚拟机搞崩了,不得不重新下载。以下所推送的博客详细的介绍了ubantu 18.0.4 版本的具体安卓过程以及软件源的更换,特此记录下来且与大家共同分享。Ubuntu18.04安装教程...

2020-11-30 21:28:46 255

转载 一致性Hash(Consistent Hashing)原理剖析

一致性Hash(Consistent Hashing)原理剖析

2020-11-27 14:33:31 165

转载 2020-11-08

B树和B+树是秋招中的一个热门话题,相关面试问题有很多,作为数据库的底层实现结构,我们很有必要对它进行了解,下面这篇博客很清晰的介绍了B数和B+树的结构以及应用场景。特此分享给大家。B树和B+树数据结构及使用场景...

2020-11-08 15:22:51 176

转载 Source Insight 4.0设置字体大小

最近在剖析一些源码,接触到了Source Insight工具,这是一款非常强大的工具,但是无奈初始字体是在太小了,让人看得很难受,网上大多数博客都是针对Source Insight 3.5版本进行阐述,实则还是有很大的出入,这里提供一篇关于4.0版本的介绍分享给大家。转自:https://blog.csdn.net/k346k346/article/details/77412413...

2020-10-15 20:28:07 600

原创 关于TCP和UDP协议的一些总结

1、TCP和UDP的区别是什么?大体来讲TCP是面向连接的,可靠的字节流服务,UDP是无连接、不可靠的数据报服务。具体如下图所示:2、字节流服务和数据报服务的区别是什么?关于两者的区别,对应到实际编程中,主要体现在通信双方是否必须执行相同次数的读写操作。TCP协议是字节流服务,发送端发送的数据并不是直接发送到接收端,而是先发送到TCP的发送缓冲区中,发送端将数据放在发送缓冲区后就完成写操作了。至于数据什么时候发送取决于TCP协议栈。当TCP模块真正开始发送数据的时候,可能将缓冲区中的数据

2020-09-16 12:54:44 347

原创 深入理解静态绑定,动态绑定及虚函数实现机制

目录静态绑定和动态绑定虚函数实现机制静态绑定和动态绑定静态绑定和动态绑定实际上是针对C++动多态机制而言的。所谓的绑定指的是函数的绑定,对于静态绑定,其函数的地址是在编译时期就已经确定了,而动态绑定是在运行时期才能确定,在汇编层次实际上是call一个寄存器。静态绑定也是对非虚函数的绑定,动态绑定是对虚函数的绑定。虚函数实现机制什么是虚函数?对于类的成员方法在其前面加上virtul关键字进行修饰,那么该成员函数就变成了虚函数。先看一下代码:class Base {public:

2020-09-14 23:47:27 358

原创 关于智能指针,你想要的都在这里

智能指针介绍 自己实现智能指针 不带引用计数的智能指针 带引用计数的智能指针shared_ptr、weak_ptr 智能指针的交叉引用(循环引用)问题 多线程访问共享对象问题 自定义删除器

2020-09-14 09:53:43 282

原创 超详细的单例模式详解

目录什么是单例模式饿汉单例模式懒汉单例模式关于单例模式引发的几点思考什么是单例模式单例模式是什么?根据其名字而言,单例说明该类只有一个实例,那么要访问这一个唯一的实例,则需要提供一个接口来公共访问该实例。对于实例的创建时期不同,单例模式又分为饿汉单例模式以及懒汉单例模式,下面则分别进行介绍。饿汉单例模式试想一下对于一个十分饥饿的人而言,他是愿意获取线程的食物还是自己制作事物呢?我相信答案肯定是直接获取事物。而饿汉单例模式顾名思义该实例就是在调用接口之前已经创建好了的,用的时候

2020-09-06 14:56:44 732

原创 KMP算法其实很简单

目录KMP算法产生原因前缀和后缀next数组求解过程KMP算法KMP算法产生原因朴素算法(BF)进行模式串匹配的思想为将模式串与主串进行字符比较,如果相等,那么模式串和主串中对应位置的指针均往后前进一步,如果模式串中所有的字符都匹配成功了,则表示主串中包含模式串,但如果在某一位置不等,则从主串的下一位置开始重新和模式串进行比较,如果指向主串的指针越界,咋表示匹配失败。BF算法其思想比较简单,实现过程也并不复杂,网上相关博客很多,这里不做赘述,如果读者不懂BF算法,可进行查阅分析。好了

2020-09-06 14:45:38 420

原创 设计模式--代理模式

目录代理模式定义代理模式代码实现代理模式定义何为代理模式?代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗来讲代理模式就是我们生活中常见的中介,对于产品的选择,用户只需要选择自己想要的,具体的细节交给中介去做就可以。举个简单的例子,生活中有各种各样的观影APP,如爱奇艺、腾讯、优酷等等。他们都有一个公共的特性,那就是有些电影普通用户就可以观看,有些电影需...

2020-04-30 23:21:41 224

原创 string容器简单实现

string字符串在代码编辑中常常出现,本文主要介绍string内部常用函数的实现过程,关键点包含运算符的重载,左值拷贝和右值拷贝,左值运算符重载和右值运算符重载及迭代器的实现过程。相关函数未完全给出,以后会不断更新,敬请期待#include<iostream>#include<cstring>using namespace std;class St...

2020-04-14 16:46:09 296

原创 Linux命令总结

Linux与Windows最大的区别之一就在于Linux采用shell命令行进行交互,并非图形化界面。其命令繁多,本文就针对Linux常用命令进行了较为全面的总结,其目的在于方便今后的学习,对于不足之处,希望读者给予指出。系统信息arch 显示机器的处理器架构 uname -m 显示机器的处理器架构 uname -r 显示正在使用的内核版本 cat /proc/cpuinfo...

2020-04-14 16:36:33 175

原创 数据结构-----平衡二叉树(Balanced Binary Tree)

AVL树的定义及其特性:平衡二叉树(Balanced Binary Tree 或 Height-Balanced Tree)又称AVL树。它或者是一颗空树,或者是具有以下性质的二叉树:它的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差的绝对值不超过1; 该树上任意结点的平衡因子BF(Balance Factor)定义为该结点左子树的深度减去右子树的深度,则平衡因子只能取-1、0...

2019-09-23 13:48:06 676

原创 实现C程序调用C++代码及C++程序调用C代码

在学习过程中,一次偶然的经历让自己产生了一些想法。对于常常使用的在.c文件中自定义的函数,能否在.cpp文件中使用呢?反之,.cpp文件中的函数能否在.c文件中使用呢?经过相关资料的查询,发现其实这是完全可以的,下面将对其进行详细目录 C程序调用C++代码C++程序调用C代码C程序调用C++代码首先我们给出一段代码:在.c文件中:...

2019-07-27 19:04:09 469

原创 数据结构-----二叉搜索树(binary search tree)

二叉搜索树简称为BST树,其主要特点为左孩子数据域的数值 <父结点数据域的数值 < 右孩子数据域的数值。如图所示即为一颗二叉排序树:通过示例可以看出,二叉搜索树实质上就是对于二叉树的推广,只是在普通的二叉树上做出特殊要求罢了。关于二叉树可以参考我的其他博文https://blog.csdn.net/FDk_LCL/article/details/89221363。下面将...

2019-05-28 17:04:24 282

原创 经典排序算法----堆排序(C语言实现)

算法表述:堆排序的基本原理为将待排序序列构造成一个大根堆,此时,整个序列的最大值就是堆顶的根节点。将其与末尾元素进行交换,此时末尾就为最大值。然后将剩余n-1个元素重新构造成一个大根堆,重复上述操作,最终序列为有序。备注:大根堆是每个结点的值都大于或等于其左右孩子结点的值;小根堆是每个结点的值都小于或等于其左右孩子结点的值。如图所示:而实际上堆的存储形式是一维数组。算法执行...

2019-05-26 22:38:39 3534 2

原创 经典排序算法-----shell排序(C语言实现)

算法表述:shell排序实际上是一种直接插入排序推广,其基本原理为其先将一组数分成若干组;此处应该注意,分组的方式不能几个几个紧挨着分组,而是采用每次所分组数均为素数且最后一次分组为1的方法,采用分组的好处是,在每次排序完后都是将小的数尽量往前面赶,大的数尽量往后面赶,最后一次排序直接采用直接插入排序。运用到了直接插入排序越有序有快的特性。算法执行过程分析:例如:12、5、9、34、6...

2019-05-26 22:31:21 1786

原创 经典排序算法-----归并排序(C语言实现)

算法表述:归并排序的基本原理是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。其实通俗来说,对于一个数来说自身是有序的,然后每次选取两个数使之自身有序,然后每次选取四个数使之自身有序,以后以二倍增长选择,进行排序。将若将两有个有序表合成一个有序表,成为二路归并。(具体可以依据下图进行分析)算法执行过程...

2019-05-26 22:24:15 6070

原创 经典排序算法----基数排序(C语言排序)

算法表述:基数排序也叫桶排序,我自称它为神奇的排序。之所以说它神奇,请读者仔细往下读,最后你就会明白我为什么这么说了。他的基本原理为首先找出序列中最大的那个数,依据这个数的位数确定入桶出桶的次数。之后将数按位进行分离,依据位数值选择对应的桶,当数字全部入桶之后,我们在将数字进行出桶。这里我们将桶设计为单链表结构,对于入桶操作我们设计为尾插法,出桶操作我们设计为头删法。那么桶的个数我们如何确定呢...

2019-05-26 22:13:14 2211

原创 经典排序算法-----快速排序(C语言实现)

算法表述:快速排序算法的基本原理为通过一次排序将要排序的数据分割成独立的两部分,将序列分为两部分的中间数作为基准(par),基准左边的数都要比基准右边的数要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。算法执行过程分析:例如:8,15,26,18,7,66,44分析:依靠基准将序列分割为两部分,那么基准如何找到呢??????...

2019-05-26 21:38:22 38450 14

原创 经典排序算法-----直接插入排序(C语言实现)

算法表述:直接插入排序的基本原理就如同打扑克牌一样,起初在摸牌的时候,第一张牌对于自身而言是有序的,假如摸到4,当第二次摸到6时,会将6放在4的后面,第三次摸到3时,会将3放在4的前面,这个过程就是直接插入排序。那么对于6和3而言,如何知道是大还是小呢?过程很简单,每摸到一张牌就和前面已有序数列作比较比较,然后交换顺序即可。算法执行过程分析:例如:8、45、18、33、15、99、3...

2019-05-26 18:38:46 5974

原创 经典排序算法-----选择排序(C语言实现)

算法表述:选择排序的基本原理是以序列首元素位置为基准位置,每次将该基准位置的元素和后面元素逐个进行比较,挑选最大或者最小的那个数放在基准位置上,一趟比较结束后,然后将基准位置设置为该位置的下一位置,重复上述操作,直到基准被安排在序列的最后有一个位置时,此时序列已经排列完成。算法执行过程分析:例如:88、5、15、56、32、18、69说明:按照从小到大的顺序进行排序,其中每条彩色线条...

2019-05-26 18:12:28 5627 5

原创 经典排序算法-----冒泡排序(C语言实现)

算法描述:冒泡排序是一种较为简单的排序算法,其基本思想为从头开始依次比较相邻的两个元素大小,将较大(较小)的元素移至右端,最终使最大(最小)的元素移至序列最后,再次重复上述过程,直到最终序列完全有序为止。算法执行过程分析:例如:有一行数分别是26、10,83,56,28,66,7说明:按照从小到大的顺序进行排序,方框数为比较的次数,以下图示为比较完交换的结果。(1)第一躺排序:...

2019-05-26 13:52:36 1640 1

原创 二维数组顺时针输出(C语言实现)

题目概述:给定一个二维数组,要求顺时针对其进行输出。例如给定二维数组int arr[3][3] = {{1,2,3},{4,5,6},{7,8,9}};要求输出结果为:1、2、3、6、9、8、7、4、5。题目分析:这道题目乍一想似乎很简单,只不过是通过变量控制,输出结果就行。但事实上要实现任意二维数组的顺时针输出,这种方法边不可取。于是自己花了很多时间去思考其求解过程。仔细一想,二维数...

2019-05-25 22:47:05 5238

原创 数据库-----详谈sql语句单表查询,多表查询

数据查询是数据库中最常用的操作。SQL提供select语句在一定条件下对指定的基本表进行查询。由于查询需求的复杂程度不同,可分为单表查询和多表查询。两种查询将在后面依次进行介绍。在介绍单表查询和多表查询之前,首先我们提出select 语句查询基本格式为:SELECT 属性列表 FROM 表名 [WHERE 条件表达式1] [GROUP BY 属性名1 [HAVING 条件表达式...

2019-05-23 00:01:07 2045

原创 数据库-----sql语句对数据库、基本表创建、增删改查等基本操作

sql语句对数据库操作:1、创建数据库create database 数据库名称;举例:创建一个数据库dbcoursecreate database dbcourse;2、查看数据库show databases;3、使用数据库use 数据库名称举例:使用数据库dbcourseuse dbcourse;4、删除数据库drop database 数据库...

2019-05-21 21:17:12 4544

原创 数字化婚姻配对尝试问题(C++实现)

问题描述:一、标题:数字化婚姻配对尝试二、题目:建立一个模型,来模拟推导社会男女择偶过程。为了模型简化,一个人的特性指标有三个,这里假设为财富、样貌、品格,每个指标均可取值1-100之间任意数字。同样也对这3项指标有自己的需求。这3个需求值取值范围都在1-98间,当然三者的和必须为100.所以任意一个人可以用以下数组来表述:G(A、B、C、A1、B1、C1)G代表男,M代表...

2019-05-21 18:13:20 2428

原创 C++-----继承那些事儿(一)

善有恒何必三更眠五更起,最无益莫过一日瀑十日寒。每天进步一点点,终会成为梦想的自己。目录何为继承单继承和多继承派生类中,从基类继承来的成员的访问限定派生类怎么初始化从基类继承来的成员基类和派生类同名成员函数之间的关系赋值兼容性规则何为继承C++作为一种面向对象编程语言,其好处之一就是代码的复用。为了实现代码的复用C++采用方式之一就是通过继承。所谓继承就是从...

2019-05-20 23:07:53 181

原创 剑指offer-----两个队列实现一个栈(C++实现)

题目概述:用两个队列实现一个栈,请实现他的两个函数Push和 Pop,分别完成入栈和出栈功能。题目分析:我们知道队列结构的特点是“先进先出”,栈结构的特点的“先进后出”;仔细分析这道题,本道题的要求为将两个队列组合起来形成一个“先进后出”结构。这里我们令第一个队列为queue1,第二个队列为queue2,起始两个队列均为空。首先我们陆续向栈中压入元素a、b、c,这里我们先压入queu...

2019-05-09 23:02:49 6203 6

原创 剑指offer-----两个栈实现一个队列(C++实现)

题目概述:用两个栈实现一个队列,请实现他的两个函数appendTail 和 deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。题目分析:我们知道栈结构的特点是“先进后出”,队列结构的特点的“先进先出”;仔细分析这道题,本道题的要求为将两个栈组合起来形成一个“先进先出”结构。这里我们令第一个栈为stack1,第二个栈为stack2,首先插入一个元素a进入stack1...

2019-05-08 19:48:29 1272

原创 文章单词频数统计-----(C语言版)

题目概述:给定一篇英语单词数少于50万的文章(.txt),要求统计每个单词出现的频数以及正篇文章单词数,并且要求将所得频数依据从大到小的顺序进行输出。(输出要求:单词名称 ===== 出现次数)解题思想:将.txt文件读入内存中; 设置一个world结构体用于存储单个单词,设置一个N结构体用于统计单词总个数,并在其中定义一个world结构体类型的指针,以便为后续操作提供便利; 将内...

2019-04-28 23:34:46 2020 9

原创 C/C++面经题-----malloc/free与new/delete区别

C/C++面试,面试官常常会询问我们malloc/free和new/delete的区别是什么?这个问题并不难,但是完全回答正确却不容易,下面我对其异同做出分点概述。目录malloc/new异同点free/delete异同点malloc/new异同点<1>malloc 和new都是在堆上开辟的。但是 malloc 仅仅只是负责开辟内存,需要用户自己进行初始化;...

2019-04-27 14:33:44 267

原创 C++-----详谈this指针

C++中this指针就像是一个害羞的孩子,总是藏在一个隐蔽的地方。但是它却拥有着强大的功能,是C++中不可缺少的部分,下面我们就针对它做出详细介绍。我们首先来看一段代码:#include<iostream>using namespace std;class Test{public: Test(int data = 0):ma(data){} //构造函数...

2019-04-26 14:45:59 189

原创 C++-----对象的生命周期(二)

知识的积累在于日积月累,每天掌握一点点,你会变得更加强大。关于如何分析对象的生命周期,可以参照博文(https://mp.csdn.net/postedit/89514602)。本片文章主要针对如何对程序进行优化,减少一些无关函数的调用,以提高程序的执行效率。我们首先给出一段程序:#include<iostream>using namespace std;clas...

2019-04-26 01:10:59 307

原创 C++-----对象的生命周期(一)

C++和C的不同点之一在于C++通过类来定义对象,那么对象何时产生,是否需要释放呢???本篇文章将会针对对象的生命周期做出详细介绍。关于对象的生命周期,我们需要了解类的构造函数,析构函数,拷贝构造函数,赋值运算符重载函数等等。(具体可以参照我的博文https://mp.csdn.net/postedit/89514819)。首先我们给出以下代码:#include<iostr...

2019-04-26 00:10:17 632

原创 C++-----类的构造函数、析构函数、拷贝构造函数以及赋值运算符重载函数

目录构造函数析构函数拷贝构造函数赋值运算符重载函数构造函数我们知道对于C语言,初始化结构体变量,我们可以在结构体外直接对变量进行初始化(变量默认为共有属性);如下所示:struct Complex //定义结构体Complex{ int real; int imag;};Complex com1 = {2,3}; //初始化结构体变...

2019-04-25 23:16:43 660

原创 C++-----SGI STL空间配置器(二)二级空间配置器 __default_alloc_template

考虑到小型区块所可能造成的内存碎片问题,SGI设计了双层级配置器,第一级配置器参见博文https://blog.csdn.net/FDk_LCL/article/det ails/89457601。在这里我们讲重点介绍第二级空间配置器。第二级空间配置器多了一一些机制,避免太多小额区块造成内存碎片的问题,(关于内存碎片可以参考博文https://blog.csdn.net/FDk_LCL/a...

2019-04-24 18:41:57 315

原创 C++-----浅谈内存碎片

目录内存碎片定义外碎片和内碎片内存碎片的产生内存碎片定义内存碎片即“碎片的内存”,它分为外碎片和内碎片,内存碎片描述一个系统中所有不可用的空闲内存,这些碎片之所以不能被使用,是因为负责动态分配内存的分配算法使得这些空闲的内存无法使用,这一问题的发生,原因在于这些空闲内存小且以不连续方式出现在不同的位置。因此这个问题的或大或小取决于内存管理算法的实现上。外碎片和内碎片外...

2019-04-23 23:47:59 5709 3

原创 C++-----SGI STL空间配置器(一)一级空间配置器 _malloc_alloc_template

C++ STL 容器在一定程度上简化了代码的书写过程。以STL运用的角度而言,我们并不需要了解空间配置器,因为它总是隐藏在一切组件的背后;但是如果我们就STL的实现角度而言,我们则需要深入了解容器空间配置器。本博文主要讲述SGI STL一级空间配置器目录new/delete操作construct()/destroy()allocate()/deallocate()/reallo...

2019-04-23 22:18:15 302

原创 C++-----STL - 容器空间配置器alloccator详解

目录实现一个简单的vector容器vector容器面临问题容器空间配置器实现带空间配置器的vector容器实现一个简单的vector容器容器是C++的一个重要组成部分,每一个容器都有一个空间配置器,虽然我们在使用容器的时候并没有感受到它,但是它的确是存在的。那么我们发出提问,容器的空间配置器到底有什么作用呢???别急,让我们先来实现一个简单的vector容器(无空间配置器...

2019-04-22 17:47:23 374

空空如也

空空如也

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

TA关注的人

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