自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 JS闭包Closure

闭包是一个针对作用域产生的机制,假如a函数返回一个b函数,b函数在被返回后还可以获得到所有在b函数以外且在a函数以内的变量。

2018-08-28 23:44:29 291

原创 常见的网络袭击

XSS (Cross-site Scripting): XSS袭击是通过黑客在网页注入恶意执行代码来达到某种有害网站的目的。典型的例子可以是在一个部落格网站,开发者没有处理好input输入框,而让任何用户可以通过文字输入框注入JS脚本。当脚本命令注入后被存入数据库,所有浏览恶意用户上传内容的用户都可能被脚本偷取重要信息。Man-in-the-middle:中间人是一种概念,黑客可以通过...

2018-08-27 23:12:30 247

原创 JS async库:parallel, series, waterfall, whilst用法

针对JS的异步机制,JS社区给出了很多不同的解决方案,Async库便是其中一种,可能也是对于控制异步操作最全面的资源。因为该库提供了70个函数,几乎想所有的运用场景都考虑在内。以下笔者针对四个函数进行讲解:1. parallelconst async = require('async');const doOne = callback => { setTimeout(()...

2018-08-25 16:13:30 2309 2

翻译 MarcoJS 服务端渲染

本文章简单的列出几个步骤利用Node.js Express框架以及MarcoJS 实现服务器渲染模板第一步:编写Express路由://server.jsrequire('marko/node-require').install();const express = require('express');const app = express();app.get('/', ...

2018-08-25 00:04:47 683

原创 JS: 当 let 和 var 遇上for循环

for (var i = 0; i < 2; i++) { setTimeout(() => { console.log(i); })}//2//2上图代码的执行结果是两个2。对异步编程有所了解的可能都知道setTimeout里的callback会在event loop的队列里堆积,知道i++操作完成。所以打印出两个2。而这里需要注意的是v...

2018-08-24 00:01:28 5437 4

原创 数据结构: 哈希表

每个数据结构的都是针对解决某些问题而存在。哈希表所代表的是一个能让数据快速存储并读取的数据规整方式。一个哈希表主要由哈希算法和(持有指定空间的)数组组成。哈希算法有很多种,但它的核心操作是根据指定的空间将参数转换成数字。在哈希表中,哈希算法用于转换数据的键值并生成指定数字存入数组中。如果有一组数据代表班级里十个同学的名字和他们的年龄(e.g. {John: 23, Bob: 32, Lisa: 2...

2018-08-22 21:12:04 215

原创 JS与函数式编程(小程序实例)

编程范式(programming paradigm)是软件工程中开发者对于编写代码的构造思路。不同的范式基于不同的理念和原则。函数式编程便是一种基于编写纯函数的代码构造思路。该范式遵守四大原则:1. 函数需纯 2. 避免数据共享 3. 固定变量值 4. 副作用最小化。1. 纯函数的特点是其针对某个参数固定返回相同的值,并且不产生任何副作用。2. 共享数据是任何存在于执行环境的公共数据 (e...

2018-08-21 23:08:48 1423

原创 Javascript 上升(Hoisting)

在面试JS的面试过程中会出现一类问题专门针对JS的“奇怪现象”去考面试者是否了解关于该语言的边边角角,本文讲的JS上升级至(hoisting)可以算作这一类现象。对于hoisting产生的困户和误解往往是因为其语言在编写(程序员的感知)和实际执行上存在着差异,导致本以为简单明了的执行逻辑出现了意想不到的结果。如果要理解其根本原因,需要了解两个JS engine解析时的两个动作:1.声明(decla...

2018-08-20 23:23:17 465

原创 Websocket是什么?

Websocket是存在于互联网交互架构应用层的协议,虽然在实际的运用场景中websocket需要http去启动链接,但该依赖关系不是必要的。Websocket连接完全可以独立于http,之所以将连接方式建立在http之上是因为http已经提供了便捷的沟通协议。利用http的协议完成wesocket握手连接可以节省开发独立握手协议的成本。Websocket的优势在于两台计算机传输信息的实时性。...

2018-08-18 17:46:30 2967 1

原创 原生的Promise有什么不同

今天看到一段代码的执行结果让我十分困惑:setTimeout(_ => console.log(4))let promise = new Promise(resolve => { resolve() console.log(1)})promise.then(function() { console.log(3);})console.log(2)//1, ...

2018-08-18 00:20:01 162

原创 NodeJS子进程:exec, fork, spawn

Node的优势在于其语言的处理速度,而它的速度建立在异步处理和事件驱动的机制上。但语言本身的单线程处理会让速度受限,并且在硬件资源充沛的环境下无法充分利用计算机的性能。举个列子:服务器的业务逻辑中如果某模块的复杂度特别高需要花大量的时间做处理,在只有一个线程的情况下,代码处理会被阻塞。Node开发团队因此也推出了解决方案,那就是child_process模块,其模块提供了四个函数:exec, ex...

2018-08-16 22:19:10 2732

原创 Node Stream 实例:压缩文件脚本

Node的数据流模块配合pipe函数可以生成很多有效的文件处理工具,以下代码是一个简单的压缩文件脚本:const fs = require('fs');const zlib = require('zlib');const { Transform } = require('stream');const file = process.argv[2];let src = fs.creat...

2018-08-15 22:31:15 199

原创 NodeJS 数据流

Stream是NodeJS的原生模块。它的优势是可以让程序更有效的处理庞大的数据。原因在于stream模块可以将数据分段后导入到指定位置。举个例子:如果有一个200MB的文件需要读取并传送给用户,程序可以读取文件然后发送给客户端。但是读取文件的过程需要将整个文件读取并保存至内存后再进行发送,所以内存空间必然会变得拥挤。更好的办法是通过stream模块来完成数据读取和传送。数据流分四种:Readab...

2018-08-14 22:53:00 677

原创 JS: "这"到底是什么?

"这"为什么会存在?在JS的开发过程中,关键词this的绑定是学习道路上必定要过的一个门槛。想要深刻理解this的用法就需要意识到它存在的意义。在运用上,其实this是一个非常有助于整理代码的好工具。它的存在给JS编程带来了很大的灵活性,不过其特点也成为了很多开发者的烦恼。首先我们简单的看一下this的用处:function Airplane() { this.name = "p...

2018-08-13 23:38:41 217

原创 JS的特性:异步 + 事件驱动

语言本身的特点圈定了它在不同环境和运用场景的优点和缺点。Javascript的特性是其异步和事件驱动。异步是在程序发起调用后,进程继续向下执行的操作。但回调返回后,系统会通过某种手段来通知调用者(事件驱动)。在JS中最常见得例子就是setTimeout: setTimeout(function(){ console.log('later');}, 1000);console.l...

2018-08-12 00:09:15 925

原创 JS模块机制:CommonJS

随着互联网的发展,JS已经不是当初那个单纯运用在网景浏览器中的小语言了。在前端框架飞速发展以及NodeJS在服务器上的运用,当初的那个小语言也在飞速迭代,让其内部架构能能符合所有开发项目的需求。因此语言的模块机制及其重要。模块化是计算机科学中的一个核心概念。它代表对所有代码逻辑的封装,以便提高代码的整洁度以及可重用性。同时,因为在开发大项目的过程中,开发者很容易遇到的情况就是变量命名的重叠,如果模...

2018-08-10 22:58:58 219

原创 以最轻量的方式解释Promise

接触过JS的开发人员应该都有用过Promise处理异步编程,它在语法上非常直观的用“then”去对当下所要做得执行和在期之后所要执行的代码做了封装。function test() { let promise = new Promise((resolve, reject) => { setTimeout(() => { resolve...

2018-08-09 14:49:45 267

原创 设计非关系型数据库

从MySql到MongoDB的数据库设计,在思路上要做很大的改变。MySQL代表的是关系型数据库,所以在设计模型时往往会按照三种实体数据关系去设计:1.一对一 2.一对多 3.多对多。这三种关系足以映射业务逻辑上的需求。很多开发者在没接触非关系型数据库之前都会按照这个思路去规整数据。但是如果将同样的逻辑嵌套在设计非关系型数据库中,上面提到的三种关系可能无法应付。就针对一对多的关系而言,在Mon...

2018-08-08 23:29:55 4421

原创 MySql锁

这篇文章围绕着关于数据库锁的几个关键词做一些梳理。其中包括:乐观锁、悲观锁、表级锁、行级锁、页级锁、共享读锁和排他写锁。在网上的各个资源都将这7个名次形容为“数据库锁的种类”,显得有些混乱,所以将他们七个都搬出来讲讲他们到底什么关系。1. 锁的粒度:表级锁、行级锁、页级锁锁的粒度根据我的理解就是所数据的范围。他是针对整张表加锁还是针对某行数据加锁。因此不过是三个其中的哪一个,他代表的核...

2018-08-07 18:49:09 133

原创 MySQL事务和锁的关系

用一句话去概括事务:将对数据库进行的多个操作封装成单个,只有在所有操作都成功的情况下才真正实现变动,否则数据原封不动。用一句话概括锁:一个让数据不能被修改的功能。而他们之间的关系可以定义为:锁是实现事务其中一个特性的机制。事务是一个针对数据质量产生的概念。在高并发或者数据库出现突然断电的情况下,事务所包含的特性就能应对可能会出现的差错。事务有4个特性:Atomic + Consistent +...

2018-08-06 22:10:43 5283

原创 HTTP和TCP之间的关系

在解释两者之间的关系之前,我们必须从宏观的角度了解互联网的整个交互模型。因为当了解互联网在大体上是如何运作时,我们才能了解HTTP和TCP存在的意义,包括他们所要解决的问题是。 (此图来自Udacity的网络协议教程)互联网的模型被分为4层,从上至下每一层都依赖其底层协议。换言之,Application(应用层) 的协议操作成功的前提是Transport(运输层)的存在。没有运输层就没有应...

2018-08-05 22:27:48 52946 9

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除