Read
文章平均质量分 89
罗伊yc
Notebook
展开
-
计算机科学箴言集 -- <编程珠玑续>
6 计算机科学箴言集程序员常常要转换时间单位; e.g. 一个程序每秒能处理100条记录, 那处理100w条需要多久? 用除法算, 就知道要花100000秒, 按每小时3600秒算, 差不多3小时;而一年有多少秒? 如果我直接告诉你 3.155x10^7秒, 你可能很快就忘了; 事实上, 要记住这个很简单, 在误差不超过0.5%的约束下: π秒就是一个纳世纪原创 2015-06-18 12:29:44 · 1020 阅读 · 0 评论 -
Shell编程基础 part 1/2
SHELL编程基础shell脚本, 必须在开始的第一行输入:1#!/bin/bash>#! 会告诉系统执行该脚本的程序, 例如bash;Note 最好使用"!/bin/bash"而不是"!/bin/sh", 如果使用tc shell改为tcsh,其他类似.保存文件后, 想要执行脚原创 2013-10-28 11:47:10 · 1041 阅读 · 0 评论 -
Effective C++ 第二版 27)函数隐式生成 28)名字空间
条款27 如果不想使用隐式生成的函数就要显式地禁止假设想写一个类模板Array, 它生成的类除了可以进行上下限检查外, 其他行为和C++标准数组一样; 设计中面临的一个问题是怎么禁止Array对象之间的赋值操作;Note 对标准C++数组来说赋值是非法的;123double values1[10];double原创 2013-10-22 11:15:09 · 905 阅读 · 0 评论 -
Effective C++ 第二版 25)避免指针和数字重载 26)二义性
条款25 避免对指针和数字类型重载什么是零?123void f(int x);void f(string *ps);f(0); // 调用f(int)还是f(string*)?>0是一个int, 一个字面上的整数常量, 所以被f(int)调用;Problem:原创 2013-10-21 13:24:48 · 1486 阅读 · 0 评论 -
Effective C++ 第二版 29)内部句柄 30)成员函数返回非const指针或引用
类和函数: 实现C++是高度类型化的语言, 给出合适的类和模板的定义以及合适的函数声明是整个设计中最大的一部分; 这部分做好, 类, 模板以及函数的实现就不容易出问题;人们常常犯错的原因是不小心违反了抽象的原则: 让实现细节可以提起类和函数内部的数据; 不清楚对象生命周期; 不合理的前期优化, 滥用inline; 有些实现策略会导致源文件间的相互联结问题, 小规模范围内合适, 但在原创 2013-10-25 13:54:53 · 1225 阅读 · 0 评论 -
Effective C++ 第二版 22)传引用 23)返回对象 24)函数重载vs缺省值
条款22 尽量用传引用而不用传值C语言通过传值实现, C++继承传统把它作为默认方式, 除非明确指定, 函数的形参总会通过"实参的拷贝"来初始化, 函数的调用者得到的也是函数返回值的拷贝;"通过值传递对象"的含义是由对象的拷贝构造函数定义的, 这使得传值操作变得很费事:12345678原创 2013-10-17 07:50:52 · 1134 阅读 · 0 评论 -
Effective C++ 第二版 20)避免接口数据 21)使用const
条款20 避免public接口出现数据成员一致性, 所有public接口里都是函数;安全性, 可以控制数据成员的访问权限;123456789101112class AccessLevels {public:原创 2013-10-15 13:50:59 · 879 阅读 · 0 评论 -
Effective C++ 第二版 17)operator=检查自己 18)接口完整 19)成员和友元函数
条款17 在operator=中检查给自己赋值的情况123class X { ... };X a;a = a; // a 赋值给自己>赋值给自己make no sense, 但却是合法的;重要的是, 赋值给自己的情况可以以隐蔽的形式出现: a = b; 如原创 2013-10-14 11:12:55 · 1149 阅读 · 0 评论 -
硝烟中的Scrum和XP-我们如何实施Scrum 14)测试 15)多团队 Part 1/2
14 怎样做测试这是最困难的部分; 在不同组织的各种开发活动中, 测试可能是差异最大的; 它依赖于你有多少个测试人员, 系统类型(服务器+web应用 vs 交付完整的软件), 发布周期的长短, 软件的重要性(博客服务器 vs 飞行控制系统)等等;验收测试阶段在理想化的Scrum世界中, 每个sprint最终会产生一个可部署的系统版本; 但一般都无法达到, bug原创 2013-10-10 10:41:27 · 1205 阅读 · 0 评论 -
Effective C++ 第二版 11) 拷贝和赋值 12) 使用初始化
条款11: 为需要动态分配内存的类声明一个拷贝构造函数和一个赋值操作符12345678910111213141516171819class String {public: String(原创 2013-09-29 11:32:35 · 940 阅读 · 0 评论 -
硝烟中的Scrum和XP-我们如何实施Scrum 15)多团队 Part 2/2 16)地理分散 17)检查列表 18)其他
引入"团队领导"角色假设有3个团队开发同一个产品红色的P是PO, 黑色的S是SM, 蓝色是其他团队成员;如何决定哪些人属于哪个团队? 怎么分配成员? 有人觉得让PO来做人员分配, 但这不是PO职责内的事情; PO是领域专家, 可以指导团队的前进方向, 但不应该牵扯到这类细节; 尤其当PO是chicken的时候; [Pigs and Chickens http://e原创 2013-10-11 14:02:23 · 1780 阅读 · 0 评论 -
硝烟中的Scrum和XP-我们如何实施Scrum 12)发布计划 13)组合XP
12 怎样制定发布计划, 处理固定价格的合同一次只计划一个sprint的事情会显得提前量不足, 提前做计划是个好习惯;尤其是签了固定价格的合同之后, 不得不预先计划好, 防止无法按期交付的危险情况;在制定release plan的时候尝试回答:"最晚到什么时候可以交付新系统的1.0版本?"定义验收标准除了产品backlog外, PO会定义一系列的验收标准原创 2013-10-09 19:08:03 · 1035 阅读 · 0 评论 -
硝烟中的Scrum和XP-我们如何实施Scrum 9)演示 10)回顾 11)休整
9 怎样进行sprint演示Sprint演示[DEMO]或者叫sprint回顾[REVIEW]是Scrum中重要的环节, 却很容易被低估;为什么坚持所有的sprint结束于演示一次不错的演示带来的影响:- 团队的成果得到认可, 成员们会感觉很好[正能量...];- 其他人了解到你的团队在做什么; [透明度]- 演示可以吸引相关的人的注意, 并原创 2013-10-08 12:38:03 · 960 阅读 · 0 评论 -
Effective C++ 第二版 10) 写operator delete
条款10 写了operator new就要同时写operator delete写operator new和operator delete是为了提高效率;default的operator new和operator delete具有通用性, 也可以在特定情况下被重写以改善性能; 特别在需要动态分配大量的很小的对象的应用程序中;1234原创 2013-09-16 11:40:03 · 1225 阅读 · 0 评论 -
Head First 软件开发(Software Development) 4-6.5 US, Design, Version, AutomaticallyBuild
Section 4 User Story & TaskTask Estimates 实际工作比US更细致US是给客户看的, 描述软件需求. 每个US收集了一些特定任务, 每个任务是能组合成US的小功能代码>Task Title +Rough Description+ Estimation(Planning Poker)在估计过程开始时, 把US分解为Task有助于计原创 2012-06-26 16:52:07 · 970 阅读 · 0 评论 -
Shell编程基础 part 2/2
6 命令行参数特殊变量$*, $1, $2, ...$9包含了用户从命令行输入的参数; 简单的命令行语法(强制性参数和查看帮助的-h选项); 在编写复杂程序时, 可能需要更多的自定义选项; 通常的惯例是在所有可选的参数之前添上一个减号 - , 后面跟参数值(文件名);e.g. 实现对输入参数的分析: case12345原创 2013-10-29 14:19:10 · 802 阅读 · 0 评论 -
简明Python教程 5)表达式 6)控制流 7)函数
第5章 运算符与表达式简介表达式可以分解为运算符和操作数: 2+3 ; 运算符是完成某件事, 由符号或者特定的关键字表示; 运算符需要数据来进行计算, 数据被称为操作数;运算符可以使用交互式的带提示符的python解释器: 1234>>> 2 + 35>>> 3原创 2013-11-15 14:18:41 · 1425 阅读 · 0 评论 -
Exceptional C++ Style 15)访问权限的使用
第15条 访问权限的使用谁能真正访问类的内部? 关于"伪造者", "骗子"和"偷窃者"以及如何分辨和避开它们;1. 什么样的代码可以访问类的如下区段?a) public公用成员可以被任何代码访问;b) protected保护成员可以被类自身的成员函数访问, 也可以被类的友元访问, 可以被派生类的成员函数与友元访问;c) private原创 2014-02-11 10:49:29 · 1098 阅读 · 0 评论 -
Effective C++ 第二版 48)编译器警告 49)标准库 50)总结
条款48 重视编译器警告不注意编译器警告的后果可能很严重; 12345678class B {public: virtual void f() const;};class D: public B {public: virtu原创 2013-12-25 10:35:53 · 1088 阅读 · 0 评论 -
Effective C++ 第二版 45)幕后行为 46)编译链接和运行时错误 47)非局部静态对象初始化
杂项要写出高效的软件, 必须知道编译器在背后做了些什么, 怎样保证非局部的静态对象在被使用前已经被初始化, 标准库的信息, 如何深入理解语言底层的设计思想;条款45 弄清C++在幕后为你所写, 所调用的函数一个空类什么时候不是空类? C++编译器会自动声明下列函数:一个拷贝构造函数, 一个赋值运算符, 一个析构函数, 一对取址运算符; 如果你没有声明任何构造函数, 它也原创 2013-12-18 11:38:39 · 1633 阅读 · 0 评论 -
Effective C++ 第二版 43)多继承 44)总结
条款43 明智地使用多继承多继承MI; 支持者说它是对真实世界问题进行自然模型化必须的; 批评者说, 它太慢, 难以实现, 功能却不比但继承强大;面向对象编程语言领域在这个问题上一直存在分歧: C++, Eiffel, the Common LISP Object System(CLOS)提供了MI; Smalltalk, Objective C和Object Pascal没有提供; Ja原创 2013-12-16 10:54:34 · 1418 阅读 · 0 评论 -
Effective C++ 第二版 37)不要重定义非虚函数 38)不要重定义缺省参数值 39)避免向下转换
条款37 决不要重新定义继承而来的非虚函数实践依据假设类D公有继承于类B, B中定义了公有成员函数mf; mf的参数和返回类型假设为void;12345678class B {public: void mf();...};class原创 2013-12-06 14:30:43 · 1241 阅读 · 0 评论 -
Effective C++ 第二版 40)分层 41)继承和模板 42)私有继承
条款40 通过分层来体现"有一个"或"用...来实现"使某个类的对象成为另一个类的数据成员, 实现将一个类构筑在另一个类之上, 这个过程称为 分层Layering; e.g.1234567891011class Address { ... }; // 某人居住原创 2013-12-12 10:44:22 · 991 阅读 · 0 评论 -
简明Python教程 14)标准库 15)更多内容 16)GUI
第14章 Python标准库Python标准库是随py附带安装的, 熟悉py库能帮助你快速解决问题;在安装的py文档中Library Reference' section, 可以找到标准库的所有模块的完整细节; sys模块sys模块包含系统特定的功能, sys.argv列表包含命令行参数;12345原创 2013-11-28 13:37:11 · 1395 阅读 · 0 评论 -
简明Python教程 12)输入输出 13)异常
第12章 输入/输出很多时候, 会想让程序和用户交互, 从用户那得到输入, 打印结果; 使用input()和print()函数; 对于输出可以使用str(字符串)类的方法; 例如, 使用rjust()来获取一个指定宽度的字符串;另一个常见的输入/输出类型是处理文件, 创建, 读和写文件是很多程序必需的功能;用户输入1234原创 2013-11-27 11:54:28 · 1603 阅读 · 0 评论 -
简明Python教程 1)介绍 2)安装 3)开始 4)
前言有两种方式构建软件设计: 一种是把软件做的很简单以至于明显找不到缺陷; 另一种是把它做的很复杂以至于找不到明显的缺陷. --C.A.R. Hoare获得人生中成功需要的专注与坚持不懈多过天才与机会. --C.W. Wendte第1章 介绍简介Python是简单又功能强大的编程语言, 注重的是如何解决问题而不是编程语言的语法和结构;原创 2013-11-11 10:57:43 · 1783 阅读 · 0 评论 -
简明Python教程 10)编写 11)OO
第10章 解决问题--编写一个python脚本结合所有内容编写一个脚本:问题 要一个可以为所有重要文件创建备份的程序;分析 哪些文件? 保存在哪? 怎样存储?设计1) 需要备份的文件和目录由一个列表指定;2) 备份保存在主备份目录中;3) 文件备份成zip文件;4) zip存档的名称是当前的日期和时间;5) 使用标原创 2013-11-21 10:56:06 · 1649 阅读 · 0 评论 -
简明Python教程 8)模块 9)数据结构
第8章 模块简介使用模块, 在其他程序中可以重用多个函数; 模块基本上就是一个包含了所定义的函数和变量的文件; Note 模块的文件名必须以 .py 为扩展名;编写模块的另一种方式是使用编写python解释器本身的机器语言; e.g. C语言: http://docs.python.org/py3k/extending/index.html, 使用标原创 2013-11-19 12:54:00 · 1577 阅读 · 0 评论 -
Effective C++ 第二版 35)公有继承 36)接口继承和实现继承
继承和面向对象设计设计和实现类的层次结构与C语言有根本不同; C++提供了多种面向对象构造部件: 公有, 保护, 私有基类; 虚拟和非虚拟基类; 虚拟和非虚拟成员函数; 这些部件互相联系, 而且和C++其他部分互相作用;C++中很多不同部件好像在做相同的事: e.g. 设计一组具有共同特性的类, 是该使用继承使所有类都派生于一个共同基类, 还是使用模板使得它们都从共原创 2013-11-06 10:05:22 · 1000 阅读 · 0 评论 -
Effective C++ 第二版 33)内联 34)将编译依赖降至最低
条款33 明智地使用内联内联函数: 看起来像函数, 运作起来像函数, 比宏macro要好(条款1), 使用时还不需要承担函数调用的开销;避免函数调用的开销仅仅是一方面; 为了处理那些没有函数调用的代码, 编译器优化程序本身进行了专门的设计; 当内联一个函数时, 编译器可以对函数体执行特定环境下的优化工作; 程序世界和现实生活一样, 没有免费午餐, 内联函数也不例外; 内原创 2013-11-04 13:46:00 · 1489 阅读 · 0 评论 -
Effective C++ 第二版 31)局部对象引用和函数内new的指针 32)推迟变量定义
条款31 千万不要返回局部对象的引用, 不要返回函数内部用new初始化的指针的引用第一种情况: 返回局部对象的引用; 局部对象--仅仅是局部的, 在定义时创建, 在离开生命空间时被销毁; 所谓生命空间, 指它们所在的函数体; 当函数返回时, 程序的控制离开这个空间, 函数内部所有的局部对象被自动销毁; 因此, 如果返回局部对象的引用, 那个局部对象其实已经在函数调用者使用它之前原创 2013-11-01 17:10:37 · 1362 阅读 · 0 评论 -
Head First 设计模式 Design Pattern 3-4 Decorator, Factory
Section 3 装饰者模式 Decorator 开放-关闭原则, 只在必须的地方使用开放-关闭原则, 否则增加复杂度, 代码阅读性变差设计原则 类应该对扩展开放, 对修改关闭>装饰者和被装饰者对象有相同的超类型 >可以用一个或者多个装饰者包装一个对象 >可以用被装饰过的对象代替原始对象>装饰者可以在所委托被装饰者的行为之前/后加上自己的行为 >运行时原创 2012-08-09 12:51:37 · 1132 阅读 · 0 评论 -
Head First 软件开发(Software Development) 7-9 CI, TDD, Iteration
Section 7 Test & Continuous Integration三个方面检查系统 >用户从外部看系统 Black Box 检查功能 >测试深入探究Grey Box 检查数据, 硬件, 软件 >开发系统研究 White Box 检查设计, 代码, 细节 BlackBox 重点是输入和输出 -功能性 workflow -用户输入验证 输入过滤筛选 -输出结果 错误验证 -原创 2012-07-15 14:17:15 · 1560 阅读 · 0 评论 -
Java+7入门经典 -2 数据
第2章 程序,数据,变量和计算2.1 数据和变量变量是一段有名字的内存, 存储程序中的信息, 描述事物的数据项;每段定义了名字的内存只能存储一种特定类型的数据. Type; 编译器会检测错误的类型使用;程序中出现的显式数据值叫做字面量, 有特定类型;2.1.1 变量的命名标识符-选择的名称; 可以是任意长度, 必须以字母, 下划线或美元符原创 2013-08-09 11:28:06 · 1450 阅读 · 0 评论 -
Java+7入门经典 -1 简介
第一章 Java简介1.1 Java概览applet程序可嵌入网页; Java会通过隐式检测禁止Java applet的恶意代码;Java Server Pages-JSP 创建服务器应用程序, 动态创建针对收到的特殊请求定制HTML页面并下载到客户端.一次编写, 任意运行; 提供了GUI, XML, database和network communication等应原创 2013-08-08 11:09:41 · 1312 阅读 · 0 评论 -
Effective C++ 第二版 7) 内存不够的情况
条款7 预先准备好内存不够的情况operator new在无法完成内存分配请求时会抛出异常(老的编译器返回0); C常用的做法, 定义一个类型无关的宏来分配内存并检查是否成功;123#define NEW(PTR, TYPE) \try { (PTR) = new TYPE; } \原创 2013-08-07 10:28:11 · 929 阅读 · 0 评论 -
Effective C++ 第二版 5)new和delete形式 6) 析构函数里的delete
内存管理1)正确得到: 正确调用内存分配和释放程序;2)有效使用: 写特定版本的内存分配和释放程序;C中用mallco分配的内存没有用free返回, 就会产生内存泄漏, C++中则是new和delete;new和delete是隐式地调用构造和析构函数的, 而且可以在类内和类外自定义new和delete操作符, 这样带来了复杂性; 条款5原创 2013-07-29 19:08:55 · 1075 阅读 · 0 评论 -
Effective C++ 第二版 1)const和inline 2)iostream
从C转向C++C提供了宏, 指针, 结构, 数组, 函数;C++还有私有和保护型成员, 函数重载, 缺省参数, 构造和析构, 自定义操作符, 内联函数, 引用, 友元, 模板, 异常, 名字空间等;C++具有更多的选择;原创 2013-07-17 06:17:39 · 1266 阅读 · 0 评论 -
函数模板 Function Template(C++Primer-10)
10 函数模板10.1 函数模板定义template A Func(const B(&rArray)[size]) { return A();}>关键字template后面是用逗号分隔的模板参数表template parameter list, 用模板参数可以为模板类型参数template type parameter,代表一种类型; 也可以是模板非类型参数template原创 2013-05-04 13:46:04 · 2071 阅读 · 5 评论 -
异常处理 Exception(C++Primer-11)
11 异常处理>异常处理是一种允许两个独立开发的程序组件在程序执行期间遇到程序不正常的情况时, 相互通信的机制.11.1 抛出异常>异常Exception是程序可能检测到的, 运行时刻不正常的情况. Ex. 被0整除, 数组越界访问, 空闲存储内存耗尽等;>throw表达式后面跟的不能只是一个类型, Ex. class NoData {}; --> throw NoData; //原创 2013-04-04 11:37:55 · 1301 阅读 · 0 评论