分类目录归档:阅读笔记

高能效人士的七个习惯

  • 要事第一
    • 重要性:《成功的普遍共性》一文的作者格雷(E.MGray)发现成功的决定因素并非辛勤的工作、出众的运气和良好的人际关系,虽然这些因素对于一个人的成功有举足轻重的影响,但都比不上另外一个更加重要的因素,那就是习惯三”要事第一”。 格雷说:成功者能为失败者所不能为,纵使并非心甘情愿,但为了理想与目标,仍可以凭毅力克服心理障碍
    • 时间管理的时代演进
      • 第一代:利用便条与备忘录,在忙碌中调配时间与精力
      • 第二代:强调行事历与日程表,反映出时间管理已注意到规划未来的重要
      • 第三代:依据轻重缓急设定短、中、长期目标,再逐日制定实现目标的计划,将有限的时间、精力加以分配,争取最高的效率 有人发现,过分强调效率,把时间崩得死死的,反而会产生反效果,使人失去增进感情、满足个人需要以及享受意外之喜的机会。
      • 第四代:根本否定”时间管理”,主张关键不在于时间管理,而在于个人管理,把重心放在维持产出与产能的平衡上。
    • 时间管理矩阵
      • 象限
        • 重要:凡有价值、有利于实现个人目标的就是要事。
        • 紧迫:必须立即处理
      • 事务分类
        • 1⃣️ 既紧迫又重要
          • 危机
          • 迫切问题
          • 在限定时间内必须完成的任务
        • 2⃣️ 不紧迫但重要
          • 预防性措施
          • 建立关系
          • 明确新的发展机会
          • 制定计划和休闲
        • 3⃣️ 不重要但紧急
          • 接待访客、某些电话
          • 某些邮件、某些报告
          • 某些会议
          • 迫切需要解决的事务
          • 公共活动
        • 4⃣️ 不重要也不紧急
          • 繁琐忙碌的工作
          • 某些邮件
          • 某些电话
          • 消磨时间的活动
          • 令人愉快的活动
      • 偏重某一事务的结果
        • 1⃣️ 既紧迫又重要 urgent and important
          • 压力大
          • 筋疲力尽
          • 被危机牵着鼻子走
          • 忙于收拾残局
        • 2⃣️ 不紧迫但重要 important but not urgent
          • 愿景、远见
          • 平衡
          • 自律
          • 自制
          • 很少发生危机
        • 3⃣️ 不重要但紧急 unimportant but urgent
          • 急功近利
          • 被危机牵着鼻子走
          • 被视为巧言令色
          • 轻视目标和计划
          • 认为自己是受害者,缺乏自制力
          • 人际关系肤浅,甚至破裂
        • 4⃣️ 不重要也不紧急 unimportant and not urgent / 3⃣️ 不重要但紧急
          • 完全不负责任
          • 被炒鱿鱼
          • 基本生活都需要依赖他人或社会机构
    • 个人管理四步骤
      • 确认角色
      • 选择目标
      • 安排进度
      • 每日调整

[摘录]《任正非传》 – 孙力科

任正非传 孙力科 36个笔记

◆ 第一章 谁是任正非?

出生在贵州安顺地区镇宁县的任正非,祖籍便在浙江金华。

任摩逊希望自己的儿子在以后的人生中能明辨是非,成为一个对社会有价值的人。“任正非”的名字,也就这样落定了。任摩逊和程远昭夫妻俩一共

程远昭身上有着典型的中国优秀女性的特质:勤劳、耐苦、慈爱、不服输

他理工基础雄厚,掌握了数门外语,而且文科实用水平颇高,对毛泽东思想有着自己深刻的理解。

虽然由于父亲的背景原因,任正非在军队中除了一个“学毛著标兵”的口头嘉奖之外,再没有得到任何实质性的嘉奖,但正是这些看起来的遗憾,让他养成了淡泊名利、宠辱不惊的心态

当时市面上的交换机种类繁多,程控交换机是其中使用价值最高的,同时,它对技术的要求也最高,需要投入的经费也最多。这种程控交换机可以用于企事业单位内部的沟通,甚至还能展开长途交流。

