自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Irean_Lau的专栏

Flow, Ambitious Geek, Apathy

  • 博客(134)
  • 收藏
  • 关注

原创 git零基础深入浅出 之 [git初探]

从未感觉学git如此轻松

2016-06-14 00:34:51 10661 9

原创 软件测试简述[非测试方向必备]

资料搜集于网络,侵删什么是软件测试? 软件测试是为了发现错误而执行程序的过程。或者说,软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误的过程。 软件测试的目的? 测试的目的是想以最少的人力、物力和时间找出软件中潜在的各种错误和缺陷,通过修正种错误和缺陷提高软件质量,回避软件发布后由于潜在的软件缺

2016-06-12 22:06:58 7116

翻译 高频使用的git清单

侵删作者: 阮一峰链接: http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html我每天使用 Git ,但是很多命令记不住。一般来说,日常使用只要记住下图6个命令,就可以了。但是熟练使用,恐怕要记住60~100个命令。 下面是我整理的常用 Git 命令清单。几个专用名词的译名如下。Workspace:工作区 Index / Sta

2016-06-12 09:28:53 1084

原创 浅谈malloc

动态存储器分配大多是 C 程序在运行时会需要额外的存储,并且不能事先知道需要的存储大小,这时候使用一种动态存储分配器(dynamic memory allocator)。C 标准库提供了一个称为 malloc 的程序进行显式存储器分配,使用 free 函数来释放已分配内存,另外还有 calloc 和 realloc 两个函数。 void * malloc (size_t size);void *

2016-06-05 21:28:13 2181

原创 浅谈多进程多线程的选择

关于多进程和多线程,教科书上最经典的一句话是“进程是资源分配的最小单位,线程是CPU调度的最小单位”,这句话应付考试基本上够了,但如果在工作中遇到类似的选择问题,那就没有这么简单了,选的不好,会让你深受其害。经常在网络上看到有的XDJM问“多进程好还是多线程好?”、“Linux下用多进程还是多线程?”等等期望一劳永逸的问题,我只能说:没有最好,只有更好。根据实际情况来判断,哪个更加合适就是哪个好。我

2016-06-05 20:38:16 706

原创 优雅的编写C语言爬虫

CSpider c语言实现的易用的高效的网络爬虫框架:)。安装与使用方法:确认你的电脑中,已经安装下面的库:curl libuv libxml2 pcre liburi 进入core文件夹,编译文件,命令如下:make 接着要配置动态库,将.so文件和.h文件移动到相应的位置,命令如下: make install 这时,就可以开始编译你写好的文件(例如 test.c),命令如下:

2016-05-21 18:12:04 6371 2

原创 redis+mysql数据同步(协同)C/C++实现

说明: 本文只是对redis和mysql的数据迁徙做了简单介绍关于redis+mysql协同: 数据量巨大的情况下,频繁的操作数据库(这里值mysql),可能会造成击穿。而分布式缓存技术已经很成熟。 使用Nosql做缓存,然后异步的写入数据库,从而减小mysql甚至服务器的压力。关于redis+mysql应用: 微博当然是最大的redis集群了: 总结了基本流程:

2016-05-13 15:06:43 7073

原创 PHP-redis 模拟 新浪微博redis应用框架的实例

完成了 PHP-redis 模拟 新浪微博redis应用框架的实例 环境自搭 终端执行结果正常 host是redis数据库中 原有的一个键 浏览器 报错 这个错误是由于SELinux引起 http://blog.csdn.net/sryan/article/details/18000861 修改后正常 add.php reg.php将参数获取后, 设置 uid作为主键(自增

2016-05-10 08:58:09 2115

原创 redis-PHP手册

MethodsRedis::__constructDescriptionCreates a Redis client Example$redis = new Redis(); connect, openDescriptionConnects to a Redis instance. Parametershost: string port: int Return ValueBOOL: TRU

2016-05-10 08:46:17 1142

原创 redis容灾策略

基本的redis的容灾策略为: 1 采用master-slave方式 2 为了得到好的读写性能,master不做任何的持久化 3 slave同时开启Snapshot和AOF来进行持久化,保证数据的安全性 4 当master挂掉后,修改slave为master 5 恢复原master数据,修改原先master为slave,启动slave 6 若master与slave都挂掉后,调用命令通过

