上一页 1 ··· 8 9 10 11 12 13 14 15 16 ··· 30 下一页
摘要: 0.参考文献:http://jacki6.iteye.com/blog/774866http://baike.baidu.com/view/402020.htm1.范式说明1.1第一范式(1NF)无重复的列 所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能同时有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。简而言之,第一范式就是无重复的列。 在任何一个关系数据库中,第一范式(1NF)是对.. 阅读全文
posted @ 2012-05-17 13:07 xwdreamer 阅读(16744) 评论(4) 推荐(9) 编辑
摘要: 题目:实现函数double Power(double base,int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大树问题。这道题目有以下几点需要注意:0的0次方是无意义的,非法输入0的负数次方相当于0作为除数,也是无意义的,非法输入base如果非0,如果指数exponent小于0,可以先求base的|exponent|次方,然后再求倒数判断double类型的base是否等于0不能使用==号。因为计算机表述小树(包括float和double型小数)都有误差,不能直接使用等号(==)判断两个小数是否相等。如果两个数的差的绝对值很小,那么可以认为两个dou 阅读全文
posted @ 2012-05-15 22:19 xwdreamer 阅读(3468) 评论(2) 推荐(1) 编辑
摘要: 题目1:写一个函数,输入n,其斐波那契数列的第n项。斐波那契数列的定义如下:方法1:使用递归解,时间复杂度是n的指数级别斐波那契数列的定义就是递归的,我们根据定义可以很简单的写出代码。代码如下:View Code #include<iostream>#include<stdlib.h>using namespace std;//f(n)={0,1,1,2,3...} n>=0int Fibonacci(int n){ if(n<=0) return 0; if(n==1) return 1; return Fibonacci(n-1)+Fibona... 阅读全文
posted @ 2012-05-15 14:58 xwdreamer 阅读(5822) 评论(0) 推荐(1) 编辑
摘要: 题目:创建一个类,类中的数据成员时一棵二叉搜索树,对外提供的接口有添加结点和删除结点这两种方法。用户不关注二叉树的情况。要求我们给出这个类的结构以及实现类中的方法。思路添加结点:添加结点其实很容易,我们只需要找到结点所行对应的位置就可以了,而且没有要求是平衡的二叉搜索树,因此每次添加结点都是在叶子结点上操作,不需要修改二叉搜索树整体的结构。要找出添加节点在二叉搜索树中的位置,可以用一个循环解决。判断插入结点与当前头结点的大小,如果大于头结点则继续搜索右子树,如果小于头结点则继续搜索左子树。直到搜索到叶子结点,此时进行插入结点操作。如果插入的结点等于二叉搜索树中当前某一结点的值,那么退出插入操作 阅读全文
posted @ 2012-05-15 12:43 xwdreamer 阅读(1498) 评论(3) 推荐(0) 编辑
摘要: 题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数。class CMyString{public:CMyString(char *pData=NULL);//构造函数CMyString(const CMyString& str);//拷贝构造函数~CMyString();//析构函数private:char* m_pData;//数据域,字符指针};介绍重载赋值 重载操作符是一些函数,其名字为关键字operator后紧跟需要重载的运算符,比如"operator="表示需要重载"="。像任何其他函数一样,操作符函数有一个返回值和 阅读全文
posted @ 2012-05-14 21:58 xwdreamer 阅读(5714) 评论(2) 推荐(5) 编辑
摘要: 0.参考文献:hash算法 (hashmap 实现原理)Java实现的散列表1.HashMap的数据结构 数组的特点是:寻址容易,插入和删除困难;而链表的特点是:寻址困难,插入和删除容易。那么我们能不能综合两者的特性,做出一种寻址容易,插入删除也容易的数据结构?答案是肯定的,这就是我们要提起的哈希表,哈希表有多种不同的实现方法,我接下来解释的是最常用的一种方法——拉链法,我们可以理解为“链表的数组”,如图: 从上图我们可以发现哈希表是由数组+链表组成的,一个长度为16的数组中,每个元素存储的是一个链表的头结点。那么这些元素是按照什么样的规则存储到数组中呢。一般情况是通过hash(key)%.. 阅读全文
posted @ 2012-05-14 14:26 xwdreamer 阅读(49513) 评论(10) 推荐(14) 编辑
摘要: 关于volatile我们知道,在Java中设置变量值的操作,除了long和double类型的变量外都是原子操作,也就是说,对于变量值的简单读写操作没有必要进行同步。这在JVM1.2之前,Java的内存模型实现总是从主存读取变量,是不需要进行特别的注意的。而随着JVM的成熟和优化,现在在多线程环境下volatile关键字的使用变得非常重要。在当前的Java内存模型下,线程可以把变量保存在本地内存(比如机器的寄存器)中,而不是直接在主存中进行读写。这就可能造成一个线程在主存中修改了一个变量的值,而另外一个线程还继续使用它在寄存器中的变量值的拷贝,造成数据的不一致。要解决这个问题,只需要像在本程序中 阅读全文
posted @ 2012-05-13 22:45 xwdreamer 阅读(1063) 评论(2) 推荐(0) 编辑
摘要: 参考文献:Java:重写equals()和hashCode()为什么重写equals方法,一定要重写HashCode方法?重写equals和hashCode《CoreJava I 8》第5.2节——Object:所有类的超类。正文代码示例View Code package v1ch05.EqualsTest;import java.util.*;/** * This program demonstrates the equals method. * @version 1.11 2004-02-21 * @author Cay Horstmann */public class EqualsTes 阅读全文
posted @ 2012-05-12 14:17 xwdreamer 阅读(2048) 评论(0) 推荐(0) 编辑
摘要: 参考文献:object.wait()和object.notify()和object.notifyall()正文wait、notify和notifyAll方法是Object类的final native方法。所以这些方法不能被子类重写,Object类是所有类的超类,因此在程序中有以下三种形式调用wait等方法。wait();//方式1:this.wait();//方式2:super.wait();//方式3void notifyAll()解除所有那些在该对象上调用wait方法的线程的阻塞状态。该方法只能在同步方法或同步块内部调用。如果当前线程不是锁的持有者,该方法抛出一个IllegalMonito 阅读全文
posted @ 2012-05-12 00:24 xwdreamer 阅读(32239) 评论(1) 推荐(2) 编辑
摘要: 搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。假设目前一个日志文件中有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个。一个查询串的重复度越高,说明查询它的用户越多,也就是越热门),请你统计最热门的10个查询串,要求使用的内存不能超过1G。1000万条记录,每条记录最大为255Byte,那么日志文件最大有2.5G左右,大于1G内存。但是题目中又提到这样的1000万条记录中有许多是重复的,出去重复的话只有300万条记录,存储这样的300万条记录需要0.75G左右的内存,小于1G内存。那么我们可以考虑将这 阅读全文
posted @ 2012-05-09 21:29 xwdreamer 阅读(2023) 评论(0) 推荐(1) 编辑
摘要: 前言这道题目网上到处都是,但是好多都没有讲清楚,然后大家又相互转载,错误泛滥,现在我来完善这道题目。题目:每一个ip访问百度,其ip地址都会被记录到后台日志文件中,假设一天的访问日志有100G,求出一天中访问百度次数最多的ip地址,可以使用的内存大小是1G。分析首先解决大文件问题,也就是如何处理100G的一个大文件,这个通常的解决方法就是将大文件分解成许多小文件。我们可以通过对IP地址求hash然后对1024取模将一个100G的大文件分解成1024个小文件(file0,file1......file1023),注意这里的1024个文件并不是平均分的,也就是每个文件大小并不是(100G/1204 阅读全文
posted @ 2012-05-09 20:29 xwdreamer 阅读(5729) 评论(6) 推荐(1) 编辑
摘要: 题目:数组al[0,mid-1]和al[mid,num-1]是各自有序的,对数组al[0,num-1]的两个子有序段进行merge,得到al[0,num-1]整体有序。要求空间复杂度为O(1)。注:al[i]元素是支持'<'运算符的。分析代码实例:View Code #include<iostream>#include<stdlib.h>#include<stack>using namespace std;void MergeSort(int arry[],int len){ int left=0; int mid=len/2; int 阅读全文
posted @ 2012-05-08 16:42 xwdreamer 阅读(1840) 评论(0) 推荐(0) 编辑
摘要: 1.替换空格题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“We are happy.”,则输出“We%20are%20happy.”。1.1分析将长度为1的空格替换为长度为3的“%20”,字符差的产度变长。如果允许我们开辟一个新的数组来存放替换空格后的字符串,那么这道题目就非常简单。设置两个指针分别指向新旧字符串首元素,遍历原字符串,如果碰到空格就在新字符串上填入“%20”,否则就复制元字符串上的内容。但是如果面试官要求在原先的字符串上操作,并且保证原字符串有足够长的空间来存放替换后的字符串,那么我们就得另想方法。如果从前往后替换字符串,那么保存在空格后面的字符串肯定会 阅读全文
posted @ 2012-05-08 14:20 xwdreamer 阅读(2338) 评论(1) 推荐(0) 编辑
摘要: 题目:输入n个整数,找出其中最小的k个数。例如输入{4,5,1,6,2,7,3,8}这8个数字,则最小的4个数字是1,2,3,4。分析这道题目跟上一道:面试题29:数组中出现次数超过一半的数字类似,都是通过Partition()的思路来解题。通过Partition()获得index,判断index==k,如果等于k,那么表明在index左边的k个数都小于index所指向的数,并且也小于index右边的数。那么就找出了本题所要求的最小的k个数。如果index>k,则第k小的数在[start,index-1]之间,如果index<k,则第k小的数在[index+1,end]之间。知道最 阅读全文
posted @ 2012-05-08 11:00 xwdreamer 阅读(929) 评论(0) 推荐(0) 编辑
摘要: 题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。分析:如果一个数字才数组中出现的次数超过了数组长度的一半,那么对这个数组进行排序,位于数组中间位置的那个数就是出现次数超过一半的那个数。对数组排序的时间复杂度是O(nlog(n)),但是对于这道题目,还有更好的算法,能够在时间复杂度O(n)内求出。我们写过快速排序算法,其中的Partition()方法是一个最重要的方法,该方法返回一个index,能够保证index位置的数是已排序完成的,在index左 阅读全文
posted @ 2012-05-08 10:53 xwdreamer 阅读(2588) 评论(0) 推荐(0) 编辑
摘要: 题目:一个数组是由一个递增数列右移若干位形成的,比如{4,5,1,2,3}是由{1,2,3,4,5}左移两位形成的,在这种数组中查找某一个数。这道题其实是前面介绍的一道题目:面试题8:旋转数组的最小数字的一个变种。解题思路如下:首先通过“面试题8:旋转数组的最小数字”这道题目中获取元素分裂点,时间复杂度为O(log(n))因为旋转数组是由递增数组右移得到,因此旋转数组中的第一个元素是整个数组的中间元素,比较待查找元素与第一个元素,如果待查找元素大于等于第一个元素,表明待查找元素在前半段有序数组中;如果不是这待查找元素在后半段数组中。判断待查找元素所在的有序数组以后,我们通过一个简单的二分查找就 阅读全文
posted @ 2012-05-07 19:09 xwdreamer 阅读(5118) 评论(0) 推荐(0) 编辑
摘要: 题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增的排序的数组的一个旋转,输出旋转数组的最小元素。例如输入{1,2,3,4,5}的一个旋转为{3,4,5,1,2},该数组的最小值为1。分析最直观的想法就是顺序遍历一次数组,就能够找出最小的数字,这样的时间复杂度是O(n),当时我也是这么跟面试官说的,我说遍历一次不就OK了吗?面试官说“如果你觉得遍历一次是你觉得最好的,那就跟我说!”我立马说不是的,让我想想,应该还有其他更有的方法。是的,既然叫做旋转数组,那么我们就需要利用好旋转数组的特性。看到这样的旋转数组查找最小数,我们会不会潜意识里面就想到了二分查找呢。确 阅读全文
posted @ 2012-05-07 15:41 xwdreamer 阅读(4710) 评论(4) 推荐(1) 编辑
摘要: 参考文献:http://blog.minidx.com/2008/02/03/468.html正文在面试的时候二分查找是用的比较多一种查找算法,如何在面试官面前快速准确得的写出代码决定你是否能够被录取。以前一直以为二分查找很简单,所以就没怎么重视,但是真要在面试官面前对着黑板手写出来,还是漏洞百出。今天自己在电脑面前敲出了二分查找的代码,也花了将近半个小时。对于这种基础排序查找算法,还是得好好重视。二分查找的时间复杂度是O(log(n)),最坏情况下的时间复杂度是O(n)。二分查找的一个条件是待查询的数组是有序的,我们假设这里的数组是升序的。二分查找的主要思路就是设定两个指针start和end 阅读全文
posted @ 2012-05-07 13:24 xwdreamer 阅读(23608) 评论(6) 推荐(6) 编辑
摘要: 微软数据库索引知识聚集索引与非聚集索引的区别主键与外键的作用数据库三范式数据库ACID的概念为什么使用B树作为索引结构程序设计旋转数组的查找搜索二叉树的插入与删除B树与B+树的概念O(1)空间复杂度的归并排序百度多线程java内存机制,堆栈内存Synchronized怎么用单例工厂反射GCFinal三种数据库中sql语句的不同点,tipsTop,limit,rownum连接 a.id(+)=b.id,left on,right onVolatile关键字Object.waitObject.notifyJava Lock用法Java Proxy用法Hash算法实现hashtable、Hashma 阅读全文
posted @ 2012-05-06 00:46 xwdreamer 阅读(597) 评论(0) 推荐(0) 编辑
摘要: 参考文献:http://blog.csdn.net/bocaicbl/article/details/5319915Java深度历险(四)——Java垃圾回收机制与引用类型JVM概念之Java对象的大小与引用类型1.垃圾收集算法的核心思想 Java语言建立了垃圾收集机制,用以跟踪正在使用的对象和发现并回收不再使用(引用)的对象。该机制可以有效防范动态内存分配中可能发生的两个危险:因内存垃圾过多而引发的内存耗尽,以及不恰当的内存释放所造成的内存非法引用。 垃圾收集算法的核心思想是:对虚拟机可用内存空间,即堆空间中的对象进行识别,如果对象正在被引用,那么称其为存活对象,反之,如果对象不再被引用.. 阅读全文
posted @ 2012-05-06 00:45 xwdreamer 阅读(1917) 评论(0) 推荐(1) 编辑
上一页 1 ··· 8 9 10 11 12 13 14 15 16 ··· 30 下一页