哈希表
散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。
给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数[1]
包含min,push,pop函数的栈,时间为O(1)
#include<iostream>
#include<stack>
using namespace std;
template <typename T> classStackWithMin
{
public:
StackWithMin(void);
~StackWithMin(void);
void push(const T& node);
void pop();
T& min const();
private:
stack<T> m_data;
stack<T> m_min;
};
template <typename T> voidStackWithMin::push(const T& value)
{
m_data.push(value);
if(m_min.size()==0||value<m_min.top())
{
m_min.push(value);
}
else m_min.push(m_min.top());
}
template <typename T> voidStackWithMin<T>::pop()
{
assert(m_data.size()>0&&m_min.size()>0);
m_data.pop();
m_min.pop();
}
template <typename T> const T&StackWithMin<T>::min() const
{
assert(m_data.size()>0&&m_min.size()>0);
return m_min.top();
}
采用模板类得好处:
1)可以用来创建动态增长和减小的数据结构
2)它是类型无关的,具有高度的可复用性
3)它在编译时而不是运行时检查数据类型,保证了类型安全
4)与平台无关,可移植性
5)可用于基本数据类型
泛型的好处
Java 语言中引入泛型是一个较大的功能增强。不仅语言、类型系统和编译器有了较大的变化,以支持泛型,而且类库也进行了大翻修,所以许多重要的类,比如集合框架,都已经成为泛型化的了。
这带来了很多好处:
1,类型安全。 泛型的主要目标是提高 Java 程序的类型安全。通过知道使用泛型定义的变量的类型限制,编译器可以在一个高得多的程度上验证类型假设。没有泛型,这些假设就只存在于程序员的头脑中(或者如果幸运的话,还存在于代码注释中)。
2,消除强制类型转换。 泛型的一个附带好处是,消除源代码中的许多强制类型转换。这使得代码更加可读,并且减少了出错机会。
3,潜在的性能收益。 泛型为较大的优化带来可能。在泛型的初始实现中,编译器将强制类型转换(没有泛型的话,程序员会指定这些强制类型转换)插入生成的字节码中。但是更多类型信息可用于编译器这一事实,为未来版本的 JVM 的优化带来可能。由于泛型的实现方式,支持泛型(几乎)不需要 JVM 或类文件更改。所有工作都在编译器中完成,编译器生成类似于没有泛型(和强制类型转换)时所写的代码,只是更能确保类型安全而已。
TCP是面向连接的,所谓面向连接,就是当计算机双方通信时必需先建立连接,然后数据传送,最后拆除连接三个过程
并且TCP在建立连接时又分三步走:
第一步是请求端(客户端)发送一个包含SYN即同步(Synchronize)标志的TCP报文,SYN同步报文会指明客户端使用的端口以及TCP连接的初始序号;
第二步,服务器在收到客户端的SYN报文后,将返回一个SYN+ACK的报文,表示客户端的请求被接受,同时TCP序号被加一,ACK即确认(Acknowledgement)。
第三步,客户端也返回一个确认报文ACK给服务器端,同样TCP序列号被加一,到此一个TCP连接完成。然后才开始通信的第二步:数据处理。
Memcpy原型
void *memcpy1(void *desc,const void *src,size_t size)
{
if((desc == NULL) && (src == NULL))
{
return NULL;
}
unsigned char *desc1 = (unsigned char*)desc;
unsigned char *src1 = (unsigned char*)src;
while(size-- >0)
{
*desc1 = *src1;
desc1++;
src1++;
}
return desc;
}
cpu读取顺序
它是按堆栈的顺序顺序执行的,至于栈中的顺序是按优先级排
cache叫做高速缓冲存储器,是集成在CPU中的,存取速度最快,其次是内存,也就是你主板上插的那个条条,速度最慢的是外存,也就是硬盘
三种云服务模式
IaaS(Infrastructure as aService)基础设施即服务
SaaS(Software as aService)软件即服务
PaaS(Platform as aService)平台即服务
java是一种解释型语言,但它的源文件要编译成java字节码即.class文件,然后在java虚拟机里运行.
jsp是一种WEB开发技术,它在特定的WEB容器里运行,WEB容器先把jsp转化成Servlet文件(即.java文件),然后编译成.class文件然后在java虚拟机里运行。
javascript是一种浏览器脚本语言,它被浏览器解释执行.
这三种语言都采用java的语法。
构造函数,是一种特殊的方法。主要用来在创建对象时初始化对象,即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。特别的一个类可以有多个构造函数,可根据其参数个数的不同或参数类型的不同来区分它们即构造函数的重载。
大数据的特征 关于大数据的特征,业内专业认识人士表示,可以用很多词语来表示。比较有代表性的即为2001年DougLaney最先提出“3V”模型,包括数量(Volume)、速度(Velocity)和种类 (Variety)【1】。除此之外,在3V的基础上又提出了一些新的特征。关于第四个V的说法不一,IDC 认为大数据还应当具有价值性(Value),大数据的价值往往呈现出稀疏性的特点。而IBM 认为大数据必然具有真实性(Veracity)。维基百科对大数据的定义则简单明了:大数据是指利用常用软件工具捕获、管理和处理数据所耗时间超过可容忍时间的数据集【2】。如今,业内人士已经将其扩展到了11个V,包括有效性、可见性等。 下面就目前使用最多的“4V”模型进行分析。“4V”特征主要体现在以下方面: 1.规模性(volume) Volume指的是数据巨大的数据量以及其规模的完整性。数据的存储TB扩大到ZB。这与数据存储和网络技术的发展密切相关。数据的加工处理技术的提高,网络宽带的成倍增加,以及社交网络技术的迅速发展,使得数据产生量和存储量成倍增长。实质上,在某种程度上来说,数据的数量级的大小并不重要,重要的是数据具有完整性。数据规模性的应用有如下的体现,比如对每天12 tb的tweets进行分析,了解人们的心理状态,可以用于情感性产品的研究和开发;基于Facebook上成千上万条信息的分析,可以帮助人们处理现实中的朋友圈的利益关系。
2.高速性(Velocity) Velocity主要表现为数据流和大数据的移动性。现实中则体现在对数据的实时性需求上。随着移动网络的发展,人们对数据的实时应用需求更加普遍,比如通过手持终端设备关注天气、交通、物流等信息。高速性要求具有时间敏感性和决策性的分析——能在第一时间抓住重要事件发生的信息。比如,当有大量的数据输入时(需要排除一些无用的数据)或者需要马上做出决定的情况。比如:一天之内需要审查500万起潜在的贸易欺诈案件;需要分析
5亿条日实时呼叫的详细记录,以预测客户的流失率。 3.多样性(variety) Variety指有多种途径来源的关系型和非关系型数据。 这也意味着要在海量、种类繁多的数据间发现其内在关联。互联网时代,各种设备通过网络连成了一个整体。进入以互动为特征的Web2.0时代,个人计算机用户不仅可以通过网络获取信息,还成为了信息的制造者和传播者。这个阶段,不仅是数据量开始了爆炸式增长,数据种类也开始变得繁多【3】。除了简单的文本分析外,还可以对传感器数据、音频、视频、日志文件、点击流以及其他任何可用的信息。比如,在客户数据库中不仅要关注名称和地址,还包括客户所从事的职业、兴趣爱好、社会关系等。利用大数据多样性的原理就是:保留一切你需要的对你有用的信息,舍弃那些你不需要的;发现那些有关联的数据,加以收集、分析、加工,使得其变为可用的信息。 4.价值性(value) Value体现出的是大数据运用的真实意义所在。其价值具有稀缺性、不确定性和多样性。“互联网女皇”Mary Meeker在2012年互联网发展趋势中,用一幅生动的图像来描述大数据。一张是整整齐齐的稻草堆,另外一张是稻草中缝衣针的特写。寓意通过大数据技术的帮助,可以在稻草堆中找到你所需要的东西,哪怕是一枚小小的缝衣针。这两幅图揭示了大数据技术一个很重要的特点,价值的稀疏性【4】。
Linux版本
centos与rhel类似。
fedora,这个版本每次发行都比较冒进,以至于很多驱动程序都不能很好的配置,但最新的fedora10还是很保守和稳定的。yu软件源基于rpm包管理
,安装软件很方便。
ubuntu,基于debian,桌面环境以gnome为主,是目前最流行的linux个人桌面,它的优点是配置起来非常简单,安装完系统之后,只要硬件不是太新,基本不用进行其他配置,硬件都可以识别并安装好驱动。而且其apt更新源服务器中的软件非常丰富,只要打一条命令,就可以自动从网络下载安装所需软件。ubuntu安装方便,甚至于可以使用wubi将linux安装在windows分区。ubuntu还有很多衍生版本,包括Kubuntu(桌面采用KDE,较为华丽),xubuntu(采用xfce,要求配置较低),eubuntu(面向儿童和教育),用户可以根据需求,偏好,和硬件配置进行选择。
suse,被誉为最漂亮的linux发行版本,当然,其本质和其他版本都是一样的,只是在窗口美工上开发者下了一定功夫,而且获得华丽的同时当然也需要付出更高的系统资源占用。其他的linux版本通过一些改造,完全是可以实现suse的效果的。
redflag,中科院开发的linux版本,主要面向政府用户,其个人桌面版免费,这个版本的美工上与windows非常接近,是使用者的入门难度降低,但实际上桌面也是基于KDE的,很平常。