自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Sunshine的专栏

认认真真 踏踏实实 做好自己的事 不断努力 Fighting~

  • 博客(52)
  • 资源 (19)
  • 收藏
  • 关注

原创 STL源码:hash_set、hash_map、hash_multiset、hash_multimap

hash_set        虽然STL只规范复杂度和接口,并不规范实现方法,但STL set多半以RB-tree为底层机制。       SGI在标准之外提供了hash_set,以hashtable作为底层机制。用set为的是能快速搜寻元素。这一点无论底层是RB-tree还是hashtable都能实现。但RB-tree有自动排序能力而hashtable没有,其结果就是set元素会自动排

2015-03-31 18:23:00 1571

原创 STL源码:hashtable

前面介绍的RB-tree红黑树中,可以看出红黑树的插入、查找、删除的平均时间复杂度为O(nlogn)。但这是基于一个假设:输入数据具有随机性。而哈希表/散列表hash table在插入、删除、查找上具有“平均常数时间复杂度”O(1);且不依赖输入数据的随机性。         hash函数会带来一个问题:可能有不同的元素被映射到相同位置,这就是碰撞问题。解决碰撞的方法很多,hash table

2015-03-31 16:52:00 1646

原创 STL源码:multimap、multiset

multiset和multimap与set、map的特性以及用法完全相同,差别之一是它允许一个键对应多个实例,因为它们的插入操作使用的是底层RB-tree的insert_equal() 而不是insert_unique()函数。第二个差别multimap不支持下标运算,而map支持。         在电话薄中,每个人可能对应多个电话号码;作家会有多本对应的著作;这都需要用multimap来表

2015-03-31 15:55:23 1293

原创 STL源码:map、set与其他顺序容器的一些比较

map        map的特性:所有元素会按照元素的键值自动排序。map所有元素都是pair,第一个元素视为键值,第二个元素视为实值;map不允许两个元素拥有相同的键值。        可以修改元素的实值,但是不能修改元素的键值(键值是const类型的),因此map的迭代器既不是constant Iterators,也不是mutale Iterators。set     s

2015-03-31 08:54:17 1532

原创 STL源码:红黑树

红黑树的性质和插入操作这部分参考文章 《红黑树操作及实现》红黑树节点结构typedef bool __rb_tree_color_type;const __rb_tree_color_type __rb_tree_red = false; // 红色为0const __rb_tree_color_type __rb_tree_black = true; // 黑色为1s

2015-03-30 15:42:07 2837

原创 avl树的C++实现

//3avl_tree_c++.h#ifndef AVL_TREE_cplusplus_H#define AVL_TREE_cplusplus_H#include using namespace std;template class AvlTree{public: AvlTree():root(NULL) {} AvlTree(const AvlTree &rhs): r

2015-03-30 11:33:26 1526

原创 私有IP地址、回环地址

私有IP地址,不需要向有关IP管理机构申请,但只能供内网使用,而且同一内网中不能将同一IP分配给不同的主机。不能用在互联网上的路由。它们可以满足安全性,同时也节省了宝贵的IP地址空间。有了私有 IP地址,需要组建网络的个人用户和企业用户只有在内部使用私有IP地址并且运行良好,那么它的灵活性、扩展性和经济性都是很好的。既然私有IP地址不能 在互联网上路由,就需要NAT,即网络地址转换。最简单的一种方

2015-03-30 09:33:25 10793

原创 AVL树(Adelson-Velskii-Landis tree)

AVL树是一个“加上了额外平衡条件”的二叉搜索树。其平衡条件的建立时为了确保树的深度为O(longN)。AVL树要求任何节点左右子树的高度相差不超过1。插入操作:左-左插入和右-右插入需要单旋转;                   左-右插入和右-左插入需要双旋转。

2015-03-27 10:34:31 1954

原创 STL源码:关联容器概论 树的概论

树的平衡         关联式容器的内部结构是一个平衡二叉树,以便获得良好的查找效率。平衡二叉树有很多类型,包括AVL-tree、RB-tree、AA-tree;其中,最广泛运用于STL的是RB-tree。         “平衡”的大致意义是:没有任何一个节点过深。不同的平衡条件,造就不同的效率表现以及不同的实现复杂度。上面提到的三类平衡二叉树均可以实现平衡二叉树,它们比一般二叉搜索树

2015-03-27 10:12:35 1260

原创 STL源码:slist

