自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(72)
  • 资源 (1)
  • 收藏
  • 关注

转载 堆排序

http://blog.csdn.net/shuilan0066/article/details/8659235 选择排序算法,是选择最值,然后将其调整到合适位置。如何确定最值,则是选择排序算法的关键。 简单排序算法是通过比较,确定最值的位置。假设未排序元素个数为N,则遍历一趟,需比较N-1次,再遍历下一趟时,需比较N-2次。但是,第二趟比较完全是独立的,没有利用第一次比较的信息。

2014-01-28 11:38:28 513

转载 采用链地址法处理冲突构造哈希表

1、背景引入   (1)线性表和树等线性结构中,记录在结构中的相对位置是随机的,和记录的关键字之间不存在确定的关系,因此,在结构中查找记录时需要进行一系列和关键字的比较。理想的情况是希望不经过任何比较,一次存取便能够取到所查找的记录,那就必须在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字和结构中一个唯一的存储位置相对应。因而在查找时,只要根据这个对应关系f找到给定值K

2014-01-27 17:34:30 1442

转载 最快的内容查找算法-----暴雪的Hash算法

暴雪公司有个经典的字符串的hash公式  :先提一个简单的问题,假如有一个庞大的字符串数组,然后给你一个单独的字符串,让你从这个数组中查找是否有这个字符串并找到它,你会怎么做?  有一个方法最简单,老老实实从头查到尾,一个一个比较,直到找到为止,我想只要学过程序设计的人都能把这样一个程序作出来,但要是有程序员把这样的程序交给用户,我只能用无语来评价,或许它真的能工作,但也只能如此了。  最

2014-01-27 17:31:06 1364

转载 为什么哈希表能够加快查找效率?

很多语言都提供map的数据类型,map一个很常用的功能,那就是key-value的存储和查找功能。这种数据类型的实现原理就是通过哈希表来实现快速查找。 哈希表的基本原理:原本无序的集合经过哈希算法被重新调整位置,排列成新序列,也就是hashtable(与其说是表,不如说是某种数据结构的数组)。以某string集合为例,如图:原始序列  hash算法   关键字   取模(10)  

2014-01-27 16:26:33 6293

转载 堆排序

http://blog.csdn.net/shuilan0066/article/details/8659235选择排序算法,是选择最值,然后将其调整到合适位置。如何确定最值,则是选择排序算法的关键。 简单排序算法是通过比较,确定最值的位置。假设未排序元素个数为N,则遍历一趟,需比较N-1次,再遍历下一趟时,需比较N-2次。但是,第二趟比较完全是独立的,没有利用第一次比较的信息

2014-01-27 15:32:47 508

转载 白话经典算法-常见排序算法的实现与性能比较

[转]常见排序算法的实现与性能比较原文地址在这里,这里是多个排序算法全部整理过来的。整理转载过来只是为了自己阅读方便。http://blog.csdn.net/morewindows/article/details/7961256首先回顾下各种排序的主要思路:一.       冒泡排序冒泡排序主要思路是:通过交换使相邻的两个数变成小数在前大数在后,这样每

2014-01-27 11:29:49 865

转载 僵尸进程

In UNIX System terminology, a process that has terminated,but whose parent has not yet waited for it, is called a zombie. 在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他, 那么他将变成一个僵尸进程。 但是如果该进程的父进程已经先

2014-01-26 16:08:43 676

转载 排序算法总结

