自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

John的博客

学无止境

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

原创 二叉树的遍历方式(递归)

二叉树的遍历方式(递归)博客摘要:博客链接:非递归遍历二叉树 1.什么是二叉树的遍历? 四种遍历是什么? 2.递归的实现二叉树的遍历; (下一篇博客将讲述三种遍历的非递归实现)一. 什么是二叉树简述:二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。例如下图: 二.四种遍历本篇博客讲述二叉树的四种遍历:前序遍历,中序遍历,后序遍历,层序遍历

2016-10-01 14:32:46 2355 3

原创 【网络】基础复习

复习的起点:网络协议的体系结构;OSI七层协议和TCP/IP四层协议OSI七层协议从上往下:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层;OSI七层协议是用来学习的协议模型,在实际使用中使用的基本都是TCP/IP四层协议;前三层只学习应用层:即用户使用,如http,ftp等协议; 传输层: TCP、UDP 都是传输层的协议,不过两者有很大的区别,后面细细复习; 网络层:负责不同主

2017-07-02 11:02:11 1644

原创 【链表复习】链表相关面试题

题目描述 输入一个链表,从尾到头打印链表每个节点的值。class Solution {public: vector<int> ret; //保存链表值 vector<int> printListFromTailToHead(ListNode* head) { fun(head); //递归 return ret; } //递归

2017-06-30 22:26:41 865 1

原创 【STL】关联式容器

【STL】常用容器总结,带有复习性质的学习更有效率;【STL】 关联式容器复习在复习关联式容器之前,先回忆一下底层的基本数据机构;【树】: 常见的树有二叉树,搜索二叉树,RB_tree, AVL _tree, 哈弗曼树;:下面只做特点的回顾,代码及具体细节有前面专门的博客,后面给出链接;普通的二叉树即一种左右子树的结构,没有什么特别的地方,只是查找的时间复杂度为logn;搜索二叉树的特点则是左子树

2017-06-28 11:36:02 594

原创 【STL】堆

【STL】常用容器总结,带有复习性质的学习更有效率;【Heap】 在STL中不是以容器的方式呈现的,而是以算法的方式;所谓堆,其实就是将数组假想成完全二叉树,满足某种规则的呈现。 某种规则就是堆顶(数组第一个元素)始终为最大或者最小的元素,还可以结合数组连续性的特性进行堆排序;堆分为 max heap 和 min heap, STL默认的是 max heap , 所以下面实现的时候也会

2017-06-27 17:11:46 1868

原创 【STL】序列式容器--stack和queue

【STL】常用容器总结,带有复习性质的学习更有效率;【栈和队列】栈和队列相关的问题在面试中真的是被问的不要不要的,下面我先从栈和队列的数据结构开始复习,最后做几道栈和队列的相关面试题作为巩固;【栈】: 一种先进后出的结构,在操作系统中应用广泛;在STL中的栈容器,底层默认是deque作为数据结构(queue也是一样),但是由于双端队列用的比较少,而且比较复杂,没有过多研究,同样list和vector

2017-06-27 13:13:42 610

原创 【STL】序列式容器--list(简单复习)

【STL】常用容器总结,带有复习性质的学习更有效率;list 和 vector 是最常用的两个容器,也是在面试中最常被问到的,让你对比一下这两个容器;那么,首先复习一下 list 的结构,list 底层的数据结构是双向链表,同时,和vector不同的是,list 的迭代器不再是原生指针, 而是专门封装的双向迭代器;既然是链表,那么和 vector 一对比, 不同之处就很明显了, 首先因为是链表结构,

2017-06-27 09:11:43 447

原创 【STL】序列式容器--vector

【STL】常用容器总结,带有复习性质的学习更有效率;【vector】序列式动态增长的容器优点:相比如array的数组,不拘泥于固定大小,可以动态增长,依然可以采用下标的方式随机访问,(未雨绸缪)提前根据需求调用API设置vector初始大小,这是因为vector存在的缺陷(见下);缺点:因为是固定位置的结构,所以避免不了的是挪动时的消耗,比如,删除一个元素,vector底层是将要删除的元素后面的元素

2017-06-27 08:33:23 499

原创 【Linux】Shell脚本学习总结篇

【Linux】Shell脚本学习总结篇shell学习分为下面3个部分:shell基本命令回顾shell基本语法学习awk/sed 工具学习关于shell的介绍之类的在这里不做赘述!shell基本命令回顾1.1 最基础的常用命令(注:命令选项直接 man 查看,不做说明) 1.1.1 查看文件和目录的命令ls : 列出目录下的清单;cat: 连接显示文件内容less/more: 分页显

2017-06-11 17:24:31 21531 2

原创 【操作系统】堆与内存管理概述

—–要说到操作系统的堆与内存的管理的话,那内容真的是海了去了,从开始的地方就能不停的扩展,但内容的重要性也是不可言喻的,本片博客着重于总结以下三点:Linux的虚拟地址空间布局堆和栈的管理,堆和栈的区别中间会涉及到一些扩展的知识,但是不会细说!开始的地方: 程序的内存布局要说堆和内存管理,那么开始的地方不得不是程序的内存布局,即虚拟地址空间,下面贴出一张虚拟地址空间图(盗的图): 分析 : 这

2017-04-13 21:00:14 2987

原创 【设计模式学习】抽象工厂模式

cpp学习抽象工厂模式;在学习抽象工厂模式之前,先来回忆一下上一节学习的工厂方法模式;工厂方法模式,采用多态分离的方法,将简单工厂模式的工厂类解放为多个具体的子工厂, 从而继承简单工厂模式的优点,解决简单工厂模式的缺点;工厂方法模式的缺点:在增加一个新产品的时候,需要增加一个产品类和一个具体的 子工厂,给系统带来额外的开销;同时,每个工厂生产一种产品,太过单一;而抽象工厂模式,其实相对于工厂方法模式

2017-04-06 09:01:35 1518 2

原创 【设计模式学习】工厂方法模式

cpp学习设计模式:工厂方法模式在学习工厂方法模式之前,先回忆前面学的简单工厂模式;简单工厂模式就是将对象的创建和逻辑的判断都交给了一个工厂类去做,这样做的优点是客户端不需要知道具体产品类的类名和具体产品的生产过程,达到分离的目的;但是简单工厂模式的缺点也是不容忽略的,那就是工厂类的责任太过重大,而且如果产品类比较多的话,判断逻辑也会比较复杂,使系统的逻辑变得难理解;上面是对简单工厂模式的回忆;那么

2017-04-05 09:45:33 1227

原创 【C++】虚函数和虚继承的内存分布情况

最近做题的时候经常遇到虚函数和虚继承的内存分布情况问题,自己也有点生疏了,所以,赶紧在这里回忆补充一下!先从一个类的内存分布情况开始看起:环境:VS2012class A{ int a;public: A() :a(1) {} void fun() { cout<<"A"<<endl; }};按照我的理解,内存中只有

2017-04-04 12:30:07 1137

原创 【设计模式学习】简单工厂模式

C++学习简单工厂模式首先,明确一点,简单工厂模式属于创建型模式,但不属于GoF的23种模式;简单工厂模式的定义: 根据传入的参数即可返回需要的对象,而不需要知道具体的类名;简单说明:就是根据传入的参数返回可能的类的具体实例,通常工厂返回的类都具有一个公共的方法和父类;而工厂是什么?就是产生实例类的工厂类,将对象的创建和使用分离开来;简单举例:如果你想吃水果,比如香蕉,现在有两种获取的方法,一种是自

2017-04-04 10:16:30 1214 5

原创 【 设计模式学习】单例模式

在面试的过程中屡屡被问到设计模式,出现频率很高,可见设计模式的重要性,所以,学习设计模式刻不容缓!先了解一下什么是设计模式?设计模式的定义: 设计模式是一套被反复使用,多数人知晓的、经过分类编目的、代码设计的总结,使用设计模式是为了可重用代码,让代码更容易被他人理解,保证代码可靠性。设计模式的分类:按照目的可分为三类,创建型模式,结构型模式,行为型模式;按照范围,即模式主要处理类之

2017-04-03 11:19:50 970

原创 【网络】select/poll/epoll事件处理图示

select/poll/epoll I/O多路复用没有文字说明,只有好的文章链接:重点都是epollepoll的实现机制讲解: http://www.cnblogs.com/sniperHW/p/3619384.htmlepoll的 LE/ET 模式演示分析: http://www.cnblogs.com/yuuyuu/p/5103744.html epoll 源码实现分析链接:

2017-03-24 10:51:39 1663

原创 CVTE笔试题---字符串的全排列

今天笔了cvte的实习生在线笔试题,一个感觉,基础很重要,如果没有扎实的基础,全是不定项的选择题,真的都是致命伤;下面我就编程题–字符串的全排列进行总结;当然,这道题在剑指offer上就有,面试经常出,我以前也做过,但是时间长了,不太熟了,做的时候挺吃力,就在这里总结一下吧!题目: 输入一个字符串,打印该字符串中字符的所有排列,例如输入abc,则打印出abc,acb,bac,bca,cab,cba。

2017-03-18 22:49:11 946

原创 C和C++的区别和联系(扩展知识)

2017/3/17 复习整理:C/C++区别与联系;关于C和C++的区别是面试中经常会被问到的问题,本着即将面试的心态,进行知识整理,并对小知识点进行扩展;C/C++的联系:C++是C的超集,兼容大部分C的语法的结构; 联系嘛我只能想到这个,毕竟cplusplus嘛!C/C++区别:第一点就应该想到C是面向过程的语言,而C++是面向对象的语言,一般简历上第一条都

2017-03-17 13:26:48 43762 13

原创 【网络】TCP三次握手四次挥手

TCP三次握手四次挥手: 建立链接: 请求发起方主动打开链接,接收方被动打开; 三次握手: 请求端发送一个SYN报文段请求链接,由CLOSE状态转为SYN_SEND状态,此时接收端被动打开,由CLOSE状态切为LISTEN状态并保持,当接收到SYN报文段之后,接收端会发送一个确认报文段,告诉发送端我收到链接请求,此报文段SYN=1,ACK=1,还有窗口大小,协商好的序号;状态切换到SYN_RCVD;

2017-03-16 15:04:47 1762

原创 【Linux】线程安全与可重入函数

【Linux学习】:在Linux的一段时间学习中,刚开始是模糊的,所以很久没有进行博客的整理,直到最近自己把Linux的学习从前往后回忆与联系清楚了,觉得是时候整理成博客,变为自己的学习笔记了,先从线程安全和可重入函数整理,一方面是趁热打铁,另一方面是在这篇博客中,其实嵌套着前面的学习!第一部分: 线程安全最直接的概念,不管是从网上查阅资料还是书上看到的,都会有这么一句:一般来说,一个函数是线程安全

2017-03-06 19:11:30 1351

原创 【Linux】进度条与缓冲区

Linux下缓冲区的刷新直击主题:缓冲区关于缓冲区,我们在C/C++编程时所了解到的就是系统提供的一个暂存区,暂时存放我们的输入和输出,是一块不太大的空间,至于具体为什么要有这块空间,当然是为了提高系统的效率;当然,在这里就不得不提一个概念,就是标准库函数和系统调用之间的关系;printf就是一个标准输出函数,标准库函数一般是对系统调用的封装,而printf即是对write系统调用的封装,不过在调用

2017-01-03 18:47:52 4110

原创 【Git】从本地上传到github的文章显示图片的方法

虽然这段时间一直在git上上传代码或者是文章,但是还没有试过在github上面上传图片,前两天写了一篇博客,里面有很多插图,就想着是不是可以一块上传到github上面去呢?中间失败的各种方法就不赘述,下面说一下成功的两种方法:方法一 :将图片单独上传到github上,然后在编辑框中将图片在github中的链接加进去即可显示,这种方法一般适合在github上在线编辑文章时导入图片,因为比较麻烦;在ma

2016-12-31 10:05:17 19653 4

原创 【Linux】文件的权限管理

Linux下文件的权限管理文章主要从以下几个方面展开介绍: 文件的属性和权限 文件的权限和属性的更改 文件和目录的默认and隐藏权限 文件的特殊权限 注: 建议在Linux下使用root权限练习本部分;第一部分 初识文件的类型和权限1.1 文件类型和权限的查看方式使用Linux的同学都知道,在Linux下列出当前目录下的文件和子目录的命令是 ls, 同时 ls 又有

2016-12-30 10:47:34 3424 8

原创 【Linux】文件的链接

重点内容: 文件的链接Linux下文件的链接分为两种: 软连接 和 硬链接;在Linudx下使用 ls -l 命令即可看到文件的很多信息,其中第一列的第一个字符代表的就是文件的类型;而下面紧跟的数字代表文件的连接数;比如: -r-xr-xr-x 这个字符串第一个字符,代表文件的类型;linux下文件的类型通常有以下几类: d : 代表一个目录; - : 代表一个普通文件;

2016-12-30 10:37:48 11124

原创 【Linux】g++/gdb的安装和vim的配置

Linux下g++/gdb的简单安装和vim的配置首先说明,本片博客所讲的g++和gdb的安装以及vim的配置仅在Centos 6.0 版本上进行了测试,所以,不同的版本可能会出现差异!注: g++/gdb的安装方法给出的都是简单命令下载安装;g++的安装: 现在下载的Centos的版本几乎都会自带gcc和vim,所以我们需要的只是g++而已;如果没有请先下载 gcc;然后检查你的Linux是否有

2016-12-29 14:49:30 3477

原创 【Linux】find 命令概述

分析Linux下的查找命令linux下常用的查找命令:–文件查找命令:locate, find; –其它查找命令:which,whereis,whateis;注:以上命令是我当前所了解到的,后续学习中会继续补充!文章大体框架:第一部分:对查找命令的概述;第二部分:对 find 命令及其参数使用详细描述;第三部分: 总结;第一部分:查找命令概述 注: 文章下述所有命令都尽量自己在man/info

2016-12-28 18:08:38 4656

原创 【Linux】 atime、ctime、mtime 概述

前述: 我们都知道 linux 一切皆文件,而现实生活中,或者Windows下,创建一个文件都会有一个创建日期来标识这个文件,linux与此不同,Linux下的文件时间是由三个主要的时间参数来决定的,没有创建时间这一概念,而这三个主要的时间参数分别是: modification (简写: mtime): 当文件的 “内容数据”发生改动时,就会更新这个时间; status t

2016-12-25 15:57:59 2845

原创 程序化银行家算法

代码实现银行家算法代码呢,因为我现在一直在写C++代码,而我又觉得这个银行家算法的过程性比较强,所以呢就造就了这个面向过程的程序,C++的底子的程序,因为课设需要,顺便练练手,大约用了两个小时完成这一程序,所以,代码比较粗糙,不过呢,用起来还不错了!比较粗略的代码逻辑图: 代码实现:#include<iostream>#include<vector>using namespace std;//

2016-12-21 19:23:28 1681

原创 C++中RTTI与dynamic_cast

前言: 最近看了好些个关于C/C++类的书籍,其中几乎每本都会提到C++的类型强转,然后每本书讲的深浅不一,其中《编写高质量C/C++代码的 150个建议》其中有一段对dynamic_cast的举例说明中出现了陈述错误,可能是作者的失误,将static_cast和dynamic_cast的情况说反了,但是这让原本以为对dynamic_cast还算了解我,瞬间懵逼,难道我原来是记错了? 遂百度求证之

2016-12-11 21:32:01 4371 4

原创 二叉树相关编程题总结

关于二叉树的五道面试题的总结求二叉树的最远两个结点的距离;由前序遍历和中序遍历重建二叉树;判断一棵树是否是完全二叉树;求二叉树两个节点的最近公共祖先;将二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。 注:本篇博客就这五道面试题,并不是单纯的给出求解代码,而是全面的进行分析,并进行问题的延伸,在求解过程中对问题的延伸都有代码的实现,so!

2016-12-01 17:18:54 6268 2

原创 求二叉树中最远的两个节点的距离

求二叉树中最远的两个节点的距离短短的代码中其实涉及到了三道题目:利用已知序列递归的建一棵二叉树递归的求一棵树的深度求二叉树中距离最远的两个节点的距离:利用递归求树的深度的思想,在其中加入一个最大距离的引用的参数,利用了引用参数的特性,即可求得最大距离,比较简单,下面列出代码及图示;给出两组测试用例的图示://代码实现#include<iostream>#include<cassert>u

2016-11-23 19:49:14 5252 1

原创 探索B树/B+树与MySQL数据库索引的关系

本文主要讲述主轴线:由搜索/查找联系到数据结构(搜索树,红黑书,B/B+树);进行B/B+/RBtree的性能分析;讲述一些关于数据从内存以及磁盘读取数据的数据存储管理的内容;对数据库引擎MyISAM和InnoDB的分析;前言:目前大部分数据库系统及文件系统都采用B-Tree或其变种B+Tree作为索引结构,最近学习了数据结构树这一部分的内容,又阅读了前辈们关于这一话题的的总结后,斗胆运用

2016-11-18 17:40:21 12995 3

原创 大数据处理面试题分析

**大数据处理面试题分析**最近学习了关于搜索方面的数据结构--搜索树,AVL树,红黑树,哈希表,哈希表的扩展-位图,布隆过滤器;大数据在当前社会下是非常火的,同样随之而来的是在IT行业进行面试的时候,也就变成了经常问的话题;所以我就尝试利用所学知识对以下大数据方面的面试题进行分析:我发现,如果是内存放不下,并且位图等数据结构也用不上的情况下,哈希切分则扮演重要的角色!当然,我建议如果你对数据结构有

2016-11-12 13:24:59 3898 1

转载 布隆过滤器(Bloom Filter)的原理

布隆过滤器[1](Bloom Filter)是由布隆(Burton Howard Bloom)在1970年提出的。它实际上是由一个很长的二进制向量和一系列随机映射函数组成,布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率(假正例False positives,即Bloom Filter报告某一元素存在于某集合中,但是实际上该元素

2016-11-06 15:48:14 1140

转载 Linux下vim配置IDE

我的vim IDE界面: 1、安装Vim和Vim基本插件首先安装好Vim和Vim的基本插件。这些使用apt-get安装即可:lingd@ubuntu:~/arm$sudo apt-get install vim vim-scripts vim-doc其中vim-scripts是vim的一些基本插件,包括语法高亮的支持、缩进等等。vim中文帮助文档tar包下载地址:http://sour

2016-11-05 16:29:14 4350

原创 哈夫曼树实现文件压缩

最近在学了哈夫曼树之后,作为练习,写了一个文件压缩的小项目; 在这里和大家分享一下;主要实现思路: 利用哈夫曼树的特性对字符进行哈夫曼编码,其中运用到了最小堆;利用最小堆的特性,找出构造哈夫曼树的结点;统计文件字符出现的次数,本质是利用字符出现的次数进行构造哈夫曼树; 然后通过遍历哈夫曼树获取哈夫曼编码;配置文件的主要内容:字符,字符出现次数,哈夫曼编码 当解压缩时可以利用配置文件中的内容构造出

2016-11-05 09:34:40 5329 2

原创 git向github推送小白教程

如果你是一个程序员,你还不知道git和github的话,就说明你low了;git:分布式的版本管理工具,具体的我就不在这里百科了,既然都要开始使用git了,自己肯定要对git是什么,可以干什么要有一定的了解;学习并使用了一段时间git之后,想着自己当初摸黑入门的坎坷,就想着把git向github推送的入门使用写下来,希望可以帮助大家,当然,不得不推荐廖神(廖雪峰大神的git教程,通俗易懂,大家去看看

2016-11-04 17:54:48 13524 4

原创 报数退出问题

问题: 有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。分析: 看到这道题的时候我不由自主的想到了约瑟夫环,想到了用链表去解决,但是,细想之下,时间仓促,因为是在答题,用链表的话有点小题大作,那么便有了下面数组的解决方法!首先,有N个人,创建一个大小为N的数组,但是如果N是从键盘接收的值,那么就得提前给定一个大小合适的值,这也

2016-10-31 22:51:31 4601 6

原创 数据结构之红黑树

红黑树: 本质是一棵近似平衡的搜索树,当然,想要了解红黑树的前提是你足够了解搜索树和AVL(高度平衡的二叉搜索树);红黑树的特征: (注意,本文所讲内容时刻围绕这五条特征,请仔细阅读)1. 每个节点,不是红色就是黑色的 2. 根节点是黑色的 3. 如果一个节点是红色的,则它的两个子节点是黑色的 4. 对每个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点。

2016-10-31 16:51:09 1349

原创 二叉排序树

二叉排序树什么是二叉排序树:即一个二叉树,它的每一个结点的左孩子的key值比当前结点的key值小,而右孩子结点的key值比当前结点的key值大,这样的一个树就是二叉排序树,也叫二叉搜索树(BST_tree);一颗排序二叉树的结点框架大概就是这样:template<class K>struct SearchBinaryTreeNode{ SearchBinaryTreeNode<K>* _

2016-10-20 09:36:14 6516

空空如也

空空如也

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

TA关注的人

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