摘要: 实现网页爬虫中的URL去重功能==》 散列表、红黑树、跳表,都支持快速地插入、查找数据,内存消耗呢? 位图==》比较特殊的散列表 我们有 1 千万个整数,整数的范围在 1 到 1 亿之间。如何快速查找某个整数是否在这 1 千万个整数中呢?==》申请一个大小为 1 亿、数据类型为布尔类型(true 或 阅读全文
posted @ 2020-08-15 23:50 LinBupt 阅读(133) 评论(0) 推荐(0) 编辑
摘要: 1、在海量数据中快速查找某个数据 2、为什么需要索引 业务和功能的本质==》“对数据的存储和计算”==》存储:数据结构;计算:算法 一旦存储的数据很多,那性能就成了这些系统要关注的终点,特别是在一些跟存储相关的基础系统(比如MySQL数据库、分布式文件系统等)、中间件(比如消息中间件RocketMQ 阅读全文
posted @ 2020-08-15 18:52 LinBupt 阅读(87) 评论(0) 推荐(0) 编辑
摘要: 1、防止数据库中的用户信息被脱库 2、将任意长度的二进制值串映射为固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始数据映射之后得到的二进制值串就是哈希值。 3、应用 安全加密==》MD5、SHA 唯一标识==》如果要在海量的图库中,搜索一张图是否存在,我们不能单纯地用图片的元信息(比如图 阅读全文
posted @ 2020-08-15 17:21 LinBupt 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 1、Word文档中的单词拼写检查功能 2、散列表用的是数组支持按照下标随机访问数据的特性,所以散列表其实就是数组的一种扩展,由数组演化而来。 散列思想==》与数组的下标形成一一映射,所以利用数组支持根据下标随机访问的时候,时间复杂度是 O(1) 这一特性 散列表用的就是数组支持按照下标随机访问的时候 阅读全文
posted @ 2020-08-15 17:05 LinBupt 阅读(107) 评论(0) 推荐(0) 编辑
摘要: 1、Redis使用跳表实现有序集合 Redis 中的有序集合支持的核心操作主要有下面这几个==》 插入一个数据; 删除一个数据; 查找一个数据; 按照区间查找数据(比如查找值在[100, 356]之间的数据); 跳表>红黑树 迭代输出有序序列。 2、跳表==》可以支持快速地插入、删除、查找操作,写起 阅读全文
posted @ 2020-08-15 15:52 LinBupt 阅读(90) 评论(0) 推荐(0) 编辑
摘要: 1、二分查找针对的是一个有序的数据集合,查找思想有点类似分治思想。每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0 2、代码 循环退出条件==》low<=high mid的取值==》low + (high - low)/2 low + ((h 阅读全文
posted @ 2020-08-15 15:41 LinBupt 阅读(125) 评论(0) 推荐(0) 编辑
摘要: 1、冒泡排序、插入排序、选择排序、归并排序、快速排序、计数排序、基数排序、桶排序 2、排序算法的执行效率==》 最好情况、最坏情况、平均情况时间复杂度 时间复杂度的系数、常数、低阶:对同一阶时间复杂度的排序算法性能对比的时候,就要把系数、常数、低阶也考虑进来 比较次数和交换(或移动)次数 3、排序算 阅读全文
posted @ 2020-08-15 15:25 LinBupt 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 1、递归==》DFS深度优先搜索、前中后序二叉树遍历 递归求解问题的分解过程==》去的过程叫“递”,回来的过程叫“归”,基本上,所有的递归问题都可以用递推公式来表示 2、递归需要满足的三个条件==》 一个问题的解可以分解为几个子问题的解 这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样 阅读全文
posted @ 2020-08-15 12:15 LinBupt 阅读(110) 评论(0) 推荐(0) 编辑
摘要: 1、队列在线程池等有限资源池中的应用==》当我们向固定大小的线程池中请求一个线程时,如果线程池中没有空闲资源了,这个时候线程池如何处理这个请求?是拒绝请求还是排队请求?各种处理策略又是怎么实现的呢?==》队列Queue 非阻塞的处理方式:直接拒绝任务请求;阻塞的处理方式:将请求排队,等到有空闲线程时 阅读全文
posted @ 2020-08-15 11:29 LinBupt 阅读(85) 评论(0) 推荐(0) 编辑
摘要: 1、浏览器的前进和后退功能==》使用两个栈,X 和 Y,我们把首次浏览的页面依次压入栈 X,当点击后退按钮时,再依次从栈 X 中出栈,并将出栈的数据依次放入栈 Y。当我们点击前进按钮时,我们依次从栈 Y 中取出数据,放入栈 X 中。当栈 X 中没有数据时,那就说明没有页面可以继续后退浏览了。当栈 Y 阅读全文
posted @ 2020-08-15 11:06 LinBupt 阅读(126) 评论(0) 推荐(0) 编辑
摘要: LRU缓存淘汰算法==》维护一个有序单链表,越靠近链表尾部的结点是越早之前访问的。当有一个新的数据被访问时,我们从链表头开始顺序遍历链表 1. 如果此数据之前已经被缓存在链表中了,我们遍历得到这个数据对应的结点,并将其从原来的位置删除,然后再插入到链表的头部。 2. 如果此数据没有在缓存链表中,又可 阅读全文
posted @ 2020-08-15 09:31 LinBupt 阅读(109) 评论(0) 推荐(0) 编辑
摘要: 在大部分编程语言中,数组都是从0开始编号的,为什么数组要从0开始编号,而不是从1开始呢? 数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。 线性表:数组、链表、栈、队列 非线性表:二叉树、堆、图等 在非线性表中,数据之间并不是简单的前后关系 如何实现随机 阅读全文
posted @ 2020-08-15 08:58 LinBupt 阅读(88) 评论(0) 推荐(0) 编辑