摘要: 1.改变 如果在年初的时候,你给自己定了哪些计划,现在是时候拿出来翻翻了,对着这些计划,一个一个去看下,看现在怎么样了,是达到了,还是没有达到。 如果你没有给自己定目标,那么请你闭上眼睛来想想,现在的你和1年前的你有什么不同,自己有没有改变。 看看身边的同事,看看他们有没有改变,是变胖了,还是变瘦了 阅读全文
posted @ 2016-12-27 16:21 yupeng 阅读(786) 评论(0) 推荐(1) 编辑
摘要: 2014年,为了方便第三方开发者能够调用本地的一些功能,我们提供了一套js-sdk。通过调用我们的接口,开发者可以定制UI,获取当前的手机状态,调用支付,黄页扫一扫功能,为用户提供更加优质的体验。下面来分几个主题总结下1.前期调研 我们给的定位就是web端需要调用本地的一些功能,简单的定制UI。开始... 阅读全文
posted @ 2015-03-05 15:16 yupeng 阅读(2520) 评论(1) 推荐(0) 编辑
摘要: 1.批量替换 sed -i 's/class="table"/class="table table-hover"/g' `grep 'class="table"' -rl *` 阅读全文
posted @ 2014-08-21 17:52 yupeng 阅读(433) 评论(0) 推荐(0) 编辑
摘要: 一、基本语法:location [=|~|~*|^~] /uri/ { … }二、分类: 1.基本location:以“=”或“^~”为前缀或者没有任何前缀的/uri/ 2.正则location:以“~”或“~*”为前缀的/uri/ 基本location 又分为2种: 1)严格精确匹配: “=” 2)最大前缀匹配: 无前缀或者以“^~”三、解释: 1)= 严格匹配。如果这个查询匹配,那么将停止搜索并立即处理此请求。 2)~ 为区分大小写匹配(可用正则表达式) 3)~* 为不区分大小写匹配(可用正则表达式) 4)!~和!~*分别为区分大小写不匹配及不区分大小写不匹配 5)^~ 如果... 阅读全文
posted @ 2013-12-26 18:26 yupeng 阅读(3726) 评论(1) 推荐(0) 编辑
摘要: 1.connect中间件csrf原理:在express框架中csrf 是通过connect 模块的中间件来解决的。其原理是在前端构造一个隐藏的表单域“_csrf” ,后端生成一个值,作为该表单域,然后在提交表单的时候,将这个值提交到后端,后端再根据这个值来比较,如果和之前的值相等的,就认为是正确的,否则就是错误的。 我们来看看代码:module.exports = function csrf(options) { options = options || {}; var value = options.value || defaultValue; return function(req,... 阅读全文
posted @ 2013-12-26 18:23 yupeng 阅读(5386) 评论(0) 推荐(0) 编辑
摘要: 本文是基于 kraken-js 0.6.1 版本的关于如何使用kraken-js 可以去看看官网的使用文档 点击这里。kraken-js 是基于express之上的,目的在于让工程师更多的去关注代码逻辑,少关注自身的开发环境,所以他将express所有的一些公用的配置都写在了配置文件里面了。暴露给开发者的很少。下面来看看kraken-js 源码,分析是如何创建nodejs应用程序的。如果对express 不太理解的,可以看看我之前博客写的express框架解密序列。按照kraken-js 官网上的步骤,我们创建了一个新项目,然后生成了代码是这个样子的:对这个结构说明下:/config ---应 阅读全文
posted @ 2013-12-20 16:47 yupeng 阅读(4660) 评论(0) 推荐(1) 编辑
摘要: 本文档是基于express 3.4.6 的在我们的代码中,渲染模板大致是这样写的exports.index = function(req, res){ res.render('index', { title: 'Express' });};这个req,res 函数其实是经过了中间件middleware.js 处理后的,我们在前面提到过。req,res的原型分别为app.request 和app.response req.__proto__ = app.request; res.__proto__ = app.response;而app.request 和app. 阅读全文
posted @ 2013-12-19 15:55 yupeng 阅读(8407) 评论(0) 推荐(2) 编辑
摘要: 本文档是基于express3.4.6express 的路由是自己去实现的,没有使用connect中的路由中间件模块。1、在如何创建一个app那篇中,我们提到了路由, //router //路由 this._router = new Router(this); this.routes = this._router.map; this.__defineGetter__('router', function(){ this._usedRouter = true; this._router.caseSensitive = this.enabled('case sensitive 阅读全文
posted @ 2013-12-19 15:18 yupeng 阅读(7836) 评论(0) 推荐(3) 编辑
摘要: 本文档是基于express 3.4.6 的在上篇中我们提到了中间件,这篇主要解释这个模块,middleware.js 为:var utils = require('./utils');/** * Initialization middleware, exposing the * request and response to eachother, as well * as defaulting the X-Powered-By header field. * * @param {Function} app * @return {Function} * @api private 阅读全文
posted @ 2013-12-19 10:51 yupeng 阅读(3349) 评论(0) 推荐(1) 编辑
摘要: 本文是基于express 3.4.6 的1.在我们的app.js 文件里面有这么几行 http.createServer(app).listen(app.get('port'), function(){ console.log('Express server listening on port ' + app.get('port'));});这个其实是调用http模块 的 createServer 函数创建一个服务,然后监听端口的。2. 我们再去看看express 的入口文件 /** * Module dependencies. */var co 阅读全文
posted @ 2013-12-19 10:42 yupeng 阅读(5222) 评论(0) 推荐(1) 编辑
摘要: 本文是基于express3.4.6的。1.express 代码结构为: bin/express 是在命令行下的生成express 框架目录文件用的lib/express 是框架的入口文件lib/router 是路由模块,主要是进行路由分发,比对,执行callbacklib/middleware 是中间件模块,主要是对response,request进行改写lib/request 是请求lib/response 是响应lib/utils 是工具集函数,是对connect模块的一个补充,比如地址处理正则lib/view 是处理视图2.express 框架调用关系图: 阅读全文
posted @ 2013-12-19 09:33 yupeng 阅读(5044) 评论(2) 推荐(1) 编辑
摘要: 1.什么是getter,什么是setter? getter 是一种获得属性值的方法,setter是一种设置属性值的方法。2.怎么定义? 有2种办法:在对象初始化的时候定义在对象定义后的时候定义3.例子: yupeng's document 结果:100 101200 201 阅读全文
posted @ 2013-12-18 13:43 yupeng 阅读(23457) 评论(5) 推荐(2) 编辑
摘要: 1.Object.create() 是什么? Object.create(proto [, propertiesObject ]) 是E5中提出的一种新的对象创建方式,第一个参数是要继承的原型,如果不是一个子函数,可以传一个null,第二个参数是对象的属性描述符,这个参数是可选的。 例如: function Car (desc) { this.desc = desc; this.color = "red";} Car.prototype = { getInfo: function() { return 'A ' + this.color + ' &# 阅读全文
posted @ 2013-12-17 11:12 yupeng 阅读(47702) 评论(2) 推荐(2) 编辑
摘要: 之前有过一个谈了很多关于PayPal移动到node.js的一个应用平台。作为设置我的免费用户界面的第1部分的延续,我很高兴地说,这些传言是真的,我们的Web应用程序正在从Java迁移到JavaScript和node.js中。从历史上看,我们工程团队的代码已经被分割成浏览器层(使用HTML , CSS和JavaScript )和应用层(使用Java ) 。试想一下,一个HTML的开发人员要求一个Java开发人员将“A”和“B”页面连接在一起,但是这就是我们。该模型通过引入全栈工程师,落后那些能够创造一个好的用户界面,然后生成应用程序去支持它。称他们为独角兽,但是这就是我们想要的,在PayPal中 阅读全文
posted @ 2013-12-15 10:52 yupeng 阅读(2964) 评论(3) 推荐(1) 编辑
摘要: 本帖子是记录一些javascript的一些文章:1. 理解node.js2.异步编程http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html 阅读全文
posted @ 2013-12-14 22:18 yupeng 阅读(586) 评论(0) 推荐(0) 编辑
摘要: 本文是在mac下配置nodejs 在nginx下的反向代理1.安装nodejs,之前就安装了。2.安装nginx ,我采用的直接源码安装3.进入/usr/local/nginx/conf 目录,在该目录下创建include 文件下,我的配置文件就写在这个文件夹里面4.进入/usr/local/nginx/conf/include 目录,创建nginx.node.conf 文件,在里面输入如下代码:upstream nodejs { server 127.0.0.1:3000; #server 127.0.0.1:3001; keepalive 64;}server { ... 阅读全文
posted @ 2013-12-13 11:36 yupeng 阅读(28415) 评论(1) 推荐(0) 编辑
摘要: 在网上看到一些帖子,吐糟,质疑nodejs 程序的稳定性,为什么呢?其一,可能这个和javascript有关吧,node是拿javascript去实现的,而javascript又被称为是“世界上误解最深的语言”,我们可以去看看nodejs 创始人的说法,可以去看看知乎的这篇文章,为什么node 用javascript去实现,其二,nodejs 毕竟还年轻,而且官网在部分模块也标注了此模块的目前的状态。 这2天我抽了点时间思考了下这个问题,我觉得我们程序首先功能应该是独立的,就是一个功能出异常了,不应该去影响另外一个正常的功能,不应该将整个程序都崩溃掉,其次,即使是程序崩溃了,我们也应该有... 阅读全文
posted @ 2013-12-13 11:18 yupeng 阅读(11664) 评论(0) 推荐(4) 编辑
摘要: 昨天研究了下如何用C++和node交互,在node的程序中,如果有大数据量的计算,处理起来比较慢,可以用C++来处理,然后通过回调(callback的形式),返回给node。首先,先来看看node 是如何和C++交互吧。前提:需要安装nodejs 环境,安装node-gyp 包。采用npm 方式安装,这个太方便了,修改本文件夹下面的package.json 依赖选项,然后执行npm install 就可以了。1.以hello world 为例来说明:1)建立一个文件夹hello,在这个文件夹里依次添加3个文件,hello.cc, binding.gyp,test.js (其中hello.c.. 阅读全文
posted @ 2013-12-11 15:12 yupeng 阅读(26782) 评论(5) 推荐(6) 编辑
该文被密码保护。 阅读全文
posted @ 2013-12-10 22:44 yupeng 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 1.避免使用同步代码:// Good: write files asynchronouslyfs.writeFile('message.txt', 'Hello Node', function (err) { console.log("It's saved and the server remains responsive!");}); // BAD: write files synchronouslyfs.writeFileSync('message.txt', 'Hello Node');conso 阅读全文
posted @ 2013-12-05 11:18 yupeng 阅读(964) 评论(0) 推荐(1) 编辑
摘要: 记录一下: [ H/M/L ]注意:这几个命令是大写的。使用H/M/L这三个键,可以让光标跳到当前窗口的顶部、中间、和底部,停留在第一个非空字符上。H命令和L命令前也可以加一个数字,但数字的含义不再是倍数,而是指距窗口顶部、底部的行数。例如,”3H“表示光标移动到距窗口顶部第3行的位置;”5L“表示光标移动到距窗口底部5行的位置。[ 相对于光标滚屏 ]在阅读代码时,有时我们需要根据光标所在的位置滚屏,把光标所在行移动窗口的顶端、中间或底部,这时就可以用到”zt“、”zz“和”zb“。这种滚屏方式相对于翻页来讲,它的好处在于,你能够始终以当前光标位置做为参照,不会出现翻几次页后,发现自己迷失了方 阅读全文
posted @ 2013-11-28 22:17 yupeng 阅读(622) 评论(0) 推荐(0) 编辑
摘要: 直接加入selector{-webkit-tap-highlight-color:rgba(0,0,0,0);}就可以去掉。 阅读全文
posted @ 2013-11-26 13:02 yupeng 阅读(488) 评论(0) 推荐(0) 编辑
摘要: 1.如何循环获得下标,使用enumerateints = ['a','b','c','d','e','f']for idx, val in enumerate(ints): print idx, val结果:0 a1 b2 c3 d4 e5 f------------------------------------------------------------------------------------------2.python 中的switch 替代语法,使用字典xdef test(par 阅读全文
posted @ 2013-11-20 23:03 yupeng 阅读(3654) 评论(2) 推荐(1) 编辑
摘要: 函数的partial应用 函数在执行时,要带上所有必要的参数进行调用。但是,有时参数可以在函数被调用之前提前获知。这种情况下,一个函数有一个或多个参数预先就能用上,以便函数能用更少的参数进行调用。例如:In [9]: from functools import partialIn [10]: def add(a,b): ....: return a+b ....: In [11]: add(4,3)Out[11]: 7In [12]: plus = partial(add,100)In [13]: plus(9)Out[13]: 109In [14]: plus2 = parti... 阅读全文
posted @ 2013-11-19 23:51 yupeng 阅读(29523) 评论(0) 推荐(4) 编辑
摘要: 1.列表推导式书写形式: [表达式for变量in列表] 或者 [表达式for变量in列表if条件]2.举例说明:#!/usr/bin/python# -*- coding: utf-8 -*-li = [1,2,3,4,5,6,7,8,9]print [x**2 for x in li]print [x**2 for x in li if x>5]print dict([(x,x*10) for x in li])print [ (x, y) for x in range(10) if x % 2 if x > 3 for y in range(10) if y > 7 if 阅读全文
posted @ 2013-11-17 23:24 yupeng 阅读(78313) 评论(2) 推荐(7) 编辑
摘要: 一、web服务器的实现 web服务器逻辑实现了HTTP协议和相关的TCP连接处理,管理着web资源,并负责提供Web服务器的管理功能。web服务器逻辑和操作系统共同负责管理TCP连接。底层操作系统负责管理底层计算机系统的硬件细节,并提供TCP/IP网络支持,负责装载web资源的文件系统以及控制当前计算活动的进程管理功能。二、web服务器是如何处理HTTP事务的 1.建立连接- 接受一个客户端的连接 2.接受请求- 从网络中读取一条http请求报文 3.处理请求- 对报文进行解释,并采取行动 4.访问资源- 访问报文指定的资源 5.构造响应- 创建带有正确首部的http响应报文 6... 阅读全文
posted @ 2013-11-12 13:00 yupeng 阅读(534) 评论(0) 推荐(0) 编辑
摘要: 一、http是如何使用tcp连接的? http连接本质就是tcp连接和一些使用连接的规则。所有的http通讯都是由tcp/ip来承载的。tcp/ip是全球计算机及网络设备都在使用的一种常用的分组交换的网络分层协议集。客户端程序打开一条tcp/ip连接。连接到可能运行在世界任何地方的服务器应用程序。 1.tcp流是分段的,由ip分组传送 网络协议栈 http要传送一条报文的时候,会以流的形式将报文数据的内容通过一条打开的TCP连接按照顺序传输。TCP收到数据流后,会将数据流分成被称之为段的小数据块,并将段封装在ip分组中,通过因特网进行传输,见下图。这些工作都是TCP/IP软件来处理... 阅读全文
posted @ 2013-11-12 10:45 yupeng 阅读(1419) 评论(1) 推荐(1) 编辑
摘要: 在上面的文章中,我写了python中的一些特性,主要是简单为主,主要是因为一些其他复杂的东西可以通过简单的知识演变而来,比如装饰器还可以带参数,可以使用装饰类,在类中不同的方法中调用,不想写的太复杂,接下来,我打算写一下python 与数据结构,以下是提纲:一、python数据结构之单链表的实现二、python数据结构之双链表的实现三、python数据结构之栈、队列的实现四、python数据结构之二叉树的实现五、python数据结构之二叉树遍历的实现六、python数据结构之图的实现七、python数据结构之图深度优先和广度优先八、python排序算法的实现-冒泡九、python排序算法的实现 阅读全文
posted @ 2013-11-11 23:27 yupeng 阅读(2106) 评论(0) 推荐(4) 编辑
摘要: 1.http协议在网络中的位置: http协议位于TCP协议的上层,http试用tcp来传输其报文数据,tcp在ip的上层。2.浏览器发起连接的过程上述图的过程是:浏览器从url中解析出服务区的主机名将服务器的主机名转换成服务器的ip浏览器将端口号从URL中解析出来浏览器建立tcp的连接浏览器向服务器发动一条http的请求报文服务器向浏览器回送一条http的响应报文关闭连接,浏览器显示文档3. web组件,几个概念( 代理,缓存,隧道,Agent代理) 1.代理:位于客户端和服务器之间的http中间实体 2.缓存:是一种特殊的http代理服务器,可以将经过代理的常用文档复制保存起来。下一... 阅读全文
posted @ 2013-11-11 23:26 yupeng 阅读(613) 评论(0) 推荐(0) 编辑
摘要: 1.算法:(设查找的数组期间为array[low, high])(1)确定该期间的中间位置K(2)将查找的值T与array[k]比较。若相等,查找成功返回此位置;否则确定新的查找区域,继续二分查找。区域确定如下:a.array[k]>T 由数组的有序性可知array[k,k+1,……,high]>T;故新的区间为array[low,……,K-1]b.array[k] t: height = mid - 1 else: return array[mid] return -1if __name__ == "__main__": ... 阅读全文
posted @ 2013-11-11 18:05 yupeng 阅读(31947) 评论(8) 推荐(0) 编辑
摘要: 1、 算法描述:1.先从数列中取出一个数作为基准数。2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。3.再对左右区间重复第二步,直到各区间只有一个数。2、python代码#!/usr/bin/python# -*- coding: utf-8 -*-def sub_sort(array,low,high): key = array[low] while low = key: high -= 1 while low < high and array[high] < key: array[low] ... 阅读全文
posted @ 2013-11-11 17:41 yupeng 阅读(25156) 评论(3) 推荐(3) 编辑
摘要: 1.osi 7层网络模型2.socket 套接字编程PS:一个从事web开发的人来说,我们是使用http协议来和服务器来进行交互。后面会详细的分析这个过程。 阅读全文
posted @ 2013-11-09 15:48 yupeng 阅读(982) 评论(0) 推荐(0) 编辑
摘要: 1.算法: 设有一组关键字{ K 1 , K 2 ,…, K n };排序开始就认为 K 1 是一个有序序列;让 K 2 插入上述表长为 1 的有序序列,使之成为一个表长为 2 的有序序列;然后让 K 3 插入上述表长为 2 的有序序列,使之成为一个表长为 3 的有序序列;依次类推,最后让 K n 插入上述表长为 n-1 的有序序列,得一个表长为 n 的有序序列。2.python代码def insertion_sort(list2): for i in range(1, len(list2)): save = list2[i] j = i wh... 阅读全文
posted @ 2013-11-08 22:12 yupeng 阅读(1260) 评论(0) 推荐(0) 编辑
摘要: 1.算法:对于一组关键字{K1,K2,…,Kn}, 首先从K1,K2,…,Kn中选择最小值,假如它是 Kz,则将Kz与 K1对换;然后从K2,K3,… ,Kn中选择最小值 Kz,再将Kz与K2对换。如此进行选择和调换n-2趟,第(n-1)趟,从Kn-1、Kn中选择最小值 Kz将Kz与Kn-1对换,最后剩下的就是该序列中的最大值,一个由小到大的有序序列就这样形成。2.python 代码:def selection_sort(list2): for i in range(0, len (list2)): min = i for j in range(i + 1, ... 阅读全文
posted @ 2013-11-08 19:35 yupeng 阅读(2324) 评论(0) 推荐(1) 编辑
摘要: 1.算法描述:(1)共循环 n-1 次(2)每次循环中,如果 前面的数大于后面的数,就交换(3)设置一个标签,如果上次没有交换,就说明这个是已经好了的。2.代码#!/usr/bin/python# -*- coding: utf-8 -*-def bubble(l): flag = True for i in range(len(l)-1, 0, -1): if flag: flag = False for j in range(i): if l[j] > l[j + 1]: ... 阅读全文
posted @ 2013-11-08 18:28 yupeng 阅读(1781) 评论(0) 推荐(0) 编辑
摘要: 首先有一个概念:回溯 回溯法(探索与回溯法)是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。深度优先算法:(1)访问初始顶点v并标记顶点v已访问。(2)查找顶点v的第一个邻接顶点w。(3)若顶点v的邻接顶点w存在,则继续执行;否则回溯到v,再找v的另外一个未访问过的邻接点。(4)若顶点w尚未被访问,则访问顶点w并标记顶点w为已访问。(5)继续查找顶点w的下一个邻接顶点wi,如果v取值wi转到步骤(3)。直到连通图中所有顶点全部访问过为止。广. 阅读全文
posted @ 2013-11-08 17:40 yupeng 阅读(29179) 评论(1) 推荐(2) 编辑
摘要: python数据结构之图的实现,官方有一篇文章介绍,http://www.python.org/doc/essays/graphs.html下面简要的介绍下:比如有这么一张图: A -> B A -> C B -> C B -> D C -> D D -> C E -> F F -> C可以用字典和列表来构建 graph = {'A': ['B', 'C'], 'B': ['C', 'D'], 'C': ['D'], & 阅读全文
posted @ 2013-11-08 16:40 yupeng 阅读(18850) 评论(0) 推荐(1) 编辑
摘要: 本篇是实现二叉树的三种遍历,先序遍历,中序遍历,后序遍历#!/usr/bin/python# -*- coding: utf-8 -*-class TreeNode(object): def __init__(self,data=0,left=0,right=0): self.data = data self.left = left self.right = rightclass BTree(object): def __init__(self,root=0): self.root = root def is_empty... 阅读全文
posted @ 2013-11-08 16:01 yupeng 阅读(6581) 评论(1) 推荐(1) 编辑
摘要: 树的定义 树是一种重要的非线性数据结构,直观地看,它是数据元素(在树中称为结点)按分支关系组织起来的结构,很象自然界中的树那样。树结构在客观世界中广泛存在,如人类社会的族谱和各种社会组织机构都可用树形象表示。树在计算机领域中也得到广泛应用,如在编译源程序时,可用树表示源程序的语法结构。又如在数据库系统中,树型结构也是信息的重要组织形式之一。一切具有层次关系的问题都可用树来描述。 树结构的特点是:它的每一个结点都可以有不止一个直接后继,除根结点外的所有结点都有且只有一个直接前驱。 树的递归定义如下:(1)至少有一个结点(称为根)(2)其它是互不相交的子树二叉树: 二叉树是由n(n≥0)... 阅读全文
posted @ 2013-11-08 15:45 yupeng 阅读(10422) 评论(0) 推荐(0) 编辑
摘要: 这个在官网中list支持,有实现。补充一下栈,队列的特性:1.栈(stacks)是一种只能通过访问其一端来实现数据存储与检索的线性数据结构,具有后进先出(last in first out,LIFO)的特征2.队列(queue)是一种具有先进先出特征的线性数据结构,元素的增加只能在一端进行,元素的删除只能在另一端进行。能够增加元素的队列一端称为队尾,可以删除元素的队列一端则称为队首。地址在http://docs.python.org/2/tutorial/datastructures.html#more-on-lists ,下面的官方的代码。关于栈>>> stack = [3 阅读全文
posted @ 2013-11-08 10:55 yupeng 阅读(57122) 评论(1) 推荐(2) 编辑