拉巴力的纸皮箱


  • 首页

  • 标签

  • 归档

  • 关于

  • 搜索

《枪炮、病菌与钢铁:人类社会的命运》-笔记

发表于 2020-12-19
  • 为什么最后带来枪炮、凶恶的病菌和钢铁的竟是欧洲人,而不是非洲人或印第安人?
  • 对本书来说,这样的一句话就是:“不同民族的历史遵循不同的道路前进,其原因是民族环境的差异,而不是民族自身在生物学上的差异。”

第一章 走上起跑线

  • 随着人类在澳大利亚/新几内亚的定居,现在人类已占据了可以居住的5个大陆中的3个。(在本书中,我始终把欧亚大陆算作一个大陆,我没有把南极大陆计算在内,因为南极大陆直到19世纪才有人到达,而且从来没有任何自给自足的居民。)这样就只剩下两个大陆:北美洲和南美洲。它们无疑是最后两个有人定居的大陆,这原因很明显,因为从旧世界到达美洲要么用船(甚至在印度尼西亚直到4万年前才有证据表明已有了船,而欧洲要晚得多才有船)去渡海,要么得先占有西伯利亚(直到大约2万年前才有人居住)以便通过白令陆桥。
  • 克罗维的猎人们在美洲向南推进,遇到了以前从未见过人的大型动物。他们可能发现这些美洲动物很容易杀死,于是就把它们消灭了。
  • 在可以住人的5个大陆中,北美洲和南美洲是人类史前史最短的两个大陆。
  • 在过去的700年中,唯一的无人居住、等待欧洲探险者光顾的地区就只剩下大西洋和印度洋中那些最偏远的岛屿(如亚速尔群岛和塞舌尔群岛)和南极大陆了。
  • 如果现代人类的确是在大约10万年前出现在非洲,然后向其他大陆扩散,那么其他地方在这期间积累起来的优势都会被一扫而光,从而使非洲人取得新的领先优势。而且,人类遗传的多样性以非洲为最高;也许更多样的人类集体会带来更多样的发明创造。不过,我们的这位考古学家那时可能会想:就本书的论题来说,究竟什么是“领先优势”?

第二章 历史的自然实验

  • 一般地说,人口越多,人口密度越高,技术和组织就越复杂,专业程度就越高。简言之,人口密度高时,只有一部分人最后成为农民,但他们被调动起来去专门从事集约型的粮食生产,从而生产出剩余粮食去养活非生产者。能够调动农民的非生产者包括首领、神职人员、官员和战士。

总结

  • 人口密度的重要性!

第三章 卡哈马卡的冲突

  • 现代最大的人口变迁是欧洲人对新大陆的移民,以及随之发生的对美洲土著(美洲印第安人)的征服、土著人数的减少或完全消失。
  • 阿塔瓦尔帕在卡哈马卡的出现突出了世界史上的一个关键因素:具有相当免疫力的入侵民族把疾病传染给没有免疫力的民族。天花、麻疹、流行性感冒、斑疹伤寒、腺鼠疫以及其他一些在欧洲流行的传染病,毁灭了其他大陆的许多民族,从而在欧洲人的征服中起了一种决定性的作用。
  • 我并不是要暗示历史上疾病的作用只限于为欧洲人的扩张铺平道路。疟疾、黄热病以及热带非洲、印度、东南亚和新几内亚的一些其他疾病,是欧洲在这些热带地区进行殖民的最大障碍。
  • 皮萨罗成功的直接原因包括:以枪炮、钢铁武器和马匹为基础的军事技术;欧亚大陆的传染性流行病;欧洲的航海技术;欧洲国家集中统一的行政组织和文字。
  • 为什么这种直接优势总是在欧洲一边,而不是在新大陆一边。为什么不是印加人发明枪炮和钢刀,骑上像战马一样的令人生畏的牲口,携带对欧洲人来说没有抵抗力的疾病,修造远洋船只和建立先进的行政组织,并能从几千年有文字记载的历史吸取经验?

总结

  • 病菌的影响

第四章 农民的力量

  • 从间接的意义说,粮食生产是枪炮、病菌和钢铁发展的一个先决条件。
  • 第一个因果关系是最直接的因果关系:能够获得更多的可消耗的卡路里就意味着会有更多的人。在野生的动植物物种中,只有很少一部分可供人类食用,或值得猎捕或采集。
  • 通往使某些民族能够征服另一些民族的近似因素(如枪炮、马匹和疾病)的因果关系链。例如,人类的各种各样疾病是在有许多适于驯化的动植物物种的地区演化的,这一部分是由于生产出的农作物和饲养的牲畜帮助养活了使流行疾病得以保持的人口稠密的社会;一部分是由于这些疾病是从驯化的动物身上的病菌演化而来。
  • 作为传统社会中的一个燃料来源,动物粪便也有其价值。此外,最大的驯化哺乳动物与驯化植物相互作用,以增加粮食产量,这表现在它们可以用来拉犁,从而使人们可以去耕种以前如用来耕种则代价太高的土地。
  • 许多狩猎采集社会里的人经常跑来跑去寻找野生食物,但农民必须留在他们的田地和果园附近。因此而产生的固定居所由于缩短了生育间隔期而促使人口变得更稠密起来。
  • 事实上,到处流浪的以狩猎采集为生的人通过哺乳期无月经、禁欲、杀婴和堕胎等办法,把孩子出生的间隔安排为大约每4年一个。相比之下,定居的部族由于没有在迁移途中携带小孩这种问题的限制,他们可以多生多养,只要养得活就行。
  • 评论:采集社会时期的人类同样采取抛弃弱小,这样做用现代评价标准就是灭绝人性,但在当时是不得不采取的手段。
  • 定居生活的另一个结果是人们可以把多余的粮食贮藏起来,因为如果人们不能留在附近看管贮藏的粮食,那么贮藏就是毫无意义的。虽然有些到处流浪的狩猎采集部族可能偶尔也把几天吃不完的食品收藏起来,但这种富余对他们几乎毫无用处,因为他们不能保护它。但贮藏的粮食对于养活不生产粮食的专门人材是必不可少的,而对于养活全村社的人肯定是必不可少的。因此,到处流浪的狩猎采集社会几乎没有或完全没有这类专职的专门人材,这种人材首先出现在定居社会中。
  • 一旦有了粮食储备,行政上层人物就可以控制别人生产的粮食,维护征税的权利,无需去养活自己,而以全部时间从事行政活动
  • 通过税收建立剩余粮食储备,除了养活国王和官员外,还能养活其他专职的专门人材。与征服战争关系最直接的是,剩余粮食储备可以用来养活职业军人。这是不列颠帝国最终打败新西兰武装精良的本土毛利人的决定性因素。
  • 至此,我已着重指出了作为粮食的农作物和家畜的直接和间接的价值。然而,它们还有其他用途,例如帮我们保暖和向我们提供有价值的材料。农作物和家畜生产出的天然纤维,可以用来做衣服、毯子、网和绳子。
  • 驯化的大型哺乳动物在19世纪铁路发展起来之前成为我们主要的陆路运输手段,从而进一步使人类社会发生了革命性的剧变。最后以蒙古人于公元13世纪和14世纪征服亚洲和俄罗斯的许多地方而达到高潮。只是由于在第一次世界大战中采用了卡车和坦克,马的作用才最后被取代,而不再是战争中主要的突击手段和快速运输的工具。
  • 在征服战争中同样重要的是在驯养动物的社会中演化的病菌。像天花、麻疹和流行性感冒这类传染病作为人类的专化病菌出现了,它们原是动物所感染的十分类似的祖代病菌由于突变而衍生出来的
    驯养动物的人成了这些新演化出来的病菌的第一个受害者,而这些人接着又逐步形成了对这些新的疾病的强大的抵抗力。当这些有部分免疫力的人与以前从来没有接触过这种病菌的人接触时,流行病于是产生了,99%的以前没有接触过这种病菌的人因之而丧命。从驯养的动物那里最后获得的病菌,在欧洲人对美洲、澳大利亚、南非和太平洋诸岛的土著的征服中起了决定性的作用。
  • 总之,动植物的驯化意味着人类的粮食越来越多,因而也就意味着人口越来越稠密。因此而带来的粮食剩余和(在某些地区)利用畜力运输剩余粮食,成了定居的、行政上集中统一的、社会等级分明的、经济上复杂的、技术上富有革新精神的社会的发展的先决条件。因此,能否利用驯化的动植物,最终说明了为什么帝国、知书识字和钢铁武器在欧亚大陆最早发展起来,而在其他大陆则发展较晚,或根本没有发展起来。

总结

  1. 粮食生产的重要
  2. 定居生活
  3. 病菌的产生

第五章 历史上的穷与富

  • 为什么粮食生产首先在看似相当贫瘠的土地上形成,只是到后来才在今天最肥沃的农田和牧场发展起来?所有这些问题都涉及不同的发展阶段,而正是这些不同的发展阶段决定了哪些民族成了历史上的贫穷民族,哪些民族成了历史上的富有民族。
  • 世界上只有几个地区发展了粮食生产,而且这些地区发展粮食生产的时间也差异甚大。一些邻近地区的狩猎采集族群从这些核心地区学会了粮食生产,而其他一些邻近地区的族群则被来自这些核心地区的粮食生产者所更替了——更替的时间仍然差异甚大。最后,有些族群虽然生活在一些生态条件适于粮食生产的地区,但他们在史前期既没有发展出农业,也没有学会农业;他们始终以狩猎采集为生,直到现代世界最后将他们淘汰。在粮食生产上具有领先优势的那些地区里的族群,因而在通往枪炮、病菌和钢铁的道路上也取得了领先的优势。其结果就是富有社会与贫穷社会之间一系列的长期冲突。

第六章 种田还是不种田

  • 由于粮食生产较狩猎采集有更高的每英亩可摄入卡路里数,人口密度也倾向于更高。而在另一方面,整个更新世后期的人口密度本来就在持续上升,归因于人类采集加工野生食物的技术进步。随着人口增长,粮食生产越来越受青睐,因为它提供了给养所有人所必需的粮食增产。这就是说,采纳粮食生产为所谓的自身催化过程提供了例证——这是一个在正反馈循环中自身催化的过程,这个过程一旦开始,速度就越来越快。人口密度的逐步增加,迫使人们去奖励那些无意中增加了粮食产量的人,以获得更多的粮食。一旦人们开始生产粮食并过定居的生活,他们就能够缩短生育间隔期,生出更多的人来,从而也就需要更多的粮食。粮食生产与人口密度之间的这种双向关系,说明了一种矛盾的现象,即粮食生产一方面增加了每英亩可摄入的卡路里的数量,一方面却又使这些粮食生产者的营养不及他们所承继的那些以狩猎采集为生的人。这种矛盾之所以产生,是因为人口密度的增加速度要稍高于粮食的增加速度。

第七章 怎样识别杏仁

  • 植物驯化可以定义为:栽种某一植物并由此有意或无意地使其发生不同于其野生祖先的、更有利于人类消费的遗传变化。
  • 不同的植物由于十分不同的或甚至相反的特点而得到选择。有些植物(如向日葵)由于大得多的种子而得到选择,而另一些植物(如香蕉)则由于种子小或没有种子而得到选择。选择生菜则取其茂盛的叶子而舍其种子或果实;选择小麦和向日葵则取其种子而舍其叶;选择南瓜则取其果实而舍其叶。特别有意思的是,由于不同的目的,对于一种野生植物可以有不同的选择,从而产生了外观十分不同的作物。
  • 新月沃地的小麦和大麦是被称之为谷物(属禾本科)的那类作物的代表,而新月沃地的豌豆和兵豆则是豆类(属豆科,包括大豆)的代表。谷类作物的优点是生长快,碳水化合物含量高,每公顷耕地可产1吨食物。因此,今天的谷物占人类消耗的全部卡路里的半数以上,并包括现代世界上12种主要作物中的5种(小麦、玉米、稻米、大麦和高粱)。许多谷类作物蛋白质含量低,但这一缺陷可以由豆类来弥补,因为豆类的蛋白质通常达25%(大豆为38%)。因此,谷物和豆类一起为均衡饮食提供了许多必不可少的成分。

第八章 问题在苹果还是在印第安人

  • 人类历史的主要事实之一,是西南亚的那个叫做新月沃地的地区(因其在地图上的新月状高地而得名,见图8.1)在人类发展早期的重要性。那个地区似乎是包括城市、文字、帝国以及我们所说的文明(不论是福是祸)在内的一连串新情况发生的地方。而所有这些新情况之所以发生,都是由于有了稠密的人口,有了剩余粮食的贮存,以及可以养活不从事农业的专门人材,凡此种种之所以可能又都是由于出现了以作物栽培和牲口饲养为形式的粮食生产。粮食生产是新月沃地出现的那些重要新事物中的第一个新事物。因此,如果想要了解现代世界的由来,就必须认真对待这样的问题,即为什么新月沃地的驯化动植物使它获得了如此强大的领先优势。
  • 原来地中海气候带,尤其是在新月沃地那个地区,具有胜过其他地中海气候带的5个有利条件。第一,欧亚大陆西部显然是世界上属于地中海气候带的最大地区。因此,那里的野生动植物品种繁多,超过了澳大利亚西南部和智利这些比较小的地中海气候带。第二,在地中海气候带中,欧亚大陆西部的地中海气候带的气候变化最大,每一季、每一年气候都有不同。这种气候变化有利于植物群中数量特别众多的一年生植物的演化。物种多和一年生植物多这两个因素结合起来,就意味着欧亚大陆西部的地中海气候带显然是一年生植物品种最繁多的地区。智利的地中海型气候带只有2种,加利福新月沃地的地中海气候带的第三个有利条件,是它在短距离内高度和地形的富于变化。它的高度从地球上的最低点(死海)到18000英尺的高山(在德黑兰附近),应有尽有,从而保证了环境的相应变化,也因此保证品种繁多的野生植物可供成为作物的祖先。
  • 地球上不同地区的当地作物并不是同样多产的。
  • 采纳粮食生产涉及粮食生产的生活方式与狩猎采集的生活方式之间的竞争。而受到损害的则是那些没有这种机会或意愿的部落。因此,新几内亚土生土长的粮食生产所受到的限制与新几内亚的族群没有任何关系,而是与新几内亚的生物区系和环境有着最密切的关系。
  • 事实上,在整个大陆和其他一些包含数以百计的互相竞争的广大地区,有些社会对新事物可能比较开放,有些社会对新事物可能比较抵制。那些接受新作物、新牲畜或新技术的社会因而可能吃得更好,繁殖得更快,从而取代、征服或杀光那些抵制新事物的社会。
  • 澳大利亚这个据称最“落后的”大陆很好地说明了这个问题。澳大利亚东南部是这个大陆上水源充足、最适合粮食生产的地方。那里的土著社会在最近的几千年里似乎一直在按照一种可能最终导致本地粮食生产的发展轨迹在演化。它们已经建立了过冬的村庄。它们已经开始加强利用它们的环境,建造渔栅、编织渔网,甚至挖掘长长的水渠来从事渔业生产。如果欧洲人没有在1788年向澳大利亚殖民,从而中途破坏了那个独立的发展轨迹,那么澳大利亚土著也许不消几千年就可成为粮食生产者,照料一池池驯化了的鱼,种植驯化了的澳大利亚薯蓣和小籽粒的禾本科植物。根据这一点,我现在就能够回答包含在本章标题里的那个问题。我提出的那个问题是:北美印第安人未能驯化北美苹果的原因是在印第安人还是在苹果。
  • 在欧洲人到达时印第安人仍未能驯化北美的苹果,其原因不在印第安人,也不在苹果。就苹果驯化必要的生物条件而言,北美印第安农民和欧亚大陆农民一样,北美的野生苹果也和欧亚大陆的野生苹果一样。事实上,本章读者现在正在津津有味地吃着的从超市上买来的苹果,有些品种就是不久前将欧亚大陆的苹果同北美的野生苹果进行杂交而培育出来的。印第安人未能驯化苹果的原因却是在于印第安人所能得到的整个野生动植物组合。这个组合的微弱的驯化潜力,就是北美粮食生产很晚才开始的主要原因。

总结

  1. 新月沃地(地中海气候)
  2. 美洲整个野生动植物组合,微弱的驯化潜力。

第九章 斑马、不幸的婚姻和安娜·卡列尼娜原则

  • 驯养的大型哺乳动物对那些拥有它们的人类社会产生重大影响的那许多方面。最显著的是,这些动物提供了肉食、奶制品、肥料、陆上运输、皮革、军事突击手段、犁具牵引、毛绒以及使先前没有抵抗力的民族失去生命的病菌。
  • 各大陆之间野生祖先的这种十分不均匀的分布,成了欧亚大陆人而不是其他大陆的人最后得以拥有枪炮、病菌和钢铁的一个重要原因。
  • 欧亚大陆何以一直是大型哺乳动物驯化的主要场所,对这个问题的部分解释是:它是一个一开始就拥有最多的可供驯化的野生哺乳动物的大陆,在过去的40000年中,那里这样的动物因绝种而消失的也最少。
  • 在驯化动物方面现代尝试的失败,提供了最后一个证据,表明过去在驯化剩下的大批候补野生动物方面的失败是由于这些动物本身的缺点,而不是由于古代人的缺点。
  • 每一次某种动物在吃某种植物或另一种动物时,食物生物量转换为取食者生物量的效率远远低于100%:通常在10%左右。就是说,要花费10000磅左右的玉米才能喂养出一头1000磅重的牛。
  • 动物的日常食物、生长速度、交配习惯、性情、容易受惊的倾向以及群居组织的几个不同的特点。只有很少一部分野生哺乳动物由于在上述所有这些方面都能协调一致而最终得以和人类结成美满的婚姻。
  • 欧亚大陆的民族碰巧比其他大陆的民族继承了多得多的可驯化的大型野生的哺乳类食草动物。这一结果及其为欧亚大陆社会带来的全部利益,来自哺乳动物地理学、历史和生物学这3个基本事实。
  • 欧亚大陆由于其广大面积和生态的多样性,一开始就拥有最多的可供驯化的候补动物。其次,澳大利亚和美洲,而不是欧亚大陆或非洲,在更新世晚期动物灭绝的大规模浪潮中失去了它们大多数可供驯化的候补动物——这可能是因为前两个大陆的哺乳动物不幸首先突然接触到人类,而且这时已是我们的进化史的后期阶段,我们的狩猎技巧已经得到了高度的发展。

总结

  • 欧亚大陆的民族碰巧比其他大陆的民族继承了多得多的可驯化的大型野生的哺乳类食草动物。

第十章 辽阔的天空与偏斜的轴线

  • 轴线走向的差异所产生的巨大的、有时是悲剧性的后果。轴线走向影响了作物和牲口的传播速度,可能还影响文字、车轮和其他发明的传播速度。
  • 某种作物的迅速传播可能不但抢先阻止了同一植物的野生祖先在其他某个地方的驯化,而且也阻止了有亲缘关系的野生植物的驯化。
  • 许多不同的现象归结为同一个结论:粮食生产从西南亚向外传播的速度要比在美洲快,而且也可能比在非洲撒哈拉沙漠以南的地区快。这些现象包括:粮食生产完全未能到达某些生态条件适合于粮食生产的地区;粮食生产传播的速度和选择性方面存在着差异;以及最早驯化的作物是否抢先阻止了对同一种植物的再次驯化或对近亲植物的驯化方面也存在着差异。
  • 提出所有这些差异,并不就是说分布很广的作物是值得赞美的,也不是说这些差异证明了欧亚大陆早期农民具有过人的智慧。这些差异只是反映了欧亚大陆轴线走向与美洲或非洲大陆轴线相比较的结果。历史的命运就是围绕这些轴线旋转的。

第十一章 牲畜的致命礼物

  • 粮食生产这个终极原因是如何导致病菌、文化修养、技术和集中统一的政府这些直接原因的。
  • 过去战争中的胜利者并不总是那些拥有最优秀的将军和最精良的武器的军队,而常常不过是那些携带有可以传染给敌人的最可怕病菌的军队。
  • 虽然被那些杀人不眨眼的西班牙征服者杀死的印第安人不计其数,但凶恶的西班牙病菌杀死的印第安人却要多得多。为什么在欧洲和美洲之间这种可怕的病菌的交流是这样不对等?为什么印第安人的疾病没有大批杀死西班牙入侵者,并传回欧洲,消灭掉欧洲95%的人口?同样的问题也出现在被欧亚病菌大批杀死的其他土著身上,以及企图征服亚非热带地区的欧洲人身上。
  • 作为流行病有几个共同的特点。首先,它们从一个受感染的人迅速而高效地传给近旁健康的人,结果使整个人口在很短时间内受到感染。其次,它们都是“急性”病:在很短时间内,你要么死掉,要么完全康复。第三,我们当中的确获得康复的那些幸运的人产生了抗体,使我们在很长时间内,也可能是一辈子不用担心这种病会复发。最后,这些病往往只在人类中传播;引起这些病的病菌往往不是生活在土壤中或其他动物身上。所有这4个特点也适用于美国人所认为的那些习见的儿童急性传染病,其中包括麻疹、风疹、急性腮腺炎、百日咳和天花。这4个特点结合起来往往造成了某种疾病的流行,其原因不难理解。简单地说,情况是这样的:病菌的迅速传播和症状的迅速发展,意味着当地人口中的每一个人很快就受到感染,之后不久他或者死去,或者康复并获得免疫力。仍然会受到感染的人都不会活下来。但由于这种病菌除了在活人体内是不可能生存的,所以人死了这种病也就消失了,直到又一批儿童达到易受感染的年纪——直到一个受到感染的外来人使一场流行病重新开始。
  • 关于这些疾病是怎样流行起来的,有一个典型的事例是大西洋上叫做法罗群岛[插图]的与世隔绝的岛屿上的麻疹病史。1781年,一场严重的麻疹流行病到达法罗群岛,接着又消失了,其后该群岛就不再有麻疹发生,直到1846年,一个受到感染的木匠从丹麦坐船到来。不出3个月,法罗群岛的几乎全部人口(7782人)都得了麻疹,于是有的人死去,有的人康复,麻疹病毒又一次消失,直到下一次流行。一些研究表明,麻疹可能会在任何少于50万人的人口中消失。只有在比较多的人口中,这种病才会从一个地区转移到另一个地区,直到原先受感染地区里出生的婴儿达到足够的数目,麻疹又会卷土重来。适用于法罗群岛上麻疹的情况,也适用于世界上其他一些我们所熟悉的急性传染病。为了维持自身的存在,这些病需要有足够多的人口,足够拥挤的稠密人口,这样,到这种病不然就会衰退的时候,又有一大批易受感染的儿童成为感染对象。因此,麻疹和一些类似的疾病也叫做人群病。
  • 人群病不可能在小群狩猎采集族群和刀耕火种的农民中存在下去。现代亚马孙河地区印第安人和太平洋岛民的悲惨经历表明,整个小部落可能被一个外来人带来的一种流行病几乎全部消灭——因为这个小部落中没有一个人有任何抵抗这种病菌的抗体。小部落人口少,这一点不但说明了为什么他们承受不住从外面带来的流行病,而且也说明了为什么他们没有能演化出自己的流行病去回敬外来人。
  • 为什么农业的出现会成为我们人群传染病形成的开端?其中一个原因前面已经提到,那就是农业比狩猎采集的生活方式维持了高得多的人口密度——平均要高10倍到100倍。另外,狩猎采集族群经常变换营地,留下了一堆堆排泄物,上面聚集了大量病菌和寄生虫的幼虫。但农民是定居的,他们生活在自己排放出来的污水之中,从而为病菌从一个人的身体进入另一个人的饮用水源提供了捷径。有些农业人口把自己的粪便收集起来,当作肥料撒到人们劳动的田里,从而使粪便中的病菌和寄生虫去感染新的受害者变得甚至更加容易。
  • 在动物中,流行病同样需要稠密的大种群,而不是只去折磨任何某一只动物:这些流行病主要发生在需要有大的种群的群居动物中。因此,当我们驯养牛和猪这类群居动物时,它们已经受到了一些流行病的折磨,只不过在等待着转移给我们罢了。所有这些病菌仍然处在向人类病原体演化的早期阶段。
  • 美洲之所以未能出现流行的致命的人群病的主要原因就一定会变得很清楚。这个问题就是,想象一下这些疾病可能会从什么病菌演化而来?我们已经看到,欧亚大陆的人群病是从欧亚大陆驯化的群居动物的疾病演化而来的。尽管欧亚大陆有许多这样的动物,但在美洲驯化的动物只有5种:墨西哥和美国西南部的火鸡、安第斯山脉地区的美洲驼/羊驼和豚鼠、热带南美的美洲家鸭和整个美洲的狗。反过来,我们也看到,新大陆驯化动物的这种极端缺乏,反映了用以启动驯化的野生动物的缺乏。在大约13000年前上一次冰期结束时,美洲有大约80%的大型野生哺乳动物便已灭绝了。
  • 源于动物的疾病在历史上的重要性,远远超过了旧大陆与新大陆之间的冲突。欧亚大陆的病菌在大量消灭世界上其他许多地方的土著民族方面起了关键的作用。
  • 毫无疑问,欧洲人在武器、技术和行政组织方面拥有对他们所征服的大多数非欧洲民族的巨大优势。但仅仅这种优势还不能完全说明开始时那么少的欧洲移民是如何取代美洲和世界上其他一些地区那么多的土著的。如果没有欧洲送给其他大陆的不祥礼物——从欧亚大陆人与家畜的长期密切关系中演化出来的病菌,这一切也许是不会发生的。

总结

  1. 流行病(人群病)

第十二章 蓝图和借用字母

  • 知识带来力量。因此,文字也给现代社会带来了力量,用文字来传播知识可以做到更准确、更大量和更详尽,在地域上可以做到传播得更远,在时间上可以做到传播得更久。
  • 文字同武器、病菌和集中统一的行政组织并驾齐驱,成为一种现代征服手段。
  • 发明的传播形式有一系列形式。形式的一端是“蓝图复制”,就是对现有的一幅详尽的蓝图进行复制或修改。另一端是“思想传播”,就是仅仅把基本思想接受过来,然后必须去重新创造细节。
  • 虽然蓝图的复制和修改是传播技术的最直接的选择,但有时候这种选择不一定能够得到。蓝图可能被隐藏起来,而且不是深于此道的人对蓝图也不一定能够读懂。对于在远处某个地方发明了某个东西,人们可能有所耳闻,但详细情况则可能无从知晓。也许所知道的只是这样的基本思想:某人以某种方法成功地取得了某种最后的成果。然而,知道了这一点,可能就是通过思想传播去启发别人设计他们自己的取得此种成果的途径。
  • 大多数有文字的社会之所以获得文字,或是通过向邻近的社会借用,或是由于受到它们的启发而发明出文字,而不是靠自己独立创造出来的。
  • 文字史引人注目地表明了类似的情况:地理和生态条件影响了人类发明的传播。