◆ 第二章 踏上新征程

1991年,任正非等到了机会。这一年,邬江兴首次研发出万门级的04数字程控交换机,获悉消息后任正非大受鼓舞。纵使这个“第一”的殊荣不是他的,不是华为的,但属于中国,属于一个崭新的时代!任正非从邬江兴的成功中看到了中国人在通信行业中逆袭的可能。邬江兴的经历与任正非特别相似。他是解放军信息工程学院的院长,比任正非小10岁。他和任正非一样是军人出身,同样对“中国人永远无法造出大型程控交换机”的断言嗤之以鼻。

这年秋天,任正非带着一队企业骨干踏上了去美国考察的征程。一路考察,任正非有了不同的感受。美国的汽车乘坐起来更加舒适,看到的楼宇也更高,他的感叹虽不至于像明治维新的股肱臣僚岩仓具视和他远赴欧美参观的使节团那般“始惊、次醉、终狂”夸张,但也同样对美国的科技成就发出感慨:我国的国土与美国基本相当,但荒漠、大山、高原面积大,余下的土地承载着十几亿国民。加之缺少教育经费,文化素质偏低,人口增长快,田边地角均被挖空,何来的草地、山林呢?

任正非原以为公园的核心地带又是一片科研基地或技术工厂,但走进以后发现里面竟然是一座原始森林。“从森林到工厂”,在此刻的任正非看来,或许正是中国的通信产业需要经历的一条曲折而又漫长的道路。出于对科学研究和技术教育的崇仰,任正非走出中央公园后没有急于赶往下一个科技城市,而是走进自然博物馆,继续参观。出乎意料的是,自然博物馆中陈列着的各种珍奇精品和古迹文物让他和团队成员大开眼界,在一个小时的时间里,他们甚至连一个角落都没有参观完,这让任正非铭刻于心。

结束了这次美国之行,任正非等人从洛杉矶登上了返回深圳的飞机。在飞机上,任正非心潮澎湃,久久不能平静。后来他曾回忆当时的想法,表现出了对国家科学教育深深的隐忧:“越繁荣就越发展科技,越发展科技、越重视教育就越人才辈出,越人才辈出,经济就越繁荣,如此走入一个良性的循环圈……美国将经久不衰。”

客户的质疑和反对。最典型的是河南商丘的邮电局农话科长张荣钧。这位张科长毫不留情地指出这些机器(资料上写的是用户机,这里改成机器就行)在使用过程中的不如意,“尤其是雷击问题更是令人头痛”。1993年这一年,任正非有得有失,但绝不患得患失的他早已认定了自己要走的路。

◆ 第三章 华为新起点

任正非说,他不会以一时的成败来论英雄;华为的企业文化,其精髓不在于百战百胜,而在于在战局不利的状况下培养出风险抗拒能力。显然,正是这种抗拒能力,成为华为至今仍能在国际市场上如鱼得水的重要原因。

◆ 第五章 “狼”行天下

任正非知道,李一男长于技术、短于管理,因此他觉得李一男不擅长管理这一条注定了港湾在巅峰之后一定会滑向低谷

经过这番折腾,李一男到底还是没有彻底离开华为,而任正非三番五次对李一男的“委任”,也足见他的爱才之心。更关键的是,任正非“降服”李一男既不失华为的脸面,还留住了人才,为华为的持续发展积蓄着人才的能量。因此,在与李一男的博弈中,任正非完胜。

◆ 第七章 华为、思科大PK

毕竟华为的产品已经成为中国通信产品体系中的代表,华为在美国栽跟头,其余的中国产品也许就没有再战的勇气了。

为了稳住军心,任正非给出了最高指示:“敢打才能和,小输就是赢。”

任正非则从华为的立场出发,言明“自己没有上市,公司上税、守法,对客户和员工负责就可以了,华为不需要抛头露面,针对外界的各种说法华为也从不解释”。

