最近去公司面试遇到一个关于Array操作的问题如下:
实现 [5,6,9] + 1 = [5,7,0];
当时回答的时候提出的一种方案是采用Array的reduceRight操作
| 
 | 
 | 
最近去公司面试遇到一个关于Array操作的问题如下:
实现 [5,6,9] + 1 = [5,7,0];
当时回答的时候提出的一种方案是采用Array的reduceRight操作
| 
 | 
 | 
部分引用:https://pugjs.org/language/attributes.html
app.set(‘view engine’, ‘pug’);
属性修改
以前的Pug/Jade支持如下的表达式来获取数据
| 
 | 
 | 
新版本将不再支持上面表达式来获取数据,而是采用以下形式.
| 
 | 
 | 
如果你的版本支持ES2015(包括 Node.js/io.js 1.0.0 或者更高版本),还可以采取下面的形式
| 
 | 
 | 
| 
 | 
 | 
注意 : Attributes applied using &attributes are not automatically escaped. You must be sure to sanitize any user inputs to avoid cross-site scripting (XSS). This is done for you if you are passing in attributes from a mixin call.
在使用jade模板引擎开发时,引入bootstrap发现样式,无法正常显示
| 
 | 
 | 
修改为
| 
 | 
 | 
就可以正常显示了.具体原因可能跟jade版本或者express版本有关
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
下载安装完成后,需要新建数据存储目录
我的目录为 C:\DATA\DB
调用cmd命令,设置db目录
mongod.exe –dbpath C:\DATA\DB
如果执行成功,会出现一长串这么多东西,不用管它.
2016-11-09T11:23:47.798+0800 I CONTROL [initandlisten] MongoDB starting : pid=1384 port=27017 dbpat
h=C:\DATA\DB 64-bit host=cuining-PC
2016-11-09T11:23:47.798+0800 I CONTROL [initandlisten] targetMinOS: Windows 7/Windows Server 2008 R
2
2016-11-09T11:23:47.798+0800 I CONTROL [initandlisten] db version v3.4.0-rc2-85-g4b42373
2016-11-09T11:23:47.799+0800 I CONTROL [initandlisten] git version: 4b423738f24c1ccd628e1fcc2b9ee5f
d84bbfe4c
2016-11-09T11:23:47.799+0800 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.1t-fips 3 May
2016
2016-11-09T11:23:47.799+0800 I CONTROL [initandlisten] allocator: tcmalloc
2016-11-09T11:23:47.799+0800 I CONTROL [initandlisten] modules: none
2016-11-09T11:23:47.799+0800 I CONTROL [initandlisten] build environment:
2016-11-09T11:23:47.799+0800 I CONTROL [initandlisten] distmod: 2008plus-ssl
2016-11-09T11:23:47.799+0800 I CONTROL [initandlisten] distarch: x86_64
2016-11-09T11:23:47.799+0800 I CONTROL [initandlisten] target_arch: x86_64
2016-11-09T11:23:47.799+0800 I CONTROL [initandlisten] options: { storage: { dbPath: “C:\DATA\DB” }
}
2016-11-09T11:23:47.802+0800 I STORAGE [initandlisten] wiredtiger_open
下面将MongoDB服务器作为Windows服务运行
C:\Program Files\MongoDB\Server\3.4\bin>mongod.exe –logpath “C:\DATA\dbConf\mongodb.log” –logappen
d –dbpath “C:\DATA\DB” –port 27017 –serviceName “MongoDBService” –serviceDisplayName “芒果数据服
务” –install
| 参数 | 描述 | 
|---|---|
| –bind_ip | 绑定服务IP,若绑定127.0.0.1,则只能本机访问,不指定默认本地所有IP | 
| –logpath | 定MongoDB日志文件,注意是指定文件不是目录 | 
| –logappend | 使用追加的方式写日志 | 
| –port | 指定服务端口号,默认端口27017 | 
| –serviceName | 指定服务名称 | 
| –serviceDisplayName | 指定服务名称,有多个mongodb服务时执行。 | 
| –install | 指定作为一个Windows服务安装。 | 
如果直接运行mongo,则会报以下错误
Mongo运行错误:Failed to connect 127.0.0.1:27017,reason:errno:10061
Mongo运行错误:Failed to connect 127.0.0.1:27017,reason:errno:10061由于目标计算机积极拒绝,无法连接
这是因为服务器没有开启,
net start MongoDBService 启动mongodb服务
net stop MongoDBService 关闭mongodb服务
通过前面几步,我们基本实现了一个模块化编程,现在要为程序实现AMD的接口(define方法)
AMD的规范只定义了一个函数 “define”,它是全局变量。函数的描述为:
define(id?, dependencies?, factory);
具体请参考 –> Amd规范
实现AMD的类库两个比较著名的分别是RequireJS 和 CurlJS
说实话如果直接看这两个类库的源码,可能多少有点难,甚至懵逼,建议初学者可以参考别的实现:foio.github.io
我们把每一个模块改为一个js文件,然后实现我们的AMD模块加载器
add.js
minus.js
calc.js
main.js
通过分析,可以整个过程看做是一个”栈”操作.
- 1.define() 操作定义一个Module,立即压入”栈”(这里push到数组中);
- 2.加载该模块的deps(依赖数组)
- 3.出”栈”执行模块的工厂函数,获取返回值
define 函数
| 
 | 
 | 
exec函数(执行context.waitingModules中的模块,如果已经准备好,则从数组中剔除)
| 
 | 
 | 
require函数其实也是一个define函数的过程,为了便于理解,暂时不处理
| 
 | 
 | 
具体实现可以参考我的github或者foio.github.io实现.
通过上面的代码,我们对模块化有了一定的了解,下面从面向对象思想出发,对模块进行分析.
| 
 | 
 | 
我们通过上面的代码可以分析抽象建立我们的Module
| 
 | 
 | 
代码修改如下:
| 
 | 
 | 
需要为我们的Module对象添加两个方法: fireFactory(执行factory函数,赋值给returnVal)和getDepsValues(获取依赖模块的返回值)
| 
 | 
 | 
通常,在js中模块应该是IIFE-立即执行调用函数表达式(Immediately-Invoked-Function-Expressions)运行私有域–即防止变量和方法污染全局变量和方法.格式如下
| 
 | 
 | 
下面我们利用模块化设计一个小的测试程序,流程如下:
主要模块( mainModule ) –> 计算模块( calcModule ) –> [增加模块( addModule ),减少模块(minusModule)]
| 
 | 
 | 
main.js代码
| 
 | 
 |