第十三章 需要之母

  • 事实上,许多发明或大多数发明都是一些被好奇心驱使的人或喜欢动手修修补补的人搞出来的,当初并不存在对他们所想到的产品的任何需要。一旦发明了一种装置,发明者就得为它找到应用的地方。只有在它被使用了相当一段时间以后,消费者才会感到他们“需要”它。还有一些装置本来是只为一个目的而发明出来的,最后却为其他一些意料之外的目的找到了它们的大多数用途。
  • 寻求使用的这些发明包括现代大多数重大的技术突破,从飞机和汽车到内燃机和电灯泡再到留声机和晶体管,应有尽有。了解到这一点,也许会令人感到吃惊。因此,发明常常是需要之母,而不是相反。
  • 有一项大发明最终得到使用,就会有不计其数的其他发明得不到使用。甚至有些发明当初本来是为了满足特定的需要而设计的,后来可能在满足意外需要方面证明是更有价值的。虽然詹姆士·瓦特设计他的蒸汽机是为了从煤矿里抽水,但它很快就为棉纺厂提供动力,接着又(以大得多的利润)推动着机车和轮船前进。
  • 技术的发展是长期积累的,而不是靠孤立的英雄行为;技术在发明出来后大部分都得到了使用,而不是发明出来去满足某种预见到的需要。
  • 一旦发明家发现了一项新技术的用途,下一步就是说服社会来采用它。仅仅有一种更大、更快、更有效的工作装置还不能保证人们会乐于接受。无数的此类技术要么根本没有被采用,要么只是在长期的抵制之后才被采用。
  • 即使在同一个大陆上,各社会之间在发展和接受新事物方面也是大不相同的。即使是在同一个社会内,在时间上也会有所不同。在任何时候,在任何大陆上都有富于创新精神的社会,也有保守的社会。此外,在同一个地区内,对新事物的接受能力迟早会产生波动。
  • 一个用途广泛的发明在一个社会出现后,接着它便往往以两种方式向外传播。一种方式是:其他社会看到或听说了这个发明,觉得可以接受,于是便采用了。另一种方式是:没有这种发明的社会发现与拥有这种发明的社会相比自己处于劣势,如果这种劣势大到一定程度,它们就会被征服并被取而代之。
  • 在发明的传播中最容易接受发明的社会是大陆上的一些根基深厚的社会。在这些社会中技术发展最快,因为它们不但积累了自己的发明,而且也积累了其他社会的发明。
  • 我们往往想当然地认为,有用的技术一旦获得,就必然会流传下去,直到有更好的技术来取而代之。事实上,技术不但必须获得,而且也必须予以保持,而这也取决于许多不可预测的因素。任何社会都要经历一些社会运动和时尚,此时一些没有经济价值的东西变得有价值起来,而一些有用的东西也变得暂时失去了价值。今天,当地球上几乎所有社会相互联系在一起的时候,我们无法想象某种时尚会发展到使人们竟然抛弃一项重要的技术。一个著名的例子是日本放弃枪支。
  • 在同时代的欧洲也有一些鄙视枪支并竭力限制枪支使用的统治者。但这些限制措施在欧洲并未发生多大作用,因为任何一个欧洲国家,哪怕是短暂地放弃了火器,很快就会被用枪支武装起来的邻国打垮。只是因为日本是一个人口众多的孤立的海岛,它才没有因为拒绝这种具有巨大作用的新军事技术而受到惩罚。日本拒绝枪支和中国抛弃远洋船只(以及抛弃机械钟和水力驱动纺纱机),是历史上孤立或半孤立社会技术倒退的著名例子。
  • 在这漫长的加速发展的历史中,我们可以挑出两次意义特别重大的飞跃。第一次飞跃发生在100000年到50000年前,其所以能够发生,大概是由于我们身体的遗传变化,即人体的现代解剖学进化使现代语言或现代大脑功能或两者成为可能。这次飞跃产生了骨器、专用石器和复合工具。第二次飞跃来自我们选定的定居生活方式,这种生活方式在世界的不同地区发生的时间不同,在有些地区早在13000年前就发生了,在另一些地区即使在今天也还没有发生。就大多数情况而言,选定定居的生活方式是同我们采纳粮食生产联系在一起的,因为粮食生产要求我们留在我们的作物、果园和剩余粮食储备的近旁。
  • 定居生活对技术史具有决定性的意义,因为这种生活使人们能够积累不便携带的财产。四处流浪的狩猎采集族群只能拥有可以携带的技术。如果你经常迁移而且又没有车辆或役畜,那么你的财产就只能是小孩、武器和最低限度的其他一些便于携带的小件必需品。你在变换营地时不能有陶器和印刷机之类的累赘。这种实际困难或许可以说明何以有些技术出现得惊人地早,接着停了很长时间才有了进一步的发展。

总结

  1. 发明常常是需要之母,而不是相反。
  2. 不接受新事物,很可能会被征服并被取而代之。
  3. 日本放弃枪支;
  4. 定居生活的意义;

总结(重点!!!)

  • 现在,让我们来总结一下,粮食生产开始的时间、技术传播的障碍和人口的多寡这3大因素的变化,是怎样直接导致我们所看到的各大陆之间在技术发展方面的差异的。
  • 欧亚大陆(实际上也包括北非在内)是世界上最大的陆块,包含有数量最多的互相竞争的社会。它也是最早开始拥有粮食生产的两个中心的陆块,这两个中心就是新月沃地和中国。它的东西向的主轴线,使欧亚大陆一个地区采用的许多发明得以较快地传播到欧亚大陆具有相同纬度和气候的其他地区的社会。它的沿次轴线(南北轴线)的宽度,同美洲巴拿马地峡的狭窄形成了对照。它没有把美洲和非洲的主轴线切断的那种严峻的生态障碍。因此,对技术传播的地理和生态障碍,在欧亚大陆没有在其他大陆那样严峻。由于所有这些因素,后更新世技术的加速发展,在欧亚大陆开始得最早,从而导致了本地最大的技术积累。
  • 北美洲和南美洲在传统上被看作是两个不同的大陆,但它们连接在一起已有几百万年之久,有着类似的历史问题,因此可以把它们放在一起来考虑,以便和欧亚大陆相比较。美洲构成了世界上第二大的陆块,但比欧亚大陆小得多。不过,它们在地理和生态上却支离破碎:巴拿马地峡宽不过40英里,等于在地理上把美洲给腰斩了,就像这个地峡上的达里安雨林和墨西哥北部的沙漠在生态上所做的那样。墨西哥北部的沙漠把中美洲人类的先进社会同北美洲的社会分隔开了,而巴拿马地峡则把中美洲的先进社会同安第斯山脉地区和亚马孙河地区的社会分隔开了。此外,美洲的主轴线是南北走向,从而使大部分的技术传播不得不逆纬度(和气候)的梯度而行,而不是在同一纬度内发生。例如,轮子是在中美洲发明的,而美洲驼是不迟于公元前3000年在安第斯山脉中部驯化的,但过了5000年,美洲的这唯一的役畜和唯一的轮子仍然没有碰头,虽然中美洲玛雅社会同印加帝国北部边界之间的距离(1200英里)比同时享有轮子和马匹的法国同中国之间6000英里的距离要短得多。在我看来,这些因素足以说明美洲在技术上落后于欧亚大陆这个事实。
  • 非洲撒哈拉沙漠以南地区是世界上第三大的陆块,但比美洲小得多。在人类的大部分历史中,到欧亚大陆比到美洲容易多了,但撒哈拉沙漠仍然是一个主要的生态障碍,把非洲撒哈拉沙漠以南地区同欧亚大陆和北非隔开。非洲的南北轴线造成了欧亚大陆与非洲撒哈拉沙漠以南地区之间以及撒哈拉沙漠以南地区本身内部技术传播的又一障碍。作为后一障碍的例子,陶器和炼铁术出现在或到达非洲撒哈拉沙漠以南的萨赫勒地带(赤道以北),至少同它们到达西欧一样早。然而,陶器直到公元元年才到达非洲的南端,而冶金术在从欧洲由海路到达非洲南端时,还不曾由陆路传播到那里。最后,澳大利亚是最小的一个大陆。澳大利亚大部分地区雨量稀少,物产贫乏,因此,就其所能养活的人口来说,它实际上就显然甚至更小。它也是一个最孤立的大陆。加之,粮食生产也从来没有在澳大利亚本地出现过。这些因素加在一起,就使澳大利亚成为唯一的在现代仍然没有金属制品的大陆。
  • 人口多意味着搞发明的人和互相竞争的社会也多。
  • 各大陆之间在面积、人口、技术传播的难易程度和粮食生产的开始时间等方面存在着差异,而这些差异又对技术的出现产生了种种影响,但所有这些影响都被夸大了,因为技术可以催化自身。欧亚大陆在开始时的巨大优势因此就变成了自1492年[插图]起的巨大的领先优势——其原因是欧亚大陆独特的地理条件,而不是那里的人特别聪明。我所认识的那些新几内亚人中就有潜在的爱迪生。不过,他们把自己的聪明才智用于解决适合自己情况的技术问题:不靠任何进口物品而在新几内亚丛林中生存的问题,而不是发明留声机的问题。

第十四章 从平等主义到盗贼统治

  • 有些社会最早实现了集中统一的政府和有组织的宗教,而这些社会的子孙后代最后主宰了现代世界。政府和宗教就是这样结合起来发挥了作用,它们是产生历史最广泛模式的4组主要的直接动力之一,另外3组动力是病菌、文字和技术。

  • 超越族群的那些阶段中的第一个阶段是部落。部落与族群的区别是它比较大(一般有几百人,而不是几十人),而且通常有固定的居住地。然而,有些部落,甚至有些由酋长管辖的部落,却是由随季节而迁移的牧人组成的部落是由不止一个的得到正式承认的亲属群体所组成,这些群体称为氏族,氏族之间互相通婚。土地属于某个氏族,不属于整个部落。然而,部落的人数仍然很少,每一个人都知道另外每一个人的名字和他的各种亲属关系。对人类其他类型的群体来说也是一样,在一个群体里如要做到彼此了解,这个群体的人数最多似乎以“几百人”为宜。

  • 早期的国王本人就是国家宗教的领袖,否则就另外设立一个大祭司。美索不达米亚的寺庙不但是宗教活动的中心,而且也是经济再分配、文字和手工技术的中心。

  • 同样明显的是,国家在与较简单的实体发生冲突时所以能取得胜利,部分原因是国家拥有武器和其他技术方面的优势,同时也拥有人口数量上的优势。但酋长管辖地和国家还有另外两个固有的潜在优势。首先,中央决策者拥有集中军队和资源的优势。其次,许多国家的官方宗教和爱国热忱使它们的军队在作战中视死如归,心甘情愿地为国捐躯。在现代国家中,乐于为国牺牲的思想由我们的学校、教会和政府大力灌输给我们公民,使我们忘记了它标志着同以往人类历史的彻底决裂。

  • “几百人”是个界限,在这个界限内每个人能够认识另外每个人,一旦超过这个界限,越来越多的两人组合就成了一对对没有亲属关系的陌生人了。当陌生人打架时,在场的人很少会是打架双方的朋友或亲属,没有什么私利要他们去制止打架。相反,如果许多旁观者是打架一方的朋友或亲属,他们就会站在他的一边,这样,本来是两个人的打架结果就逐步升级为一场乱哄哄的群殴。因此,一个继续把冲突交给全体成员去解决的大型社会必然会分崩离析。随着人口的增加,共同决策越来越难以做到。

  • 部落之间进行征服或兼并以达到了酋长管辖地的规模,酋长管辖地之间进行征服或兼并以达到了国家的规模,国家之间进行征服或兼并以形成帝国。更一般地说,大的单位可能拥有对各个小的单位的某种优势。小型社会的领袖和大型社会的领袖一样,珍惜自己的独立和特权。合并的发生不外乎下面的两种方式之一:在外力的威胁下合并,或通过实际的征服。

  • 战败民族的命运取决于人口的密度,这有3种可能的后果:凡是人口密度很低的地方,就像在狩猎采集族群占据的地区所常见的那样,战败群体的幸存者只要离开他们的敌人远一点就行了。新几内亚和亚马孙河地区游牧部族之间战争的结果往往就是这样。凡是人口密度中等的地方,就像粮食生产部落占据的地区那样,没有大片空旷的地方可以让战败族群的幸存者逃避。但是,

  • 没有集约型粮食生产的部落社会不使用奴隶,也不能生产出可以作为很大一部分贡品的足够的剩余粮食。因此,战败部落的幸存者对胜利者来说毫无用途,除非娶他们的女人为妻。战败的男人都被杀死了,他们的地盘也可能为胜利者所占有。

  • 凡是人口密度高的地方,就像国家或酋长管辖地所占有地区那样,被打败的人仍然无处可逃,但胜利者不杀死他们而有了利用他们的两种选择。由于酋长管辖地社会和国家社会已出现了经济专业化,被打败的人可以当奴隶来使用,就像在《圣经》时代通常发生的那样。或者,由于许多这样的社会已经有了能够生产大量剩余粮食的集约型粮食生产系统,胜利者可以让战败者仍然从事原来的劳作,只是剥夺了他们的政治自主权,要他们定期地用粮食或货物来纳贡,并把他们的社会合并入获胜的国家或酋长管辖地。

  • 粮食生产及社会之间的竞争与混合,产生了征服的直接原动力:病菌、文字、技术和中央集权的政治组织。这些原动力往往是相互联系着一起出现的,不过这种联系并不是绝对的。

总结

  1. 中央集权政治组织
  2. 精神控制手段
  3. 大型社会必须要有复杂组织主要有四个原因:陌生人之间的人际冲突调节,共同决策越来越难做到,货物交换变得复杂,土地面积不变人口的增加使得人们从别的地区获得需要品。

第十五章 耶利的族人

  • 澳大利亚是最干燥、最小、最平坦、最贫瘠、气候最变化无常、生物品种最稀少的大陆。
  • 由于新几内亚人是粮食生产者,不是以狩猎采集为生的人,所以他们的平均人口密度比澳大利亚人高得多:新几内亚的面积只有澳大利亚的十分之一,但它所养活的当地人口却数倍于澳大利亚。
  • 新几内亚有几个不利于它的生物因素和地理因素。首先,虽然本地的粮食生产的确是在新几内亚高原地区出现的,但我们已在第八章中看到,它产出的蛋白质很少。当地的主食都是低蛋白的根用作物,而仅有的驯化动物(猪和鸡)的产量又太低,不能为人们提供大量的蛋白质。既然无法把猪或鸡套起来拉车,高原地区的居民除了两臂力气外,仍然没有其他动力来源,而且也未能发展出流行疾病以击退终于侵入的欧洲人。对高原地区人口数量的第二个限制,是能够利用的土地面积有限:新几内亚高原地区只有几处宽阔的谷地(最显著的是瓦吉谷地和巴利姆谷地)能够养活稠密的人口。第三个限制是这样的现实,即4000英尺至9000英尺之间的中间山地森林地带,是新几内亚唯一适于集约型粮食生产的高程地带。在9000英尺以上的新几内亚高山生境根本没有任何粮食生产,在4000英尺至1000英尺之间的山坡上几乎没有什么粮食生产,而在低地地区也只有低密度的刀耕火种农业。因此,在不同海拔高度专门从事不同类型粮食生产的一些社会之间对粮食的大规模经济交换,在新几内亚从未发展起来。在安第斯山脉、阿尔卑斯山脉和喜马拉雅山脉,这种交换不但向各个海拔高度的人提供一种比较均衡的饮食,从而增加了这些地区的人口密度,而且也促进了地区的经济和政治一体化。
  • 任何在澳大利亚本地出现的粮食生产,都可能会由于可驯化的动植物的缺乏以及土壤贫瘠和气候恶劣而受到限制。流浪的生活、狩猎采集的生活方式以及对住所和财物的最小的投资,是因受澳大利亚厄尔尼诺南移影响而无法预知可以得到何种资源时的明智的适应行为。在当地条件恶化时,土著居民只是迁往一个暂时条件较好的地区。

总结

  • 新几内亚地区环境比澳大利亚大陆好,相对比较”先进”,但还是比不上亚欧大陆。
  • 总结一下,新几内亚社会发展落后的几大原因:一是可供驯化的动植物品种少且蛋白质低;二是可利用的土地资源少;三是(基于以上原因)人口少密度低,且分散化严重,彼此争斗不休;四是外部地理的隔绝,难以传入借鉴先进的技术和思想。

第十六章 中国是怎样成为中国人的中国的

  • 近代民族大熔炉这一普遍现象的重大例外是世界上人口最多的国家——中国。
  • 中国过去也曾经是形形色色、变化多端的,就像其他所有人口众多的国家现在仍然表现出来的那样。中国的不同之处仅仅在于它在早得多的时候便已统一了。
  • 虽然中国的南北梯度妨碍了作物的传播,但这种梯度在中国不像在美洲或非洲那样成为一种障碍,因为中国的南北距离较短;同时也因为中国的南北之间既不像非洲和墨西哥北部那样被沙漠阻断,也不像中美洲那样被狭窄的地峡隔开。倒是中国由西向东的大河(北方的黄河、南方的长江)方便了沿海地区与内陆之间作物和技术的传播,而中国东西部之间的广阔地带和相对平缓的地形最终使这两条大河的水系得以用运河连接起来,从而促进了南北之间的交流。所有这些地理因素促成了中国早期的文化和政治统一,而西方的欧洲虽然面积和中国差不多,但地势比较高低不平,也没有这样连成一体的江河,所以欧洲直到今天都未能实现文化和政治的统一。
  • 在中国,有些新事物是由南向北传播的,尤其是铁的冶炼和水稻的栽培。但主要的传播方向是由北向南。这个趋向在文字上表现得最为明显:欧亚大陆西部曾产生过太多的书写系统,如苏美尔的楔形文字、埃及的象形文字、赫梯文字[插图]、弥诺斯文字和闪语字母。中国则不同,它只产生了一种得到充分证明的书写系统。它在华北得到完善,并流传各地,预先制止了任何其他不成熟的书写系统的发展或取而代之,最后演化为今天仍在中国使用的文字。
  • 中国的3个最早的王朝——夏、商、周都是在公元前第二个一千年间在华北兴起的。现存的公元前第一个千年的著作表明,当时的华夏族就已常常(就像今天许多人仍然在做的那样)觉得在文化上比非华夏族的“野蛮人”优越,而华北人也常常甚至把华南人也看作野蛮人。
  • 由于东亚最早的农民所取得的成就,中国成了中国人的中国。

总结

  1. 南北距离较短,且无地理隔离
  2. 很早就文化统一
  3. 有粮食生产

第十七章 驶向波利尼西亚的快艇

  • 南岛语系的4个语族中有3个集中在台湾,这表明台湾就是今天各地南岛语的故乡,在过去几千年的大部分时间里,这些语言一直在台湾使用,因此有最长的时间来产生分化。这样看来,从马达加斯加到复活节岛,所有其他南岛语可能都起源于台湾向外的人口扩张。
  • 南岛人在新几内亚地区扩张的结果与在印度尼西亚和菲律宾扩张的结果全然不同。在印度尼西亚和菲律宾,当地的人口消失了——大概是被这些入侵者赶走、杀死、用传染病害死或甚至同化了。而在新几内亚,当地的人口多半把这些入侵者挡在外面。
  • 中国的华南人发展了本地的粮食生产和技术,接受了华北的文字、更多的技术和政治组织,又进而向热带东南亚和台湾移民,大规模地取代了这些地区的原有居民。
  • 与澳大利亚和美洲不同,东亚和大多数太平洋岛屿仍然为东亚民族和太平洋民族所占有。

总结

  • 学会粮食生产的重要性。可以很大程度确保最终不会被替代。

第十八章 两个半球的碰撞

  • 过去13000年中最大的人口更替是新、旧大陆社会之间新近的碰撞引起的。我们在第三章看到,这种碰撞的最富戏剧性也最具决定性的时刻,是皮萨罗的小小西班牙军队俘虏了印加帝国皇帝阿塔瓦尔帕。阿塔瓦尔帕是最大、最富有、人口最多、管理和技术最先进的印第安国家的独裁统治者,他的被俘成了欧洲人征服美洲的象征,因为造成这一事件的相同的各种近似因素,也是欧洲人征服其他印第安社会的部分原因。
  • 为什么是欧洲人到达了印第安人的国家并征服了它,而不是相反?我们讨论的起始点就是把欧亚大陆社会和印第安社会作一比较,时间是到公元1492年即哥伦布“发现”美洲的那一年为止。
  • 粮食生产方面的这些差异,构成了欧亚大陆社会与印第安社会之间差异的一个重要的终极原因。在由此而产生的实现征服的近似因素中,最重要的因素包括病菌、技术、政治组织和文字方面的差异。
  • 其中与粮食生产方面的差异关系最直接的差异是病菌。有些传染病经常光顾人口拥挤的欧亚大陆社会,许多欧亚大陆人因而逐步形成了免疫力或遗传抵抗力。这些传染病包括历史上所有最致命的疾病:天花、麻疹、流行性感冒、瘟疫、肺结核、斑疹伤寒、霍乱、疟疾和其他疾病。对照这个令人望而生畏的疾病名单,唯一可以有把握归之于哥伦布以前印第安人社会的群众传染病是非梅毒密螺旋体病。
  • 大陆之间在有害的病菌方面的这种差异竟是来自有用的牲畜方面的差异。在拥挤的人类社会引起传染病的大多数病菌,是从引起家畜传染病的那些十分相似的祖代病菌演化而来的,而在大约10000年前,粮食生产者就已开始每天同这些家畜进行密切的接触了。
  • 在帮助欧洲征服美洲的一些直接因素中,可与病菌相提并论的是技术的各方面的差距。这些差距归根到底是由于欧亚大陆有历史悠久得多的依靠粮食生产的人口稠密、经济专业化、政治集中统一、相互作用、相互竞争的社会。
  • 为什么所有主要发展结果的发展轨迹在年代上美洲要晚于欧亚大陆?这有4组原因:起步晚,可用于驯化的野生动植物系列比较有限,较大的传播障碍,以及稠密的人口在美洲生活的地区可能比在欧亚大陆小,或者可能比在欧亚大陆孤立。
  • 与欧亚大陆始终如一的东西宽度不同,新大陆在中美洲的那一段特别是在巴拿马变窄了。尤其是,美洲被一些不适于粮食生产也不适于稠密人口的地区分割开来。
    这些生态障碍包括:把中美洲社会同安第斯山脉地区和亚马孙河地区社会分隔开来的巴拿马地峡雨林;把中美洲社会同美国西南部和东南部社会分隔开来的墨西哥北部沙漠;把美国西南部同东南部分隔开来的得克萨斯州干旱地区;把本来可能适于粮食生产的美国太平洋沿岸地区隔开的沙漠和高山。因此,在中美洲、美国东部、安第斯山脉地区和亚马孙河地区这些新大陆的中心之间,完全没有家畜、文字和政治实体方面的交流,以及只有在作物和技术方面的有限的缓慢的交流。
  • 起源于东地中海的字母从英格兰到印度尼西亚,传遍了欧亚大陆的各个复杂社会,只有东亚地区是例外,因为中国书写系统派生出来的文字已在那里占主导地位。
  • 我们已经找到了3组有利于欧洲人入侵美洲的终极因素:欧亚大陆人类定居时间长的领先优势;由于欧亚大陆可驯化的野生植物尤其是动物的资源比较丰富而引起的比较有效的粮食生产;欧亚大陆范围内对传播交流的地理和生态障碍并非那样难以克服。
  • 在不适宜大部分粮食生产的纬度过高地区,在欧洲穷国之一的无力支持下,几个古挪威人手中的铁器没有斗得过爱斯基摩人和印第安狩猎采集族群手中的石器、骨器和木器,要知道这后两种人是世界上掌握在北极地区生存技巧的最杰出的大师!在适合欧洲的粮食生产和欧洲人生理机能的气候最温和的地区,人口众多的印第安社会被消灭了。

总结

  • 粮食生产差异->病菌差异
  • 在帮助欧洲征服美洲的一些直接因素中,可与病菌相提并论的是技术的各方面的差距。这些差距归根到底是由于欧亚大陆有历史悠久得多的依靠粮食生产的人口稠密、经济专业化、政治集中统一、相互作用、相互竞争的社会。
  • 3组有利于欧洲人入侵美洲的终极因素:欧亚大陆人类定居时间长的领先优势;由于欧亚大陆可驯化的野生植物尤其是动物的资源比较丰富而引起的比较有效的粮食生产;欧亚大陆范围内对传播交流的地理和生态障碍并非那样难以克服。

第十九章 非洲是怎样成为黑人的非洲的

  • 在白人殖民主义者来到之前,已经生活在非洲的不仅有黑人,还有(我们将要看到)世界上6大人种中的5种,其中3种只生活在非洲。世界上的语言,有四分之一仅仅在非洲才有人说。没有哪一个大陆在人种的多样性方面可以与非洲相提并论。

  • 非洲多样化的人种来自它的多样化的地理条件和悠久的史前史。非洲是唯一的地跨南北温带的大陆,同时它也有几处世界上最大的沙漠、最大的热带雨林和最高的赤道山脉。人类在非洲生活的时间比在任何其他地方都要长得多。

  • 到公元1000年,这5个主要的人类群体已经把非洲当作自己的家园。外行人不严密地把他们称为黑人、白人、非洲俾格米人、科伊桑人和亚洲人。

  • 地球上所有人类群体只要和其他每一个群体中的人接触,就会发生婚配关系。

  • 俾格米人的家园被淹没在入侵的黑人农民的汪洋大海之中,硕果仅存的一些俾格米人采用了这些农民的语言,而他们原来的语言只在某些词和发音上留下了一些蛛丝马迹。

  • 科伊桑人和俾格米人之所以未能发展出农业,不是由于他们没有农民的资格,而仅仅是由于碰巧非洲南部的野生植物大都不适于驯化。无论是班图农民还是白人农民,尽管他们继承了几千年的农业经验,后来还是没有能把非洲南部的本地植物培育成粮食作物。

  • 至于非洲的驯化动物,概括地介绍起来可以比介绍植物快得多,因为那里的驯化动物实在太少。

  • 现代南非的问题至少一部分源自地理上的偶然因素。好望角科伊桑人的家园碰巧很少有适于驯化的野生植物;班图人碰巧从他们5000年前的祖先那里继承了适应夏雨的作物;而欧洲人碰巧从他们近10000年前的祖先那里继承了适应冬雨的作物。

  • 正如他们与印第安人遭遇时的情况一样,进入非洲的欧洲人拥有三重优势:枪炮和其他技术、普及的文化以及为维持探险和征服的昂贵计划所必不可少的政治组织。从历史上看,所有这三者都来自粮食生产的发展。但粮食生产在非洲撒哈拉沙漠以南地区被延误了(与欧亚大陆相比),其原因是非洲缺少可以驯化的本地动植物物种,它的适于本地粮食生产的小得多的面积,以及它的妨碍粮食生产和发明的传播的南北轴向。第二个因素是非洲撒哈拉沙漠以南地区和欧亚大陆之间在可驯化的植物方面的一种虽然不是那样极端但也相当大的差异。第三个因素是非洲的面积仅及欧亚大陆的面积的一半左右。

  • 总之,欧洲在非洲的殖民并不像某些白人种族主义者所认为的那样与欧洲民族和非洲民族本身之间的差异有关。恰恰相反,这是由于地理学和生物地理学的偶然因素所致——特别是由于这两个大陆之间不同的面积、不同的轴线方向和不同的动植物品种所致。就是说,非洲和欧洲的不同历史发展轨迹归根到底来自它们之间的“不动产”的差异。

  • 非洲历史悠久,是人类生活时间最长的大陆,拥有世界上最大的沙漠、最大的热带雨林和最高的赤道山脉,人种多样化,世界上6大人种有5种生活在非洲(其中3种只生活在非洲),语言、文化也是世界最复杂的。但非洲过去没有文字,使得我们很难正确还原非洲历史。

  • 非洲的5个主要人类群体:黑人、白人、俾格米人、科伊桑人、亚洲人,在1000年已经定居在非洲。其中俾格米人与黑人一样有着深色皮肤和浓密头发,但身材矮小得多、批复为红色较多黑色较少、体毛较多、前额眼镜和牙齿较突出,分布在中非的雨林中,大多过着狩猎采集生活;科伊桑人以前分布在非洲南部,他们皮肤微黄,头发浓密且卷曲,由于被欧洲殖民者入侵,科伊桑人数量大大减少,幸存者与欧洲人生下混血种;非洲白人主要分布在北部,因为与近东和欧洲邻近地区往来较多。

  • 非洲落后于欧亚大陆的原因与美洲类似:缺乏可驯化的动物,驯化的植物无法大规模种植,撒哈拉沙漠阻止了南北的传播,大陆面积较小。归根到底也是地理学和生物地理学的偶然因素所致。

  • 非洲是怎样成为黑人的非洲的:天意。黑人的这个部落在恰当的时间和恰当的地点得到了恰当的作物,促进了人口和其他一切的增长,开始了“淹没”。

