- 博客(34)
- 资源 (12)
- 收藏
- 关注
原创 博客搬家
为了更大的自由(bi)度(ge),再次捣鼓独立博客本博客暂停更新。新的博客通过以下三个域名均可访问:simonxia.netwww.simonxia.netblog.simonxia.net欢迎各位围观,期待和大家学习交流
2014-12-11 09:08:55 814
原创 正则、grep、sed、awk
每次用到正则都要蛋疼一下,索性总结一下在这里。正则表达式主要分为基础正则和扩展正则基础部分:[abc] 匹配括号中的一个[^abc] 匹配非括号中的一个(取反)^word 以word开头word$ 以word结尾[n1-n2] 从n1到n2之间的所有连续字符.注意:这个连续与否,与ASCII编码有关,不同的语系编码方式不同:
2014-09-30 21:54:01 1488
原创 单例模式初探
大致思路是,将该类的构造函数定义为私有方法,代码其他地方不能实例化该对象,只能通过调用该类的一个静态成员函数(get_instance())来获取这个唯一实例。更进一步,把该类的复制构造函数和重载的=赋值运算也声明为私有,即Singleton(const Singleton);和 Singleton & operate = (const Singleton&);函数,需要声明成私有的,并且只声明不
2014-09-30 21:30:54 1112
原创 C99中的restrict和C89的volatile关键字
1、restrict它只可以用于限定指针,并表明指针是访问一个数据对象的唯一且初始的方式
2014-09-30 17:29:02 1778
原创 网络测量和拓扑发现
拓扑发现的方法主要包括两大类:1、基于中间路由器协作的使用类traceroute工具进行目标网络拓扑识别。2、不要求中间路由器协作(但要求网络端节点进行网络端到端路径级测量协作),基于层析成像技术的统计学方法。本文主要讨论前者。前者测量方法直接简便且生成的拓扑精度高,后者还主要在理论研究层面上。互联网的拓扑目前主流的方式是从三个层级去
2014-07-31 21:32:26 4844
原创 linux文件系统,dup2等
UNP的图已经说得很清楚了,直接上图:每个目录项指向一个i节点,每个节点有一个链接计数(硬连接),减为0时文件被删除
2014-07-31 20:09:20 1008
原创 教你分分钟画出越南全境的主干路由拓扑
标题党了一次,用一个高大上的的题目先吸引各位看官点进来。其实原理很简单,我们要做的工作只是做一些数据处理并最终生成kml脚本呈现在Google Earth上。进入正题:首先数据来源http://www.caida.org .这是一个英特网数据分析的合作组织,数据比较权威,全球很多网络方面的科研数据都来源于此。而对本文有用的信息在这里:http://www.caida.org/dat
2014-06-17 23:19:49 5089 6
原创 linux网络编程学习笔记之五 -----并发机制与线程池
进程线程分配方式简述下常见的进程和线程分配方式:(好吧,我只是举几个例子作为笔记。。。并发的水太深了,不敢妄谈。。。)1、进程线程预分配简言之,当I/O开销大于计算开销且并发量较大时,为了节省每次都要创建和销毁进程和线程的开销。可以在请求到达前预先进行分配。2、进程线程延迟分配预分配节省了处理时的负担,但操作系统管理这些进程线程也会带来一定的开销。由此,有个折中的方法是,当某个
2014-06-11 20:18:08 1463
原创 linux网络编程学习笔记之四 -----多线程并发服务端
相对于使用进程实现并发,用线程的实现更加轻量。每个线程都是独立的逻辑流。线程是CPU上独立调度运行的最小单位,而进程是资源分配的单位。当然这是在微内核的操作系统上说的,简言之这种操作系统的内核是只提供最基本的OS服务,更多参看点击打开链接每个线程有它自己的线程上下文,包括一个唯一的线程ID(linux上实现为unsigned long),栈,栈指针,程序计数器、通用目的寄存器和条件码,
2014-06-11 20:01:10 1545
原创 linux网络编程学习笔记之三 -----多进程并发服务端
首先是fork()函数,比较清晰的解释可以参考http://blog.csdn.net/lingdxuyan/article/details/4993883和http://www.oschina.net/question/195301_62902
2014-06-11 19:55:16 1976
原创 linux网络编程学习笔记之二 -----错误异常处理和各种碎碎(更新中)
在unix系统中对大部分系统调用非正常返回时,通常返回值为-1,并设置全局变量errno,如socket(), bind(), accept(), listen()。erron存放一个正整数来保存上次出错的错误值。对线程而言,每个线程都有专用的errno变量,不必考虑同步问题。慢系统调用指可能永远阻塞而无法返回的系统调用,通常是一些读写的例子,如pipe,终端设备,网络连接,典
2014-06-11 19:51:19 2260
原创 深入理解C语言----动态库 & 静态库 & 链接
库是代码共享的主要方式,动态库和静态库的主要区别在于他们链接形式的不同(静态和动态链接),它们都是目标文件的集合,再加上一些索引表项来表征各文件的信息。通常,linux里目标文件是ELF格式,而win则为PE静态库和静态链接linux下静态库是以.a为后缀,而win下静态库是以lib为后缀。静态链接是由链接器将一个或多个目标文件及静态库中所被引用的目标文件完全链接到一个可执行文件中,由
2014-04-21 21:24:36 5339 1
原创 2013华为第五届编程大赛 成都初赛题目和解答
昨天看到今年的报名,把隔壁zy同学的题目拿过来做了一下,http://blog.csdn.net/zy416548283/article/details/23712151前两个解法差不多,第三个用dfs,bfs方法可参考zy同学1、路灯统计: 题目描述某省会城市街道纵横交错,为了监控路灯的运行状况,每条街道使用一个数字字符串标识该街道上所有路灯的运行状况。假设路灯
2014-04-17 15:00:35 2415
原创 Linux内核链表的浅析和模拟
linux内核的链表设计非常独特。和通常的把数据结构装入链表不同,linux反其道而行之,把链表节点装入数据结构。这样的做法很好地实现了对数据的封装。并且为所有的链表操作提供了统一的接口。简单而高效。关于链表所有操作的函数都在/linux/list.h文件里PS:由于list.h文件没有署名的注释,民间猜测内核的链表机制很有可能就是Linux Torvalds本人的作品内核中的链表通常是一
2014-04-08 14:10:37 1738 1
原创 linux网络编程学习笔记之一 -----各种基础知识小结
以前小有接触,正好这学期选了一门类似的课,重新整理下。首先是几个常用的网络基本配置文件:/etc/hosts 主机名解析/etc/services 不同服务所使用的端口定义/etc/netmasks 网络掩码然后是地址结构netinet/in.h每个协议族都定义自己的套接口地址结构,这些结构名字以sockaddr_开头,并以每个协议族对应的唯一后缀结束。地址
2014-03-26 21:30:43 2024 2
原创 深入理解C语言-----副作用(Side Effect)和顺序点(Sequence Point)
先看几个概念:1。引用透明:如果一个表达式(或子表达式)只计算出值而不改变环境,我们就说它是引用透明的,这种表达式早算晚算对其他计算没有影响(不改变计算的环境。当然, 它的值可能受到其他计算的影响)。比如:(a+b)*(c+d),无论先计算乘号两边都可以2. 副作用:如果一个表达式不仅算出一个值,还修改了环境,就说这个表达式有副作用(因为它多做了额外的事)。比如:a++ 那么
2014-03-11 16:27:39 6152
原创 深入理解C语言-----各数据类型大小
首先看下C标准中“未明确定义”的三种类型Implementation-defined、Unspecified和Undefined。(以下内容部分摘自宋劲彬老师的文章)Implementation-defined 的情况,是C 标准没有明确规定,但是要求编译器必须对此做出明确规定,并写在编译器的文档中。Unspecified的情况,往往有几种可选的处理方式,C 标准没有明
2014-02-24 11:31:15 9325
原创 用回溯法求解N皇后和迷宫问题
关于回溯法不再赘述太多,大家移步各种百科,本文介绍两种应用的实现其典型应用之一: N皇后问题按皇后摆放规则顺序遍历棋盘依次安放皇后,直到某一个皇后找不到合适的位置时,倒退至上一步,调整上一个皇后位置,如还不满足,继续调整再上一个,依次类推。上述过程很容易想到用栈实现,其一组特解的代码如下void search_solution(){ struct position tm
2014-02-15 21:39:45 2036
原创 排序小结之插入排序及其升级版
1、直接插入排序比较次数最好n-1,最坏n(n-1)/2,平均时间复杂度为O(n^2),稳定的排序方法void insert_sort(int a[], int len) { int i, j, temp; for(i = 1; i < len; i++) { temp = a[i]; for( j = i
2014-01-17 13:51:33 2220
原创 排序小结之冒泡排序及其改进版
1、概述和基本实现由于是相邻元素比较交换,所以冒泡排序是一种稳定排序算法在最优的情况下,时间时间复杂度O(n);平均和最坏情况均是O(n^2)基本实现:void bubble_sort(int a[], int len){ int i, j, tmp; for (i = 0; i < len; i++) for (j = 0; j < len - i; j++)
2013-12-23 21:52:14 1449 2
原创 二叉树的基本操作(创建、递归和非递归遍历、求深度、求叶子数)
1、创建递归地调用即可顺便注意一下,C中指针作为函数的参数和返回值在上面的函数中传递的是一个指向指针的指针,以使函数中使用malloc来动态地分配空间。如果直接使用指针则不行,因为编译器要为每个函数参数制作临时副本,对于指针也不例外,它的副本即是实参所指向对象的内存地址,如果函数中修改了形参指向的内容,实参所指向的内容也作了相应的修改,这就是为什么指针可以用作输出参数的原因
2013-10-31 22:39:07 2196
原创 打造win下vim+gcc+gdb的环境
本着提高程序员的可移植性,把linux下的那一套搬到win里,用了一段时间,嘿,挺称手的,特别是各种大大小小的IDE都有各种不尽人意的地方。这个套件,轻量,方便,也能让那些经常在win和linux来回切换的朋友平滑过渡。正好昨天重装了系统,需要重新配置。整个流程整理如下,聊做参考:首先是vim,编辑器之神,就不废话了,她的图形化版本gvim,下载地址:点击打开链接安装完成后,需
2013-10-16 23:13:42 1609
翻译 探寻Chrome的内部玄机---Chrome:// Pages
原文链接:Find Hidden Features On Chrome’s Internal谷歌浏览器Chrome内置的 chrome:// pages 包含了实验性功能、诊断工具和详细的统计数据。她藏在用户界面下,因此只有你的主动寻找才能感知她的存在。这些隐藏页面是谷歌版的火狐about page我们可以通过输入chrome:// 紧跟页面名字访问其中的每一个,当然也可以使用
2013-10-15 20:55:39 2404
原创 基于OpenGL的C版贪食蛇(简陋版)
终于找到一个合适的图形库,比之前一个DOS窗口的稍微好了点,DOS窗口版刷屏不给力,就算是一个sleep()下去是毫秒级的精度,等屏上信息刷出来,黄花菜都凉了。介绍下GLUT,OpenGL Utility Toolkit,即OpenGL应用工具包,是一套可用于所有主流平台的支持函数库。提供了解决如窗口、菜单和设备输入等基本问题的方法,同时还保持了对操作系统平台的独立性。下载:点
2013-10-12 16:40:22 2919
原创 深入理解C语言----函数调用过程浅析
读了韩宏老师的《老码识途》第一章,忍不住自己动手试一下,利用反汇编来查看函数调用过程#includetypedef struct{ int i1; int i2; int i3}myrd;myrd myfunc(int a, int b, int c){ myrd r1; r1.i1 = a; r1.i2 = b; r1.i3 = c; return r1;
2013-09-22 23:00:08 2596 2
翻译 测试Linux服务器SCSI/SATA硬盘是否正常
原文链接:http://www.cyberciti.biz/tips/linux-find-out-if-harddisk-failing.html 我们读者中的一个常客提到一个问题: 怎么测试我的硬盘是否出故障?我在 /var/log/messages 文件中只能看到很少的错误 /var/log/messages 文件中的 I/O 错误表明硬盘出了一些故障甚至可
2013-09-13 20:22:08 6346
原创 Keep It Simple and Stupid
看到刘汝佳提到的一个KISS(Keep It Simple and Stupid)原则很受启发,程序的目的是为了解决问题,应该用尽量简洁的方式,不是为了写程序而写程序,不是展示技巧比如:交换两个数的顺序输出。可以用中间变量,也可以直接用相加的和来分别减a = a + b;b = a - b;a = a - b;最直接的莫过于scanf("%d%d",&a,&b);printf
2013-07-24 10:16:44 3624
原创 带宽测试初探(UDP发包方式)
在做毕设的时候遇到一个对实际带宽估计的问题,想到一个简单方式对网络情况不复杂的带宽测试方法,可行性还需进一步确认。http://bbs.csdn.net/topics/390523727无人答复,默泪大致原理是:在链路上没有其他数据流量的情况下,用高于带宽的吞吐量发送UDP包,然后在收端统计收包或丢包数量,对实际带宽进行估计。程序很简单,定义一个包含序列号的UDP包,链路两
2013-07-22 15:27:46 6054 2
C程序设计语言(第2版·新版)
2013-10-23
STL源码解析
2013-10-17
glutdll工具包
2013-10-12
gvim for windows
2013-10-11
gcc中文手册
2013-10-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人