自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 资源 (2)
  • 收藏
  • 关注

原创 JavaScript IP转INT(整形)

有时候我们需要在web页面中对ip进行一些和掩码相关的验证,由于掩码是二进制的概念(当然如果你字符串操作实在很溜,经历旺盛的话,那就可以不用往下读了,读到这里为止了)。JavaScript位操作和c差不多,但是JavaScript转成无符号整形我们需要一个“>>>”,否则最左边一位会被解析成符号位,得到的结果与期望不符合。例子中我们将会演示如何判断两个ip的网络位是否相同,这在页面进行网关和ip是否

2017-08-30 14:17:23 10147

原创 跳跃表的实现(c++)

这里不介绍跳跃表是什么东西了,如果没有推导过跳跃表或者索性不知道跳跃表是什么东西请看麻省理工大学公开课 算法导论 跳跃表。 代码中有一个容易误解的地方解释一下,randomLevel模拟抛硬币的过程比较不太直观,在插入过程中一个节点上升的次数实际上等价于连续出现“正面”的次数,所以我们直接一次性算出来,而不是每插完一个节点抛一次硬币,这样方便在进行实际插入之前进行一些检查 本代码

2017-08-28 00:27:36 7376

原创 Linux 动态装载库(dlopen)

Linux有时我们需要在运行时指定库的路径去加载库,而不是依赖于系统自动动态链接。比如说我们在需要做到动态加载库插件时就会用到动态装载库的特性(比如像lighthttpd和nginx的动态mod功能),Linux提供了函数来帮助我们做到这件事,主要的几个函数为:dlopen,dlsym,dlclose栗子假设我们一个项目可能会需要加载不同版本的库v1和v2,我们希望在配置文件中实现可配置加载哪个库,

2017-08-21 23:26:37 7198

原创 dup2复制文件描述符

dup2是Linux下用来实现文件描述符复制的api,dup2(fd1, fd2)将会把fd1复制到指定的fd2下,如果fd2是一个已经打开的描述符,dup2会自动的先将其安静的关闭。我们知道Linux的进程表中会维护打开的fd的表项,每个fd指向一个文件表,复制的作用是使fd2指向了fd1所指向的文件表项。当我们关闭了指向同一个文件的fd的时候,关闭一个fd另外一个fd是不受影响的。下面的例子我们

2017-08-21 16:46:31 6003

原创 c++11 thread

c++11在语言层面上提供了对thread的支持,由于不同的平台提供了不同线程API,在语言层面提供了对thread的支持可以大大的减小代码移植的工作量。thread的构造函数参数为函数名和可变参数,请看栗子thread的默认构造函数创建一个没有执行过程的线程,该线程既不可以被join,也没有id,如果join将会产生terminated不可以被拷贝和赋值,拷贝构造函数和赋值函数都被threa

2017-08-20 19:46:36 9742

原创 gperftools检查内存泄漏

上次,我们提到利用google gperftools定位程序cpu使用性能问题,这次利用同样的工具的heap checker的功能对程序进行内存泄漏的定位。安装请看之前的文章:#include <iostream>#include <vector>using namespace std;extern "C" {#include <string.h>}class MyClass { p

2017-08-18 15:27:39 7804

原创 用最大堆实现优先队列(c++)

关于最大堆,最小堆的概念这里不再介绍。#include <iostream>#include <vector>using namespace std;template<typename T>class PriorityQueue { private: vector<T> v; int size; const static int init

2017-08-18 00:42:11 6919

原创 VIM命令备忘录

本文仅仅是写给自己的备忘录,没有条理,请谨慎阅读 :ls 显示打开的文件我习惯vim用NerdTree打开一大堆文件,或者ctags跟踪跟踪着就一大堆文件了,这时打开的文件一般在buffer中,这时又记不起具体文件名,想看看打开过了哪些文件了,用”:ls”就可以了:bn 跳转到已经打开的某个文件ls显示了buffer文件了之后,每个文件都带有一个序号n,我们通过”:bn”的方式就可以跳转到某个

2017-08-16 22:20:44 211

原创 c++11 for range

c++11带来了基于range的for循环,在仅仅遍历一个数组而不想关心下标的时候,终于可以不用羡慕javascript和世界上最好的语言php了。举个栗子:#include <vector>#include <string>#include <iostream>using namespace std;int main() { vector<string> v; for(int

2017-08-16 21:47:59 9314