总结

  • 非洲有粮食生产(黑人),但有地理原因,没能发展壮大。所以也没被完全替换。

尾声 人类史作为一门科学的未来

  • 耶利的问题触及了人类现状的实质,也是更新世后人类历史的关键所在。既然我们已经完成了这次对各大陆的短暂的巡视,我们将怎样来回答耶利呢?我会对耶利这样说:各大陆民族长期历史之间的显著差异,不是源自这些民族本身的天生差异,而是源自他们环境的差异。

  • 耶利的问题触及了人类现状的实质,也是更新世后人类历史的关键所在。既然我们已经完成了这次对各大陆的短暂的巡视,我们将怎样来回答耶利呢?我会对耶利这样说:各大陆民族长期历史之间的显著差异,不是源自这些民族本身的天生差异,而是源自他们环境的差异。我猜想,如果在更新世晚期能够使澳大利亚土著人口和欧亚大陆土著人口互换位置,那么,原来的澳大利亚土著现在可能不但占领了欧亚大陆,而且也占领了美洲和澳大利亚的大部分地区,而原来的欧亚大陆土著现在可能已沦为澳大利亚的一些遭受蹂躏的零星分散的人口。对于这种说法,你一开始可能会认为毫无意义而不屑一顾,因为这个实验是想象出来的,而我所说的那种结果也是不可能被证明的。但历史学家却能用回溯试验法对有关的假说进行评价。

  • 第一组差异是各大陆在可以用作驯化的起始物种的野生动植物品种方面的差异。这是因为,粮食生产之所以具有决定性的意义,在于它能积累剩余粮食以养活不从事粮食生产的专门人材,同时也在于它能形成众多的人口,从而甚至在发展出任何技术和政治优势之前,仅仅凭借人多就可以拥有军事上的优势。由于这两个原因,从小小的不成熟的酋长管辖地阶段向经济上复杂的、社会上分层次的、政治上集中的社会发展的各个阶段,都是以粮食生产为基础的。但大多数野生的动植物品种证明是不适于驯化的:粮食生产的基础一直是比较少的几种牲畜和作物。原来,各大陆在可以用于驯化的野生动植物的数量方面差异很大,因为各大陆的面积不同,而且在更新世晚期大型哺乳动物灭绝的情况也不同。大型哺乳动物灭绝的情况,在澳大利亚和美洲要比在欧亚大陆或非洲严重得多。因此,就生物物种来说,欧亚大陆最为得天独厚,非洲次之,美洲又次之,而澳大利亚最下,就像耶利的新几内亚那种情况(新几内亚的面积为欧亚大陆的七十分之一,而且其原来的大型哺乳动物在更新世晚期即已灭绝)。

  • 在每一个大陆,动植物的驯化集中在只占该大陆总面积很小一部分的几个条件特别有利的中心地。就技术创新和政治体制来说,大多数社会从其他社会获得的要比它们自己发明的多得多。因此,一个大陆内部的传播与迁移,对它的社会的发展起着重要的促进作用,而从长远来看,由于毛利人的新西兰火枪战争以如此简单的形式所揭示的过程,这些社会又(在环境许可的情况下)分享彼此的发展成果。就是说,起初缺乏某种有利条件的社会或者从拥有这种条件的社会那里得到,或者(如果做不到这一点)被其他这些社会所取代。

  • 因此,第二组因素就是那些影响传播和迁移速度的因素,而这种速度在大陆与大陆之间差异很大。在欧亚大陆速度最快,这是由于它的东西向主轴线和它的相对而言不太大的生态与地理障碍。对于作物和牲畜的传播来说,这个道理是最简单不过的,因为这种传播大大依赖于气候因而也就是大大依赖于纬度。同样的道理也适用于技术的发明,如果不用对特定环境加以改变就能使这些发明得到最充分的利用的话。传播的速度在非洲就比较缓慢了,而在美洲就尤其缓慢,这是由于这两个大陆的南北向主轴线和地理与生态障碍。在传统的新几内亚,这种传播也很困难,因为那里崎岖的地形和高山漫长的主脉妨碍了政治和语言统一的任何重大进展。

  • 与影响大陆内部传播的这些因素有关的,是第三组影响大陆之间传播的因素,这些因素也可能有助于积累一批本地的驯化动植物和技术。大陆与大陆之间传播的难易程度是不同的,因为某些大陆比另一些大陆更为孤立。在过去的6000年中,传播最容易的是从欧亚大陆到非洲撒哈拉沙漠以南地区,非洲大部分牲畜就是通过这种传播得到的。但东西两半球之间的传播,则没有对美洲的复杂社会作出过任何贡献,这些社会在低纬度与欧亚大陆隔着宽阔的海洋,而在高纬度又在地形和适合狩猎采集生活的气候方面与欧亚大陆相去甚远。对于原始的澳大利亚来说,由于印度尼西亚群岛的一道道水上障碍把它同欧亚大陆隔开,欧亚大陆对它的唯一的得到证明的贡献就是澳洲野狗。

  • 第四组也是最后一组因素是各大陆之间在面积和人口总数方面的差异。更大的面积或更多的人口意味着更多的潜在发明者,更多的互相竞争的社会,更多的可以采用的发明创造——以及更大的采用和保有发明创造的压力,因为任何社会如果不这样做就往往会被竞争对手所淘汰。

  • 非洲的俾格米人和其他许多被农民取代的狩猎采集群体,就曾碰到这样的命运。相反的例子是格陵兰岛上顽固保守的古挪威农民,他们也碰到了被爱斯基摩狩猎采集族群所取代的命运,因为在格陵兰的条件下,这些爱斯基摩人的生存方法和生存技术都比这些古挪威人优越得多。在全世界的陆块中,欧亚大陆的面积最大,相互竞争的社会的数量也最多,澳大利亚和新几内亚在这方面就差得多,而塔斯马尼亚更是瞠乎其后。美洲的总面积虽然很大,但却在地理上和生态上支离破碎,实际上就像几个没有紧密联系的较小的大陆。这4组因素构成了环境的巨大差异,这些差异可以客观地用数量来表示,而且不会引起争议。

  • 所有的人类社会都拥有有发明才能的人。事情恰恰是有些环境比另一些环境提供了更多的起始物种和利用发明的更有利的条件。

  • 在欧亚大陆范围内,为什么是欧洲社会,即在美洲和澳大利亚殖民的那些社会,而不是新月沃地的社会或中国和印度的社会,在技术上领先,并在现代世界上占据政治和经济的支配地位?如果一个历史学家生活在从公元前8500年到公元1450年的任何一段时间内,如果他当时试图预测未来的历史发展轨迹,他肯定会认为,欧洲最终的支配地位是最不可能发生的结果,因为欧洲在过去那1万年的大部分时间里是旧大陆的那3个地区中最落后的一个地区。

  • 从公元前8500年开始,直到公元500年后希腊与意大利的先后兴起这一段时间里,欧亚大陆西部几乎所有的重大发明——动物驯化、植物驯化、文学、冶金术、轮子、国家等等——都是在新月沃地或其附近出现的。在水磨于大约公元900年后大量传播之前,阿尔卑斯山以西或以北的欧洲没有对旧大陆的技术或文明作出过任何有意义的贡献,它只是一个从地中海以东、新月沃地和中国接受发展成果的地方。甚至从公元1000年到1450年,科学和技术绝大多数都是从印度与北非之间的伊斯兰社会传入欧洲,而不是相反。就在那几个世纪中,中国在技术上走在世界的前列,几乎和新月沃地一样早地开始了粮食生产。那么,为什么新月沃地和中国把它们几千年的巨大的领先优势最后让给了起步晚的欧洲?当然,人们可以指出促使欧洲兴起的一些直接因素:它的商人阶级、资本主义和对发明的专利保护的逐步形成,它未能产生的专制独裁君主和使人不堪重负的税收,以及它的希腊——犹太教——基督教的批判经验主义调查研究的传统。不过,对于所有这些直接原因,人们一定会提出关于终极原因的问题:为什么这些直接因素出现在欧洲,而不是出现在中国或新月沃地?

  • 新月沃地和东地中海社会不幸在一个生态脆弱的环境中兴起。它们破坏了自己的资源基础,无异于生态自杀。从东方(新月沃地)最古老的社会开始,每一个东地中海社会都在轮流地自挖墙脚,而就在这个过程中,权力西移了。欧洲北部和西部没有遭到同样的命运,这不是因为那里的居民比较明智,而是因为他们运气好,碰巧生活在一个雨量充沛、植被再生迅速的好环境里。在粮食生产传入7000年之后,欧洲北部和西部的广大地区今天仍能维持高产的集约农业。事实上,欧洲是从新月沃地得到它的作物、牲畜、技术和书写系统的,而新月沃地后来反而使自己失去了作为一个主要的权力和发明中心的地位。这就是新月沃地失去它对欧洲的巨大的早期领先优势的情形。

  • 为什么中国也失去了这种领先优势呢?中国的落后起初是令人惊讶的,因为中国拥有无可置疑的有利条件:粮食生产的出现似乎同在新月沃地一样早;从华北到华南,从沿海地区到西藏高原的高山地区的生态多样性,产生了一批不同的作物、动物和技术;幅员广阔,物产丰富,养活了这一地区世界上最多的人口;一个不像新月沃地那样干旱或生态脆弱的环境,使中国在将近10000年之后仍能维持高产的集约农业,虽然它的环境问题日益增多,而且比欧洲西部严重。

  • 这些有利条件和领先优势使得中世纪的中国在技术上领先世界。中国一长串重大的技术第一包括铸铁、罗盘、火药、纸、印刷术以及前面提到过的其他许多发明。它在政治权力、航海和海上管制方面也曾在世界上领先。15世纪初,它派遣宝船队[插图]横渡印度洋,远达非洲东海岸,每支船队由几百艘长达400英尺的船只和总共28000名船员组成。这些航行在时间上也比哥伦布率领3艘不起眼的小船渡过狭窄的大西洋到达美洲东海岸要早好几十年。法斯科·达·伽马率领他的3艘不起眼的小船,绕过非洲的好望角向东航行,使欧洲开始了对东亚的殖民。为什么中国的船只没有在伽马之前绕过好望角向西航行并在欧洲殖民?为什么中国的船只没有横渡太平洋到美洲西海岸来殖民?简而言之,为什么中国把自己在技术上的领先优势让给原先十分落后的欧洲呢?

  • 中国西洋舰队的结局给了我们一条线索。从公元1405年到1433年,这些船队一共有7次从中国扬帆远航。后来,由于世界上任何地方都可能发生的局部政治变化,船队出海远航被中止了:中国朝廷上的两派(太监和反对他们的人)之间发生了权力斗争。前一派支持派遣和指挥船队远航。因此,当后一派在权力斗争中取得上风时,它停止派遣船队,最后还拆掉船坞并禁止远洋航运。这一事件使我们想起了19世纪80年代伦敦的扼杀公共电灯照明的立法、第一次和第二次世界大战之间美国的孤立主义和许多国家全都由于局部的政治争端而引发的许多倒退措施。但在中国,情况有所不同,因为那整个地区在政治上是统一的。一个决定就使整个中国停止了船队的航行。那个一时的决定竟是不可逆转的,因为已不再有任何船坞来造船以证明那个一时决定的愚蠢,以及用作重建新船坞的中心。

  • 现在来对比一下中国的这些事件,和探险船队开始从政治上分裂的欧洲远航时所发生的事情。克里斯托弗·哥伦布出生在意大利,后来转而为法国的昂儒公爵服务,又后来改事葡萄牙国王。哥伦布曾请求国王派船让他向西航行探险。他的请求被国王拒绝了,于是他就求助于梅迪纳——塞多尼亚公爵,也遭到了拒绝,接着他又求助于梅迪纳——塞利伯爵,依然遭到拒绝,最后他又求助于西班牙的国王和王后,他们拒绝了他的第一次请求,但后来在他再次提出请求时总算同意了。如果欧洲在这头3个统治者中任何一个的统治下统一起来,它对美洲的殖民也许一开始就失败了。事实上,正是由于欧洲是分裂的,哥伦布才成功地于第五次在几百个王公贵族中说服一个来赞助他的航海事业。一旦西班牙这样开始了欧洲对美洲的殖民,其他的欧洲国家看到财富滚滚流入西班牙,立刻又有6个欧洲国家加入了对美洲殖民的行列。对于欧洲的大炮、电灯照明、印刷术、小型火器和无数的其他发明,情况也是如此:每一项发明在欧洲的一些地方由于人们的习性起先或者被人忽视,或者遭人反对,但一旦某个地区采用了它,它最后总能传播到欧洲的其余地区。

  • 欧洲分裂所产生的这些结果与中国统一所产生的结果形成了鲜明的对比。除了作出停止海外航行的决定外,中国的朝廷还作出停止其他一些活动的决定:放弃开发一种精巧的水力驱动的纺纱机,在14世纪从一场产业革命的边缘退了回来,在制造机械钟方面领先世界后又把它拆毁或几乎完全破坏了,以及在15世纪晚期以后不再发展机械装置和一般技术。统一的这些潜在的有害影响在现代中国又死灰复燃,特别是20世纪60年代和70年代“文化大革命”中的那种狂热,当时一个或几个领导人的决定就把全国的学校系统关闭了5年之久。

  • 中国的经常统一与欧洲的永久分裂都由来已久。

  • 现代中国的最肥沃地区于公元前221年第一次在政治上统一起来,并从那时以来的大部分时间里一直维持着这个局面。中国自有文字以来就一直只有一种书写系统,长期以来只有一种占支配地位的语言,以及2000年来牢固的文化统一。相比之下,欧洲与统一始终相隔十万八千里:14世纪时它仍然分裂成1000个独立的小国,公元1500年有小国500个,20世纪80年代减少到最低限度的25国,而现在就在我写这句话的时候又上升到将近40个国家。欧洲仍然有45种语言,每种语言都有自己的经过修改的字母表,而文化的差异甚至更大。欧洲内部的分歧今天在继续挫败甚至是想要通过欧洲经济共同体(EEC)来实现欧洲统一的并不过分的企图,这就表明欧洲对分裂的根深蒂固的执著。

  • 了解中国把政治和技术的卓越地位让给欧洲的关键所在就是去了解中国的长期统一和欧洲的长期分裂的问题。答案又一次用地图表示出来(见下图)。欧洲海岸线犬牙交错,它有5大半岛,每个半岛都近似孤悬海中的海岛,在所有这些半岛上形成了独立的语言、种族和政府:希腊、意大利、伊比利亚半岛、丹麦和挪威/瑞典。中国的海岸线则平直得多,只有附近的朝鲜半岛才获得了作为单独岛屿的重要性。欧洲有两个岛(大不列颠岛和爱尔兰岛),它们的面积都相当大,足以维护自己的政治独立和保持自己的语言和种族特点,其中的一个岛(大不列颠岛)因为面积大,离欧洲大陆又近,所以成了一个重要的欧洲独立强国。

  • 但即使是中国的两个最大的岛——台湾岛和海南岛,面积都不到爱尔兰岛的一半,这两个岛都不是重要独立的政体;而日本在地理上的孤立地位使它在现代以前一直处于与亚洲大陆的政治隔绝状态,其程度远远超过了大不列颠与欧洲大陆的政治隔绝状态。欧洲被一些高山(阿尔卑斯山脉、比利牛斯山脉、喀尔巴阡山脉和挪威边界山脉)分隔成一些独立的语言、种族和政治单位,而中国在西藏高原以东的山脉则不是那样难以克服的障碍。中国的中心地带从东到西被肥沃的冲积河谷中两条可通航的水系(长江和黄河)连接了起来,从南到北又由于这两大水系(最后有运河连接)之间比较方便的车船联运而成为一体。因此,中国很早就受到了地域广阔的两个高生产力核心地区的决定性影响,而这两个地区本来彼此只有微不足道的阻隔,最终又合并为一个中心。欧洲的两条最大的河流——莱茵河与多瑙河则比较小,在欧洲流经的地方也少得多。与中国不同,欧洲有许多分散的小的核心地区,没有一个大到足以对其他核心地区产生长期的决定性影响,而每一个地区又都是历史上一些独立国家的中心。中国一旦于公元前221年最后获得统一,就再没有任何其他的独立国家有可能在中国出现并长期存在下去。虽然在公元前221年后有几个时期出现了分裂局面,但最后总是重新归于统一。但欧洲的统一就连查理曼[插图]、拿破仑和希特勒这些下定决心的征服者都无能为力;甚至罗马帝国在其鼎盛时期所控制的地区也没有超过欧洲的一半。因此,地理上的四通八达和非常一般的内部障碍,使中国获得了一种初始的有利条件。华北、华南、沿海地区和内陆的不同作物、牲畜、技术和文化特点,为中国的最后统一作出了贡献。例如,黍的栽培、青铜技术和文字出现在华北,而水稻的栽培和铸铁技术则出现在华南。我用本书的很大篇幅着重讨论了在没有难以克服的障碍的情况下技术的传播问题。但中国在地理上的四通八达最后却成了一个不利条件,某个专制君主的一个决定就能使改革创新半途而废,而且不止一次地这样做了。相比之下,欧洲在地理上的分割形成了几十个或几百个独立的、相互竞争的小国和发明创造的中心。如果某个国家没有去追求某种改革创新,另一个国家会去那样做的,从而迫使邻国也这样去做,否则就会被征服或在经济上处于落后地位。欧洲的地理障碍足以妨碍政治上的统一,但还不足以使技术和思想的传播停止下来。欧洲还从来没有哪一个专制君王能够像在中国那样切断整个欧洲的创造源泉。

  • 这些比较表明,地理上的四通八达对技术的发展既有积极的影响,也有消极的影响。因此,从长远来看,在地理便利程度不太高也不太低而是中等适度的地区,技术可能发展得最快。中国、欧洲,可能还有印度次大陆的过去1000多年的技术发展过程便是例子,它分别表明了高、中、低3种不同程度的地理便利条件所产生的实际效果。

  • 新月沃地的居间的地理位置,控制了把中国和印度与欧洲连接起来的贸易路线,以及中国距离欧亚大陆其他先进的文明国家路途遥远,使中国实际上成为一个大陆内的一个巨大孤岛。中国的相对孤立状态与它先是采用技术后来又排斥技术这种做法有着特别重要的关系,这使人想起了塔斯马尼亚岛和其他岛屿排斥技术的情形(第十三章和第十五章)。不过,这一简略的讨论至少可以表明,环境因素不但与历史的最广泛模式有关,而且也与较小规模和较短时期的历史模式有关。

  • 新月沃地和中国的历史还为现代世界留下了一个有益的教训:环境改变了,过去是第一并不能保证将来也是第一

  • 物理学家和化学家能够在宏观的层次上系统地阐述带有普遍性的决定论的规律,但生物学家和历史学家只能系统地阐述统计学上的趋势。

  • 历史系统尽管有其终极的确定性,但其复杂性和不可预测性是不待言的。描述这种复杂性和不可预测性的另一个办法就是指出,长长的一连串因果关系可能把最后结果同存在于那一科学领域之外的终极原因分开。例如,一颗小行星对地球的撞击可能导致了恐龙的灭绝,但那颗小行星的轨道却是完全由古典力学的定律决定的。但如果有古生物学家生活在6700万年前,他们也不可能预测到恐龙的灭亡迫在眉睫,因为小行星属于一个在其他方面都与恐龙生物学关系疏远的科学领域研究的对象。同样,公元1300年至1500年之间的小冰期也是格陵兰岛上古挪威人灭绝的部分原因,但没有哪个历史学家,也许甚至也没有哪一个现代气候学家能够预测到小冰期的到来。

  • 因此,历史学家在确定人类社会史的因果关系时所碰到的困难,大致上类似于天文学家、气候学家、生态学家、演化生物学家、地质学家和古生物学家所碰到的困难。

日本人乃何许人也

  • 至于阿伊努人,他们独特的相貌也招致了关于其由来和亲缘的众多研究,数量之多超过了地球上任何其他的民族。阿伊努男子胡须浓密,体毛之丰居各人种之首。这个体征,加上其它一些遗传性状如指纹和耳垢类型,使得他们常常被归入不知何故从欧亚东迁最终落脚日本的高加索人种(即所谓白人)。但是,纵观其基因特征,阿伊努人和包括日本人、朝鲜人和冲绳人这些东亚人种还是有瓜葛。
  • 阿伊努人是日本以采集涉猎为生的原住民后代,而日本人则是晚近从亚洲大陆而来的入侵者。
  • 边境之外的日本最北端岛屿北海道和居住在那里的阿伊努涉猎采集者甚至都不被视为日本国的一部分,直到19世纪这里才加入日本。
  • 来自朝鲜的移民确实对现代日本民族作出了巨大贡献,虽然我们尚不能确信起因是因为移民本就人数众多,还是因为数量不多的移民凭借高速人口增长而扩张的结果。阿伊努人的基因更接近日本古代绳纹居民,又掺杂了弥生殖民者和现代日本人的朝鲜基因。
  • 早期的朝鲜编年史告诉我们,不同的王国拥有不同的语言。虽然被新罗打败的两个王国的语言已鲜为人知,但作为战败国之一的高句丽(Koguryo),其留存下的少数几个词汇与古日语词汇的近似程度远胜于现代朝鲜语词汇。在政治统一进程到达三足鼎立的阶段之前,公元前400年的朝鲜语,也许多样性更甚。我怀疑公元前400年传入日本并发展成为现代日语的朝鲜语,与发展成为现代朝鲜语的新罗语大不相同。因此,现代日本人和朝鲜人之间的外形和基因的相似性远超两种语言的近似性,我们对此不应该感到奇怪。
  • 考虑到日本民族和朝鲜民族目前的相互仇视,这个结论很可能在日本和朝鲜都同样不受欢迎。历史给了他们对彼此产生厌恶的充分原因,而其中又尤以朝鲜人对日本人的厌恶为甚。正如阿拉伯人和犹太人,朝鲜人和日本人是血脉相连的民族,但又深陷积怨的迷障。而积怨具有双向的毁灭性,这一点在东亚和中东都是如此。即便日本人和朝鲜人都不愿意承认,事实上,他们就像一对共享了成长岁月的孪生兄弟。在很大程度上,东亚的政治前景取决于他们是否能够成功地重新找回联系彼此的古老纽带。

总结

  1. 日本来自朝鲜的移民
  2. 和日本当地其他族融合并替换

附录 2003后记:《枪炮、病菌与钢铁》今日谈

  • 公元前400年左右,朝鲜农民扩张到了日本西南,继而朝着日本列岛的东北挺进。迁移的农民带来了精细的水稻农业和铁制工具,并与日本原住民(现代阿伊努人的祖先)融合产生了现代日本人,就像扩张的新月沃地农民与欧洲的土著狩猎采集人群融合产生了现代欧洲人。
  • 我认为欧洲超越中国的背后原因,比多数历史学家所提出的直接因素要来得深远(例如中国的儒家理论vs.欧洲的犹太基督教传统,西方科学的崛起,欧洲重商主义和资本主义的崛起,英国的毁林兴矿等等)。在上述以及其他直接因素背后,我看到了一个“最优分裂原则”:伴随着欧洲始终的分裂,导致中国较早统一并保持相对统一的终极地理因素。促成技术、科学的进步,带来推动各国竞争,以可替代的资源支持并提供给发明者,并为他们提供可躲避迫害的庇护所,并由此孕育资本主义的,不是中国的统一,而是欧洲的分裂。历史学家们后来也向我指出,欧洲的分裂,中国的统一,还有欧洲和中国的相对优势之复杂程度,都超出我书中的讲述。可以被分成“欧洲”和“中国”的政治/社会半径的地理边界在过去几个世纪内一直处于变动之中。直到至少15世纪以前,中国在技术上一直走在欧洲前面,在未来也有可能重续辉煌,那样的话,“为什么是欧洲,而非中国?”的问题可能就只是一种转瞬即逝的现象,没有深层原因可挖。政治分裂的复杂影响远不止提供一个用于竞争的建设性平台,例如,竞争有可能是建设性的,也有可能是破坏性的(想想一战和二战)。分裂本身是个多层面而非单一的概念,其对于创新的影响力依赖于自由等要素,如此,创意和人员才能在各个碎片之间跨界流动,不管这些碎片是独一无二的,还是彼此的克隆。至于分裂是否最优也随使用的最优衡量尺度而异,对于技术创新最优的政治分裂程度,也许就经济生产力、政治稳定或人类福祉而言并非最优。
  • 印度在地理上较欧洲更为分裂,但是其技术创新却不及欧洲。这让我想到了“最优分裂原则”:创新在带有最优中间程度分裂的社会里发展得最快:太过统一的社会处于劣势,太过分裂的社会也不占优。

不完全总结

