自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(86)
  • 收藏
  • 关注

转载 白话debounce和throttle

遇到的问题在开发过程中会遇到频率很高的事件或者连续的事件,如果不进行性能的优化,就可能会出现页面卡顿的现象,比如:鼠标事件:mousemove(拖曳)/mouseover(划过)/mouseWheel(滚屏)键盘事件:keypress(基于ajax的用户名唯一性校验)/keyup(文本输入检验、自动完成)/keydown(游戏中的射击)window的resize/scroll事...

2016-09-21 21:11:00 275

转载 JavaScript实现简单的双向绑定

很多的前端框架都支持数据双向绑定了,最近正好在看双向绑定的实现,就用Javascript写了几个简单的例子。几个例子中尝试使用了下面的方式实现双向绑定:发布/订阅模式属性劫持脏数据检测发布/订阅模式实现数据双向绑定最直接的方式就是使用PubSub模式:当model发生改变的时候,触发Model change事件,然后通过响应的事件处理函数更新界面当界面更新的时候,触...

2016-08-26 22:01:00 232

转载 通过三张图了解Redux中的重要概念

上周利用业余的时间看了看Redux,刚开始有点不适应,一下在有了Action、Reducer、Store和Middleware这么多新的概念。经过一些了解之后,发现Redux的单向数据里的模式还是比较容易理解的,结合着Redux的单向数据流模型,很多概念就比较清晰了。下面就按照自己的理解整理出了Redux中相关的内容,如果你也刚开始学习Redux,希望能给你一个直观的认识。...

2016-04-18 10:46:00 251

转载 Angular+Flask搭建一个记录工具

平时用的最多的文本编辑器就是Notepad++,很多东西都是通过Notepad++直接记录的:没有看完的网页链接要整理、收藏的网页读书笔记要处理的事情待看/看过的文档和电子书等等。。。随着内容越来越多,就不方便管理和查看了。于是决定自己实现一个简单的记录工具来管理这些信息,工具就叫Remember。关于Remember自己平时工作主要用Py...

2016-02-17 22:09:00 317

转载 常用的JavaScript模式

模式是解决或者避免一些问题的方案。在JavaScript中,会用到一些常用的编码模式。下面就列出了一些常用的JavaScript编码模式,有的模式是为了解决特定的问题,有的则是帮助我们避免一些JavaScript中容易出现的错误。单一var模式所谓“单一var模式”(Single var pattern)就是指在函数顶部,只使用一个var进行变量声明的模式。例如:function...

2016-02-15 18:37:00 112

转载 记录遇到的Python陷阱和注意点

