- 博客(292)
- 资源 (6)
- 收藏
- 关注
转载 设计模式 经典书籍必备推荐
很多朋友问学习设计模式的书籍,老大沧浪在FAQ里有个简短的叙述,这里我引申一下,说说自己看过或者翻过的设计模式书籍,由于水平所限,肯定有不对的地方,希望大家指正,如果大家看到好的模式相关书籍,希望能回帖补充。首 先模式是不分语言的,Beck在他的TDD一书中用python实现了Composite模式,充分证明了这一点。不过我认为目前模式方面的好书基本都是 基于java语言的,所以不管你是用
2015-11-19 11:20:18
2243
1
转载 栈帧
首先应该明白,栈是从高地址向低地址延伸的。每个函数的每次调用,都有它自己独立的一个栈帧,这个栈帧中维持着所需要的各种信息。寄存器ebp指向当前的栈帧的底部(高地址),寄存器esp指向当前的栈帧的顶部(地址地)。下图为典型的存取器安排,观察栈在其中的位置 入栈操作:push eax; 等价于 esp=esp-4,eax->[esp];如下图出栈操作:pop eax; 等价于 [e
2015-11-13 01:08:32
702
转载 小例子一步一步解释“函数调用过程中栈的变化过程”
1 问题描述 在此之前,我对C中函数调用过程中栈的变化,仅限于了解有好几种参数的入栈顺序,其中的按照形参逆序入栈是比较常见的,也仅限于了解到这个程度,但到底在一个函数A里面,调用另一个函数B的过程中,函数A的栈是怎么变化的,实参是怎么传给函数B的,函数B又是怎么给函数A返回值的,这些问题都不能很明白的一步一步解释出来。下面,便是用一个小例子来解释这个过程,主要回答的问题是如下几个: 1
2015-11-13 01:07:22
993
转载 c语言编译预处理和条件编译执行过程的理解
在C语言的程序中可包括各种以符号#开头的编译指令,这些指令称为预处理命令。预处理命令属于C语言编译器,而不是C语言的组成部分。通过预处理命令可扩展C语言程序设计的环境。一.预处理的工作方式 1.1.预处理的功能 在集成开发环境中,编译,链接是同时完成的。其实,C语言编译器在对源代码编译之前,还需要进一步的处理:预编译。 所以,完整的步骤是:预编译 -> 编译 -> 链
2015-11-12 00:24:56
2707
转载 GCC编译的背后( 预处理和编译 汇编和链接 )
平时在Linux下写代码,直接用"gcc -o out in.c"就把代码编译好了,但是这后面到底做了什么事情呢?如果学习过编译原理则不难理解,一般高级语言程序编译的过程莫过于:预处理、编译、汇编、链接。gcc在后台实际上也经历了这几个过程,我们可以通过-v参数查看它的编译细节,如果想看某个具体的编译过程,则可以分别使用-E,-S,-c和 -O,对应的后台工具则分别为cpp,cc1,as,ld。下
2015-11-12 00:23:46
917
转载 C语言:浮点数在内存中的表示
单精度浮点数: 1位符号位 8位阶码位 23位尾数双精度浮点数: 1位符号位 8位阶码位 52位尾数 实数在内存中以规范化的浮点数存放,包括数符、阶码、尾数。数的精度取决于尾数的位数。比如32位机上float型为23位 double型为52位。单精度float型存储在内存中的大小为4个字节,即32位。浮点表示的一般形式为:R=M*2^e (R:Rea
2015-11-06 17:12:14
793
转载 都是类型惹的祸——小心unsigned
正如我们所知道的,编程语句都有很多的基本数据类型,如char,inf,float等等,而在C和C++中还有一个特殊的类型就是无符号数,它由unsigned修饰,如unsigned int等。大家有没想过,就是因为这些不同的类型,而使大家编写的看似非常正确的程序出现了预想不到的错误呢?一、迷惑人的有符号下无符号数的比较操作废话不多说,马上来看一下例子,让你先来体验一下这个奇妙的旅程,
2015-11-06 00:58:02
742
转载 c语言全局变量和局部变量问题汇总
1、局部变量能否和全局变量重名?答:能,局部会屏蔽全局。要用全局变量,需要使用"::"局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。2、如何引用一个已经定义过的全局变量?答:extern
2015-10-17 12:05:38
1266
转载 ioctl函数详细说明(网络)
ioctl 函数 本函数影响由fd 参数引用的一个打开的文件。 #includeint ioctl( int fd, int request, .../* void *arg */ );返回0 :成功 -1 :出错 第三个参数总是一个指针,但指针的类型依赖于request 参数。我们可以把和网络相关的请求划分为6 类:套接口操作文件操作接口操作
2015-10-06 01:00:45
994
转载 gcc __attribute__ ((weak, alias (#name)))
本系列文章,着重讲__attribute__的用途 此属性,可以借助uClibc里面的弱符号来对库里符号进行一些更改,可以用于调试,我最近就用这个功能来调试system,很好用,类似可以实现hook函数的还有LD_PRELOAD,参见 http://blog.youkuaiyun.com/green369258/article/details/7314298
2015-09-30 12:13:57
1831
转载 C语言宏定义中#与##运算符
#运算符 宏定义可以包含两个专用的运算符:#和##。编译器不会识别这两个运算符,他们会预处理时被执行。 #运算符将宏的一个参数转换为字符串字面量。它仅允许出现在带参数的宏的替代列表中。(#运算符所执行的操作可以理解为“字符串化(stringization)”). #运算符有许多用途,这里只来讨论其中的一种。假设我们决定在调试过程中使用PRINT_INT宏作为一个便捷的方法来输出整
2015-09-29 23:22:00
1577
转载 linux kill命令参数及用法详解--linux终止进程命令
转自:http://www.linuxso.com/command/kill.html 有一次面试被问到kill -3的意思,回答的不是很好,于是找到一篇文件来学习一下。Linux kill 命令使用详解功能说明:删除执行中的程序或工作。语 法:kill [-s ][程序] 或 kill [-l ]补充说明:kill可将指定的信息送至程序。预设的信息为SIGTERM(
2015-09-29 17:08:33
4539
转载 linux exec函数家族
1.exec家族一共有六个函数,分别是:(1)int execl(const char *path, const char *arg, ......);(2)int execle(const char *path, const char *arg, ...... , char * const envp[]);(3)int execv(const char *path, char *co
2015-09-29 15:31:30
505
转载 linux ps命令详解
Linux中的ps命令是Process Status的缩写。ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令。要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而 ps 命令就是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行
2015-09-29 10:56:08
477
转载 getopt() 与 getopt_long() 详解
getopt被用来解析命令行选项参数。 #include extern char *optarg; //选项的参数指针 extern intoptind, //下一次调用getopt的时,从optind存储的位置处重新开始检查选项。 extern intopterr, //当opterr=0时,get
2015-09-27 17:11:13
1218
转载 Linux文件夹权限 学习笔记
一、用户对文件或目录都有哪些权限? 四种:读、写、执行、没有权限 二、如何表示这四种权限? 如果用十进制数字表示,分别为:4、2、1、0;如果用字符表示,分别为:r、w、x、-。个人觉得,使用chmod命令更改文件或目录权限时,数字表示法显然比字符表示法简洁明快 三、对于文件和目录而言,这四种权限是否具有同样的含义? 并非如此,如下所示: -----------
2015-09-26 00:40:17
571
转载 在switch-case中定义变量时当心被“穿越”
这篇文章的分类是C++,所以特此声明这里提到的规则只适用于C++。对于C语言,是有不同的一套规则的。先来看看下面这段代码,有问题吗?void RunStateMachine() { switch(m_status) { case TASK_START: int data = FormDataToSend();
2015-09-23 13:49:21
1127
转载 fopen()中w 和w+的区别
测试代码[cpp] view plaincopyprint?#include #include int main() { FILE *fp; fp = fopen("test.txt", "w"); // fp = fopen("testt.txt", "w+"); fprintf(fp, "1This is testing for
2015-09-23 12:05:01
1629
转载 C++中new和malloc的区别
相同点:都可用于申请动态内存和释放内存不同点:(1)操作对象有所不同。malloc与free是C++/C 语言的标准库函数,new/delete 是C++的运算符。对于非内部数据类的对象而言,光用maloc/free 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数, 对象消亡之前要自动执行析构函数。由于malloc/free 是库函数而不是运算符,不在编译器控制权限之内,不
2015-09-10 17:18:16
968
转载 linux shell 快捷键.
删除ctrl + d 删除光标所在位置上的字符相当于VIM里x或者dlctrl + h 删除光标所在位置前的字符相当于VIM里hx或者dhctrl + k 删除光标后面所有字符相当于VIM里d shift+$ctrl + u 删除光标前面所有字符相当于VIM里d shift+^ctrl + w 删除光标前一个单词相当于VIM里d
2015-08-30 13:29:32
432
转载 格式: echo -e "\033[字背景颜色;字体颜色m字符串\033[0m"
格式: echo -e "\033[字背景颜色;字体颜色m字符串\033[0m" 例如: echo -e "\033[41;36m something here \033[0m" 其中41的位置代表底色, 36的位置是代表字的颜色 那些ascii code 是对颜色调用的始末. \033[ ; m …… \033[0m 字背景颜色范围:40---
2015-08-28 14:09:25
1667
转载 linux tr命令详解
通过使用 tr,您可以非常容易地实现 sed 的许多最基本功能。您可以将 tr 看作为 sed 的(极其)简化的变体:它可以用一个字符来替换另一个字符,或者可以完全除去一些字符。您也可以用它来除去重复字符。这就是所有 tr 所能够做的。 tr用来从标准输入中通过替换或删除操作进行字符转换。tr主要用于删除文件中控制字符或进行字符转换。使用tr时要转换两个字符串:字符串1用于查询,字符
2015-08-27 15:53:54
386
转载 java-web-j2e学习建议路线
首先要明白Java体系设计到得三个方面:J2SE,J2EE,J2ME(KJAVA)。J2SE,Java 2 Platform Standard Edition,我们经常说到的JDK,就主要指的这个,它是三者的基础,属于桌面级应用开发,这部分如果学得好很容易拓展J2EE和J2ME。J2ME,The Micro Edition of the Java 2 Platform。主要用于嵌入式Java,如手
2015-08-27 12:35:39
567
转载 linux shell 之if-------用if做判断
综合网络,略有修改,一 简介 1 字符串判断str1 = str2 当两个串有相同内容、长度时为真 str1 != str2 当串str1和str2不等时为真 -n str1 当串的长度大于0时为真(串非空) -z str1 当串的长度为0时为真(空串) str1 当
2015-08-26 22:34:06
432
转载 linux shell 之if-------用if做判断
综合网络,略有修改,一 简介 1 字符串判断str1 = str2 当两个串有相同内容、长度时为真 str1 != str2 当串str1和str2不等时为真 -n str1 当串的长度大于0时为真(串非空) -z str1 当串的长度为0时为真(空串) str1 当
2015-08-26 22:29:40
469
转载 shell中if条件字符串、数字比对,[[ ]]和[ ]区别
引用:http://www.51testing.com/?uid-7701-action-viewspace-itemid-13731http://blog.youkuaiyun.com/sunboy_2050/article/details/6836382shell 括号学习shell的时候总是被shell里的条件判断方式搞得头疼,经常不知道改 用[],[[]],(())还是te
2015-08-26 20:14:43
553
转载 shell编程之if判断的总结
一、if的基本语法:if [ command ];then 符合该条件执行的语句elif [ command ];then 符合该条件执行的语句else 符合该条件执行的语句fi二、文件/文件夹(目录)判断[ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真。[ -c FILE ] 如果 FILE 存在且是一个字特殊文件则
2015-08-25 16:33:31
377
转载 shell中各种括号的作用()、(())、[]、[[]]、{}
一、小括号,圆括号()1、单小括号 () ①命令组。括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用。括号中多个命令之间用分号隔开,最后一个命令可以没有分号,各命令和括号之间不必有空格。 ②命令替换。等同于`cmd`,shell扫描一遍命令行,发现了$(cmd)结构,便将$(cmd)中的cmd执行一次,得到其标准输出,再将此输出放
2015-08-25 16:27:13
361
转载 grep正则表达式后面的单引号和双引号的区别?
单引号''是全引用,被单引号括起的内容不管是常量还是变量者不会发生替换;双引号""是部分引用,被双引号括起的内容常量还是常量,变量则会发生替换,替换成变量内容!一般常量用单引号''括起,如果含有变量则用双引号""括起!单引号与双引号的最大不同在于双引号仍然可以保有变数的内容,但单引号内仅能是一般字元 ,而不会有特殊符号“”号里面遇到$,\等特殊字符会进行相应的变量替换‘’号
2015-08-23 13:42:28
5301
转载 通配符和正则表达式的区别
在看鸟哥的Linux私房菜的时候看到十二章一直强调通配符和正则表达式的区别,在我的理解中,两者貌似是一样的都是用来匹配的。Google之网上给出的答案是:在文本过滤工具里,都是用正则表达式,比如像awk,sed,等,是针对文件的内容的而通配符多用在文件名上,比如查找find,ls,cp,等等 下表是鸟哥给的Linux下的通配符 符號內容*
2015-08-20 17:20:49
500
转载 打造ArchLinux下的类apt-get source工具
转自:http://crane.is-programmer.com/posts/26726.html首先广告一下,Arch Linux是我用过的最喜欢的一个Linux发行版,它是一个滚动升级模式的i686/x86-64 Linux发行版,它的开发注重于系设计简洁、结构优雅、代码 准确、体验新潮的完美权衡。它给你一个最小的系统,但是提供很强大的包管理,从而你可以自由的构建一个理想的系统,
2015-08-12 16:12:59
2426
转载 在一个文件中有10G个整数,乱序排列,要求找出中位数
题目:在一个文件中有 10G 个整数,乱序排列,要求找出中位数。内存限制为 2G。只写出思路即可(内存限制为 2G的意思就是,可以使用2G的空间来运行程序,而不考虑这台机器上的其他软件的占用内存)。关于中位数:数据排序后,位置在最中间的数值。即将数据分成两部分,一部分大于该数值,一部分小于该数值。中位数的位置:当样本数为奇数时,中位数=(N+1)/2 ; 当样本数为偶数时,中位数为N/2与
2015-08-06 18:12:38
890
转载 桶排序算法详解
1. 桶排序介绍桶排序(Bucket sort)是一种基于计数的排序算法,工作的原理是将数据分到有限数量的桶子里,然后每个桶再分别排序(有可能再使用别的排序算法或是以递回方式继续使用桶排序进行排序)。当要被排序的数据内的数值是均匀分配的时候,桶排序时间复杂度为Θ(n)。桶排序不同于快速排序,并不是比较排序,不受到时间复杂度 O(nlogn) 下限的影响。桶排序按下面4步进行:
2015-08-06 17:15:30
11979
1
转载 HASH表的实现(拉链法) - C/C++
本文的一些基本概念参考了一部分百度百科,当然只保留了最有价值的部分,代码部分完全是自己实现!简介哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。它通过把关键码值映射到表中一个位置来访问记录,有点类似于数组,并且能在O(1)(冲突情况另算)下查找到元素。 基本概念设所有可能出现的关键字集合记为u(简称全集)。实际发生(即实
2015-08-05 19:34:47
5923
转载 c语言运算符优先级,结合性(左/右结合详解)
重新翻了遍c语言,觉得对c语言运算符结合性有必要提一下,毕竟去年我自己刚学c语言的时候,就没搞明白结合性的问题。什么是左结合?什么是右结合?它们是干嘛用的?它们是什么时候用的?本文将围绕这几个问题展开..(小白文,大神绕道)先附录几个自己学习过程中的参考网站。(有些见解和例子来自一下网站)http://wenku.baidu.com/link?url=W2ofiBx4yEtrx
2015-08-05 18:44:15
2104
转载 树状数组 详解
对于普通数组,其修改的时间复杂度位O(1),而求数组中某一段的数值和的时间复杂度为O(n),因此对于n的值过大的情况,普通数组的时间复杂度我们是接受不了的。在此,我们引入了树状数组的数据结构,它能在O(logn)内对数组的值进行修改和查询某一段数值的和。树状数组是一个查询和修改复杂度都为log(n)的数据结构,假设数组a[1..n],那么查询a[1]+...+a[n]的时间是log级别的,
2015-08-04 23:06:18
860
转载 树状数组 求逆序数
树状数组 求逆序数 poj 2299这里说的很好,把求逆序的步骤说的很明白,我也是看完才懂的,之前自己想了很久就是不明白为什么可以用树状数组求逆序 转载:树状数组,具体的说是 离散化+树状数组。这也是学习树状数组的第一题.算法的大体流程就是:1.先对输入的数组离散化,使得各个元素比较接近,而不是离散的,2.接着,运用树状数组的标准操作来累计数组的逆序数。算法详细解
2015-08-04 23:04:43
465
转载 优化的直接插入排序(二分查找插入排序,希尔排序)
优化的直接插入排序(二分查找插入排序,希尔排序) 本博文向大家介绍了插入排序的三种实现:直接插入排序,二分查找插入排序,希尔排序。详细分析的其实现过程、时间复杂度和空间复杂度、稳定性以及优化改进策略。最后简单的做了下性能测试。 直接插入排序(一)概念及实现直接插入排序的原理:先将原序列分为有序区和无序区,然后再经过比较和后移操作将无序区元素插入到有序区中。
2015-08-01 15:45:57
1321
转载 找工作知识储备(3)---从头说12种排序算法:原理、图解、动画视频演示、代码以及笔试面试题目中的应用
作者:寒小阳时间:2013年9月。出处:http://blog.youkuaiyun.com/han_xiaoyang/article/details/12163251。声明:版权所有,转载请注明出处,谢谢。0、前言 从这一部分开始直接切入我们计算机互联网笔试面试中的重头戏算法了,初始的想法是找一条主线,比如数据结构或者解题思路方法,将博主见过做过整理过的算
2015-08-01 01:28:46
923
转载 单链表实现插入排序
这里给出了一种单链表插入排序的实现。另一种类似的实现参见《C算法(第一卷:基础、数据结构、排序和搜索)(第三版)》程序3-11。 #include #include typedef struct list LIST;typedef LIST *link; struct list{ int item;
2015-08-01 01:28:27
1096
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人