美洲落后的原因?

  1. 整个野生动植物组合微弱的驯化潜力;
  2. 南北轴线,且南北接触地狭小,地理和生态上却支离破碎 (影响传播);
  3. 人少和可驯化动植物少导致不能产生很多流行病

澳大利亚落后的原因?

  1. 澳大利亚是最干燥、最小、最平坦、最贫瘠、气候最变化无常、生物品种最稀少的大陆;澳大利亚是最小的一个大陆。澳大利亚大部分地区雨量稀少,物产贫乏,因此,就其所能养活的人口来说,它实际上就显然甚至更小。它也是一个最孤立的大陆。

非洲落后的原因?

1.表面上是一个大陆,实际上由于气候和地形原因,隔离成很多个地区(影响传播);
撒哈拉沙漠仍然是一个主要的生态障碍,把非洲撒哈拉沙漠以南地区同欧亚大陆和北非隔开。非洲的南北轴线造成了欧亚大陆与非洲撒哈拉沙漠以南地区之间以及撒哈拉沙漠以南地区本身内部技术传播的又一障碍。

欧亚大陆

  1. 欧亚大陆何以一直是大型哺乳动物驯化的主要场所,对这个问题的部分解释是:它是一个一开始就拥有最多的可供驯化的野生哺乳动物的大陆,在过去的40000年中,那里这样的动物因绝种而消失的也最少。
  2. 东西轴线,同纬度易于传播

各大陆的差异

  • 各大陆之间在面积、人口、技术传播的难易程度和粮食生产的开始时间等方面存在着差异,而这些差异又对技术的出现产生了种种影响,但所有这些影响都被夸大了,因为技术可以催化自身。欧亚大陆在开始时的巨大优势因此就变成了自1492年[插图]起的巨大的领先优势——其原因是欧亚大陆独特的地理条件,而不是那里的人特别聪明。
  • 第一组差异是各大陆在可以用作驯化的起始物种的野生动植物品种方面的差异。
  • 第二组因素就是那些影响传播和迁移速度的因素,而这种速度在大陆与大陆之间差异很大。
  • 与影响大陆内部传播的这些因素有关的,是第三组影响大陆之间传播的因素,这些因素也可能有助于积累一批本地的驯化动植物和技术。大陆与大陆之间传播的难易程度是不同的,因为某些大陆比另一些大陆更为孤立。
  • 第四组因素是各大陆之间在面积和人口总数方面的差异。更大的面积或更多的人口意味着更多的潜在发明者,更多的互相竞争的社会,更多的可以采用的发明创造

欧洲领先的原因

  • 在欧亚大陆范围内,为什么是欧洲社会,即在美洲和澳大利亚殖民的那些社会,而不是新月沃地的社会或中国和印度的社会,在技术上领先,并在现代世界上占据政治和经济的支配地位?如果一个历史学家生活在从公元前8500年到公元1450年的任何一段时间内,如果他当时试图预测未来的历史发展轨迹,他肯定会认为,欧洲最终的支配地位是最不可能发生的结果,因为欧洲在过去那1万年的大部分时间里是旧大陆的那3个地区中最落后的一个地区。
  • 新月沃地和东地中海社会不幸在一个生态脆弱的环境中兴起。它们破坏了自己的资源基础,无异于生态自杀。
  • 但在中国,情况有所不同,因为那整个地区在政治上是统一的。一个决定就使整个中国停止了船队的航行。那个一时的决定竟是不可逆转的,因为已不再有任何船坞来造船以证明那个一时决定的愚蠢,以及用作重建新船坞的中心。
  • 事实上,正是由于欧洲是分裂的,哥伦布才成功地于第五次在几百个王公贵族中说服一个来赞助他的航海事业。一旦西班牙这样开始了欧洲对美洲的殖民,其他的欧洲国家看到财富滚滚流入西班牙,立刻又有6个欧洲国家加入了对美洲殖民的行列。对于欧洲的大炮、电灯照明、印刷术、小型火器和无数的其他发明,情况也是如此:每一项发明在欧洲的一些地方由于人们的习性起先或者被人忽视,或者遭人反对,但一旦某个地区采用了它,它最后总能传播到欧洲的其余地区。
  • 欧洲分裂所产生的这些结果与中国统一所产生的结果形成了鲜明的对比。除了作出停止海外航行的决定外,中国的朝廷还作出停止其他一些活动的决定:放弃开发一种精巧的水力驱动的纺纱机,在14世纪从一场产业革命的边缘退了回来,在制造机械钟方面领先世界后又把它拆毁或几乎完全破坏了,以及在15世纪晚期以后不再发展机械装置和一般技术。统一的这些潜在的有害影响在现代中国又死灰复燃,特别是20世纪60年代和70年代“文化大革命”中的那种狂热,当时一个或几个领导人的决定就把全国的学校系统关闭了5年之久。
  • 中国的经常统一与欧洲的永久分裂都由来已久。
  • 欧洲海岸线犬牙交错,它有5大半岛,每个半岛都近似孤悬海中的海岛,在所有这些半岛上形成了独立的语言、种族和政府:希腊、意大利、伊比利亚半岛、丹麦和挪威/瑞典。中国的海岸线则平直得多,只有附近的朝鲜半岛才获得了作为单独岛屿的重要性。欧洲有两个岛(大不列颠岛和爱尔兰岛),它们的面积都相当大,足以维护自己的政治独立和保持自己的语言和种族特点,其中的一个岛(大不列颠岛)因为面积大,离欧洲大陆又近,所以成了一个重要的欧洲独立强国。
  • 中国在地理上的四通八达最后却成了一个不利条件,某个专制君主的一个决定就能使改革创新半途而废,而且不止一次地这样做了。相比之下,欧洲在地理上的分割形成了几十个或几百个独立的、相互竞争的小国和发明创造的中心。如果某个国家没有去追求某种改革创新,另一个国家会去那样做的,从而迫使邻国也这样去做,否则就会被征服或在经济上处于落后地位。欧洲的地理障碍足以妨碍政治上的统一,但还不足以使技术和思想的传播停止下来。欧洲还从来没有哪一个专制君王能够像在中国那样切断整个欧洲的创造源泉。
  • 地理上的四通八达对技术的发展既有积极的影响,也有消极的影响。因此,从长远来看,在地理便利程度不太高也不太低而是中等适度的地区,技术可能发展得最快。中国、欧洲,可能还有印度次大陆的过去1000多年的技术发展过程便是例子,它分别表明了高、中、低3种不同程度的地理便利条件所产生的实际效果。
  • 新月沃地的居间的地理位置,控制了把中国和印度与欧洲连接起来的贸易路线,以及中国距离欧亚大陆其他先进的文明国家路途遥远,使中国实际上成为一个大陆内的一个巨大孤岛。中国的相对孤立状态与它先是采用技术后来又排斥技术这种做法有着特别重要的关系
  • 新月沃地和中国的历史还为现代世界留下了一个有益的教训:环境改变了,过去是第一并不能保证将来也是第一
  • “最优分裂原则”:创新在带有最优中间程度分裂的社会里发展得最快:太过统一的社会处于劣势,太过分裂的社会也不占优。
  • 总结:
    1. 过于统一
    2. “最优分裂原则”;有时需要多种声音,多样化,才能更加健康发展。

中国落后的原因?

  1. 中央集权决策错误闭关锁国
  2. 日本拒绝枪支和中国抛弃远洋船只(以及抛弃机械钟和水力驱动纺纱机),是历史上孤立或半孤立社会技术倒退的著名例子。

新月沃地落后的原因?

  • 新月沃地从领先到落后欧洲发展的原因:农业领先优势从技术传到西方后,由于西方的面积地域优势,逐步发展起来,并超过了新月沃地。另一方面,由于新月沃地过渡自然砍伐破坏,地貌上发生了根本性的变化,成为了沙漠,不利于更长久的发展,最终落后于欧洲。

个人总结

  1. 一旦发明家发现了一项新技术的用途,下一步就是说服社会来采用它。仅仅有一种更大、更快、更有效的工作装置还不能保证人们会乐于接受。无数的此类技术要么根本没有被采用,要么只是在长期的抵制之后才被采用。(现在的游戏直播,打赏,虚拟主播等,都是想办法让用户逐步接受)
  2. 事实上,在整个大陆和其他一些包含数以百计的互相竞争的广大地区,有些社会对新事物可能比较开放,有些社会对新事物可能比较抵制。那些接受新作物、新牲畜或新技术的社会因而可能吃得更好,繁殖得更快,从而取代、征服或杀光那些抵制新事物的社会。(接收新事物才不会被淘汰)
  3. 流行病(人群病)。拥有流行病的族类是战胜没流行病族类的重要因素。
    • 拥有流行病首先要死一部分人,你愿意成为拥有你族类的炮灰吗?
    • 如果处于无流行病的族群,那么可能当前是好的,但是对你后代不利;有流行病的族类则相反;
    • 族类之间相互融合,有时很难说清你究竟属于哪个族类;
    • 认清你觉得最重要的事情或人,作出相应的选择;在某些大环境下,作出选择后,可能需要欺骗自己,以更好的实施,保持政治正确;族类的精神控制
  4. “最优分裂原则”
  5. 一个人的命运,要靠自我奋斗,但也要考虑到历史的进程。外部环境则是历史进程的基础与原生动力。

其他网友

  • 读到这里对教育有了一些思考,终归还是要把孩子放出去多与其他人接触交流合作,才会受到伤害,才会由此产生自我认知,才会成长。而如果只是把孩子孤立起来,与社会少有接触,那就会像免疫力差的一碰即亡。
  • 人总是要吃饱饭才有力气干活,事实证明当劳动的效率越高,人们获得的能量也就越多也就促进了文明的发展,毕竟只有劳动之后的能量有剩余才能够养得起专职人员。
  • 让一群各自为战的人团结起来的最好办法 就是树立一个共同的敌人和威胁!

单元测试使用总结

发表于 2020-11-11

mockito使用

mock实例

  • Test test = mock(Test.class);
  • Test test = spy(new Test());

在Spring中使用

  • @Mock Test test;
  • @Spy Test test = new Test();
  • @MockBean Test test; (起spring容器时)
  • @InjectMocks Test test; (起mockito容器时的测试对象)
  • Spring boot使用@MockBean和@SpyBean来定义Mockito的mock和spy。
  • 使用@mockBean,未mock的方法可能会导致返回默认值,从而导致异常的逻辑造成脏数据(可能是代码本来不完善);可以注意尽量@SpyBean

mock使用

  • when().thenReturn()模式 和 doReturn().when()模式
    两种模式都用于模拟对象方法,在mock实例下使用时,基本上是没有差别的。但是,在spy实例下使用时,when().thenReturn()模式会执行原方法,而doReturn().when()模式不会执行原方法。

  • when(test.do(anyString())).thenReturn(true);

  • 返回值为void: doAnswer((Answer<Void>)invocation -> null).when(test).do(anyString(),anyLong(),anyString());

  • 抛异常:doThrow(new RuntimeException("error")).when(test).do(anyLong(), anyString());

  • doReturn(expected).when(spyList).get(100); (使用spy时)
    - org.mockito.Mockito.doReturn; 注意不要导入powermock的包
    - doReturn().when()模式: 用于模拟对象方法,直接返回期望的值、异常、应答,或调用真实的方法,无需执行原始方法

  • 直接调用真实方法:Mockito.doCallRealMethod().when(userService).getUser(userId);, Mockito.when(userService.getUser(userId)).thenCallRealMethod();

  • 模拟可空参数方法: Mockito.doReturn(user).when(userDAO).queryCompany(Mockito.anyLong(), Mockito.nullable(Long.class));

  • 匹配null对象,可以使用isNull方法,或使用eq(null):Mockito.doReturn(user).when(userDAO).queryCompany(Mockito.anyLong(), Mockito.isNull());, Mockito.when(userDAO.queryCompany(Mockito.anyLong(), Mockito.eq(null))).thenReturn(user);

  • 模拟final方法: PowerMock提供对final方法的模拟,方法跟模拟普通方法一样。但是,需要把对应的模拟类添加到@PrepareForTest注解中。

  • 模拟私有方法: PowerMock提供提对私有方法的模拟,但是需要把私有方法所在的类放在@PrepareForTest注解中。

    1
    2
    3
    4
    5
    PowerMockito.when(userService, "isSuperUser", userId).thenReturn(!expected);
    //通过模拟方法stub(存根),也可以实现模拟私有方法。但是,只能模拟整个方法的返回值,而不能模拟指定参数的返回值。
    PowerMockito.stub(PowerMockito.method(UserService.class, "isSuperUser", Long.class)).toReturn(!expected);
    Method method = PowerMockito.method(UserService.class, "isSuperUser", Long.class);
    Object actual = method.invoke(userService, userId);
  • 模拟构造方法: PowerMock提供PowerMockito.whenNew方法来模拟构造方法,但是需要把使用构造方法的类放在@PrepareForTest注解中。

    1
    2
    PowerMockito.whenNew(MockClass.class).withNoArguments().thenReturn(expectedObject);
    PowerMockito.whenNew(MockClass.class).withArguments(someArgs).thenReturn(expectedObject);
  • 调用无访问权限的构造方法: 调用无访问权限的构造方法,可以使用PowerMock提供的Whitebox.invokeConstructor方法。

  • 调用无权限访问的普通方法: 调用无访问权限的普通方法,可以使用PowerMock提供的Whitebox.invokeMethod方法。

  • 附加匹配器
    Mockito的AdditionalMatchers类提供了一些很少使用的参数匹配器,我们可以进行参数大于(gt)、小于(lt)、大于等于(geq)、小于等于(leq)等比较操作,也可以进行参数与(and)、或(or)、非(not)等逻辑计算等。
    PowerMockito.when(mockList.get(AdditionalMatchers.geq(0))).thenReturn(expected);

  • Whitebox.setInternalState方法
    现在使用PowerMock进行单元测试时,可以采用Whitebox.setInternalState方法设置私有属性值: Whitebox.setInternalState(Foo.class, "FIELD_NAME", "value");

mock静态方法

  • 返回值为void: PowerMockito.doNothing().when(FileUtils.class, "writeStringToFile", any(File.class), anyString());
  • BDDMockito.given(FileUtils.readFileToString(eq(new File(file)))).willReturn(IOUtils.toString(getClass().getClassLoader().getResourceAsStream("test.json")));
  • 前置初始化:
    1
    2
    3
    4
    5
    6
    7
    @RunWith(PowerMockRunner.class)
    @PrepareForTest({FileUtils.class})
    @Before
    {
    MockitoAnnotations.initMocks(this)
    PowerMockito.mockStatic(FileUtils.class);
    }

设置静态常量字段值

  • 有时候,我们需要对静态常量对象进行模拟,然后去验证是否执行了对应分支下的方法。比如:需要模拟Lombok的@Slf4j生成的log静态常量。但是,Whitebox.setInternalState方法和@InjectMocks注解并不支持设置静态常量,需要自己实现一个设置静态常量的方法:
1
2
3
4
5
6
7
public final class FieldHelper {
public static void setStaticFinalField(Class clazz, String fieldName, Object fieldValue) throws NoSuchFieldException, IllegalAccessException {
Field field = clazz.getDeclaredField(fieldName);
FieldUtils.removeFinalModifier(field);
FieldUtils.writeStaticField(field, fieldValue, true);
}
}

使用Answer来生成期望的返回

1
2
3
4
5
6
7
8
9
10
11
12
13
when(test.do(anyList())).thenAnswer(
(Answer)invocation -> {
Object[] args = invocation.getArguments();
//Object mock = invocation.getMock();
return list.stream().filter(v -> ((List<Integer>)args[0]).contains(v.getAid())).collect(
Collectors.toList());
});
doReturn(resp).when(test).do(argThat(new ArgumentMatcher<List<Long>>() {
@Override
public boolean matches(Object argument) {
return ((List<Long>)argument).size() == 1;
}
}));

verify使用

  • 校验执行次数:Mockito提供vertify关键字来实现校验方法是否被调用,从未被调用never(),调用次数times(1), verify(test).do(any());
  • 验证私有方法
    PowerMockito.verifyPrivate(userService).invoke("isSuperUser", userId);
  • 验证方法调用并捕获参数值: Mockito提供ArgumentCaptor类来捕获参数值,通过调用forClass(Class clazz)方法来构建一个ArgumentCaptor对象,然后在验证方法调用时来捕获参数,最后获取到捕获的参数值并验证。如果一个方法有多个参数都要捕获并验证,那就需要创建多个ArgumentCaptor对象。
  • verify语句, 除times外,Mockito还支持atLeastOnce、atLeast、only、atMostOnce、atMost等次数验证器。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

public class ListTest {
@Test
public void testAdd() {
List<Integer> mockedList = PowerMockito.mock(List.class);
PowerMockito.doReturn(true).when(mockedList).add(Mockito.anyInt());
mockedList.add(1);
mockedList.add(2);
mockedList.add(3);
InOrder inOrder = Mockito.inOrder(mockedList);
inOrder.verify(mockedList).add(1);
inOrder.verify(mockedList).add(2);
inOrder.verify(mockedList).add(3);
}
}
  • 验证调用参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

public class ListTest {
@Test
public void testArgumentCaptor() {
Integer[] expecteds = new Integer[] {1, 2, 3};
List<Integer> mockedList = PowerMockito.mock(List.class);
PowerMockito.doReturn(true).when(mockedList).add(Mockito.anyInt());
for (Integer expected : expecteds) {
mockedList.add(expected);
}
ArgumentCaptor<Integer> argumentCaptor = ArgumentCaptor.forClass(Integer.class);
Mockito.verify(mockedList, Mockito.times(3)).add(argumentCaptor.capture());
Integer[] actuals = argumentCaptor.getAllValues().toArray(new Integer[0]);
Assert.assertArrayEquals("返回值不相等", expecteds, actuals);
}
}
  • 确保验证完毕.
    Mockito提供Mockito.verifyNoMoreInteractions方法,在所有验证方法之后可以使用此方法,以确保所有调用都得到验证。如果模拟对象上存在任何未验证的调用
  • 验证静态方法。Mockito没有静态方法的验证方法,但是PowerMock提供这方面的支持。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@RunWith(PowerMockRunner.class)
@PrepareForTest({StringUtils.class})
public class StringUtilsTest {
@Test
public void testVerifyStatic() {
PowerMockito.mockStatic(StringUtils.class);
String expected = "abc";
StringUtils.isEmpty(expected);
PowerMockito.verifyStatic(StringUtils.class);
ArgumentCaptor<String> argumentCaptor = ArgumentCaptor.forClass(String.class);
StringUtils.isEmpty(argumentCaptor.capture());
Assert.assertEquals("参数不相等", argumentCaptor.getValue(), expected);
}
}

其他

  • ReflectionTestUtils.setField(config, "id", id);
  • Mockito.reset(test);
  • @VisibleForTesting
  • Mocking a method in the same test class using - Mockito:https://towardsdatascience.com/mocking-a-method-in-the-same-test-class-using-mockito-b8f997916109
1
2
3
4
5
6
7
8
9
10
11
12
13
public class PersonTest{

@Test
public void playTest() {
Person person = new Person("name", 15, "23435678V");

Person person1 = Mockito.spy(person);

Mockito.doReturn(true).when(person1).runInGround("ground");

Assert.assertEquals(true, person1.isPlay());
}
}

一般不建议在同个类mock自己的方法,如果一定要,可以使用spy

  • @Captor注解在字段级别创建参数捕获器。但是,在测试方法启动前,必须调用MockitoAnnotations.openMocks(this)进行初始化。
  • @PowerMockIgnore注解
    为了解决使用PowerMock后,提示ClassLoader错误。

异常测试

1
2
3
4
5
6
7
8
   @Rule
public ExpectedException thrown = ExpectedException.none();

@Test
public void test() {
thrown.expect(new BizExceptionCodeMatches(ExceptionCodeEnum.FAIL_CODE.code()));
//do
}
1
@Test(expected = IndexOutOfBoundsException.class)

异步测试

  • 异步系统的两种测试方法:https://mp.weixin.qq.com/s/ft7LDsLmJByxunPuqGUOuQ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public class ExampleTest {

private final Object lock = new Object();

@Before
public void init() {
new Thread(new Runnable() {
public void run() {
synchronized
(lock) {
//获得锁
monitorEvent();
//监听异步事件的到来
lock.notifyAll();
//事件到达,释放锁
}
}
}).start();
}

@Test
public void testAsynchronousMethod() {
callAsynchronousMethod();
//调用异步方法,需要较长一段时间才能执行完,并触发事件通知
/**
* 事件未到达时由于init已经获得了锁而阻塞,事件到达后因init中的锁释放而获得锁,
* 此时异步任务已执行完成,可以放心的执行断言验证结果了
*/
synchronized
(lock) {
assertTestResult();
}
}
}

基于Spock的数据驱动测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class SpockTest  extends Specification{

// 初始化
def setupSpec() {
println ">>>>>> setupSpec"
}
def setup() {
println ">>>>>> setup"
}
def cleanup() {
println ">>>>>> cleanup"
}
def cleanupSpec() {
println ">>>>>> cleanupSpec"
}

def void testAdd(int a, int b, int expect) {

expect:
assert expect == a + b

where:
a | b | expect
1 | 1 | 2
2 | 2 | 4
}

}

使用rest-assured进行接口层测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class RestAssuredMockMvcTest {

@Before
public void before(){
RestAssured.registerParser("text/plain", Parser.JSON);
}

///https://github.com/rest-assured/rest-assured/wiki/Usage#spring-mock-mvc-module
@Test
public void test(){

given().
standaloneSetup(new GreetingController()).
param("name", "Johan").
when().
get("/greeting").
then().
statusCode(200).
body("code", equalTo(0));
//body("data", equalTo("Hello, Johan!"));
}
}

事务测试

  • TODO

其他

  • 单元测试的运行速度重要吗?
    违背这个原则的典型反例,就是在单测中启动 Spring。
  • 数据驱动测试(Data Driven Test)
  • mockito只能用于纯逻辑的验证,涉及事务那些还是没办法。单个类的单元测试逻辑正确不代表逻辑就覆盖全了,所以针对重要的接口需要单独集成测试用例
  • ContiPerf:: 更为优雅和方便的单元压力测试工具。

扩展

  • [JDK11下Mock框架进化:从PowerMockito到Mockito Only]https://mp.weixin.qq.com/s/OsySrzocrMmJdk6C0_h60A

Reference

  • https://www.baeldung.com/mockito-void-methods
  • https://stackoverflow.com/questions/2276271/how-to-make-mock-to-void-methods-with-mockito
  • https://github.com/eugenp/tutorials/tree/master/testing-modules/mockito
  • </https://stackoverflow.com/questions/9585323/how-do-i-mock-a-static-method-that-returns-void-with-powermock>
  • https://www.cnblogs.com/Ming8006/p/6297333.html#c2.9
  • https://www.baeldung.com/mockito-annotations
  • https://javapointers.com/tutorial/difference-between-spy-and-mock-in-mockito/
  • https://github.com/eugenp/tutorials/tree/master/testing-modules/mockito
  • https://github.com/rest-assured/rest-assured/wiki/Usage#spring-mock-mvc-module
  • 单元测试,只是测试吗?
  • 单元测试难?来试试这些套路
  • Spock单元测试框架以及在美团优选的实践
  • [阿里开源的 Mock 工具:TestableMock]
  • 收藏!Java编程技巧之单元测试用例编写流程 – 这个很全了。。。
  • https://stackoverflow.com/questions/30890011/whats-the-difference-between-mockito-matchers-isa-any-eq-and-same
  • https://stackoverflow.com/questions/24295197/is-there-mockito-eq-matcher-for-varargs-array
  • https://stackoverflow.com/questions/5385161/powermock-testing-set-static-field-of-class
  • Java单元测试技巧之PowerMock:

  • 转:分享一个观点:区分集成测试和单元测试的最本质差别在于,单元测试没有不可控外部依赖,也就是不会因为外部的原因导致测试失败。其它差别都不是能有效区分单元测试和集成测试的。

《我的第一本金融入门书》-笔记

发表于 2020-11-03

银行的生财之道——存款与贷款

  • 银行的存款不可能全部贷放出去,按照法律规定,银行必须要留存一定比例的存款作为应对储户提款的准备金,并且贷款在很多时候存在不能及时收回的情况,甚至会出现坏账,这会对银行造成损失,此外,这笔钱还没有扣除税收等因素

货币创造的秘密——商业银行的派生存款

  • 我们时常听到财经新闻报道说,中央银行上调法定存款准备金率0.5个百分点,冻结了约3000万元的银行存款货币。在我国,这是当市场流动性泛滥、通货膨胀严重的时候政府所采用的紧缩货币供给的手段。银行存款也是货币,并且银行账户上的存款数量远远大于现金,那么这些多出来的没有现金支撑的存款货币是怎么创造出来的呢?为什么法定存款准备金率的上调就能冻结那么多的存款货币呢?
  • 我们知道,现在人们使用的货币都是信用货币,而信用货币最早的形式是商业银行的银行券。后来,银行券的发行逐渐集中到了一国的中央银行。也就是说,现在人们手中的所有现金货币都是由中央银行发出来的,而商业银行能够创造的只是存款货币。存款货币的创造与银行以支票存款为依据组织的转账结算有直接的联系。一般来说,人们把现金存入银行之后,并不一定再把现金全数提出;从银行取得贷款的客户通常也并不要求银行支付现金,而是要求把贷款记在自己的存款账户中。当客户的存款账户上存有款项时,既可以在必要的时候提取现金,又可以开出支票履行支付义务;当一位客户取得支票时,他往往也不是到付款银行提取现金,而是委托自己开有存款账户的往来银行代收并把收来的款项记入存款账户。对银行来说,客户开出支票,因此有应该付出的款项,同时客户交来支票委托收款,因此有应该收入的款项
  • 银行对现金货币的需要归结为两类:一是客户从存款中提取现金用于发放工资、小额零星支付等;二是结清支票结算中应收应付的差额。在长期经营中,银行发现,相对于存款,现金只是一小部分,而且两者的比例关系相对稳定。也就是说,只要按存款的一定百分比保持现金库存即可应对客户对于现金的需要。
  • 在这样的现代银行支付体系下,存款货币就产生出来,或者说是派生出来了。
  • 假如有一位客户甲,他持有10000元的现金,并将其存入开立了活期存款账户的A银行。从而,A银行负债业务中的存款一项就多了10000元。根据经验,保存相当于90%的现金就足以应对客户日常提取现金的需要,那么A银行可以把9000元贷出。假如这时候正好有一位客户乙要从A银行贷款9000元,那么此时A银行的资产账户上就多出来9000元的贷款,以及剩余的1000元用于应对取现的准备金,实际上,这1000元的准备金是按照法律要求要存到中央银行的账户上的。
  • 如果客户乙将这9000元的贷款用签发支票的方式支付给与自己有业务往来的客户丙,客户丙在B银行开立了账户,于是这9000元则由A银行转到了B银行,B银行的存款就多了9000元。同样的道理,B银行将这9000元中的10%留作准备金,将其余的90%(8100元)贷放出去。如果这时正好有客户丁要从B银行贷款8100元,那么B银行的资产账户就多出来8100元的贷款,同时B银行将900元的准备金上缴中央银行。
  • 以此类推,B银行的客户丁向C银行的客户戊用支票支付8100元的应付款,于是C银行就又多了8100元的存款,在这8100元中,90%用于C银行的贷款,10%用作准备金,无限地循环下去,最终我们可以得到一个总的存款数量和准备金数量。
  • 将A、B、C……银行的存款数量相加,得到10000+9000+8100+7290+…=100000(元),准备金数量为1000+900+810+729+…=10000(元),从中我们可以看出最初的10000元原始存款最终变成了100000元派生存款,扩大了10倍。经过简单归纳,我们发现这个倍数正好是准备金率的倒数,也就是1/10%=10。
  • 至此,我们就明白了商业银行派生货币的秘密,在银行之间的非现金转账制度和不完全准备金制度下,这样的存款货币派生机制就是有效的。在这一制度下,某单位的现金经过多次存款转账支付,可以创造出(1/准备金率)倍的存款。我们也能够回答中央银行调整存款准备金率对存款货币数量影响巨大的原因了。假如存款准备金率由10%调整到20%,那么存款的最终创造数量就变为1/20%,扩大了5倍,即10000元的现金只能创造出50000元的存款,这个影响相当巨大。
  • 在非现金转账制度和不完全准备金制度的条件下,商业银行可以创造出数倍于现金数量的存款,而这个倍数就是存款准备金率的倒数。

