HuXiMi Blog

念念不忘,必有回响。

树 树就是一种类似现实生活中的树的数据结构(倒置的树)。任何一颗非空树只有一个根节点。 一棵树具有以下特点: 一棵树中的任意两个结点有且仅有唯一的一条路径连通。 一棵树如果有 n 个结点,那么它一定恰好有 n-1 条边。 一棵树不包含回路。 下图就是一颗树,并且是一颗二叉树。 如上图所示,通过上面这张图说明一下树中的常用概念: 节点 :树中的每个元素都可...

堆 什么是堆 堆是一种满足以下条件的树: 堆中的每一个节点值都大于等于(或小于等于)子树中所有节点的值。或者说,任意一个节点的值都大于等于(或小于等于)所有子节点的值。 大家可以把堆(最大堆)理解为一个公司,这个公司很公平,谁能力强谁就当老大,不存在弱的人当老大,老大手底下的人一定不会比他强。这样有助于理解后续堆的操作。 !!!特别提示: 很多博客说堆是完全二叉树,...

图 图是一种较为复杂的非线性结构。 为啥说其较为复杂呢? 根据前面的内容,我们知道: 线性数据结构的元素满足唯一的线性关系,每个元素(除第一个和最后一个外)只有一个直接前趋和一个直接后继。 树形数据结构的元素之间有着明显的层次关系。 但是,图形结构的元素之间的关系是任意的。 何为图呢? 简单来说,图就是由顶点的有穷非空集合和顶点之间的边组成的集合。通常表示为:G(V,E...

数据过滤

海量数据处理以及缓存穿透这两个场景让我认识了 布隆过滤器 ,我查阅了一些资料来了解它,但是很多现成资料并不满足我的需求,所以就决定自己总结一篇关于布隆过滤器的文章。希望通过这篇文章让更多人了解布隆过滤器,并且会实际去使用它! 下面我们将分为几个方面来介绍布隆过滤器: 什么是布隆过滤器? 布隆过滤器的原理介绍。 布隆过滤器使用场景。 通过 Java 编程手动实现布隆过滤器...

剑指offer部分编程题

剑指offer部分编程题

一 斐波那契数列 题目描述: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。 n<=39 问题分析: 可以肯定的是这一题通过递归的方式是肯定能做出来,但是这样会有一个很大的问题,那就是递归大量的重复计算会导致内存溢出。另外可以使用迭代法,用fn1和fn2保存计算过程中的结果,并复用起来。下面我会把两个方法示例代码都给出来并给出两个方法的运行时间对...

几道常见的链表算法题

几道常见的链表算法题

1. 两数相加 题目描述 问题分析 Solution 2. 翻转链表 题目描述 问题分析 Solution 3. 链表中倒数第k个节点 题目描述 问题分析 Solution 4. 删除链...

迪米特法则(LOD)

如何用迪米特法则(LOD)实现“高内聚、松耦合”?

何为“高内聚、松耦合”? “高内聚、松耦合”是一个非常重要的设计思想,能够有效地提高代码的可读性和可维护性,缩小功能改动导致的代码改动范围。实际上,在前面的章节中,我们已经多次提到过这个设计思想。很多设计原则都以实现代码的“高内聚、松耦合”为目的,比如单一职责原则、基于接口而非实现编程等。 实际上,“高内聚、松耦合”是一个比较通用的设计思想,可以用来指导不同粒度代码的设计与开发,比如系统...

代码质量

从哪些维度评判代码质量的好坏?如何具备写出高质量代码的能力?

从哪些维度评判代码质量的好坏? 在我的工作经历中,每当同事评论起项目代码质量的时候,听到的最多的评语就是:“代码写得很烂”或者“代码写得很好”。用“好”“烂”这样的字眼来描述,非常地笼统。当我具体问到底如何烂、如何好的时候,尽管大部分同事都能简单地罗列上几个点,但往往都不够全面、非常零碎,也切不中要害。 当然,也有一些工程师对如何评价代码质量有所认识,比如,好代码是易扩展、易读、简单、易...

命名规范

命名规范

可选标题:工作半年,变量命名不规范,被diss了! 项目组新来的实习生因为变量命名被 “diss” 了! 大家好,这里是热爱分享的 Guide ! 我还记得我刚工作那一段时间, 项目 Code Review 的时候,我经常因为变量命名不规范而被 “diss”! 究其原因还是自己那会经验不足,而且,大学那会写项目的时候不太注意这些问题,想着只要把功能实现出来就行了。 但是...

Git

版本控制

版本控制 什么是版本控制 为什么要版本控制 本地版本控制系统 集中化的版本控制系统 分布式版本控制系统 认识 Git Git 简史 Git 与其他版本管理系统的主要区别 Git 的三种状态 Git 使用快速入门 ...