STL list是双向链表。SGI STL还提供了单向链表slist(single linked list)。这个容器不再标准范围内。        slist和list 的主要差别在于,前者迭代器是单向的Forward Iterator,后者迭代器是双向的Bidirectional Iterator,因此,slist功能会有很多限制;不过slis所耗空间小,某些操作快。        s

2015-03-27 09:32:27 1588

原创 位移操作的另类情况

在32位机器上进行左移操作,int型数a = 1左移32位的结果是什么?在vs2010,以及gcc下编译运行结果均为1,有类似下面的警告。为什么左移32位其值不变?警告:1>------ 已启动生成: 项目: test_C++, 配置: Debug Win32 ------1> test.cpp1>test.cpp(10): warning C4293: “>>”: Shift

2015-03-26 09:48:49 2470

原创 linux的COW(Copy-On-Write)

fork()后,子进程是父进程的副本。在fork之后exec之前两个进程用的是相同的物理空间(内存区),子进程的代码段、数据段、堆栈都是指向父进程的物理空间,也就是说,两者的虚拟空间不同,但其对应的物理空间是同一个。当父子进程中有更改相应段的行为发生时,再为子进程相应的段分配物理空间,如果不是因为exec,内核会给子进程的数据段、堆栈段分配相应的物理空间(至此两者有各自的进程空间,互不影响),而代

2015-03-25 20:25:45 2317

原创 STL源码:priority_queue

优先队列完全以底部容器为依据,加上heap处理规则,实现很简单。缺省下以vector为底部容器,利用大根堆。它是一个有权值概念的queue(头出尾进,无其他存取元素的途径)。         和queue、stack一样,是容器适配器,详见queue#ifndef __STL_LIMITED_DEFAULT_TEMPLATEStemplate ,class Compare =

2015-03-25 19:45:29 1392

原创 STL源码:heap

heap不归属STL容器组件,它是priority queue的幕后英雄。为什么用二叉大根堆作为优先队列的底层机制?        答:优先队列允许用户以任何次序将任何元素插入容器,但取出时要从优先权最大的元素开始取。二叉大根堆具有这样的特性,因此作为优先队列的底层机制。        关于二叉堆实现优先队列的可行性见《二叉堆的插入删除等操作C++实现》能不能用li

2015-03-25 17:05:58 1311

原创 STL源码:stack

stack是先进后出的。和queue一样:(1)默认使用deque作为其底层元素;                            (2)它也是容器适配器(详见queue);                            (3)没有迭代器;                             (4)可以使用list作为底层容器。STL queue源码#

2015-03-25 16:54:39 1350

原创 STL源码:queue

queue是先进先出(FIFO)的数据结构,有两个口:允许从尾部加入元素、取得头部的元素。没有其他任何方法可以存取queue的其它元素,即queue不允许遍历行为。      SGI STL以deque作为缺省情况下的queue底部结构,queue的实现很简单,代码十分简短。     queue没有迭代器。为什么STL queue称为容器适配器而不是容器?       

2015-03-25 16:15:17 2650

原创 STL源码:deque

deque概述         vector是单向开口的连续线性空间,deque是双向开口(在头尾分别做元素删除和插入操作)的连续线性空间。从技术上说,vector也可以在头尾两端操作元素,但是在头部操作的效率很差。         deque和vector的最大差异:(1)deque允许在头部快速进行元素插入或删除操作;(2)deque没有容量(capacity)的概念,因为它是动态地以

2015-03-25 09:49:50 2234

原创 STL源码:list

相较于vector的连续线性空间,list就显得复杂许多,它的好处是每次插入或删除一个元素,就配置或释放一个元素空间。因此,list对于空间的运用有绝对的精准,一点也不浪费。而且,对于任何位置的元素插入或元素移除,list永远是常数时间。      list不仅是一个双向链表,而且还是一个环状双向链表,因此迭代器必须具备前移和后移能力,所以list使用Bidirectional Iterato

2015-03-24 14:42:37 2096

原创 《unix网络编程》(6)网络字节序 大端模式和小端模式

大端模式和小端模式的定义a) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。b) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。c) 网络字节序:TCP/IP各层协议将字节序定义为Big-Endian,因此TCP/IP协议中使用的字节序通常称之为网络字节序。高/低字节有一个32位无符号

2015-03-24 10:03:04 1948

原创 STL源码:空间配置器(三)内存的配置和释放、SGI的两级适配器