利率是怎样调整的——固定利率与浮动利率

  • 根据在借贷期内利率是否会发生变化,我们又可以将利率分为固定利率和浮动利率。
  • 浮动利率是一种在借贷期内可定期调整的利率。
  • 浮动利率尽管可以为债权人减少损失,但也因手续复杂、计算依据多样而增加费用开支。因此,浮动利率多用于3年以上的国际金融市场的借贷。
  • 固定利率和浮动利率是利率的两种设置方式。采用固定利率可以使计算简单方便,而采用浮动利率可以使长期借贷行为更加公平。

为什么会有负利率——名义利率与实际利率

  • 实际利率是指物价水平不变,从而货币购买力保持不变条件下得到的利息率。
  • 为了避免通货膨胀的损失,假设仍然要取得3%的利息,那么粗略地计算,乙必须把贷款利率提高到8%,这样才能保证收回的本金和利息之和与以前的物价水平相当,并且保证购买力不变。其中,这个8%就是名义利率。从这个例子我们可以看出,名义利率是包括物价水平变化情况的利率,实际利率和名义利率之间的关系可以大致表示为:名义利率=实际利率+通货膨胀率。市场上各种利率都是名义利率,实际利率却不容易观察到。而利用上述公式,就可以根据已知的名义利率和通货膨胀率推出实际利率。例如考察我国现在的银行存款,1年期定期储蓄存款的利率是3.25%,这是名义利率。而2011年3月的消费物价指数为4.9%,这可以代替通货膨胀率,这样我们可以算出1年期储蓄存款的实际利率为-1.65%,也就是说,我们年初把钱存进银行,年末取出后按购买力计算还亏了1.65%。所以,有些人不愿意把钱存进银行,而是去炒股或者买房,因为一般认为股市和房市是可以实现保值的市场。
  • 实际利率是物价水平不变条件下的利率,而名义利率是包括了物价变化水平的利率,两者的关系为:名义利率=实际利率+通货膨胀率

没有风险的利率——基准利率

  • 生活中,我们经常听到所谓基准利率的说法,比如,在国内,老百姓习惯上把银行的1年期定期储蓄存款的利率作为基准利率;而银行从业人员则把银行间隔夜拆借利率作为基准利率;在国外,基准利率又成了中央银行的再贴现率。那么,到底什么是基准利率呢?顾名思义,基准利率是指在多种利率并存的条件下起决定作用的利率,也就是说这种利率发生了变动,其他利率也会相应变动。因此,了解了这种关键性的利率水平的变化趋势,也就可以了解全部利率体系的变化趋势

什么是有价证券的价值——票面价值、内在价值、市场价格

  • 票面价值也称面值,是在有价证券票面上标明的金额数值
  • 内在价值就是一种有价证券未来收益的现值,它是对有价证券进行价值评估的核心。
  • 对于债券,其本身并没有对应的实物资产。股票,有其对应的实物资产,但具有同样估值金额的实物资产绝不等于对应的股票有同等的内在价值。
  • 市场价格也称市值,它的形成是以其内在价值为准的
  • 票面价值、内在价值、市场价格是三个不同的概念。票面价值是标明在有价证券票面上的金额数量,内在价值是有价证券未来收益的现值,而市场价格是围绕有价证券内在价值上下波动而形成的。

怎样评估有价证券的价值——净现值

  • 现值发行的债券票面价格为1000元,每年按8%付息,即利息为80元,每年付息一次,10年还本。如果市场利率达到9%,那么这张债券的现值,或者说内在价值实际只有935元,如果这张债券的定价超过935元,则将不具有投资价值,如果定价低于935元,则可以买入。
  • 净现值是将有价证券未来可预期到的收益折现到当前所得到的金额再减去投资的成本。

一个简单的股票价值评价指标——市盈率

  • 所谓市盈率,就是股票的市场价格与每股盈利的比值。
  • 市盈率=每股市场价格/每股盈利
  • 如果市盈率太高,则可能意味着股票的价格高于价值,在这种情况下,投资者需要卖出手中的股票或不购买这种股票。如果市盈率太低,则可能意味着股票的价值被低估,此时正是投资的好时机
  • 从理论上来说,股票的市盈率愈低,愈值得投资
  • 只有比较同类股票的市盈率才会有实用价值
  • 市盈率的高低也不能作为投资选择的绝对标准。因为高市盈率还可能意味着股票的收益有很大的增长潜力,投资者对股票特别看好;低市盈率可能是因为股票未来的收益前景不好,投资人对股票不那么看好导致的。
  • 证券业监管部门也十分关注市盈率的高低。如果市场的平均市盈率太高,那么,政府可能得出市场泡沫过大的判断,然后采取一定的措施帮助消除泡沫。
  • 市盈率是判断股票价值的一种十分简便的方法,它的数值等于股票的市场价格与每股盈利的比值,含义是,每得到1元的收益需要付出多少元的投资。

实际收益的损失——通货膨胀风险

  • 通货膨胀风险也称为购买力风险。它是由于通货膨胀、货币贬值给投资者带来的实际收益下降的风险
  • 因为通货膨胀的增长,居民的收入或工资可能会出现上涨。大部分民众对通货膨胀不敏感,但是对自己的工资上涨很敏感。人们的收入增加,大多数的人会选择增加消费,这种现象就是货币幻觉
  • 股票的通货膨胀风险相对较小。
  • 当一国的股票市场完全瘫痪,不可以保证人们财富的安全时,人们就会放弃股票和本国货币,大量持有有信用的外币和黄金等贵金属。

购买金融资产就是投资吗——投资与投机

  • 交易者根据交易手段、交易结果、交易目的的不同应该被分成两类:投资者与投机者。
  • 拥有安全性、盈利性、研究性特征的是投资者,反之则是投机者。
  • 投资者深入分析金融资产的价值,他们寻找价值被低估的金融产品并长期持有以获得稳定的收入。投机者关注行情指标,他们购买金融资产的目的就是为了在短期内获得暴利。

行为金融学典型现象——羊群效应

  • 羊群效应是行为金融学的经典内容。羊群是一种比较散乱的动物组织,如果有一只羊躁动起来,那么其余的羊会跟随着这只羊一起躁动起来。羊群效应说的是一种从众心理。
  • 羊群效应的教训告诫我们,做任何事都要有自己的判断。总是跟着别人投资,也不会得到多大的收益
  • 投资者应该相信自己的判断,千万不要盲目跟风投资。

股票的生财之道——分红与价差

  • 股票的获利方式有两种,一种是通过股价的变动获利,另一种是通过股票的分红获利。
  • 在长期中获得合理的收益,而不是短期内的一夜暴富,这是我们股票的一个重要原则。
  • 只有坚定这一个原则,我们在投资股票时,才能够以一个平和的心态去面对股市带来的波动与股价的涨涨落落。

未来标准化的商品买卖——期货合约

  • 之前讲到远期合约的优势是规避未来的风险,其实远期合约也存在一些不足,那就是远期合约往往是买卖双方商议好就可以达成的一种合约,而如果第三方甚至其他各方想要介入这份合约或者买卖双方想要将合约中的金融产品卖给其他人的话,则会比较麻烦。比如双方规定好要交的货是一等大豆1000吨,但是第三方只想要200吨,或者第三方只想要二等大豆等,这样就不能转卖这个远期合约。为了避免这种麻烦,使交易更为顺畅地进行,人们又发明了标准化的远期合约,即期货合约。
  • 期货是现在进行买卖,但是在将来进行交收或交割的标的物,这个标的物可以是某种商品(如黄金、原油、农产品),也可以是金融工具,还可以是金融指标。
  • 期货实际上是一种可以反复转让、反复买卖的标准化合同。
  • 交易这些“将运到”合约比交易谷物本身要更为有用
  • 期货市场的两类关键参与人就是套期保值者与投机者。期货市场建立的目的是出于对保值的需要。
  • 所谓套期保值,就是以现在的价格卖出未来生产的产品,或是以现在的价格买入未来所需要的原料。
  • 套期保值者一般是产品的生产商或者是需要原料的加工商。他们进入期货市场购买或卖出期货合约的目的是为了避免未来的损失。举例来说,棉花生产商为了避免在棉花收获时因棉花丰收而引起的价格下跌中受到损失,在收获期前三个月就在期货市场卖出期货合约,或者做空该种类的期货。而到了棉花收获期,他们再买入期货合约,也就是进行平仓。由于期货合约越到履约期越接近现货价格,如果三个月后棉花价格下跌,那么棉花生产商便在期货市场盈利,从而弥补在现货市场的亏损;如果三个月后棉花价格上涨,那么棉花生产商便在现货市场盈利,从而弥补在期货市场的亏损,即将利润在三个月前就锁定。
  • 而投机者在期货交易中则是扮演着“价格发现者”的角色。投机者进入期货市场购买或卖出期货合约的目的只有一个——就是获利。因此,在期货市场中时刻关注价格的波动与走向,如果发现期货市场价格与现货市场价格出现偏离,那么就会毫不犹豫地利用价差进行套利交易。但是同时,他们的不断套利也使得期货市场与现货市场的价格不会出现扭曲。
  • 期货采用保证金制度,即只需要付部分货款就可以订购全部的商品
  • 期货市场更适合专业的投资者进行投资。
  • 中国有上海期货交易所、郑州商品交易所、大连商品交易所、中国金融期货交易所四大交易所
  • 期货合约是将要买卖的东西的单位、品质、样式等在合约中事先规定好,在规定的日期进行交割的一种远期合约。期货的出现有助于保障原材料供应商与需求商的利益不会因原材料价格波动而受损。期货交易中使用保证金制度,属于杠杆交易,风险较大。

金融政策的神奇魔力

  • 政府调节经济的目的是为了预防由于单纯依靠市场力量所出现的种种市场失灵的情况。无论是由于人们的盲目乐观而产生的经济泡沫,还是由于人们信心不足而出现的经济衰退,政府都可以通过运用金融政策使经济重回正轨

市场失灵的历史表现——1929年美国经济危机回顾

  • 经济学家凯恩斯认为经济危机的根源在于有效需求不足。
  • 劳动者工资率的上升却慢于劳动生产率的增长。其结果是,生产商品的能力大大超过了购买力,“消费不足”带来了“生产过剩”的必然后果。

金融政策魔力的源泉——货币、利率与汇率

  • 一个国家的宏观金融政策应主要包括三大政策:货币政策、利率政策和汇率政策。
  • 政府的目标是确保三个市场的均衡,即保证国内的商品市场的均衡、货币市场的均衡以及国际收支的均衡。
  • 对于商品市场的均衡,从总体上说,就是国内商品的总供给与总需求的均衡,让所供给的商品满足所产生的需求,这样一方面可以不出现供过于求的局面,不至于产生商品积压,引起通货紧缩,使得经济发展陷入停滞的局面;另一方面可以防范供不应求的局面,不至于出现需求旺盛而供给不足,产生物价上涨,人民的需求难以得到有效保障的困境。政府可以运用财政政策对市场加以调整。在货币市场的均衡方面,就是要使一国对于货币的需求等于货币的供给。就货币的需求而言,根据凯恩斯的理论,人们有三种倾向去持有货币,即预防动机、交易动机与投机动机。这三方面的因素使得人们对货币有相应的需求。而中央银行作为货币的发行机构,可以通过控制货币的供给引导货币市场的均衡。在国际收支方面,如果一国的出口大于进口,则会出现顺差局面,会对本国的货币产生升值压力,进而影响本国的出口行业,并同时容易造成输入型通货膨胀,对国内经济产生影响;而如果进口大于出口,则会产生贸易赤字,使得本国货币不断走弱,进而影响本国的国际购买力水平与经济发展前景。因此,政府应该通过有效的汇率政策等调控方式引导国际收支平衡。

是痛苦的根源还是繁荣的表象——通货膨胀

  • 如果通货膨胀保持在一个比较低的水平,那么就说明市场上对于各种产品的需求比较旺盛,至少是供不应求。这样的话,整个经济的流转就会比较顺畅,企业生产的产品不会因为卖不出去而滞销;企业可以继续生产,生产过程中也会雇佣一定的劳动者,因此也不会有人失业。劳动者有了工作,也就有了收入,有了收入,也就有了消费的基础。
  • 一般而言,国际上通常认为通货膨胀率(一般用消费者物价指数CPI进行衡量)在2%以下是可以接受的范围,而在3%以上就认为已存在问题。如果通货膨胀率高于5%,则认为存在着比较严重的问题。而通货膨胀率如果达到20%,就认为这个国家面临着经济崩溃的风险。
  • 通货膨胀是指一个经济体在一段时间内货币数量增速大于实物数量增速,普遍物价水平上涨,单位货币的购买力下降的状况。较低水平的通货膨胀反映经济的蓬勃发展,但较高水平的通货膨胀就是经济痛苦的根源

一个艰难的抉择——失业与通货膨胀的跷跷板

  • 失业率的存在是让人苦恼的,通货膨胀的爆发是让人忧愁的,西方一些学者甚至将两者的数值进行加总,创造出一个“痛苦指数”来反映人们对于现行经济状况的担忧。而更让一国政府与中央银行郁闷的是,往往他们通过相应的金融政策调整,在解决其中一个问题的时候,会引发另一个问题的产生。就如同跷跷板一样,压下了这一头,那一头又升了起来。
  • 事实正是如此,当中央银行通过宽松的货币政策甚至是降息对不景气的经济进行刺激以消除失业压力的同时,会引发投资的加速,使得原材料的成本大幅度提高,进而引发一般商品价格上涨,并促使工资上涨,形成成本推动的通货膨胀。相反,当中央银行通过提高利率或收紧货币为一个过热的经济体降温时,常常会让投资者犹豫不决,导致投资不足,进而使企业不能进行有效的扩大再生产,并开始裁员,导致失业人数增加。
  • 上述这种情况正好反映了金融政策制定者所处的两难境地。金融政策的调整既要保证老百姓不会因为物价的快速上涨而怨声载道,又要避免老百姓因找不到工作或失业而痛苦不堪。所以说,对一国政府与中央银行而言,如何让通货膨胀与失业的跷跷板在一个能够接受的范围内达到平衡,是一个十分艰难的抉择。小贴士根据经济学家的研究,一国的失业率与通货膨胀率常常存在着此消彼长的替代关系。这种现象使得政府在制定相应的宏观经济政策时常常面临着两难的抉择,往往只能就重避轻,而难以全部满足。

来自全球化的挑战——输入型通货膨胀与汇率变动的压力

  • 当今世界市场的发展使得各国的联系更为紧密,因此单单考虑本国的情况显然难以完全把握经济的命脉。因此,政府在进行相应的金融政策调整时,还要考虑外部因素,也就是考虑国际市场带来的压力。而这种压力也来自两个相对应的方面,或者说,来自汇率的两种调整方式的压力。一种方式是实行固定汇率制,也就是保持汇率稳定。保持汇率稳定可以预防经济的波动,但是相应地,由于本国货币的升值或贬值压力,一国的中央银行必须动用其外汇储备进行汇率干预以保持汇率的稳定,这就对一国的外汇储备状况提出了很高的要求。如果一个国家的货币有贬值压力,那么中央银行就需要不断地用本国的外汇储备换回本国货币以保持市场上对本国货币的需求,从而稳定本国汇率。这样做对本国的外汇储备是极大的消耗。而另一方面,如果本国货币有升值压力,那么中央银行必须不断地在国际市场中供给本国货币以换回外汇储备,这样做的话会使本国的外汇储备不断膨胀,而当外汇储备贬值时,就会造成本国外汇储备的巨大损失。另一种方式是实行浮动汇率制,是指政府允许市场作为调节汇率的手段,允许汇率进行波动。这样,政府就可以不动用外汇储备对汇率市场进行干预,使汇率可以较为自由地变动。然而,在这种方式下,汇率的波动会对经济产生很大的影响。如果本国货币升值,那么会使本国的相关出口行业面临着巨大的汇率压力,因为出口企业在国内用本国货币购买原材料、雇佣劳动力,而出口到国外的产品却是用外币进行结算,本国货币升值会造成产品的成本上升,对利润产生冲击。如果本国货币贬值,那么会引发进口产品的价格上升,进而形成输入型通货膨胀。也就是说,我们购买同样的国外原材料或产品时,需要付出更多的本国货币,就如同通货膨胀一样,同样的产品需要更多的钱才能买到,表现为进口原材料与商品的价格普遍提高,对于对外依赖度很高的国家,这将会严重干扰该国的经济生产过程。因此,无论采用哪种汇率制度,汇率的波动或者汇率的变化压力都会对经济造成一定的冲击。而对汇率的调节机构来说,制定相应的汇率政策是一个取舍的过程。汇率政策对一国汇率的影响可以分为三种,即有计划的升值、保持汇率不变以及有计划的贬值。有计划的升值可以防止输入型通货膨胀,使本国的进口商品、原材料价格趋于稳定,进而使一般商品价格不至于出现较大的波动,但是,这是以牺牲出口行业的利益为代价的。而有计划的贬值则恰恰相反,一国政府为了推动出口企业的快速发展,通过实施一定程度的货币贬值手段对外贸行业进行刺激,使外贸企业由于能够更为便宜的使用国内资源而获得一定的成本优势。但是,贬值手段所带来的可能后果是输入型通货膨胀的压力,会对本国的一般性生产行业造成一定的冲击,同时也会影响本国的一般商品价格。保持汇率稳定不变则如前文所述,会促使中央银行动用大量的外汇储备进行干预,这样会对一国的外汇储备造成一定的压力。

对魔法的质疑——金融政策是否是万能的

  • 金融政策在实行中往往存在着滞后性与信息不完全的问题。
  • 金融政策的调整不是立竿见影的,而是有一定的滞后性。这就对金融政策的制定者提出了较高的要求,需要他们对未来的趋势有明确的判断,不能为了解决短期的问题而影响长期的发展。
  • 经济的波动往往呈现出复苏—繁荣—衰退—萧条—再复苏的周期性特征,这是因为,在繁荣阶段,企业往往增加投资并且成本较高,形成泡沫,在随后的衰退期中很可能会遭受损失。如果金融政策的制定者能够把握这种经济周期规律,合理运用金融政策,那么就可以获得良好的效果
  • 逆周期政策就是一种金融调控的合理手段。简单地说,逆周期政策就如同开车一般,在经济向着繁荣方向发展时就踩下经济的刹车,而在经济向着衰退方向发展时就踩下经济的油门。具体而言,当经济进入复苏阶段,企业重新开始走上扩张道路时,政府不应继续通过宽松的金融政策对其进行刺激,而是应该适当紧缩货币与信贷。这样,由于金融政策有滞后性,当经济走向高涨时期时,货币与信贷政策正好可以发挥作用,避免经济过热。而当经济增长比较平缓但并未出现下滑趋势时,政府就应对其进行刺激。逆周期政策可以避免由于滞后性造成的调控不当的问题,是金融政策制定中一个比较好的调控思路。

扩展

美国国债

  • 中国为什么要购买美国国债?https://www.zhihu.com/question/23117022
  • 根本原因是中国是实行外汇管制和人民币汇率控制。也就是说钞票进出中国都要经过一个机构,更换对应的货币,这个机构叫央行。
  • 中国是世界工厂,生产很多东西卖到全世界;同时中国的经济发展和巨大的市场规模,很多外国公司到中国投资。所以中国现在每年的贸易都是顺差(进来的钱多,出去的钱少),这样一年一年累计,中国银行就聚集了一大笔美元。

买美国国债

  1. 钱太多,花不掉。
    中国的外汇也不全是买美国国债,也有部分是做其他的,比如买黄金,投资等。但是这么一笔巨额的资金,只做这些是消化不了的。
  2. 选来选去,只有买美国国债比较合适:1,有保障(美国后台,安全),2,用的掉(美国国债发行量大),3,回报率尚可。
  3. 购买美国国债是稳赚不赔的吗?
    不是,比如美元贬值可能导致缩水
  4. 那么大笔的重要的资金,安全是第一位的;回报率是第二位的

中国的外汇储备并不都是中国人赚的

  • 中国的外汇储备并不全部都是中国人自己赚的,里面有一部分,而且是很大一部分,是外国投资引来的外汇,这笔美元只是暂存在央行,其所有权并不归属于中国。中国每年的巨额出口顺差,赚的钱也并不全是中国的,相当大一部分,都是属于外国资方的,但是我们不能因此排斥外国资方,相反还要拼命引资,没有这些外国投资,中国不可能发展到今天这个高度。
  • 所以,为了在外汇储备激增的前提下尽可能的保护中国的利益,买美国国债,是保护中国外汇储备最佳的选择。

《半小时漫画经济学》-笔记

发表于 2020-11-02

一、开篇:我们为什么要读经济学

  • 历史上没有一场仗是因为爱和正义打起来的,所有的流血背后,深层次的原因都是经济
  • 如果我们想搞明白人类是怎么活成这样的、世界是怎么运转起来的,就要先搞明白这个问题:经济是怎么来的?一、经济起源首先,经济是什么?简单地讲,就是资源最优化配置。比如一瓶水,只有到口渴的人手里,价值才能发挥到最大。
  • 这些余粮,就是大家的财产,我们也可以将之理解成经济学里的资源。
  • 农业是骨架,工业填充了血肉,其他行业是各种器官,它们一起组成了经济这副躯体。

二、货币的起源:钱打哪儿来的

  • 用金银当货币,就叫——金银本位。用羊当货币就是羊本位,用贝壳当货币就是贝本位,以此类推。
  • 经济越来越好,商品就越来越多,这就需要更多的钱去买。于是有了比金银更方便带、更方便造的纸币。到后来,人们觉得纸币也麻烦,于是有了方便付款的电子货币。
  • 货币随着经济增长一直在变多!
  • 钱源于债务!因为人类学家发现了很多证据,研究了半天,得出个结论:这种物物交换的社会是不存在的!
  • 二狗子拿着鸡要换三胖子的铁锤,三胖子虽然不想要鸡,但他还是把铁锤给了二狗子,大家都熟,打个欠条就行。比如欠条到了老四手里,就相当于二狗子欠老四债。后来,大家也都这么做,用着用着顺手了,欠条就在村里流通了起来,谁还在乎它原先是谁的?为什么大家相信这张欠条呢?原来,二狗子人品好,财产多,不管谁拿着欠条来换铁锤,他都给换。这种有借有还的品质,就是传说中的——信用。人们交换、欠债什么的,其实玩的都是信用,只要有人相信,贝壳、石头、金银,甚至纸,都能当钱花。这就是信用货币理论的一部分。

三、那些年缴过的“五险一金”到底是什么

  • 政府、工厂、工人各拿出点钱来存在一起,哪个工人出意外了,就拿钱出来,让他能维持生活,大概是这样:工人们没后顾之忧了,干起活儿来更带劲,德国经济一路雄起。现代社保制度从此诞生了!
  • 如果社保不够年限,那恐怕享受不到福利了。你自己缴的会退给你,不过公司帮你缴的钱,只能和它们说再见了。

四、养老金能养老吗

  • 计算养老金时,是以当时的社会平均工资为基础的,所以不用担心钱贬值的问题。
  • 真实情况是,人口正在老龄化,上班族越来越少,退休的大爷大妈越来越多。[插图]这样下去,总有一天,社保基金入不敷出,到时候嘛。。

五、医保到底保了个啥

六、一口气搞懂到底要缴哪些税

  • 从收入里拿出来的这部分钱就叫个人所得税。正确叫法应该是免征额
  • 在商品流通过程中缴的税,就叫流转税。
  • 无论占有哪种财富,都有可能要缴税,这叫财产和资源税。
  • 税很多事和特定行为有关,把它们打包一下收的税,就叫行为税

七、买房前必须知道的二三事

  • 宅基地所有权归集体,使用权归农民,不存在什么年限,住到宇宙爆炸都没问题。但宅基地的房子有个问题,没房产证,没产权,没土地使用证,俗称小产权房。这种房子自己住没问题,但要想卖给外村人或者城里人,就难喽!
  • 一般买这些地的,都是房地产公司,交的钱就叫土地出让金,但使用权是有期限的,比如70年,相当于租地。房地产公司怎么赚钱呢?很简单,盖楼卖给消费者,这就是我们熟悉的商品房。产权时间是从开发商拿地开始算的,以70年产权为例,实际你买的房子的产权到期时间可能要比70年短。
  • 国家收回土地土地产权到期了,如果国家想收回来用,那你的房子就要拆迁了,你的人生可能就不一样了。

九、借钱那些事儿:如何避开借贷中的那些坑

  • 个人、公司和政府,三者之间的不同组合,就对应了我们身边不同的金融产品。
  • 按传统经济学家的说法,人是理性的,大家都只会把钱借给靠谱的人,也只会借自己有能力还的钱。次贷危机首先得弄清楚什么叫次贷:[插图]一边美国银行敢给,另一边矮矬穷真敢借,也不想想自己能不能还上
  • 法律就说了,民间借贷的利率高过36%属于高利贷,是非法的。

十、消费心理学:消费者防剁手指南

  • 大家购物时,会先找差不多的货比一比,一般不会选高价和低价,而是选中间价。这就是托奥斯基的“价格锚点”理论。
  • 特沃斯基和卡尼曼的“损失规避”理论。简单来说就是比起得到,大家更怕失去。所以就算是一件好东西,一旦发现会给自己带来损失,很多人就宁愿不要。

