`
chriszeng87
  • 浏览: 745548 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
文章列表
动作不同: 在C++中,new一个对象时,程序完成对象的空间的分配的同时,构造函数也被调用,类似,delete一个对象时,对象的空间被释放的同时析构函数也被调用。 在C中,malloc和free 则没有构造函数和析构函数被调用这个动作。当然,在没有特定的构造函数或析构函数时,C++也没有这个动作。 关于重载: 在C++中,对于任何非数组的空间分配,我们可以通过定义函数名相同但参数不同的构造函数完成对构造函数的重载,而对于数组的空间分配,就只能使用默认构造函数了,若你试图去开辟一个没有默认构造函数的数组,Compiler会出错。 在C中,自然是没有重载这个事情了。 ...
Java编译原理 1、Java编译过程与c/c++编译过程不同 Java编译程序将java源程序编译成jvm可执行代码--java字节码. c/c++编译过程: 当C编译器编译生成一个对象的代码时,该代码是为在某一特定硬件平台运行而生成的。因此在编译过程 ...
题目:请给出一个时间为O(nlgk)、用来将k个已排序链表合并为一个排序链表的算法。此处n为所有输入链表中元素的总数。 (机械工业出版社 《算法导论》P82  6.5-8)   这是网上找到一个解答: 1.把每个已排序链表的第一个值取下,构建一个k个元素的最小堆。 2.找到最小元素原来的链表,从中取下第二个元素,插入最小堆。 3.接着找到当前最小元素原来的链表,从中取下下一个元素,插入最小堆。 4.循环直到所有链表为空。   这里我有个疑问: 第三步是不是可以替换成随便从k个链表中取出一个元素,插到最小堆里,这样时间复杂度也是O(nlgk)。可是这样的话就完全没有到每个链表是 ...
Josephus问题的定义如下:假设n个人排成环形,且有一正整数m<=n。从某个指定的人开始,沿环报数。每遇到第m个人就让其出列,且报数进行下去,这个过程直到所有人都出列为止。假设m不是常数。请描述一个O(nlgn)时间的算法,使给定的整数n和m,输出(n,m)-Josephus排列。   解法:使用顺序统计树(order-statistic tree),顺序统计树的插入、删除的时间复杂度为O(lgn),查找第i大的数的时间复杂度也为O(lgn)。   伪代码:   JOSEPHUS(n,m) initialize T to be empty 1. for j ← ...
有个二叉树,每个节点除了左右指针外,还有一个指向父节点的指针。要求不用递归,中序遍历这棵树。另要求空间复杂度是O(1).   空间复杂度为O(1),摆明就是不让用堆栈模拟递归,所以想了想思路,也请教过好几个朋友,大家都基本想法都差不多,由于有指向父节点的指针,必定可以回溯,从而可以不需要堆栈来做记录.   view plain /*思路: 

浅谈垃圾收集

    博客分类:
  • Java
垃圾收集是程序自动发现和回收应用程序不再使用或不能访问的内存的过程。这种回收过程不需要程序员的参与。   与程序员显式地释放内存相比,垃圾收集提供了几点好处。它消除了悬挂指针和内存泄露。它也使得接口设计和编程变得更简单,因为不再需要传统上用于确保内存正确释放的机制(如C++中的“智能指针”)。另外,因为程序员不必担心内存释放,程序开发就能够更快地进行。   但是,垃圾惧也不是没有缺点。垃圾收集程序通常运行得较慢,因为系统需要确定何时释放和回收那些不再使用的内存。另外,系统有时会多分配一些内存,不能在最佳的时机释放内存。   实现垃圾收集的一种方法是利用“引用计数”。这需要追踪 ...
转自:http://www.cppblog.com/prayer/archive/2009/08/17/93591.html     一. 在c中分为这几个存储区1.栈 - 由编译器自动分配释放2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。- 程序结束释放4.另外还有一个专门放常量的地方。- 程序结束释放                                                      ...
题目:        设L=<a1,a2,…,an>是n个不同的实数的序列,L的递增子序列是这样一个子序列Lin=<aK1,ak2,…,akm>,其中k1<k2<…<km且aK1<ak2<…<akm。求最大的m值。     在下面的代码中 lis[i]表示以array[i]结尾的递增子序列的最大长度, max[j]表示长度为j的递增子序列的最大元素的最小值, 则max[lis[i]]表示长度为lis[i]的递增子序列的最大元素的最小值,即array[i].   package beautyOfProgram; ...
1. 后台的文件描述符也是继承于父进程,例如shell,所以它也可以在当前终端下显示输出数据。 但是daemon进程自己变成了进程组长,其文件描述符号和控制终端没有关联,是控制台无关的。   2.基本上任何一个程序都可以后台运行,但守护进程是具有特殊要求的程序,比如要脱离自己的父进程,成为自己的会话组长等,这些要在代码中显式地写出来 换句话说,守护进程肯定是后台进程,但反之不成立。守护进程顾名思义,主要用于一些长期运行,守护着自己的职责(监听端口,监听服务等)。我们的系统下就有很多守护进程。   3.守护进程成为了进程组长(或者会话组长),和控制终端失去了联系(其文件描述符也是继承于 ...
转自:http://blog.csdn.net/sailor_8318/article/details/3397116   思科和横河电机面试题。通过一次遍历找到单链表中倒数第n个节点,链表可能相当大,可使用辅助空间,但是辅助空间的数目必须固定,不能和n有关。   单向链表的特点是遍历到末尾后不能反向重数N个节点。因此必须在到达尾部的同时找到倒数第N个节点。  
转自:http://www.cnblogs.com/k-eckel/articles/195931.html   这是网络流传的Microsoft的面试题目之一:“编写反转字符串的程序,要求优化速度、优化空间”。因为最近一直很多关注算法方面的实践和研究,因此对这个问题进行了一些思考,给出了5种实现方法(有两种解法相关性比较大)。 解法一:第一次看到这题目,想到最简单、最直觉的解法就是:遍历字符串,将第一个字符和最后一个交换,第二个和倒数第二个交换,依次循环,即可,于是有了第一个解法:
转自:http://kenby.iteye.com/blog/1031124   一 给定a、b两个文件,各存放50亿个url,每个url各占用64字节,内存限制是4G,如何找出a、b文件共同的url? 两个50亿个url的文件,大概有50 0000 0000 * 64 B = 640G的大小,肯定不能全部读入内存,可以分组解决 准备1030个桶,读取两个文件的url,对每个url,通过hash(url)%1031, 把url映射到其中一个桶,然后把每个桶的 url都写入一个文件,得到1030个文件,每个文件大约640M大,可以断定,相同的url只可能出现在一个文件中。所以接下来 ...
时间过的好快,转眼就要九月份了,金九银十,就要开始找工作了。 现在把在做好现在实习的基础上,除了写好大论文,还需要做的事情记一下: 0. 调整心态,踏实地做好没意见事情,不眼红,不骄傲。         1. 算法,经常做做题。 2. OS、Network、DB。Network和DB是短板,要加强。 3. Java和C要往深了研究,有时间学学Shell和Python。 4. 设计模式,常用的要理解。 5. 口语,要经常练练。 6. mobile,找相关工作的时候准备。   其实说多也不多,说少也不少。  
  第一步 充分理解Socket  转自: http://tech.163.com/06/0410/09/2EBABUD20009159T.html   1.什么是socket    所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。    以J2SDK-1.3为例,Socket和ServerSocket类库位于java.net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作 ...

java的serialVersionUID

    博客分类:
  • Java
在Java中,软件的兼容性是一个大问题,尤其在使用到对象串行性的时候,那么在某一个对象已经被串行化了,可是这个对象又被修改后重新部署了,那么在这种情况下, 用老软件来读取新文件格式虽然不是什么难事,但是有可 ...
Global site tag (gtag.js) - Google Analytics