使用工具生成证书

简介

证书创建工具生成仅用于测试目的的 X.509 证书。 它创建用于数字签名的公钥和私钥对,并将其存储在证书文件中。 此工具还将密钥对与指定发行者的名称相关联,并创建一个 X.509 证书(该证书将用户指定的名称绑定到密钥对的公共部分)。绝不要将此工具生成的证书私钥存储在 .snk 文件中。 如果需要存储私钥,则应使用密钥容器。

基本语法结构: makecert 基本选项 / 扩展选项 生成的文件名

创建根证书

1
2
makecert.exe -n "CN=CARoot" -r -pe -a sha512 -len 4096 -cy authority -sv CARoot.pvk CARoot.cer
pvk2pfx.exe -pvk CARoot.pvk -spc CARoot.cer -pfx CARoot.pfx -po Test123

注意: 在这里只有 cer 文件可以分享。现在这张证书是不受信任的,需要将这张证书安装到 Local Machine 的 Root 目录下。

设计模式中的一些原则简介

简介

对于面向对象软件系统的设计而言,在支持可维护性的同时,提高系统的可复用性是一个至关重要的问题。与此同时,提高一个软件系统的可维护性和可复用性是面向对象设计需要解决的核心问题之一。在面向对象设计中,可维护性的复用是以设计原则为基础的。每一个原则都蕴含一些面向对象设计的思想,可以从不同的角度提升一个软件结构的设计水平,同时,这些原则也是设计模式的本质。

常见的7种面向对象设计原则:

名称 定义
单一职责原则 一个类只负责一个功能领域中的相应职责
开闭原则 软件实体应对扩展开放,而对修改关闭
里氏代换原则 所有引用基类对象的地方能够透明地使用其子类的对象
依赖倒转原则 抽象不应该依赖于细节,细节应该依赖于抽象
接口隔离原则 使用多个专门的接口,而不使用单一的总接口
合成复用原则 尽量使用对象组合,而不是继承来达到复用的目的
迪米特法则 一个软件实体应当尽可能少地与其他实体发生相互作用

单一职责原则 (SRP)

定义:一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。

在软件系统中,一个类或者说一个功能模块承担的职责越多,它所需要的方法/函数就越多,能复用的可能性就越小,并且承担的职责过多,就相当于将这些职责混合在一起,当其中一个职责变化时,会大大增加影响其他职责的可能性,造成类的不稳定性的增加。因此我们要将这些职责进行分离,将不同的职责封装在不同的类中。如果有几种类中的职责需要相互配合,那么就可以再创建一个相对抽象的类来包含这个功能。

单一职责原则是实现高内聚、低耦合的指导方针,它是最简单但又最难运用的原则,需要恰如其分地发现类的不同职责并将其合理归类分离。

单一职责原则的示例

开闭原则 (OCP)

定义:一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。

任何软件都会面临这样的问题,即它们的需求会随时间的推移而发生变化。当软件系统需要面对新的需求时,我们应该尽量保证系统的设计框架是稳定的。如果一个软件设计符合开闭原则,那么可以非常方便地对系统进行扩展,而且在扩展时无须修改现有代码,使得软件系统在拥有适应性和灵活性的同时具备较好的稳定性和延续性。随着软件规模越来越大,软件生命周期越来越长,软件维护成本越来越高,设计满足开闭原则的软件系统也变得越来越重要。为了满足开闭原则,需要对系统进行抽象化设计,抽象化是开闭原则的关键。在 Java,C# 等面向对象语言中,可以为系统设计一个相对稳定的抽象层,而将不同的实现行为移至具体的实现层中完成。在很多面向对象编程语言中都提供了接口、抽象类等机制,可以通过它们实现系统的抽象层,再通过具体类来进行扩展。如果需要修改系统的行为,无须(少量)在抽象层进行任何改动,只需要增加新的具体类来实现新的需求即可,这样就可以实现在不修改已有代码的基础上扩展系统的要求。

开闭原则的示例

里氏代换原则 (LSP)

定义:所有引用基类的地方必须能透明地使用其子类的对象。

在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立,如果一个软件实体1使用的是一个子类对象的话,那么它不一定能够使用基类对象。里氏代换原则是实现开闭原则的重要方式之一,由于使用基类对象的地方都可以使用子类对象,因此在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,用子类对象来替换父类对象。

在使用该原则时需要注意如下几个问题:

  1. 子类的所有方法必须在父类中声明,或子类必须实现父类中声明的所有方法。根据里氏代换原则,为了保证系统的扩展性,在程序中通常使用父类来进行定义,如果一个方法只存在子类中,在父类中不提供相应的声明,则无法在以父类定义的对象中使用该方法。
  2. 在运用里氏代换原则时,尽量把父类设计为抽象类或者接口,让子类继承父类或实现父接口,并实现在父类中声明的方法,运行时,子类实例替换父类实例,我们可以很方便地扩展系统的功能,同时无须修改原有子类的代码,增加新的功能可以通过增加一个新的子类来实现。里氏代换原则是开闭原则的具体实现手段之一。

