您的位置 首页 java

Java面试总结之:集合类、垃圾收集器、异常处理和Servlet

集合类

1.集合类框架的基本接口有哪些?

1)Collection接口:集合类的根接口, Java 中没有提供这个接口的直接的实现类。但是却让其被继承产生了两个接口,就是Set和List。Set中不能包含重复的元素。List是一个有序的集合,可以包含重复的元素,提供了按 索引 访问的方式。

2)Set(无序、不能重复):Set里存放的对象是无序,不能重复的,集合中的对象不按特定的方式排序,只是简单地把对象加入集合中。

3)List(有序、可重复):List里存放的对象是有序的,同时也是可以重复的,List关注的是索引,拥有一系列和索引相关的方法,查询速度快。因为往list集合里插入或删除数据时,会伴随着后面数据的移动,所有插入删除数据速度慢。

4)Map接口:Java.util包中的另一个接口,它和Collection接口没有关系,是相互独立的,但是都属于集合类的一部分。Map包含了key-value对。Map不能包含重复的key,但是可以包含相同的value。对map集合遍历时先得到键的set集合,对set集合进行遍历,得到相应的值。

5) Iterator 接口:所有的集合类,都实现了Iterator接口,这是一个用于遍历集合中元素的接口,主要包含以下三种方法:

1.hasNext()是否还有下一个元素。

2.next()返回下一个元素。

3.remove()删除当前元素。

对比图

2. 数组(Array) 和列表(ArrayList) 有什么区别?什么时候应该使用 Array 而不是 ArrayList ?

1)Array 可以包含基本类型和对象类型,ArrayList 只能包含对象类型。

2)Array 大小是固定的,ArrayList 的大小是动态变化的。

3)ArrayList 提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等。

4)对于基本类型数据,集合使用自动装箱来减少编码工作量。但是,当处理固定大小的基本数据类型的时候,这种方式相对比较慢。

3.ArrayList 和 和 LinkedList 有什么区别?

ArrayList 是基于索引的数据接口,它的底层是数组。它可以以 O(1)时间复杂度对元素进行随机访问。与此对应,LinkedList 是以元素列表的形式存储它的数据,每一个元素都和它的前一个和后一个元素链接在一起,在这种情况下,查找某个元素的时间复杂度是O(n)。相对于ArrayList,LinkedList的插入,添加,删除操作速度更快,因为当元素被添加到集合任意位置的时候,不需要像数组那样重新计算大小或者是更新索引。LinkedList 比 ArrayList 更占内存,因为 LinkedList 为每一个节点存储了两个引用,一个指向前一个元素,一个指向下一个元素。

垃圾收集器(Garbage Collectors)

1.垃圾回收有什么目的?什么时候进行垃圾回收?

垃圾回收的目的是识别并且丢弃应用不再使用的对象来释放和重用资源。

2.如果对象的引用被置为 null ,垃圾收集器是否会立即释放对象占用的内存?

不会,在下一个垃圾回收周期中,这个对象将是可被回收的。

3.在Java中对象什么时候可以被垃圾回收?

当对象对当前使用这个对象的应用程序变得不可触及的时候,这个对象就可以被回收了。

异常处理

1.Java中的两种异常类型是什么?他们有什么区别?

Java 中有两种异常:受检查的(checked)异常和不受检查的(unchecked)异常。不受检查的异常不需要在方法或者是 构造函数 上声明,就算方法或者是构造函数的执行可能会抛出这样的异常,并且不受检查的异常可以传播到方法或者是构造函数的外面。相反,受检查的异常必须要用 throws 语句在方法或者是构造函数上声明。

2. Exception 和 Error 有什么区别?

Exception和 Error 都是 Throwable 的子类。Exception用于用户程序可以捕获的异常情况。Error定义了不期望被用户程序捕获的异常。

3. throw 和 和 throws 有什么区别?

throw 关键字用来在程序中明确的抛出异常,相反,throws 语句用来表明方法不能处理的异常。每一个方法都必须要指定哪些异常不能处理,所以方法的调用者才能够确保处理可能发生的异常,多个异常是用逗号分隔的。

Servlet

1.Servlet 的生命周期

对每一个客户端的请求,Servlet 引擎载入 Servlet,调用它的 init()方法,完成 Servlet 的初始化。然后,Servlet 对象通过为每一个请求单独调用 service()方法来处理所有随后来自客户端的请求,最后,调用Servlet的destroy()方法把Servlet删除。

2.doGet() 方法和 doPost() 方法

doGet:GET 方法会把键值对追加在请求的 URL 后面。因为 URL 对字符数目有限制,进而限制了用在客户端请求的参数值的数目。并且请求中的参数值是可见的,因此,敏感信息不能用这种方式传递。

doPOST:POST 方法通过把请求参数值放在请求体中来克服 GET 方法的限制,因此,可以发送的参数的数目是没有限制的。最后,通过 POST 请求传递的敏感信息对外部客户端是不可见的。

3.什么是 cookie session 和 和 cookie ?

cookie 是 Web 服务器发送给浏览器的一块信息。浏览器会在本地文件中给每一个 Web 服务器存储 cookie。以后浏览器在给特定的 Web 服务器发请求的时候,同时会发送所有为该服务器存储的 cookie。下面列出了 session 和 cookie 的区别:

无论客户端浏览器做怎么样的设置,session都应该能正常工作。客户端可以选择禁用cookie,但是session仍然是能够工作的。因为客户端无法禁用服务端的 session。在存储的数据量方面 session 和 cookies 也是不一样的。session 能够存储任意的 Java 对象,cookie 只能存储 String 类型的对象。

4.sendRedirect()和 和 forward () 方法有什么区别?

sendRedirect()方法会创建一个新的请求,而 forward()方法只是把请求转发到一个新的目标上。重定向(redirect)以后,之前请求作用域范围以内的对象就失效了,因为会产生一个新的请求,而转发(forwarding)以后,之前请求作用域范围以内的对象还是能访问的。一般认为sendRedirect()比 forward()要慢。

文章来源:智云一二三科技

文章标题:Java面试总结之:集合类、垃圾收集器、异常处理和Servlet

文章地址:https://www.zhihuclub.com/193284.shtml

关于作者: 智云科技

热门文章

发表回复

您的电子邮箱地址不会被公开。

网站地图