自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(55)
  • 收藏
  • 关注

原创 设计模式之【模板方法模式】

什么是模板方法模式?模板方法模式适用于哪些场景?模板方法模式在开源代码中如何使用?让我们一起学习设计模式之【模板方法模式】。

2022-04-19 21:31:29 488

原创 设计模式之【职责链模式】

什么是职责链模式?职责链模式适用于什么场景?开源代码中如何使用职责链模式?让我们一起学习设计模式之【职责链模式】。

2022-04-11 21:34:54 770

原创 设计模式之【观察者模式】

什么是观察者模式?观察者模式有什么优缺点?在开源代码中是如何使用的?让我们一起学习设计模式之【观察者模式】。

2022-04-04 12:11:44 2667

原创 设计模式之【策略模式】

什么是策略模式?策略模式适用于什么场景?有哪些开源代码用到了策略模式?让我们一起学习设计模式之【策略模式】。

2022-03-29 21:08:33 284

原创 设计模式之【门面模式(外观模式)】

什么是门面模式?它和代理模式又有什么不同呢?门面模式一般适用于什么场景?让我们一起学习设计模式之【门面模式】。

2022-03-24 12:03:28 663

原创 设计模式之【适配器模式】

什么是适配器模式?有几种实现方式?应该如何选择?适配器模式适合应用在什么场景?让我们一起来学习设计模式之【适配器模式】。

2022-03-19 20:12:35 471

原创 设计模式之【装饰器模式】

什么是装饰器模式?和代理模式又有什么区别?什么情况下适合使用装饰器模式?让我们一起来学习设计模式之【装饰器模式】。

2022-03-16 21:42:00 881

原创 设计模式之【桥接模式】

什么是桥接模式?实现和抽象如何解耦?继承真的是“一无是处”吗?让我们一起来学习设计模式之【桥接模式】。

2022-03-14 21:37:12 764

原创 设计模式之【代理模式】

什么是代理模式?静态代理和动态代理又有什么不同?代理模式有哪些应用场景呢?让我们一起学习【代理模式】。

2022-03-08 18:14:22 283

原创 设计模式之【建造者模式】

什么是建造者模式?建造者模式有两种使用方式你知道嘛?建造者模式和工厂方法模式又有什么区别呢?让我们一起来学习设计模式之【建造者模式】。

2022-03-06 11:07:27 296

原创 设计模式之【工厂方法模式】

什么是简单工厂模式?为什么还有工厂方法模式?工厂方法模式和抽象工厂模式又有什么区别呢?让我们一起来学习设计模式之【工厂模式】。

2022-03-04 21:56:53 358

原创 设计模式之【单例模式】

为什么要使用单例模式?单例模式存在哪些问题?有哪些应用场景?今天 ,我们一下来学习设计模式之【单例模式】。

2022-02-28 21:50:02 636

原创 设计原则之【迪米特法则】

如何实现代码的“高内聚、松耦合”?什么叫做“迪米特法则”?今天,一起来学习6大设计原则的最后一个原则【迪米特法则】。

2022-02-26 11:46:01 263

原创 设计原则之【依赖反转原则】

如何解耦高低层代码?如何才能让写出来的代码更具有弹性?如何让已有的代码“万年不变”?今天,就让我们一起来学习【依赖反转原则】。

2022-02-25 11:31:21 326

原创 设计原则之【接口隔离原则】

如何设计接口更有弹性呢?你设计的接口是否满足“接口隔离原则”?今天,让我们一起来学习一下【接口隔离原则】。

2022-02-24 11:48:20 319

原创 设计原则之【里式替换原则】

如何理解里式替换原则?里式替换原则就是多态吗?哪些代码违背了里式替换原则?让我们一起来学习一下【里式替换原则】吧!

2022-02-22 11:36:55 187

原创 设计原则之【开放封闭原则】

每次需求变更都需要重构代码?如何避免安全地修改原有的代码?如何写出具有扩展性的代码?我们一起来看一下【开闭原则】。

2022-02-21 11:46:16 324

原创 设计原则之【单一职责原则】

