1、 程序和进程的本质区别是?
A、在外存和内存存储
B、非顺序和顺序执行机器指令
C、独占使用和分时使用计算机资源
D、静态和动态特征
2、 假设某算法的时间复杂度符合递推关系式T(n)=2T(n/2)+n,那么该算法的时间复杂度相当于
A、O(n)
B、O(lgn)
C、O(nlgn)
D、O(n2)
http://homepages.ius.edu/rwisman/C455/html/notes/Chapter4/RecursionTree.htm
3、 下图一个非确定有限自动机(NFA)的状态转换,其等价的正规式为()
A、0*|(0|1)0
B、(0|10)*
C、0*((0|1)0)*
D、0*(10)*
4、 IPv6地址占____个字节
A、4
B、6
C、8
D、16
5、 以下关于RARP协议的说法中,正确的是()?
A、RARP协议根据主机IP地址查询对应的MAC地址
B、RARP协议用于对IP协议进行差错控制
C、RARP协议根据MAC地址求主机对应的IP地址
D、RARP协议根据交换的路由信息动态改变路由表
6、 一栋大楼共计200层,某种类型的鸡蛋从某一楼层及其以上楼层下来时会被打破,从该楼层(即临界楼层)以下楼层摔下该鸡蛋,鸡蛋不会出现破损。现在给你2个完全一样的该种类型的鸡蛋,问:如何通过这2个鸡蛋找到该临界楼层?
1)原版英文循序渐进 http://www.datagenetics.com/blog/july22012/
2)一个总结
不能用二分法,因为如果在50层碎了,下面的策略就是一层一层的试验了。
一定有一个最低层L,碎了就从第一层测试到L-1层,没碎就往上走。
测试一次如果没碎,那么往上走的层数需要比上一次上楼的层数减1,上到100层时上楼的次数就应该等于L,这样无论在哪里第一个蛋碎了,两个蛋测试总次数都是相同的。
于是: L + (L-1) + ... + (L-L) = 100 => L*L - [1+2+...+(L-1)] = 100
解得: L = 13.x
最后验证:
14+13+12+11+10+9+8+7+6+5+4 = 99 用了11次.
13+12+11+10+9+8+7+6+5+4+3+2+1=91 不到100
结果是14。连程序都省了。
3)http://www.cnblogs.com/AlgoWing/p/3491677.html
7、 请描述JAVA异常类的继承体系结构,以及JAVA异常的分类,并为每种类型的异常各举三个例子?
8、 描述Java类加载器的原理及其组织结构?
9、 在Web开发中,如何实现会话的跟踪?
10、请简述Spring架构中IOC的实现原理?
11、检查程序,是否存在问题,如果存在指出问题所在,如果不存在,说明输出结果。
package algorithms.com.guan.javajicu;
public class TestDemo {
public static String output =””;
public static void foo(inti){
try{
if(i == 1){
throw new Exception();
}
}catch(Exception e){
output += “2”;
return ;
}finally{
output += “3”;
}
output += “4”;
}
public static void main(String[] args) {
foo(0);
foo(1);
System.out.println(output); //3423
}
}
12、检查程序,是否存在问题,如果存在指出问题所在,如果不存在,说明输出结果。
package algorithms.com.guan.javajicu;
public class HelloB extends HelloA{
public HelloB(){
System.out.println(“HelloB”);
}
{
System.out.println(“I’m B class”);
}
static{
System.out.println(“static B”);
}
public static void main(String[] args) {
new HelloB();
/**输出结果参考答案:
* static A
staticB
I’mA class
HelloA
I’mB class
HelloB
*/
}
}
class HelloA{
public HelloA(){
System.out.println(“HelloA”);
}
{
System.out.println(“I’m A class”); //这句话是什么时候加载?
}
static{
System.out.println(“static A”);
}
}
13、检查程序,是否存在问题,如果存在指出问题所在,如果不存在,说明输出结果。
package algorithms.com.guan.javajicu;
public class Inc {
public static void main(String[] args) {
Incinc = new Inc();
int i = 0;
inc.fermin(i);
i= i ++;
System.out.println(i); //输出结果为0
}
void fermin(int i){
i++;
}
}
14、检查程序,是否存在问题,如果存在指出问题所在,如果不存在,说明输出结果。
package algorithms.com.guan.javajicu;
public class Example {
Stringstr = new String(“good”);
char[] ch = {‘a’,’b’,’c’};
public static void main(String[] args) {
Exampleex = new Example();
ex.change(ex.str, ex.ch);
System.out.print(ex.str +”and”);
System.out.print(ex.ch);
//参考答案输出结果:goodandgbc
}
public void change(Stringstr, char ch[]){
str= “test ok”;
ch[0]= ‘g';
}
}
15、检查程序,是否存在问题,如果存在指出问题所在,如果不存在,说明输出结果。
packagealgorithms.com.guan.javajicu;
import java.util.Date;
public class SuperTest extends Date{
private static final long serialVersionUID = 1L;
private void test(){
System.out.println(super.getClass().getName());
//参考答案输出:algorithms.com.guan.javajicu.SuperTest
}
public static void main(String[]args){
newSuperTest().test();
}
}
16、任意2n个整数,从其中选出n个整数,使得选出的n个整数和同剩下的n个整数之和的差最小。
编程之美 数组分割问题
http://blog.csdn.net/tianshuai1111/article/details/7828907
17、有两个有序的集合,集合的每个元素都是一段范围,求其交集,例如集合{[4,8],[9,13]}和{[6,12]}的交集为{[6,8],[9,12]}
18、一个文件中有10000个数,用Java实现一个多线程程序将这个10000个数输出到5个不用文件中(不要求输出到每个文件中的数量相同)。要求启动10个线程,两两一组,分为5组。每组两个线程分别将文件中的奇数和偶数输出到该组对应的一个文件中,需要偶数线程每打印10个偶数以后,就将奇数线程打印10个奇数,如此交替进行。同时需要记录输出进度,每完成1000个数就在控制台中打印当前完成数量,并在所有线程结束后,在控制台打”Done”.