一、选择排序1. 基本思想:每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。2. 排序过程:【示例】:初始关键字     [49 38 65 97 76 13 27 49]第一趟排序后 13 [38 65 97 76 49 27 49]第二趟排序后 13 27 [65 97 76 49 38

2014-01-24 12:04:53 496

转载 海量数据查找

有一百万个数,是在1到一亿当中随机取值,找出这一亿个数中没出现的数,要求用最小的时间复杂度。说下思想就行,我想到的就是遍历,但感觉太复杂了。方案1:用位图法用一亿个bit来标记一个数是否出现。比如出现了数字1024,那么就把1024位置1。从1到一亿扫描,没有标记1的就是缺少的数字。100000000/1024/1024=95.367431640625,不到96

2014-01-23 17:25:42 930

转载 地图着色算法C语言实现(加个人评注)

地图着色定理:任何平面地图可以使用4种颜色给每个不同的城市着色,而保证相邻的城市着不同的颜色。思路:把地图上的每个城市抽象为一个点,并给每个城市编号,相邻的城市之间用直线连接。据此做出邻接矩阵,若第i个城市与第j个城市相邻,则metro[i][j]=1,否则metro[i][j]=0。算法:按照编号从小到大的顺序检查每个城市,对每个城市从1到4使用4种颜色着色,若当前颜色可用(即不

2014-01-23 16:14:45 1638

转载 为什么要内存对齐?字节对齐和边界对齐介绍。

大家都知道一个byte是8个bit,而现在流行的32位机指的是一次可以存取32个bit,也就是4个byte,在这种情况下,最有效率的作法当然是一次读4个byte。也就是即便你只取一个byte的内容,实际上,机器一次也是取了4个byte,然后把其中的一个byte给你。当然取4个byte并不是随机组合的,而是按照一定的次序,比如一次取0、1、2、3四个单元的内容,下次访问就是4、5、6、7。由

2014-01-21 14:30:28 3869 1

转载 彻底搞定C指针-函数名与函数指针

彻底搞定C指针-函数名与函数指针一 通常的函数调用一个通常的函数调用的例子://自行包含头文件void MyFun(int x);    //此处的申明也可写成:void MyFun( int );int main(int argc, char* argv[]){   MyFun(10);     //这里是调用MyFun(10);函数   re

2014-01-21 11:04:47 452

转载 银行家算法

银行家算法维基百科,自由的百科全书银行家算法(Banker's Algorithm)是一个避免死锁(Deadlock)的著名算法,是由艾兹格·迪杰斯特拉在1965年为T.H.E系统设计的一种避免死锁产生的算法。它以银行借贷系统的分配策略为基础,判断并保证系统的安全运行。目录1背景2处理程序[1]3安全和不安全的状态4伪代码(pseudo-co

2014-01-20 17:58:50 914

转载 进程死锁

进程死锁目录1产生死锁的原因2产生死锁的四个必要条件3预防死锁的产生如果多个进程同时占有对方需要的资源而同时请求对方的资源,而它们在得到请求之前不会释放所占有的资源,那么就会导致死锁的发生,也就是进程不能实现同步。1产生死锁的原因产生死锁的原因可归结为如下两点:(1)竞争资源。当系统中供多个进程共享的资源如打印机、公用队列等,其数目不足以

2014-01-20 17:24:06 628

转载 web服务器测试工具Gulu——HTTP接口测试工具

web服务器测试工具Gulu——HTTP接口测试工具HTTP接口测试工具,简单讲就是根据测试需求,向所测Web Server发起各种各样的Request请求,完整的获取Web Server返回Response响应。并能够便捷地对Response响应的各个内容进行验证。那么web服务器测试工具Gulu——HTTP接口测试工具是如何做到的呢?本篇博文将结合代码实现及UM

2014-01-17 17:51:34 1337

转载 http接口测试小工具

http接口测试小工具http接口是一种比较常见的接口形式,在电信、金融领域用的比较多,发送的数据,以XML字符串形式的报文居多。今天为了做一个这样接口的测试,做了一个简单的小工具,工具就是一个html页面。将下面的代码保存为htm,用IE打开,即可使用。http接口测试小工具var $ = document.getElementById;var xsd =

2014-01-17 17:41:08 1712

转载 管程的通俗理解

信号量机制的引入解决了进程同步的描述问题,但信号量的大量同步操作分散在各个进程中不便于管理,还有可能导致系统死锁。如:生产者消费者问题中将P、V颠倒可能死锁。为此Dijkstra于1971年提出:把所有进程对某一种临界资源的同步操作都集中起来,构成一个所谓的秘书进程。凡要访问该临界资源的进程,都需先报告秘书,由秘书来实现诸进程对同一临界资源的互斥使用。管程定义了一个数据结构和能为并发进

2014-01-17 16:24:31 3004 1

转载 自旋锁应用

自旋锁一、为什么用自旋锁操作系统锁机制的基本原理,就是在某个锁操作过程中不能与其他锁操作交织执行,以免多个执行路径对内核中某些重要的数据及数据结构进行同时操作而造成混乱。在不同的系统环境中,根据系统特点和操作需要,锁机制可以用多种方式来实现。以Linux为例,其系统内核的锁机制一般通过3 种基本方式来实现,即原语、关中断和总线锁。在单CPU系统中,CPU 的读—修改—写原语可以

2014-01-17 15:33:50 1523

转载 自旋锁-搜搜百科

spin lock为了解决smp情况下资源的互斥访问,充分利用cpu的并行处理能力。原理smp多cpu系统情况下,一个cpu循环检测内存中某一个变量,待该变量符合一个条件以后原子的测试再修改后再跳出循环,进入临界区,保证对资源的操作序列化。自旋锁一般针对操作系统,应用程序库中的自旋锁不是为了保证cpu的互斥访问,因为应用程序总是可以被

2014-01-17 15:19:13 774

转载 深入理解linux自旋锁

最近在内核频繁使用了自旋锁,自旋锁如果使用不当,极易引起死锁,在此总结一下。自旋锁是一个互斥设备,它只有两个值:“锁定”和“解锁”。它通常实现为某个整数值中的某个位。希望获得某个特定锁得代码测试相关的位。如果锁可用,则“锁定”被设置,而代码继续进入临界区;相反,如果锁被其他人获得,则代码进入忙循环(而不是休眠,这也是自旋锁和一般锁的区别)并重复检查这个锁,直到该锁可用为止,这就是自旋的过程

2014-01-17 15:03:17 577

转载 互斥锁、自旋锁和读写锁

一、互斥锁对于多线程的程序,访问冲突的问题是很普遍的,解决的办法是引入互斥锁(Mutex,MutualExclusive Lock),获得锁的线程可以完成“读-修改-写”的操作,然后释放锁给其它线程,没有获得锁的线程只能等待而不能访问共享数据,这样“读-修改-写”三步操作组成一个原子操作,要么都执行,要么都不执行,不会执行到中间被打断,也不会在其它处理器上并行做这个操作。Mutex用p

2014-01-17 14:45:44 2277

转载 读写锁

读写锁 (rwlock)功能特点简介读写锁实际是一种特殊的自旋锁,它把对共享资源的访问者划分成读者和写者,读者只对共享资源进行读访问,写者则需要对共享资源进行写操作。这种锁相对于自旋锁而言,能提高并发性,因为在多处理器系统中,它允许同时有多个读者来访问共享资源,最大可能的读者数为实际的逻辑CPU数。写者是排他性的,一个读写锁同时只能有一个写者或多个读者(与CPU数相关),但不能同时既有读者又有

2014-01-17 12:10:46 595

转载 临界区、互斥量、信号量、事件的区别

最早的一篇原文:http://hi.baidu.com/cnrjm/blog/item/5d217e54ff863550564e00b9.html  四种进程或线程同步互斥的控制方法1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。 2、互斥量:为协调共同对一个共享资源的单独访问而设计的。 3、信号量:为控制一个具有有限数量用户资源而设计。

2014-01-17 11:42:21 527

转载 线程同步:原子操作、锁、二元信号量、信号量、互斥量、临界区、读写锁、条件变量等

注:摘自《程序员的自我修养》相关章节。 原子操作共享数据(全局变量或堆变量)的自增(++)操作在多线程环境下会出现错误是因为这个操作(一条c语句)被编译为汇编代码后不止一条指令,因此在执行的时候可能执行了一半就被调度系统打断,去执行别的代码。我们把单指令的操作称为原子的(Atomic),因为无论如何,单条指令的执行是不会被打断的。为了避免出错,很多体系结构都提供了一些常用操作的原子

2014-01-17 11:14:15 2771 1

转载 C++预编译头文件

许多初学 VC 的朋友也许都为那么一个问题困扰过:为什么所有的 cpp 都必须 #include "stdafx.h"。也许请教了别的高手之后,他们会告诉你,这是预编译头,必须包含。可是,这到底是为什么呢?预编译头有什么用呢?这得从头文件的编译原理讲起。其实头文件并不神秘,它的全部作用,就是把自己的所有内容直接“粘贴”到相应的 #include 语句处。如果不相信的话,不妨做个实验,将

2014-01-16 15:50:37 501

转载 C中预编译详解

预处理过程扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器。可见预处理过程先于编译器对源代码进行处理。在C语言中,并没有任何内在的机制来完成如下一些功能:在编译时包含其他源文件、定义宏、根据条件决定编译时是否包含某些代码。要完成这些工作,就需要使用预处理程序。尽管在目前绝大多数编译器都包含了预处理程序,但通常认为它们是独立于编译器的。预处理过程读入源代码,检查包含预处理指令的语句

2014-01-16 15:12:05 605

转载 让程序只运行一个实例的四种方法

源代码下载:http://d.download.csdn.net/down/907655/magictong 综述:让一个程序只运行一个实例的方法有多种,但是原理都类似,也就是在程序创建前,有窗口的程序在窗口创建前,检查系统中是否已经设置了某些特定标志了,如果有说明已经有一个实例在运行了,则当前程序通知用户怎样怎样,然后程序退出,当然方法有这么多,各自也就有自己的优缺点了。 方法一

2014-01-15 16:55:40 460

转载 COM线程中模型

COM线程模型在COM相关的基础知识中应该算是难点,难的原因可能有这些:1、需要对COM其它基础知识有较深的了解,因为这个论题几乎涉及到了COM所有其它的基础知识。2、学习者得非常了解Win32本身的线程模型,因为在Windows中COM的线程模型在建立在Win32线程模型的基础上的。3、COM线程模型所引用的概念十分抽象,不好理解。如果你还没有掌握 1,2所提到的知识点,你可以马

2014-01-15 15:42:45 457

转载 关于头文件中定义的全局变量的包含

在头文件中定义了一个变量,若另一个文件包含此文件则会再产生一个相同变量的定义,在linux环境中编译时会发生如下的错误。menu.o:(.sbss+0x0): multiple definition of `is_refresh_living_time_thread_created'main.o:(.sbss+0x0): first defined here要在包含该文件的

2014-01-14 18:02:11 997

转载 MySQL 触发器简单实例

MySQL 触发器简单实例~~语法~~CREATE TRIGGER触发器名称>  --触发器必须有名字,最多64个字符,可能后面会附有分隔符.它和MySQL中其他对象的命名方式基本相象.{ BEFORE | AFTER}  --触发器有执行的时间设置:可以设置为事件发生前或后。{ INSERT | UPDATE| DELETE }  --同样也能设定触发的事件:它们可以

2014-01-14 17:45:44 496

转载 C语言 内存管理详解

伟大的Bill Gates 曾经失言:  640K ought to be enough for everybody — Bill Gates 1981  程序员们经常编写内存管理程序,往往提心吊胆。如果不想触雷,唯一的解决办法就是发现所有潜伏的地雷并且排除它们,躲是躲不了的。本文的内容比一般教科书的要深入得多,读者需细心阅读,做到真正地通晓内存管理。  1、内存分配方式

2014-01-14 12:08:27 444

转载 C++开发工程师面试题库 100~150道

101. 编写strcat函数(6分)已知strcat函数的原型是char *strcat (char *strDest, const char *strSrc);其中strDest 是目的字符串,strSrc 是源字符串。(1)不调用C++/C 的字符串库函数,请编写函数 strcat答:VC源码:char * __cdecl strcat (char * dst, co

2014-01-14 12:04:44 652

转载 C++开发工程师面试题库 150~200道

151.简述需求分析的过程和意义 152.网状、层次数据模型与关系数据模型的最大的区别是什末 153.软件质量保证体系是什末 国家标准中与质量保证管理相关的几个标准是什末 编号和全称是什末号和全称是什末 153文件格式系统有哪几种类型?分别说说win95、win98、winMe、w2k、winNT、winXP分别支持那些文件系统 154.我现在有个程序,发现在WIN

2014-01-14 12:03:38 984

转载 C++开发工程师面试题库 200~250道

199  MFC中SendMessage和PostMessage的区别?答:PostMessage 和SendMessage的区别主要在于是否等待应用程序做出消息处理。PostMessage只是把消息放入队列,然后继续执行;而SendMessage必须等待应用程序处理消息后才返回继续执行。这两个函数的返回值也不同,PostMessage的返回值表示PostMessage函数执行是否正确,而Se

2014-01-14 12:02:30 692

转载 JavaScript 既是单线程又是异步的,请问这二者是否冲突,以及有什么区别?

JS的单线程是指一个浏览器进程中只有一个JS的执行线程,同一时刻内只会有一段代码在执行(你可以使用IE的标签式浏览试试看效果,这时打开的多个页面使用的都是同一个JS执行线程,如果其中一个页面在执行一个运算量较大的function时,其他窗口的JS就会停止工作)。而异步机制是浏览器的两个或以上常驻线程共同完成的,例如异步请求是由两个常驻线程:JS执行线程和事件触发线程共同完成的,JS的执

2014-01-14 11:55:28 560

转载 JS有趣的单线程 [学习]

参考文章: http://www.blueidea.com/tech/web/2009/6951.asp                  http://www.blueidea.com/tech/web/2009/6956.aspYY: 在蓝色理想看到这两篇文章, 决定将自己的理解写出来, 让大伙帮忙瞧瞧, 看理解是否准确!一.JS的执行特点   源于单线程的

2014-01-14 11:34:58 607

转载 setTimeout和setInterval的区别你真的了解吗?

setTimeout和setInterval这两个函数, 大家肯定都不陌生, 但可能并不是每个用过这两个方法的同学, 都了解其内部的实质。甚至可能会错误的把两个实现定时调用的函数理解成了类似thread一样的东西, 认为会在一个时间片内, 并发的执行调用的函数, 似乎很好很强大,但其实并不是如此, 实际的情况是javascript都是以单线程的方式运行于浏览器的javascript引擎中的

2014-01-14 10:39:29 583

转载 setTimeout,setInterval的使用及区别

这两个方法都可以用来实现在一个固定时间段之后去执行JavaScript。不过两者各有各的应用场景。实际上,setTimeout和setInterval的语法相同。它们都有两个参数,一个是将要执行的代码字符串,还有一个是以毫秒为单位的时间间隔,当过了那个时间段之后就将执行那段代码。不过这两个函数还是有区别的,setInterval在执行完一次代码之后,经过了那个固定的时间间隔,它还会自动重复

2014-01-14 10:24:23 620

转载 怎样理解阻塞非阻塞与同步异步的区别?

因为中文语意的问题,很多时候确实会导致混用,而且语境不一样意义也可能不一样。如果只是从计算机编程这个角度说, 讨论最多的也是IO 模型 ,阻塞非阻塞和同步异步说的应该是不同的东西。阻塞非阻塞:可以简单理解为需要做一件事能不能立即得到返回应答,如果不能立即获得返回,需要等待,那就阻塞了,否则就可以理解为非阻塞。同步异步: 你总是做完一件再去做另一件,不管是否需要时间等待,这就是同步;异步

2014-01-14 09:43:36 689 1

转载 IO中同步、异步与阻塞、非阻塞的区别

一、同步与异步同步/异步, 它们是消息的通知机制1. 概念解释A. 同步所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。按照这个定义,其实绝大多数函数都是同步调用(例如sin isdigit等)。但是一般而言,我们在说同步、异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务。最常见的例子就是 SendMessage。该函数

2014-01-13 17:43:59 507

接口测试-Charles

接口测试-Charles 1、安装charles_setup.exe 2、将patcher.jar复制到charles安装目录并打开 3、点击browse选择charles安装目录下的lib目录的charles.jar

2014-01-20

空空如也

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

TA关注的人

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