里氏代换原则的示例

《清醒思考的艺术》 读书笔记

幸存偏误

  成功的永远是少数,而媒体和新闻报道的就是这些少数人。系统性的高估了成功的概率。当不同的研究纯属巧合的得出相同的一个结论时,比如红葡萄酒和长寿。于是大家都认可这一观点,但事实上却并非如此。

游泳选手的身材错觉

  好比电视上的化妆品广告一样,人们认为是用了化妆品之后,她们变得如此动人,但事实是,因为她们美丽所以才被选去拍化妆品广告的。远离成功自助图书,他们都是由天生快乐的人所写的,书中从头到尾都是好点子,但是对你不一定管用。因为倒霉蛋是不写这种成功的书的。

过度自信效应

  传统的过度自信和利益人在激励下低估成本会使你觉得无所不能。但是请先认清自己再做决定。请对所有的预测持怀疑的态度,尤其是那些所谓的专家的预测和建议,请你在筹划任何事情是都从悲观的角度出发,作最坏的打算,这样你才能更好的认清形势,做出判断。

从众心理

  这是我们与生俱来的,大家都在跑,你也会跑,马路上有许多人在驻足观看,你也会因此停下脚步,你去一个你不知道在哪里的地方看足球比赛,大家在往哪个方向走,你也会跟上去加入他们。不幸的是,只有最后一种情况是对你有利的。

纠缠于沉没成本

  已经投入的东西成了继续做下去的理由,有许多理由支持你继续做下去,但如果你只是因为舍不得已经做出的投资而继续做某件事,这就不是一个好理由了。理性的决定意味着忽视已经投入的成本,你已经投资了什么并不重要,唯一重要的事现在的形势及你对未来的评估。

互惠效应

  这是一种出色的生存战略,互惠是风险管理,没有互惠,人类——还有无数种动物早就灭绝了。当然也要防止互惠的另一面:报复。

确认偏误(1)

  我们容易过滤掉与我们的现有观点相矛盾的新信息。记住:事实不因被忽视而消失。我们不能只想着证明我们的理论是对的,而是要试图证明它是错的——有意识地寻找反驳证据。

确认偏误(2)

  该死的是认识不到你已经犯了确认偏误,当然我们不希望我们的观点和信念被攻击的千疮百孔,但是我们不能因为对方拿着带消音器的枪向我们射击就听不见枪声。我们越来越多的活动在思想一致者的社区里,这样更加深了确认偏误。试着说服自己,干掉自己最心爱的理论。

权威偏误

  任何时候你都要有主见。不管什么时候遇到一位专家,我都会设法向他挑战。你对权威的批判性越强,你就越自由,就越相信自己有更多的能力。

对比效应

  魔术师能偷走你的表,是因为他对你身体的另一部位使劲用力。我们做的大部分决策都是建立在对比效应之上的。当我们面对某种难看、便宜、小的东西时,我们就会判断出另一种东西更漂亮、更贵、更大。我们难以作出绝对的判断。

现成偏误

  我们依照现实的例子来想象世界,这是愚蠢的。某种东西重复的出现我们就很容易想到它们,并且不假思索的就认为是正确的。但是,往往是这时候我们就更需要反思。你身处一个陌生的城市,你的口袋里有另一个城市的地图,你却用它来指路,你宁可用错误的地图,也不愿自己毫无头绪。

好转之前会先恶化的陷阱

  这是确认偏误的一种变体。并且当你使用这个例子时,你会发现,不管怎么样,你都是对的。不过确实有那种情况,但是你要记住,所有这些情况,你应该能很快的看出结果。里程碑是明确的,是可以检测的。

故事偏误

  我们有时候突然“理解”了一件事情的始末,但其实我们只是对自己编了一个故事。我们喜欢听故事,不喜欢听抽象事实。所有的一切我们都想办法把它们编成有“意义”的故事。破解的方法是将这些故事拆解开来,看看其中隐藏着什么。

事后诸葛亮偏误

  这会导致我们傲慢,误导我们做出的决定。有时,你可以写下你的预测,之后再来看看对不对。同样,看历史时,你也要看当年的。事后,大家都会编故事。

司机的知识

  知识分两种:真知识和司机知识。我们要的是那种经过大量时间思考的知识。认清你自己的能力范围,并待在里面,这个范围有多大不重要,你所要知道的是它的范围。真正有能力的人来到他们的能力范围之外是要么说我不知道要么不说,而对于大部分人,你就是听不到这一句。

控制错觉

  这是指我们自己相信我们能控制或影响一些客观上不受我们所左右的东西。建议:请你将注意力集中在你自己真正能影响的少量东西上,坚定不移的只关注那些最重要的东西,其它的听之任之吧。

激励过敏倾向

  人们是对激励做出反应,而不是对激励背后的真正目的做出反应。很多时候,适得其反。

回归均值

  一连长了三天的股票不会继续上涨,一直发挥完美的运动员不会继续取得优异的成绩。任何结果都会围绕着一个均值产生波动。

