1 进程和线程区别(趋势&IBM)
我发现这个题目出现的频率实在是太高太高了,我总结了一下,回答这个问题要从四个角度来说
a 调度的角度:在引入线程的操作系统中,把线程作为调度和分派的基本单位,而进程作为资源拥有的基本单位,把传统的进程的两个属性分开,使得线程基本上不掌控资源,这样线程可以轻装上阵,从而显著的提高系统的并发程度。
b 资源分配的角度:进程拥有资源,是操作系统中拥有资源的一个基本单位。一般而言线程自己不拥有资源,但它可以访问隶属进程的资源,即一个进程的代码段、数据段及所拥有的系统资源,如已经打开的文件,I/O设备等,可以供该进程中的所有线程所共享。
c 并发的角度:在引入线程的操作系统中,不仅进程之间可以并发执行,而且在一个进程的多个线程之间亦可并发执行,使得操作系统具有更好的并发性,从而能更加有效地提高系统资源的利用率和系统的吞吐量。
d 系统开销的角度:在创建或者撤销进程时,系统都要为之创建和回收进程控制块,分配和回收资源,如内存空间和I/O设备等,操作系统所付出的开销明显大于线程创建或撤销时的开销。在进程切换时,涉及到当前进程CPU环境的保存及新被调度运行进程的CPU环境的设置,而线程切换时只需保存和设置少量的寄存器内容,不涉及存储器管理方面的操作,所以就切换代价而言,进程是远高于线程的。
这边也有一篇总结的帖子:http://www.cnblogs.com/flashsky/articles/642720.html
2 进程间通信机制,线程与线程的通信机制(趋势)
进程:a共享内存 b消息传递 c管道通信(基于文件) d锁(可算可不算,一般不用)
线程:a全局变量 b自定义消息 c event对象
3 java的内存分配机制(凯易讯)
http://blog.csdn.net/xiaofeixia22222/article/details/7661562
4 object类里面有哪些函数(IBM)
http://www.blogjava.net/jiafang83/archive/2008/12/05/244510.html
5 聚合和组合的区别(IBM)
http://www.cnblogs.com/confach/archive/2005/03/03/112117.html
6 重载和覆盖还有函数隐藏分别是什么意思
7 输入一个数字N,输出小于它的N个正整数的全排列
比如说输入3,输出1,2,3,1 2,1 3,2 3,1 2 3
#include<iostream> using namespace std; int compare(const void* a,const void* b) { return *(int *)a - *(int *)b; } void recursiveOutput(int* prefix,int preNumber,int level,int n) { for(int i=0;i<level;i++) cout<<prefix[i]; cout<<endl; if(level == n) return; for(int i=preNumber+1;i < n;i++) { prefix[level] = i; recursiveOutput(prefix,i,level+1,n); } } void output(int n) { int* prefix = new int[n]; recursiveOutput(prefix,0,0,4); } int main() { int numbers[] = {1,2,3}; output(3); return 0; }
8多线程下的单例模式
public class Singletton { private static Singletton uniqueInstance; private Singletton() { } public static Singletton getSingleton() { if(uniqueInstance==null) { synchronized(Singletton.class) { if(uniqueInstance==null) uniqueInstance = new Singletton(); } } return uniqueInstance; } }
9 什么是checked exception什么是unchecked exception
http://blog.sina.com.cn/s/blog_6151984a0100kgbv.html
10常见的RunTimeException都有哪些
http://www.cnblogs.com/qinqinmeiren/archive/2010/10/14/2151702.html