- 博客(71)
- 收藏
- 关注
转载 8产权界定_保护与限制
一 产权的兴起1. 人类社会需要产权安排 首先要介绍的是产权兴起的过程。产权的兴起有两个动力,一个是外部性。一个是人口的集聚。 产权不是天然就存在于我们的社会中的,它经历了漫长的发展过程。 由于产权的明确、产权的行使和保护都需要耗费成本,如果必要性不大,就不需要进行各种产权安排。如果我们要分一个馒头,掰一下就可以了。但如果我们要分的是金条,就需要用上天平和各种测量的仪器。只...
2019-07-21 11:13:00
549
转载 7权利_资源的占有
一 权利有别于能力1. 迂回竞争带来了巨大的财富 设想我们是一群外星人,远远的靠近地球,想要探究人类和动物的区别,解释人类为什么会走向繁荣富足,我们就不难发现这样一个现象:在动物世界,狮子非常勇猛,也很有能耐,他们展开的都是直接的竞争:要什么就抢什么,单刀直入,好不含糊。但狮子却非常贫穷,身无旁物,孑然一身。 而在人类社会,人们几乎从不直接真抢,他们搬砖运沙,铺路搭桥,看书学习...
2019-07-07 11:57:00
332
转载 17伪代码1
1. 创建一个类的过程1.1 创建类的总体设计 设计一个类的过程包含一些特有的设计任务——定义类的特定职责,定义类所有隐藏的“秘密”,以及精确地定义了类的接口所代表的抽象概念;决定这个类是否要从其他类派生而来,以及是否允许其他类再从它派生;指出这个类中关键的公用方法,标识并设计出类所需用到的重要数据成员。上述这些设计任务可能需要反复迭代多次,直到直接了当地设计出了程序为止。1.2...
2019-06-14 13:43:00
223
转载 15防御式编程1
一. 防御式编程概述 防御式编程,这一概念来自防御式驾驶。在防御式驾驶中要建立这样一种思维,那就是你永远也不能确定另一位司机将要做什么。这样才能确保在其他人做出危险动作时你也不会受到伤害。你要承担起保护自己的责任,那怕是其他司机犯的错误。 防御式编程的主要思想是:子程序应该不因传入错误数据而被破坏。哪怕是由其他子程序产生的错误数据。更一般的说,其核心想法是要承认程序都会有问题,都...
2019-06-14 13:42:00
279
转载 16防御式编程2
一 辅助调试的代码1. 不要自动地把产品版本的限制强加于开发版之上 程序员们常常有这样一个误区,即认为产品级软件的种种限制也适用于开发中的软件。产品级的软件要求能够快速的运行,而开发中的软件则允许运行缓慢。产品级的软件要节约适用资源,而开发中的软件在使用资源时可以比较奢侈。产品级的软件不应向用户暴露可能引起危险的操作,而开发中的软件则可以提供一些额外的、没有安全网的操作。 我曾...
2019-06-14 13:42:00
126
转载 6价格_竞争的维度
一 房价上升好不好1. 房价涨跌,分清正负面因素 关于房价有两种截然对应的观点,一种观点认为一定要把房价压下来。一次在出租车上,司机聊起北京的房价。他说政府是无所不能的,只要愿意把房价压下来,就一定能把房价压下来。对于这一点,政府确实做了不少努力,各大城市从几年前开始,就实施了很多限购政策。比如北京从2011年开始就有了房地产调控的细则,有北京户籍的家庭不允许购买第三套住房,没有北...
2019-06-09 17:50:00
157
转载 5价格_价格管制
一 最省事的违反价格管制1. 张五常最重要的论文 每当价格受到人为干预,就会出现价格以外的竞争,我们把这种现象称为短缺或过剩。但短缺和过剩究竟会引发那些类型的竞争呢? 华人经济学家张五常在《一种价格管制理论》中回答了这个问题。他首先就是了什么叫价格管制。价格管制和税收不一样。如果一间公寓的租金市价是100元,政府从中要征收40元的税,政府就变成了二房东,也就是说房租的60%归房...
2019-06-09 10:55:00
579
转载 4价格_资源配置
计划经济:三个不可逾越的根本障碍——人际效用不可比较、数据不可得、奖惩很难恰如其分。1. 人际效用不可比较 举一个简单的例子,世界上有10位富人和1位穷人,我们问了10位富人,他们都说苹果比红薯好吃,但是能不能因此就说苹果比红薯重要呢?不能。因为对于哪位穷人来说,红薯可能要比苹果重要得多,因为他需要用红薯解决温饱问题。可见个人的偏好,是不能做横向比较的。也就是说,人际效用不可比较。...
2019-05-04 23:38:00
581
转载 3需求
1.个人估值的多层含义 根据阿尔钦的定义,“一个人对一件商品的个人估值,是他为了得到这件商品所愿意支付的其他商品的数量”。 个人估值这个定义,虽然简单,但它有几层含义: 第一,个人估值是个人的估值,不是集体的估值。集体不会感受,不会思考,也不会评估,做出个人估值判断的一定是个人。 第二,它是主观的,而且是绝对主观的。并不存在什么可观啊的估值,如果没有了人,世界上的财富也就...
2019-05-04 23:37:00
369
转载 2成本
1. 成本是放弃了的最大代价 当一个资源有若干个选项时,被选中的那个选项,它的成本就是所有放弃了的选项当中价值最高的那个。简言之,成本就是放弃了的最大代价。2.沉没成本不是成本 我们说,成本是放弃了的最大代价,而如果没什么可放弃的,也就不存在成本。沉没成本,就是指那些已经发生DNA不可回收的支出。当我们没办法再收回、没办法再放弃时,就不存在成本。凡是提到 成本,我们一定是向前(...
2019-05-04 23:36:00
365
转载 1稀缺
1. 人类面临的四大基本约束:东西不够、生命有限、互相依赖、需要协调1. 破窗理论 一个顽童把窗户打破了,窗户的主人就要去买玻璃,这将刺激玻璃的生产。制作玻璃的工人完成订单以后,有了钱,就可以去买面包,面包工人又可以去买衣服。这样就推动了一连串的生产。2.万物存活看条件,与理性与否无关 首先,世界是充满不确定性的,从统计学的观点看,只要存在不确定性,人们就没办法算出最优解,顶...
2019-05-04 23:35:00
162
转载 14使用函数时要特别考虑的问题
一. 使用函数时要特别考虑的问题 现代的编程语言,如C++、Java、Visual Basic等,都同时支持函数和过程。函数是指由返回值的子程序;过程是指没有返回值的子程序。在C++中,通常把所有的子程序都称为函数;然而,那些返回值类型为void的函数在语义上其实就是过程。1. 什么时候使用函数,什么时候使用过程 语言纯化论者认为,一个函数应该只有一个返回值,就像数学函数一样。...
2019-03-15 08:58:00
233
转载 13子程序的参数
1. 如何使用子程序参数 子程序之间的接口是程序中最易出错的部分之一。研究发现,程序中有 39% 的错误都是属于内部接口错误——也就是子程序之间互相通信时所发生的错误。以下是一些可以减少接口错误的知道原则。1.1 按照输入-修改-输出的顺序排列参数 不要随机地或按字母顺序排列参数,而应该先列出仅作为输入用途的参数,然后是既作为输入又作为输出用途的参数,最后才是仅作为输出用途的参...
2019-03-14 21:27:00
412
转载 12子程序的名字和长度
1. 子程序的名字 好的子程序名字能清晰地描述子程所做的一切。这里是有效地给子程序命名的一些指导原则。1.1 描述子程序所做的所有事情 子程序的名字应当描述其所有的输出结果以及副作用。如果一个子程序的作用是计算报表总额并打开一个输出文件,那么把它命名为 ComputeReportTotals() 就不算完整。而 ComputeReportTotalAndOPenOutputFi...
2019-01-28 20:46:00
521
转载 11子程序设计中的内聚性
一. 子程序设计 对于子程序而言,内聚性是指子程序中各种操作之间联系的紧密程度。有些程序员更喜欢使用“强度”这一术语:一个子程序中各种操作之间的联系有多强?想Consine()(余弦函数)这样的函数就是极端内聚的,因为整个程序只完成一项功能。而CosineAndTan() (余弦余正切)这个函数的内聚性相对较弱,因为它完成了多余一项的操作。我们的目标是让每一个子程序只把一件事情做好,...
2019-01-19 14:35:00
313
转载 10高质量的子程序概述
1. 子程序 子程序是为实现一个特定的目的而编写的一个可被调用的方法或过程。例如 C++ 中的函数(funtion), Java 中的方法(method)。对于某些使用方式, C 和 C++ 中的宏(macro)也可以认为是子程序。你可以把创建高质量子程序的很多技术应用到所有这些情况中。2. 高质量的子程序 抛开计算机本身,子程序也算得上是计算机科学中一项最为重大的发明了。子程...
2019-01-19 10:08:00
138
转载 01U盘PE系统制作方法
1. 需要的工具和安装包:WinPE镜像文件 WinPE_x86.iso 、已制作好的另一个启动盘(下文以映像总裁为例,当然也可以使用大白菜、U启动等) 、 电脑、准备制作PE系统的空U盘2. 还原 WinPE 镜像到待制作的 U 盘。2.1. 将WinPE_x86.iso保存到电脑中,并将映像总裁U盘与空U盘都插到电脑上,重启电脑,按 F12 进入启动选项选择界面,选择 U 盘启动...
2019-01-15 14:51:00
409
转载 09类与包
一、创建类的原因1. 为现实世界中的对象建模 为现实世界中的对象建模也许不是创建类的唯一理由,但它仍是个很好地理由!请为你程序中需要建模的每一个出现在现实世界中的对象类型创建一个类。把该对象所需要的数据添加到类里面,然后编写一些服务子程序来为对象的行为建模。2. 为抽象的对象建模 创建类的另一个合理的原因是要建立抽象对象的模型,所谓的抽象对象并不是一个现实世界中的具体对象,但...
2018-11-06 22:00:00
106
转载 08有关类设计和实现的问题(类的结构关系)
一. 类内部的设计和实现 给类定义合理的接口,对于创建高质量程序起到了关键作用。然而,类内部的设计和实现也同样重要。这里主要论述关于包含、继承、成员函数和数据成员、类之间的耦合性、构造函数、值对象与引用对象等。1. 包含(“有一个...”关系)——“has a” 包含是一个非常简单的概念,它表示一个类含有一个基本数据元素或对象。包含是面向对象编程中的主力技术。1.1 通过包含...
2018-11-02 09:16:00
278
转载 07良好的类接口
1. 好的抽象1.1 类的接口应该展现一致的抽象层次 在考虑类的时候有一个很好地办法,就是把类看做一种用来实现抽象数据类型的机制。每一个类应该实现一个 ADT,并且仅实现这个 ADT。如果你发现某个类实现了不止一个ADT,或者你不能确定究竟它实现了何种 ADT,你就应该把这个类重新组织为一个或多个更加明确的 ADT。 如果把类的公用子程序看中是潜水艇上用来防止进水的气锁阀,那么...
2018-10-23 21:05:00
198
转载 06抽象数据类型
1. 抽象数据类型 抽象数据类型(ADT,abstract data type)是指一些数据以及对这些数据所进行的操作的集合。这些操作即向程序的其余部分描述了这些数据是怎么样的,也允许程序的其余部分改变这些数据。 “抽象数据类型”概念中“数据”一词的的用法有些随意。一个ADT可能是一个图形窗体以及所有能影响该窗体的操作;也可以是一个文件以及对这个文件进行的操作;或者是一张保险费率...
2018-10-23 21:03:00
115
转载 05设计实践
设计实践1.迭代 打你你在备选的设计方案之中循环并且尝试一些不同的做法时,你将同时从高层和低层的不同视角去审视问题。你从高层视角中得到的大范围途径会有助于你把相关的低层细节纳入考虑。你从低层视角中所获得的细节也会为你的高层决策奠定基础。这种高低层面之间的互动被认为是一种良性的原动力,它所创建的结构要远远稳定与单纯自上而下或自下而上创建的结构。 当你首次尝试得出了一个看上去足够好...
2018-10-23 21:02:00
144
转载 04关键的设计概念
软件的首要技术使命:管理复杂度1. 本质的难题 因为从本质上说软件开发就是不断地去发掘错综复杂、相互连接的整套概念的所有细节。其本质性的困难来自很多方面。必须去面对复杂、无序的现实世界精确而完整的识别出各种依赖关系与例外情况设计出完全正确而不是大概正确的解决方案...2.管理复杂度的重要性 Dijkstra 指出,没有谁的大脑能容得下一个现代的计算机程序,也就是说...
2018-10-23 21:01:00
260
转载 03三思而后行:前期准备
1. 软件开发食物链:程序员是软件食物链的最后一环。架构师吃掉需求,设计师吃掉架构,而程序员则消化设计。2. 需求变更 “一旦客户接受了一份需求文档,就再也不做更改”是一个美好的愿望。然而,对一个典型的项目来说,在编写代码之前,客户无法可靠地描述他们想要的是什么。问题并不在于客户是低级生物。就如同你做这个项目的时间越长,对这个项目的理解也就越深入一样,客户参与项目的时间越长,他们对...
2018-10-23 21:00:00
143
转载 01欢迎进入软件构建的世界
1. 软件构建活动中的具体任务验证有关的基础工作已经完成,因此构建活动可以顺利地进行下去确定如何测试所写的代码设计并编写类(class)和子程序创建并命名变量(variable)和具名常亮(named constant)选择控制结构(control structure),组织语句块对你的代码进行单元测试和集成测试,并排除其中的错误评审开发团队其他成员的底层设计和代码,并让...
2018-10-23 20:59:00
145
转载 02用隐喻来充分地理解软件开发
1.隐喻的价值 隐喻的价值绝不应低估。隐喻的优点在于其可预期的效果:能被所有的人理解。不必要的沟通和误解也因此大为减低,学习与教授更为快速。实际上,隐喻是对概念进行内在化(intemalizing)和抽象(abstracting)的一种途径,它让人们在更高的层次上思考问题,从而避免地层次的错误。2. 算法 算法是一套定义明确的指令,使你能完成某个特定的任务。算法是可预测性的(p...
2018-10-23 20:59:00
153
转载 02Vs2013常用路径配置
1.设置头文件路径项目 -> xxx属性页 -> 配置属性 -> C/C++ -> 常规 -> 附加包含目录。2.包含 x.lib 库路径项目 -> xxx属性页 -> 配置属性 -> 连接器 -> 常规 -> 附加库目录。项目 -> xxx属性页 -> 配置属性 ->连接器 -> 输入 ->...
2018-09-11 11:32:00
205
转载 04原子操作
Windows 多线程之原子操作1. 原子操作 一个操作如果能够不受中断地完成,我们称之为原子操作。#include <Windows.h>#include <stdio.h>const unsigned int THREAD_NUM = 100;unsigned int g_Count = 0;DWORD WINAPI ThreadFunc(...
2018-08-04 16:42:00
72
转载 02等待单个线程返回WaitForSingleObject
windows 多线程之等待线程返回 多线程编程中,有时我们需要等待某一线程完成了特定的操作之后再继续做其他事情,要实现这个目的,可以使用 Windows API 函数 WaitForSingleObject,或者 WaitForMultipleObject。这两个函数都会等待 Object 被标记为有信号(signaled)时才返回。只要是 Windows 创建的 Object 都...
2018-08-04 16:41:00
379
转载 01创建线程CreateThread和_beginthreadex
Windows多线程之线程创建一. 线程创建函数 CreateThread1. 函数原型 HANDLE WINAPI CreateThread( _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes, _In_ SIZE_T dwStackSize, ...
2018-08-04 16:40:00
185
转载 04Windows中的字符类型
1. Windows 中常用的数据类型定义//WinNt.h中定义typedef unsigned short wchar_t; //A 16-bit charactertypedef char CHAR; //An 8-bit charactertypedef wchar_t WCHAR; //A 16-bit...
2018-08-04 16:39:00
84
转载 03大端和小端(Big endian and Little endian)
1.大端和小端的问题 对于整型、长整型等数据类型,Big endian 认为第一个字节是最高位字节(按照从低地址到高地址的顺序存放数据的高位字节到低位字节),而 Little endian 则相反,它认为第一个字节是低位字节(按照从低地址到高地址的顺序存放数据的低位字节到高位字节)。(1)例如,假设从内存地址 0x0000 开始有以下数据:/*地址*/ 0x0000 ...
2018-08-04 12:55:00
99
转载 02字符编码
4. Unicode 的问题 需要注意的是,Unicode 只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。 比如,汉字 “严” 的 Unicode 是十六进制数 4E25,转换成二进制足足有 15 位(100111000100101),也就是说,这个符号的表示至少需要 2 个字节。表示其他更大的符号,可能需要 3 个字节或者 4 个字节,甚至更...
2018-08-02 20:40:00
148
转载 03等待多个线程返回WaitForMultipleObject
二. WaitForMultipleObject 等待单个线程返回1. 函数原型DWORD WINAPI WaitForMultipleObjects( _In_ DWORD nCount, _In_ const HANDLE *lpHandles, _In_ BOOL bWaitAll, _In_ DWORD dwMi...
2018-07-26 15:07:00
608
转载 03Qt信号与槽(2)
1. 元对象工具 元对象编译器 MOC(meta object compiler)对 C++ 文件中的类声明进行分析并产生用于初始化元对象的 C++ 代码,元对象包含全部信号和槽的名字及指向这些函数的指针。 MOC 读 C++ 源文件,如果发现有 Q_OBJECT 宏声明的类,它就会生成另外一个 C++ 源文件,这个新生成的文件中包含有该类的元对象代码。例如,假设我们有一个头文件...
2018-07-24 15:27:00
96
转载 02Qt信号与槽(1)
信号与槽1.概述 信号和槽机制是 Qt 的核心机制,信号和槽是一种高级接口,应用于对象之间的通信,它是 Qt 的核心特性,也是 Qt 区别于其他工具包的重要地方。信号和槽是 Qt 自行定义的一种通信机制,它独立于标准的 C/C++ 语言,因此要正确的处理信号和槽,必须借助一个呗称为 moc (Meta Object Compiler) 的 Qt 工具,该工具是个 C++ 预处理程序...
2018-07-24 15:27:00
93
转载 01Qt中的隐式共享
隐式共享 隐式共享又称为回写复制(copy on write)。当两个对象共享同一分数据时(通过浅拷贝实现数据共享),如果数据不改变,则不进行数据的复制。而当某个对象需要需要改变数据时,则进行深拷贝。 程序在处理共享对象时,使用深拷贝和浅拷贝这两种方式复制对象。所谓深拷贝,就是生成对象的一个完整复制品;而浅拷贝则是一个引用复制(如今复制指向共享数据的指针)。显然,执行一个深拷贝的...
2018-07-21 16:07:00
80
转载 10GNU C语言函数调用
6. C 函数调用机制概述 在 Linux 内核程序 boot/head.s 执行完基本初始化操作之后,就会跳转区执行 init/main.c 程序。那么 head.s 程序时如何把执行控制转交给 init/mian.c 程序呢?即汇编程序时如何调用执行 C 语言程序的?这里我们首先描述一下 C 函数的调用机制、控制器传递方式,然后说明 head.s 程序跳转到 C 程序的方法。...
2018-07-10 10:41:00
244
转载 09GNU C语言程序编译
1. C 语言程序概述 GNU gcc 对 ISO 标准 C89 描述的 C 语言进行了一些扩展,其中一些扩展部分已经包括进 IOS C99 标准中。本节给出了内核中经常用到的一些 gcc 扩展语句的说明。2. C 程序编译和链接 使用 gcc 汇编器编译 C 语言程序时通常会经过四个处理阶段,即预处理、编译阶段、汇编阶段和链接阶段,如下图所示。 在前处理阶段中,gcc ...
2018-07-10 10:03:00
160
转载 08GNU as汇编
1. 概述 由于操作系统许多关键代码要求有很高的执行速度和效率,因此在一个操作系统源代码中通常就会包含大约 10% 左右的起关键作用的汇编语言程序量。Linux 操作系统也不例外,它的 32 位初始化代码、所有中断和异常处理过程接口程序、以及很多宏定义都使用了 as 汇编语言程序或扩展的嵌入式汇编语句。 在编译 C 语言程序时, GNU gcc 编译器会首先输出一个作为中间结果的...
2018-07-09 11:07:00
138
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人