最近在 Qinling 项目中实现对 function 运行时做资源限制,主要是 cpu、内存和磁盘,后续还会考虑 package 大小、文件句柄、系统调用等资源限制。限制资源使用的原因很简单,因为底层是容器实现,function 都是跑在容器里,如果不做资源限制,任由用户自己在 function 里分配资源,那么不同用户的函数势必会相互影响,更严重的情况是恶意用户会利用一些手段突破容器的限制,威胁 hypervisor,进而威胁整个云环境。
继续阅读 »
事件处理
React中的事件处理方式与HTML方式类似,都是通过为标签添加属性来声明事件处理函数。如下所示:
```javascript
var LikeButton = React.createClass({
getInitialState: function(){
return {like: true};
},
handleClick: function(){
this.setState({like: !this.state.like});
},
render: function(){
return (
继续阅读 »
benchmark意为基准测试,常用来比较程序的性能。例如,比较不同方式拼接字符串的效率:
js
var a = 'hello' + 'world'
var b = ['hello', 'world'].join('')
常用方法有:
运行相同的次数,用时少的效率高
运行相同的时间,运行次数多的效率高
1. 运行相同的次数
例如:
```js
function f1() {
return 'hello' + 'world'
}
function f2() {
return ['hello', 'world'].join('')
}
function benchmark(name, fn) {
var ti
继续阅读 »
Nova在NFV场景下会提供NUMA相关高级特性,这里提供一个脚本查看计算节点的NUMA相关信息。
#!/bin/bash
function get_nr_processor()
{
grep '^processor' /proc/cpuinfo | wc -l
}
function get_nr_socket()
{
grep 'physical id' /proc/cpuinfo | awk -F: '{
print $2 | "sort -un"}' | wc -l
}
function get_nr_siblings()
{
grep 'siblings' /proc/
继续阅读 »
状态模式的关键是区分事物内部的状态,事物内部状态的改变往往会带来事物的行为改变。
电灯程序
首先给一个不用状态模式的电灯程序例子:
var Light = function() {
this.state = 'off'; //电灯初始状态off
this.button = null; //电灯开关按钮
};
Light.prototype.init = function() {
var button = document.createElement('button'),
self = this;
button.innerHTML = '开关';
this.button = document.
继续阅读 »
lua原生并没有提供try-catch的语法来捕获异常处理,但是提供了pcall/xpcall等接口,可在保护模式下执行lua函数。
因此,可以通过封装这两个接口,来实现try-catch块的捕获机制。
我们可以先来看下,封装后的try-catch使用方式:
```lua
try
{
-- try 代码块
function ()
error("error message")
end,
-- catch 代码块
catch
{
-- 发生异常后,被执行
function (errors)
print(errors)
end
}
}
```
上面
继续阅读 »
Introduction
在[PHP设计模式(四):继承][2]中我们介绍了继承,利用extends来进行程序设计的方法。
在[PHP设计模式(二):抽象类和接口][3]中我们介绍了接口,事实上也存在利用interface的程序设计方法,那就是多态。
和C/C++,Java,Python等语言一样,PHP也支持多态。多态更多是是一种面向对象程序设计的概念,让同一类对象执行同一个接口,但却实现不同的逻辑功能
。
多态/Polymorphism
还是用动物、鲸鱼和鲤鱼来举例:
interface IEat {
function eatFish();
function eatMoss();
}
class Wha
继续阅读 »
一些重构的建议:
提炼函数
* 避免出现超大函数
* 独立出来的函数有助于代码复用
* 独立出来的函数更容易被覆写
* 独立出来的函数如果拥有一个良好的命名,
* 它本身就起到了注释的作用。
比如在一个负责取得用户信息的函数里面,我们还需要打印跟用户信息有关的log,那么打印log的语句就可以被封装在一个独立的函数里:
var getUserInfo = function() {
ajax('http://xxx.com/userInfo', function(data) {
console.log('userId: ' + data.userId);
console.log('u
继续阅读 »
本文翻译自老马(Martin Fowler)的博客文章,该译文现已被博客原文收录在其下方中文翻译处。
在我的职业生涯期间,我曾听过很多关于一个方法(或者说函数,本文针对两者将不做区分)应当有多长的争论。这其实引申到另一个更加重要的问题上:我们应该在什么时候把代码封装在它自己的方法内?有些准则会基于方法的长度,比如方法的长度不应该超出屏幕可以容纳的范围❶。有些会基于复用,即任何被使用超过两次的代码都应该抽出自己单独的方法,而只在一个地方使用过的代码就应当保留在行内。然而,于我而言,最合乎情理的还是这种论点:那就是意图和实现的分离。如果你不得不费点精力查看一段代码,才能弄清楚它具体做了什么,那你就需要把它抽出成一个方法,并且用“它
继续阅读 »
享元模式的核心是运用共享技术来有效支持大量细粒度的对象。如果系统中因为创建了大量类似的对象而导致内存占用过高,享元模式就非常有用了。在JavaScript中,浏览器特别是移动端的浏览器分配的内存不算多,如何节省内存就成了一件非常有意义的事。
初识
假设有个内衣工厂,要50个男模50个女模,你可能会这么写程序:
var Model = function(sex, underwear) {
this.sex = sex;
this.underwear = underwear;
}
Model.prototype.takePhoto = function() {
console.log('sex=' + th
继续阅读 »