公地悲剧

  每个人都为了自己的利益,将更多的牛赶到公共地上进行放养,从而导致了公地被毁,解决方法主要有将公地私有化或加强管理。在小范围内,道德的制裁至今有效。但是在一个匿名的社会里道德就没那么管用了。凡是好处归个人而成本由集体承担的地方,就潜伏着公地悲剧。公地悲剧本是亚当斯密的"无形的手"的对立面。特殊情形下市场这只无形的手并不能指向最佳效果——而是恰恰相反。能私有化的东西,进行私有化,对于无法私有化的东西,如臭氧层、海洋、卫星运行轨道等,必须加强管理。简言之,对于每个人而言,损失小,收获大。

结果偏误

  我们倾向于以结果判断决定——而不是当时作决定的过程。有点马后炮的味道。记住,结果差并不一定意味着当时所作的决定不对,反之亦然。出于理性而做出的决定,如果结果不好,下次最好仍然这么做。

选择的驳论

  选择多是进步的标尺,但是过多的选择会降低生活质量。第一,选择范围太大会导致无所适从。第二,选择范围大会导致作出更差的决定。思维混乱是会做出更坏的打算。第三,选择范围大会导致不满。纠结导致心情不佳。解决方法是,仔细考虑你想要什么。请写下你的标准,并务必遵守它们。你要明白,你永远做不出完美的选择。适合你的才是最好的。至于过去的就让它过去吧。

使用 Google 的一些技巧

准确搜索

方法:最简单和有效的搜索方式是在关键词上加双引号,在这种情况下,搜索引擎只会返回和关键词完全匹配的搜索结果。

准确搜索

注意:第一条为广告,以下同上。

排除关键词

方法:如果在进行准确搜索时没有找到自己想要的结果,你可以通过使用减号对包含特定词汇的信息进行排除。

排除关键词

用关键字 OR 进行搜索

方法:默认情况下,搜索引擎会返回所有和查询词汇相关的结果,但通过使用 OR 关键字,你可以得到和两个关键词分别相关的结果,而不仅仅是和两个关键词同时都相关的结果。

用关键字OR进行搜索

通过使用 ~ 符号进行同义词搜索

方法:有的时候,你可以对不太确切的关键词进行搜索,这样反而会显得更加合适。在未能准确判断关键词的情况下,你可以通过同义词进行搜索,以便挖掘出一些相关的信息。

在站内进行搜索

方法:绝大部分网站的搜索功能都有所欠缺,因此,更好的方法是通过 Google 这样的搜索引擎对站内的信息进行搜索。你只需要在搜索引擎上输入 site:baidu.com 加上关键词,搜索引擎就会反馈网站 baidu.com 内的所有和关键词相关的条目。

在站内进行搜索

善用星号

方法:在搜索引擎中,我们可以用星号来代替关键词中的缺失部分,不论缺失的是一连串单词的其中一个还是一个单词的某一部分。另外,当你希望搜索一篇确定性偏低的文章时,也可以使用星号填补缺失部分。

善用星号

在两个数值之间进行搜索

方法:在寻找问题的答案时,一个比较好的做法是在一定范围内寻找和关键词相关的资讯。对于数字,符号是两个英文句号加上一个空格键。

在两个数值之间进行搜索

在网页标题、链接或主体中搜索关键词

方法:有的时候,你需要找出所有和关键词相关的网页标题、链接和网页主体,这就需要用限定词

名称 定义
inurl 在 URL 链接中搜索使用
intext 在网页主体中搜索使用
intitle 在网页标题中搜索使用

在网页标题、链接或主体中搜索关键词

OAuth协议的一些总结

名词解释

  1. Third-party application:第三方应用程序,又称为客户端
  2. HTTP service:HTTP 服务提供商
  3. Resource Owner:资源所有者,又称为用户
  4. User Agent:用户代理,一般为浏览器
  5. Authorization server:认证服务器,一般为服务提供商专门用来处理认证的服务器
  6. Resource server:资源服务器,一般为用户存放用户资源的服务器

OAuth 1.0

简单的结构图

OAuth1.0的交互图

  1. 网站向认证平台请求一个未授权的 Token,这个 Request Token Url 是前面说的第一个 Url。
  2. 跳转至用户授权页面,提示用户进行登录,并进行授权,返回获得已授权的 Token,用到的 User Authorization Url 是前面说的第二个 Url。
  3. 通过已授权的 Token,向认证平台请求 Access Token(数据令牌),用到的 Request Access Url 是前面说的第三个 Url,返回后到这步整个认证流程就结束了,最后一步,是通过数据令牌等参数,调用接口获取用户信息,不完全算认证的流程。
    参数名 解释
    Request Token Url 获取未授权的 Token 的 Url
    User Authorization Url 请求用户对 Token 进行授权的 Url
    Request Access Url 使用 Token 获取 Access Token 的 Url

OAuth 2.0

现在主要用到的 OAuth 认证方式,主要都是基于2.0版本,所以我主要讲解这个版本。[详细信息]1