令人意想不到的是,在这场角逐中,一些中国媒体也站在了思科这边,这着实让人为华为担忧。

要想建立一个国际化的大型企业,不单需要革新市场、优化产品,更需要加强与媒体之间的联系,并在全球范围内广泛结交同盟,团结一切可以团结的力量,以便在与对手直面竞技时随时应对。

郭平真诚地邀请两家律师事务所的一些顶级律师来华为,事先告诉了他们华为的经营方略,然后让他们全面地领略真正的华为。

律师们向华为献出一条妙计:紧抓“私有协议”这个字眼,在这方面做足准备功夫,而反击的理由即是思科运用“私有协议”在市场上大搞垄断。这样一来,华为在反击思科时就显得更名正言顺,这自然好于一味地退守和隐忍。

“私有协议”,即是“在国际标准组织实现网络互联互通而制定标准和规范之前,某家公司产品先进入市场而形成的标准”。

2003年3月初,在美国和德国举办的电信设备展览会上,人们再次看到了华为那阳光自信、积极乐观的形象。

吸引了全世界目光的“世纪之讼”在双方的战略妥协下落下幕布。思科保住了世界通信霸主的地位,从此不再趾高气扬;华为在美国市场上有了一席之地,并因这场大战让全世界刮目相看。从此,不论是美国还是东半球的国家,都愿意和华为做生意,华为在国际市场的业务量开始出现令人可喜的翻番式增长态势。

钱伯斯在与任正非过招之后,开始对华为“暗送秋波”,并在2005年主动访问华为。通过这次访问,钱伯斯更加明确地断定,思科未来的竞争对手很有可能不在欧洲,而在亚洲东部的中国。

一如倪光南在总结“世纪之讼”时所说的那样:“在信息领域,核心技术、大量的知识产权非常重要。之所以华为的知识产权技术能够站得住,就是因为自己开发了整个软件系统,可以在这个产业里面不至于受到人家的压迫,赢得最后的胜利。”华为的胜利,完美地诠释了这一点。

◆ 第八章 “华为精神”

财务管理地位极重,小到每一个产品的定价评估和成本计算、大到企业在一段发展时期内的收支盈亏等,没有财务的参与,都是行不通的。

在华为的年度报表中,一组数据更显示出了财务危机:2003年,华为的利润率还保持着较高的19%,可到了2007年骤降为7%;2003年的净利润率保持在14%,2007年则下降至不到5%。

经过讨论,任正非和众人得出这样的结论:要继续向IBM公司学习,不单要学习IPD等管理模式,更要在财务方面借鉴经验弥补不足。

◆ 第九章 以人为本

若从时代的角度出发,促使华为一步步迈向制高点的最关键因素则在于对人才的培养和提拔。

不单是任正非,几乎所有的华为人都这样认为:销售是一段刻骨铭心的经历。没有销售的人生是不完整的。

美国著名企业管理学者沃伦·本尼斯曾说:“员工培训是企业风险最小、收益最大的战略性投资。”任正非重视对员工的培训,就等于从根本上避免了风险,获取了收益。

他最推崇任正非的一句话就是:“烧不死的鸟才是凤凰。”

根据二战名将曼施坦因的分析,军队中最不需要的高级干部就是这种“不聪明而勤奋”的人,因为他们没有开创的思维和前卫的意识。能力和智慧不出众,越是兢兢业业,越会对整个团队造成危害。

◆ 第十章 一切都只为客户

见老总将皮鞋送给自己,两位主管万分尴尬。任正非不是在送礼,而是通过皮鞋这个媒介提醒他们:你们动的脑子很多,这很好,但可惜你们走的路真的是太少了!

◆ 第十一章 新征程,新华为

云计算的地位并不亚于“互联网+”。有人曾预料,云计算的广泛应用,甚至能够将现代信息产业引领到一个崭新的时代。这是“第三次IT技术革命”,有着非同寻常的意义。

[摘录]《人人都懂设计模式:从生活中领悟设计模式(Python实现) 》 – 罗伟富

