自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 资源 (4)
  • 收藏
  • 关注

原创 位运算的一些总结

C语言中有关位运算的操作符按照优先级排列一共有: ~:按位取反;>:左移与右移;&:按位与;^:按位异或;|:按位或;比如对两个数进行交换的时候可以采用swap进行操作,求平均值可以采用average函数操作:#include#include#includetypedef unsigned int type;void swap(type *a,type *b

2015-07-28 16:14:35 342

原创 大数运算问题

C/C++编程中,过于大的两个数运算会存在溢出的问题,详细了解可看本博客此处。那怎么运算特别大的数据而不越界溢出呢?以32位机器为例最大的数为0xFFFFFFFF。如果两个数运算如果大于这个数,则会回绕,超出32位的部分被截断,导致实际得到数远远小于想得到的数字。判断溢出的方法在溢出问题中已经详细说明了。首先是计算一下两个不超出0xFFFFFFFF的值的平均值,面试的时候我的思路是对的,貌

2015-07-24 22:21:34 675

原创 整数相加溢出判断问题

查阅参考这篇文章进行理解:http://phrack.org/issues/60/10.html整数相加溢出后一般不会报错。含符号整数,如果溢出则将符号位置位,两个正数相加的结果可能最后成了负数,这在有些场景中会引发一系列的bug。无符号整数相加,溢出的时候会利用最大数加1作为模值(MAXINT + 1)取模,同样会引起一系列的bug。比如下面无符号数溢出的情况:#include#inc

2015-07-24 16:00:18 14008 2

原创 内存分配、释放以及内存分配系统调用

在做C/C++编程的时候,最棘手处理的大概就是内存操作了。前一段时间查看资料得知内存管理的算法大致有两种:内存分配算法、内存页面置换算法,对这些算法虽然可能不需要实现,但是需要了解其中的概念原理,以备不时之需。内存分配的算法主要有5种:第一种是固定内存分配,也叫位图分配算法:固定内存分配,从其字面意思就可以看出来,分配的内存是固定的。比如1GB的内存可用于分配,每个分配的内存块的大

2015-07-22 22:23:45 5128

原创 阿里巴巴技术面

昨天晚上进行了长达近两小时的阿里巴巴技术面试,大公司技术岗的大牛就是不一般,对问题的理解剖析,高于一般公司的看法,我自身也提高不少,下面说下面试的过程吧。整体来说就是基础的东西虽然简单,但是不能局限于表层的东西,要深入地挖掘这样才有所获。其实面试的过程中,涉及到的知识面特别广泛,我大致总结了下从C/C++基础-》数据结构-》操作系统-》网络通信-》网站架构-》系统监控-》基本shell。

2015-07-22 12:23:04 913

原创 结构体中的内存对齐操作

再说这个之前,先看看下面一个结构体的大小是多少:struct data{ char a; int b; char c;}答案是12!按照一般逻辑思路各个成员的大小加起来不就是了么?但是实际的情况并不是这样的,结构体在实际的内存分配中需要进行内存的对齐操作。这里再说这个之前,先说说偏移量,结构体变量中的成员的地址和结构体变量地址的差值称为偏移量。编译器在编译源代

2015-07-21 10:06:35 466

原创 程序结构与进程结构

学习编程,但是对其根源从未探索,总觉得心里空荡荡的,有时候对根源大的探索是进一步的学习。在程序写好后,我们进行编译,之后生成一个可执行文件,Linux下为ELF文件,window下会经常看到是一个后缀为.exe的文件,其实为PE文件。那这些文件中结构怎样,定义的变量还有语句是怎么在这个可执行文件中存储的?我们编译源文件的时候,经过预编译->编译->汇编->链接。最终完成一个可执行文件的生成

2015-07-19 18:00:31 691

翻译 Linux性能之网络

所有的子系统中,最后说明网路,是由于网络是最难进行监控的。这是由于网路是比较抽象的一个。当监控网络的性能的时候,有许多的因素需要考虑。这些因素包括延迟、冲突、拥塞、误码丢包等等。接下来,将讲一下怎么去检测网络的性能。首先是,以太网的配置设置。除非是显式地改变,所有以太网的速度都是自动协商的。这是由于一个网络环境中有多个网络设备,各个设备的速度是不同的,是全双工还是半双工也不同,采用这种方式

2015-07-17 22:46:36 1502

原创 C语言(回调函数与转移表)

在说回调函数与转移表之前,先看下什么叫做函数指针~首先看两个非法的函数声明:int fun()[];/***1***/int fun[]();/***2***/首先看第一个声明,函数的返回值是一个数组?这个本身就是不对的,函数只能返回标量。再看第二个声明,函数名的是一个数组,数组元素必须要有相同的长度,不同的函数必然具有不同的长度。再看看下面两个声明,这个是合法的:

