1、public、private、protected、static。不能用来修饰interface的是哪个?
接口默认修饰符public,即使不写。
定义的变量默认修饰符(也必须是)public static final,so又成了常量
故private、protected是不能用来修饰
2、下面关于修饰符混用的说法,错误的是?
A.abstract不能与final并列修饰同一个类
B.abstract类中可以有private成员
C.abstract方法必须在abstract类中
D.static方法中能处理非static属性
a错:abstract类里的方法必须要子类提供实现,而final不可以有子类。这点与接口也一样,final修饰接口,接口无法实现,那接口声明也就没有任何意义了。类或接口若用final修饰,表示最终类,不能被继承或实现。这种情况与抽象类和接口存在的意义冲突,故编译就报错
b对:当然可以,抽象类也是类。只是他的private成员不能被继承,所以在abstract类中定义private成员没有意义
c对:abstract类可以有普通方法也可以有抽象方法,但抽象方法必须在抽象类中。如果一个类继承了抽象类,但他没有完全实现其抽象方法,那么该类也必须是抽象类
d对:static修饰的代码优先加载于非static成员,所以长辈能为晚辈做打算,但是反过来不行
故选择A
3、程序和进程的本质区别是?
A.在外存和内存的存储
B.非顺序和顺序执行的机器指令
C.独占使用和分时实用计算机资源
D.静态和动态特征
进程即运行中的程序,从中即可知,进程是在运行的,程序是非运行的,当然本质区别就是动态和静态的区别。
故选D
4、Ipv6地址占多少字节?
IPv4是32位长,4字节, 用点将32位分割成4个8位(1字节)的段
IPv6是128位长,16字节,用冒号将128位分割成8个16位的段
IPv6 地址. . . . . . . . : fe80::dd8:8489:165:95c6%16
IPv4 地址 . . . . . . . . . . . . : 192.168.3.1
5、下列说法正确的是?
A.LinkedList继承自List
B.AbstractSet继承自Set
C.HashSet继承自AbstractSet
D.WeakMap继承自HashMap
参考:jdkapi和
http://blog.csdn.net/lioncode/article/details/8673391
http://blog.csdn.net/frankarmstrong/article/details/56003697
在Java的util包中有两个所有集合的父接口Collection和Map,它们的父子关系:
java.util
+Collection 这个接口extends自 --java.lang.Iterable接口
+List 接口
-ArrayList 类
-LinkedList 类
-Vector 类 此类是实现同步的
+Queue 接口
+不常用,在此不表.
+Set 接口
+SortedSet 接口
-TreeSet 类
-HashSet
+Map 接口
-HashMap 类 (除不同步和允许使用 null 键/值之外,与 Hashtable 大致相同.)
-Hashtable 类此类是实现同步的,不允许使用 null 键值
+SortedMap 接口
-TreeMap 类
6、链表具有的特点是?
A. 不必事先估计存储空间
B. 可随机访问任一元素
C. 插入删除不需要移动元素
D. 所需空间与线性表长度成正比
它在内在地址中是链表式的。它的存放是比较散乱的。但是它采用指向的方法表明元素的顺序。不象ArrayList是按照数组连续分配空间一个紧挨着一个。当其中的某一个元素被删除时,它会指向于它的下一个,而不需要移动其他的元素。
所以它增删改快查慢,与ArrayList相反
ArrayList底层是数组
LinkedList底层是链表
7、执行int[ ]x=new int[25]; 下边说法正确的是?
A. x[24]为0
B. x[24]未定义
C. x[25]为0
D. x[0]为空
堆中的数据都有初始值,new int[25]存在于堆,所以里边的25个int元素均有初始值。Int的初始值是啥,当然是0了。
8、 String s="abc";下边不合法的是?
A.s=s.toUpperCase();
B.char c=s[1];
C.int len=s.length;
D.s=s.trim( );
a正确:转大写
b错误:s不是数组,所以没有角标
c错误:字符串对象有length方法,而没有length属性
d正确:这是去除字符串对象中的空格的方法。
So,选择b、c
9、在程序读入字符文件时,能够以该文件直接做为参数的类是?
A. FileReader
B. BufferedReader
C. FileInputStream
D. ObjectInputStream
FileInputStream是字节输入流。
ObjectlnputStream用于对象串行化时从对象流中读取对象。
所以C、D都不是本题的答案。
FileReader和BufferedReader都是字符类输入流,
但是FileReader的参数是读入的文件,而BufferReader的参数是FileRead流的一个对象。
所以,本题的正确选项是A。
10、参考下边代码,关于super用法,描述正确的是?
class C extends B{
public C(){super();}
}
A.用来调用B类中定义的super()方法
B.用来调用C类中定义的super()方法
C.用来调用B类的无参构造函数
D.用来调用B类第一个出现的构造
11、有关线程描述对的是?
A.一旦一个线程被创建,它就立即开始运行
B.使用start方法,可以使一个线程成为可运行的。但它不一定立即开始运行
C.当一个线程因抢先机制而停止运行,它被放在可运行队列的前面
D.一个线程可能因为不同的原因停止并进入就绪状态。
本题是考查对线程概念的掌握。一个新创建的线程并不是自动的开始运行的,必须调用它的start()方法使之将线程放入可运行态(也叫就绪状态runnable state),这只是意味着该线程可被JVM的线程调度程序调度而不是意味着它可以立即运行。
到此位置,可判断出:a错,b对
线程的调度是抢先式的,而不是分时间片式的。具有比当前运行线程高优先级的线程可以使当前线程停止运行而进入就绪状态。不同优先级的线程间是抢先式的,而同级线程间是轮换式的。一个线程停止运行可以是因为不同原因,可能是因为更高优先级线程的抢占,也可能是因为调用sleep()方法。
这里可以说明,d是对的
而即使是因为抢先而停止也不一定就进入可运行队列的前面,因为同级线程是轮换式的,它的运行可能就是因为轮换,而它因抢占而停止后只能在轮换队列中排队而不能排在前面。
这里可以说明,c的说的不对
线程的5种状态
参考:http://blog.csdn.net/peter_teng/article/details/10197785
12、对struts的支持,主要用到spring哪些模块?
A. 核心模块
B. Orm模块
C. Mvc模块
D. Web模块
Struts是属于3层架构中的试图层中的mvc思想技术的一个框架
13、spring中提供通过web容器来启动spring框架的类有哪些?
A. ContextLoaderListener
B. ServletLoaderListener
C. ContextLoaderServlet
D. ActionServlet
看下边在web.xml中,配置监听服务器启动,就加载spring配置文件的代码就知道了
14、在hibernate中,以下哪些是属于session的方法?
A.Load() B. Save() C. Delete( )
E. update()E. open( ) F.close( )
F,不解释
15、编译java程序时候,编译器提示找不到要编译的代码。通常是因为?
A. 文件名拼写错误
B. 没有导入相应的包
C. 文件名不是.java
D. 源文件不再java搜索路径中
二 简答
1、Java基本类型都有哪些,字节长度分别是多少?
整型:byte(1)、short(2)、int(4)、long(8)
小数:float(4)、double(8)
布尔:true、false()1
字符:char(在unicode编码下占2)
2、说说jvm原理,内存泄漏与内存溢出的区别,何时产生泄漏?
操作系统装入JVM是通过jdk中Java.exe来完成,通过下面4步来完成JVM环境.
1.创建JVM装载环境和配置
2.装载JVM.dll
3.初始化JVM.dll并挂界到JNIENV(JNI调用接口)实例
4.调用JNIEnv实例装载并处理class类。
内存溢出,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。
内存泄露,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。
俩东西 泄漏是说你的程序有BUG 导致内存不释放GC 溢出是指内存不够用了 导致不够用的
3、JavaEE的5大主流框架的优缺点?
省略
4、如何解决用户访问反应慢的问题?
硬件:加带宽,升级服务器cpu或内存
软件:优化代码。
5、实现你熟悉的一个排序算法?
冒泡
int [] arr={5,7,9,1,3};
for(int i=0; i<arr.length; i++){//i为5,7,9,1,3
for (int j=i+1; j<arr.length; j++) {//j为7,9,1,3
if(arr[i]>arr[j]){//开始判断:
/*下边的作用是互换位置:小的挪到前边,大的挪到后边*/
int temp=arr[i];//a-先将大(即i)的存储在临时变量(即temp)里
arr[i]=arr[j];//b-将小的(即j)的值赋予上一个变量(即i)
arr[j]=temp;//c-将大的值(此时是临时变量temp)赋予小的
}
}
}
System.out.println(Arrays.toString(arr));
6、有一张表sales结构如下
用一条sql语句,输出如下?
参考答案:
SELECT year 年,
SUM(CASE month WHEN 1 THEN income WHEN 2 THEN income WHEN 3 THEN income ELSE 0 END)第一季度,
SUM(CASE month WHEN 4 THEN income WHEN 5 THEN income WHEN 6 THEN income ELSE 0 END)第二季度,
SUM(CASE month WHEN 7 THEN income WHEN 8 THEN income WHEN 8 THEN income ELSE 0 END)第三季度,
SUM(CASE month WHEN 10 THEN income WHEN 11 THEN income WHEN 12 THEN income ELSE 0 END)第四季度
FROM sales
GROUP BY year