heap包对任意实现了heap接口的类型提供堆操作。(小根)堆是具有“每个节点都是以其为根的子树中最小值”属性的树。树的最小元素在根部,为index 0.

heap是常用的实现优先队列的方法。要创建一个优先队列,实现一个具有使用(负的)优先级作为比较的依据的Less方法的Heap接口,如此一来可用Push添加项目而用Pop取出队列最高优先级的项目。

1
2
3
4
5
6
7
type Interface

type Interface interface {
sort.Interface
Push(x interface{}) // add x as element Len()
Pop() interface{} // remove and return element Len() - 1.
}

阅读更多

go语言提供的flag包可以解析命令行的参数,代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package main

import (
"flag"

"fmt"
)

func main() {

//第一个参数,为参数名称,第二个参数为默认值,第三个参数是说明

username := flag.String("name", "", "Input your username")

flag.Parse()

fmt.Println("Hello, ", *username)

}

编译:

go build flag.go

运行:

./flag -name=world

输出:

Hello, world

如果不输入name参数:

./flag

则输出:

Hello,

在c中分为这几个存储区

  1. 栈 - 由编译器自动分配释放
  2. 堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收
  3. 全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。- 程序结束释放
  4. 另外还有一个专门放常量的地方。- 程序结束释放

阅读更多

例如像下面的数组:

1
2
3
4
5
$users = array(
array('name' => 'tom', 'age' => 20),
array('name' => 'anny', 'age' => 18),
array('name' => 'jack', 'age' => 22)
);

使用array_multisort

先将age提取出来存储到一维数组里,然后按照age升序排列。具体代码如下:

1
2
3
4
5
$ages = array();
foreach ($users as $user) {
$ages[] = $user['age'];
}
array_multisort($ages, SORT_ASC, $users);

执行后,$users就是排序好的数组了,可以打印出来看看。如果需要先按年龄升序排列,再按照名称升序排列,方法同上,就是多提取一个名称数组出来,最后的排序方法这样调用:

1
array_multisort($ages, SORT_ASC, $names, SORT_ASC, $users);

使用usort

使用这个方法最大的好处就是可以自定义一些比较复杂的排序方法。例如按照名称的长度降序排列:

1
2
3
4
5
6
7
usort($users, function($a, $b) {
$al = strlen($a['name']);
$bl = strlen($b['name']);
if ($al == $bl)
return 0;
return ($al > $bl) ? -1 : 1;
});

这里使用了匿名函数,如果有需要也可以单独提取出来。其中$a, $b可以理解为$users数组下的元素,可以直接索引name值,并计算长度,而后比较长度就可以了。

在部署Open-Falcon安装绘图组件 Dashboard 执行 ./env/bin/pip install -r pip_requirements.txt 时出现如下错误:

error: command 'gcc' failed with exit status 1

解决方式:

1
2
3
sudo yum -y install gcc gcc-c++ kernel-devel
sudo yum -y install python-devel libxslt-devel libffi-devel openssl-devel
pip install cryptography

最近在看CodeIgniter的源码,在system/common.php中有个公共函数load_class的定义,其中用到file_exists函数来判断指定类的文件是否存在,于是就具体查了下该函数的用法~

阅读更多

安装需要用的包

yum install -y pptpd iptables

配置PPTP的设置。首先配置/etc/ppp/options.pptpd文件,找到网络和路由设置,我们设置ms-dns8.8.8.88.8.4.4

1
2
3
4
5
6
7
8
9
10
11
# Network and Routing

# If pppd is acting as a server for Microsoft Windows clients, this
# option allows pppd to supply one or two DNS (Domain Name Server)
# addresses to the clients. The first instance of this option
# specifies the primary DNS address; the second instance (if given)
# specifies the secondary DNS address.
#ms-dns 10.0.0.1
#ms-dns 10.0.0.2
ms-dns 8.8.8.8
ms-dns 8.8.4.4

阅读更多