Java复习

Java笔试题

1.List和数组在使用上有什么区别?如何互相转换?请说出具体的方法。

List与数组用法上的区别:
1
、数组的容量是固定的(虽然也可以扩充的方法,但不主张),而ArrayList的容量是动态的。
2
、一个数组只能保存一种类型,而Arraylist可以保存不同类型。
3
、数组可以保存基本数据类型,但ArrayList不可以,它保存的是OBJECT类的引用,因此在取出元素时,要做类型转换。
4
、数组不能声明为只读数组,而ArrayList可以提供ReadOnly方法,以只读的方式使用。
5
、数组的效率高,但ArrayList的效率低。当增加一个新元素时,ArrayList首先要检查其内部数组是否越界,如没有越界,则可增加;如越界,则新建一个两倍于当前内部数组容量的新数组,将旧内部数组的元素拷贝至新内部数组,并废弃旧数组,因此其效率相比数组要低。

Array to List(数组转化为List:调用ArraysasList()方法

String[] strArray = {"aa", "bb","cc"}; 

List<String> list = Arrays.asList(strArray); 

List to ArrayList转化为数组):调用ArrayListtoArray()方法

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 值。
      所以如果代码是线程安全的,那么应该使用HashMap,因为Hashtable的同步是有一定量的运行代价的。而现今对于需要同步的Map,使       用  ConcurrentHashMap  也比 Hashtable 有更高的效率。

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. 如何设计一个上传文件的程序?说一说大致的思路。

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值