- 博客(531)
- 资源 (7)
- 收藏
- 关注
转载 单一职责模式之装饰模式(Decorator)
文章目录一、概念二、动机三、源代码讲解四、使用模板方法进行改进五、类图结构六、要点总结七、应用场景一、概念 动态(组合)地给一个对象增加一些额外的职责。就增加功能而言,Decorator模式比生成子类(继承)更为灵活(消除重复代码 & 减少子类个数)。——《设计模式》GoF二、动机 在某些情况下我们可能会“过度的使用继承来扩展对象的功能”,由于继承为类型引入的静态特质,使得这种...
2019-12-24 11:11:53 482
转载 组件协作模式之观察者模式(Observer)
文章目录一、概念二、动机三、源代码讲解四、使用观察者模式进行改进五、类图结构六、要点总结一、概念 定义对象间的一种一对多(变化)的依赖关系,以便当一个对象(Subject)的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。——《设计模式》GOF二、动机 在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系”,一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)...
2019-12-22 17:14:17 518
转载 组件协作模式之策略模式(Strategy)
文章目录一、概念二、动机三、源代码讲解四、使用策略模式进行改进五、类图结构六、要点总结一、概念 定义一系列算法,把他们一个个封装起来,并且使他们可以互相替换(变化<各个算法>)。该模式使得算法可独立于使用它的客户程序(稳定<SalesOrder类>)而变化(扩展,子类化)。——《设计模式》GOF二、动机 在软件构建过程中,某些对象可能用到的算法多种多样,经常改变...
2019-12-22 16:56:07 577
转载 组件协作模式之模板方法模式(Tempalte Method)
文章目录一、概念二、动机三、源代码讲解四、使用模板方法进行改进五、类图结构六、要点总结七、应用场景一、概念 定义一个操作中的算法的骨架(稳定),而将一些步骤延迟定义一个虚函数,让子类去实现(重写)这个虚函数>(变化)到子类<支持子类来变化,我现在定不下来如何实现,让子类来实现>中。Template Method使得子类可以不改变(复用)一个算法的结构即可重定义(overri...
2019-12-22 16:43:17 193
转载 设计模式与面向对象设计原则
文章目录一、分解与抽象1、分解-分而治之2、抽象-面向对象二、设计模式基本原则1、依赖倒置原则(DIP)2、开放封闭原则(OCP)3、单一职责原则(SRP)4、里氏替换原则(LSP)5、接口隔离原则(ISP)6、优先使用对象组合,而不是类继承7、封装变化点8、针对接口编程,而不是针对实现编程 使用设计模式是为了可重用代码,让代码更容易被他人理解,保证代码可靠性,设计模式使代码编制真正工程化。...
2019-11-25 21:54:14 377
转载 MySQL如何建立和优化索引
1、优先使用自增的Key作为主键2、最左匹配原则3、索引列不能参与计算4、能扩展就不要新建索引5、选择区分度高的列作索引
2019-08-17 11:30:47 924
原创 手撕代码之数组
一、二维数组中的查找(leetcode 240)class Solution {public: bool searchMatrix(vector<vector<int>>& matrix, int target) { if (matrix.empty()) return false; int col...
2019-08-14 22:54:42 730
原创 手撕代码之其他类型
文章目录一、根据rand7生成rand10(leetcode 470)二、快速幂(leetcode 50)一、根据rand7生成rand10(leetcode 470)思路:先根据rand7等概率生成rand49【(rand7() - 1) * 7 + (rand7() - 1)】,再生出rand40,最后生成rand10。class Solution {public: // 先...
2019-08-12 20:23:13 348
转载 Jenkins和PC-Lint的使用
文章目录一、Jenkins简介二、PC-Lint简介一、Jenkins简介 Jenkins主要是用于搭建持续集成环境,最后达到的效果是每天可以定时地构建、测试和打包一次工程。二、PC-Lint简介 PC-Lint是一个C/C++软件代码静态分析工具,不仅可以检查一般的语法错误,还可以检查潜在的错误,比如数组访问越界、内存泄漏、使用未初始化变量、使用空...
2019-08-11 11:15:59 2490 4
转载 RAFT算法详解
一、RAFT算法1、Raft算法概述 Raft算法则是从多副本状态机的角度提出,用于管理多副本状态机的日志复制。Raft实现了和Paxos相同的功能,它将一致性分解为多个子问题:Leader选举(Leader election)、日志同步(Log replication)、安全性(Safety)、日志压缩(Log compaction)、成员变更(Membership change)等。同时...
2019-08-10 22:27:07 28817 13
转载 理解分布式事务
一、什么是事务介绍分布式事务之前,先介绍什么是事务。1、事务的具体定义事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元,组成事务的所有操作只有在所有操作均能正常执行的情况下方能提交,只要其中任一操作执行失败,都将导致整个事务的回滚。简单地说,事务提供一种“ 要么什么都不做,要么做全套(All or Nothing)”机制。2、数据库事务的ACID属性参考:http...
2019-08-06 22:48:11 321
转载 WiredTiger的事务实现详解
WiredTiger从被MongoDB收购到成为MongoDB的默认存储引擎的一年半得到了迅猛的发展,也逐步被外部熟知。WiredTiger(以下简称WT)是一个优秀的单机数据库存储引擎,它拥有诸多的特性,既支持BTree索引,也支持LSM Tree索引,支持行存储和列存储,实现ACID级别事务、支持大到4G的记录等。WT的产生不是因为这些特性,而是和计算机发展的现状息息相关。 现代计算机...
2019-07-31 23:09:35 3184 1
转载 Source Insight使用教程
1.打开Source Insight。2.Project->New Project->输入工程名,OK,输入源码所在的目录(也就是能包含完所有源码文件的最底层的一个文件夹)。点击Add All,勾上图中所圈的地方,OK,”确定“,然后可以关闭上上图的窗口,就完成了代码的导入。【问题】1、无法搜索到工程里的文件解决方法:Recursively add lower...
2019-07-31 16:40:00 294
转载 Git常用命令
【git init】:把当前目录变成git可以管理的仓库。【git clone -b Release-3.4.0.8 URL】:拉取分支代码到本地。【git checkout dev】 :创建并切换分支。【git checkout --(也可以是git log的commit id) file】:拉取暂存区的文件,并将其替换成工作区文件。【git add file】 :把文件添加到暂存...
2019-07-29 22:55:57 255
转载 深入理解MongoDB
文章目录一、副本集详解1、基本概念(1)副本集的作用(2)oplog简介2、副本集的基本架构3、副本集选主过程(1)三个存储数据的集群(2)arbiter节点(3)Bully算法(4)MongoDB的选主过程(5)为什么副本集数量最好为奇数?(6)心跳和同步机制二、MongoDB的路由、分片技术1、MongoDB的Sharding架构2、分片的优势(1)chunk分裂及迁移(2)chunkSize...
2019-07-29 22:45:46 2148
转载 MongoDB和RocksDB数据库简介
文章目录一、MongoDB简介1、MongoDB的特点(1)文档结构的存储方式,能够更便捷的获取数据(2)内置GridFS,支持大容量的存储(3)通过副本集保证高可用性(4)可扩展性强,支持多数据存储引擎二、RocksDB简介1、LSM树简介2、LSM树的插入步骤3、LSM树的合并步骤一、MongoDB简介 MongoDB是一款由C++语言编写,基于分布式文件存储的NoSQL数据库,具有免费...
2019-07-29 22:33:36 3478
转载 SQL和NoSQL
1、关系型数据库的特点获取持久化数据:可以将数据持久化到磁盘,并且很容易访问到其中一小块数据。并发:关系型数据库中有“事务”的概念,有效保障了多个程序访问同一份数据时的一致性,事务的ACID(原子性、一致性、隔离性、持久性)特性相信大家都了熟于心了。集成:不同开发团队,不同平台,不同语言的应用程序可以共享同一份数据。标准的关系模型:之所以能够很方便地达到上述目的,是因为提供...
2019-07-24 11:19:44 184
转载 分布式系统的概念
一、基本概念 把数据放在多个能独立运行的计算机(称为结点)上,各个结点利用计算机网络进行信息传递,合作完成共同的任务。分布式系统是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。1、分布式存储即通过大量的PC连入互联网,统一对外提供存储服务。分为以下几部分:(1)分布式文件系统:以文件的方式进行存储,对外提供文件的操作。(2)分布式键值系统:以kv...
2019-07-22 22:09:38 1955
转载 SVN上传、更新、添加、删除文件、版本回退
文章目录1、本地建立仓库(Create )2、下载已有仓库(Checkout )3、更新本地仓库(Update)4、添加文件(add )5、删除文件(delete)6、版本回退(Show log + revert)1、本地建立仓库(Create ) 在本地新建文件夹,右键 —> TortoiseSVN —> Create repository here。2、下载已有仓库(Che...
2019-06-04 16:14:00 16804
原创 《程序员面试宝典》中的一些面试题
文章目录面试题1--->编程风格问题面试题2--->不用if等判断语句找出两个数中间较大的那个面试题3--->写一个交换两个数据的宏面试题4--->写一个宏返回两个数据中较小的那个面试题5--->char *和char []的区别面试题6--->临界区,互斥量,信号量的区别面试题7--->网络中常见的ping命令属于什么协议?面试题1—>编程风格问...
2019-06-03 20:17:40 1758
原创 项目中关于QT的常见问题
一、信号与槽详解 QT是一个跨平台的C++ GUI应用构架,它提供了丰富的窗口部件集,具有面向对象、易于扩展等特点。信号与槽是QT自行定义的一种对象通信机制,是QT的核心机制。 信号与槽实际上是回调函数的一种体现。1、信号 当对象改变其状态时,信号就由该对象发射 (emit) 出去,而且对象只负责发送信号,它不知道另一端是谁在接收这个信号。当一个信号被发射时,与其相关联的槽将被立刻执...
2019-05-26 21:40:32 734
转载 计算几何相关的面试题
文章目录一、凸包二、最小圆覆盖(三点定圆)三、判断一个点是否在多边形内部(射线法思路)一、凸包 关于凸包的严格定义,这里不打算写出来,大家可以自行Google或者百度,因为严格的数学定义反而不太好理解,用最通俗的话来解释凸包:给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边型,使得它能包含点集中所有的点,凸包最常见的应用是求平面上距离最远的两个点。【凸包的特点】: 首先...
2019-05-23 17:15:55 2030
转载 并查集(Union-Find)算法简介
并查集(union-find sets)主要是用来快速判断两个点是否属于同一个集合,以及判断图的连通性。 下面我们来看并查集的实现。 int pre[1000]; 这个数组,记录了每个大侠的上级是谁。大侠们从1或者0开始编号(依据题意而定),pre[15]=3就表示15号大侠的上级是3号大侠。如果一个人的上级就是他自己,那说明他就是掌门人了,查找到此为止。也有孤家寡人自成一派的,比如欧阳...
2019-05-23 16:16:10 877 1
原创 记项目中的一次内存泄漏问题
最近在使用QT开发一个大型项目,内存占用可能有点多,其中在vector.push_back()的时候报了一个segment fault错误,感到很奇怪。 因为平时遇到段错误,大多数情况下都是数组越界(使用[]访问元素),而vector的push_back()函数,在添加元素时,如果空间不足,会先向内存申请原来空间的两倍大小的新的空间,然后把原来空间的元素拷贝到新空间。 所以这个时候问题...
2019-05-22 16:38:52 792
原创 安装python3.5并在QT中配置使用
一、安装32位的python3.5及各种库链接:https://pan.baidu.com/s/1q94_Vo3XDhfZ_hmssPjz6w提取码:zotf 先在dos环境下输入python,如果显示版本则表示python安装成功,安装库文件的时候,在dos环境下进入whl文件所在的目录,然后使用pip install ***-whl。如果提示pip版本过低,则按照提示更新pip。二、...
2019-05-22 16:17:55 1496 3
原创 计算机网络面试题积累之一
文章目录1、当接受方的接受窗口为0时还能接受数据吗?为什么?还能接受什么数据?那怎么处理这些数据呢?1、当接受方的接受窗口为0时还能接受数据吗?为什么?还能接受什么数据?那怎么处理这些数据呢? 可以接受数据。 数据:零窗口探测报文(发送方发送零窗口探测报文 );确认报文段;携带紧急数据的报文段;这些数据可能会被抛弃。...
2019-05-15 21:57:45 262
转载 关于rand7()构造rand10()的问题
已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10。 这类问题的解决思路无外乎是将rand7求两遍,利用某种方法巧妙的构造出连续的一组数。上题的解决思路如下: 1. rand7执行两次,出来的数为a1=rand7()-1,a2=rand7()-1。 2. 如果a17+a2<40,b=(a17+a2)/4+1;如果a1*7...
2019-05-13 22:26:45 369
原创 Linux系统使用中常见的问题
文章目录1、安装某个软件时提示:现在没有可用的软件包但是它被其他软件占用了2、安装vim3、安装搜狗输入法4、vim全局替换5、linux环境变量的设置6、运行c/c++程序7、linux中g++支持C++11的方法(在头文件中包含)8、安装git1、安装某个软件时提示:现在没有可用的软件包但是它被其他软件占用了 解决办法是更新软件源:sudo apt-get update。2、安装vim...
2019-05-05 15:23:32 655
原创 在QT中安装dlib库
一、下载并安装相关软件包1、cmake链接:https://pan.baidu.com/s/1g57OuGMad_idSQAzkkpm4w提取码:02322、QT链接:https://pan.baidu.com/s/1j8X7z3iHG-0IQVnjlAAtIQ提取码:hl8w3、dlib链接:https://pan.baidu.com/s/1DA1vHmt1Tx6cFp0Y2gC...
2019-05-05 15:18:33 3261 3
原创 剑指offer刷题总结
文章目录一、数组二、链表三、栈和队列四、二叉树五、字符串六、回溯算法七、其他一、数组01、二维数组中的查找06、旋转数组的最小数字12、调整数组顺序使奇数位于偶数前面27、数组中出现次数超过一半的数字29、连续子数组的最大和31、把数组排成最小的数34、数组中的逆序对36、数字在排序数组中出现的次数39、数组中只出现一次的数字40、和为S的连续正数序列41、和为...
2019-05-04 19:03:50 963
转载 62、机器人的运动范围
题目描述: 地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?解题思路: 本题使用的方法同样还是...
2019-05-04 18:03:52 174
转载 61、矩阵中的路径
题目描述: 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径;路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子;如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子;例如下面的矩阵包含了一条 bfce 路径:解题思路: 这是一个可以用回溯法解决的典型问题。 首先,遍历这个矩阵,我们很容易就能找到与字符串s...
2019-05-04 18:03:38 221
转载 60、滑动窗口的最大值
题目描述: 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],...
2019-05-04 18:03:23 188
转载 59、数据流中的中位数
题目描述: 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值;如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。解题思路: 我们将数据分为两部分,位于左边最大堆的数据比右边最小堆的数据要小,左、右两边内部的数据没有排序,也可以根据左边最大的数及右边最小的数得到中位数。如果最大堆比最小堆多两个元素,需要从...
2019-05-04 18:03:07 182
转载 58、二叉搜索树的第k个结点
题目描述: 给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。解题思路: 二叉搜索树按照中序遍历的顺序打印出来正好就是排序好的顺序;所以,按照中序遍历顺序找到第k个结点就是结果。Demo:/*struct TreeNode { int val; struct TreeNode *le...
2019-05-04 18:02:50 151
转载 57、把二叉树打印成多行
题目描述: 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。解题思路: 使用队列保存广搜遍历每一层的结果,然后取出队列中的元素即可。Demo:/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val...
2019-05-04 18:02:33 158
转载 56、按之字形顺序打印二叉树
题目描述: 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。解题思路: 使用队列保存每一行遍历的结果,如果遇到偶数行,则翻转下这一层的遍历结果。Demo:/*struct TreeNode { int val; struct TreeNode *left; str...
2019-05-04 18:02:17 155
visio2007教程
2018-07-30
凸优化经典书籍(Stephen Boyd和Lieven Vandenberghe)
2018-07-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人