blog icon indicating copy to clipboard operation
blog copied to clipboard

技术博客

Results 74 blog issues
Sort by recently updated
recently updated
newest added

**程序员之间的互相尊重体现在他所写的代码中。他们对工作的尊重也体现在那里**。 在《Clean Code》一书中Bob大叔认为在代码阅读过程中人们说脏话的频率是衡量代码质量的唯一标准。这也是同样的道理。 这样,代码最重要的读者就不再是编译器、解释器或者电脑了,而是人。写出的代码能让人快速理解、轻松维护、容易扩展的程序员才是专业的程序员。 ## 代码应当易于理解 可读性基本定理:**代码的写法应当使别人理解它所需的时间最小化**。 本书的余下部分将讨论如何把“易读”这条原则应用在不同的场景中。但是请记住,**当你犹豫不决时,可读性基本定理总是先于本书中任何其他条例或原则**。 ## 把信息装到名字里 我们在程序中见到的很多名字都很模糊,例如tmp。就算是看上去合理的词,如size或者get,也都没有装入很多信息。本章会告诉你如何把信息装入名字中。 ### 选择专业的词 “把信息装入名字中”包括要选择非常**专业的词**,并且避免使用“空洞”的词。 例如,“get”这个词就非常不专业,例如在下面的例子中: ``` def GetPage(url): ... ``` “get”这个词没有表达出很多信息。这个方法是从本地的缓存中得到一个页面,还是从数据库中,或者从互联网中?如果是从互联网中,更专业的名字可以是FetchPage()或者Download-Page()。 下面是一个BinaryTree类的例子: ``` class BinaryTree { int Size(); ... };...

读书笔记