2016-05-10 08:44:44 7458

原创 自主开发linux下的WeChat(含图形界面)

主要技术: 主要用到的技术有,udp socket, C++ stl容器,生产者消费者模型, shell脚本编程,json 序列化和反序列化,ncurses 终端界面设计等结果展示: 代码详见GithubVersion 2.0 功能完善中,尽情期待…

2016-03-27 10:02:55 2709 1

原创 centos下 json,ncurse安装测试

要正确安装jsoncpp, 需要提前下载好scons, 然后才去安装jsoncpp.具体下载地址,网上有一大把,可以随意下载最新版本的进行安装。tar -zxvf scons-2.1.0.tar.gzcd scons-2.1.0python setup.py installtar -zxvf jsoncpp-src-0.5.0.tar.gzcd jsoncpp-src-0.5.0scons plat

2016-03-21 21:02:12 2038 1

原创 自主开发微型HTTPD服务器

代码:github结果演示: 结果演示GitHub:

2016-03-21 20:56:45 760

原创 Linux管道的实现机制

之前学习管道的时候,遇到一个问题,就是linux下的管道到底是如何实现的。在 Linux 中,管道的实现并没有使用专门的数据结构,而是借助了文件系统的file结构和VFS的索引节点inode。通过将两个 file 结构指向同一个临时的 VFS 索引节点,而这个 VFS 索引节点又指向一个物理页面而实现的。 当然 这和网上大部分解释一样,并不能令人满意。深入理解linux内核 P786 中有很好的

2016-03-21 20:25:04 3636

原创 【排序算法】归并排序

归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。归并操作的工作原理如下:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列设定两个指针,最初位置分别为两个已经排序序列的起始位置比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置

2015-06-23 12:12:09 1773

原创 【插入排序】直接,折半,二路,希尔

插入排序 给出一下四种方法:直接插入排序,折半插入排序,二路插入排序,希尔插入排序代码实现:#includeusing namespace std;#define size 21typedef int Sqlist[size];void SInsertSort(Sqlist &L, int n) //直接插入{ cout << "直接插

2015-06-17 13:13:35 1534

原创 【内部排序】 交换排序与选择排序详解

交换排序:通过依次交换逆序的元素使其有序化的过程。介绍两种交换排序: 冒泡排序,快速排序冒泡法:从第一个元素开始,依次比较相邻的两个元素,如果逆序则交换,第一趟比较结束后,序列中最大的元素将移动到序列末尾,即第n个位置,第二趟将次大元素移动到n-1位置…… 多趟比较后,会形成有序序列,排序方法类似气泡慢慢向上浮动,因此成为冒泡法。快速排序: 对冒泡的改进

2015-06-17 10:25:39 1746

原创 【C++】注释转换详解 C++注释转换为标准C语言注释

在一个大型工程当中,由于代码人员的多样性,使得代码的注释风格不同。然而在发布版本中,注释风格应该保持一致,以便于其他人员在后期的使用和维护。 由此,产生了如下的需求:实现对一个C/C++语言程序源文件中注释的转换功能(在这里 我们实现的是C++注释转换为标准C语言注释)注释转化的要求:其他注意事项:

2015-06-16 13:15:44 2231

原创 【C++】String类中的运算符重载

模块化设计:头文件:#ifndef operator_operator_h#define operator_operator_h#include #include using namespace std;class MyString{public: //三个重载的构造函数 MyString(); MyString(const c

2015-06-07 14:29:47 9828 3

原创 【C++】动态开辟二维数组

二维数组在内存中的分配如下:C方式呈现:#include using namespace std; #define ROW 3 #define COL 4 void main() { int **p = (int **)malloc(sizeof(int*)*ROW); for(int i=0;

2015-06-07 13:21:08 1512

原创 【C++】复数的运算符重载

运算符重载的定义:用户对于自定义类型的运算操作,例如复数的运算。需要重新定义运算符号(创建函数)。        除了类属关系运算符"."、成员指针运算符".*"、作用域运算符"::"、sizeof运算符和三目运算符"?:"以外,C++中的所有运算符都可以重载。复数的运算符重载如下:#include#includeusing namespac

