摘要:
记下这一题是因为更加认识到打破“惯性思维”解决问题的必要性和重要性。引以为戒,以后解决问题时,要多换个角度思考。摘自coolshell下面是一个C程序,其想要输出20个减号,不过,粗心的程序员把代码写错了,你需要把下面的代码修改正确,不过,你只能增加或是修改其中的一个字符,请你给出三种答案。 12345int n = 20;for(int i = 0; i < n; i--){printf("-");}下面是正确答案—— 12345678//第一种解法:在for循环中给 i 加一个负号for(int i = 0; -i < n; i--)//第二种解法:在for 阅读全文
摘要:
比如下面的例子:projectStatusBar -->(refer to)projectApplication,因为它需要取到application level的一些数据(似乎不大合理,不应该这样依赖);现在需要给application对象增加一个新的成员变量mStatusBar,这就造成了新的dependency关系:projectApplication--> projectStatusBar。这就出现了circular dependency。解决方法非常普通并且普遍 : 1. (假设并且一定已经)有一个interface project,它的任务就是包含一堆interface 阅读全文
摘要:
几点:1. 在问题规模大的时候,一定要检查选择的数据类型是否够用,会不会overflow。这里的case就是一个很好的例子。我的算法几分钟就写好了,也蛮正确的,除了对于start num i及chain中的number n的数据类型选择了int,这就导致在n被3n+1反复搞大后,超出了int的范围,变成了负数,也就进入了导致算不出结果来的死循环里(因为永远也算不到1了)。所以,切记:问题规模大的时候,一定仔细考虑清楚数据类型的选择。2. unsigned int的数据参与大规模运算要比long long快3倍以上。这里指的是仅仅替换i和n的数据类型。3. 在看到更多规律的基础上,我加了个map 阅读全文
摘要:
最近看CER,终于实际用到了windbg(汗。。)结合我有限的使用,总结下面几点:1. 从MS的这里下。windbg是属于debugging tools的,又被包含在了windows SDK installer里面。2. 对于看CER来说,主要就是根据dump文件看到callstack,进而分析出重现步骤或找到fix的方法。三方面:load dump文件;设置symbol,image的path。然后执行.loadby sos + !analyze -v就好了。3. 需要任何帮助,输入.hh。 阅读全文
摘要:
VS online gallery is a place where there are plenty of VS extension tools. For me, I don't have time and interests to make full use of it BUT do have make use of one of its greatest tool set: Productivity Power Tools. More info about what it provides, go visit that link.. 阅读全文
摘要:
这一题的思路还是比较清晰的:首先,由于每个数都是50位,还要计算100个这样的数的和,unsigned long long 都表示不了这么大的数,硬上肯定是不行滴;那么,考虑到只需要打印出和值的头10位,才有了用多维数组求解的方法:1. 首先把这100个数字保存到text文件中:这样比较好读取。2. 把这个文件中的所有数字解析到arr[100][50]中。3. 从最后一列开始计算一列的和,个位数(%10)进栈,剩下的(/10)作为下一列求和的进位数(基数)。每一列都这么算,直到j=0最后一列:需要把sumColumn逐位分解进栈。4. 好,现在stack中从上到下存的就是100个数的和了。po 阅读全文
摘要:
1. 概念:程序员眼中的内存是按byte存储的;而cpu眼中的内存是以chunk为单位的,chunk可以是2,4,8bytes。如果放在内存中的数据没有被对齐即其内存地址不是对应cpu内存访问粒度的整数倍,读取这段数据cpu就需要更多次的内存访问,相比较对齐的内存数据而言。内存对齐后,占据的内存必然是增多的。2. 最明显的获知有内存对齐这回事的例子是sizeof(struct a)。由于我们可以通过编译选项#pragma pack(n)来控制数据的内存存放的对齐粒度(1,2,4,8),从而可以很容易测试得到在不同的对齐粒度下,同一个struct变量占据的内存大小的变化。3. 编译器根据内存对齐 阅读全文
摘要:
一个算法的复杂度通常由其时间复杂度和空间复杂度来表达。这里,主要复习下时间复杂度的概念及计算。概念:时间复杂度即一个算法所需运算的次数随问题规模n变化的函数。常见时间复杂度及对应复杂度关系:c < log2N < n < n * Log2N < n^2 < n^3 < 2^n < 3^n < n!计算方法: 根本上有二:计算一个语句的频度(执行次数)和时间复杂度。1)快速求解方法:看循环层数及对应循环次数。 2)最本质的求解方法:计算出算法中所有语句的执行次数的和,其就是一个以n为变量的函数f(n)(一般情况下,算法的基本操作重复执行的次数是模块 阅读全文
摘要:
参考:float和double类型的内存分布和比较方法收藏 Comparing floating point numbers总结几点:0. float占4byte,精度是6~7位;double占8byte,精度是15~16位。 1. C/C++的浮点数据类型有float和double两种。它们在内存中是以科学计数法的结果来存储的。 类型float大小为4字节,即32位,内存中的存储方式如下: 符号位(1 bit) 指数(8 bit) 尾数(23 bit) 类型double大小为8字节,即64位,内存布局如下: 符号位(1 bit) 指数(11 bit) 尾数(52 bit) 符号位决定浮点数的 阅读全文
摘要:
Yes, you can build x86 + x64 version of your VS solution in parallel.Steps:1. open your solution to build as debug + x86. No writing to any files, just building.2. open your solution to build as debug + x64. VS now will prompt you to choose another place to store the temp intellisense database (sdf 阅读全文