Fork me on GitHub
摘要: 这一篇我们用epoll改写之前写的简单聊天室,Epoll是Linux内核为处理大批量句柄而作了改进的poll。我们要用到epoll的三个函数,分别是:int epoll_create(int size); int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event); int epoll_wait(int epfd, struct epoll_event * events, int maxevents, int timeout);下面对要用到epoll的操作进行封装... 阅读全文
posted @ 2012-09-12 14:00 _Lei 阅读(7480) 评论(4) 推荐(0) 编辑
摘要: 用Javascript实现有向图的广度优先搜索刚好遇到一个需求,对于一个有向图,指定一个节点 i 作为起点,输出从 i 出发,可以到达的所有节点,也就是图中以 i 作为起点的子连通片,思考了一下,可以用以前学的广度优先搜索解决。一、有向图的存储我们用一个邻接矩阵(二维数组)存储有向图的信息,对于一个... 阅读全文
posted @ 2015-11-26 20:50 _Lei 阅读(2123) 评论(0) 推荐(0) 编辑
摘要: 如果不做任何处理,表单提交时会刷新页面,为了改善体验,可以使用jQuery做到异步提交表单:通过$("#form").serialize()将表单元素的数据转化为字符串,然后通过$.ajax()执行异步请求资源。网页代码: ... 阅读全文
posted @ 2015-07-16 20:26 _Lei 阅读(23894) 评论(1) 推荐(0) 编辑
摘要: 进行数据分析或统计时,如果数据量较小,我们可以用awk快速处理,以下是一些小技巧一、时间戳转换日期转时间戳: date -d "20150315" "+%s"时间戳转日期:date -d @1426565428 "+%Y-%m-%d"二、数据统计处理随机取100个数awk 'BEGIN{srand(... 阅读全文
posted @ 2015-03-17 12:02 _Lei 阅读(699) 评论(0) 推荐(0) 编辑
摘要: 网易公开课学习笔记机器学习的定义 Arthur Samuel:“在不直接针对问题进行编程的情况下,赋予计算机学习能力的一个研究领域” 让计算机学会如何下棋,并超过自己 Tom Mitchell:给计算机一个任务T和性能测试方法P,如果在经验E的影响下,P对T的测量结果得到了改... 阅读全文
posted @ 2014-05-18 21:22 _Lei 阅读(1465) 评论(0) 推荐(1) 编辑
摘要: 最近都在写shell脚本,免不了遇到每个新手都要填的坑,在这里简单记录一下。test语句的坑test语句在shell脚本里用的非常多,像if语句后面的其实都是test语句,也是新手最容易遇到坑的地方之一(1)[: =: unary operator expectedif [ $var = "hello" ]; then echo "world"fi如果var的值为空,执行上面这段脚本的时候会出现这样的错误./test.sh: line 12: [: =: unary operator expected运行脚本之前加上-x参数,在每条命令执行前打印出命,就 阅读全文
posted @ 2013-09-09 01:31 _Lei 阅读(1068) 评论(0) 推荐(0) 编辑
摘要: 使用脚本检查某个进程是否在运行,若否,则启动该进程。主要思路:根据进程名进行查找(当然如果有两个名字一样的进程就不行了),用ps + grep检查进程是否已经存在,同时要注意用grep -v过滤掉当前脚本的进程(因为该进程的路径会作为参数传给这个脚本),还有要过滤掉grep命令产生的子进程(在shell中执行命令时会调用fork产生一个子进程,然后用exec更换进程的映象)注意重启进程时直接启动了一个可执行文件:$process_path &如果要启动的是shell脚本的话,可以使用:sh $process_path &启动完进程之后可以再检查一下进程是否已经成功启动了。最后, 阅读全文
posted @ 2013-04-21 12:29 _Lei 阅读(6283) 评论(0) 推荐(0) 编辑
摘要: 解决gcc编译时的乱码问题今天发现用securecrt登陆时,gcc编译出错时会出现乱码,但直接在主机的窗口界面下用Shell编译却没有乱码。查看了一下当时的错误描述,发现它的引号是中文引号,导致在SecureCRT中显示出错:before numeric constant在网上查了一下,可以通过修改LC_CTYPE=zh_CN.GBK解决这个问题,具体的方法有两个:1. 通过export命令修改LC_CTYPE变量的值tianfang > export LC_CTYPE=zh_CN.GBKtianfang > gcc main.cmain.c:1:1: error: expect 阅读全文
posted @ 2013-03-21 20:22 _Lei 阅读(671) 评论(0) 推荐(0) 编辑
摘要: 按层非递归遍历二叉树是一道常见的题目,编程之美上有一个打印出二叉树某一层的节点的问题,稍稍有意思。在编程之美上,提到了两种解法:(1)一种是递归解法void TransLevel(Node* root,int level){ if(root == NULL) return ; else { if(level == 1) printf("%d ",root->data); else { TransLevel(root->left,level-1); Trans... 阅读全文
posted @ 2013-02-25 00:43 _Lei 阅读(5087) 评论(1) 推荐(0) 编辑
摘要: AppArmor因为最近在研究OJ(oline judge)后台的安全模块的实现,所以一直在研究Linux下沙箱的东西,同时发现了Apparmor可以提供访问控制。AppArmor(Application Armor)是Linux内核的一个安全模块,AppArmor允许系统管理员将每个程序与一个安全配置文件关联,从而限制程序的功能。简单的说,AppArmor是与SELinux类似的一个访问控制系统,通过它你可以指定程序可以读、写或运行哪些文件,是否可以打开网络端口等。作为对传统Unix的自主访问控制模块的补充,AppArmor提供了强制访问控制机制,它已经被整合到2.6版本的Linux内核中。 阅读全文
posted @ 2013-02-24 11:41 _Lei 阅读(22602) 评论(4) 推荐(4) 编辑
摘要: 记得以前看过一道这样的题目: 以下程序的执行结果是?#include <stdio.h> int main(){ char* p="Hello World"; *(p+1)='a'; printf("%s\n",p); return 0; } 应该不难吧,不知道大家的答案是什么。 以下是我的一些解答: 对于指针p,他的大小是sizeof(p),一般为4,至于他指向的对象的大小是sizeof(char),那么在... 阅读全文
posted @ 2013-01-12 22:28 _Lei 阅读(6757) 评论(9) 推荐(0) 编辑