原创 C++右值引用的示例

解释通常来说左值是指非零时对象,而右值是指临时对象。我们知道c++在进行临时对象的拷贝时会调用拷贝构造函数:vector<string> v;v.push_back(string("1234");产生的行为就是先构造一个“1234”的临时string,然后调用拷贝拷贝构造函数拷贝临时“1234”到vector里面,然后销毁临时的“1234”。在这样的语义里面临时“1234”明显是一个右值,想一想它

2017-08-16 10:46:28 9767

原创 google-gperftools分析代码时间分布

安装gperftools下载代码git clone https://github.com/gperftools/gperftoolscd gperftools./autogen.sh./configuremake -j8sudo make install安装git clone git://git.sv.gnu.org/libunwind.gitcd libunwind./configu

2017-08-15 00:02:44 7772

原创 简单的闭散列(hashtable)实现(c++)

#include <iostream>#include <algorithm>#include <string>extern "C" {#include <ctype.h>#include <string.h>}template <typename T>class HashTable { private: std::list< std::pair<std::str

2017-08-14 13:18:30 6014

原创 composer简介

简介composer是一款php依赖包管理工具,使得你不必像以前一样手动去下载一些依赖项目并进行复杂的依赖处理,composer只需要声明一个json文件,便可以自动下载管理依赖包,只需要简单的声明依赖文件然后通过几条composer命令便可以自动安装,更新,删除,搜索等对依赖的管理,composer将会自动从服务器中下载依赖包,并生成依赖文件。安装curl -sS https://getcompo

2017-08-13 23:27:17 9476

原创 CGI的环境变量(env)

CGI通用网关中,通常服务器通过CGI协议来执行可执行程序,并通过环境变量传递一些请求参数进来,通过写一段C的代码并通过浏览器向服务器请求,代码如下:extern char** environ;int main() { int index = 0; while(environ[index] != NULL) { printf("%s\n", environ[inde

2017-08-11 15:53:39 7427

原创 Linux下fd泄露的定位

之前在公司写过一个生产工具,通过读写某个驱动节点实现设备信息更改的功能,结果测试拷机两小时必挂,一看内核打印“打开文件失败”,perror了之后打开文件太多了,这时候我就猜到是fd(句柄)泄露了。句柄泄露是怎么回事呢,linux打开文件通常都是open返回一个fd的形式,操作系统会维护当前进程打开文件的记录,但是数量是被限制的,操作系统能打开的fd总和也是有限的,如果进程一直打开文件而不关闭,那么当

2017-08-10 09:17:21 17826

原创 iptable mark功能

iptable的mark功能可以用于标记网络数据包,用于标记数据包。在一些不同的table或者chain之间需要协同处理某一个数据包时尤其有用。下面介绍iptables简单的用法: -j MARK //-j代表动作这里代表要执行mark操作 -m mark //-m代表匹配mark –mark xxx/yyy //xxx代表要匹配的mark的值,yyy代表掩码,如果要完全匹配可以省略掉掩码,不

2017-08-08 22:38:11 2688

原创 shell数组

#!/bin/sh#创建数组arr=(9 8 7 6 5 4 3 2 1)#arr[@]和arr[*]都表示数组的字符串表示echo ${arr[*]}echo ${arr[@]}#遍历数组echo "arr:"for num in ${arr[@]}do echo $numdone#获取数组的长度用#arr_len=${#arr[*]}echo "arr_len:$arr

2017-08-07 10:44:50 202

原创 利用SSH反向代理树莓派

利用ssh反向代理树莓派 如果你没有一台公网服务器,可以不用继续读下去了痛点与第一性原理首先由于当前ipv4资源枯竭和运营商出于安全考虑的原因,网络上多分到动态的ip或者nat的局域网ip,加上防火墙限制了tcp的主动连接方向,所以很难直接在公网访问局域网的设备。但是玩树莓派的时候我们想要在外网连接树莓派做一些事情,这就是痛点。利用一台公网服务器坐反向代理服务器我们就可以做到这点了,原理是利用

2017-08-02 00:11:58 10957 2

Systems_Performance-Enterprise_and_the_Cloud

Brendan Gregg大神的性能优化的书籍。Brendan Gregg is the lead performance engineer at Joyent, where he analyzes performance and scalability for small to large cloud computing environments, at any level of the software stack.

2017-11-07

空空如也

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

TA关注的人

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