表妹旅个游,修手机花了一半的时间表妹:????哥啊,这次去旅游,真是太扫兴了。????我:发生什么事情啦?表妹:手机摄像头摔坏了,????光修手机就花了两三天我:这么不小心,那你没有带相机专门用来拍照嘛?表妹:没有,有了智能手机,还要带个相机,实在太麻烦了????你看,智能手机虽然功能很多,给我们生活带来了很大的便利,但是,一不小心把手机摔坏了,在修手机的过程中,就影响了你的通讯和音视频等功能。那如果是换成职责更加单一的单反呢?即使不小心把单反摔坏了,也不会影响你的通讯、音视频等功能。这

2022-02-20 16:08:08 326

原创 面试官:你能将遍历二叉树进一步优化到空间复杂度为O(1)吗?

我们知道,在遍历二叉树的时候,不管是用递归的方法,还是用非递归的方法,都无法做到额外空间复杂度为O(1)。这是因为遍历二叉树的递归方法实际上使用了函数栈,非递归的方法使用了申请的栈,两者的额外空间都与树的高度有关,所以空间复杂度为O(H),H为二叉树的高度。那么怎么做到将空间复杂度优化到O(1)呢?这就要用到大名鼎鼎的Morris遍历。一、什么是Morris遍历Morris遍历是二叉树遍历算法的超强进阶算法,与递归、非递归(栈实现)的空间复杂度比较,Morris遍历可以将非递归遍历中的空间复杂度降为O

2020-09-10 18:15:19 782

原创 你还在递归遍历二叉树吗?你要的迭代模板在这里

一、递归法递归三部曲:1、确定递归函数的参数和返回值void recursion(TreeNode *root)2、确定终止条件当前节点为空的时候,就返回if(!root) return;3、确定单层递归的逻辑//这里是前序遍历cout << root->val << endl;preorder(root->left);preorder(root->right);我们知道,前序遍历二叉树就是【中左右】,中序遍历二叉树就是【左中右】,后序

2020-08-31 12:08:48 241

原创 从底层认识priority_queue到用priority_queue解决有关顺序大小的题

一、认识priority_queuepriority_queue,即优先级队列,顾名思义,是一个拥有权值概念的queue,它允许加入新元素、移除旧元素、审视元素值等功能。由于这是一个queue,所以只允许在底端加入元素、并从顶端取出元素,除此之外,别无其他存取元素的途径。因为它不提供遍历的功能,也不提供迭代器。插入和删除元素的时候,会保证队头的元素一定是权值最大(小)的。究竟是最大还是最小,根据我们写的比较函数来实现。下文会有这方面的总结。那么大概了解priority_queue是什么样的数据结构之后,

2020-08-28 20:59:51 575

原创 socket编程中套接字I/O超时设置的方法

一、使用alarm函数设置超时void handler(int signum){ .... return 0;}signal(SIGALRM, handler);alarm(3);int ret = read(sockfd, buf, sizeof(buf));if(ret == -1 && errno == EINTR) errno = ETIMEOUT;else if(ret >= 0) alarm(0);比如有一个read动作,在读之前先设置一个闹钟。

2020-08-03 20:23:37 1686

原创 深入理解socket中的recv函数和send函数

一、函数原型**·**recv函数用于socket通信中接收消息,接口定义如下:ssize_t recv(int socket, void *buf, size_t len, int flags)参数一:指定接收端套接字描述符;参数二:指向一个缓冲区,该缓冲区用来存放recv函数接收到的数据;参数三:指明buf的长度;参数四:一般置为0;返回值:失败时,返回值小于0;超时或对端主动关闭,返回值等于0;成功时,返回值是返回接收数据的长度。**·**send函数用于socket通信中发送消息,

2020-08-03 11:21:38 11523 8

转载 浅谈UML类关系

转载至 https://blog.csdn.net/K346K346/article/details/59582926?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.non

2020-07-01 21:59:31 255

原创 单调栈解决Next Greater Number一类题

单调栈是什么?单调栈使得每次新元素入栈后,栈内元素都保持有序(单调递增或者单调递减)。单调递增栈:栈中数据出栈的序列为单调递增序列。单调递减栈:栈中数据出栈的序列为单调递减序列。注意:这里所说的递增递减是出栈的顺序,不是栈中数据的顺序。单调栈的应用通过使用单调栈,可以访问到下一个比它大(小)的元素。也就是说在队列或数组中,我们需要通过比较前后元素的大小关系来解决问题时,需要使用单调栈。例如,给一个数组[2, 1, 2, 4, 3],返回每个元素后面第一个比它自身大的数,如果没有就返回-1。第

