
数据结构|算法|设计模式
文章平均质量分 94
数据结构|算法|设计模式
bandaoyu
这个作者很懒,什么都没留下…
展开
-
【redis】redis知识 |面试Redis笔记|简单redis使用说明及性能测试
内容来源:https://www.cnblogs.com/jiahaoJAVA/p/6244278.htmlhttps://www.cnblogs.com/Survivalist/p/8119891.html(1)什么是redis?Redis是一个基于内存的高性能key-value数据库。 (有空再补充,有理解错误或不足欢迎指正)(2)Rei......原创 2018-10-07 22:02:43 · 528 阅读 · 0 评论 -
【C/C++】环形队列实现原理
环形队列是在实际编程极为有用的数据结构,它有如下特点。 它是一个首尾相连的FIFO的数据结构,采用数组的线性空间,数据组织简单。能很快知道队列是否满为空。能以很快速度的来存取数据。 因为有简单高效的原因,甚至在硬件都实现了环形队列. 环形队列广泛用于网络数据收发,和不同程序间数据交换(比如内核与应用程序大量交换数据,从硬件接收大量数据)均使用了环形队列.一.环形队列实现原理----------------------------------------------...原创 2021-09-28 03:01:31 · 1805 阅读 · 0 评论 -
【设计模式】C++对单例模式实现的总结(C++11超简化版,必看精髓)
问题的提出:一个国家只能有一个主席,一个学校只能有一个校长…单例模式:它属于创建型模式,它提供了一种创建对象的最佳方式。一个类有且只有一个由自己生成的对象,并且还有一个对外的可供访问该对象的一种方式。(通俗的讲,就是这个类的构造器被私有化了,并且在类里面只实例化了一个对象,如果你需要用到该类对象,你只能通过getInstance()方法获得类自己生成的这个对象)那么什么时候你需要用到单例模式呢?比如说:现在的操作系统大多是多线程的,在操作一个文件的时候,就不可避免地出现多个进程或线原创 2020-07-23 01:27:40 · 624 阅读 · 0 评论 -
【设计模式】外观模式
项目经验:hopeView客户端 访问服务器,只访问同一个接口,请求到哪个模块,由代理路由负责。应用程序访问 数据库,只访问一个端口8066,具体访问到哪个库上,由mycat路由。前言今天我来全面总结一下Android开发中最常用的设计模式 -外观模式。其他设计模式介绍1分钟全面了解“设计模式”单例模式(Singleton) - 最易懂的设计模式解析简单工厂模式(Sim...转载 2018-10-26 17:30:22 · 272 阅读 · 1 评论 -
【设计模式】[代理模式]
项目经验:新的函数中,部分功能之前已经有其他函数实现的,直接调用该函数实现,只需剩下的没有实现的部分。历史趋势图 hopeview和hopefarm的内核都是同一个,只是读出数据来 之后的处理不同。间接调用了内核方法(被代理)。...转载 2018-10-26 17:34:56 · 265 阅读 · 0 评论 -
【设计模式】[模板方法模式](Template Method)
项目经验:上位机DSP和FPGA升级,升级流程都有1、切换波特率2、传输升级文件3、命令升级4、检查结果5、结束切回波特率上面的步骤模板一样,但是内容却不一样。 1、切换波特率(DSP和FPGA切换到的波特率可能不一样) 2、传输文件(传输的文件不一样) 3、命令升级(两个发的指令不一样) 4、检查结果(检查方法不一样) 5、略1.1 定义定义...转载 2018-10-25 20:39:51 · 325 阅读 · 0 评论 -
【设计模式】设计模式 网站推荐
《学不会设计模式,是因为你还没用过这个神奇的网站!》:https://zhuanlan.zhihu.com/p/262255400《DESIGNPATTERNS》https://refactoring.guru《The Catalog of Design Patterns》https://refactoring.guru/design-patterns/catalog原创 2020-12-29 17:47:36 · 1835 阅读 · 0 评论 -
【设计模式】观察者模式
转自:https://www.cnblogs.com/mfrbuaa/p/4364678.html一、什么是观察者模式 Observer模式也叫观察者模式,它的作用是当一个对象的状态发生变化时,可以自己主动通知其它关联对象,自己主动刷新对象状态。举个样例,用户界面能够作为一个观察者,业务数据是被观察者,用户界面观察业务数据的变化,发现数据变化后,就显示在界面上。观察者模式在模块之...原创 2018-10-25 20:06:58 · 756 阅读 · 1 评论 -
【算法】有限状态机FSM
使用C++实现一套简单的状态机模型——实例:https://fangliang.blog.youkuaiyun.com/article/details/44042287使用C++实现一套简单的状态机模型——原理解析:https://fangliang.blog.youkuaiyun.com/article/details/44120809原创 2020-12-24 14:07:36 · 3409 阅读 · 0 评论 -
【C++】工厂模式
目录工厂函数简单工厂模式工厂函数c++ define 定义工厂函数,其中define函数名使用##连接# include<stdio.h># include <stdlib.h> //atoi# include <string.h> //strlen# include <stdint.h> //uint64_t#include<iostream>#include<memory>usin原创 2020-07-18 05:54:07 · 3825 阅读 · 2 评论 -
【设计模式】建造者/生成器模式(Builder Pattern)
联想:建造模式和 模板方法模式 有相似之处,二者的不同是 模板方法模式 面向方法抽象出各个方法的“壳”,建造者是抽象出 各个部分的“壳”,而内容细节根据建造不同的对象决定。风机:{变流器(型号:445)、适配器(型号:d200)、散热器(水冷)}太阳能:{变流器(型号:446)、适配器(型号:d100)、散热器(风冷)}缺点:遇见结构框架不一样的:亚洲人:{身高()、体重...原创 2018-10-29 19:52:49 · 291 阅读 · 1 评论 -
【设计模式】策略模式
项目实例:不同业务帧数据的处理:swicth(消息号){case 请求事件记录:#处理事件帧数据break;case 请求故障列表:#故障列表帧数据break;case 请求用户列表:#用户列表帧数据break;}前言今天我来全面总结一下Android开发中最常用的设计模式 -策略模式。其他设计模式介绍1分钟全面了解“设...转载 2018-11-12 10:25:24 · 373 阅读 · 1 评论 -
【Linux】内存分配小结--malloc、brk、mmap
原文:https://blog.youkuaiyun.com/gfgdsg/article/details/42709943http://blog.163.com/xychenbaihu@yeah/blog/static/132229655201210975312473/http://blog.sina.com.cn/s/blog_7c60861501015vkk.htmlLinux 的虚拟内存管理有几个关键概念:1、每个进程都有独立的虚拟地址空间,进程访问的虚拟地址并不是真正的物理地址;2...原创 2021-02-04 00:04:38 · 871 阅读 · 0 评论 -
【性能】大页内存 (HugePages)在通用程序优化中的应用
原文:https://blog.youkuaiyun.com/yutianzuijin/article/details/41912871今天给大家介绍一种比较新奇的程序性能优化方法—大页内存(HugePages),简单来说就是通过增大操作系统页的大小来减小页表,从而避免快表缺失。这方面的资料比较贫乏,而且网上绝大多数资料都是介绍它在Oracle数据库中的应用,这会让人产生一种错觉:这种技术只能在Oracle数据库中应用。但其实,大页内存可以算是一种非常通用的优化技术,应用范围很广,针对不同的应用程序,最多可能.原创 2021-02-02 15:18:31 · 1229 阅读 · 0 评论 -
【ceph】CRUSH算法的原理与实现|File->Object->PG->OSD的映射方法
https://zhuanlan.zhihu.com/p/593174250. 前言本文主要面向对Ceph及分布式系统有一定了解基础的同学;新入坑的读者可以先从Ceph文档官网获取基本信息。1. 背景在分布式存储系统中,数据的位置存放规则一直是研究的热门话题之一。一般来说,系统中所有角色(Clients、Servers)需要有一个统一的数据寻址算法Locator,满足: Locator(ID) -> [Device_1, Device_2, Device_3, ...]其中输原创 2020-12-21 14:48:14 · 2898 阅读 · 0 评论 -
【算法】memcached slabs内存分配算法详解
原文:http://blog.sina.com.cn/s/blog_7530db6f0100omfn.htmlMemcached Slab算法是根据powers of 2来将1MB的内存块划分成多个小内存块,而这1MB的内存块称为页:Powers of 2是2的n次方的意思,例如:2的0次方是1,2的1次方是2,2的2次方是4,2的3次方是8等等。而将1MB的内存按2的n次方划分可以划分成20种不同的内存块,因为2的20次方是1MB(1048576)。所以可以说,memcached管理着20种.原创 2020-11-30 23:50:03 · 765 阅读 · 0 评论 -
【STL】c++优先队列(priority_queue)用法详解
特性和基本操作包含头文件:既然是队列那么先要包含头文件#include <queue>特性:和queue的不同在于我们可以自定义其中数据的优先级, 让优先级高的排在队列前面,优先出队优先队列具有队列的所有特性,包括基本操作,只是在这基础上添加了内部的一个排序,它本质是一个堆实现的和队列基本操作相同:top 访问队头元素 empty 队列是否为空 size 返回队列内元素个数 push 插入元素到队尾 (并排序) emplace 原地构造一个元素并插入队列 pop原创 2020-11-02 03:10:16 · 854 阅读 · 0 评论 -
【C++】STL中heap函数的用法(make_heap,push_heap,pop_heap,sort_heap,is_heap,is_heap_until)
简介make_heap()将区间内的元素转化为heap.push_heap()对heap增加一个元素.pop_heap()对heap取出下一个元素.sort_heap()对heap转化为一个已排序群集.用法template<typename T>inline void INSERT_ELEMENTS(T &coll, int first, int last){ for (int i = first; i <= last; ++i) .原创 2020-11-02 02:31:41 · 6309 阅读 · 1 评论 -
【算法】C++算法 求数组中最小的K个数
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。解法一:排序后,取出前k个数。O(nlogn)。代码略。解法二:建立n个元素的最小堆,每次去除堆顶的最小值,然后弹出堆顶,重新构成最小堆。O(klogn)class Solution {public: vector<int> GetLeastNumbers_Solution(vector<int> input, int k..原创 2020-11-02 02:12:09 · 2941 阅读 · 0 评论 -
【链表】判断两个单链表是否相交+找到第一个交点|判断两个链表是否有环
原文;https://blog.youkuaiyun.com/fengxinlinux/article/details/78885764题目:给两个单链表,如何判断两个单链表是否相交?若相交,则找出第一个相交的节点。这道题的思路和解法有很多,在这把这道题的解法做一个详细的总结。解这道题之前,我们需要首先明确一个概念:如果两个单链表有共同的节点,那么从第一个共同节点开始,后面的节点都会重叠,直到链表结束。因为两个链表中有一个共同节点,则这个节点里的指针域指向的下一个节点地址一样,所以下一个节点也会相交,依次原创 2020-10-31 17:57:10 · 631 阅读 · 0 评论 -
【BitMap】BitMap算法详解
所谓的BitMap就是用一个bit位来标记某个元素所对应的value,而key即是该元素,由于BitMap使用了bit位来存储数据,因此可以大大节省存储空间。基本思想: 这此我用一个简单的例子来详细介绍BitMap算法的原理。假设我们要对0-7内的5个元素(4,7,2,5,3)进行排序(这里假设元素没有重复)。我们可以使用BitMap算法达到排序目的。要表示8个数(0-7),我们需要8个bit。 1.首先我们开辟一个字节(8bit)的空间,将这些空间的所有的bit位都设置为0 2.然后原创 2020-10-31 17:22:52 · 1654 阅读 · 0 评论 -
【算法】2.5亿个整数中找出不重复的数代码实现--未消化
原文:http://ddrv.cn/a/621106对于在2.5亿个整数中找出不重复的数(内存不足以容纳这2.5亿个整数),已经有众多前辈给出了比较详尽的算法描述,但在具体实现上现有的例子则比较简单,规模偏小。昨天生成2.5亿个数之后,开始读文件统计,结果10个小时左右没出结果。所以今天用25万个数做实验,几分钟就得出了统计结果。在VS2010环境里新建C++控制台工程,完整的实现代码如下。程序算法实现部分参考http://blog.youkuaiyun.com/leeboy_wang/article/detail原创 2020-10-31 16:55:16 · 1087 阅读 · 0 评论 -
【树】满二叉树、完全二叉树、平衡二叉树、最优二叉树
一、满二叉树 一棵二叉树的结点要么是叶子结点,要么它有两个子结点(如果一个二叉树的层数为K,且结点总数是(2^k) -1,则它就是满二叉树。)二、完全二叉树 若设二叉树的深度为k,除第 k 层外,其它各层 (1~k-1) 的结点数都达到最大个数,第k 层所有的结点都连续集中在最左边,这就是完全二叉树。三、平衡二叉树 它或者是一颗空树,或它的左子树和右子树的深度之差(平衡因子)的绝对值不超过1,且它的左子树和右子树都是一颗平衡二叉树。...原创 2020-10-29 00:25:59 · 1190 阅读 · 0 评论 -
【算法】如何给100亿个数字排序?
场景之前写过一篇海量数据中统计ip出现次数最多的博客,今天再写篇类似的,当然会有不同的地方,相同的地方我快速写过,详细的可以看之前的博客。今天要给100亿个数字排序,100亿个 int 型数字放在文件里面大概有 37.2GB,非常大,内存一次装不下了。那么肯定是要拆分成小的文件一个一个来处理,最终在合并成一个排好序的大文件。实现思路1.把这个37GB的大文件,用哈希分成1000个小文件,(本人:其实不用哈希,直接等分成n个小文件即可)每个小文件平均38MB左右(理想情况),把100亿个数字对原创 2020-10-29 00:07:26 · 2429 阅读 · 0 评论 -
【事务】CAP理论和分布式事务:两阶段提交与三阶段提交
原文:https://segmentfault.com/a/1190000012534071发布于 2017-12-21在分布式系统中著有 CAP 理论,该理论由加州大学伯克利分校的Eric Brewer教授提出,阐述了在一个分布式系统中不可能同时满足一致性(Consistency)、可用性(Availability),以及分区容错性(Partition Tolerance)。一致性:在分布式系统中数据往往存在多个副本,一致性描述的是这些副本中的数据在内容和组织上的一致。 ...原创 2020-10-14 00:56:52 · 1084 阅读 · 0 评论 -
【Raft】分布式一致性算法Raft和zab、paxos
前言开发面试Zookeeper肯定要问,Zab协议逃不掉,那么和 Raft 的区别和联系肯定也逃不掉。Paxos 太复杂了面试官自己也搞不懂,所以没必要深究。网页动画教程:http://thesecretlivesofdata.com/raft/ (带中文翻译:https://www.bilibili.com/video/BV1yJ411P76f?from=search&seid=8328232223355833905)......原创 2020-10-03 06:38:28 · 1995 阅读 · 0 评论 -
【锁】无锁队列、自旋锁队列、互斥锁队列性能对比测试
介绍无锁队列先大致介绍一下无锁队列。无锁队列的根本是CAS函数——CompareAndSwap,即比较并交换,函数功能可以用C++函数来说明:int compare_and_swap (int* reg, int oldval, int newval){ int old_reg_val = *reg; if (old_reg_val == oldval) *reg = newval; return old_reg_val;}它将reg的值与oldval的值进行对原创 2020-09-09 04:53:45 · 2126 阅读 · 0 评论 -
【性能】Linux服务器低延迟技术
总的来说,我打算分两篇文章讨论相关低延迟技术:1)系统调优(本文):一些低延迟相关的Linux系统设置,和一些原则。2)网络调优:使用solarflare网卡降低网络IO延迟。这里不打算介绍用户空间的延迟优化,因为太广泛了,另外我之前的文章也分享一些解决某类问题的低延迟类库。说到Linux的低延迟技术,一个不能不提的词是"kernel bypass",也就是绕过内核。(为什么呢?因为内核处理不仅慢而且延迟不稳定。可以把操作系统想象成一个庞大的框架,它和其他软件框架并没有什么本质的不.原创 2020-09-08 00:49:37 · 1829 阅读 · 0 评论 -
【C++】广度/深度优先算法(bfs+dfs)理解+例题+对比 --- 未消化
例题:《迷宫问题》定义一个二维数组:0 0 1 0 1 //0表示可走,1表示墙0 1 1 1 0 //只能↑↓←→走,不能斜着走0 0 0 0 0 0 1 1 1 00 0 0 1 0 //题目保证了输入是一定有解的求从左上角(0,0)到右下角(4,4)的最短路线。bfs解题核心逻辑伪代码:1,将起点推入队列中;2,将起点标识为已走过;while(队列非空){ 3,取队列首节点vt,并从队列中弹出; 4,探索上面取出得节点的周围是否有没走过的节点v..原创 2020-08-25 02:04:50 · 463 阅读 · 0 评论 -
【CAS】CAS原理|乐观锁
前言CAS的原理CAS的缺陷1.ABA问题2.循环时间长开销大3.只能保证一个共享变量的原子操作CAS开销CAS算法在JDK中的应用前言这个视频解释很不错:《大厂面试题:CAS原理怎么回答比较好》https://haokan.baidu.com/v?vid=8074278900654133189&pd=bjh&fr=bjhauthor&type=videoCAS的原理1、什么是CAS?CAS:Compare and Swap,.原创 2020-08-20 01:50:51 · 532 阅读 · 0 评论 -
【内存】内存分配和内存池 性能优化
C++几种内存分配方法的效率测试与比较这几天做的一个项目要频繁new许多对象,对于频繁调用new对效率的影响只停留在理论上,没有一个直观的认识,故做了一个小测试。本次测试只对比了三种内存分配方式:1. 频繁调用new2. 一次性new足够的内存,再用placement new产生对象到已分配的内存3. 用vector测试代码如下(注意事项:vs下x86和x64、debug、release配置下运行效果不一样,gcc编译时,一些二外的debug编译参数也会影响速度)#includ原创 2020-08-13 19:12:09 · 1334 阅读 · 0 评论 -
【分布式】分布式研究
原文:https://zhuanlan.zhihu.com/p/157978714 分布式id生成策略 生成分布式Id的方法主要有以下几种:数据库水平拆分,设置初始值和相同的自增步长。 批量申请自增ID。 UUID生成。 Redis的方式。 雪花算法。 百度UidGenerator算法 美团Leaf算法 数据库水平拆分,设置初始值和相同的自增步长 「数据库水平拆分,设置初始值和相同的自增步长」 set @@auto_increme...原创 2020-08-11 01:41:55 · 376 阅读 · 1 评论 -
【算法】图
图的存储方法1、邻接矩阵2、邻接表邻接表存储法详解:存储方式:邻接表存储图的实现方式是,给图中的各个顶点独自建立一个链表,用节点存储该顶点,用链表中其他节点存储各自的邻接点。与此同时,为了便于管理这些链表,通常会将所有链表的头节点存储到数组中(也可以用链表存储)。也正因为各个(顶点的)链表的头节点存储的是各个顶点,因此各链表在存储邻接点数据时,仅需存储该邻接点位于数组中的位置下标即可。例如,存储图 1a) 所示的有向图,其对应的邻接表如图 1b) 所示: ...原创 2020-07-12 17:51:27 · 622 阅读 · 0 评论 -
【算法】详解二分查找算法(思路很简单,细节是魔鬼)
我周围的人几乎都认为二分查找很简单,但事实真的如此吗?二分查找真的很简单吗?并不简单。看看 Knuth 大佬(发明 KMP 算法的那位)怎么说的:Although the basic idea of binary search is comparatively straightforward, the details can be surprisingly tricky...这句话可以这样理解:思路很简单,细节是魔鬼。本文就来探究几个最常用的二分查找场景:寻找一个数、寻找左侧边界、寻找右侧边转载 2020-06-07 00:39:17 · 902 阅读 · 0 评论 -
【加密】DES加密算法中,ECB和CBC模式有什么区别?
ECB和CBC模式的区别ECB模式DES ECB(电子密本方式)其实非常简单,就是将数据按照8个字节一段进行DES加密或解密得到一段段的8个字节的密文或者明文,最后一段不足8个字节(一般补0或者F),按照需求补足8个字节进行计算(并行计算),之后按照顺序将计算所得的数据连在一起即可,各段数据之间互不影响。优点:简单; 有利于并行计算; 误差不会被传递;缺点:不能隐藏明文...原创 2020-04-16 10:38:12 · 19164 阅读 · 0 评论 -
【加密】对称加密DES和非对称加密AES、数字签名|非对称加密--公钥和私钥的区别
对称加密1.1定义指加密和解密使用相同密钥的加密算法,又叫传统密码算法。就是加密密钥能够从解密密钥中推算出来,同时解密密钥也可以从加密密钥中推算出来。而在大多数的对称算法中,加密密钥和解密密钥是相同的。它要求发送方和接收方在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都可以对他们发送或接收的消息解密,所以密钥的保密性对通信的安全性至关重要。.........原创 2020-04-15 16:25:37 · 6574 阅读 · 1 评论 -
【加密】OpenSSL 介绍和使用
原文:https://www.jianshu.com/p/fb2ae3dc7986一、SSL 简介为了让网络通信更安全,需要认证和加密,认证是说明你是要找的人,加密是加密报文。为此有人设计了SSL,即套接字上的安全层,就是在TCP之上做一个安全通信层,HTTP on SSL 即是HTTPs认证是通过证书+非对称加密算法来解决的,具体看:https交互过程SSL交互过程还是很...原创 2020-04-15 16:02:56 · 697 阅读 · 0 评论 -
【算法】递归思想
下面程序的功能是输出数组的全排列。请填空。void perm(int list[], int k, int m){ if ( ) { copy(list,list+m,ostream_iterator<int>(cout," ")); cout<<endl; return; } f...原创 2020-04-13 20:48:02 · 469 阅读 · 0 评论 -
【粘包和拆包】数据帧粘包和拆包处理方式
同事定义了一个二进制协议格式如下帧头+帧长度+……但是没有看到有数据内包含与帧头一样的数据时如何转译的说明,所以我就有疑问如何避免粘包或多帧合并发送时怎么拆包?对方回答:我们实际上会在缓存解包,分包与拆包,不会出现大量粘包现象的。问题来了,我不太理解他说的:“在缓存解包,分包与拆包”是什么意思?是如何识别帧头帧尾,分包拆包的?发帖咨询后得到了网友ba_wang_mao的...原创 2020-02-22 01:18:27 · 4778 阅读 · 0 评论 -
【hash】一致性hash|哈希详解
其实,一致性哈希算法也是使用取模的方法,只是,刚才描述的取模法是对服务器的数量进行取模,而一致性哈希算法是对2^32取模,什么意思呢?我们慢慢聊。摘自很不错的文章:http://www.zsythink.net/archives/1182/转载地址:https://www.cnblogs.com/lpfuture/p/5796398.html其中在查找时还看到一篇...原创 2019-11-12 10:31:24 · 951 阅读 · 0 评论