人人都懂设计模式:从生活中领悟设计模式(Python实现) 罗伟富 64个笔记

◆ 基础篇

类图用于表示不同的实体(人、事物和数据),以及它们彼此之间的关系。该图描述了系统中对象的类型以及它们之间存在的各种静态关系,是一切面向对象方法的核心建模工具。

UML 类图中最常见的几种关系有:泛化(Generalization)、实现(Realization)、组合(Composition)、聚合(Aggregation)、关联(Association)和依赖(Dependency)。这些关系的强弱顺序为:泛化=实现 > 组合 > 聚合 > 关联 > 依赖

泛化(Generalization)是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为

实现(Realization)是一种类与接口的关系,表示类是接口所有特征和行为的实现。

组合(Composition)也表示整体与部分的关系,但部分离开整体后无法单独存在。因此,组合与聚合相比是一种更强的关系。

聚合(Aggregation)是整体与部分的关系,部分可以离开整体而单独存在。

关联(Association)是一种拥有关系,它使一个类知道另一个类的属性和方法。关联可以是双向的,也可以是单向的。

依赖(Dependency)是一种使用的关系,即一个类的实现需要另一个类的协助,所以尽量不要使用双向的互相依赖。

在对象间定义一种一对多的依赖关系,当这个对象状态发生改变时,所有依赖它的对象都会被通知并自动更新。

监听模式又名观察者模式,顾名思义就是观察与被观察的关系

监听模式的核心思想就是在被观察者与观察者之间建立一种自动触发的关系。

监听模式根据其侧重的功能还可以分为推模型和拉模型

推模型:被观察者对象向观察者推送主题的详细信息,不管观察者是否需要,推送的信息通常是主题对象的全部或部分数据。

拉模型:被观察者在通知观察者的时候,只传递少量信息。

SolidState、LiquidState、GaseousState这三个单词中我们会发现都有一个State后缀,于是我们会想它们之间是否有一些共性,能否提取出一个更抽象的类,这个类就是状态类(State)

用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

很多系统中,多个类很容易相互耦合,形成网状结构。中介模式的作用就是将这种网状结构(如图3-3所示)分离成星型结构(如图3-4所示)。这样调整之后,使得对象间的结构更加简洁,交互更加顺畅。

工厂模式关注的是整个产品(整体对象)的生成,即成品的生成;而构建模式关注的是产品的创建过程和细节,一步一步地由各个子部件构建为一个成品。

区别:组合模式关注的是对象内部的组成结构,强调的是部分与整体的关系。构建模式关注的是对象的创建过程,即由一个一个的子部件构建一个成品的过程。

适配模式中主要有三个角色,在设计适配模式时要找到并区分这些角色。 (1)目标(Target):即你期望的目标接口,要转换成的接口。 (2)源对象(Adaptee):即要被转换的角色,要把谁转换成目标角色。 (3)适配器(Adapter):适配模式的核心角色,负责把源对象转换和包装成目标对象。

策略模式的核心思想是:对算法、规则进行封装,使得替换算法和新增算法更加灵活。

工厂模式三姐妹:简单工厂模式(小妹妹)、工厂方法模式(妹妹)、抽象工厂模式(姐姐)。

这是最简单的一个版本,只有一个工厂类 SimpleFactory,类中有一个静态的创建方法createProduct,该方法根据参数传递过来的类型值(type)或名称(name)来创建具体的产品(子类)对象

不符合“开放封闭”原则,如果要增加或删除一个产品类型,就要修改switch…case…(或if…else…)的判断代码。

定义一个创建对象(实例化对象)的接口,让子类来决定创建哪个类的实例。工厂方法使一个类的实例化延迟到其子类。

盒马鲜生之所以这么火爆,一方面是因为中国从来就不缺像David这样的吃货,另一方面是因为里面的生鲜很新鲜,而且可以自己挑选。

将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。

命令模式是一种高内聚的模式,之所以说是高内聚是因为它把命令封装成对象,并与接收者关联在一起,从而使(命令的)请求者(Invoker)和接收者(Receiver)分离。