[从输入 URL 到页面加载完成的过程中都发生了什么事情?](http://fex.baidu.com/blog/2014/05/what-happen/)

基础

`正则表达式(Regular Expression)`是一种处理字符串匹配的语言。 很可能你使用过 Windows/Dos 下用于文件查找的`通配符(wildcard)`,也就是 `*` 和 `?` 。如果你想查找某个目录下的所有的Word文档的话,你会搜索 `*.doc`。在这里,`*` 会被解释成任意的字符串。和通配符类似,正则表达式也是用来进行文本匹配的工具,只不过比起通配符,它能更精确地描述你的需求 —— 当然,代价就是更复杂——比如你可以编写一个正则表达式,用来查找所有以0开头,后面跟着2-3个数字,然后是一个连字号 “-”,最后是7或8位数字的字符串(像010-12345678或0376-7654321)。 JavaScript 同样也对正则表达式有很好的支持,RegExp 是 JavaScript 中的内置“类”,通过使用RegExp,用户可以自己定义模式来对字符串进行匹配。而 JavaScrip t中的 String 对象的 replace 方法也支持使用正则表达式对串进行匹配,一旦匹配,还可以通过调用预设的回调函数来进行替换。 ## 入门 学习正则表达式的最好方法是从例子开始,理解例子之后再自己对例子进行修改,实验。下面给出了不少简单的例子,并对它们作了详细的说明。 假设你在一篇英文小说里查找hi,你可以使用正则表达式hi。 这几乎是最简单的正则表达式了,它可以精确匹配这样的字符串:由两个字符组成,前一个字符是...

javascript
基础

## Internet 概览 局域网(local area network,LAN)。 广域网(wide area network,WAN)。 目前使用的两种典型的广域 网:点到点广域网和交换式广域网。 在`电路交换网络(circuit-switched network)`中,两个端系统之间总是存在一条专用的连接(称 为电路),交换机只能使其变成活跃或非活跃状态。 分组交换网络:在一个计算机网络中,两个端点之间使用被称为`分组(packet)`的数据块进行通信。分组交换网络中的路由器具有能够存储和转发分组的队列。 ## 协议分层 `协议(protocol)`定义了发送者、接收 者和所有中间设备为了高效通信需要遵循的规则。当通信简单时,我们可能只是需要一个简单的协 议;当通信复杂时,我们可能需要把任务划分到不同层,每层需要一个协议,也就是说需要`协议分层(protocol layering)`。 原则:第一个原则就是如果想要双向通信,那么我们需要每一层能够 实现两个相反的任务,每个方向上一个。第二个原则是两端每一层中的两个对象应该相同。 TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/互联网协议) ### TCP/IP 协议簇中的层次...

计算机网络
基础

保罗·格雷厄姆出身于一个中产阶级家庭,本科就读于康奈尔大学,研究生阶段去了哈佛大学。他有一套完整的创业哲学,他的创业公式是: 1. 搭建原型 2. 上线运营 3. 搜集反馈 4. 调整产品 5. 成长壮大 他说:**创始人本身比他的创意更重要。** 他认为:**所有的东西都在变成软件。**   它的作者是美国互联网界举足轻重、有“创业教父”之称的哈佛大学计算机博士`保罗·格雷厄姆(Paul Graham)`。本书是他的文集。保罗·格雷厄姆.   1984年,《新闻周刊》的记者史蒂文·利维出版了历史上第一本介绍黑客的著作——《黑客:计算机革命的英雄》(Hackers: Heroes of the Computer Revolution)。在该书中,他进一步将黑客的价值观总结为六条`“黑客伦理”(hacker ethic)`,直到今天这几条伦理都被视为这方面的最佳论述。 - (1) 使用计算机以及所有有助于了解这个世界本质的事物都不应受到任何限制。任何事情都应该亲手尝试。   (Access to computers—and anything that...

读书笔记

## 替换 通过一些例子来学习正则表达式摘录,js正则函数match、exec、test、search、replace、split ### 去除首尾的 ```js //去除首尾的‘/’ input = input.replace(/^\/*|\/*$/g,''); ``` ### javascript:; 、javascript:void(0) ```js 'javascript:;'.match(/^(javascript\s*\:|#)/); //["javascript:", "javascript:", index: 0, input: "javascript:;"] ``` ### 匹配 ```js var str = "access_token=dcb90862-29fb-4b03-93ff-5f0a8f546250;...

基础

和其他许多编程语言一样,JavaScript使用分号(;)将语句分隔 开。这对增强代码的可读性和整洁性是非常重要的:缺少分隔符,一条语句的结束 就成了下一条语句的开始,反之亦然。在JavaScript中,如果语句各自独占一行,通 常可以省略语句之间的分号(程序结尾或右花括号“}”之前的分号也可以省略)。 许多JavaScript程序员(包括本书中的示例代码)使用分号来明确标记语句的结束, 即使在并不完全需要分号的时候也是如此。另一种风格就是,在任何可以省略分号 的地方都将其省略,只有在不得不用的时候才使用分号。不管采用哪种编程风格, 关于JavaScript中可选分号的问题有几个细节需要注意。 考虑如下代码,因为两条语句用两行书写,第一个分号是可以省略掉的: ``` a=3; b=4; ``` 如果按照如下格式书写,第一个分号则不能省略掉: ``` a=3;b=4; ``` 需要注意的是,JavaScript并不是在所有换行处都填补分号:**只有在缺少了分号 就无法正确解析代码的时候,JavaScript才会填补分号。** 换句话讲(类似下面代码中的两处异常),如果当前语句和随后的非空格字符不能当成一个整体来解析的话, JavaScript就在当前语句行结束处填补分号。看一下如下代码: ``` var a a = 3 console.log(a) ``` JavaScript将其解析为:...

javascript

React在减少重复渲染方面确实是有一套独特的处理办法,那就是虚拟DOM,但显然在首次渲染的时候React绝无可能超越原生的速度,或者一定能将其它的框架比下去。尤其是在优化前的React,每次数据变动都会执行render,大大影响了性能,特别是在移动端。 ## React 默认的渲染行为 ### 初始化渲染 在初始化渲染时,我们需要渲染整个应用 (绿色 = 已渲染节点) ![image](https://user-gold-cdn.xitu.io/2016/11/29/83e66c3bc93656c0c0bd86a7762e9aea.jpg?imageView2/0/w/1280/h/960) ### 提出改变 我们想更新一部分数据。这些改变只和一个叶子节点相关(绿色的) ![image](https://user-gold-cdn.xitu.io/2016/11/29/95318bad60cb937695f9c4e4c5ba952a.jpg?imageView2/0/w/1280/h/960) ### 理想更新 我们只想渲染通向叶子节点的关键路径上的这几个节点(绿色的) ![image](https://user-gold-cdn.xitu.io/2016/11/29/5dcbaaedcf45ba22ca41b17fe699439f.jpg?imageView2/0/w/1280/h/960) ### 默认行为 如果你不告诉 React 别这样做,它便会如此 (橘黄色 = 浪费的渲染) ![image](https://user-gold-cdn.xitu.io/2016/11/29/d3390985be8584ac8eec2d976449cd9c.jpg?imageView2/0/w/1280/h/960) 从上图可以看见,组件除了必要渲染的三个节点外,还渲染了其他不必要渲染的节点,这对性能是一个很大的浪费。如果对于复杂的页面,这将导致页面的整体体验效果非常差。因此要提高组件的性能,就应该想尽一切方法减少不必要的渲染。 ##...

react
性能优化

## 简介 meta标签是HTML语言HEAD区的一个辅助性标签。 meta常用于定义页面的说明,关键字,最后修改日期,和其它的元数据。这些元数据将服务于浏览器(如何布局或重载页面),搜索引擎和其它网络服务。 mata 标签包含[全局属性](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes) > Note: 全局属性`name`在标签里又特殊的含义,itempro属性不能和name,http-equiv和charset 属性设置在同一个meta标签。 ## charset 声明网页的字符编码: ``` ``` ## content content属性的内容是`htp-equiv`或`name`属性的值,具体取决于你用哪一个。 ## http-equiv 该属性可以包含HTTP头的名称,属性的英文全称为http-equivalent。它定义了可以改变server和user-agent行为的指令。该指令的值在content属性内定义,可以是以下之一: ### content-language(已过时) 定义页面的默认语言。它可以被任何元素上的lang属性所覆盖。 ### Pragma 禁止浏览器从本地计算机的缓存中访问页面内容。如: ``` <meta http-equiv="Pragma"...

计算机网络

> 来自于O'Reilly免费的电子书:[Software Architecture Patterns](http://www.oreilly.com/programming/free/files/software-architecture-patterns.pdf) ![image](https://camo.githubusercontent.com/6e2c9a1c071fa6d491d3d054c184696de961a6e5/687474703a2f2f692e696d6775722e636f6d2f33474672705a352e6a7067) ## 分层架构 (Layered Architecture) 分层架构是最常见的架构,也被称为n层架构。多年以来,许多企业和公司都在他们的项目中使用这种架构,它已经几乎成为事实标准,因此被大多数架构师、开发者和软件设计者所熟知。比如MVC。 分层架构的一个特性就是**关注分离(separation of concerns)**。在层中的组件只负责本层的逻辑。组件的划分很容易让它们实现自己的角色和职责,也比较容易地开发,测试管理和维护。 我们需要这样的冗余,即使业务层没有处理业务规则,也要通过业务层来调用数据层,这叫**分层隔离**。对于某些功能,如果我们从表现层直接访问数据层,那么数据层后续的任何变动都将影响到业务层和表现层。 注意分层的**开闭原则**。如果某层是关闭的,那么每个请求都要经过着一层。相反,如果该层是开放的,那么请求可以绕过这一层,直接到下一层。 分层隔离有利于降低整个应用程序的复杂度。某些功能并不需要经过每一层,这时我们需要根据开闭原则来简化实现。 ![image](http://colobu.com/2015/04/08/software-architecture-patterns/Open-layers-and-request-flow.png) ### 污水池反模式(architecture sinkhole anti-pattern) 分层架构是**SOLID原则**的通用架构,当我们不确定哪种架构更合适的时候,分层架构将是一个很好的起点。我们需要注意防止架构陷入**污水池反模式(architecture sinkhole anti-pattern)**。 在这个模式中,请求流只是简单的 穿过层次,不留一点云彩,或者说只留下一阵⻘青烟。比如说界面层响应了一个获得数据的请求。响应层把这 个请求传递给了业务层,业务层也只是传递了这个请求到持久层,持久层对数据库做简单的SQL查询获得用户的数据。这个数据按照原理返回,不会有任何的二次处理,返回到界面上。 每个分层架构或多或少都可能遇到这种场景。关键在于这样的请求有多少。80-20原则可以帮助你确定架构是 否处于反污水模式。大概有百分之二十的请求仅仅是做简单的穿越,百分之八十的请求会做一些业务逻辑操 作。然而,如果这个比例反过来,大部分的请求都是仅仅穿过层,不做逻辑操作。那么开放一些架构层会比较好。不过由于缺少了层次隔离,项目会变得难以控制。...

软件工程