2015-06-07 00:58:36 2916 1

原创 【Linux】进程调度概述

1 可执行队列 (基于实时进程调度)    调度程序中最基本的数据结构式运行队列(runqueue)。可执行队列是给定处理器上的可执行进程的链表,每个处理器一个。每个可投入运行的进程都唯一的归属于一个可执行队列。此外,可执行队列中还包含每个处理器的调度信息。所以,可执行队列也是每个处理器最重要的数据结构。为了避免死锁,要锁住多个运行队列的代码必须总是按照同样的顺序获取这些锁:按照可

2015-06-07 00:04:11 1540

原创 【C++缺省函数】 空类默认产生的6个类成员函数

1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。class A { public: A(){}//缺省构造函数 A(const A&){}//拷贝构造函数 ~A(){}//析构函数 A&ope

2015-06-07 00:03:37 4507 1

原创 【C语言】进度条实现

模拟电脑程序安装的进度条提供两种方式代码如下:#include #include#includevoid proc(){ int i = 0; for (i = 1; i <= 100; ++i) { printf("-"); } fflush(stdout); for (i = 1; i <= 100; ++i) { print

2015-05-22 23:40:39 10123

原创 【数据结构】串的堆分配表示与实现

采用堆分配存储表示的串被称为堆串,与顺序串相比,地址空间仍是连续,但空间是在程序执行时动态分配的。程序中会使用到的realloc函数://realloc : (void *)reelloc (void *ptr,unsigned newsize);//使用 : char *str;//   str = (char *)realloc(str,20);

2015-05-22 18:36:38 7524 2

原创 【数据结构】栈应用 行编辑器

在终端输入一串字符 当发现刚刚输入的字符有误,可以输入 # ,表示前一个字符无效;当想清除该行 则输入 @ 例如:  `   输入: hellow#               输出:              hello     输入:hellow@                输出:              #ifndef

2015-05-09 12:01:28 2083

原创 【数据结构】栈的应用 括号匹配

括号配对问题:假设一个表达式中包含三种类型的括号:(),{ },【】,嵌套顺序任意{ 【()()】 }1  2 3 4  5  6 7  8引入“期待的急迫程度”概念,例如当接受第一个括号 { ,则它期待与第8个 } 匹配,然而当接受到第二个 【 时,此时【最期待和第七个 】 匹配。#ifndef _MATCH_H_#define _MATCH_H_#in

2015-05-09 11:46:08 1769

原创 【数据结构】 栈实现 十进制到八进制的转化

1.利用栈的基本操作#include #include #include #define STACKSIZE 100 typedef int ElemType; typedef struct { ElemType stack[STACKSIZE]; int top; }SeqStack; void Conversion(int N)

2015-05-09 01:25:00 16952

原创 【数据结构 链表的应用】一元多项式相加及相乘 和对问题的分析

一元多项式相乘,需要将一个多项式的每一项的指数与另一个多项式的每一项的指数相乘。代码实现:头文件以及函数声明:#ifndef _POLYN_H #define _POLYN_H #include #include #include using namespace std;#define _CRT_SECURE_NO_DEPRECAT

2015-05-08 20:04:43 3277

原创 算法数据结构 单链表的实现+操作 以及和顺序表的对比

顺序表和单链表的优缺点对比:顺序表的优点,无需为表示表中元素之间的逻辑关系而增加额外的存储空间;可以快速的存取表中的任意位置的元素。顺序表的缺点,插入后删除操作需要移动大量元素;当线性表长度不稳定时,存储空间难确定,容易造成存储空间碎片。对于单链表链式存储即元素存储的内存单元可以是不连续,分散的。对于元素间如何来维护他们的关系(即逻辑

2015-04-28 20:10:56 1376

原创 算法数据结构 顺序表的实现+操作 及对产生问题的分析

线性表的顺序存储是将线性表中的元素存放在一组连续的存储单元中。使得在线性表中逻辑上相邻的元素在物理存储单元上也是连续的。采用顺序存储的线性表叫做顺序表。线性表的顺序存储结构如下:模块化设计:头文件 结构体和相应函数的定义,声明#ifndef _SEQLIST_H#define _SE

2015-04-22 17:14:58 1574

原创 【动态规划】 Google面试题 爬楼梯问题 斐波那契问题的多种解法

Google 曾询问应征者 :有N阶楼梯 ,你每次只能爬1或2 阶 楼梯;能有多少种方法对这个问题进行分析:  假设N阶楼梯的爬法有A(N)种;由于每次爬1或2阶 因此 A(N)= A(N-1)+ A(N-2),并且A(1)= 1.显而易见 这是一个 典型的 “斐波那契数列” 问题代码实现如下:#include  using namespace std;

2015-04-14 19:51:09 5520

原创 每个程序员都应该了解的十一句话

文来自泡面吧 侵删1.技术只是解决问题的选择,而不是解决问题的根本我们可以因为掌握了最新的JavaScript框架ahem、Angular的IoC容器技术或者某些编程语言甚至操作系统而欢欣雀跃,但是这些东西并不是作为程序员的我们用来解决问题的根本——它们只是用于帮助我们解决问题的简单工具。我们必须非常谨慎,不要对某项正好喜欢或者正好很火的特定技术走火入魔。否则,我们

2015-03-29 16:28:51 3203 1

原创 关于柔性数组的一些问题

柔性数组结构成员  结构中的最后一个元素允许是未知大小的数组,这就叫做柔性数组成员,但结构中的柔性数组成员前面必须至少一个其 他成员。柔性数组成员允许结构中包含一个大小可变的数组。sizeof返回的这种结构大小不包括柔性数组的内存。包含柔性数组成员的结构用malloc ()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。结构体变长的妙用——0

2015-03-19 13:05:11 2386

原创 通讯录结构体方法的实现 和VS中存在的一些问题的分析

实现一个通讯录;通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址功能如下:1.  添加联系人信息2.  删除指定联系人信息3.  查找指定联系人信息4.  修改指定联系人信息5.  显示所有联系人信息6.  清空所有联系人模块化设计:头文件 结构体和相应函数的

2015-03-17 19:35:34 1179 1

原创 可变参数列表

函数原型中,列出了函数期望接受的参数,但函数只能显示固定数目的参数。让一个函数在不同的时候接受不同的数目的参数是不是可以呢?答案是肯定的(printf就是一个可变参函数),但存在一些限制。int avarage(int val, int v1, int v2, int v3,int v4, int v5){ floatsum = v1; if(val>= 2)

2015-03-12 14:26:15 1114

原创 reverse_string(char *string)递归实现字符串翻转 和对“++”操作的一些分析

函数实现之前 先看一个例子void fun(int i){ if (i > 0) fun(i / 2); printf("%d ",i);}int main(void){ fun(10); return 0;}输出结果是什么?这是《c语言深度剖析》中的一个例子  在这个例子中 printf(“%d ”,i);语句是fun函数的一部分 必定执行一

2015-03-12 14:03:23 2322

原创 DigitSum(n) 输入一个非负整数,返回组成它的数字之和, 调用DigitSum(1729),返回1+7+2+9,和19 和出现的一些问题

/*写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和,例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19*/#include#includeint DigitSum(int n){ int static sum = 0; if (n != 0) { sum += n % 10; DigitSum(n / 10);

2015-03-12 09:50:43 2002

原创 递归实现求n^k

/*函数实现n^k,使用递归实现*/#include#includeint func(unsigned int n, unsigned int k){ if (k == 0) return 1;//结束条件 else{ if (k == 1) return n;//结束条件 else return n*pow(n, k - 1);//递归调用 } }

2015-03-12 09:31:21 1145

原创 C中的递归问题

函数的调用以两种方式出现:函数的嵌套与函数的递归。  C语言中,所有函数的定义都是互相平行和独立的,一个函数的定义不能包含另一个函数的定义,即不允许函数的嵌套定义。但函数的调用可以通过用一个函数另一个函数来实现,这就形成了函数的嵌套定义

2015-03-11 23:06:42 1395 1

空空如也

空空如也

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

TA关注的人

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