(1)你希望系统发送一个命令(或信号),任务就能得到处理时。如 GUI 中的各种按钮的点击命令,再如自定义一套消息的响应机制。 (2)需要将请求调用者和请求接收者解耦,使得调用者和接收者不直接交互时。 (3)需要将一系列的命令组合成一组操作时,可以使用宏命令的方式。

在不破坏内部结构的前提下捕获一个对象的内部状态,这样便可在以后将该对象恢复到原先保存的状态。

备忘模式的最大功能就是备份,可以保存对象的一个状态作为备份,这样便可让对象在将来的某一时刻恢复到之前保存的状态。

人生没有彩排,但程序却可以让你无数次回放!这便是备忘模式的设计思想。

运用共享技术有效地支持大量细粒度对象的复用。

在故事剧情中,我们通过限定颜料的数量并采用共享的方式来达到节约资源、节约成本的目的,在程序的世界中这种方式叫享元模式(Flyweight Pattern)。

封装一些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。

设计模式的开山鼻祖 GoF 的《设计模式:可复用面向对象软件的基础》一书中提到了23种设计模式,也称为经典设计模式。

◆ 进阶篇

过滤器模式就是根据某种规则,从一组对象中,过滤掉一些不符合要求的对象的过程。

MVC 将程序的各个模块进行分层,M(Model)负责数据的存储,V(View)负责数据的显示,C(Controller)负责与用户的交互逻辑,也就是业务逻辑。

模型负责数据的持久化(也就是存储);视图负责数据的输入和显示,直接和用户交互的一层,如大家看到的网站的页面内容、在表单上输入的数据;控制器负责具体的业务逻辑,根据用户的请求内容操作相应的模型和视图。

MVP是MVC的一个变种,很多框架都自称遵循MVC模式,但是实际上它们却实现的是MVP模式;在MVP中使用Presenter对视图和模型进行解耦,视图和模型独立发展,互不干扰,沟通都通过Presenter进行。

前端应用MVC模式(前端的Model并不持久化数据,只是缓存数据或临时数据),后端也用 MVC 模式。

整个网站也是一种 MVC 模式,前端相当于View,而后端同时负责Controller和Mode(l 服务器代码相当于Controller,数据库相当于Model);用户直接与前端进行交互,根本不知道有后端的存在

◆ 经验篇

S—单一职责原则,O—开放封闭原则,L—里氏替换原则,I—接口隔离原则,D—依赖倒置原则

开放封闭原则,即Open Close Principle,简称OCP。

接口尽量小,但是要有限度。当发现一个接口过于臃肿时,就要对这个接口进行适当的拆分。但是如果接口过小,则会造成接口数量过多,使设计复杂化。所以接口大小一定要适度。

软件的设计是一个循序渐进、逐步优化的过程。经过一次次的逻辑分析,一层层的结构调整和优化,最终才能得出一个较为合理的设计图

单一职责原则告诉我们实现类要职责单一

里氏替换原则告诉我们不要破坏继承体系

依赖倒置原则告诉我们要面向接口编程

接口隔离原则告诉我们在设计接口的时候要精简单一。

开放封闭原则告诉我们要对扩展开放,对修改封闭。开放封闭原则可以说是整个设计的最终目标和原则!开放封闭原则是总纲,其他四个原则是对这个原则的具体解释。

在实际的项目开发中,必须要按时按量地完成任务。项目的进度受时间成本、测试资源的影响,而且程序也一定要保证稳定可靠。

面对需求的变更,我们有三种解决方法。方法一,直接改原有的函数(方法),这种方式最快速,但后期维护最困难,而且不便拓展,是一定要杜绝的

方法二,增加一个新方法,不修改原有的方法,这在方法级别上是符合单一职责原则的,但会给上层的调用增加不少麻烦

方法三,增加一个新的类来负责新的职责,两个职责分离,这是符合单一职责原则的

每一个逻辑单元应该对其他逻辑单元有最少的了解:也就是说只亲近当前的对象。只和直接(亲近)的朋友说话,不和陌生人说话。

