- 博客(92)
- 收藏
- 关注
原创 单元测试(一)
1, 选择并不是所有的函数模块都需要写单元测试,除非是为了完成100%的代码覆盖率。那么如果有效的选择单元测试的对象,才是第一步值得考虑的事情。(1)开发过程中,单元测试应该来测试那些可能会出错的地方,或是那些边界情况。(2)维护过程中,单元测试应该跟着我们的bug report来走,每一个bug都应该有个UT。于是程序员就会对自己的代码变更有两个自信,一是bug 被 fixed,二是相同的...
2019-11-03 21:00:12
369
原创 Git 基础篇
一,基础配置git config --global user.name <your-account-name> 配置用户名git config --global user.email <your-email> 配置邮箱git config --global core.editor vi 配置编辑器git config --g...
2019-08-01 15:51:05
276
原创 ROS------Catkin编译系统
(1)产生: 之前在学校学校学习的时候,在Linux下习惯通过gcc g++生成makefile来编译文件,但接触了大型项目随着代码量的增多,便接触了更高层次的Cmake工具,加上ROS对Cmake的扩展,便出现了catkin编译工具。(2)优点: 软件包编译后无需安装就可使用;自动生成find_package()代码,pkg-config文件;解决了多个软件包构建顺序问题;一次配置...
2019-07-27 16:38:10
904
原创 左手倒影 右手年华
2015年夏日,人海中收获际遇;2016年秋风,荡起情感的涟漪;2017年白雪,记得我们的足迹;2018年春雨,曾见证彼此努力;2019年今天,天空萦绕着离曲。 随着毕业照的快门的一声响起,大学四年的回忆便被不经意间拉开序幕。身着学士服,头戴学士帽,在欢声笑语中,熟悉的那些场景便浮现在眼前。。。。。。在教室里再听一节课,在图书馆再学习一下午,在操场再跑一次五公里,把东门的小吃再吃...
2019-05-10 10:01:33
388
2
原创 AndroidStudio安装配置教程
安装Android Studio推荐下载地址:http://www.android-studio.org点击下载,成功后进行安装,依次点击NEXT:
2018-12-16 22:50:19
268
原创 【软件测试】常见的测试用例
测试用例:为了实施测试而向被测试的系统提供的一组集合。执行测试的时候要做到正常的测试用例之外,还要有临时发挥的能力,根据自己的经验和感觉发现很多测试用例无法发现的缺陷。不断总结测试方法和故障模型。真正优秀的测试人员在执行测试时是想着做,做着想。好的测试用例是一个不熟悉业务的人也能依据用例来很快的运行测试。评价测试用例的标准:用例表达清楚,无二义性;用例可操作性强;用例的输入与输出明确;...
2018-09-22 22:55:25
2036
原创 堆 & 栈& 内存溢出
堆与栈的区别,递归没有退出条件会怎样,系统怎么判定栈溢出?1,管理方式不同:栈编译器自动管理,无需程序员手工控制;而堆空间的申请释放工作由程序员控制,容易产生内存泄漏。2,空间大小不同:栈是一块连续的内存,栈顶的地址和栈底的地址是系统预先规定好的,当申请空间大于剩余空间,提示溢出;堆是不连续的内存区域,获得空间较灵活也较大。3,是否产生内存碎片对于堆来讲,频繁的malloc/free(ne...
2018-09-21 23:04:21
315
原创 【编程练习】字符串系列
空格替换 请编写一个方法,将字符串中的空格全部替换为“%20”。假定该字符串有足够的空间存放新增的字符,并且知道字符串的真实长度(小于等于1000),同时保证字符串由大小写的英文字母组成。 给定一个string iniString 为原始的串,以及串的长度 int len, 返回替换后的string 测试样例: “Mr John Smith”,13 返回:”Mr%20J...
2018-08-22 17:07:24
335
原创 【软件测试】测试管理工具----禅道
测试管理工具: 指在软件开发过程中,对测试需求,计划,用例和实施过程进行管理,对软件缺陷进行跟踪处理的工具。 通过使用测试管理工具,测试人员或开发人员可以更方便地记录和监控每个测试活动,阶段的活动,从而找出软件的缺陷和错误,记录测试活动中发现的缺陷和改进建议。 禅道: 国产开源+商业式产品 禅道是国产的开源项目管理软件,专注研发项目管理,内置需求管理,任务管理,bug管理,缺陷管理,用例...
2018-08-16 20:38:36
10320
5
原创 【软件测试】自动化测试
自动化测试: 指软件测试的自动化,在预设状态下运行应用程序或者系统,预设条件包括正常和异常,最后评估运行结果。将人为驱动的测试行为转化为机器执行的过程。常见的自动化测试工具: QTP,selenium,Rational Root,jmeter,appium,soapui(接口自动化测试工具),LR等等。selenium是一个web的自动化测试工具,相比QTP有诸多优点:...
2018-08-12 19:03:26
327
原创 【编程练习】校招真题
(1)下厨房 牛牛想尝试一些新的料理,每个料理需要一些不同的材料,问完成所有的料理需要准备多少种不同的材料。 输入描述:每个输入包含 1 个测试用例。每个测试用例的第 i 行,表示完成第 i 件料理需要哪些材料,各个材料用空格隔开,输入只包含大写英文字母和空格,输入文件不超过 50 行,每一行不超过 50 个字符。 输出描述:输出一行一个数字表示完成所有料理需要多少种不同的材料。 示例1 ...
2018-08-11 20:35:44
317
原创 【软件测试】进一步认识测试
关于测试我们会说是发现程序错误(找bug)的过程,同时也是证明软件不存在错误的过程。 像生活中的一场考试,做完一遍题目之后检查一遍,就是在测试。 进一步理解即验证软件功能是否满足用户的需求,为了发现错误而执行程序或者系统的过程。 总之,测试是对软件质量的度量。首先认识几个关于测试的概念: bug:凡是实现效果和需求不相符的都可以认为是bug。 软件错误:当程序没有实现其最...
2018-08-10 18:21:12
401
原创 【软件测试】测试用例和测试分类
什么是测试用例? 测试用例:是为了实施测试而被测试系统提供的一组集合,这组集合包含:测试环境,操作步骤,测试数据,预期结果等要素。测试用例有哪些设计方法?测试用例的设计方法: (1)基于需求的设计 会使测试更有效,因为它使测试专注于质量问题产生的根源,即需求。 (2)等价类 依据需求将输入划分为若干等价类,从等价类中选出一个测试用例,若这个测试用例通过,认为所代表的等价类...
2018-08-09 11:33:00
7736
原创 编程练习:链表习题(下)
(6)convert-sorted-list-to-binary-search-tree Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST. 思路: (1)分析题意:要求将一条有序链表转化为一颗二叉搜索树 (2)快慢指针法找...
2018-08-06 14:55:31
411
原创 编程练习:链表习题(上)
(1)题目:输入两个链表,找出它们的第一个公共节点。思路: 1)计算出链表1的长度; 2)计算出链表2的长度; 3)计算出链表1和链表2的长度差dif; 4)长链表先走dif步,然后两条链表一起走,直到两个链表的节点第一次相等为止,此时指针位置即为所求。代码实现:class Solution {public: ListNode* FindFirstCom...
2018-08-03 10:47:45
1108
原创 文件压缩(哈夫曼树)
以字符串“aaaabbbccd”为例实现文件压缩。 (1)统计各字符出现个数 a:4 b:3 c:2 d:1 (2)利用各字符出现的字符作为权值构建huffman树 哈夫曼树又称为最优二叉树,是加权路径长度最短的二叉树。 构建规则:每次在给定数据中挑选出两个权值最小的数,分别作为左右孩子节点,构建一个父节点将两个孩子节点链接起来,父节点权值等于左右孩子权值之和,然后再将父节点放回存...
2018-08-02 22:11:07
2332
1
原创 编程练习:进制转换
题目:给定一个十进制数M,以及需要转换的进制数。将十进制数M转化为N进制数。#include <iostream>using namespace std;int main(){ string s = "", table = "0123456789ABCDEF"; int M = 0, N = 0; cin >> M >>...
2018-08-02 22:03:42
1660
原创 编程练习:阶乘末尾0的个数+数字和为sum的方法数
题目:输入一个正整数,求n!(即阶乘)末尾有多少个0? 比如n=10;n! = 3628800,所以答案为2分析:拿到题本来会想到先求出阶乘的结果,然后再查看该结果最后一位是否为0(%10查看最后一位是否为0,如果是再除以10,消掉最后一位,循环直至最后一位不是0,再将计数器返回回去,但是阶乘的性质很可能会产生溢出,所以这个办法行不通。 阶乘是1*2*3*4…(n-1)*n,所...
2018-07-26 20:52:04
243
原创 shell脚本基础总结
shell是一个用C语言编写的程序,是用户使用linux的桥梁。一种和内核沟通的外壳应用程序的统称。shell在各个岗位完成的任务: shell&bash的关系比喻:shell是媒婆,bash就是王婆。 shell脚本:是一种为shell编写的脚本程序。 特点:解释非编译型;弱类型 执行模式:交互式/批处理式 echo命令用于向窗口输出文本 #表示注释,如果#...
2018-07-11 10:01:10
182
原创 HTTP相关知识总结
自主web服务器 背景:http协议被广泛使用,从移动端,pc端浏览器,http协议无疑是打开互联网应用窗口的重要协议,http在网络应用层中的地位不可移动,是能准确区分前后台的重要协议。 描述:采用C/S模型,编写支持中小型应用的http,并结合mysql,理解常见互联网应用行为,做完该项目,你可以从技术上完全理解从你上网开始,到关闭浏览器的所有操作中的技术细节。 技术特点:网络编程(TCP/I...
2018-07-09 23:14:08
360
原创 I/O多路转接之select poll epoll
I/O多路转接之select 参数: (1)nfds是需要监视的最大的文件描述符值+1,因为文件描述符是从0开始计数的。 (2)rdset,wrset,exset分别对应于需要检测的可读文件描述符集合,可写文件描述符集合和异常文件描述符集合。 (3)timeout为结构timeval,用来设置select()的等待时间 timeout取值: (1)NULL:...
2018-06-01 21:16:16
289
原创 数据结构:并查集和图
并查集 并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题。 常涉及两个基本操作 (1)合并两个不相交的集合 (2)判断两个元素是否属于同一个集合。将N个不同元素分成一组不想交的集合。开始时,每个元素就是一个集合,然后按照规律将两个集合进行合并。 通过上述分析不难发现: 确定一共有几个集合? 观察有几个下标的值小于0,就有几个集合。 判断两个数据...
2018-05-24 22:09:14
1038
1
原创 归并排序和计数排序
归并排序 (1)思想: 将待排序的元素序列分成两个长度相等的子序列,对每一个子序列排序,然后将她们合并成一个序列,合并两个子序列的过程的过程称为二路归并。(2)步骤: 将数组按二分法分成两个区间,继续将区间进行递归划分,直到区间只有一个数为止;将相邻两个区间进行排序,使之合并为有序的区间;返回上一层递归,继续合并,直到全部被合并。(3)图解: (4)复杂度:...
2018-05-21 17:45:26
866
原创 交换排序
利用交换元素的位置进行排序的方法称作交换排序 冒泡排序: (1)思想(以升序为例): 比较相邻的元素,如果第一个比第二个大,就交换它们,从开始的第一对到结尾最后一对作相同的工作,第一轮下来会将最大的数冒到最右边,然后区间右边减少一个,重复上述步骤,直到区间缩小为1。(2)图解: 实现4趟冒泡排序就可将下列数组排为有序。 (3)优化思想: 设置标志位,用来判断该次排...
2018-05-18 11:38:32
4582
原创 插入排序和选择排序
排序:将一组杂乱无章的数据按照一定的规则有组织地排列起来。 排序的稳定性:如果在排序中,存在前后相同的两个元素的话,排序前和排序后他们的相对位置不发生变化。 今天,先来学习插入排序和选择排序: 插入排序 直接插入排序 (1)思想: 每一步将一个待排序的元其排序码的大小,插入到前面已将排好序的一组元素的合适位置上去,直到全部元素插入完为止。 元素集合越接近有序,直接插入排...
2018-05-18 10:04:26
2873
原创 网络:套接字通信
前面学习了经典的进程间通信IPC机制,使得同一台计算机上运行的进程可以相互通信,接下来将描述套接字网络IPC接口,进程能够使用该接口和其它进程通信。 IP地址:有两个版本 IPv4和IPv6,没有特殊说明默认为IPv4 端口号 数据链路和IP中的地址,分别指的是MAC地址和IP地址,传输层中也有类似的概念,那就是端口号,端口号用来识别同一台计算机中进行通信的不同应用程序。 特点: (1)...
2018-05-12 20:19:02
2493
原创 海量数据处理
1)给一个超过100G大小的log file, log中存着IP地址, 设计算法找到出现次数最多的IP地址? 初步分析: 100G普通机器内存中肯定是放不下的,目前使用的IP地址相当于一个32位的字符串,所以我们考虑切分,假设有1G可用内存我们切分为100份,那我们需要把这100个文件全部遍历,每一次出现的IP地址进行统计,最后找出出现次数最多的IP地址,此办法可行但是效率不高。 优化: 把...
2018-05-09 11:32:39
541
原创 处理大数据———位图以及布隆过滤器
相应知识点回顾: (一)内存单位的转换 1int = 4byte 1kb = 1024byte 1M = 1024kb 1G = 1024M 4G = 4*1024*1024*1024=42亿九千万(二)逻辑运算 (1)按位与运算&: 只有对应的两个二进位均为1时,结果位才为1 ,否则为0 (2)按位或运算|:只要对应的二个二进位有一个为1...
2018-04-22 22:58:02
323
原创 数据结构:哈希表
哈希概念: 构造一种存储结构,通过某种函数使元素的存储位置与它的关键码之间能够建立一一映射的关系,那么在查找时通过该函数可以很快找到该元素。当向该结构中插入元素时,根据待插入元素的关键码,以此函数计算出该元素的存储位置并按此位置进行存放。 当先结构中搜索元素时,对元素的关键码进行同样的计算,把求得的函数值当做元素的存储位置,在结构中按此位置取元素比较,若关键码相等,则搜索成功。 该方...
2018-04-21 09:19:21
347
原创 线程(下)
条件变量:了解了生产者消费者模型,我们来假设这样一个场景:你去超时买泡面可是发现货架是空的,生产者并没有提供任何口味的泡面,为了避免让顾客傻等,就需要条件变量来帮助我们。当有货物来的时候会通知你“有面了,快来买”。类比到线程,同样当一个线程访问队列时,发现队列为空,它只能等待,直到其它线程将一个节点添加到队列当中。条件变量相关函数: (1)初始化:pthread_cond_i...
2018-04-18 14:58:06
140
原创 线程(上)
什么是线程? (1)在一个程序里的一个执行路线叫做线程。更准确的定义是:线程是一个进程内部的控制序列。 (2)根据运行环境和调度者的身份,线程可以分为内核线程和用户线程。内核线程:运行在内核空间,由内核来调度。用户线程:运行在用户空间,由线程库来调度。 (3)线程的实现方式:完全在用户空间实现(创建和调度线程无需内核的干预,速度相当快);完全由内核调度;双层调度(实现两种实现模式的混合体,不...
2018-04-13 16:36:52
131
原创 信号详解
什么是信号? 在生活中,我们会遇到各种信号,比过马路遇到的红绿灯,下课的铃声,水开的声音,这些信号都预示着不同的信息。接下来我们学习Linux中的信号。 每个信号都有一个名字,均以SIG开头且为大写,可以用kill -l命令查看系统定义的信号列表: 可以发现没有32 33信号,其中1-31号为普通信号,不支持排队等待,可能会造成信号丢失。 34-64为实时信号,支持排队等待,不会造成信...
2018-04-08 13:12:09
455
原创 IPC-----消息队列
消息队列 消息队列是在两个进程之间传递二进制数据块数据的一种简单有效的方式。每个数据块都有特定的类型,接收方可以根据类型来有选择的接收数据,而不一定像管道和命名管道那样以先进先出的方式接收数据。 消息队列也有管道一样的不足,就是每个消息的最大长度(msgmax)是有上限的,每一个消息队列的总的字节数(msgmnb)是有上限的,系统上的消息队列的总数(msgmni)也有一个上限。 相关操作函数...
2018-04-06 20:35:09
207
原创 set和map的增删查改
一,set用法介绍: set是单词set(集合)的意思 只有一个键值,set当中不能存储相同的键值 所有的元素都会根据元素的键值自动被排序。(底层检索使用中序遍历算法)相关函数: (1)begin:返回一个迭代器,此迭代器指向set中到的第一个元素。 (2)end:返回一个迭代器,此迭代器指向set最后一个元素的下一个位置。 (3)rbegin:返回一个迭代器,此迭...
2018-04-02 20:20:22
664
原创 IPC-----共享内存和信号量
共享内存 共享内存允许两个或者多个进程共享一个给定的存储区。因为数据不需要在客户进程和服务进程之间复制,所以这是最快的IPC形式(省略了两次内核拷贝),一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不在涉及到内核。信号量(后面有详解)用于同步共享存储访问。 它允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在进行的进程之间传递数据的一种非常有效的方式。大多数的共享...
2018-04-02 19:06:06
908
原创 IPC——管道
进程间通信(IPC) 英文名IPC,因为每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户地址空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信。 管道: 管道是Unix中最古老的进程间通信的形式,是一种最基本的IPC机制。 我们把从一个进程连接到另...
2018-03-30 16:30:26
236
原创 RBT红黑树
引入 最开始我们学习了搜索二叉树,但是最后我们发现搜索二叉树有缺陷,之后我们又引入了AVL树。AVL树是一种高度平衡的二叉搜索树,能够满足增删查都是O(logN)的时间复杂度。既然AVL树已经满足了我们的期望,那么为什么还要引入红黑树呢? 这是由于AVL树是高度平衡的二叉搜索树,维持一颗AVL树的代价相比于红黑树来说是非常大的,由于它的高度平衡,使得它几乎每次插入或者删除都需要调...
2018-03-28 16:37:55
279
原创 AVL平衡搜索树
平衡? 平衡搜索二叉树是一种高度平衡的二叉排序树, 什么叫做高度平衡呢?意思是要么它是一颗空树,要么它的左子树和右子树都是平衡二叉树。平衡因子:二叉树上节点的左子树深度减去右子树的深度的值 最理想的平衡条件是左右两个子树的高度完全相等,但只有节点数为2^n-1(n为层数)的树才满足,当插入一个节点时,这种绝对状态便会被破坏,所以要求一颗AVL树左右子树高度差最多为1.也就是平衡因子...
2018-03-26 21:04:05
193
原创 线索化二叉树
什么是线索化?下图二叉树中的指针域并不是充分的利用了,有许许多多的”^”,也就是空指针域的存在,为避免浪费,我们最好充分利用起来。 对上图二叉树做中序遍历得到HDIBJEAFCG这样的字符序列,节点I的前驱是D,后继是B,遍历过后我们可以很清楚直到任意节点的前驱和后继是哪一个。可以在二叉链表上,我们只能知道每个节点指向其左右孩子节点的地址,而不知道其前驱是谁,后继是谁。要想知道必须遍历...
2018-03-23 20:48:17
343
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人