空间的配置与释放std::alloc        之前了解了内存配置后的对象构造和内存释放前的对象析构行为,现在分析内存配置和释放。对象构造前的空间配置和对象析构后的空间释放,由负责,SGI对此的设计哲学如下:        1. 向 system heap 要求空间。        2. 考虑多线程(multi-threads)状态。        3. 考虑内存不足时

2015-03-23 10:41:13 2125

原创 STL源码:空间配置器(二)构造和析构construct()/destroy()

#ifndef __SGI_STL_INTERNAL_CONSTRUCT_H #define __SGI_STL_INTERNAL_CONSTRUCT_H // 欲使用 placement new,需先包含此文件 #include __STL_BEGIN_NAMESPACE // 以下是 des

2015-03-23 10:22:20 1575

原创 STL源码:空间配置器(一)SGI的空间配置器

SGI标准的空间配置器,std::allocator         虽然 SGI 也定义有一个符合部分标准、名为 allocator 的配置器,但 SGI 从未用过它,也不建议我们使用。主要原因是效率不佳,只把 C++ 的 ::operator new 和 ::operator delete 做一层薄薄的包装而已,根本没有考虑任何效率的强化。// 我们不赞成包含此文件,这是原始的 HP

2015-03-23 10:14:49 1319

原创 《unix网络编程》(5)常见的因特网协议应用

2015-03-22 21:09:54 1394

原创 《unix网络编程》(4)缓冲区大小及限制