Keep It Simple and Stupid 保持简单和愚蠢。

“简单”就是要让你的程序能简单、快速地被实现;“愚蠢”是说你的设计要简单到傻瓜都能理解,即简单就是美!

Don't repeat yourself. 不要重复自己

不要重复你的代码,即多次遇到同样的问题,应该抽象出一个共同的解决方法,不要重复开发同样的功能。也就是要尽可能地提高代码的复用率

(1)函数级别的封装:把一些经常使用的、重复出现的功能封装成一个通用的函数。 (2)类级别的抽象:把具有相似功能或行为的类进行抽象,抽象出一个基类,并把这几个类都有的方法提到基类去实现。 (3)泛型设计

你没必要那么着急,不要给你的类实现过多的功能,直到你需要它的时候再去实现。

Rule of three 称为“三次法则”,指的是当某个功能第三次出现时,再进行抽象化,即事不过三,三则重构。

查询(Query):当一个方法返回一个值来回应一个问题的时候,它就具有查询的性质; 命令(Command):当一个方法要改变对象的状态的时候,它就具有命令的性质。

[摘录]《大型网站技术架构》 – 李智慧

大型网站技术架构 李智慧 95个笔记

◆ 第1篇 概述

网站访问特点和现实世界的财富分配一样遵循二八定律:80%的业务访问集中在20%的数据上。

网站使用的缓存可以分为两种:缓存在应用服务器上的本地缓存和缓存在专门的分布式缓存服务器上的远程缓存。

当一台服务器的处理能力、存储空间不足时,不要企图去换更强大的服务器,对大型网站而言,不管多么强大的服务器,都满足不了网站持续增长的业务需求

恰当的做法是增加一台服务器分担原有服务器的访问及存储压力。

数据库经过读写分离后,从一台服务器拆分成两台服务器,但是随着网站业务的发展依然不能满足需求,这时需要使用分布式数据库

文件系统也是一样,需要使用分布式文件系统

分布式数据库是网站数据库拆分的最后手段,只有在单表数据规模非常庞大的时候才使用

不到不得已时,网站更常用的数据库拆分手段是业务分库,将不同业务的数据库部署在不同的物理服务器上

NoSQL和搜索引擎都是源自互联网的技术手段,对可伸缩的分布式特性具有更好的支持

应用服务器则通过一个统一数据访问模块访问各种数据,减轻应用程序管理诸多数据源的麻烦。

大型网站架构技术的核心价值不是从无到有搭建一个大型网站,而是能够伴随小型网站业务的逐步发展,慢慢地演化成一个大型网站。

网站技术是为业务而存在的,除此毫无意义

如果能控制住并发访问的量,很多棘手的技术问题也就不是什么问题了

能亲身经历一个网站从小到大的架构演化过程的网站架构师越来越少,虽然过去有这种经历的架构师也很少(从小型网站发展成大型网站的机会本来就极少),但是将来可能真就没有了

模式的关键在于模式的可重复性,问题与场景的可重复性带来解决方案的可重复使用。

在大型网站架构中也采用分层结构,将网站软件系统分为应用层、服务层、数据层

计算机软件发展的一个重要目标和驱动力是降低软件耦合性。

系统分为三个层次,最下层是基础服务层,提供数据库、缓存、存储、搜索等数据服务,以及其他一些基础技术服务

中间层是平台服务和应用服务层

最上层是API和新浪微博的业务层

性能、可用性、伸缩性、扩展性和安全性是网站架构最核心的几个要素,这几个问题解决了,大型网站架构设计的大部分挑战也就克服了

◆ 第2篇 架构

性能测试是一个总称,具体可细分为性能测试、负载测试、压力测试、稳定性测试

为了保证数据的高可用,网站通常会牺牲另一个也很重要的指标:数据一致性

CAP原理认为,一个提供数据服务的存储系统无法同时满足数据一致性(Consistency)、数据可用性(Availibility)、分区耐受性(Patition Tolerance,系统具有跨网络分区的伸缩性)这三个条件

