Fred的博客

Fred's Blog

希尔排序

希尔算法 希尔排序,也称递减增量排序算法,它是插入排序的一种改进版本,非稳定排序算法。 和插入排序相比,它通过比较相距一定间距的元素来工作,各趟比较所用的距离随着算法的进行而减小,直到只比较相邻元素的最后一趟序列为止。 算法原理 基于插入排序我们得出的2个结论: 插入排序每次只能将数据移动一位 对于已经排序好的数据操作,效率总是很高 所以,希尔排序就是基于上面2点问题作出...

插入排序

插入排序 插入排序是众多排序算法中比较简单也比较基础的一种。它是由N-1趟排序组成。即在一个N的数组中,P=1趟到P=N-1趟,插入排序保证从位置0到位置P上的元素是已排序状态。 也就是说插入排序的一个基本要求是:位置0到位置P-1上的元素是已排序的。 算法原理 循环遍历数组N,将每一次遍历对象P与前面已经排序好的P-1,P-2···2,1做比较,若每次被比较位置的数值都比P大,这该数...

IP

简介 IP(Internet Protocol)网际协议是TCP/IP协议族中最核心的协议。它位于7层OSI参考模型的网络层,或者说的4层TCP/IP参考模型的网络互联层。所有的TCP、UDP、ICMP以及IGMP数据都是以IP数据报格式传输。 特点 不可靠(unreliable):它不能保证IP数据报能成功地到达目的地。IP仅提供最好的传输服务。如果发生某种错误,如某个路由器暂时用...

二叉堆

优先队列-二叉堆

简介 二叉堆是一种特殊的堆,二叉堆是完全二叉树或者是近似完全二叉树。 二叉堆满足堆特性: 父节点的键值总是保持固定的序关系于任何一个子节点的键值,且每个节点的左子树和右子树都是一个二叉堆。 结构性质 堆是一颗被完全填满的二叉树,有可能堆例外是底层,底层上堆元素从左到右填入。 下图就是一棵完全二叉树。 我们可以用一个数组来表示完全二叉树,对于数组中的任一位置i上的元素,其左儿子在...

ELK安装部署

Elasticsearch、Logstash、Kinaba、FileBeat 安装和部署

原因及目的 实现日志的自动采集、分析、展示 工具介绍 Elasticsearch:是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。 Logstash:是一个完全开源的工具,他可以对你的日志进行收集、过滤,并将其存储供以后使用(如,搜索)。 Kibana: 是一个开源和免费...

高内聚低耦合

软件工程学习笔记之细说高内聚低耦合

是什么 按照百度百科的解释,高内聚低耦合的定义是: 高内聚低耦合,是软件工程中的概念,是判断设计好坏的标准,主要是面向对象的设计,主要是看类的内聚性是否高,耦合度是否低。 当然,单纯看定义,我们并不能理解什么叫高内聚低耦合,下面我会分别解释下什么叫内聚,什么叫耦合,以及为什么要这样做。 耦合 定义 耦合是指不同的模块之间相互依赖程度的度量。高耦合(紧密耦合)是指两个模块之间存在着很...

UML类与对象

软件工程学习笔记之UML类与对象基本表示

类与对象 UML中类是一组具有相同属性、操作、关系和语义的对象描述。而对象则是类的一个实例。 通常类的表示为具有3个栏目的矩形,每个栏目从上到下分别代表类名、属性和操作。如图1-1所示。 其中,类名使用黑体字,以大写字母开始,位于第一栏的中央。 类还可以是抽象类,抽象类的类名采用斜体字。 1.属性结构 在一个类中,表达属性的默认语法为: [可见性]属性名[’:’类型][’[‘多重性’...

UML表达关系术语

软件工程学习笔记之UML各类事物之间的关系

介绍  在UML的世界中,有4种用于表达各类事物之间的相互依赖和作用的术语,它们是关联(association)、泛化(generalization)、细化(realization)、依赖(dependency)。通过它们可以表达出类之间各种具有特定语义的关系,构造一个结构良好的UML模型。 关联(Association) 说明:关联是类之间的一种结构关系,是对一组具有相同结构、相...

Dapper:谷歌的大规模分布式跟踪系统

谷歌的大规模分布式跟踪系统

原文出处: Benjamin H. Sigelman, Luiz André Barroso 等 译文出处: bigbully PDF 概述 当代的互联网的服务,通常都是用复杂的、大规模分布式集群来实现的。互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发、可能使用不同的编程语言来实现、有可能布在了几千台服务器,横跨多个不同的数据中心。因此,就需要一些可...

AVL树详解AVL树详解及Go语言实现

AVL树详解

AVL树介绍 AVL(Adelson-Velsky和Landis)树是带有平衡条件的二叉查找树 。 所以一棵二叉树是AVL树的必要条件是: 1.它必须是二叉查找树 2.每个节点的左右子树的高度差至多为1 上图左边的节点1的左子树9比1大,不满足二叉查找树的条件,右边的二叉树满足二叉查找树的条件,同时它满足条件2,因此它是一颗AVL树。 上图2棵二叉查找树,只有左边的树...