01 2021 档案
摘要:1、模式主要思想: 定义对象间的⼀种⼀对多(变化)的依赖关系,以便当⼀个对象(Subject)的状态发⽣改变时,所有 依赖于它的对象都得到通知并⾃动更新。 本质:触发联动。 2、结构: 3、案例: 气象站发布气象资料给数据中心,数据中心经过处理,将气象信息更新到两个不同的显示终端(A 和B...可能
阅读全文
摘要:1、模板方法模式的主要思想: 定义一个操作中的算法骨架(稳定),将一些特定步骤(变化)的具体实现、延迟到子类。使得子类可以在不改变(复用)算法流程的情况下,通过不同的子类、来实现“定制”(override重写)流程中的特定的步骤。 本质通过固定算法⻣架来约束⼦类的行为; 2、设计结构如下图: 3、代
阅读全文
摘要:1、总体来说设计模式分为三大类: (1)创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 (2)结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 (3)行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、
阅读全文
摘要:区别:Linux内核中用到的红黑树是可以存储同样的key的,但是STL标准库map中用到的红黑树不能存储相同的key,原因是map对原有的红黑树做了修改。 1.原有的红黑树结构是可以插入相同的key 例如以下是截取的nginx 的红⿊树的实现,nginx 的红⿊树的实现和Linux内核中红黑树的实现
阅读全文
摘要:上一节说到如果要从海量数据中查找字符串的话,红黑树和和hashtable都不行,所以会用到布隆过滤器。 布隆过滤器 1、定义 布隆过滤器是⼀种概率型数据结构,它的特点是⾼效的插⼊和查询,能明确告知某个字符串 ⼀定不存在或者可能存在; 2、优点 布隆过滤器相⽐传统的查询结构(例如:hash,set,m
阅读全文
摘要:一、背景 (1)在使⽤word⽂档时,word如何判断某个单词是否拼写正确? (2)⽹络爬⾍程序,怎么让它不去爬相同的url⻚⾯?允许有误差 (3) 垃圾邮件(短信)过滤算法如何设计?允许有误差 公安办案时, (4)如何判断某嫌疑⼈是否在⽹逃名单中?控制误差 假阳率 (5)缓存穿透问题如何解决?允许
阅读全文
摘要:一、缓存功能 当系统处于高并发时,为了防止数据库压力过大,引入缓存处理功能,流程如下: 当引入缓存功能后,会引发出问题:(1)缓存穿透,(2)缓存击穿,(3)缓存雪崩。 二、缓存穿透 解释:缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,如发起为id为“-1”的数据或id为特别大不存在的
阅读全文
摘要:一、介绍 二叉查找树、平衡二叉树、红黑树、B树、B+树。前面三种是典型的二叉查找树,查找的时间复杂度是O(log2N)与树的深度有关系,那么降低树的深度也就可以提升查找效率。这时就提出了平衡多路查找树,也就是B树以及B+树。 二、使用场景 (1)关系型数据库的索引(MySQL)。 (2)计算机磁盘存
阅读全文
摘要:一、红黑树的特性: (1)每个节点或者是黑色,或者是红色。 (2)根节点是黑色。 (3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!] (4)如果一个节点是红色的,则它的子节点必须是黑色的。 (5)从一个节点到该节点的子孙节点的所有路径上包含相同数目
阅读全文
摘要:一、二叉排序树介绍: 二叉排序树又称“二叉查找树”、“二叉搜索树”。二叉排序树:或者是一棵空树,或者是具有下列性质的二叉树: 1. 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 2. 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 3. 它的左、右子树也分别为二叉排
阅读全文
摘要:1 假设两个链表都没有环 解题思路 a. 直接循环判断第一个链表的每个节点是否在第二个链表中。但,这种方法的时间复杂度为O(Length(h1) * Length(h2))。显然,我们得找到一种更为有效的方法,至少不能是O(N^2)的复杂度。 b. 针对第一个链表直接构造hash表,然后查询hash
阅读全文
摘要:一、解决思路: 对于这个问题我们可以采用“快慢指针”的方法。就是有两个指针fast和slow,开始的时候两个指针都指向链表头head,然后在每一步操作中slow向前走一步即:slow = slow->next,而fast每一步向前两步即:fast = fast->next->next。由于fast要
阅读全文
摘要:一、算法思想: 只遍历一次链表。设置2个指针,当第一个指针从表头向前走到第n-1个节点时,第二个指针开始从表头出发。当第一个指针走到尾节点时,第二个指针的位置即为倒数第n个节点 一、代码: #include "stdafx.h" #include<windows.h> #include<iostre
阅读全文
摘要:代码: #include "stdafx.h" #include<windows.h> #include<iostream> #include<vector> using namespace std; struct list_node { int value; list_node *next; };
阅读全文
摘要:#include <stdio.h> #include <stdlib.h> #include <string.h> // // shell , quick, kmp // pattern // // abcabc // k = 0 // q = 1 void make_next(const cha
阅读全文
摘要:希尔排序 一、概念及其介绍 希尔排序(Shell Sort)是插入排序的一种,它是针对直接插入排序算法的改进。 希尔排序又称缩小增量排序,因 DL.Shell 于 1959 年提出而得名。 它通过比较相距一定间隔的元素来进行,各趟比较所用的距离随着算法的进行而减小,直到只比较相邻元素的最后一趟排序为
阅读全文
摘要:一、概念及其介绍 快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想 分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影。 二、该方法的基本思
阅读全文
摘要:实现思路: 1.从数组的第二个数据开始往前比较,即一开始用第二个数和他前面的一个比较,如果 符合条件(比前面的大或者小,自定义),则让他们交换位置。 2.然后再用第三个数和第二个比较,符合则交换,但是此处还得继续往前比较,比如有 5个数8,15,20,45, 17,17比45小,需要交换,但是17也
阅读全文