失效转移操作由三部分组成:失效确认、访问转移、数据恢复。

在网站应用中强调的一个处理错误的理念是快速失败(fast failed),即如果系统在启动时发现问题就立刻抛出异常,停止启动让工程师介入排查错误,而不是启动后执行错误的操作。

很多网站选择周四作为发布日,这样一周前面有三天时间可以准备发布,后面还有一天时间可以挽回错误。如果选择周五发布,发现问题就必须要周末加班了。

计算机领域有句话:计算机的任何问题都可以通过增加一个虚拟层来解决

NoSQL,主要指非关系的、分布式的数据库设计模式

全球大约70%的Web应用攻击都来自XSS攻击和SQL注入攻击

常用的Web应用还包括CSRF、Session劫持等手段

XSS攻击即跨站点脚本攻击(Cross Site Script),指黑客通过篡改网页,注入恶意HTML脚本,在用户浏览网页时,控制用户浏览器进行恶意操作的一种攻击方式

注入攻击主要有两种形式,SQL注入攻击和OS注入攻击

HTTP请求头的Referer域中记录着请求来源,可通过检查请求来源,验证其是否合法。

如果上传的是可执行的程序,并通过该程序获得服务器端命令执行能力,那么攻击者几乎可以在服务器上为所欲为,并以此为跳板攻击集群环境的其他机器

攻击者在请求的URL中使用相对路径,遍历系统未开放的目录和文件

信息加密技术可分为三类:单项散列加密、对称加密和非对称加密

单向散列加密是指通过对不同输入长度的信息进行散列计算,得到固定长度的输出,这个散列计算过程是单向的

为了加强单向散列计算的安全性,还会给散列算法加点盐(salt),salt相当于加密的密钥,增加破解的难度。

常用的单向散列算法有MD5、SHA等

输入的任何微小变化都会导致输出的完全不同

所谓对称加密是指加密和解密使用的密钥是同一个密钥(或者可以互相推算)

对称加密的优点是算法简单,加解密效率高,系统开销小,适合对大量数据加密

缺点是加解密使用同一个密钥,远程通信的情况下如何安全的交换密钥是个难题

常用的对称加密算法有DES算发、RC算法等

不同于对称加密,非对称加密和解密使用的密钥不是同一密钥,其中一个对外界公开,被称作公钥,另一个只有所有者知道,被称作私钥

用公钥加密的信息必须用私钥才能解开,反之,用私钥加密的信息只有用公钥才能解开

非对称加密技术通常用在信息安全传输,数字签名等场合。

由于私钥只有签名者拥有,因此该信息是不可抵赖的,具有签名的性质。

非对称加密的常用算法有RSA算法等。HTTPS传输中浏览器使用的数字证书实质上是经过权威机构认证的非对称加密的公钥。

Trie算法的本质是确定一个有限状态自动机,根据输入数据进行状态转移

另一种更简单的实现是通过构造多级Hash表进行文本匹配

◆ 第3篇 案例

合适的场景下使用合适的产品,而不是最好的产品,所谓小脚穿大鞋,不但跑不快,还可能会摔跤

所谓网站前端是指应用服务器(也就是PHP服务器)之前的部分,包括DNS服务、CDN服务、反向代理服务、静态资源服务等

在反向代理Squid之前,则是被Wikipedia技术团队称为“圣杯”的CDN服务

每个内容页面有唯一的REST风格的URL,以便CDN快速查找并避免重复缓存。

他的意思大概是在互联网公司一年遇到的问题比传统软件公司三年遇到的问题还多

遇到问题,解决问题,经历了这个过程,技术才能升华,人和技术才能融为一体,才知道什么技术是真正有用的,什么技术是花拳绣腿。

所以培养一个网站架构师的成本不单要看付了他多少薪水,给了他多少股票,还要看为他引起的故障买了多少次单。

网站还有很多类似的场景,都需要后台服务准备好,前台应用才能启动,否则就会导致故障。这种情况被内部人戏称作“姑娘们还没穿好衣服,老鸨就开门迎客了”

