javascript实现简单的链式调用
用过jQuery的朋友一定对jQuery中方法的链式调用印象深刻,貌似现在很多库都支持了方法的链式调用,比如YUI3等。链式调用是一个非常不错的语法特性,能让代码更加简洁、易读。很多时候链式调用可以避免多次重复使用一个对象变量。今天有人在群里说起javascript链式调用,写了几个简单的实现方式共大家参考一下。
精选技术长文、实践记录与系统化阅读
低噪声、高可扫读;标题、摘要、来源、标签一目了然。
采集自各技术站点的近期文章。
用过jQuery的朋友一定对jQuery中方法的链式调用印象深刻,貌似现在很多库都支持了方法的链式调用,比如YUI3等。链式调用是一个非常不错的语法特性,能让代码更加简洁、易读。很多时候链式调用可以避免多次重复使用一个对象变量。今天有人在群里说起javascript链式调用,写了几个简单的实现方式共大家参考一下。
Redis 是一个性能非常高效的内存 Key-Value 存储服务, 同时它还具有两个非常重要的特性: 1. 持久化; 2. Value 数据结构. 这两个特性让它在不少场景轻松击败了 Memcached 和 Casandra 等. Redis 的持久化在两种方式: Snapshotting(快照) 和 Append-only file(aof). 在一个采用了 aof 模式的 Redis 服务器上, 当执行 bgrewriteaof 对 aof 进行归并优化时, 出现了 Redis 被阻塞的问题, 此时, Redis 无法提供任何读取和写入操作. 按字面理解, bgrewriteaof 是在后台进行操作, 不应该影响 Redis 的正常服务. 原理也确实是这样的, Redis 首先 fork 一个子进程, 并在该子进程里进行归并和写持久化存储设备(如硬盘)的.
提升文本可读性的关键之一,就是让每行文本承载合适的字数。这不仅仅是设计一下文本宽度的问题,它也应该是一个易读性的问题。 文本最佳长度是每行承载50-60字符,包括空格(“Typographie”, E. Ruder)。也有其他资料建议不超过75字/行也可以接受。但你一定会问,不按这样的标准做又会怎样? 太长-如果一行里文字太多,用户眼球很难长时间聚焦文本。因为文本长度过长会让人很难注意到段落的起点和终点。此外,对于这么大块文本来说,也很难对当前行进行继续阅读。
我相信所有设计师都是注重细节的!即使有时迫于种种原因,无法达到像期望般完美,但心中一定有份纠结的坚持。 最近的项目中,给选择器设计备选列表,发现了一个“由细节引发的细节问题”。下图是示例。很简单,在一个固定区域内做多选,当有很多备选时,滚动显示更多内容。(原本意图) 但实现出来之后,发现一个问题:滚动条被隐藏掉了。只有当在备选内容区滚动鼠标时,滚动条才会显示出来。这会影响到用户对这个功能区块的认知,根本察觉不到还有更多内容。(出乎预料) 经过调试发现仍无法控制滚动条的始终显示,只好修改了设计。拉长区域高度,让下面的内容露出一部分来。用不完整来暗示还有更多内容。当区域有滑动时,滚动条自己就出来了
在StackOverflow上有这么一个问题,有位同学在http://css-tricks.com/examples/ShapesOfCSS/ 找到一些使用CSS做的形状,其中一位同学对下面的这个形状充满了疑问,这位同学就提问啦,为啥这么这么几句就能画出一个三角形呢? 于是呢,有高人出现,这个高人图文并茂的解释了这个三角的成因 首先呢,我们需要了解HTML标记的Box Model(盒模型),这个例子中呢我们将content,padding都看作content。忽略掉margin。那么一个盒模型就是下图 中间是内容,然后是4条边。每一条边都有宽度。 根据上面CSS的定义,没有border-top(顶边)的情形下 ,我们的图形如下: width设置为0后 ,内容没有了就成为下图: height也设置为0,只有底边了。
write ssize_t write(int fd, const void *buf, size_t count); 将数据写到文件中. 注意, 如果文件是保存在硬盘中, write() 函数调用返回之后, 并不表示数据已经写入到硬盘中, 这时如果掉电, 数据可能会丢失. fsync int fsync(int fd); 程序调用本函数, 通知内核把数据写到硬盘(file)中. 比如, 你开发一个数据库软件, 就需要这样的函数, 否则掉电或者系统崩溃时便会丢失数据. 如果你的程序不调用 fsync(), Linux 内核也会自动在”合适”的时候将你的数据真正写入到硬盘(类似调用 fsync), 最长的延时默认是 30 秒. 阻塞阻塞是 IO 的精华所在, 不管是文件 IO 还是网络 IO, 只有真正了理解了 IO 阻塞, 才能做出所谓在高并发高性能软件(服务器)
1.1 Purpose (产品愿景) 必须对产品要解决的问题有深刻的了解,阐明即将开发的产品如何满足该需求。 产品经理应该非常清晰、准确地定义产品是什么,解决什么,意在成为什么,并与产品相关的各个角色(老板、设计师、开发、用户)交流此愿景。 1.2 Objective (产品目标) 将前述定义的产品愿景,分解为具体要实现的体验目标,并厘清每个细分目标的验收标准,如: 1.2.1 流畅无刷新的体验 1.2.2 设计简单、易用、有趣 1.2.3 高度关注用户隐私 1.3 User (用户角色) 1.3.1 角色 定义好产品要解决的需求之后,产品经理将和设计师开始密切合作,开展访谈,广泛地接触、观察、了解用户,将其分为几种类型,确定核心的目标用户,丰富该用户角色,包括但不限于年龄、性别、计算机水平、性格特点等。 1.3.
Java世界里有findbugs这样的神器,可以让你避免很多“简单愚蠢”的bug。同样,Clojure世界里也有相应的替代品,这就是今天要介绍的kibit。不过kibit现在还比较年轻,判断的规则较少,但是已经可以使用起来做clojure代码的静态检查。
目前稳定版本的HBase0.90.2只能基于Hadoop0.20.x系列版本,暂不支持最新的0.21.x。而且官方版本的Hadoop0.20.2(或者0.203.0)缺少一个重要的特性,HDFS不支持sync模式的持久,这样HBase就有较大的丢失数据的风险。要在生产环境使用HBase,有两个选择,一是使用Cloudera的CDH3版本,Cloudera就类似MySQL的Percona,对官方版本的Hadoop做了很多改进工作,而且经典的《Hadoop:The Definitive Guide》一书的作者Tom White就是Cloudera的一员,这也和《High performance MySQL》一书的作者主要来是Percona一样。另外一种选择,就是自行编译Hadoop branch-0.20-append源码分支,这里有详细的说明。
TCP协议 memcached 的客户端使用TCP连接与服务器通讯。一个运行中的memcached服务器监视一些端口。客户端连接这些端口,发送命令到服务器,读取回应,最后关闭连接。 结束会话不需要发送任何命令。当不再需memcached服务时,要客户端可以在任何时候关闭连接。需要注意的是,鼓励客户端缓存这些连接,而不是每次需要存取数据时都重新打开连接。这是因为memcached 被特意设计成及时开启很多连接也能够高效的工作。缓存这些连接,可以消除建立连接所带来的开销。 在memcache协议中发送的数据分两种:文本行和自由数据。 文本行被用于来自客户端的命令和服务器的回应。自由数据用于客户端从服务器端存取数据时。同样服务器会以字节流的方式传回自由数据。服务器不用关心自由数据的字节顺序。
设计模式中的状态模式 这是标准的状态模式.其中Context管理所有状态,而每个状态都是自己的类,而状态的流转逻辑由状态自己执行. 然后完整的状态模式实现太过”重”,而且状态流转的描述在代码上也不会是一目了然.所以我对状态模式进行了简化和优化.使其很”轻”,易于使用和实现,而且对于状态流转在代码上也能一目了然.所有的流转逻辑都能在一屏上显示出来.
[导读] 很多同学在使用puppet 的过程中都有遇过程Lock file /var/lib/puppet/state/puppetdlock 这种情况,在QQ群里问过很多次了.都快成为每月必问题了.其实这种问题,很好解决的.为什么会出这种问题,
【导读】 针对四种数据类型:布尔类型BOOL或称布尔类型BOOLEAN、微整型TINYTINT、枚举类型ENUM、集合类型SET,我们已经分多篇文章篇幅给出详细的介绍与功能测试数据,接下来我们深入介绍枚举类型EUNM和集合类型SET。测试基于InnoDB存储引擎上,对MySQL数据库集合类型SET的字段进行DDL变更操作,是否需要重新创建表呢?对数据库的事务处理有何影响?对数据库的数据服务提供有何性能影响?
[导读] sky在工作中,遇到这样的一个问题,公司有些C++服务器需要在配置文件里填写下数据库相关的信息. 每次部署的时候,填写觉得挺麻烦,又浪费时间,另外还容易出错.本打算是让DBA 把相关信息写进数据
首先我们来了解一下hashcode,什么是hashcode?有什么作用? hashcode其实就是散列码,使用hashcode使用高效率的哈希算法来定位查找对象! 我们在使用容器来存储数据的时候会计算一串散列码,然后将数据放入容器。 如:String s =“java”,那么计算机会先计算散列码,然后放入相应的数组中,数组的索引就是从散列吗计算来的,然后再装入数组里的容器里,如List.这就相当于把你要存的数据分成了几个大的部分,然后每个部分存了很多值, 你查询的时候先查大的部分,再在大的部分里面查小的,这样就比先行查询要快很多! 一个对象的HashCode就是一个简单的Hash算法的实现,虽然它和那些真正的复杂的!Hash算法相比还不能叫真正的算法,但如何实现它,不仅仅是程序员的编程水平问题, 而是关系到你的对象在存取时性能的非常重要的问题.有可能,不同HashCode可能 会使你
之前一直想学一下Python却迟迟未曾下手,直到过年前几天好不容易闲下来,突然有个想法想把Twitter上发的tweets备份成PDF,我这个人一有了什么想法就会立马动手去做,于是正好借这个机会学下Python,没有太多时间,用Python比用C会节省很多开发时间,于是折腾了几天就有了这样一个小工具,Tweets2PDF,趁着还没把看过的东西忘光就先记录下写开发过程。 Twitter使用OAuth认证,其实之前对OAuth的原理也不是很了解,正好也借这个机会简单看了一下它的原理。 首先,程序需要向Twitter官网申请一个consumer token,每个客户端需要持有这个token,OAuth开始的时候向Twitter的Request Token URL发送请求来获取一个Request Token,当然HTTP请求中需要加上一些参数,这些参数中包含了Consumer Token相关的
在向外发送数据包的时候,首先需要查询路由表来确定路由包的路由,主要由ip_route_output_key()函数来完成,该函数又调用了ip_route_output_flow(),而这个函数最终又调用了__ip_route_output_key()这个函数来进行路由的查询,下面主要来看一下这个函数。
1. 路由表 目前Linux内核中支持两种路由表,一种是Hash路由表,另一种是Trie路由表,Trie算法查找效率很高,但它也因极其消毫内存资源而闻名,因此一般用在大型机上,否则在路由项过多时很可能造成内存的耗尽。在一般的机器上最好还是使用Hash路由表,之前有争论说Linux使用Hash路由表相比于二叉树效率太低,不适合商用,其实只要设计良好的哈希算法,尽量减少哈希碰撞,Hash路由表的查找效率也是很高的,在最好的情况下算法复杂算可以达到O(1),当然,最差也不过是O(n),我们有理由相信Linux中存在各种优秀的哈希算法,这些都是值得我们学习的。
链表是Linux内核中最重要的数据结构,但Linux内核中的链表与传统的数据结构书中看到的链表结构略有不同。这里简单写一下我对于Linux内核中链表的理解,不足之处欢迎路过的大牛给出批评意见。 1.传统形式的链表 数据结构书中的链表一般是下面这种形式: struct list { struct list *pre; struct list *next; void *data; }; 每一个链表结构中都包括两个同类型的指针,分别指向链表的上一个节点和下一个节点。这样当该节点处于一个循环链表中时,链表的首节点一般不用于保存数据,但首节点也需要是一个struct list类型,当结构庞大时首节点也必须分配同样大小的空间,这样就造成了内存的浪费。
去年受@colyli 指点,决定花些时间读一些linux kernel network部分的代码,准备把阅读代码的过程记录下来,也希望能有大牛前来指点,下面就先写一下创建socket对象的过程。