- 博客(89)
- 资源 (13)
- 收藏
- 关注
转载 GDB 格式化结构体输出及记录到文件
set print addressset print address on打开地址输出,当程序显示函数信息时,GDB会显出函数的参数地址。系统默认为打开的,show print address查看当前地址显示选项是否打开。set print arrayset print array on打开数组显示,打开后当数组显示时,每个元素占一行,如果不打开的话,每个元素则以逗
2016-12-21 10:56:09 2166
转载 gdb调试时显示数组
可以用下面的方法来显示数组p *array@len其中p相当于print,array就是数组首地址,也可以是数组名,len是想要显示的数组的长度。比如我有一个数组的定义int a[] = {1, 2, 3, 4, 5};那么想要显示的时候就可以写:p *a@5这样就会显示数组a中的所有元素。也可以使用display在一部调试的时候都显示:
2016-12-21 10:46:55 1271
转载 gdb调试基本命令
1. gdb 调试利器GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。 对于一名Linux下工作的c++程序员,gdb是必不可少的工具;1.1. 启动gdb对C/C++程序的调试,需要在编译前就加上-g选项:$g++ -g hello.cpp -o hello调试可执行文件:$
2016-12-21 10:43:31 561
原创 小技巧——二级指针的好处之一
1.ParseNode是从堆中分配的。指针数组作为索引typedef struct _ParseNode{ int32_t num_child_; struct _ParseNode** children_;//二级指针} ParseNode;2.数组下表作为索引typedef struct _ParseNode{ int
2016-12-20 20:58:20 755
原创 《算法》第三章——二叉查找树中的递归
如果给定的键key小于二叉查找树的根节点的键,那么小于等于key的最大键floor(key)一定在根节点的左子树中;如果给定的键key大于二叉查找树的根节点,那么只有当根节点右子树中存在小于等于key的节点时,小于等于key的最大键才会出现在右子树中,否则根节点就是小于等于key的最大键。/*在以Node为根节点的树中查找小于等于key的最大键(向下取整)*/Node floor
2016-12-08 13:00:46 561
转载 面试感悟
前言因为和同事有约定再加上LZ自己也喜欢做完一件事之后进行总结,因此有了这篇文章。这篇文章大部分内容都是面向整个程序员群体的,当然因为LZ本身是做Java开发的,因此有一部分内容也是专门面向咱们Java程序员的。简单先说一下,LZ坐标杭州,13届本科毕业,算上年前在阿里巴巴B2B事业部的面试,一共有面试了有6家公司(因为LZ不想请假,因此只是每个晚上去其他公
2016-12-04 10:03:25 354
转载 linux 条件变量
转自:linux 条件变量与互斥锁条件变量,与锁不同, 条件变量用于等待某个条件被触发基本编写的代码如下:// 线程一代码 =================================================pthread_mutex_lock(&mutex);// 设置条件为true... 操作pthr
2016-12-02 12:21:18 463
转载 关于LINUX中的权限位S(设置用户ID)(有效用户ID)(实际用户ID)
getuid() 实际用户ID为 执行程序的实际用户IDgeteuid() 有效用户ID与设置用户ID有关,及权限中的S位如果权限为rws 那么s位代表其他用户执行程序时改变为主用户权限。不安全如:int main(void) { int fd; fd = open("abc", O_CREAT | O_RDWR | O_EXCL, 0777);
2016-12-01 15:00:10 964
转载 关于void*与void**的区别
由于void就是不检查数据类型,所以,对于编译器来说, void* 和 void** ,甚至后面n个 * ,都是一样的.问题的关键在于,让我们这些编程的人可以区分.原则上,void* 可以是一个一级指针,二级指针,甚至是n级指针.但我们的使用习惯是, 一个 * 代表一级指针,多级指针就用n个*表示. 在实际使用的时候, 如果告诉你, void* 是一个n级
2016-12-01 14:56:29 2198
原创 小技巧——按位与实现模运算
一个长度为N的数组a[N](其中N为2的幂),数组的索引index。则有:index % N index& (N-1)按位与操作比模操作速度更快。应用:循环队列。
2016-11-29 20:32:36 786
原创 《算法》第二章——快排非递归实现
思路:其实就是用栈保存每一个待排序子串的首尾元素下标,下一次while循环时取出这个范围,对这段子序列进行partition操作。代码:#include#includeusing namespace std;int partition(int *a,int lo,int hi){//每次取第一个元素为pivot int pivot = a[lo]; w
2016-11-26 15:29:51 443
原创 《算法》第二章——生成快排的最佳序列
题目:Best case. Write a program QuickBest.java that produces a best-case array (with no duplicates) for Quick.sort(): an array of N distinct keys with the property that every partition will produce
2016-11-26 13:06:03 793
原创 《算法》第二章——Nuts and bolts(螺丝和螺帽)
思路:标准的快排啊, 用螺母把螺丝分区,每次分区得到三个结果,A1,完全匹配的一对A2,比螺母小的螺丝A3,比螺母大的螺丝将1中的螺丝取出,用它对螺母分区,可以得到B1. 比螺丝小的螺母B2. 比螺丝大的螺母A2跟B1一一对应,A3跟B2一一对应,对(A2,B1)和(A3,B2)分别执行上述的算法,直至完全匹配。代码:/*假设螺钉和螺帽大小没有一
2016-11-25 22:18:58 6648
转载 linux内核双链表
linux内核双链表的优点:设计思想:尽可能的代码重用,化大堆的链表设计为单个链表。 链表的构造:如果需要构造某类对象的特定列表,则在其结构中定义一个类型为list_head指针的成员,通过这个成员将这类对象连 接起来,形成所需列表,并通过通用链表函数对其进行操作。其优点是只需编写通用链表函数,即可构造和操作不同对象的列表,而无需为每类对象的每种列表编写 专用函数,实现了代码的重用。
2016-11-21 20:02:38 387
转载 gcc和g++的区别
一:gcc与g++比较 编译c/c++代码的时候,有人用gcc,有人用g++,于是各种说法都来了,譬如c代码用gcc,而 c++代码用g++,或者说编译用gcc,链接用g++,一时也不知哪个说法正确,如果再遇上个extern "C",分歧就更多了,这里我想作个了结,毕竟知识的目的是令人更清醒,而不是更糊涂。 误区一:gcc只能编译c代码,g++只能编译c++代码两者都可以
2016-11-18 15:05:26 421
原创 《算法》第二章——归并排序实现,快速归并,间接(索引)归并
#include#include#define N 5using namespace std;int aux[N];//辅助数组void merge(int a[],int lo,int mid,int hi){//将a[lo..mid]和a[mid+1..hi]归并 int i = lo; int j = mid + 1; for (int k = lo; k <=hi;
2016-11-12 15:13:26 399
转载 C++虚函数的实现机制
C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,我在这里不做过多的
2016-11-10 12:23:18 290
原创 《算法》第一章——仅用加减实现的二分查找
仅用加减实现的二分查找算法叫斐波那契查找。算法的大致思路参考:http://blog.csdn.net/zsw12013/article/details/50003505——斐波那契查找(黄金分割法查找)(仅使用加减实现的二分查找)代码:#include #include using namespace std;class FibonacciSearch{publi
2016-11-05 16:42:16 591
原创 《算法》第一章——数组的局部最小元素
题目和思路:题意是指当a[i]的前后两个元素都存在时,需要满足“a[i] 但是如果a[i]是第一个元素或者是最后一个元素,那么只需要看一边。所以对于任何一个数组,”局部最小元素“一定是存在的,题意要求找一个就行,于是就用二分了。代码:#include using namespace std;static const int N = 5;int local_min(i
2016-11-04 21:01:45 2384 1
原创 《算法》第一章——利用两个栈实现一个队列的push和pop操作
思路方法参考:http://www.cnblogs.com/wanghui9072229/archive/2011/11/22/2259391.html-------用两个栈实现一个队列——我作为面试官的小结代码:#include#includeusing namespace std;templateclass MyStack{public: void pop()
2016-11-02 15:02:33 1304
转载 《算法》第一章——栈的可生成性
转自:http://blog.csdn.net/wangyl_gain/article/details/50449318------数据结构01--栈题目:用例程序会进行一系列入栈和出栈的混合操作。入栈操作会将整数0-9顺序压入栈中,判断出栈顺序是否正确。 例如:入栈: 0- 1- 2- 3- 4- 5- 6- 7- 8- 9出栈:4- 3 -2- 1 -0- 9 -8
2016-11-01 21:52:05 889 1
转载 《算法》第一章——打印文件目录结构
转载自:http://blog.csdn.net/nbda1121440/article/details/9120219-------Linux打印文件目录结构代码:#include #include #include #include #include #include void printdir(char *dirname,int indent){ DIR *dp;
2016-11-01 20:16:50 560
原创 《算法》第一章——约瑟夫环(Josephus)问题
问题简述:N个人围成一圈(位置记为0~N-1),从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=7,M=2,被杀掉的顺序是:1,3,5,0,4,2,6。思路:主要有两种方法:队列和循环链表发。这里用队列法。首先每当一个人刚报过数了,不考虑被杀死的情况,那么这个人是下一轮中最后一个需要报数的,也就是排在队尾的那个。所以每次报数后应该将这个人从队首po
2016-11-01 18:33:57 587
原创 《算法》第一章——中缀表达式转前缀和后缀表达式
思路:参考中的文章已经将思路讲的非常详细了。中缀转前缀:(1) 初始化两个栈:运算符栈S1和储存中间结果的栈S2;(2) 从右至左扫描中缀表达式;(3) 遇到操作数时,将其压入S2;(4) 遇到运算符时,比较其与S1栈顶运算符的优先级:(4-1) 如果S1为空,或栈顶运算符为右括号“)”,则直接将此运算符入栈;(4-2) 否则,若优先级比栈顶运算符的较高或相
2016-10-29 22:50:47 344
原创 《算法》第一章——Dijkstra双栈表达式求值
思路:使用两个栈分别保存运算符和操作数。将表达式从左到右依次送人栈中处理:将操作数压人操作数栈。将运算符压人运算符栈。忽略左括号。若遇到右括号,则弹出一个运算符,并弹出所需的操作数,并将这部分表达式的运算结果求出后压人操作数栈。处理完所有右括号后,操作数栈中的最后一个指就是表达式的值。#include#include#include#includeusing nam
2016-10-29 09:46:21 472
原创 《算法》第一章——判断两个整数是否互质
判断两个整数互质的方法 概念:公约数只有1的两个数叫做互质数。根据互质数的概念可以对一组数是否互质进行判断。如:9和11的公约数只有1,则它们是互质数。求商判断法:用大数除以小数,如果除得的余数与其中较小数互质,则原来两个数是互质数。如:317和52,317÷52=6……5,因余数5与52互质,则317和52是互质数。#includeusing namespace std
2016-10-28 19:01:58 15932 4
原创 《算法》第一章——二分查找(基础)
从文件中读取int型数据,通过二分查找判断从标准输入获得的int值是否存在于该文件中。#include #include #include using namespace std;int binary_search(int key,int a[],int len){ int low = 0; int high = len-1; while(low <= high)
2016-10-24 22:13:27 276
原创 虚函数和动态绑定中一个易忽略的知识点
#includeclass B{public: void fb(){fun();} virtual fun(){std::cout<<"B::fun"<<std::endl;}};class D:public B{public: fun(){std::cout<<"D::fun"<<std::endl;}};int main(void){ B *basePt
2016-10-17 21:16:51 289
原创 C语言变长参数实现以及它们在栈上的分布
#include #include #include void fun(int num, ...){ int *p = &num + 1; printf("%p-->%d\t", p - 1, *(p - 1)); va_list args; va_start(args, num); printf("%p-->%d\t", args, *args); while (num-
2016-10-16 18:24:53 600
转载 服务器三大体系SMP、NUMA、MPP介绍
从系统架构来看,目前的商用服务器大体可以分为三类,即对称多处理器结构(SMP:Symmetric Multi-Processor),非一致存储访问结构(NUMA:Non-Uniform Memory Access),以及海量并行处理结构(MPP:Massive Parallel Processing)。它们的特征分别描述如下:SMP(Symmetric Multi-Proces
2016-10-15 09:04:57 795
原创 具有默认实参的构造函数的类的对象的生成方法。
#include using namespace std;class Rectangle {public: Rectangle():x1(0),x2(0),y1(0),y2(0){cout<<"default"<<endl;} // Rectangle(int a1 = 0, int a2 = 0, int a3 = 0, int a4 = 0); ~Rectangl
2016-09-12 19:19:30 567
原创 C++命名空间namespace的使用规范
1.命名空间namespacens{………//将内容添加到命名空间中}using namespace ns;……..//声明命名空间后,表示ns命名空间里面的内容对于这条声明后的代码是可见的。但是如果声明了两个命名空间ns1,ns2。且ns1和ns2中包含相同的全局变量,或函数或类,那么就可能会产生冲突。using namespace ns1;u
2016-09-09 20:30:04 9001 3
原创 《effective C++》读书笔记(三)
23.编译器查找某个函数或变量的过程:假设这个函数是某个派生类的成员函数local作用域(函数内)->该派生类的作用域->该派生类基类的作用域->内含基类的namespace作用域->global作用域。参考:《effective c++》p157 24.派生类内的名称会遮掩基类的名称(比如基类内有若干重载成员函数飞f(),派生类内又实现了自己的重载版本,那么public继承并
2016-09-08 21:10:01 293
原创 《effective C++》读书笔记(二)
11.1) 如果你为class添加一个成员变量(尤其是类成员变量),你必须同时修改copying函数,所有构造函数以及任何非标准形式的operator=。2) copying函数应该确保复制“对象内的所有成员变量”及“所有base class成分”。在子类中要注意调用基类的构造函数(或copying构造,或operator=等)来完成对基类的操作。3)
2016-09-08 21:05:32 302
原创 《effective C++》读书笔记(一)
1.类中遇到需要使用#define的地方要尽量避免。1) 在类中避免#define NUM 10int array[NUM];使用枚举变量解决,即enumhack。2) 在类中避免#define MAX(a,b) f((a) >(b) ? (a) : (b))使用templateinline解决template inline void m
2016-09-08 21:01:38 250
原创 new限定区域分配内存
#include #include#include //需要添加该头文件using namespace std;const int ARRLEN = 100;int static_buf[ARRLEN];//静态区const int N = 5;int main(){ int *p1,*p2; cout<<"static_buf address:"<<stati
2016-09-08 20:54:39 975
转载 对几种主流编程语言的评价
C语言虽说C语言在内存管理方面存在严重的缺陷,不过它还是在某些应用领域里称王称霸。对于那些要求最高的效率,良好的实时性,或者与操作系统内核紧密关联的程序来说,C仍然是很好的选择。C良好的可移植性也为它加了分。不过现在很多其他的语言可移植性越来越好,C在这方面的优势可能会逐渐丧失。现有的很多程序可以产生非常棒的C代码,比如语法分析器、GUI Builder等,这时候C语言也是有吸
2015-01-17 22:51:18 1479
转载 什么是IO多路复用,理解IO多路复用
一、什么是socket?我们都知道unix(like)世界里,一切皆文件,而文件是什么呢?文件就是一串二进制流而已,不管socket,还是FIFO、管道、终端,对我们来说,一切都是文件,一切都是流。在信息 交换的过程中,我们都是对这些流进行数据的收发操作,简称为I/O操作(input and output),往流中读出数据,系统调用read,写入数据,系统调用write。不过话说回来了 ,计算
2014-08-13 10:42:53 18355 6
转载 基于文本行协议
很多互联网上的协议例如HTTP、SIP、SMTP、FTP的控制连接协议都是基于文本行的。所谓基于文本行,指的是信息以文本传递,一个信息单元传递完毕后要传送换行。比如对于HTTP的GET请求来说,GET /index.html HTTP/1.0是一行,接下去每个头部信息各占一行。一个空行表示整个请求结束。而tcp是基于流的,使用read/recv和write/send一次读入或写入的字节
2014-08-09 17:06:04 1558
转载 如何在Linux下查找一个类型的定义
对于赶时间的朋友,只看第一段就好了。 首先,我非常肯定以及确定的告诉你ssize_t是有符号整型,在32位机器上等同与int,在64位机器上等同与long int,有没有注意到,它和long数据类型有啥区别?其实就是一样的。size_t 就是无符号型的ssize_t,也就是unsigned long/ unsigned int (在32位下),不同的编译器或系统可能会有区别,主要是
2014-08-09 11:51:16 953
基于Qt的c/s架构的即时聊天通信软件(服务器程序是linux平台下的)
2016-12-31
Qt实现的简单即时通信聊天软件
2016-12-31
《算法》第四版--书中源码以及部分习题解答.part1
2016-10-30
《算法》第四版--书中源码加部分习题解答.part6
2016-10-30
《算法》第四版--书中源码加部分习题解答.part5
2016-10-30
《算法》第四版--书中源码加部分习题解答.part4
2016-10-30
《算法》第四版--书中源码加部分习题解答.part3
2016-10-30
《算法》第四版--书中源码加部分习题解答.part2
2016-10-30
Struts2权威指南(完整版)
2016-01-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人