java企业面试题整理(最新精选汇编)-(最新版-已修订).pdf
文本预览下载声明
1、1+2+3……+100 构建一个函数。(易)
答案:
public int Sum(int n)
{
if (n == 1)
return 1;
else
return n + Sum(n - 1);
}
2 、描述冒泡算法。(易)
答案:
基本思路:对尚未排序的各元素从头到尾依次比较相邻的两个元素是否逆序(与
欲排顺序相反),若逆序就交换这两元素,经过第一轮比较排序后便可把最大(或最
小)的元素排好,然后再用同样的方法把剩下的元素逐个进行比较,就得到了你所
要的顺序。可以看出如果有 n 个元素,那么一共要进行 n-1 轮比较,第 i 轮要进
行 j=n-i 次比较。(如:有 5 个元素,则要进行 5-1 轮比较。第 3 轮则要进行 5-3 次
比较)
3、堆和栈的区别!(难)
答案:
二、堆和栈的理论知识
申请方式
堆:
由系统自动分配。 例如,声明在函数中一个局部变量 int b; 系统自动在栈中为
b 开辟空间
栈:
需要程序员自己申请,并指明大小,在 c 中malloc 函数
申请后系统的响应
栈:只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常
提示栈溢出。
堆:首先应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程序的
申请时,
申请大小的限制
栈:在 Windows 下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。
这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在
WINDOWS 下,栈的大小是 2M (也有的说是1M,总之是一个编译时就确定的
常数),如果申请的空间超过栈的剩余空间时,将提示 overflow 。因此,能从栈
获得的空间较小。
堆:堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链
表来存储的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向
高地址。堆的大小受限于计算机系统中有效的虚拟内存。由此可见,堆获得的空
间比较灵活,也比较大。
申请效率的比较:
栈由系统自动分配,速度较快。但程序员是无法控制的。
堆是由 new 分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来
最方便.
堆和栈中的存储内容
栈: 在函数调用时,第一个进栈的是主函数中后的下一条指令(函数调用语句
的下一条可执行语句)的地址,然后是函数的各个参数,在大多数的C 编译器中,
参数是由右往左入栈的,然后是函数中的局部变量。注意静态变量是不入栈的。
小结:
堆和栈的区别可以用如下的比喻来看出:
使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃
饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处
是快捷,但是自由度小。
使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,
而且自由度大。
4 、用单利模式构建一个类(中)
答案:
public class SingletonTest {
private static SingletonTest instance;
private SingletonTest() {}
public static SingletonTest getInstance() {
if (instance == null) {
instance = new SingletonTest();}
return instance;
}
5、索引是怎样来提高搜索速度的!(难)
答案:
使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的
值进行排序的一种结构,例如 employee 表的姓(lname)列。如果要按姓查找特
定职员,与必须搜索表中的所有行相比,索引会帮助您更快地获得该信息。
索引是一个单独的、物理的数据库结构,它是某个表中一列或若干列值的集
合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。
索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序
顺序对这些指针排序。数据库使用索引的方式与您使用书籍中的索引的方式很相
似:它搜索索引以找到特定值,然后顺指针找到包含该值的行。
6、画一个项目的体系结构图。(难)
答案:
1,对MVC 的理解?(中)
答案:
MVC 是 Model-View-Controller 的缩写。“M
显示全部