十一、传销大起底:珍爱生命,远离传销

  • 整个过程都没有真正的产品,赚钱全靠拆东墙补西墙。这个简单的骗术,就是金融界大名鼎鼎的庞氏骗局。这个骗局的死穴就在于:需要不断有新钱注入,一旦没有蠢萌新人进来,大家全都要玩儿完。四个字形容它的特点,那就是:一旦停药,骗子就会赶紧拿钱跑路,大家的投资款就打水漂了。
  • 如果有一天,再也发展不到下线了,整个系统就崩溃了。也就是说,传销的本质就是:不要产品,只要人。

一、开篇:我们为什么要了解金融危机

  • 经济有个定义:价值的创造、转化和实现。简单地说,经济就是资源配置,但是人类总是在这条路上跑偏。
  • 博大精深的中华文化告诉我们,把“危机”拆开来看,就是:“危险”和“机会。
  • 二战之所以能打起来,部分原因是美国的国内危机,演变成了全球危机。
  • 金融危机不是绝对的坏事,也可能是社会的崩溃疗法

二、金融危机就要来了:明斯基时刻

  • 人类社会的经济是有规律的,每次繁荣后面,都跟着一波波衰退。人们把这种周期性经济衰退的现象叫:经济危机。而经济的衰退常常是由于金融危机导致的。
  • 经济是有周期的,金融危机经常发生,原因可能是金融不稳定。经济周期有大有小,很多小周期构成了一个大周期,明斯基时刻说的是大周期的转折点。
  • 借的这部分钱,就叫杠杆。借钱用来扩充资产,就是加杠杆。杠杆让你赚得多,但赔起来也多。
  • 杠杆越来越高,最后还不起了,可能就会引发危机。所以该咋做知道了吧?去杠杆啊!简单说就是还钱,一般政府都会做这些事:方法1:债务违约重组钱暂时还不上是吧?银行为了把钱要回来,只好想点别的办法,比如少还点,延长还款期限。方法2:财富再分配给土豪加税,把收来的钱用来发福利、创造就业岗位,这样失业的人就慢慢有了钱,就能把欠的还上。方法3:货币调节为了解决问题,政府会和中央银行商量,让中央银行多印一些钱,然后花到了大家身上。

三、一朵花酿成的惨案:郁金香泡沫(上)

  • 郁金香泡沫,堪称金融危机鼻祖。
  • 赚了钱就按比例分红,赔了钱就只承担有限责任,这就是世界上第一家股份有限公司

四、一朵花酿成的惨案:郁金香泡沫(下)

  • 合同到期了,就能拿到郁金香,反正不会亏,大家都乐意。这种玩法就是期货的雏形。荷兰人全国总动员炒郁金香,船不造了,生意黄了,钱投进去连个响都没有,经济急剧下滑。
  • 郁金香泡沫过去了,后来又有南海泡沫、密西西比泡沫,甚至次贷危机。人们好像从来不会吸取教训,直到现在咱们身边也还在发生这种事:所以看完这个故事,对咱们还是很有用的,起码你再看到有些东西很贵,但明显不值那个价,人们却一直往里砸钱投资时,就应该知道那很可能就是金融泡沫,要保持冷静。价格虚高的东西别碰,要投就投有价值的,这叫理性。

五、连牛顿也算不出的疯狂:南海泡沫

  • 对南海公司来说,“韭菜”就是一茬茬的钱,问题是怎么收割呢?南海贸易特许权本来就是个金字招牌,再加上政府的担保,就能让不明真相的老百姓信得不要不要的。“韭菜们”都看好南海公司,纷纷买入他们的股票。
  • 上到国王,下到家庭主妇,全在炒股,却不管不问公司经营啥情况,这就很容易——出大事啊!

六、股票连涨13个月会怎么样:密西西比泡沫

  • 他首先要做的不是跑业务,而是开始发股票,而且能用国债来换股票。大家都很看好公司,因此股票老值钱了。现在能用国债换,简直是睡觉都能笑醒!这样一换,国债被抵销,国家就不用还老百姓钱啦!法国经济繁荣靠股市,但股市其实很虚,因此所谓的经济繁荣就是个泡沫啊!最后路易十六被送上断头台,这就是著名的法国大革命。

七、房价是怎么被炒起来的:1837年美国大恐慌

  • 1837年美国大恐慌从本质上说就是一个美国人瞎炒房的故事。简单来说,贷款变难了,这叫信贷紧缩,缩得太紧,导致市场上没钱,美国经济就容易不景气。总结一下,美国跟英国房东打了两架,欠了外债,为了还钱开银行,薅了老百姓的黄金,最后把自己的经济搞坏了。
  • 很快国内经济一落千丈,纸币没人信,黄金又没有,股票暴跌,很多行业破产,大家都找不到工作。这就是美国第一次萧条,史称美国大恐慌。
  • 1848年,恐慌了11年的美国在加州的一个地方,发现了大金矿。本来缺黄金,一下子却变成了矿主,美国突然不慌了,这就是历史上著名的淘金热。
  • 简单来说,美国大恐慌其实就是一个炒房的故事,房子是用来住的,不是用来炒的,可惜美国人并不懂这个道理。

八、美联储的诞生:1907年美国银行危机

  • 南方要搞农业,北方要搞工业,一言不合就开撕,这就是咱们熟悉的南北战争。
  • 他来自传说中的摩根家族,据说当时身家达13亿美元。于是摩根撸起袖子,着手拯救美国:他先找了几家银行,成立了一个由富翁们组成,专门给发愁的信托和银行送钱的联盟——摩根干的其实是中央银行的活,所以美国觉得需要一家中央银行来统一管钱。成立新机构要取个新名字,叫啥好呢?美国老百姓已经听到银行就害怕了,所以不能有银行两个字。那就叫美国联邦储备局吧

九、实现美国梦的三大法宝:泰罗制、福特制和猪

十、1929—1933年美国大萧条

  • 自由放任主义。结果小公司一个个倒下,而强势的公司却越做越大,逐渐成了江湖的不败神话:垄断的意思大家都知道吧:一家公司赶走竞争者,占领市场一家独大。但垄断常常会产生不好的结果,少数人资源独占,而多数人吃糠咽菜,贫富差距很快就被拉大了。
  • 当时的资本家一心想赚钱,玩命搞生产,可问题是:多数人穷得连饭都吃不起,他们能买得起啥?所以当时的社会背景就是:资本家们一瞅,一个个的都不消费,多影响自己赚钱国家经济啊!
  • 消费力虚了,农业也跟着倒了血霉,农产品卖不出去,只能销毁。很多农民宁可把牛奶倒进河里,也不降价或者送给穷人。为什么呢?因为一旦牛奶降价,其他货为了卖出去,只能被迫降价,这样会导致卖家利润更低。另外,想卖货得先砸钱,比如投入运费,货倒了反而损失小。
  • 经济危机最严重的问题就是失业。
  • 由生产过剩引发的经济危机。

十一、拯救美国的两位“救市主”:胡佛和罗斯福

  • 胡佛是一个坚定的自由放任主义者,这种说法其实不太对,因为他在经济危机之后一直在积极干预经济。

  • 新上任的总统就是罗斯福。罗大爷觉得,政府应该对市场插手,不能只当看大门的保安,想解决危机,就要做连你家垃圾都要管的——这套想法其实就是凯恩斯主义,当然里面的内容还有很多,这里简单理解一下就好。既然胡佛搞砸了,那这一套还好使吗?咱看看罗斯福怎么做的就知道了。
    罗斯福放了个大招——废除金本位。金本位制度规定美元和黄金挂钩,两者价值要对等,不能瞎印美元。现在脱钩了,政府就能多印点美元给银行,而且美元一多就贬值。对其他国家来讲,美国商品便宜了,秒变抢手货。

  • 政府搞基建招工,然后给工人们发工资。

  • 胡佛和罗斯福的很多政策其实差不多,都整顿了银行,都不让降工资,但为啥一个失败而另一个却成功了呢?这里就要说一下经济周期了。啥叫经济周期?简单说就是:下滑期,再厉害也没用;上升期,躺赢不是梦。

重构-改善既有代码的设计-摘要

发表于 2020-11-01







《重新定义团队:谷歌如何工作》-笔记

发表于 2020-10-24

自序

  • 韦尔奇和康纳迪采用了20-70-10的绩效排名体系,在这种体系下,他们将通用电气的员工分为三类:最优秀的20%,中间层的70%,末尾的10%。最优秀的员工得到赞扬,作为奖励可以选择工作任务,参加领导力培训项目和享有优先认股权。末尾的10%会遭到解雇。

  • 清晰明了的“前20%”“中间70%”和“末尾10%”被更加委婉的描述方式取代:“顶尖人才”“极具价值”和“需要改进”。

  • 因为自由的状态是以自由表达为基础的,而自由表达又依靠对信息和真实情况的了解。

  • 在这里有时会精疲力竭,有时会倍感沮丧,但永远奋发进取,创造有目的性的、自由的和充满创造力的环境。

前言 为什么谷歌的原则也对你适用

  • 当员工信任领导层的时候,他们就会成为品牌的代言人,从而为其家庭、所处的群体和环境带来积极的改变。员工生产效率变高,企业发展增速,顾客购买热情高涨,商业投资回报也就自然而然地实现了。
  • 从管理的核心角度来讲,权力的动态方向恰与自由背道而驰。员工要依靠管理者,希望取悦他们。然而,注重取悦管理者意味着与其进行开诚布公的探讨是有风险的。如果你不取悦他,内心就可能惶恐不安或焦躁愤恨。同时他还要保证你实现某些工作成果。
  • 谷歌应对此类问题的方法是割开这个结。我们刻意剥夺了管理者对员工的控制权。下面一些例子是谷歌的管理者不能单方面做出的一些决定:•雇用谁•解雇谁•如何评估一个人的表现•给某个人加薪多少,给多少分红或分配多少股权•选谁来拿最佳管理奖•给谁升职•代码何时才算合格,可以纳入到公司的软件代码库中•一种产品的最终设计以及何时投放市场。
    上述决定都是由一组同事、一个委员会或一个特别任命的独立团队做出。
  • 升职的问题又摆到了眼前,这时他们又会惊愕地发现自己没有权力独自决定给他们认为团队里最优秀的员工升职。问题在于,你和我对“最优秀的员工”的认识有所不同。也有可能你的团队中最差的成员比我的团队最优秀的员工还要好,这种情况下,你的整个团队都应该升职,而我的团队成员都不应该升职。
  • 一名管理者到底该做些什么呢?只有一件事情可以做。按照我们的执行总裁埃里克·施密特的话说就是“管理者服务于团队”。和其他企业一样,我们当然也遭遇过意外和失败,但是在谷歌这种不干预的领导方式下,管理者的关注重点不是惩罚或奖励,而是清除路障,鼓励团队。
  • 只有公司采用了给员工充分授权的经营方式(比如,剥夺管理者的决定权,并将该权力分配给一些个体或团队),为员工提供工作之外的学习机会,提高团队信任度(给团队足够的自主权,允许员工自行组队),或是组合利用上述方法,这样业绩才能得到提升。
    简而言之,只有当企业着手给员工更多的自由时,业绩才能提升。
  • 我们所做的绝大多数事情的费用都极低。即便是只拿死工资的时候,也能把工作做得更好,使员工更有幸福感。其实,越是在经济状况不好的时候,善待员工越是重要。
  • 我们只需要坚信员工都是好的,再就是要有足够的勇气,把员工看成是企业的主人翁,而不是把他们当成机器。机器会完成工作;主人翁会竭尽所能帮助企业和团队获得成功。人的一生大部分时间都在工作,但是对多数人而言,工作是一件痛苦的事情,只是一种谋生的手段。可以不必如此的。
  • 如何更好地探寻和发展自由、富有创造力和宽松的环境,使员工在这种环境下工作。

第一章 成为一名创始人

  • 他们都希望创造出这样一家公司:工作有意义,员工可以尽情发挥自己的激情,他们和他们的家人都得到关怀。

  • 建立杰出的团队或机构的起点是有一位创始人。但是成为一名创始人并不意味着要建立一家新的公司。任何人都有能力成为一名创始人,也可以成为所在团队的文化创造者,不管你是一家公司的第一名雇员还是一家数十年历史的公司中的一员。

  • 我写作本书的愿望之一就是,希望阅读本书的人都能站在创始人的角度看待自己。或许不是一家公司的创始人,但是也可以成为一个团队、一个家庭或一种文化的创始人。谷歌的经历带来的最根本的一点经验就是你必须先决定自己想要成为一名创始人还是一名雇员。这个问题关乎的不是实际的所有权而是做事的态度。

  • 谷歌工作法则:成为一名创始人□把自己看成是一名创始人□像创始人一样行动

第二章 “文化可以把战略当早餐一样吃掉”

  • 如果你给员工以自由,他们将还你以惊喜

  • 公司文化的三个根本元素:使命、透明和发声的权利。

  • 我们的使命是“整合全球信息,使人人都能访问并从中受益”

  • 谷歌的使命与众不同,既在于其简洁明了,也在于其未曾言及的方面。没有言及利润或市场。没有言及顾客、股东或用户。没有言及为何选此作为公司使命,也未曾言及如何实现这些目标。相反,谷歌的使命整合全球信息,使人人都能访问并从中受益是一件不言自明的好事。这样的使命使个人的工作有了意义,因为它不是一种商业目标而是一种道德目标。史上最有影响力的运动都要有道德动机,或是追求独立,或是追求平等权利。

  • 归根结底,我们永远也无法达成我们的使命,因为总有更多的信息需要集成,总有更多的方式可以使人们从中受益。这样就给我们创造了动机,促使我们不断创新,探索新的领域。要成为“市场领导者”这种公司使命,一旦实现,就难以再带来更多的激励。

  • 我们在践行公司使命时,也带来了令人惊喜的实用价值。

  • 每一类职业的人里面都大约有三分之一将自己的工作看作一种使命。这样做的人不仅更快乐,而且也更健康。

  • 如果你相信员工,就不必害怕与他们分享信息透明是我们公司文化的第二块基石。“默认开放”(Default to open)是在开源社区中时常会听到的一个短语。

  • 如果你能给员工以自由,他们就会为你创造惊喜。他们有时也会令你失望,但是我们也都知道人无完人。这并非宣扬自由的檄文,只不过是权衡利弊后的选择。

  • 谷歌工作法则:打造了不起的文化□将工作看作是一种命运的召唤,而且工作要有富于意义的使命。□给人以稍多于你的舒适区的信任、自由和自主权。如果你没有感到紧张,那是因为你给的还不够。

第三章 只聘用比你更优秀的人

  • 如果我们前期选人的时候能做到更好,也就意味着聘用他们之后在这些人身上投入的精力就会减少。聘用水平超过90%应聘者的员工,最糟的情况他们也能有平均水平的表现。这些员工几乎不可能成为公司里表现最差的

  • 你如何能够判断自己到底有没有找到一名非凡的人才?我所遵循的首要原则——也是你在招聘时需要做出的第二个改变——是:“只聘用比你更优秀的人。”我所聘用的人都在某些特定的方面比我更优秀的。

  • 从《人才的谬见》一文中得到的教训不是“不要聘用聪明人”。而是“不要只聘用聪明人”。至理名言。出色的招聘工作不仅在于聘请到名头很大的人、顶尖的销售人员或最聪明的工程师,而且在于搜寻到在你所处组织的环境下能够成功的最优人才,在于找到能使周围每个人都更加成功的人才。

  • 谷歌工作法则:关于招聘□资源有限的情况下,将人力资源费用首先投入到招聘上。□慢慢来,聘用最优秀的人才,只聘用在某些特定的方面比你更优秀的人,不要让经理独自做团队人员聘用决策。

第四章 搜寻最优人才

  • 最优秀的人并不在寻找工作。表现极为优秀的人在现在的工作岗位上很开心,满足感很强。他们不会进入人们的推荐人名单中,因为人们会想为什么要推荐一些在现在岗位上很开心的人呢?而且他们肯定也不会考虑新的工作。

  • 谷歌工作法则:搜寻非凡的应聘者?□要详细说明寻找人才的标准,依此找到最优秀的被推荐人□使招聘成为每个人的工作□不要害怕尝试疯狂的事情,以此引起最优秀人才的注意

第五章 不要相信你的直觉

  • 根据头10秒钟的印象做出的预测是没有任何意义的。这头10秒钟的预测使我们在整个面试过程中都在试图证明我们对某个人的印象,而不是真正地去评估他们。心理学家将这种现象称作证实偏见(Confirmation Bias),“倾向于寻找、解释或优先考虑那些能够支持我们观点或假设的信息”。

  • 多数的面试都是在浪费时间,因为99.4%的时间都用在证实面试官最初10秒钟的印象,不论印象好坏。“请做一下自我介绍。”“你最大的缺点是什么?”“你最大的优势是什么?”毫无价值。

  • 你不仅要评估应聘者,还需要让他们喜欢上你。真的。你得让他们有一次非常棒的体验,处理好他们关心的问题,使他们感觉刚刚经历过一生中最快乐的一天。

  • 谷歌工作法则:筛选新雇员?□设定高质量标准□寻找自己的应聘者□客观评估应聘者□给应聘者一个加入的理由

第六章 打造最幸福的公司

  • 权力导致腐败,绝对的权力导致绝对的腐败

  • 如果要做假设,也应该认为掌握权力的人是恶的,权力越大,恶念越深……伟人多数是恶人,即便他们不滥用权力,而只是施加影响力;如果你再考虑到权力带来腐败的可能性或必然性,他们的恶会更甚。

  • 回想一下你参加过的会议。我敢打赌,级别最高的那个人总是坐在会议桌的上首。是因为他们匆匆地从一间办公室冲到另一间办公室,抢先来到会议室,才占到这个最好的位置吗?下次仔细观察一下。随着参会者陆续到场,他们会刻意将上首的座位空着。此种现象证明了我们一些不自觉的微妙举动都创造了等级制度。没有指示,没有讨论,甚至没有有意识的思考,我们就会为“上级”留出位置。

  • 我们最高层的一些领导对这种现象也非常熟悉,并尝试打破这种状态,选择坐到会议桌某一侧的中间。

  • 经理都倾向于累积和运用权力。员工都倾向于服从命令。

  • 不可否认的是,我们很多人都同时扮演着经理和员工两个角色。我们都遇到过控制欲很强的经理,也都遇到过不服从管理的员工,这样的挫败感我们每个人都曾有过。

  • 授权于群众的第一步就是要保证人们能够安全地发表意见。俗话说“枪打出头鸟”,就是警示人不要随便发表评论。正是因为这个原因我们才尽可能削弱经理的权力。他们拥有的正式授权越少,就越难利用萝卜加大棒的政策辖制团队,这个团队的创新范围便会越广。

  • 为了减轻人类内在寻求等级划分的倾向,我们尝试除去显示权力和地位的象征符号。

  • 谷歌坚持的核心准则中一直都有一条“不要耍政治手腕。用数据说话”

  • 经理们忽略的是,每次他们放弃一些控制权,就可以为团队创造一次提升的好机会,也给自己节省出更多时间应对新的挑战。找出某个令你的团队感到沮丧的领域,让他们改变现状。如果有限制,比如时间或资金有限制,就告诉他们。要对员工透明,在塑造团队或公司的过程中给他们发言权。你会惊讶于他们的成就。

  • 谷歌工作法则:授权于员工□消除地位象征□依靠数据而不是根据经理的想法做决定□探寻方法,让员工塑造自己的工作和公司□高期待

第七章 为什么每个人都讨厌绩效管理

  • 关注个人成长而不是评分和奖励,以此改善绩效

  • OKRs(Objectives and Key results,目标和主要结果)。目标必须具体、可度量、可检验;如果你达成所有结果,就能完成目标。

  • 正如普拉萨德·塞迪解释的:“传统的绩效管理体系犯了一个大错。他们将两件应该彻底分开的事情合到了一起:绩效评估和人员发展。评估有其必要性,可确定加薪或奖金等有限资源的分配。发展也同样很有必要性,可以促进员工的成长与提高。”如果你希望员工成长,不要同时进行这两项谈话。确保发展成为你与团队成员之间不断往返的一个过程,而不是年底的一次惊喜。

  • 为了确保员工与经理的交谈更有效,我们整理出一份一页的讲义,分发给他们,在绩效交谈的时候使用。做这一份讲义的目的还是为了使对话更具体,更切合实际。我们给员工分发这些讲义只是为了稳妥;我们希望经理能够覆盖恰当的话题,但是让员工准备好引导讨论也没有什么坏处。

  • 把奖励分配谈话与员工发展谈话分开。两项谈话混为一谈会扼杀学习的动力。不管公司规模多大,这一点都适用。

  • 谷歌工作法则:绩效管理□正确地设定目标□收集同事的反馈意见□通过校准流程确定考评结果□把奖励分配谈话与员工发展谈话分开

第八章 管理团队的两端——最优员工和最差员工

  • 从统计学上讲,这些现象更适合用“幂律分布”(power law distribution)解释。

  • 大多数公司在管理员工时都采用正态分布,大多数员工被列为平均水平,两端为表现差和表现优秀的员工。两端并不像身高分布那样对称,因为失败的员工都被解雇了,最差的应聘者根本就进不了公司,因此左侧的一段很短。但是很多公司认为员工的表现还会符合同样的正态分布。这样的认识是一个错误。事实上,组织中大多数的个人表现符合幂律分布。

  • 并非大批平均水平的员工通过数量优势做出主要贡献,而是由少数精英员工通过强大的表现做出主要贡献。

  • 采用一种不同的方式:我们的目标在于告诉底端5%的每一位员工,他们处于这样一个群体。这种对话不会是幽默风趣的。但是我们向这些员工传递出的信息使这项工作简单了一些:“你在整个谷歌处于底端的5%。我知道这样的感觉不好。我之所以要告诉你是因为我想要帮助你成长,变得更好。”换言之,这不是一次“要么好好干,要么走人”的谈话;这是一次感性的谈话,目的是帮助一个人发展。有一位同事曾经将其形容为“富有同情心的实用主义”。绩效表现糟糕极少是因为某人的能力不足或品性不佳。更多的是由于技能的缺陷(或许可以改进,或许不能)或意愿不足(员工没有做工作的动力)。在后一种情况下,可能是由于个人问题,也可能预示着团队中出现了某个更大的问题需要修正。

  • 通常,调岗之后这个人的绩效能够提升到平均水平。这听起来或许不算什么,但是反过来这样想想:100个人的团队中,吉姆是表现最差的5个人之一。经过这次干预之后,吉姆的绩效表现进入了前50位。

  • 余下的一些员工,有的选择主动离职,有的就只能解雇了。听起来很残酷,但是最后他们通常会更开心一些,因为我们表现出对他们状况的理解,并与他们一道投入了改进过程,而且我们给他们时间寻找一家能够发挥专长的公司。

  • 在分布底端投入时间精力的这个循环意味着你们的团队能够提升很多。员工或是得到大幅的提升,或是离职去别的地方寻找成功。

  • 对员工直接一些实际上是仁慈的表现

  • 我要强调一点,谷歌识别底端5%的员工并非“员工大排名”,不是要按照固定的分布将员工的绩效表现分类。那种考评方式下,员工为了不落在底端会激烈竞争,最终搅乱了公司文化。
    我采访过的每一位现在和过去的微软员工——每一位——都认为员工大排名是微软内部最有害的政策,在这种政策下,无数的员工被迫离职……“如果你的团队中有10个人,你开始工作的第一天就了解到,不管每一位员工多么优秀,都将有两个人获得好评,7个人获得中评,另外有一个人获得差评,”一位前微软软件开发工程师说,“这使员工的注意力都放在内部互相竞争上,而不是与其他公司竞争。”

  • 如果你相信员工本质都是好的,认为他们值得信任,那就必须对他们坦诚相待,保持透明度。这就包括让他们知道自己的绩效拖了后腿。但是在一家使命导向性、有目标的公司,处理人力问题时要有敏感性。多数表现不佳的员工能够认识自己的表现,想要变得更好。给他们改进的机会非常重要。

  • 顶端的员工生活在高产出、良好的反馈意见、更高的产出和更好的反馈意见这样一个良性循环中。他们每天都沐浴在爱的环境中,给他安排的额外工作也使他更加开心。更重要的是要从最优秀的员工身上学习。

  • 最优秀经理手下工作的谷歌人在十几项Googlegeist评估维度上要比最差经理手下工作的谷歌人高5%至18%。除此之外,他们在以下几方面的认可度明显更高:•职业决策更加公正。绩效评估公正,得到升职的都是实至名归的人选。•个人的职业目标能够达成,他们的经理是非常有帮助的支持者和引导者。•工作高效,决策迅速,资源分配合理,从多种视角考虑问题。•团队成员之间没有等级制度,互相尊重,决策依据数据做出而不是靠耍手段,团队内部各人的工作和信念都保持透明。•他们适当地参与到决策制定过程中,并且得到一定的授权去完成工作。•他们可以自由地平衡工作和私人生活。

  • 最优秀经理领导的团队绩效表现也更好,人员流动率更低。

  • 调查显示高分经理具备八种低分经理所不具备的共性:8个氧气项目特性1. 做一名好的导师。2. 给团队授权,不随便插手下属工作。3. 表达出对团队成员的成功和个人幸福的兴趣和关心。4. 高效/结果导向型。5. 善于沟通——聆听和分享信息。6. 在职业发展方面助力团队。7. 对团队有清晰的愿景和战略。8. 具备重要的技术技能,可为团队提供建议。

  • 我们发现在伟大的经理中间,技术专业性是8种特性里重要性最低的一项。不要误会,技术专业性非常关键。一名不会编代码的经理不可能在谷歌领导一个团队。但是在区分最优秀的经理行为时,技术能力在不同团队中是差异最小的。

  • 这是对经理–员工关系的一次华丽反转。想要提高,最好的方法是与那些提供反馈意见的员工进行交谈,询问他们希望自己做出哪些改变。

  • 让处于绩效分布底端的人了解真相,但是不要将绩效与薪酬或职业成果直接挂钩,尽可能用一种积极的方式警示并激励他们。数百名经理需要面对自己并非好经理的现实。

  • 谷歌工作法则:管理团队的两端—最优员工和最差员工?□助力有难处的员工□将最优秀的人放在显微镜下观察□利用调查和检查清单寻找真相,推动员工学习□与人分享员工对你的反馈意见,以身作则采取行动解决问题,身先示范