2015-07-17 17:46:17 2708

翻译 Linux性能之磁盘I/O

磁盘I/O是任何Linux系统中最低速的部分。这主要是由于它们与CPU距离,还有就是磁盘需要物理地运动才能工作(就是磁盘转动然后寻找文件位置)。以下描述几种内核获取数据I/O不同方式,从磁盘到内存,或者从内存到磁盘。以内存页的形式读写数据:Linux内核将磁盘分割成页式结构,许多Linux系统默认页的大小为4K。内存读写磁盘以4K页面大小进行。输入下面命令查看(注意这里不能直接使用time):

2015-07-15 20:56:35 4045

翻译 Linux系统性能之内存(memory)

在安装Linux系统的时候,通常会选择这么个分区,这个交换分区(swap space)是用来干啥的呢?交换分区就是使用硬盘的一部分作为内存RAM的扩展。内核会将当前不使用内存数据写到硬盘的这部分,腾出内存的这部分空间用以其他的使用。当需要使用这部分数据的时候,重新再读回到内存。读写硬盘比起使用真正的内存要慢地多,所以程序运行不是很快。swap分区作为一个虚拟的内存,其存储方式和内存一致,采

2015-07-15 13:10:25 1432

翻译 Linux性能之CPU性能

CPU的性能依赖于它所获取的资源。内核有个调度器,负责调度两种类型的资源:线程(单or多)和中断。调度器赋予不同的资源不同的优先级。其中中断最高,然后内核(系统)进程次之,用户进程为最后。内核如何管理着三种不同资源?在说之前需要了解几个概念:上下文切换、运行队列、吞吐量。上下文切换:许多现代单核处理器一段时间只能运行一个进程或者线程;在许多双核或者多核处理器上,Linux系统把每个核当作是

2015-07-15 11:51:09 5307

翻译 Linux的几个子系统

系统调优,就是找出操作系统的瓶颈,并且优化操作系统去减少这些瓶颈。单单靠调整内核的一些参数并不能从根本上解决问题。Linux系统的性能是和几个子系统相关的。这些子系统包括以下四个方面:1、CPU;2、内存使用情况;3、I/O情况;4、网络状态;这些子系统的性能互相依赖,其中任意一个高利用率都会很容易引起其他子系统的问题,例如以下几种情形:大量的页面IO写入请求会塞满内存的读

2015-07-14 23:41:03 1424

原创 hadoop内存大小设置问题

前面博客里面提到,运行一次hadoop的时候出现java heap error。字面意思分配堆的时候出现错误,我们知道应用程序的动态内存的分配均在堆里面。这里提示堆错误,那必然是内存不够用了。那么这个namenode内存的大小该怎么取值呢?namenode管理着集群里面所有文件的信息。简单根据文件信息给出一个准确计算内存大小的公式是不现实的。hadoop默认namenode内存的大小为10

2015-07-13 10:22:16 17690

原创 几个排序算法总结,从冒泡到快速排序

首先是排序的复杂度达到O(n*n)的几种算法,主要是冒泡、选择、插入这三种算法。实现的代码及其注释在本博客此处:简单排序算法研究算法的目的就是为了提高性能,所以想到能么降低算法的复杂度。首先是希尔排序是一种不稳定的排序算法,其复杂度取决于增量变量的选取,这里可以使得算法最好可以达到O(n*logn),最坏的情况就是O(n*n)。希尔排序完成了第一次突破,使得算法复杂度从O(n*n)降低下来

2015-07-12 12:01:59 575

原创 快速排序算法(Qsort)

或许在面试与笔试中问的最多的就是这个快速排序算法(Quick sort)。其实吧,这个快速排序的思想呢,很简单。所谓快速排序就是,起始的时候选择一个关键值key一般为数组的第一个值,然后将数组分割成两部分,前一部分全部小于key,后一部分全部大于key,然后前一部分与后一部分分别进行这样的分组,结束后所得的序列就是有序的。看吧思想炒鸡简单吧~但是实现呢?就有些纠结了,从上面的过程中可以

2015-07-11 00:16:57 1441

原创 关于树的总结从二叉树->二叉搜索树->平衡二叉树->红黑树->B树与B+树

二叉树的定义与性质,包括各种操作的源代码在本博客的的此处:二叉树二叉搜索树(Binary Search Tree)的定义性质以及源码实现在本博客此处:二叉搜索树平衡二叉树(AVL树),是一棵完全二叉树(PS:关于满二叉树与完全二叉树可以在堆排序中看到定义),其性质以及源代码的实现在本博客此处:平衡二叉树红黑树,是花时间最久理解的一个东西,只理解了其中的原理,其应用最经典的及时本博客前面

