Java笔试题
1.List和数组在使用上有什么区别?如何互相转换?请说出具体的方法。
List与数组用法上的区别:
1、数组的容量是固定的(虽然也可以扩充的方法,但不主张),而ArrayList的容量是动态的。
2、一个数组只能保存一种类型,而Arraylist可以保存不同类型。
3、数组可以保存基本数据类型,但ArrayList不可以,它保存的是OBJECT类的引用,因此在取出元素时,要做类型转换。
4、数组不能声明为只读数组,而ArrayList可以提供ReadOnly方法,以只读的方式使用。
5、数组的效率高,但ArrayList的效率低。当增加一个新元素时,ArrayList首先要检查其内部数组是否越界,如没有越界,则可增加;如越界,则新建一个两倍于当前内部数组容量的新数组,将旧内部数组的元素拷贝至新内部数组,并废弃旧数组,因此其效率相比数组要低。
Array to List(数组转化为List):调用Arrays的asList()方法
String[] strArray = {"aa", "bb","cc"};
List<String> list = Arrays.asList(strArray);
List to Array(List转化为数组):调用ArrayList的toArray()方法。
String[] strArray = {"aa", "bb","cc"};
List<String> list = Arrays.asList(strArray);
String[] newStrArray = list.toArray(new String[]{});
List list = new ArrayList();
list.add("1");
list.add("2");
final int size =list.size();
String[] arr =(String[])list.toArray(new String[size]);
数组和集合的区别:
1.数组要声明元素的类型,集合类的元素类型却是object。
2.数组是固定大小的,不能伸缩;而集合却是可变长的。
3.数组可读可写不能声明只读数组。集合类可以提供ReadOnly方法以只读方式使用集合。
4.数组要有整数下标才能访问特定的元素,然而很多时候这样的下标并不是很有用。集合也是数据列表却不使用下标访问。
2.Map是最常用的容器之一,请说出至少两个Map的实现类,并说出它们的特性(是否有序、线程是否安全、其它特性)。说出Map有哪几种遍历方式。
Map的实现类: HashMap,TreeMap, HashTable以及 LinkedHashMap.
Map的实现类的特性有:
- HashMap 使用哈希表(hash table)实现, 在 keys 和/或 values 之中,都是无序的.
- TreeMap 基于红黑树(red-black tree)数据结构实现, 按 key 排序.
- LinkedHashMap 保持着插入顺序,LinkedHashMap 是 HashMap 的子类. 所以继承了所有 HashMap 的特性。
- Hashtable 与HashMap实现方式一样,但Hashtable属于同步(synchronized)的, HashMap 类基本上等同于 Hashtable, 区别仅仅在于: HashMap 不是同步的,并且运行 null 值。
Map遍历方法有:
Map map=newHashMap();
map.put("a","1");
map.put("b","2");
map.put("c","3");
map.keySet();//键集合
map.values();//值集合
map.entrySet();//键值集合
方法一: 遍历键,通过键取值:
Set set =map.keySet();
for (Object key: set) {
System.out.println("键:"+key+" 值:"+map.get(key));
}
方法二:遍历键集合:
Iteratorit=map.keySet().iterator();
while(it.hasNext()){
System.out.println("键:"+it.next());
}
方法三:遍历键值集合:
Iteratorit2=map.entrySet().iterator();
while(it2.hasNext()){
System.out.println(it2.next());
}
方法四:通过Map.values()遍历所有的value,但不能遍历key
for (Object O :map.values()) {
System.out.println("value=" + O);
}
3. Java中如何实现序列化,有什么意义?
把对象转换为字节序列的过程称为对象的序列化。把字节序列恢复为对象的过程称为对象的反序列化。只有实现了Serializable和Externalizable接口的类的对象才能被序列化。Externalizable接口继承自 Serializable接口,实现Externalizable接口的类完全由自身来控制序列化的行为,而仅实现Serializable接口的类可以采用默认的序列化方式 。
序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStrea
对象序列化包括如下步骤:
1) 创建一个对象输出流,它可以包装一个其他类型的目标输出流,如文件输出流;
2) 通过对象输出流的writeObject()方法写对象。
对象的序列化主要有两种用途:
1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;
2) 在网络上传送对象的字节序列。
在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存。比如最常见的是Web服务器中的Session对象,当有 10万用户并发访问,就有可能出现10万个Session对象,内存可能吃不消,于是Web容器就会把一些seesion先序列化到硬盘中,等要用了,再把保存在硬盘中的对象还原到内存中。
当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象。
4. 阅读以下代码,试解释一下该代码做了什么。
Publicclass FileFilterDemo{
Public static void main(String[] args) {
File path = new File(".");
String[] list;
if (args.length == 0) {
list = path.list();
} else {
list = path.list(new DirFilter(args[0]));
}
Arrays.sort(list, String.CASE_INSENSITIVE_ORDER);
for (String dirItem : list)
System.out.println(dirItem);
}
}
class DirFilter implements FilenameFilter {
private String regex;
public DirFilter(String regex){
this.regex = regex;
}
@Override
Public boolean accept(File dir, Stringname) {
return name.matches(regex);
}
}
5. 假定有一张学生成绩表,表结构和数据如下所示:
name subject score
李世民 语文 88
李世民 数学 85
赵匡胤 语文 76
赵匡胤 数学 93
朱元璋 语文 81
朱元璋 数学 70
朱元璋 历史 90
请用一条SQL语句查询出每科成绩都大于80分的学生姓名:
SELECT NAME FROM student GROUP BY NAME HAVING MIN(score)>80;
6. 假定页面有以下内容:
<formid="editForm" action="saveUser.action"method=get>
姓名:<inputvalue="小李子"/><br>
爱好:
<inputtype="checkbox" name="hobbies" value=1checked=checked/>足球
<inputtype="checkbox" name="hobbies" value=2 />篮球
<inputtype="checkbox" name="hobbies" value=3checked=checked />爬山
<br>
城市:
<selectname="cityId" id="citySelect">
<option>select_city</option>
<optionvalue=1>广州</option>
<optionvalue=2>深圳</option>
</select><br>
<inputtype="submit" value="保存" />
</form>
1) 请用不同的jquery选择器获取选中的“爱好”的值以及选中的“城市”的值;
2) 若服务器根路径为http://localhost:8080/test,请写出在点击保存按钮时,浏览器发起请求的完整路径。
7. Elipse中代码助手的快捷键是?整理import包的快捷键是?行复制的快捷键是?断点调试时,F5键的作用是?F6键的作用是?
8. 为什么要用MVC思想?我从JSP页面直接访问数据库不是更简单吗?为什么非要先提交到控制再做处理?
9.Spring的核心思想是什么?什么是IOC和AOP?
10. 如何设计一个上传文件的程序?说一说大致的思路。