第九章 打造学习型组织

  • 在某一领域精熟的人,不管是小提琴家、外科医生、运动员[插图]还是拼字比赛冠军[插图],学习的方法都有异于常人。他们将活动分解成细小的动作,比如连续数小时在雨中练习同一种击球动作,不断重复。每一次,他们都会观察效果,做微小的——几乎难以觉察的——调整,逐步改进。埃里克森将这种方式称作刻意练习:有意重复类似的小任务,即时反馈、修正和实验。

  • 不过或许你不想要手下最优秀的销售人员去教学。毕竟,不应该让她全心全意做销售吗?我认为这是一种短视的想法,因为个人的绩效表现的提升是线性的,而培训授课则会带来几何级数的增长。

  • 学习型组织发端于一种认识,即我们所有人都渴望成长,也都希望帮助他人成长。然而,在很多组织中却是员工受教,专业人士负责教学。为什么不让员工同时做两件事情?

  • 谷歌工作法则:打造学习型组织□进行刻意练习:将课程分成易于消化的小块,给出明晰的反馈意见,并不断重复这个过程□请最优秀的员工教学□只在已经证明能够改变员工行为的课程上进行投入

培训的效果衡量四个层次,一是反应,课后调查反馈课堂效果及氛围。二是学习,调查学员学到了那些知识,学习效果如何。三是形行为,接受学员学以致用的反馈,是否有提升,同时调查团队周边或客户的客观评价。四是结果,最终是否导致了效率提升,绩效比变好等等

第十章 不公平薪酬

  • 总结下来共4条原则:1. 不公平薪酬。2. 以成就为荣,不以报酬为荣。3. 创造易于传播爱的环境。4. 精心筹划却遭受失败的要奖励。

  • 如何庆祝成功的同时不滋生嫉妒

  • 这样做带来了不良的后果,假如你是非常优秀的员工,将会得到几次大幅加薪,之后加薪的速度会越来越慢,直到最后你接近容许的薪酬范围上限,加薪也会随之停止。最优秀的队员除了需要高报酬之外,也能持续创造优异的成果。

  • 对于那些快速学习成长和表现最顶尖的人来说,确保你的薪水与所创造的价值相适应有一种方法,就是离开这种垄断的内部市场,进入自由市场。即寻找一份新工作,以你的真正价值为基础,协商薪酬,然后离开现在的公司。这也是你在人才市场上看到的真实情况。

  • 为什么公司不设计一种体系,避免最优秀和潜力最大的员工辞职呢?因为他们对公平有一种错误认识,没有勇气坦诚面对自己的员工。薪酬的公平并不是说所有在同级别岗位上的人都要拿同样的薪水或是上下差不到20%。薪酬与贡献相匹配才能算得上公平。因此,个人的薪酬应该有巨大的差异

  • 正态分布(又称高斯分布)与幂律分布最大的区别在于,某些现象中,正态分布严重低估了极端事件发生的概率。

  • 个人的表现符合幂律分布。事实上,大多数员工都在平均水平以下:•66%的研究员发表论文的数量低于平均水平。•84%艾美奖提名演员获得提名数低于总提名平均数。•68%的美国参议院议员的任职届数要低于平均数。•71%的NBA球员得分低于平均分。低于平均数并非坏事。这只不过是一种数学统计而已。数据显示,非凡贡献者的表现水平要远高于大多数人,他们可以拉动平均数远高于中位数。

  • “10%的产出来自最顶尖1%的员工,26%的产出来自最顶尖5%的员工。”换言之,他们发现最顶尖1%员工的产出是平均产出的10倍,最顶尖5%的员工的产出是平均产出的4倍多。当然,这种算法并非在所有地方都适用。恰如奥博伊尔和阿吉斯所指出的:“工业和以体力劳动工作为主的组织,技术能力有限,对最低和最高产量有严格的标准。”在这些地方的员工表现更接近于正态分布。在这种环境下,极少有机会能做出非凡的成就。但除此种情况之外,幂律分布都占据主导。

  • 那些拿到100万美元奖励的人一定、一定是狂喜的吧?他们确实很开心。我的意思是说,拿到这样的奖励非常激动人心。人生就此改变。之后,我们最优秀的、最有创造力的、又有洞察力的技术人员中有一些(虽然不是全部)——他们曾创造出谷歌历史上最具有影响力的一些产品——意识到自己不太可能通过同样的产品两次获得创始人奖,因此立刻会想要转移到新的产品领域。虽然并非本意,但是我们创造出的这种激励体系,使公司里几乎所有人都不如以前开心,即使有少数人开心了,但也动了念头,不愿继续从事为他们赢得奖励的关键的创新性工作!

  • 我们公开地进行体验奖励,私下里进行差异化奖金和股权奖励。这样的结果使谷歌人变得比以前更开心。

  • 在奖励员工的时候,一定不能只用现金奖励,还要考虑体验奖励。很少有人回顾人生时会只看到一张张薪水单。他们会记住一些谈话、一些午餐,与同事和朋友共度的一些事件。不要用金钱庆祝,要用行动庆祝。

  • 谷歌工作法则:不公平薪酬□控制情感,做到不公平薪酬。薪酬差异化要明显,应符合绩效表现的幂律分布□以成就为荣,不以报酬为荣□创造易于传播爱的环境□精心筹划却遭受失败的要奖励

来源微信读书
分章读书总结:
1、在绩效方面,更多要参考幂律分布而不是传统的正态分布,平均数不等于中位数,实际上组织内大部分员工处于平均值之下,组织10%绩效产出来自1%的员工,出于人才保留和激励,不公平薪酬完全是合理且必要的;
2、人对于公正性的感知非常强,会极大影响他对于自身价值的认识、工作满意度、上级信任度和组织忠诚度,所以极端奖励体系要同时满足分配公正和程序公正;
3、在奖励员工时,不能只考虑现金奖励,还要考虑体验奖励;金钱激励是即时性的,所以在金钱激励时要辅以绩效谈话或颁奖等仪式性行为,以加深记忆,拉长激励的保质期,但总体来讲,用行动庆祝比用金钱庆祝更有持续记忆力;
4、要在组织内创造易于传播爱的环境,公开的赞许是最有效的一种管理工具,相信员工能做正确的事,结果通常他们会去做正确的事;
5、奖励成功也要奖励失败,否则员工会失去创造方面的冒险性;

第十一章 世上最好的东西是免费的

  • 我们做的几乎所有事情都是免费或费用很低的。所有这些项目都是为了提升效率,创造社区意识或创新精神。

  • 我不能给出数据证明有多少经济价值是因为免费洗衣机创造的,因为我根本就不在乎这些。我还记得职业生涯早期的麻烦经历,从我公寓到地下室的公用洗衣机要经过堆满杂物的楼道和摆满清洁用品的楼梯,而后要困在家里好几个小时,生怕别人来偷走我的衬衫。超级烦人。我们为什么不在园区找一间空房间,放上几台洗衣机和一些清洁剂,让生活稍微愉悦一些呢?我们为什么不请一些演讲者来园区给我们做演讲呢?

  • 我们进行过离职调查,从来没有任何人说这些服务能够使他们留下,也没有人因为这些服务才加入谷歌。这其中并没有什么大秘密:我们所做的这些事情(大多数)仅是举手之劳,但却收获巨大,而且我们感觉这样做是应该的。

  • 微小的关怀和资源投入也能带来巨大的成果。

  • 谷歌工作法则:效率、社区意识和创新精神?□使员工的生活容易一些□想办法说可以□生命中的不幸罕有发生……一旦员工遭遇不幸,要伸出援手

第十二章 助推

  • 诺贝奖获得者、普林斯顿大学荣誉退休教授丹尼尔·卡尼曼在他的《思考,快与慢》(Thinking, Fast and Slow)一书中描述人类有两套思维系统。其中一套慢、有深度、有思索、以数据为导向,而另外一套快、依靠本能、属于直觉思维系统。多数时候我们会依赖第二套思维系统,因此即便我们认为自己理性的时候,其实恐怕也并非如此。

  • 在面对对自我观念和自我认同的威胁时,防御是一种自然的反应。

  • 只需简单地提供信息,然后依靠人的本性——好胜的本性和利他主义的本性——就能改变一个机能失调的团队,看到这种现象真是既有趣,又令人振奋。

  • 谷歌工作法则:助推走向健康、富有和快乐□区分“实是”和“应是”的不同□进行许多小的实验□助推,不要硬推

第十三章 谷歌的教训

  • 任何想法走了极端都会变得愚蠢可笑。

  • 因此外界批评从原则上来讲是对的,但在实践中却并非如此。每年我们都要遭受一次重大的信息泄露。每一次都要进行一次调查,而且每一次信息泄露不管是刻意而为还是意外事故,不管是出于善意还是恶意,当事人都会被解雇。我们不会宣布泄露信息的人是谁,但是我们会让公司里的所有人都知道泄露的信息是什么,以及后果怎样。很多人了解到很多信息,总不可避免地有几个人会搞砸。但这样是值得的,因为泄露信息造成的损失相比我们享受的开放性而言并不算重大。

  • 一次失败的绩效管理变革。每一次我们对谷歌的绩效管理体系做出改变的时候,都会遭遇两个不证自明的真理:1. 没人喜欢当下的体系。2. 没人喜欢改变当下体系的提议。

  • 谷歌工作法则:搞砸的时候□承认错误。坦诚面对错误□吸取各个方面的意见□不管什么坏掉了,修好□找出错误中的寓意,加以传播

第十四章 从明天起你可以做些什么

  • 问题并非管理体系需要如何改变人性,而是如何改变工作的性质。

  • 一家组织的经营方式可以遵循两种极端的模型。本书的核心在于我的信念,相信你可以选择出期望打造何种类型的组织,而我所做的只是展示一些实现目标的工具。“低自由度”的一端是指挥控制型组织,对员工的管理很严格,工作强度大,公司对员工弃之如敝屣。“高自由度”的一端以自由为基础,员工受到尊重,对公司如何发展有一定的话语权。

  • 如果你希望建立高度自由的环境,下面有10个步骤可以帮助你的团队和组织实现转型。1. 赋予工作意义2. 相信员工3. 只聘用比你更优秀的人4. 不要将职业发展与管理绩效混为一谈5. 关注团队的两端—最优员工和最差员工6. 既要节俭又要慷慨7. 不公平薪酬8. 助推9. 管理日益提升的期望10. 享受!然后回到第1条,再来一遍

  1. 赋予工作意义工作至少占据了我们生活三分之一的时间和清醒时的一半时间。工作可以——也应该——不仅仅是一种达成结果的手段。非营利组织从很久以前就已将工作的意义作为吸引和激励员工的方法。比如,帮助难民的非营利组织避难通道(Asylum Access)的创始人艾米丽·阿诺德–费尔南德斯建立起一个世界一流的全球团队,这个团队的建立完全基于成员的共同愿景,即帮助难民找到工作,送他们的孩子上学,帮助他们在新的国家中建立起新的家园。在很多环境下,工作仅仅是为了得到薪水,但是亚当·格兰特的研究成果证明,只需与那些因你的工作而受益的人建立起微小的联系,便能大幅提升生产效率,而且还能使人更开心。所有的人都希望自己的工作有一定的目的。将工作与一种超越日常但却能真实反映所做事情的理念或价值观联系在一起。谷歌立志整合全球信息,使人人都能访问并从中受益。任何在这里工作的人都要践行这项使命,不管职位多么低微。这种使命吸引来了人才,激励他们留下来,去冒险,以最高水平的表现去工作。如果你是一名鲑鱼切片工,你就是在养育他人;如果你是一名管道工,你就是在改善人们的生活质量,保持他们家园的清洁和健康;如果你在生产线上工作,不管生产的产品是什么都将为人所用,帮助到他们。不管你在做什么,都会对某人有重要的意义。而你所做的这项工作对你也应有重要的意义。作为一名经理,你的工作就是帮助员工发现这种意义。
  2. 相信员工如果你相信人本善,就应如此行动。要对员工保持透明和真诚,给他们话语权,决定如何行事。从小事做起也可以。真的,你之前表现出的信任越少,小的举动就会令人感到越重大的意义。对于一家传统上一直进行不透明管理的公司而言,一个意见箱,员工知道其中的意见真正地有人读过且有人处理,会令人有革命性的感觉。请团队成员问你是什么促使你做出最近的一些决定的。如果你拥有的是一家小商店,要经常询问员工他们认为做出哪些改变能使商店更好,或者问他们如果这是他们的公司,他们会怎么做。因为你希望他们能这样做。就好似这是他们的公司一样。要实现这种状态唯一的方法就是你放弃一小部分权力,给他们朝这个方向发展的空间。这听起来或许有些令人望而却步,但其实并不需要冒太大的风险。管理层随时都可以拿走意见箱,或告诉员工不再需要他们的意见,或者甚至可以解雇一些人。如果你担心这样做会有损你的权威,那么就告诉员工每一种改变都只是试行几个月。如果可行,就继续。如果不可行,就停下来。即便仅仅是尝试,你的员工也会心怀感激的。如果你是团队的成员,就向你的老板提出这样的请求:给我一个机会。帮助我理解你的目标是什么,让我理清如何达成这些目标。这样的小举动将创造通往主人翁文化的途径。
  3. 只聘用比你更优秀的人企业总会认为尽快填补一个空缺岗位比耐心寻找最适合一个岗位的人更重要。有销售人员对我说过:“宁滥毋缺”,意思是说他们宁愿由一名领域内中等水平的人完成70%的限定销售额,也不愿让一个岗位空缺。但是在招聘质量要求上的妥协就已经是一个错误了。聘用糟糕的员工就好似在锅里扔进了一颗老鼠屎,不仅自身的表现不佳,还会拖累周围人的表现、士气和精力。如果拒绝一个人意味着其他每个人在短期内都需要更努力地工作,只需要提醒他们回想一下与上一个浑蛋同事共事时的遭遇就好了。成立委员会完成招聘工作,预先设定客观的标准,永远不要妥协,定期查看新聘用的员工是否优于以往聘用的员工。能够证明你的招聘工作做得很好的是新聘用的员工中十有八九都比你更优秀。如果他们不及你优秀,暂时不要聘用,直到找到一个更优秀的人。短期内你们的工作会放缓,但最终你将建立一个更加强大的团队。
  4. 不要将职业发展与管理绩效混为一谈克里斯·阿基里斯向我们展示了,即便最成功的人也有学不会的时候。如果他们都无法学习,那么余下的我们又能有什么希望呢?面对自己的缺点时总是难以令人愉悦。如果你将后果与批评结合在一起,如果员工感觉犯了一个错误就意味着在职业或经济上受损,那么他们就会争辩而不是保持开放的态度去学习和成长。发展谈话要随时进行,确保平稳且富有成效,恰如我以前的经理在每次会后进行的谈话一样。开启一次发展谈话的时候永远要保持这样的态度:“我能做些什么帮你取得更大成功?”否则,员工的防御心理就会增强,学习将中断。在实现目标的道路上,要确保发展谈话的平稳进行。不管目标有没有实现,两种谈话都应在空间和时间上分开。一个绩效考评阶段结束之后,立刻直入主题就设定的目标进行讨论,探讨哪些目标已经实现,以及奖励如何与绩效挂钩。但是这一次交谈应该只针对成果,而不是过程。可能没有达成目标,可能完成了目标,也可能超额完成了目标,每一种结果都应该对应不同的奖励或鼓励。如果处理好这方面的工作,绩效讨论就不再会是突然袭击,因为在整个过程中你们都在进行沟通,员工也能感觉到你在每一步工作上对他们的支持。不管在什么情况下,都不要完全依赖经理确定员工表现的确切情况。为了团队的发展,恳请同事贡献意见,即使是简单地问询一些问题或发布一些简单问卷也可以。至于绩效考评,要求经理们坐在一起组成团队,共同校准考评结果,确保公正。
  5. 关注团队的两端——最优员工和最差员工将最优秀的人放在显微镜下观察。他们结合了环境和技能,精心打磨才理清了如何成就超常表现。不仅要识别出最佳全能员工,还要识别出特定方面最突出的员工。不要寻找最优秀的销售人员;寻找面向特定规模的新用户销售量最大的人。找到能在夜雨中练习高尔夫球那样的优秀人才。在专业方面分得越精细,就越利于研究你的明星员工,发现他们比其他人更成功的原因。然后不仅要让他们成为其他人的榜样,围绕他们所做之事制定检查清单,还要请他们做老师。教授一项技能是掌握它的最好方法之一。请明星员工做教员,即使是半小时的咖啡交谈时间,也要促使他们清楚地讲述自己是如何开展工作的,而这个过程也有助于他们的成长。如果你身边有这样的同事,要仔细观察他们,多向他们提问题,利用这个机会从他们身上获取知识。与此同时,对表现最糟糕的员工也要心怀怜悯。如果你的招聘工作没有犯错,那么大多数陷入困境的员工都是因为没有找到合适的岗位,而不是因为自身笨拙。帮助他们学习或找到新的角色。但是如果上述努力失败,立刻辞退他们。让他们留在公司里并非仁慈,在一个自己并非最差员工的环境中,他们会更加快乐。
  6. 既要节俭又要慷慨我们为员工做的大多数事情都不需要任何花费。请供应商来公司为员工服务或与当地三明治店协商为公司送午餐。TGIF和嘉宾演讲者需要的仅仅是一个房间和一支麦克风。然而却带来了无比丰富的财富:启发谷歌人开发出一种新的服务或引发讨论。省下钱来,在员工最需要的时候,在他们遇到灾难或大喜之时使用。当某人需要急诊医疗护理或迎接家庭新成员之时,你的慷慨会带来最大的影响力。关注人类最重大的一些时刻能够突出你们的组织关心每一个员工。了解到自己在人生低谷和顶峰之时背后都有整个机构的力量做后盾,每个人都会感到宽慰。这一点对很小的公司也同样适用。我的父亲成立过一家工程公司,他亲自领导了30年。他深切关怀每一位员工,不仅付给他们薪水,而且善意赞扬,为他们提建议,做引导。团队中任何一个人任职5年之后,他都会拉他们出来私聊一番。他告诉他们公司有一项退休金计划,5年时间的投入已经满额。除了员工自己存下来的积蓄,他还为他们每个人额外存了一笔钱。有些人欢呼雀跃,有些人感动流涕,有些人只是简单地谢过了他。他没有提早告诉员工这项计划,因为他不希望人们为了钱才留下来工作。他希望员工留下来是因为喜欢创造东西,是因为喜爱这个团队。关键时刻他很慷慨,因此也使结果大不相同。
  7. 不公平薪酬不管你们的人力资源部门是怎么对你说的,要记住大多数工作中的绩效表现都是符合幂律分布的。你们的团队中90%甚至更高的价值都是由顶尖的10%的人创造的。因此,最优秀的员工远比平均水平的员工更有价值。他们的价值或许比平均水平的员工高50%,或许高50倍,但是不管高多少肯定值得你为他们付出更多。一定要让他们感觉到这些。即使你没有足够的资金为他们提供超高额的薪水,但是更高一些的薪水也算一种心意表达。另外一位员工对这种奖励或许会有些不高兴,但是你可以坦诚相对,解决这个问题:向他们解释薪酬差异化的原因,以及他们怎么做才能改变现状。与此同时,在公众认可方面要慷慨投入。团队的成就要庆贺,虽然失败但却学到重要经验教训的时候也要鼓励。
  8. 助推本书中提到的各种想法中对你未来的人生能够带来最大切实改善的一种就是改变每笔收入中存下来的金额。如果比较30年里赚到的钱同样多的一些人,他们累积的财富却可能有3000%的差异,而这一切几乎完全取决于你存下了多少钱。存钱从来都不是一件简单的事情。除非你比克罗伊斯[插图]还要富有,节省下来的每一个美元都像是一种利弊权衡。我是要买品牌货还是一般产品?是买3美元的花生酱还是吃甜点?换一辆新车还是再凑合一年?我毕业后的第一年,当演员的同时还做服务生,经常光顾小镇附近的女主人廉价商店(Hostess Thrift shop),店里售卖一些马上就要过期的面包和点心。我有了零食蛋糕(有节制的!),而且还能每周多省下几美元。要记住,督促谷歌人提升不到3%的存钱比例,每位谷歌人的退休基金将增加262000美元。很多人听到下面的事情或许会觉得很疯狂。我认识一些人,将度假胜地汉普顿斯的10万美元夏日出租房看成生活必需品;我的一些银行家朋友虽然在2008年丢掉了工作,但还是能躲到海滨别墅里度假。我一直反复强调这一点,但人们还是不愿意改变存款比例。计算出当前你存下来的钱占收入的比例,从现在起再多存一些。不论何时这都不是一件容易的事情。但这样做肯定是值得的。上面是对你个人而言。现在环顾四周,看看你所处的环境是如何助推你与周围的人的。你能很容易地看到其他人,与他们建立联系吗?你们冰箱里最不健康的零食放在与人的视线平齐的位置上吗?你给同事和朋友发邮件或短信的时候是分享好消息还是抱怨发火?我们都时刻受到环境的助推,也时刻助推着周围的人。利用这一点,使你自己和你的团队更快乐、更高效。工作场所的空间布置要鼓励你所期望的行为:如果你需要员工协作,但却受困于工位是小隔间,那么就推倒隔断。向员工传递讯息的时候要深思熟虑。分享一些积极的数据,比如参加当地慈善活动志愿者的人数,鼓励其他人参与。你将惊异于同一个工作场所给人带来的感觉会有如此大的不同。
  9. 管理日益提升的期望有时你会犯错误,这时就需要倒退几步。要准备好吃下你们自己的枸杞派。明白了这一点之后,在开始实验之前,告诉周围的人你打算实验本书中的一些想法。这样做有助于促使他们从批判者转变为支持者,实验走上了弯路的时候,他们的质疑将给你带来更多的益处。
  10. 享受!然后回到第1条,再来一遍拉里和谢尔盖立志创立一个他们都希望为之工作的地方。你也可以做同样的事情。即使你刚毕业加入一家公司,还只是一名初级职员,或者是第1000006号职员,你也可以像一位创始人一样选择与周围人的沟通方式,选择如何设计自己的工作场所,选择如何领导。你这样做可以帮助创造一个能够吸引地球上最优秀人才的场所。
  • 这并非一劳永逸的努力。想要打造了不起的公司文化和环境要求我们不断地学习和革新。不要担心立刻尝试所有事情。实验本书中介绍的一种或多种想法,从实验中学习经验,对项目进行调整,然后再次尝试。这种方式的美妙之处在于,良好的环境可以自我强化:所有这些努力可以互相支持,共同创造出一个有创造力、有趣、努力且效率极高的组织。如果你相信人本善,那么就应在工作中践行自己的信念。谷歌已经30多次被卓越职场研究所评为最佳雇主,另外还获得数百种支持女性、非裔美国人、老兵等人群的组织和政府、社会机构颁发的荣誉。但是我们并非第一个“最佳雇主”,也不会是最后一个,甚至在今日也不是唯一一个。谷歌真正擅长的是大规模运营,建立起的体系服务20亿人也如服务10人一样周到可靠。员工的创新得益于一批有先见之明的创始人、狂热的企业文化捍卫者、周密的学术研究,以及具有创造力的公司和政府。数千名谷歌人共同塑造了我们运营的方式,推动我们找到最具有创造力和最公平的方式解决与人相关的问题,使我们肩负起了责任。我有幸与见解深刻、勇于担当、富于创造力的同事和人力运营团队共事,竭尽全力才跟得上他们的步伐。我每天都能从他们身上获得启发。每年有成千上万的人参观我们的园区,问我们:“为什么这里的人这么开心?”“谷歌的秘密是什么?”“我在我的组织里做些什么才能使其更具创新性?”答案就在你的手中。谷歌工作法则1. 赋予工作意义2. 相信员工3. 只聘用比你更优秀的人4. 不要将职业发展与管理绩效混为一谈5. 关注团队的两端——最优员工和最差员工6. 既要节俭又要慷慨7. 不公平薪酬8. 助推9. 管理日益提升的期望10. 享受!然后回到第1条,再来一遍

后记

  • 我们一直围绕着4条基本原则构建谷歌人力运营部:1. 为实现极乐天堂而奋斗。2. 利用数据预测和塑造未来。3. 不遗余力地提高生产力。4. 创建非传统型团队。
  • 我选择血细胞来图示“人力资源正在做的工作”旨在强调我们的项目就如人体的循环系统一样无处不在且同样可靠。
  • 大多数公司,包括几年前的谷歌都会向升职的人道贺,但却毫不关注那些没有得到升职机会的人。这是非常愚蠢的行为。只需要一两个小时的时间找出你认为可能会因此沮丧的人,告诉他们如何才能得到持续发展。人们都希望受到这样的待遇。这样做从程序上讲更公正,有助于员工认同流程的开放性和可靠性。这样远比导致某人辞职,失去他们带来的产值,再寻找新人替代,聘用新人,引领新人走上高速通道这个过程对公司更有利。而且,在某人职业生涯非常脆弱的时刻,你这样做是帮助他们理解了发生的事情,利用一个消极事件激发他的动力。要构建这种能力需要花费一些时间,但是不管你所在组织的规模大小,开始这项工作都不是难事。
  • 她完全不知道电子数据表有一项功能可以做计算。我们需要留心所属专业的两端,并针对他们采取相应的行动。她的例子解释了为什么越来越多的公司将非人力资源从业人员安排为人力资源部的主管。
  • 情商高的人通常有更明晰的自我认知,因此也不会那么傲慢。这也使他们更容易转移到新的领域。
  • 教会整个团队一些传统人力资源团队不会学到的技巧,比如使用sQL或r等编程语言,或将员工面试中搜集的定性数据进行编码的方法。
  • 通过三分招聘模型的使用,我们招聘到具备各种能力的人:人力资源专业人员教会我们如何对员工和组织施加影响,识别不同的形态模式;咨询师可以提升我们对商业的理解力以及我们解决问题的水平;分析人员能提高我们所做各项工作的质量。
  • 在人力运营部中将我们所有人团结在一起的最重要因素在于我们共同的愿景,认为工作不必令人痛苦。工作可以令人更高雅、更有活力、更兴奋。这是推动我们努力的原因。

总结

  • 自由的状态是以自由表达为基础的,而自由表达又依靠对信息和真实情况的了解。(自由需要控制在一定的合理范围内?)
  • 从管理的核心角度来讲,权力的动态方向恰与自由背道而驰。
  • 剥夺管理者对员工的控制权。由一组同事、一个委员会或一个特别任命的独立团队做出。
  • 管理者服务于团队。管理者的关注重点不是惩罚或奖励,而是清除路障,鼓励团队。
  • 只有当企业着手给员工更多的自由时,业绩才能提升。
  • 坚信员工都是好的,再就是要有足够的勇气,把员工看成是企业的主人翁,而不是把他们当成机器。
  • 让处于绩效分布底端的人了解真相,但是不要将绩效与薪酬或职业成果直接挂钩,尽可能用一种积极的方式警示并激励他们。数百名经理需要面对自己并非好经理的现实。
  • 有效的管理不是简单粗暴地不允许你犯错,而是预见到可能发生的错误,提供一个合理的标准和方法,在错误发生之前就避免它。
  • 情商高的人通常有更明晰的自我认知,因此也不会那么傲慢。这也使他们更容易转移到新的领域。

