一、项目管理概述
项目:临时性、独特性、渐进明细(滚动式);产品、服务或成果
战略 > 项目组合 > 项目集 > 项目 > 可交付成果 > 控制账户 > 规划包 =
工作包 > 活动
项目集:内在联系、长期持续、含项目外工作、产生共同结果/整体能力
项目组合:资源分配的优先级、将资源效益最大化、为战略目标,不一定有关
项目管理办公室:常设部门、项目集变更、项目间依赖、方法论、整体风险
项目经理:个人素质最重要,包括态度、人格特征、领导力
PM应具备的能力:人际能力(含沟通)、概括和组织(整合)、最后才是技术
PM最重要的能力:与他人合作的能力
职能经理:行政领域(人力资源、财务、会计或采购等)
运营经理:核心业务(研发、设计、制造、供应、测试或维护;会计业务)
环境:不能主动利用、但会影响我们,好的坏的都有,会限制灵活性,如:
组织文化与结构、人力资源库/制度、工作授权系统、PM信息系统、行业标准、
沟通渠
4.1 制定章程
入:工作说明;合同;商业论证
技:专家判断
出:项目章程
4.2 制定管理计划
入:
《C++ Primer 第四版》笔记与勘误1
---------------------------------
以下笔记按在书中出现的先后顺序来记载:
P6 cout<<std:endl;
是刷新输出流缓冲区的方法之一。及时刷新缓冲区,能避免调试程序时如果程序崩溃我们对出错位置的错误判断。
P7
一般出现空格符的地方都可以用换行符替代,只有两个例外:一是预处理指示中,二是字符串文字量中。
P23
默认情况下,读cin或程序结束时,都会刷新cout。cerr不带缓冲,clog则带。
P23
表达式是最小的计算单元,通常含有一个或多个操作数,并通常含有一个操作符。
P30
C++标准规定了每个算术类型的最小存储空间,但是不阻止编译器使用更大的存储空间。对于int,几个每个编译器都使用比标准规定的存储空间大的空间。
P30 C++算术类型共9种,其中整型6种,浮点型3种
《Accelerated
C++》笔记
---------------------------------
以下笔记按在书中出现的先后顺序来记载:
P9
对象和变量的区别:变量是一个具有名称的对象,对象则是计算机中一段
具有类型的内存空间。有些对象可能没有名称。
P31
计数从0开始比较好,也就是使用不对成区间会比较好,因为以下的性质:
[m,n)区间包含有n-m个元素,而[m,n]区间则包含有n-m+1个元素。即:
for(int r=0;r!=rows) 比 for(int r=1;r<=rows) 要好。
P38
对于cin输入流来说,文件结束标志是ctrl+z。
P62
一条输出语句中的副作用个数不应超过一个。比如,抛出一个异常是一个副作用,
输出语句是一个副作用,那么,这两行语句就应该分开来写。
P75 #include <系统头文件>
中的系统
评《记忆碎片》的优缺点,加剧情重点分析和揭秘
---------------------------------
最近观看了一部2000年出产的电影《记忆碎片》(Memento),IMDB排名第24,算是近几年电影中相当靠前的了。
影片优点:很好的锻炼逻辑思维能力的悬疑电影,少有的值得看两遍和中英字幕一起看的电影,彩色和黑白两条主线交错叙述相当有趣。
影片缺点:为了降低观看的门槛,整体剧情稍显冗长,可信度降低(比如泰迪(Teddy)有很多机会可以拿走20万,没必要一再接触主角;即使接触了也必要说那么多不相干的话,那些对白中,其实有很多是为了安排和引出主角说出影片的一些中心思想;比如泰迪中途请主角吃午餐过程中,他和主角的一些交谈)。
不过,如果前面太简练了则可能
用rand()和srand()产生伪随机数的方法总结
---------------------------------
标准库<cstdlib>(被包含于<iostream>中)提供两个帮助生成伪随机数的函数:
函数一:int rand(void);
从srand (seed)中指定的seed开始,返回一个[seed, RAND_MAX(0x7fff))间的随机整数。
函数二:void srand(unsigned seed);
参数seed是rand()的种子,用来初始化rand()的起始值。
可以认为rand()在每次被调用的时候,它会查看:
1) 如果用户在此之前调用过srand(seed),给seed指定了一个值,那么它会自动调用
srand(seed)一次来初始化它的起始值。
2) 如果用户在此之前没有调用过srand(seed),它会自动调用srand(1)一次。
根据上面的第一点我们可以得出:
1)
如果希望rand()在每次程序运行时产生的值都不一样,必须给srand(seed)中的seed一个变值,这个变值必须在每次程序运行时都不一样(比如到目前为止流逝的时间)。
2) 否则,如果给seed指定的是一个定值,那么每次程序运行时rand()产
《程序设计实践》笔记
---------------------------------
以下笔记按在书中出现的先后顺序来记载:
第一章 风格
1.1 名字
1. 名字应该能说明其作用而不是表象,比如 #define TWENTY 20
改为 #define BUFSIZE 20 会比较好。
2. 全局变量用具说明性的文字,局部变量用短名字。变量的作用域越大,名字所该携带信息就越多,比如分别用n, num,
numOfStudent。
3. 同一个东西应该有相同的名字,比如不要用Q, Queue和queue代表同个东西。
4. 函数采用动作性的名字,比如getTime()。
5. 布尔型返回值的函数用“是”命名,比如CheckLetter ()改为IsLetter()(是字母时返回true)。
6. 名字要准确,比如isOctal()不要实际返回十六进制。
1.2 表达式和语句
7. 用缩行显示程序的结构。
8. 用肯定而不是否定的表达式,如(id>=locked)比(!id<locked)要好。
9. 用加括号排除二义性。
10. 分解复杂的表达式。
11. 有时简短不一定是最好的,关于是清晰和易于理解,为了这个有时可以把代
const常量、指向常量的指针和常量指针
---------------------------------
1)先看const常量的情况:
const int a=2;
int const b=c; // c是已经声明过的整型
两者都可以。本地的const常量必须在第一次声明时就初始化,用变量或常量初始化都可以,只是初始化一次以后它的值就不能再改变了,此所谓const的含义。
2)接着看指向常量的指针:
const int *pa;
int const *pa;
两者也等价。因为指向常量的指针有时候会指向常量,所以它具有这个性质:“不能靠解引用改变它指向的对象的值”,以此保护它所指向的常量的常量性:
*pa =d; // 不可行(d是已经声明过的整型)
但指针本身的值是可变的:
pa=& d; // 可行(d是已经声明过的整型)
而且指向常量的指针有时候也会指向变量,如下:
int t,u;
const int *pa;
pa =&t; //可行,指向变量t
pa =&u; //也可行,指向变量u
我们可以把它理解成:“为了指向常量而发明的指针”,这样比较贴切。
typedef的四个用途和两个陷阱
---------------------------------
用途一:
定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:
char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针,
// 和一个字符变量;
以下则可行:
typedef char* PCHAR; // 一般用大写
PCHAR pa, pb; // 可行,同时声明了两个指向字符变量的指针
虽然:
char *pa, *pb;
也可行,但相对来说没有用typedef的形式直观,尤其在需要大量指针的地方,typedef的方式更省事。
用途二:
用在旧的C的代码中(具体多旧没有查),帮助struct。以前的代码中,声明struct新对象时,必须要带上struct,即形式为:
struct 结构名 对象名,如:
struct tagPOINT1
{
int x;
int y;
};
struct tagPOINT1 p1;
而在C++中,则可以直接写:结构名 对象名,即:
tagPOINT1 p1;
估计某人觉得经常多写一
《Essential C++》笔记
---------------------------------
以下笔记按在书中出现的先后顺序来记载:
第一章 编程基础
1.1 写程序
1. 程序执行成功时main()返回0。(以下为个人所加)之所以是0不是1,是因为1、2、3等不同自然数值可以代表不同的错误类型,而0则只有一个(成功只有一种,失败的方式可以有很多),因此用返回0而不是返回1表示成功,应该是合适的。
2. “不可打印字符常量”指无法使用单一而可显示的字符来独立表示的字符,比较常用的有: \n 换行,\t 右跳一个制表符,
\’ 单引号 \“ 双引号 \\ 反斜线。
1.2 对象定义
3. 初始化语法有两种,一种是声明并赋值,如:int
a=0;另一种是构造函数初始化。前者是沿袭C语言而来的,只适合对单一值进行初始化;而后者则适合对需要多个初始值的对象进行初始化,如标准库中定义的复数类:complex<Type>
a(0,7)。
4.&n