- 博客(157)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 [数据结构]——位图原理及实现
位图今天我们所介绍的数据结构叫做位图,在谈什么是位图之前我们先来看一道"非常简单的题":有40亿个无符号的整型数据,现在给定一个目标数字,判断这个数字是否在这40亿数据中。题目看起来确实非常简单,有的同学说直接遍历一遍不就ok了吗?还有的同学给出了更高效的查找方式就是将这些数字排序然后进行二分查找。但是,这是有问题的,问题并不在于你搜索这个数字的效率问题,而是你在遍历也好排序也罢,这些数字在内存...
2019-05-13 14:09:38
35985
15
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 [数据结构]——浅谈AVL树原理与简易实现
AVL树相信学过数据结构的同学对于二叉搜索(排序)树一定不陌生,二叉搜索树是一颗左子节点比根节点小,右子节点比根大且他的子树也满足这种规则的一颗二叉树。二叉搜索树从名字上就知道他是用来进行数据的搜索的,理论上来讲他的搜索效率是log(n),但是事实上在某些极端情况下他好像显得并不那么有效。现在对空树插入一个有序的数列,你会发现他成为了一个单只树,最坏的搜索情况居然退化为o(n)。其实会发生这...
2019-04-21 16:24:55
881
2
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 [数据结构]——浅谈红黑树原理与简易实现
红黑树我之前的博客讲解了AVL树的性质,通过对AVL树的了解我们知道了他是一颗高度平衡的二叉搜索树,其实二叉搜索树最大的作用就是进行插入,删除,查找的操作,而AVL树查找的时间复杂度为log(n)。为了保持平衡的性质(左右子树的高度差绝对值不大于一),AVL在进行插入数据时就要进行大量的旋转,当我们的数据量非常的大时,其实我们在进行插入调整这颗树的旋转操作也会有很大的开销,这里就出现了一颗叫红黑...
2019-04-20 20:03:46
1420
1
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 [数据结构]——单调栈
单调栈笔者在做leetcode的题(下一个出现的最大数字)时,接触到了单调栈这一种数据结构,经过研究之后,发现单调栈在解决某些问题时出奇的好用,下面是对单调栈的性质和一些典型题目。什么是单调栈?从名字上就听的出来,单调栈中存放的数据应该是有序的,所以单调栈也分为单调递增栈和单调递减栈单调递增栈:数据出栈的序列为单调递增序列单调递减栈:数据出栈的序列为单调递减序列ps:这里一定要注意...
2019-04-09 17:23:28
145683
81
原创 [数据库]——如何参照MySQL学废PostGreSQL
如何参照MySQL学会PostGreSQLPostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),是以加州大学计算机系开发的POSTGRESPostgreSQL和MySQL一样,都是关系型数据库,本篇文章能教你如何在会MySQL的基础上快速使用PostgreSQL安装PostGreSQL笔者的数据库选择装在了Linux下的Centos虚拟机上,下载...
2020-04-21 17:49:00
726
原创 [数据库]——由POLARDB引发的思考
POLARDB笔者实习期间在某公司做云计算开发,组内项目不成熟正巧赶上换底座的工作,要求实现进程宕机和节点宕机的高可用无感知切换。凑巧分到了实现Mysql数据库高可用部分,实现过程中磕磕绊绊,但是关于数据库有了初步的架构认识。今天“阿里爸爸”面试官老师打电话过来问是否有意向进行数据库内核开发工作,介绍后原来是早有耳闻的POLARDB,怀着好奇心研究了下POLARDB的架构,解开了我在搭建数据...
2020-02-11 17:25:35
1633
原创 [c++]——什么是类型萃取
类型萃取类型萃取从字面意思上来说其实就是帮助我们挑选某个对象的类型,筛选特定的对象来做特定的事。C++中的类型萃取并不是每个人都熟知,他们一般都出现在STL库底层的实现原理中,和笔者一样,相信听到这个名词的读者都好奇类型萃取到底是什么,他是用来做什么事情的?不妨让我们一探究竟从vector增容说起要说类型萃取,还需要从vector增容说起,我截取出一段之前笔者模拟实现vector增容的代码...
2020-01-31 21:11:36
3918
2
原创 [c++]——小白视角总结c++11中的新特性
C++11中的新特性总结学习C++11的新特性已经很久了,但是许久不看,知识点又模糊了起来。C++11中许多特性看似复杂,但是理解了其中的道理,会觉得豁然开朗。特性一:列表初始化下面这种方式的数组初始化方式玩过C语言的同学都很熟悉:int arr[] = { 1, 2, 3, 4 };c++11中为了提供类似的方式用来初始化vector,提供了下面新的方式vector<int&...
2020-01-31 16:47:37
382
原创 [数据结构]——无锁队列
无锁队列写这篇博客前想声名以下几点。第一,这篇文章重点内容是关于无锁队列如何实现,并不会深入讲解底层的CAS机制。原因就是第二条,不知道在看博客的你是否在搜索框中输入过"无锁队列"关键字,你点开居然会惊讶的发现每一篇居然都是那么的相似,一直不理解写博客A抄B,B抄C只是为了骗访客吗?这篇被抄来抄去的博客就是酷壳陈皓老师的原创,老师的博客中深入讲解了无锁队列的原理。只是缺少最后一份代码的实现,既...
2019-09-22 17:23:30
7822
2
原创 [c/c++]——工厂模式
工厂模式工厂模式在设计模式中属于创建型模式,他提供了一种创建对象的最佳方法。在工厂模式中,我们并不会暴露给用户任何创建对象的信息,而是通过一个共同的接口来创建对象。工厂模式主要解决了接口选择的问题,其实更直白的说,您需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现。工厂模式大体的分为三类,分别为简单工厂模式、工厂方法模式和抽象工厂模式,下面来...
2019-09-20 12:26:28
1477
原创 [程序人生]——程序员要学会使用保存键
吐槽!!!单纯给老铁们一个建议,写笔记或者其他东西别用记事本,写笔记或者其他东西别用记事本,写笔记或者其他东西别用记事本。辛辛苦苦写了一天的笔记画的导图,这破烂电脑一个掉电我就回到解放前了。一定要记得多点几次保存,把鼠标给他点烂!!!!!!!!!!呜呜呜,不说了,通宵干回来,幸好微软爸爸的VS能恢复,不然我的B数(BTree)也没了!!!晚安昂。。...
2019-09-15 20:56:53
383
原创 [Linux]——IPC进程通信之消息队列
System V 消息队列消息队列是两个进程之间传递二进制数据一种简单有效的方式。每个数据块都有一个特定的类型,接收方可以根据类型来有效的接收数据,而不一定像管道和命名管道那样必须以先进先出的方式接收数据。数据块的类型其实是自己定义的,这里的类型并不是指的int、long,而是一个正整数。笔者将这里的类型理解为一个标识,我们可以用下图来为大家解释。消息队列与管道不同的是,消息队列是基于消息...
2019-08-28 14:44:42
307
原创 [Linux]——IPC进程通信之信号量
System V 信号量我们在进程间通信专题已经详细的介绍过了管道和共享内存的进程间通信机制。但是其实还有一种非常独特的进程间通信机制,也就是本篇博客将为大家介绍的System V机制的信号量。为什么说他独特,因为之前我们介绍的通信机制最终都会有一个数据交互的场所,而信号量其实是一个计数器。有的同学会提出质疑,计数器怎么能作为进程通信的机制呢?别忘了,进程控制也是进程通信的目的。接下来,笔者就...
2019-08-27 23:34:21
310
原创 [Linux]——多进程与多线程对比
多进程还是多线程进程和线程是伴随我们学习操作系统时经常会提到的概念。那句"进程是分配系统资源基本实体,线程是CPU调度的基本单位"也成了经典的俩者关系的概括。但是随着深入的学习,我们发现只理解这句话是不够的,我们需要对比两者,找到两者各自的优点,具体结合场景讨论到底使用谁更好。我们经常会看到一些一劳永逸的问题,“多进程和多线程哪个更好”、“Linux下用多进程好还是多线程好”。其实这种问法太过...
2019-08-26 19:39:46
870
原创 [Linux]——Linux下的进程调度
进程调度在多进程的操作系统中,进程调度是一个全局性、关键性的问题,他对系统的总体设计、系统的实现和功能设置以及各个方面的性能都有着决定性的作用。本博客笔者就对进程的调度这一知识点进行总结,不过为了简单起见,我们先从Linux内核2.4中调度介绍起,将原理说清楚后介绍更高级的Linux2.6内核调度算法。什么是一个好的调度算法?一个好的调度算法说明白点其实就是能够更合理的分配系统资源,所以调度...
2019-08-16 23:02:27
422
原创 [Linux]——浅谈进程的切换
Linux进程切换转眼接触Linux进程这个老朋友已经快一年了,阅读《Linux操作系统原理与应用》时接触到了调度函数schedule,这个函数中调用了context_switch函数进行进程的切换。而笔者对进程的切换产生了极大的兴趣,本篇博客我们从函数栈帧的角度看看进程到底是怎么切换的。浅析进程切换直奔主题,进程切换会发生在进程调度的前提下,所以进程切换的函数会被进程调度函数schedul...
2019-08-15 19:28:41
958
原创 [Linux]——从源码层面看epoll
多路转接epoll技术笔者之前的博客I/O多路转接epoll技术可以说从使用层面上简单的分析了epoll函数。但是相信很多同学对于epoll的原理还是处于模糊的认知阶段,并且很多帖子都说epoll底层使用了内存映射。那么事情的真相到底是怎么样的?笔者也找到了之前牛客大佬赛罗奥特曼对于epoll底层的解析代码,我们不妨站在巨人的肩膀上,对epoll一探究竟。epoll源码这里给大家贴上一个ep...
2019-08-11 16:46:46
307
原创 [Linux]——I/O多路转接epoll技术
浅析I/O多路转接epoll技术前面的两篇博客我们已经为大家介绍了select和poll函数,但是在学习中我们发现select和poll存在效率上的问题。而今天的主角epoll函数真的是让人惊艳的设计,它是在2.5.44内核中被引进的,它几乎具备了之前所说的一切优点,被公认为Linux2.6下性能最好的多路I/O就绪通知方法。包括现在最火的nginx服务器底层使用的也是epoll多路转接epo...
2019-08-09 23:32:53
285
原创 [Linux]——I/O多路转接poll技术
浅析I/O多路转接poll技术上篇博客I/O多路转接select技术笔者已经为大家详细介绍了select函数的使用方式以及特点。我们在文章最后总结的时候我们提到,select虽然已经很大程度上解决了I/O过程中等待的问题,但是由于函数本身接口设计的不友好、能够检测的文件描述符有上限,以及函数多次循环遍历的效率问题导致select在实际场景中并不是使用的那么广泛。今天我们要介绍的poll函数从一...
2019-08-08 23:03:32
223
原创 [Linux]——I/O多路转接select技术
浅析I/O多路转接select技术在谈I/O多路转接技术之前,我们先来谈谈什么是I/O。I/O是input和ouput的缩写,即输入输出端口,每个设备都有自己的输出输入地址,用来处理自己的输入输出信息。I/O的五种工作模式首先我们简单介绍一下I/O的五种工作模式,看看不同的I/O方式是如何进行工作的:阻塞I/O模型:应用程序调用一个I/O函数,导致应用程序阻塞,此应用程序会一直等待内核将...
2019-08-08 00:43:30
1003
原创 [网络]——图解HTTPS
HTTPS协议之前我们一直在聊超文本传输协议HTTP,HTTP虽然使用广泛但也存在一定的安全性问题。今天我们要谈的HTTPS协议,别看他只比HTTP多一个S。然而正是这个S,让我们在网络上请求资源时变得更加安全。HTTP的缺点这里HTTP的安全性问题,笔者用简洁的语言概括为以下三条:值得强调的是,这里我们说的HTTP的问题只涉及安全性问题,其实HTTP还存在其他功能方面的缺陷。并且,对于...
2019-08-01 22:12:44
1395
3
原创 [网络]——HTTP首部到底有哪些东西?
HTTP报文首部HTTP首部字段是构成HTTP报文的要素之一。在客户端和服务器之间以HTTP协议进行通信的过程中,无论是请求还是响应都会使用首部字段,他能起到传递额外重要信息的作用。那么今天让我们来看看首部到底有哪些东西。HTTP报文格式就算不知道HTTP报文首部具体有哪些东西的同学也一定知道请求行和状态行的内容。请求行由方法+URI+版本组成,状态行由版本+状态码+状态码描述组成。当然我...
2019-07-31 00:07:09
1084
原创 [网络]——返回结果的HTTP状态码
HTTP状态码HTTP状态码负责表示客户端HTTP请求的返回结果、标记服务器端的处理是否正常、通知出现的错误等工作。本篇博客将为大家总结一下常见的HTTP状态码,以及个别状态码之间的对比。HTTP状态码的类别类别原因短语1XXInformation(信息性状态码)接收的请求正在处理2XXSuccess(成功状态码)请求正常处理完毕3XXRedire...
2019-07-30 16:45:25
493
原创 [网络]——浅谈HTTP协议中的方法
HTTP协议中的方法HTTP协议中使用URL定位互联网上的资源,如果你需要请求这些资源就要使用相应的方法来告诉服务器你的意图,下面来看看HTTP协议中有哪些方法。HTTP协议方法一览方法说明支持的HTTP协议版本GET获取资源1.0、1.1POST传输实体主体1.0、1.1PUT传输文件1.0、1.1HEAD获取报头首部1.0、1.1...
2019-07-30 01:44:22
475
转载 [网络]——TCP长短连接以及保活性
转自:1. TCP连接当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需...
2019-07-23 12:21:04
318
原创 [网络]——浅谈用户数据报协议UDP
UDP协议之前笔者已经为大家介绍过了传输控制协议TCP,而对于设计非常复杂的TCP协议来说,今天我们所介绍的UDP协议可以说非常的简单。在读者看来,同样是传输层的UDP协议有着他的独特之处,他就好象只是为ip数据报服务增加了简单的功能。正是因为这样的简单设计才擦出了与TCP协议不一样的火花。UDP协议的特点UDP相对于TCP协议来说设计的非常简单,他相当于在ip数据报的基础上,仅仅添加了复用...
2019-07-22 19:15:51
209
原创 [网络]——什么是TCP三次握手四次挥手?
TCP的运输连接管理在还没有学习网络之前TCP的三次握手四次挥手这个概念已经屡见不鲜了,当网络原理老师照着PPT读了一遍概念后大家也都认为自己学会了这个概念,老师也不在深入,大家也没有要学习的意思。哈哈,皆大欢喜。TCP的三次握手和四次挥手可是你将要从事这一行这一业,也就必须要有刨根问题的精神,虽然相信这个概念很多人已经听的耳朵都要起茧子了,但是多熟悉几遍未必是坏事。那么现在我们先来谈一谈什...
2019-07-21 20:10:02
375
1
原创 [网络]——传输控制协议TCP你必须知道的事
TCP协议关于TCP协议的介绍的相关书籍已经太多太多,而且在搜索引擎中输入TCP关键字,也会有数以千计的结构展现你面前。但是笔者觉得没有经历过自己整理的东西永远都是别人的,虽然我们整理时可能只是把别人非常完善东西搬过来罢了,但是你要记住一句话:我们要站在巨人的肩膀上眺望远方。写这篇博客目的是让自己加深对TCP协议的理解,也便于自己日后再复习。TCP主要特点TCP协议全称传输控制协议,是传输层...
2019-07-19 21:42:11
1207
1
原创 [网络]——浅析网络套接字
套接字非常开心,笔者经过漫长的Linux系统编程终于开始了网络编程的旅途,更让人开心的是,今天我们所要将的内容虽然是与网络相关的,但是他与我们的系统编程密不可分,你发现你用你所知道的知识居然也能做出来一些好玩的东西。我们今天主要讲解的是Linux下的网络套接字编程,最后我们会用这些接口来实现一个简单的C/S通信程序。套接字概念TCP用主机的IP地址加上主机上的端口号作为TCP连接的端点,这...
2019-07-16 22:06:24
1667
2
原创 [Linux]——教你70行代码实现线程池
线程池今天讲的这个玩应真的很有意思,他的名字叫线程池,看起来线程池像是一个贼高大上的东西,实际上实现一个简单的线程池还是挺简单的,如果你想顺利的自己学会实现一个简易的线程池,那么必须具备的技能有:熟悉队列操作,熟悉互斥锁,熟悉条件变量,当然有类封装的相关知识也是非常重要的。线程池概念话说什么池就放什么东西,水池放水,奖池放钱,那不言而喻线程池当然放的线程了,但是为什么要将线程放在一个池子中呢...
2019-07-12 20:43:51
294
原创 [Linux]——基于信号量的生产者消费者模型
生产者消费者模型上篇博客基于阻塞队列的生产者消费者模型笔者已经详细的为大家介绍了什么是生产者消费者模型,而本篇博客也是实现一个生产者消费者模型,不过这次我们将会带领大家使用信号量实现一个基于循环队列的生产者消费者模型。POSIX信号量小伙伴们擦亮眼睛,这里我们使用的是基于POSIX的信号量,有的同学可能会误认为是SystemV的信号量,他们两是不同的。我指的是这两个东西不一样,但是他们的作用...
2019-07-12 15:55:22
968
原创 [Linux]——基于阻塞队列的生产消费者模型
生产者消费者模型谈生产者消费者模型之前我们必须知道什么是生产者消费者模型,看题目你可能觉得他是一个十分高深的东西,但是或许我们身边就存在生产者消费者模型。概念引入打个比方,生活中我们经常在缺少生活用品或者其他商品的时候我们通常会选择去超市,那也就不难理解,我们其实就是所谓的消费者。那生产者是超市么?答案是否定的,如果超市是生产者,那供货商是什么,所以供货商是所谓的生产者。再谈超市,其实超市是...
2019-07-12 13:54:10
314
原创 [Linux]——Linux线程同步
Linux线程同步上一篇我们讲了Linux线程的互斥,利用锁的机制保证了线程的安全。本篇博客我们将为大家讲解Linux下的同步机制,因为时序问题,而导致程序异常,我们称之为竞争状态。在线程条件下这种问题也不难理解,而为了避免发生竞争状态称为同步。同步的概念我们上面说了为了避免发生竞争状态称为同步,可是这样说太过于生涩,我们这里来举一个生活中的例子。学校中有一个单人的自习室,自习室门口挂着...
2019-07-11 11:11:44
189
原创 [Linux]——Linux线程互斥
Linux线程互斥上一篇博客中我们介绍了Linux下对线程控制的简单操作,其实就光单单论线程控制函数的使用来说控制线程并不是一件很难的事,但是线程控制真正抛给我们的难题恐怕并不是仅仅会使用函数而已,本篇博客就带领大家详细的探讨一下Linux下的线程互斥问题。线程并发操作带来的一些问题并发在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运...
2019-07-11 09:17:12
375
原创 [Linux]——Linux线程控制
Linux线程控制上篇文章我们介绍了线程的基本概念,详细叙述了线程的一些细节性知识点,我们之前写过进程控制的博客,但是我们今天所写的关于线程控制的函数与进程控制有所不同。相信你肯定还记得我们上篇博客中说明了在Linux下实际上没有真正意义上的线程,他们都是利用进程模拟的,那么也就意味着系统并没有提供一组系统调用接口来进行线程的控制,所以我们先来谈谈使用什么方案进行线程控制。POSIX线程库因...
2019-07-10 23:37:36
757
原创 [Linux]——Linux线程基本概念
线程在这篇博客之前,我们已经介绍了Linux进程中大部分的概念,之前我们介绍过了进程的基本概念,进程的控制,信号,进程间通信等一系列的机制。而今天我们所要讲解的是Linux下线程的概念,就算有的同学可能还没有学习线程,但我们发现他经常与进程联系在一起,那么线程到底是什么呢?一起往下看。什么是线程?相信你应该还记得什么是进程吧,提到进程我们又不得不提程序这一概念,程序其实我们可以简单的理解为:...
2019-07-10 21:05:19
350
原创 [Linux]——信号的一生
信号对于信号这个词大家一定都不陌生,信号产生在我们生活的各个角落,比如你过十字路口时头顶的红灯亮起你就知道要停下脚步等待绿灯的切换,再比如下课铃响了你就可以收拾书包回家…信号的真正的意义就在于当一个对象收到信号的时候,他知道针对这个信号该做出什么样的反应。值得注意的是,做出反应的前提是就算你没有收到这个信号,你也知道收到这个信号时你应该怎么做,同样说明,你并不知道你什么时候会收到信号。现在我...
2019-06-10 22:23:07
374
3
原创 [Linux]——进程间通信
进程间通信拿我们人的通信来说,我们人之间为什么要通信?我们通信又有哪些方式呢?而我们本篇博客就会为大家讲解为什么进程间需要通信,更为重要的是进程间的通信方式有哪几种,他们之间通信的原理又是怎么样的。进程间通信的目的数据传输:一个进程需要将它的数据发送给另一个进程资源共享:多个进程之间共享同样的资源通知事件:一个进程需要向另一个或一组进程发送消息,通知它发生了某种事件(如进程终止时要通知...
2019-06-01 20:57:54
305
1
原创 [Linux]——教你在Linux下生成自己的静动态库
静态库和动态库说到库,你可能觉得这个名词有点陌生,但是我相信你绝对听过这个词,因为你在学习c语言时一定使用过系统给你的库。我们初始c语言输出hello world你肯定调用了printf函数,而你也一定包了头文件。这个头文件实际上就是系统给我们的库,这个库中有我们经常使用的库函数的实现。静动态的区别既然库中有我们需要函数的实现,那么从名字上来说,静动态库至少相同的点是他们的内容应该大体相同(...
2019-06-01 13:33:08
359
原创 Vmware 虚拟机提示:无法打开磁盘***.vmdk,未能锁定文件,解决办法
虚拟机:vmware 6.5Vmware 虚拟机提示:无法打开磁盘***.vmdk,原因,未能锁定文件,解决办法如下:原因: 非正常关闭虚拟机。解决办法: (一),删除虚拟机文件所在文件来夹里所有以“.lck”结尾的文件及文件夹,重新启动即可解决。 (二),如结过(一)还不能解决,则检查虚拟机配置文件,用记事本打开 xxx.vmx文件,检查其中的 “fileSearchPath...
2019-06-01 11:08:10
6494
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人