介绍影响IP数据报大小的限制。数据报大小        IPv4的数据报最大大小是65535字节,包括IPv4首部。因为首部中说明大小的字段(总长度字段)为16位。        IPv6的数据报最大大小是65575字节,包括40字节的IPv6首部。同样是展16位,但是IPv6首部大小不算在里面,所以总大小比IPv4大一个首部(40字节)。MTU        最大传输单元(m

2015-03-22 20:40:26 2053

原创 《unix网络编程》(3)TCP连接的建立和终止

TCP通过为每个字节关联一个序列号对所发送的数据进行排序。         为了很好地理解connect、accept、close这三个函数并使用netstat程序调试TCP应用,必须了解TCP建立和终止并掌握TCP的状态转换图。三次握手        (1)服务器必须准备好接受外来连接。通常通过socket、bind和listen函数来完成,称之为被动打开(passive o

2015-03-22 18:02:13 2060

原创 new与malloc的区别和联系

两者的相同之处        1、它们都可以申请动态内存和释放内存。C++中申请动态内存和释放内存用new/delete或者malloc/free都可以,而且它们的存储方式相同。        2、new与malloc动态申请的内存都位于堆中,无法被操作系统自动收回,要有相应的delete或者free来释放空间;对于内置数据类型,如int、char型,其效果是一样的。两者的区别

2015-03-22 16:00:25 6576

原创 STL源码:内存基本处理工具

STL定义了五个全局函数,作用于没有初始化空间上。前两个函数时用于构造的constr() 和用于析构的destroy()。另外三个是uninitialized_copy(),uninitialized_fill(),uninitialized_fill_n(),分别对应于高层次函数copy()、fill()、fill_n()——这些都是STL算法,要使用这三个底层次函数,应该包含,不过SGI将其实

2015-03-19 17:08:57 1463

原创 STL源码:vector

vector与array的相同与不同:相同:          vector的数据安排以及操作方式与array很相似。不同:         两者的差别主要是在空间运用的灵活上。         array是静态空间,一旦配置了就不能改变;如果要换个大的空间,就要由客户自己来完成:重新申请新空间,然后将元素都从旧地址搬移到新地址,再将原空间释放。         vec

2015-03-19 15:22:21 2305

原创 基础排序算法总结

一、冒泡排序冒泡排序的普通思路:         比较相邻的两个元素,交换元素使得小元素在前、大元素在后。         第一次排序将对n个元素进行n-1次比较,将最大的元素放到了数组的最后边;         第二次排序将剩下的n-1个元素进行n-2次比较,将第二大的数放在数组的倒数第二个位置;         依次进行该过程;         第n-1趟则所有元素

2015-03-17 20:06:33 3123

原创 直接选择排序

直接选择排序和直接插入排序类似,都将数据分为有序的区域和无序的区域。所不同的是直接插入排序是将无序区的第一个元素直接插入到有序区以形成一个更大的有序区,而直接选择排序是从无序区选一个最小的元素直接放到有序区的最后。void Swap(int &a, int &b) { int tmp = a; a = b; b = tmp;}void SelectSort(int a[], int

2015-03-17 16:22:50 1807 1

原创 不借助变量交换两个数

交换两个数在排序算法中用的很多:冒泡排序中 、插入排序中等等。正常的交换两个数是借助一个变量tmp:void Swap(int &a, int &b) { int tmp = a; a = b; b = tmp;}在面试题中有这样的题目“不借助第三个变量,交换两个数”//A方法void Swap(int &a, int &b) { a = a + b;b = a - b;

2015-03-17 15:36:31 2071

原创 冒泡排序的改进

通常的冒泡排序        假设按照升序排序。        设数组大小为n;比较相邻的两个数,如果第一个大于第二个,则交换两个数据;这样,第一个排序后,比较了n-1次,最大的数在数组末尾。然后n = n- 1,在n不为0情况下继续排序,否则排序完成。void bubble_sort1(int a[], int size) { int i; for (i = 0; i <

2015-03-17 11:32:01 2354

原创 《unix网络编程》(2)网络模型和协议概述

OSI模型OSI(open system interconnection)开放系统互联模型是由ISO(国际标准化组织,International Organization for Standardization)定义的网络分层模型,共七层。         网络层由IPv4和IPv6两个协议处理。可以选择的传输层协议有TCP和UDP。上图的TCP与UDP之间留有空隙,表明网络应用可

2015-03-16 20:57:18 1612

原创 python提取网页的特定内容(正则表达式实现)

关于正则表达式参考正则表达式python可以很方便地抓取网页并过滤网页的内容,那么,如何从如下的网页中提取csdn文章的标题“《unix网络编程(卷1)源代码的使用方法》”。 window.quickReplyflag = true; 《unix网络编程(卷1)》源代码的使

2015-03-16 19:33:19 31550

原创 vi/vim常用命令

工作模式插入命令a 在光标后附加文本A 在本行行尾附加文本i 在光标前插入I 在本行行首插入文本o 在光标下面插入新的一行O 在光标上面插入新的一行定位命令h 左移一个字符/ 向左的箭头键j 下移一行 / 向下的箭头键k 上移一行 / 向上的箭头键l 右移一个字符 / 向右的箭头键$ 移动到行尾0(数字零)  

2015-03-15 21:29:13 1437

原创 《unix网络编程》(1)源代码的使用方法

《unix网络编程(卷1)》源码下载地址可以从这里免费下载源码Ubuntu下源码的使用方法将下载的源码在Ubuntu下解压;控制台内进入解压后源码所在的目录。打开文件README,其内容如下:QUICK AND DIRTY===============Execute the following from the src/ directory: ./configu

2015-03-15 20:27:18 2680

原创 Python爬虫(一):基本概念

网络爬虫的定义         网络爬虫(Web Spider,又被称为网页蜘蛛,网络机器人,又称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁,自动索引,模拟程序或者蠕虫。如果把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛。        网络蜘蛛是通过网页的链接地址来寻找网页的。从网站某一个页面(通常是首页)

2015-03-15 11:53:48 3228

转载 写给准备参加秋招的学弟学妹们

[-]一前言二面试简介三操作系统计算机网络数据库四算法 和 数据结构五C六JAVA七linux八逻辑分析题 智力题九行业了解十设计模式十一海量数据十二写在最后十三链接一、前言写给准备参加秋招的学弟学妹们        好久没写blog了,可能工作比较忙的原因吧。工作之后也略显疲惫,有点懒,不是很愿意动笔。不过由于今年秋招的临近,于是决

2015-03-15 10:44:08 2789 3

转载 千千万万的IT开发工程师路在何方

已经找不到该文章的最初出处了,有找到的人请告诉我,谢谢~~千千万万的IT开发工程师路在何方2007-06-25 21:41恭喜,你选择开发工程师作为自已的职业!悲哀,你选择开发工程师作为自已的职业!本文所指的开发工程师,仅指程序开发人员和以数字电路开发为主的电子工程师。当你选择计算机或者电子、自控等专业进入大学时,你本来还是有机会从事其它行业的,可你毕业时执迷不

2015-03-14 21:58:25 1694

原创 程序猿的简历一

徐舒,刻桌(http://www.kezhuo365.com)创始人阅读过5000+的简历(主要是社招),面试过几百个人,研发,产品,运营,市场,数据分析,测试,UIUE,HR都面试过。从面试者的角度,讲一下我个人对一份简历的预期和遇到的常见问题;(纯属个人喜好,不代表任何公司立场)首先,互联网行业简历书写没有定法,阅读你简历的都是一帮睡眼惺忪穿着人字拖的人,不需要你像给B

2015-03-13 17:04:11 2006

多模式匹配算法实现及测试代码

基于NFA状态和基于DFA状态的AC(Aho—Corasiek)算法,WM(Wu-Manber)算法

2016-03-03

jsoncpp-src-0.5.0.rar.gz可正确编译的源文件

在这里http://sourceforge.net/projects/jsoncpp/?source=typ_redirect下载的源码在编译安装时有问题,因为README.txt是错误的,所以我这里的源码提供了正确的编译方式。

2015-12-11

dwr实现的服务器推demo

这是一个十分简单的demo,利用dwr实现了一个服务器推程序,客户端jsp页面不用刷新可以接收到服务器发送过来的消息并显示。多多指教。

2015-12-08

DWR中文文档

DWR是一个开放源码的使用Apache许可协议的解决方案,它包含服务器端Java库、一个 DWR servlet以及 JavaScript库。虽然 DWR不是 Java平台上唯一可用的Ajax-RPC 工具包,但是它是最成熟的,而且提供了许多有用的功能。从最简单的角度来说,DWR是一个引擎,可以把服务器端Java对象的方法公开给JavaScript 代码。使用DWR 可以有效地从应用程序代码中把Ajax的全部请求 -响应循环消除掉。这意味着客户端代码再也不需要直接处理XMLHttpRequest对象或者服务器的响应。不再需要编写对象的序列化代码或者使用第三方工具才能把对象变成XML。甚至不再需要编写servlet代码把 Ajax请求调整成对 Java域对象的调用。

2015-12-08

2016年 58校园招聘笔试

2016年 58校园招聘笔试 哈尔滨站 笔试题目

2015-12-03

2016美团笔试-计算机校园招聘笔试题目

2016美团笔试-计算机校园招聘笔试题目,成都站在线笔试题目

2015-12-03

gethostbynameAndgetservbyname.tar.gz

gethostbynameAndgetservbyname.tar.gz 使用gethostbyname和getservbyname的获取时间程序。《unix网络编程》第11章程序。

2015-04-22

使用select的UDP和TCP回射程序

《unix网络编程》第8章最后例子,使用select的UDP和TCP回射程序

2015-04-16

libnids-1.24.tar.gz

libnids-1.24.tar.gz 官网地址http://libnids.sourceforge.net/

2015-04-15

udp客户服务器端回射完整例子

《unix网络编程》第八章8.1例子,使用UDP套接字开发的最简单的客户服务器例子

2015-04-14

使用epoll的客户服务器端例子

客户端使用的是tcpclipoll.c,服务器使用的是tcpsrvepoll.c.给出了Makefile文件

2015-04-11

使用poll函数的的客户服务器程序

《unix网络编程》第六章,使用poll函数的客户服务器程序

2015-04-06

《unix网络编程》使用select的客户服务器端例程

《unix网络编程》第六章,使用select的客户服务器程序

2015-04-05

unix网络编程第5章客户服务器最终代码

这个是unix网络编程第5章最终版本的程序代码,含有makefile

2015-04-04

unix网络编程(卷一)源码

unix网络编程第一卷的源码,是官方未改变版本的

2015-03-15

Visual_Assist_X_10.8.2036.0破解版以及破解方法

Visual Assist X是一款非常好的Microsoft Visual Studio插件,可以支持Microsoft Visual Studio 2003,Microsoft Visual Studio 2005,Visual Studio 2008,Microsoft Visual Studio 2010,支持C/C++,C#,ASP,VisualBasic,Java和HTML等语言,能自动识别各种关键字、系统函数、成员变量、自动给出输入提示、自动更正大小写错误、自动标示错误等,有助于提高开发过程的自动化和开发效率。不过该插件是收费的,只提供适用版本,这里给出该工具下载方法和破解方法。

2014-12-27

图书管理系统课程设计报告

图书管理系统课程设计报告,使用php语言mysql数据库,是课程设计的报告

2013-12-07

用Javascript 编写 HTML在线编辑器

用Javascript 编写 HTML在线编辑器

2013-12-07

空空如也

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

TA关注的人

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