2020-07-01 14:48:19 405

原创 单播、组播、广播和泛洪的区别

一、单播1、单播的定义主机之间“一对一”的通讯模式,网络中的交换机和路由器对数据只进行转发不进行复制。如果10个客户机需要相同的数据,则服务器需要逐一传送,重复10次 相同的工作。但由于其能够针对每个客户的及时响应,所以现在的网页浏览全部都是采用IP单播协议。网络中的路由器和交换机根据其目标地址选择传输路径,将 IP单播数据传送到其指定的目的地。2、单播的优点· 服务器及时响应客户机的请求· 服务器针对每个客户不同的请求发送不同的数据,容易实现个性化服务3、单播的缺点· 服务器针对每个客户机发

2020-06-30 20:33:07 5553 3

原创 七轴分拣机器人设计与MATLAB仿真

一、要求  1、设计六个自由度以上的机器人,至少包括一个伸缩关节,且使机器人的工作空间能够满足下图所示的分拣工位。  2、求机器人的完整逆解,基本要求是末端实现位姿逆解。  3、利用逆解完成末端路径仿真。二、建立坐标系,给出D-H参数表三、推导正运动学,并写出七个齐次变换矩阵  假设现在位于本地参考坐标系Xn-Zn,那么通过以下4步标准运动即可到达下一个本地参考坐标系Xn+1-Zn+1。1、绕Z_n轴旋转θ_(n+1),使得X_n 和X_(n+1)互相平行;2、沿Z_n 轴平移d_(n

2020-06-29 17:03:45 4746 28

原创 LeetCode641设计循环双端队列

一、题目设计实现双端队列。你的实现需要支持以下操作:MyCircularDeque(k):构造函数,双端队列的大小为k。insertFront():将一个元素添加到双端队列头部。 如果操作成功返回 true。insertLast():将一个元素添加到双端队列尾部。如果操作成功返回 true。deleteFront():从双端队列头部删除一个元素。 如果操作成功返回 true。deleteLast():从双端队列尾部删除一个元素。如果操作成功返回 true。getFront():从双端队列头部

2020-06-24 13:06:42 229

原创 Makefile轻松入门

一、Makefile简介  在软件开发中,make通常被视为一种软件构建工具。该工具主要经由读取一种名为“makefile”或者“Makefile”的文件来实现软件的自动化构建。它会通过一种被称之为“target”概念来检查相关文件之间的依赖关系,这种依赖关系的检查系统非常简单,主要通过对比文件的修改时间来实现。在大多数情况下,我们主要用它来编译源代码,生成结果代码,然后把结果代码连接起来生成可执行文件或库文件。二、Makefile中的规则  makefile由三个部分组成,分别是目标、依赖和命令。格

2020-05-14 15:24:46 303

转载 浮点数如何转二进制?

  前几天在学习浮点数的时候,看《深入理解计算机系统》这本书,这本书很系统地讲解了关于浮点数的来龙去脉及其表示、运算、舍入和使用时的注意事项。但是看了之后,对于IEEE浮点表示还是比较懵*,后来看了CodeSheep这位大佬的推文才理解,本文也是转载至其推文 https://mp.weixin.qq.com/s/LVpvmBO0GY6TC4gwL_12Yw一、浮点数在计算机中是如何表示的?  学过《计算机组成原理》或者类似《计算机系统》这些课程的小伙伴们应该都知道,浮点数在计算机中的存储方式遵循IEEE

2020-05-09 15:04:56 21999

原创 通过hello程序的生命周期理解计算机系统

计算机系统是由硬件和系统软件组成的,它们共同工作来运行应用程序。尽管hello程序非常简单,但是为了让它实现运行,系统的每个主要组成部分都需要协调工作。通过本文,你将了解到,当你在系统上执行hello程序时,系统发生了什么以及为什么会这样。一、程序被其他程序翻译成不同的格式 (1)hello.c程序是以字节序列的方式存储在文件中的,每个字节都有一个整数值,对应于某些字符。像hello.c这样...

2020-05-09 02:00:37 727

转载 递归问题的三部曲配LeetCode题讲解 c/c++/java三种语言都有

最近在刷LeetCode的时候,遇到了很多可以用递归方法的题,但是对于递归求解还比较懵*,不知道怎么下手,自从看了mata川这位大佬的博客,豁然开朗。本文也是转载至其博客:https://lyl0724.github.io/2020/01/25/1/原博主用了LeetCode中的三道题来讲解,都是Java实现的,对于代码实现部分,我分别用C、C++和Java来实现,方便不同语言使用者理解。一、...

2020-05-06 15:15:20 286

原创 反转单链表总结 多种方法图解

要求反转一个单链表,例如:输入:1->2->3->4->5->NULL输出:5->4->3->2->1->NULL方法一、双指针● 定义两个指针:pre和cur,pre在前面,cur在后面。● 每次让pre的next指向cur,实现一次局部反转。● 局部反转完成之后,pre和cur同时往前移动一个位置。● 循环上述过程,直至...

2020-05-02 21:44:11 398

原创 STL hash_set、hash_map、hash_multiset和hash_multimap总结

ash_set、hash_map、hash_multiset、hash_multimap四个关联容器都是以hashtable为底层实现方法(技巧)。关于hashtable的底层实现,可参见STL hashtable的底层实现总结一、hash_set1、用hashtable实现,因hashtable中实现了几乎所有hash_set的操作,所以hash_set直接调用hashtable的方法即...

2020-04-30 01:37:57 297

原创 STL hashtable的底层实现总结

一、hashtable概述hashtable在C++的STL里占据着比较重要的一席之地。其中的hash_set、hash_map、hash_multiset、hash_multimap四个关联容器都是以hashtable为底层实现方法(技巧)。应该说,上述的四个关联式容器提供的API都是对hashtable原生态API的高层封装,因为hashtable本身都提供了它们所需要的基础API。如果要...

2020-04-30 01:22:17 2363 2

原创 LeetCode面试题02.04分割链表和86分隔链表题解总结

面试题02.04、分割链表其实我自己一开始看到这个题目的时候,是一脸懵* 的,后来结合着英文版的题目,才把题目意思给搞懂。个人觉得,主要是这个示例整的,让人有点迷。我觉得应该加上一句:答案不唯一或者左右部分内部节点无顺序要求。(即不必考虑元素的相对位置)题目的意思就是:把小于x的节点放在大于或等于x对的节点的前面。例如: [1,4,3,2,5,2] 3 -&gt...

2020-04-29 15:31:51 260

原创 LeetCode-287 寻找重复数 多种解法 通俗易懂的思路分析

一、题目如果没有说明中的第一条限制,可以对数组进行排序,然后将每个元素与前一个元素进行比较。如果没有说明中的第二条限制,可以用哈希数组存储原数组中的每一个数字,存储的个数大于1,就说明是重复的数。如果没有说明中的第三条限制,可以用两个for循环将数组中的每一个数和其后面的每一个数对比。下面,我们来看一下,符合要求的解法。二、遍历一遍数组,对访问过的元素做标记,来寻找重复的数首先,该方...

2020-04-27 17:39:58 373

原创 slist的简单总结

一、slist的概述STL list是个双向链表。SGI STL另提供了一个单向链表,叫做slist。如下图所示。这个容器并不在标准规范之内。二、与list对比不同之处:1、slist和list的主要差别在于,前者的迭代器属于单向的Forward Iterator,后者的迭代器属于双向的Bidirectional Iterator。为此slist的功能自然也就受到了许多限制。但是单向链表...

2020-04-27 00:14:26 2882

原创 STL中list的底层实现机制及常用操作

一、list概述list是双向链表,相较于vector的连续性空间,list就显得复杂许多,它的好处是每次插入或删除一个元素,就配置或释放一个元素空间。因此,list对于空间的运用有绝对的精准,一点也不浪费。而且,对于任何位置的元素插入或元素移除,list永远是常数时间。二、list的迭代器list不能再像vector一样以普通指针作为迭代器,因为其节点不保证在存储空间中连续存在。list迭...

2020-04-25 18:57:49 1053

原创 LeetCode-142一张图搞懂环形链表II(肯定看得明白)

一、题目这道题目是141.环形链表的加强版 https://leetcode-cn.com/problems/linked-list-cycle/description/二、解题思路这类链表题目一般都是使用双指针的方法来解决,例如寻找距离尾部第K个结点、寻找环入口、寻找公共尾部入口等。三、算法分析设快慢两个指针fast,slow指向链表头部head,fast每次走2步,slow每次走1...

2020-04-24 21:42:23 543 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除