在应用程序中加入一个特定的动态页面(比如只返回OK两个字母),启动脚本先启动JBoss,然后在脚本中不断用curl命令访问这个特定页面,直到收到OK,才启动Apache。

存储的使用需要根据不同文件类型和用途进行管理,图片都是小文件,应该使用专用的存储服务器,不能和大文件共用存储。批处理用的大文件可以使用其他类型的分布式文件系统。

程序在处理一个输入的对象时,如果不能明确该对象是否为空,必须做空指针判断

程序在调用其他方法时,输入的对象尽量保证不是null,必要时构造空对象(使用空对象模式)。

有位软件技术前辈曾经说过“软件设计有两种风格,一种是将软件设计得很复杂,以使其缺陷没那么明显;一种是将软件设计得很简单,以使其没有明显的缺陷”。

吃一次亏,学一次乖,以后设计软件时就会设计得简单些,如果问题能够很快被发现,要解决也相对容易。

◆ 第4篇 架构师

处理好人的关系对架构和项目的成功至关重要。

一定要坚信:一群优秀的人做一件他们热爱的事,一定能取得成功

最好的软件项目管理不是制订计划,组织资源,跟踪修正项目进展,对成员进行激励和惩罚,而是发掘项目组每个成员的优秀潜能,让大家理解并热爱软件产品最终的蓝图和愿景。

一旦做到这一点,项目组每个成员都会自我驱动,自觉合作,寻找达成目标的最优路径并坚韧不拔地持续前进

领导的真谛:寻找一个值得共同奋斗的目标,营造一个让大家都能最大限度发挥自我价值的工作氛围

所有强迫员工加班的管理者都应该为自己的无能而羞愧。

是事情成就了人,而不是人成就了事。

指望优秀的人来帮自己成事,不如做成一件事让自己和参与的人都变得优秀。

发掘人的优秀远比发掘优秀的人更有意义。

蓝图应该是表述清楚的:产品要做什么、不做什么、要达到什么业务目标,都需要描述清楚。

蓝图应该是简单的:不管内部还是外部沟通,都能一句话说明白:我们在做什么。

蓝图应该写在软件架构设计文档的扉页、写在邮件的签名档、写在内部即时通信群的公告上

不要企图去证明自己了不起,永远也别干这种浪费时间、伤害感情的事。

提醒自己是来做软件的,来实现客户价值的,不是来证明谁对谁错的,不是来给黑熊XX的。

新员工首先要做的事情是融入团队,跟大家打成一片,只要能和团队一起共进退,你就不是一个人在战斗。等熟悉了情况,知道了水的深浅后,再寻找突破口,择机而动。

新员工最不需要做的事情就是证明自己的能力

软件开发出来,如果没有投入使用,就一点价值也没有,不管架构设计和代码实现多优美都没用。

做出软件不等于解决问题,事实上很多问题确实也不需要用软件来解决。

如果你需要他的支持,就要想办法把你的问题变成他的问题,是他遇到了问题,而你来帮他解决

给上司提封闭式问题,给下属提开放式问题

如果在合作中出现问题,告诉他问题的存在和紧迫性,而不是责问他为什么出现问题

人在听到批评信息的时候,本能地想要去针对批评进行反驳或者辩解,于是谈话就变成关于批评是否合理的争论,离解决问题越来越远

在解决我的问题之前,先解决你的问题

◆ 附录B Web开发技术发展历程

随着CGI(Common Gateway Interface,通用网关接口)技术的出现,Web服务端可以根据不同用户请求产生动态页面内容

早期主要的CGI编程语言是Perl

CGI程序擅长处理请求信息,而服务器页面擅长构造响应页面,那么能不能将两者结合起来呢?答案就是MVC(模型-视图-控制器)模式

Web开发中通常将服务端划分为三层:表现层、业务逻辑层和数据源层

表现层完成视图展现和用户交互;业务逻辑层实现系统的核心逻辑;数据源层负责数据存储、交换和通信

◆ 后记

不要企图去设计一个大型网站