2015-07-10 23:01:11 3327

原创 B树与B+树

二叉搜索树、平衡二叉树、红黑树都属于二叉树,由于每个节点只有一个元素,每个节点只能连接两个节点。对于像文件系统、数据库这样需要数目庞大读写删除操作,如果采用这种数据结构将会大大降低系统的效率,遇到I/O读写的瓶颈。有没有一种数据结构可以降低往返于节点之间的次数呢?答案是有的,就是B树。什么是叫B树呢?和二叉树有啥区别呢?了然于心二叉树的劣势,这个B树每个节点必然不是只是含有一个节点了,可以

2015-07-09 17:20:05 1500

原创 红黑树(Red-Black tree)(插入与删除操作)

前面讲了平衡二叉树(AVL),可以完美地实现将查找复杂度控制在O(logn)。但是AVL增加删除节点的时候,需要不断地判断左右树的高度差,这个频繁的操作降低了性能。为此提出了红黑树。什么样的树叫做红黑树呢?红黑树需要满足以下五个性质(摘自算法导论):1、每个节点不是红的就是黑的;2、根节点是黑的;3、每个叶子节点(也就是树的尾端NULL节点)是黑的;4、如果一个节点是红的,那么

2015-07-09 00:39:22 2268

原创 归并排序(Merge sort)

前面看了希尔排序与堆排序。比较而言希尔排序虽然将算法的复杂度从O(n*n)降了下来,但是极其不稳定算法复杂度再区间(O(n*logn)~O(n*n))波动。相比较希尔排序而言,堆排序算法解决了这个问题,可以将算法的复杂度稳定在O(n*logn),但是记录的比较与元素的交换是跳跃式进行的,也就是i层与下一层存在2倍关系,故而稳定性不是很好。归并排排序(Merge sort,算法导论里的第二个排序

2015-07-04 21:45:58 1188

原创 堆排序

在堆排序之前,首先得了解几个东西。首先是满二叉树:一个二叉树所有的分支节点都存在左子树与右子树,而且所有的叶子节点都在同一层上,则这个二叉树就是满二叉树。然后是完全二叉树:对一颗二叉树进行层序编号,如果编号为i的节点与同样深度的满二叉树中编号为i的节点的位置完全相同,则这个二叉树就是完全二叉树。第一个就是完全二叉树的性质。为了说明完全二叉的性质的时候,这里只写出层序符号。下面就是一颗完

2015-07-03 18:18:22 686

原创 插入排序的升级版之希尔排序

弄清楚插入排序之后,每次插入都是要遍历数组,比较插入较小元素到新数组。这样前三种插入算法的复杂度均为O(n*n)。希尔排序采用分组的思想,分组后,对组内元素进行插入排序处理。下面结合代码进行描述:void shellsort(int arr[],int length){ int i,j,k; int increasment=length; int temp; do { i

2015-07-03 17:38:37 611

原创 字符串全排列问题

这几天一直在思考一个问题,一个字符串的排列方式有多少种?正好有阿里巴巴校园招聘的一道题目:问“alibaba”这个字符串的排列方式有多少种?看到这个问题,排列这个字眼,是不是有点眼熟,是啊!高二时候学习的排列组合问题,概率里面的。这算算都快10年过去了。这里我们利用排列组合的问题解决这个问题。看了下这个字符串,一共有7个字符,字符'a'出现了三次,字符'b'出现了2次,剩下了'l'

2015-07-02 15:38:37 890

原创 简单的排序算法(冒泡、选择、插入)

以下代码是这几种的C语言实现:#include#include#include#include#define ARR_LEN 1000void swapdata(int arr[],int i,int j){ int temp; temp=arr[i]; arr[i]=arr[j]; arr[j]=temp;}int bubble_rank1(int arr[

2015-07-01 00:30:02 485

Git的Windows客户端

github在windows下的工具,有两种形式,一个是类似于bash终端的形式,一个是图形化的界面方便操作

2015-08-14

SIFT算法实现源代码

sift是Lowe提出的图像配准经典算法,本代码是由俄亥俄州立大学的robhess在github上维护的一款开源的sift算法的C代码实现。

2013-12-06

linux下shell无线工具源代码

linux下的来源的一款非常好用的无线工具,可以轻松实现对ap的扫描、接入等等功能,可适用于android、ios等等以linux为内核的底层开发

2013-05-31

无线网络安全

无线网络技术及其安全漏洞透析,一片很好的外文文献

2013-03-05

空空如也

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

TA关注的人

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