管理借鉴

  1. 尽量创造自由的环境;(高自由度)
  2. 不能把员工当作机器;
  3. 会议时不坐在上首座位,避免潜在的等级关系;(除去显示权力和地位的象征符号)
  4. 尽量保持透明;
  5. 放弃一些控制权,就可以为团队创造一次提升的好机会,也给自己节省出更多时间应对新的挑战;
  6. 关注个人成长而不是评分和奖励,以此改善绩效;
  7. 把奖励分配谈话与员工发展谈话分开;
  8. 绩效交谈前发讲义,覆盖恰当的话题,引导讨论;
  9. 打造学习型组织;
最优秀经理手下工作的谷歌人在十几项Googlegeist评估维度上要比最差经理手下工作的谷歌人高5%至18%。除此之外,他们在以下几方面的认可度明显更高:
•职业决策更加公正。绩效评估公正,得到升职的都是实至名归的人选。
•个人的职业目标能够达成,他们的经理是非常有帮助的支持者和引导者。
•工作高效,决策迅速,资源分配合理,从多种视角考虑问题。
•团队成员之间没有等级制度,互相尊重,决策依据数据做出而不是靠耍手段,团队内部各人的工作和信念都保持透明。
•他们适当地参与到决策制定过程中,并且得到一定的授权去完成工作。
•他们可以自由地平衡工作和私人生活。

调查显示高分经理具备八种低分经理所不具备的共性:8个氧气项目特性
1.  做一名好的导师。
2.  给团队授权,不随便插手下属工作。
3.  表达出对团队成员的成功和个人幸福的兴趣和关心。
4.   高效/结果导向型。
5.   善于沟通——聆听和分享信息。
6.   在职业发展方面助力团队。
7.   对团队有清晰的愿景和战略。
8.   具备重要的技术技能,可为团队提供建议。

招聘借鉴

  1. 只聘用比你更优秀的人(至少某些特定的方面比你更优秀的。)
  2. 最优秀的人通常并不在寻找工作;
  3. 让面试者开心;
  4. 谷歌工作法则:筛选新雇员?□设定高质量标准□寻找自己的应聘者□客观评估应聘者□给应聘者一个加入的理由

【计算机科学速成课】笔记

发表于 2020-10-18
  • 【计算机科学速成课】[40集全/精校] - Crash Course Computer Science

Redis笔记

发表于 2020-10-11

脑图

命令

  • info memory 可查看Redis使用了jemalloc
  • Redis Config Get 命令 - 获取指定配置参数的值:https://www.redis.net.cn/order/3667.html
  • cluster nodes

Redis 客户端

  • https://redis.io/clients#java
  • Jedis
  • lettuce
  • Redisson

Jedis

连接方式

  1. Jedis直连
    1
    Jedis jedis = new Jedis("127.0.0.1",6379);
  2. Jedis连接池
    1
    2
    GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
    JedisPool jedisPool = new JedisPool(poolConfig, "127.0.0.1", 6379);
  • Jedis是redis的java客户端,JedisCluster则是Jedis根据Redis集群的特性提供的集群客户端。

Jedis客户端如何定位到对应的主节点

  • 你不知道的Redis:RedisCluster与JedisCluster
  • JedisClusterInfoCache:关于缓存数据的获取及更新实际是由JedisClusterInfoCache的discoverClusterNodesAndSlots方法实现, 主要是通过cluster slots 命令获取集群内的槽位分布数据,然后解析该命令的返回结果,为每个主节点初始化一个连接池,然后将节点与连接池、节点负责的所有槽位与连接池的映射关系缓存
  • 初始化主要分为一下几部分:
    1. 连接一个节点执行cluster slots命令,获取槽位分布以及集群节点信息;
    2. 为每一个节点都初始化一个连接池,并跟节点建立映射关系缓存;
    3. 将每个主节点负责的槽位一一与主节点连接池建立映射缓存。
    4. 初始化工作中缓存的映射信息,在JedisCluster的使用过程中起到了至关重要的作用。但也正是因为JedisCluster在本地内存中缓存节点数据并且为每个节点维护一个连接池,在使用节点特别多的庞大集群时,客户端也会消耗更多内存。

Redis基本数据类型原理

  1. 字符串:redis没有直接使用C语言传统的字符串表示,而是自己实现的叫做简单动态字符串SDS的抽象类型。C语言的字符串不记录自身的长度信息,而SDS则保存了长度信息,这样将获取字符串长度的时间由O(N)降低到了O(1),同时可以避免缓冲区溢出和减少修改字符串长度时所需的内存重分配次数。
  2. 链表linkedlist:redis链表是一个双向无环链表结构,很多发布订阅、慢查询、监视器功能都是使用到了链表来实现,每个链表的节点由一个listNode结构来表示,每个节点都有指向前置节点和后置节点的指针,同时表头节点的前置和后置节点都指向NULL。
  3. 字典hashtable:用于保存键值对的抽象数据结构。redis使用hash表作为底层实现,每个字典带有两个hash表,供平时使用和rehash时使用,hash表使用链地址法来解决键冲突,被分配到同一个索引位置的多个键值对会形成一个单向链表,在对hash表进行扩容或者缩容的时候,为了服务的可用性,rehash的过程不是一次性完成的,而是渐进式的。
  4. 跳跃表skiplist:跳跃表是有序集合的底层实现之一,redis中在实现有序集合键和集群节点的内部结构中都是用到了跳跃表。redis跳跃表由zskiplist和zskiplistNode组成,zskiplist用于保存跳跃表信息(表头、表尾节点、长度等),zskiplistNode用于表示表跳跃节点,每个跳跃表的层高都是1-32的随机数,在同一个跳跃表中,多个节点可以包含相同的分值,但是每个节点的成员对象必须是唯一的,节点按照分值大小排序,如果分值相同,则按照成员对象的大小排序。
  5. 整数集合intset:用于保存整数值的集合抽象数据结构,不会出现重复元素,底层实现为数组。
  6. 压缩列表ziplist:压缩列表是为节约内存而开发的顺序性数据结构,他可以包含多个节点,每个节点可以保存一个字节数组或者整数值。

基于这些基础的数据结构,redis封装了自己的对象系统,包含字符串对象string、列表对象list、哈希对象hash、集合对象set、有序集合对象zset,每种对象都用到了至少一种基础的数据结构。

redis通过encoding属性设置对象的编码形式来提升灵活性和效率,基于不同的场景redis会自动做出优化。不同对象的编码如下:

  1. 字符串对象string:int整数、embstr编码的简单动态字符串、raw简单动态字符串
  2. 列表对象list:ziplist、linkedlist
  3. 哈希对象hash:ziplist、hashtable
  4. 集合对象set:intset、hashtable
  5. 有序集合对象zset:ziplist、skiplist

Redis为什么快

redis的速度非常的快,单机的redis就可以支撑每秒10几万的并发,相对于mysql来说,性能是mysql的几十倍。速度快的原因主要有几点:

  1. 完全基于内存操作
  2. C语言实现,优化过的数据结构,基于几种基础的数据结构,redis做了大量的优化,性能极高
  3. 使用单线程,无上下文的切换成本
  4. 基于非阻塞的IO多路复用机制

Redis6.0之后改用多线程

  • redis使用多线程并非是完全摒弃单线程,redis还是使用单线程模型来处理客户端的请求,只是使用多线程来处理数据的读写和协议解析,执行命令还是使用单线程。
  • 这样做的目的是因为redis的性能瓶颈在于网络IO而非CPU,使用多线程能提升IO读写的效率,从而整体提高redis的性能。

主从同步的原理

  1. slave发送sync命令到master
  2. master收到sync之后,执行bgsave,生成RDB全量文件
  3. master把slave的写命令记录到缓存
  4. bgsave执行完毕之后,发送RDB文件到slave,slave执行
  5. master发送缓存中的写命令到slave,slave执行

配置参数

cluster-require-full-coverage

cluster-require-full-coverage= yes

  1. 任一master宕机 集群可用
  2. 同一组master和slave宕机 集群不可用
  3. 半数及以上master宕机 集群不可用

cluster-require-full-coverage= no

  1. 同一组master和slave宕机 集群可用
  2. 半数及以上master宕机 集群不可用

源码系列

  • 全面阐释Redis常见对象类型的底层数据结构

字符串SDS

  • 扩容策略:长度小于1M时每次扩容加倍;长度大于1M后每次扩容加1M

字典

  • 由两个hashtable组成,通常情况下只有一个有值。扩容时搬迁过程中两个都有值;
  • hashtable第一维是数组,第二维是链表;
  • 渐进式rehash:在后续的hset,hdel等指令逐步搬迁,同时有定时任务进行搬迁(单线程,一次性搬迁太耗时)

压缩列表(ziplist)

  • zset和hash在元素较少时使用ziplist存储
  • ziplist是连续的内存空间,元素紧凑存储,支持双向遍历

快速列表(quicklist)

跳跃列表(skiplist)

紧凑列表(listpack)

  • Redis 5.0

基数树(rax)

LFU

  • Least Frequently Used, 按最近的访问频率进行淘汰,比LRU更精准表示一个key的访问热度

工具

  • Redis Memory Analyzer:https://scalegrid.io/blog/the-top-6-free-redis-memory-analysis-tools/, https://stackoverflow.com/questions/49388547/get-the-redis-key-value-size-in-memory

Reference

  • [redis深度历险:核心原理与应用实践]
  • 关于Redis,你扛得住这夺命连环11问吗?

MySQL笔记

发表于 2020-10-03

思维导图

InnoDB 事务隔离级别

隔离级别 脏读 不可重复读 幻读
未提交读(RUC) NO NO NO
已提交读(RC) YES NO NO
可重复读(RR) YES YES NO
可串行化 YES YES YES

InnoDB 锁类型

共享/排它锁(Shared and Exclusive Locks)

在InnoDb中实现了两个标准的行级锁,可以简单的看为两个读写锁:

  1. S-共享锁:又叫读锁,其他事务可以继续加共享锁,但是不能继续加排他锁。
  2. X-排他锁: 又叫写锁,一旦加了写锁之后,其他事务就不能加锁了。
  • 兼容性:是指事务A获得一个某行某种锁之后,事务B同样的在这个行上尝试获取某种锁,如果能立即获取,则称锁兼容,反之叫冲突。

  • 纵轴是代表已有的锁,横轴是代表尝试获取的锁。

    . X(行级) S(行级)
    X(行级) 冲突 冲突
    S(行级) 冲突 兼容

意向锁(Intention Locks)

  • InnoDB为了支持多粒度锁机制(multiple granularity locking),即允许行级锁与表级锁共存,而引入了意向锁(intention locks)。意向锁是指,未来的某个时刻,事务可能要加共享/排它锁了,先提前声明一个意向。
  1. 意向共享锁:表达一个事务想要获取一张表中某几行的共享锁。
  2. 意向排他锁:表达一个事务想要获取一张表中某几行的排他锁。
  • 事务要获得某些行的S/X锁,必须先获得表对应的IS/IX锁,意向锁仅仅表明意向,意向锁之间相互兼容;虽然意向锁之间互相兼容,但是它与共享锁/排它锁互斥
  • 如果请求事务与当前存在的锁兼容,则授予锁。如果冲突则不会授予,事务会进行等待,直到冲突的锁被释放。永远不会在冲突情况下授予锁,因为会导致数据库的死锁
  • 意向共享锁/意向排他锁属于表锁,且取得意向共享锁/意向排他锁是取得共享锁/排他锁的前置条件。
. IX IS X(表级) S(表级)
IX 兼容 兼容 冲突 冲突
IS 兼容 兼容 冲突 兼容
X(表级) 冲突 冲突 冲突 冲突
S(表级) 冲突 兼容 冲突 兼容

意向锁的意义在哪里?

  1. IX,IS是表级锁,不会和行级的X,S锁发生冲突。只会和表级的X,S发生冲突
  2. 意向锁是在添加行锁之前添加。
  3. 如果没有意向锁,当向一个表添加表级X锁时,就需要遍历整张表来判断是否存行锁,以免发生冲突
  4. 如果有了意向锁,只需要判断该意向锁与表级锁是否兼容即可。

MVCC

  • MVCC,多版本并发控制技术。在InnoDB中,在每一行记录的后面增加两个隐藏列,记录创建版本号和删除版本号。通过版本号和行锁,从而提高数据库系统并发性能。

InnoDB 索引

  • InnoDB的主键索引与行记录是存储在一起的,故叫做聚集索引(Clustered Index):

InnoDB的表必须要有聚集索引

  1. 如果表定义了PK,则PK就是聚集索引;
  2. 如果表没有定义PK,则第一个非空unique列是聚集索引;
  3. 否则,InnoDB会创建一个隐藏的row-id作为聚集索引;
  • 聚集索引,也只能够有一个,因为数据行在物理磁盘上只能有一份聚集存储。

  • InnoDB的普通索引可以有多个,它与聚集索引是不同的:普通索引的叶子节点,存储主键(也不是指针)

索引使用

  • where条件中的and前后的顺序,不会影响索引的命中
  • 负向查询肯定不可以命中索引

InnoDB log

  • binlog 可以给备库使用,也可以保存起来用于恢复数据库历史数据。它是实现在 server 层的,所有引擎可以共用。redo log 是 InnoDB 特有的日志,用来支持 crash-safe 能力。

MySQL EXPLAIN

Extra

该列包含MySQL解决查询的详细信息,有以下几种情况:

  1. Using where:列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的,这发生在对表的全部的请求列都是同一个索引的部分的时候,表示mysql服务器将在存储引擎检索行后再进行过滤
  2. Using temporary:表示MySQL需要使用临时表来存储结果集,常见于排序和分组查询
  3. Using filesort:MySQL中无法利用索引完成的排序操作称为“文件排序”
  4. Using join buffer:改值强调了在获取连接条件时没有使用索引,并且需要连接缓冲区来存储中间结果。如果出现了这个值,那应该注意,根据查询的具体情况可能需要添加索引来改进能。
  5. Impossible where:这个值强调了where语句会导致没有符合条件的行。
  6. Select tables optimized away:这个值意味着仅通过使用索引,优化器可能仅从聚合函数结果中返回一行

type

找到所需行的方式

  1. ALL: 扫描全表
  2. index: 扫描全部索引树
  3. range: 索引范围扫描
  4. ref: 非唯一性索引扫描
  5. eq_ref:唯一性索引扫描
  6. const:常量扫描,比如主键。

总结

  • Using filesort:当Query 中包含order by 操作,而且无法利用索引完成排序操作的时候,MySQL Query Optimizer 不得不选择相应的排序算法来实现。
  • Using temporary:在某些操作中必须使用临时表时,在 Extra 信息中就会出现Using temporary ,主要常见于 GROUP BY 和 ORDER BY 等操作中

主要命令

  1. SHOW ENGINES; 命令查看 MySQL 支持的存储引擎。
  2. SHOW TABLE STATUS; 命令查看当前库中的表使用的是什么存储引擎。
  3. select * from information_schema.INNODB_LOCKS TODO
  4. show variables like '%tx_isolation%';查看事务隔离级别
  5. show engine innodb status 输出innodb监控可以查看到意向锁的信息
  6. show status like 'innodb_row_lock%';查看锁情况

其他

  1. 在 MySQL 数据库中,Database 和 Schema 是一对一的,所以 Database 和 Schema 是一个概念。
  2. 唯一索引会降级记录锁,这么做的理由是:非唯一索引加next-key锁由于不能确定明确的行数有可能其他事务在你查询的过程中,再次添加这个索引的数据,导致隔离性遭到破坏,也就是幻读。唯一索引由于明确了唯一的数据行,所以不需要添加间隙锁解决幻读。
  3. 间隙锁之间是兼容的。插入意向锁(IX)和间隙锁冲突。间隙锁 属于S锁???这样才符合表格的描述。
  4. 删除记录时,先查询出需要删除的记录主键,通过主键索引进行删除,可以避免产生间隙锁(唯一索引会降级记录锁)。
  5. 间隙锁(gap lock)与临键锁(next-key lock) 只在RR以上的级别生效,RC下会失效

注意事项

  1. 以固定的顺序访问表和行。交叉访问更容易造成事务等待回路。
  2. 尽量避免大事务,占有的资源锁越多,越容易出现死锁。建议拆成小事务。
  3. 降低隔离级别。如果业务允许(上面4.3也分析了,某些业务并不能允许),将隔离级别调低也是较好的选择,比如将隔离级别从RR调整为RC,可以避免掉很多因为gap锁造成的死锁。
  4. 为表添加合理的索引。防止没有索引出现表锁,出现的死锁的概率会突增。
  5. 在删除之前,可以通过快照查询(不加锁),如果查询没有结果,则直接插入,如果有通过主键进行删除。如果查询的索引不含有唯一属性,不会降级成记录锁,而是间隙锁,插入时容易死锁。

Q&A

InnoDB选择什么列作为主键

  1. 不能为空的列;
  2. 不能重复的列;
  3. 很少改变的列;(行是按照聚集索引物理排序的,如果主键频繁改变,物理顺序会改变,性能会急剧降低。)
  4. 经常被检索(where key=XXX)的列; (被检索的列上要建立索引,如果该索引是聚集索引,能够避免回表,性能提升几乎一倍。)
  5. 不是太长的列;(普通索引叶子节点会存储主键值,如果主键值太长,会增加普通索引的大小。)

为什么 MySQL 索引选择了 B+树而不是 B 树?

  1. B+树更适合外部存储(一般指磁盘存储),由于内节点(非叶子节点)不存储 data,所以一个节点可以存储更多的内节点,每个节点能索引的范围更大更精确。也就是说使用 B+树单次磁盘 I/O 的信息量相比较 B 树更大,I/O 效率更高。
  2. MySQL 是关系型数据库,经常会按照区间来访问某个索引列,B+树的叶子节点间按顺序建立了链指针,加强了区间访问性,所以 B+树对索引列上的区间范围查询很友好。而 B 树每个节点的 key 和 data 在一起,无法进行区间查找。

扩展

InnoDB一棵B+树可以存放多少行数据?

  • https://www.cnblogs.com/leefreeman/p/8315844.html
  • 约2千万。(高度为3的B+树);一个高度为 3 的 B+ 树大概可以存放 1170 × 1170 × 16 = 21902400 行数据,已经是千万级别的数据量了。
  • InnoDB存储引擎最小储存单元——页(Page),一个页的大小默认是16K。
    • show variables like 'innodb_page_size';
    • innodb的所有数据文件(后缀为ibd的文件),他的大小始终都是16384(16k)的整数倍
  • 假设一行记录的数据大小为1k,实际上现在很多互联网业务数据记录大小通常就是1K左右
  • 非叶子节点能存放多少指针:假设主键ID为bigint类型,长度为8字节,而指针大小在InnoDB源码中设置为6字节,这样一共14字节,我们一个页中能存放多少这样的单元,其实就代表有多少指针,即16384/14=1170。那么可以算出一棵高度为2的B+树,能存放1170 × 16=18720条这样的数据记录。
  • 根据同样的原理我们可以算出一个高度为3的B+树可以存放:1170117016=21902400条这样的记录。所以在InnoDB中B+树高度一般为1-3层,它就能满足千万级的数据存储。在查找数据时一次页的查找代表一次IO,所以通过主键索引查询通常只需要1-3次IO操作即可查找到数据。
  • 在InnoDB中B+树高度一般为1-3层,它就能满足千万级的数据存储。在查找数据时一次页的查找代表一次IO,所以通过主键索引查询通常只需要1-3次IO操作即可查找到数据。
  • 怎么得到InnoDB主键索引B+树的高度?
    • 在实际操作之前,你可以通过InnoDB元数据表确认主键索引根页的page number为3,你也可以从《InnoDB存储引擎》这本书中得到确认。
    • SELECT b.name, a.name, index_id, type, a.space, a.PAGE_NO FROM information_schema.INNODB_SYS_INDEXES a, information_schema.INNODB_SYS_TABLES b WHERE a.table_id = b.table_id AND a.space <> 0;
  • 基于现有表的总大小和总行数,算出每一行占用的大概大小
    • 每行大概大小 ≈ total_size / total_rows
    • 对于InnoDB存储引擎,可以通过执行以下SQL查询来获取表的大小
        SELECT
        table_name AS `Table`,
        ROUND(((data_length + index_length) / 1024 / 1024), 2) AS `Size (MB)`
        FROM
        information_schema.tables
        WHERE
        table_schema = 'your_database_name' -- 替换为实际的数据库名
        AND table_name = 'your_table_name'; -- 替换为实际的表名        
        
    • 通过查看InnoDB存储引擎的.ibd文件来获取表的大小。每个InnoDB表都有一个对应的.ibd文件,其中包含了该表的数据和索引。
    • 3层B+树,每行大小1k(1个页16k,则可以存16条数据):可以记录的总大小大概为1170117016

MySQL InnoDB 引擎 RR 隔离级别是否解决了幻读?

  • https://mp.weixin.qq.com/s?__biz=MzI3ODcxMzQzMw==&mid=2247489575&idx=2&sn=410aa5a43cb2cdc265dcd39e31128f17&chksm=eb539d11dc24140743b6b6f1369e958417cbe86b9f53809afe2744872f86675e753d9884f9e3&xtrack=1&scene=90&subscene=93&sessionid=1559142508&clicktime=1559142541&ascene=56&devicetype=android-26&version=2700043b&nettype=WIFI&abtest_cookie=BQABAAoACwASABMAFQAHACOXHgBWmR4AyJkeANyZHgDzmR4AA5oeAAyaHgAAAA%3D%3D&lang=zh_CN&pass_ticket=W5ig5maP6tmaLevaqwsMcnXl28LHoqSmvBuqMPbg7dOQBytHnUWtVKFBwtS2hFz6&wx_header=1

  • Mysql官方给出的幻读解释是:只要在一个事务中,第二次select多出了row就算幻读。

  • a事务先select,b事务insert确实会加一个gap锁,但是如果b事务commit,这个gap锁就会释放(释放后a事务可以随意dml操作),a事务再select出来的结果在MVCC下还和第一次select一样,接着a事务不加条件地update,这个update会作用在所有行上(包括b事务新加的),a事务再次select就会出现b事务中的新行,并且这个新行已经被update修改了,实测在RR级别下确实如此。
    如果这样理解的话,Mysql的RR级别确实防不住幻读。

  • 在快照读读情况下,mysql通过mvcc来避免幻读。
    在当前读读情况下,mysql通过next-key来避免幻读。
    select * from t where a=1;属于快照读
    select * from t where a=1 lock in share mode;属于当前读

不能把快照读和当前读得到的结果不一样这种情况认为是幻读,这是两种不同的使用。所以MySQL 存储引擎 InnoDB 隔离级别 RR 解决了幻读问题。

结论

  1. MySQL 存储引擎 InnoDB 隔离级别 RR 解决了幻读问题。
  2. 不能把快照读和当前读得到的结果不一样这种情况认为是幻读,这是两种不同的使用。
  3. 如果要update,不能出现幻读的情况,之前应该加上for update查询;不需要update,只是读,快照读已经使用mvcc解决幻读问题。

Reference

  • MySQL 体系结构-概述
  • MySQL 体系结构-主要文件
  • MySQL 参数- Innodb_File_Per_Table(独立表空间)
  • 为什么开发人员必须要了解数据库锁?
  • 主键,不少人以为自己懂了,却不透彻…
  • 如何避免回表查询?什么是索引覆盖?
  • InnoDB架构,一幅图秒懂!
  • 事务已提交,数据却丢了,赶紧检查下这个配置
  • 丁奇:MySQL 中 6 个常见的日志问题
  • 再深入一点|binlog 和 relay-log 到底长啥样?
  • MySQL InnoDB 引擎中的 7 种锁类型,你都知道吗?
  • 锁机制与 InnoDB 锁算法
  • MySQL常见的七种锁详细介绍 !!
  • MySQL中InnoDB的锁分类
  • 浅谈MySQL的七种锁
  • 别废话,各种SQL到底加了什么锁?
  • MySQL Explain详解
  • 记一次 MySQL 性能优化过程
  • MySQL索引前世今生

关于CLOSE_WAIT和HttpClient的使用

发表于 2020-09-26


ESTABLISHED 表示正在进行网络连接的数量
TIME_WAIT 表示表示等待系统主动关闭网络连接的数量
CLOSE_WAIT 表示被动等待程序关闭的网络连接数量

  1. 查看系统TCP状态的命令:netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
  2. CLOSE_WAIT 是被动关闭产生的一种状态,当用户程序正常close之后将变成LAST_ACK状态。
  3. TIME_WAIT状态可以通过优化服务器参数得到解决(当然也有可能是程序处理不当产生太多连接)。而CLOSE_WAIT数目过大一般是由于程序被动关闭连接处理不当导致的。
  4. 以HttpClient为例
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    try {
    String resp = "";
    HttpResponse response = client.execute(get);
    if (response.getStatusLine().getStatusCode() != 200) {
    get.abort();
    return "";
    }
    HttpEntity entity = response.getEntity();
    if (entity != null) {
    in = entity.getContent();
    resp = in.xxx;
    //xxx
    }
    return resp;
    } catch (Exception e) {
    get.abort();
    return "";
    } finally {
    if (in != null) {
    in.close();
    }
    }
    在异常时显示调用abort,直接中止本次连接,避免in未赋值导致连接未关闭的问题。
  5. HttpClient连接关闭。一种是主动,一种是被动。在代码API的使用上没进行区分。主动关闭时当调用Close(),发出FIN包由ESTABLISHED进入FIN_WAIT_1 状态;被动关闭时当调用Close(),发出FIN包由CLOSE_WAIT进入LAST_ACK状态。
  6. 使用PoolingClientConnectionManager?

扩展

httpclient 的timeout参数

  • httpclient SocketTimeout ConnectTimeout ConnectionRequestTimeout
  • ConnectionRequestTimeout
    • httpclient使用连接池来管理连接,这个时间就是从连接池获取连接的超时时间,可以想象下数据库连接池;
  • ConnectTimeout
    • 连接建立时间,三次握手完成时间;
  • SocketTimeout
    • 关于readimeout的含义: Defines a timeout for reading a response from the proxied server. The timeout is set only between two successive read operations, not for the transmission of the whole response. If the proxied server does not transmit anything within this time, the connection is closed.
    • 数据传输过程中数据包之间间隔的最大时间;
    • SocketTimeout的值表示的是“a”、”b”、”c”这三个报文,每两个相邻的报文的间隔时间不能超过SocketTimeout
    • 虽然报文(“abc”)返回总共用了6秒,如果SocketTimeout设置成4秒,实际程序执行的时候是不会抛出java.net.SocketTimeoutException: Read timed out异常的

Reference

  • 服务器TIME_WAIT和CLOSE_WAIT详解和解决办法
  • HttpClient连接池抛出大量ConnectionPoolTimeoutException: Timeout waiting for connection异常排查
<1…121314…18>

172 日志
199 标签
RSS
© 2025 Kingson Wu
由 Hexo 强力驱动
|
主题 — NexT.Pisces v5.1.4