摘要:同学问下如何按列拼接文件,脚本中写了三种方法……#! /bin/bash len1=`wc -l $1 | cut -d ' ' -f1`len2=`wc -l $2 | cut -d ' ' -f1`file1=$1file2=$2if [ ${len1} -le ${len2} ]then file1=$2 file2=$1fi#paste ${file1} ${file2} ...
阅读全文
摘要:承如“optimization blocks”文中所述,由于相同的指针可能指向相关的内存区,因此编译器将不做过分的优化……特意搜了下编译器在不同的优化等级下都有哪些默认优化,因此有了此记录(比较长,尽管只讲述了fstrict-aliasing ……)下述内容引述自:http://dbp-consulting.com/tutorials/StrictAliasing.html http://cellperformance.beyond3d.com/articles/2006/06/understanding-strict-aliasing.html http://stackoverflow.co
阅读全文
摘要:p_511编译器在没有指示下,会做‘ safe optimization',因此有些优化在没有参数的指示下是不会对代码做优化的,故在程序中应该避免某一类代码,因为它们妨碍了编译器做优化。optimization blocks: aspects of programs that can severely limit the opportunities for a compiler to generate optimized code;两类optimization blocks:1、memory aliasing pointers may generate the same memory
阅读全文
摘要:桥接模式是一种对象结构型模式,其将抽象部分和它的实现部分分离,使它们都可以独立的变化,又称为柄体(Handle and Body)模式或接口(Interface)模式。优点:1、分离抽象接口及其实现部分。桥接模式使用“对象间的关联关系”解耦了抽象类和实现之间固有的绑定关系,使得抽象和实现可以沿着各自的维度变化(即抽象和实现不再在同一个继承层次中结构中,而是“子类化”它们,使它们各自都具有自己的子类,以便任意组合子类,从而获得多维度组合对象)。2、在很多情况下,桥接模式可以取代多层继承方案。多层继承方案违背了单一职责原则,复用性较差,且类的个数非常多,桥接模式是比多层继承方案更好的解决方法,它极
阅读全文
摘要:结构型模式可以描述两种不同的东西:类与类的实例。结构型模式可以分为类结构型模式和对象结构型模式。类结构型模式关心类的组合,可以由多个类组合成一个更大的系统,在类结构型模式中只存在继承关系和实现关系;对象型结构型模式关心类与对象的组合,通过关联关系在一个类中定义另一个类的实例作为成员对象,再调用所定义的成员对象的方法;根据“合成复用原则”,在系统中尽量使用关联关系来替代继承关系,因此大部分结构型模式都是对象结构型模式。
阅读全文
摘要:对象适配器模式的缺点是:与类适配器模式相比,要在适配器中置换适配着类的某些方法比较麻烦。如果一定要置换掉适配者类的一个或多个方法,可以先做一个适配者类的子类,在子类中将适配者类的方法置换掉,然后再把适配者类的子类当做真正的适配着进行适配,实现过程较为复杂。优点:1、将目标类和适配者类解耦,通过引入一个适配器类来重用现有的适配者类,无须修改原有的结构。2、增加了类的透明性和复用性,将具体的业务实现过程封装在适配者类中,对于客户端类而言是透明的,而且提高了适配者类的复用性,同一个适配者类可以在多个不同的系统中复用。此外,类适配器模式还有如下优点:由于适配器类是适配者类的子类,因此可以在适配器类中置
阅读全文
摘要:p_154//5x/8define MSB_BIT (~(~0U >> 1)) int mul5div8(int val){ int sign = (val & MSB_BIT) == MSB_BIT; //取符号位 int bias = (7 + !sign) & 7; int q = val >> 3; int r = val - (q > 3; //向零取整 q = (q > 31; ...
阅读全文
摘要:问题出自于CSAPP:p_105的Web Aside DATA:TMIN#define INT_MAX 2147483647#define INT_MIN (-INT_MAX - 1)文中提出了“为什么INT_MIN 没有直接宏定义为-2147483648 ?"的疑问,但是没有解答。查了下,发现教材中又有一处错了。关于整型常量的定义: “An integer constant begins with a digit, but has no period or exponent part. It may have a prefix that specifies its base and
阅读全文
摘要:原题:4、When programmers add new elements to an enumeration, they sometimes forget to add new cases to the appropriate switch statements. How could you use assertions to help detect this problem?附录中的答案:...default: ASSERT(FALSE); /*We should never get here*/ break;把这个问题扩展下:看到上题的时候,想到了在u-boot中加入启动命令...
阅读全文
摘要:文中说明memset可以通过操作整形以加速程序执行速度,这一点值得肯定,问题在于unicore或arm中协处理器有地址访问对齐检查,如果我们如此操作,编译器最终使用str指令来完成,那么当地址未对齐时将会出现错误。上次和同学看了下rtems的编译器对于strncpy的实现,由于rtems的编译器本身做了大量优化,当stncpy的拷贝的长度较小时使用了编译器内嵌的实现版本(str完成),而未使用libc库的实现版本(strb),由于使能了地址对齐访问检查,所以程序运行后总是会运行错误。
阅读全文
摘要:貌似这是一个非常愚蠢的问题,因为对于具有良好素质的程序员而言,在C中函数返回类型为结构体类型是不是有点不合格,干嘛不用指针做传入传出呢?测试环境:Linux IOS 3.2.0-45-generic-pae #70-Ubuntu SMP Wed May 29 20:31:05 UTC 2013 i686 i686 i386 GNU/Linux gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3 Copyright (C) 2011 Free Software Foundation, Inc. This is free software; see the sourc
阅读全文
摘要:缺点:1、单例模式没有抽象层,单例模式的扩展较困那(开闭原则)2、单例类的职责过重,既提供了业务方法,又提供了创建对象的方法,将对象的创建和对象本身的功能耦合在一起(违反单一职责原则,但是似乎又无法避免)优点:1、单例模式提供了对唯一实例的受控访问;2、由于在系统内存中只有一个对象,因此可以节约系统资源,提高系统性能3、允许可变数目的实例。使用与控制单例对象相似的方法来获得指定个数的实例对象。
阅读全文
摘要:原型模式的缺点:1、需要为每一个类配备一个克隆方法,而且该克隆方法位于一个类的内部,当对已有的类进行改造时,需要修改源代码,违背了开闭原则(open-closed discipline)2、在实现深克隆时需要编写较为复杂的代码,而且当类之间存在多重继承时,为了实现深克隆,每一层对象对应的类都必须支持深克隆,实现起来比较麻烦。原型模式的优点:1、当创建新的对象实例较为复杂时,使用原型模式可以简化对象的创建过程,通过复制一个已有实例可以提高新实例的创建效率;个人认为,对于该中模式,最好还是使用工厂模式,在抽象产平中嵌入clone接口好一些,刘伟先生的书中,当我用C++实现时,依然选择用工厂模式进行
阅读全文
摘要://此处只是获得了字符串的hash值,但是该如何散列到hash表中呢?哪个算法会好些?! 1 //在处理以字符串为键值的哈希时,times33哈希算法有着极快的计算效率和很好的哈希分布 2 3 //小写英文单词 4 #if 1 5 unsigned int str_hash(const char* key) 6 { 7 unsigned int hashval = 0; 8 while(*key) 9 {10 hash = ((hash << 5) + hash) + (unsigned int)*key++;11 }12 13 ret...
阅读全文
摘要:1 //StringHash.h 2 3 #ifndef __STRINGHASH__ 4 #define __STRINGHASH__ 5 6 #define MAXTABLELEN 1024 //默认哈希索引表大小 7 8 //哈希索引表定义 9 typedef struct _HASHTABLE10 {11 long nHashA; 12 long nHashB; 13 b...
阅读全文
摘要:将一个复杂对象的构建与它的标示分离,使得同样的构建过程可以创建不同的标示.建造者模式是较为复杂的创建型模式,它将客户端与包含多个组成部分(或部件)的复杂对象的创建过程分离,客户端无须知道复杂对象的内部组成部分与装配方式,只需要知道所需的建造者类型即可.建造者模式中的4个角色:1、Builder(抽象建造者):它为创建一个产品Product对象的各个部件指定抽象接口,在该接口中一般声明两类方法:一类方法是buildPartX(),用于创建复杂对象的各个部件,另一类方法是getResult(),用于返回复杂对象;2、ConcreteBuilder(具体建造者):它实现了Builder中的接口,实现
阅读全文
摘要:创建型模式:抽象工厂模式引入概念:1、产品等级结构:当抽象的产品由具体的工厂生产出不同的产品时,这些归属与同一类的抽象产品就构成了产品等级结构;2、产品族:具体的工厂可以生产出来的不同产品就构成了一个产品族。抽象工厂模式中的具体工厂不只是创建一种产品,它将负责创建一族产品;每一个具体工厂都提供了多个工厂方法用于生产多种不同类型的产品,这些产品构成了一个产品族.在抽象工厂模式结构图中包含了4个角色。(1)、AbstractFactory(抽象工厂):它声明了一组用于创建一族产品的方法,每一个方法都对应一种产品;(2)、ConcreteFactory(具体工厂):它实现了在抽象工厂中声明的创建产品
阅读全文
摘要:创建型模式简单工厂模式的缺点是:当我们引入新产品时,由于静态工厂方法通过所传入参数的不同来创建不同的产品,需要修改工厂类的方法,违反了“开闭原则”。工厂模式提供了一个抽象工厂接口来声明抽象工厂方法,而由其子类来具体实现工厂方法,创建具体的产品对象。包含的四个角色:1、Product(抽象产品):它是定义产品的接口,是工厂方法模式所创建对象的超类行,也是产品对象的公共父类;2、ConcreteProduct(具体产品):它实现了抽象产品接口,某种类型的具体产品由专门的具体工厂创建,具体工厂和具体产品之间一一对应;3、Factory(抽象工厂):在抽象工厂类中,声明了工厂方法(Factory Me
阅读全文
摘要:find ./ -name '*abc*' -exec grep 'abc' {} -H \;find ./ -name '*abc*' | xargs -I '{}' grep abc {} -H我面试的时候用了第二种方法, 面试官应该是想我用第一种,可是-exec参数自己不常用。关于在同Z先生交流时关于发生异常时处理器所处的模式,查询后,发生数据访问中止与指令预取中止时处理器并非处于svc模式,只是我们在程序处理过程中,最终都将其转换到svc模式下处理。
阅读全文
摘要:1 int maxSum(int *array, int n) 2 { 3 int rvsum = array[0]; 4 int newsum = 0; 5 6 int i = 0; 7 for(i = 0; i = 0)10 newsum += array[i];11 else 12 newsum = array[i];13 14 if(rvsum maxinum)18 maxinum = sum;19 20 s...
阅读全文