最近使用Python的过程中遇到了一些坑,例如用datetime.datetime.now()这个可变对象作为函数的默认参数,模块循环依赖等等。在此记录一下,方便以后查询和补充。避免可变对象作为默认参数在使用函数的过程中,经常会涉及默认参数。在Python中,当使用可变对象作为默认参数的时候,就可能产生非预期的结果。下面看一个例子:def append_item(a = 1, ...

2016-02-02 22:33:00 161

转载 关于JavaScript继承的那些事

在JavaScript中,对象的创建可以脱离类型(class free),通过字面量的方式可以很方便的创建出自定义对象。另外,JavaScript中拥有原型这个强大的概念,当对象进行属性查找的时候,如果对象本身内找不到对应的属性,就会去搜索原型链。所以,结合原型和原型链的这个特性,JavaScript就可以用来实现对象之间的继承了。下面就介绍一下JavaScript中的一些常用的...

2015-11-16 10:13:00 103

转载 JavaScript中的函数表达式

在JavaScript中,函数是个非常重要的对象,函数通常有三种表现形式:函数声明,函数表达式和函数构造器创建的函数。本文中主要看看函数表达式及其相关的知识点。函数表达式首先,看看函数表达式的表现形式,函数表达式(Function Expression, FE)有下面四个特点:在代码中须出现在表达式的位置有可选的函数名称不会影响变量对象(VO)在代码执行阶...

2015-11-09 22:16:00 122

转载 彻底理解JavaScript原型

原型是JavaScript中一个比较难理解的概念,原型相关的属性也比较多,对象有"[[prototype]]"属性,函数对象有"prototype"属性,原型对象有"constructor"属性。为了弄清原型,以及原型相关的这些属性关系,就有了这篇文章。相信通过这篇文章一定能够清楚的认识到原型,现在就开始原型之旅吧。认识原型开始原型的介绍之前,首先来认识一下什么是原型?...

2015-11-02 09:51:00 503

转载 动手学习TCP:总结和索引

TCP是一个十分复杂的协议,通过前面几篇文章只涉及了TCP协议中一些基本的概念。虽然说都是一些TCP最基本的概念,但是试验过程中一直在踩坑,例如:TCP flag设置错误,seq、ack号没有计算正确,TCP状态变迁错误等等。通过Pcap.Net真正实验一下才发现了很多TCP协议中要注意的细节,例如:Ack、Seq号的计算,EthernetLayer、IpV4Layer 、Tcp...

2015-10-30 20:43:00 187

转载 JavaScript中的this

前面两篇文章介绍了JavaScript执行上下文中两个重要属性:VO/AO和scope chain。本文就来看看执行上下文中的this。首先看看下面两个对this的概括:this是执行上下文(Execution Context)的一个重要属性,是一个与执行上下文相关的特殊对象。因此,它可以叫作上下文对象(也就是用来指明执行上下文是在哪个上下文中被触发的对象)。this不是...

2015-10-28 09:41:00 129

转载 理解JavaScript的作用域链

上一篇文章中介绍了Execution Context中的三个重要部分:VO/AO,scope chain和this,并详细的介绍了VO/AO在JavaScript代码执行中的表现。本文就看看Execution Context中的scope chain。作用域开始介绍作用域链之前,先看看JavaScript中的作用域(scope)。在很多语言中(C++,C#,Java),作用域...

2015-10-27 09:58:00 238

转载 JavaScript的执行上下文

在JavaScript的运行过程中,经常会遇到一些"奇怪"的行为,不理解为什么JavaScript会这么工作。这时候可能就需要了解一下JavaScript执行过程中的相关内容了。执行上下文在JavaScript中有三种代码运行环境:Global CodeJavaScript代码开始运行的默认环境Function Code代码进入一个...

2015-10-26 08:32:00 142

转载 动手学习TCP:4种定时器

上一篇中介绍了TCP数据传输中涉及的一些基本知识点。本文让我们看看TCP中的4种定时器。TCP定时器对于每个TCP连接,TCP管理4个不同的定时器,下面看看对4种定时器的简单介绍。重传定时器使用于当希望收到另一端的确认。该定时器是用来决定超时和重传的。由于网络环境的易变性,该定时器时间长度肯定不是固定值;该定时器时间长度的设置依据是RTT(Round Tr...

2015-10-12 20:37:00 179

转载 动手学习TCP:数据传输

前面的文章介绍了TCP状态变迁,以及TCP状态变迁图中的一些特殊状态。本文主要看看TCP数据传输过程中需要了解的一些重要点:MSS(Maximum Segment Size)Seq号和Ack号的计算TCP半连接TCP数据传输实验在开始介绍上面列出的内容之前,先看看实验程序的运行。本文的例子代码是基于"动手学习TCP:客户端状态变迁"文章中的例子。首...

2015-10-10 21:00:00 157

转载 动手学习TCP:TCP特殊状态

前面两篇文章介绍了TCP状态变迁,以及通过实验演示了客户端和服务端的正常状态变迁。下面就来看看TCP状态变迁过程中的几个特殊状态。SYN_RCVD在TCP连接建立的过程中,当服务端接收到[SYN]包后,就会发送[SYN, ACK]包,然后进入SYN_RCVD状态。根据前面文章的介绍,服务器的上述行为被称为被动打开,并且会等待来自客户的的[ACK]包来完成TCP连接的建...

2015-10-09 20:56:00 104

转载 动手学习TCP:服务端状态变迁

上一篇文章介绍了TCP状态机,并且通过实验了解了TCP客户端正常的状态变迁过程。那么,本篇文章就一起看看TCP服务端的正常状态变迁过程服务端状态变迁根据上一篇文章中的TCP状态变迁图,可以得到服务器的正常状态变迁流程如下:CLOSED -> LISTEN -> SYN_RECV -> ESTABLISHED -> CLOSE_WAIT -> ...

2015-10-08 13:01:00 127

转载 动手学习TCP:客户端状态变迁

上一篇文章中介绍了TCP连接的建立和终止。通过实际操作了解到,在TCP协议工作过程中,客户端和服务端都会接收或者发送特定标志的TCP数据包,然后进入不同的状态。也就是说,TCP协议就是一个包含多种状态转换的状态机,下面介绍一下TCP状态机。TCP状态机网络上的传输是没有连接的,包括TCP也是一样的。TCP所谓的"连接",其实是在通讯的双方维护一个"连接状态",让它看上去好...

2015-10-03 14:46:00 171

转载 动手学习TCP:TCP连接建立与终止

TCP是一个面向连接的协议,任何一方在发送数据之前,都必须先在双方之间建立一条连接。所以,本文就主要看看TCP连接的建立和终止。在开始介绍TCP连接之前,先来看看TCP数据包的首部,首部里面有很多重要的字段,在我们实现程序的时候需要进行设置。TCP的首部在OSI七层模型中,上层的数据包都会作为下层数据包的数据部分(payload)。也就是说,当构造TCP数据包的时候,会把...

2015-09-30 09:46:00 133

转载 动手学习TCP: 环境搭建

前一段时间通过Wireshark抓包,定位了一个客户端和服务器之间数据传输的问题。最近就抽空看了看《TCP/IP详解 卷1》中关于TCP的部分,书中用了很多例子展示了TCP/IP协议中的一些基本概念。所以,也准备自己动手,通过一些简单的实验来进一步了解一下TCP中的一些基本概念。环境搭建和配置在开始进行实验之前,首先看看实验环境的搭建:Wireshark:用来抓取网络...

2015-09-29 18:22:00 271

转载 Web实时通信之Socket.IO

前面两篇文章使用了Ajax long polling和WebSocket两种常用的Web实时通信方式构建了简单的聊天程序。但是,由于浏览器的兼容问题,不是所有的环境都可以使用WebSocket这种比较好的方式。也就是说,根据浏览器或者环境的不同,客户端和服务端可能需要使用不同的通信方式。Socket.IO简介为了解决上面的问题,Socket.IO就出现了。Socket.I...

2015-09-17 13:06:00 186

转载 初试WebSocket构建聊天程序

上一篇文章中使用了Ajax long polling实现了一个简单的聊天程序,对于web实时通信,今天就来试用一下基于WebSocket的长连接方式。WebSocket简介为了增强web通信的功能,在HTML5中,提供了WebSocket,它不仅仅是一种web通信方式,也是一种应用层协议。WebSocket提供了客户端和服务端之间的双全工跨域通信,通过客户端和服务端之间建立W...

2015-09-08 20:07:00 100

转载 使用Ajax long polling实现简单的聊天程序

关于web实时通信,通常使用长轮询或这长连接方式进行实现。为了能够实际体会长轮询,通过Ajax长轮询实现了一个简单的聊天程序,在此作为笔记。长轮询传统的轮询方式是,客户端定时(一般使用setInterval)向服务器发送Ajax请求,服务器接到请求后马上返回响应信息。使用这种方式,无论客户端还是服务端都比较好实现,但是会有很多无用的请求(服务器没有有效数据的时候,也需要返回通...

2015-09-05 20:20:00 100

转载 Python之虚拟环境管理

Python本身有很多个版本,第三方的Python包又有很多可用的版本,所以经常会遇到下面的问题:运行不同的Python程序,需要使用不同版本的Python(2.x或3.x).在同一中Python版本中,可能需要用到不同版本的第三方包,例如:Django 1.6或者Django 1.7对于上面的问题,已经有很多现成的个工具可以解决。根据解决上面问题的方法,这些工具大概...

2015-08-31 21:59:00 88

转载 Python之包管理工具

在Python环境中已经有很多成熟的包,可以通过安装这些包来扩展我们的程序。例如,很多时候Python开发人员都会去PyPI网站去查找自己想要使用的包,然后进行安装。PyPI ( Python Package Index)是获得第三方 Python 软件包以补充标准库的一个站点。在安装Python包的过程中,经常涉及到distutils、setuptools、distribute...

2015-08-29 17:48:00 478

转载 WSGI简介

当我们实现一个Web应用(application)的时候,通常不会考虑如何接受HTTP请求、解析HTTP请求、发送HTTP响应等等,我们只关心处理逻辑,而不用去关心HTTP规范的细节。之所以有这层透明,是因为Web Server和Web Application之间有一套规范的接口,这套接口帮我们隐藏了很多HTTP相关的细节。这套接口规范就是WSGI(Web Server Gatewa...

2015-08-28 10:27:00 106

转载 Python中的元类

从前面"Python对象"文章中了解到,在Python中一切都是对象,类可以创建实例对象,但是类本身也是对象。class C(object): pass c = C()print c.__class__print C.__class__ 代码中,通过"__class__"属性来查看对象的类型,对于类C对象本身,它的类型是type。...

2015-08-02 15:35:00 68

转载 Python中的类(下)

本文将介绍一下类的构造函数和初始化函数,以及如何通过"魔术方法"定制一个类。类构造和初始化在前面的文章中,经常使用初始化函数"__init__",下面看看"__init__"和"__new__"的联系和差别。下面先通过一段代码看看这两个方法的调用顺序:class A(object): def __init__(self,*args, **kwargs):...

2015-07-30 21:52:00 87

转载 Python中的类(中)

上一篇介绍了Python中类相关的一些基本点,本文看看Python中类的继承和__slots__属性。继承在Python中,同时支持单继承与多继承,一般语法如下:class SubClassName(ParentClass1 [, ParentClass2, ...]): class_suite实现继承之后,子类将继承父类的属性,也可以使用内建函数ins...

2015-07-28 10:57:00 108

转载 Python中的类(上)

在Python中,可以通过class关键字定义自己的类,然后通过自定义的类对象类创建实例对象。例如,下面创建了一个Student的类,并且实现了这个类的初始化函数"__init__":class Student(object): count = 0 books = [] def __init__(self, name, age): ...

2015-07-26 12:02:00 110

转载 Python函数相关

Python中的函数也是一种对象,而且函数还是一等公民。函数能作为参数,也能作为返回值,这使得Python中的函数变得很灵活。想想前面两篇中介绍的通过内嵌函数实现的装饰器和闭包。下面就介绍一下Python函数相关的一写内容。可变长度参数在编程的过程中,可能会遇到函数参数个数不固定的情况,这时就需要使用可变长度的函数参数。在Python函数定义中,使用*和**符号分别指定元组(...

2015-07-21 12:54:00 78

转载 Python中的闭包

闭包(closure)是函数式编程的重要的语法结构,Python也支持这一特性,下面就开始介绍Python中的闭包。首先看看闭包的概念:闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,闭包是由函数和与其相关的引用环境组合而成的实体。在开始介绍闭包之...

2015-07-19 17:18:00 123

转载 Python装饰器

装饰模式有很多经典的使用场景,例如插入日志、性能测试、事务处理等等,有了装饰器,就可以提取大量函数中与本身功能无关的类似代码,从而达到代码重用的目的。下面就一步步看看Python中的装饰器。一个简单的需求现在有一个简单的函数"myfunc",想通过代码得到这个函数的大概执行时间。我们可以直接把计时逻辑方法"myfunc"内部,但是这样的话,如果要给另一个函数计时,就需要重复计...

2015-07-18 16:40:00 115

转载 Python迭代器和生成器

在Python中,很多对象都是可以通过for语句来直接遍历的,例如list、string、dict等等,这些对象都可以被称为可迭代对象。至于说哪些对象是可以被迭代访问的,就要了解一下迭代器相关的知识了。迭代器迭代器对象要求支持迭代器协议的对象,在Python中,支持迭代器协议就是实现对象的__iter__()和next()方法。其中__iter__()方法返回迭代器对象本身;ne...

2015-07-16 21:36:00 378

转载 图解Python深拷贝和浅拷贝

Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果。下面本文就通过简单的例子介绍一下这些概念之间的差别。对象赋值直接看一段代码:will = ["Will", 28, ["Python", "C#", "JavaScript"]]wilber = willprint id(will)print will...

2015-07-14 19:21:00 475

转载 Python格式化字符串

在编写程序的过程中,经常需要进行格式化输出,每次用每次查。干脆就在这里整理一下,以便索引。格式化操作符(%)"%"是Python风格的字符串格式化操作符,非常类似C语言里的printf()函数的字符串格式化(C语言中也是使用%)。下面整理了一下Python中字符串格式化符合:格式化符号说明%c转换成字符(AS...

2015-07-12 21:56:00 2609

转载 Python中的and/or

在Python中,可以通过and,or和not进行逻辑运算,下面就来看看and和or的简单介绍。逻辑与-and对于包含and运算的表达式,Python解释器将从左到右扫描,返回第一个为假的表达式值,无假值则返回最后一个表达式值。下面看一个使用and的例子:# if all the expressions are true, return the last expres...

2015-07-11 20:50:00 87

转载 Python上下文管理器

上下文管理器在使用Python编程中,可以会经常碰到这种情况:有一个特殊的语句块,在执行这个语句块之前需要先执行一些准备动作;当语句块执行完成后,需要继续执行一些收尾动作。例如:当需要操作文件或数据库的时候,首先需要获取文件句柄或者数据库连接对象,当执行完相应的操作后,需要执行释放文件句柄或者关闭数据库连接的动作。又如,当多线程程序需要访问临界资源的时候,线程首先需要获取互斥...

2015-07-11 17:38:00 70

转载 Python对象(下)

前面一篇文章介绍了一些Python对象的基本概念,这篇接着来看看Python对象相关的一些内容。Python对象的比较Python对象有三个要素:身份,类型和值,所以我们就分别从这三个角度出发看看对象之间的比较。对象身份比较对象身份的比较,其实就是比较对象的内存地址,即内建函数id()的结果比较。可以用来判断不同的变量是否指向了同一个地址。直接看例子:通过例子...

2015-07-09 22:15:00 103

转载 Python对象(上)

Python是一门面向对象的语言,在Python中一切都是对象,函数是对象,类型也是对象。下面就看看Python中对象相关的内容。Python对象基本概念Python对象有三个基本的要素:身份:对象的唯一性身份标志,是该对象的内存地址(可用内建函数id()获得)类型:对象的类型决定了该对象可以保存什么类型的值,可进行什么样的操作(可用内建函数type()获得)...

2015-07-07 22:48:00 61

空空如也

空空如也

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

TA关注的人

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