面试是公司衡量个人是否可以为公司带来价值的一个前期的标准,因此面试环节是必不可少的存在,一份好的面试答题能够为个人带来一份想要的工作,同样也可以为当做谈薪资的一个筹码,你想如果你的面试环节都特别差,那么就算公司录用你,在薪资方面也是存在认人宰割的状态。
因此在这里为大家挑选了一些出现频率较高的面试题,大家可以作为参考来为未来面试过程中出现的各种情况做相应的准备。
1、列出一些你常见的运行时异常?
答:
ArithmeticException(算术异常)
ClassCastException (类转换异常)
IllegalArgumentException (非法参数异常)
IndexOutOfBoundsException (下表越界异常)
NullPointerException (空指针异常)
SecurityException (安全异常)
2、List、Map、Set三个接口存取元素时,各有什么特点?
答:List以特定索引来存取元素,可以有重复元素。Set不能存放重复元素(用对象的equals()方法来区分元素是否重复)。Map保存键值对 (key-value pair)映射,映射关系可以是一对一或多对一。Set和Map容器都有基于哈希存储和排序树的两种实现版本,基于哈希存储的版本理论存取时间复杂度为 O(1),而基于排序树版本的实现在插入或删除元素时会按照元素或元素的键(key)构成排序树从而达到排序和去重的效果。
3、什么是进程,什么是线程?为什么需要多线程编程?
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是操作系统进行资源分配和调度的一个独立单位;
线程是进程的一个实体,是CPU调度和分 派的基本单位,是比进程更小的能独立运行的基本单位。
线程的划分尺度小于进程,这使得多线程程序的并发性高;进程在执行时通常拥有独立的内存单元,而线程之间可以共享内存。使用多线程的编程通常能够带来更好的性能和用户体验,但是多线程的程序对于其他程序是不友好的,因为它占用了更多的CPU资源。
4.Servlet的生命周期
Web容器加载Servlet并将其实例化后,Servlet生命周期开始,容器运行其init()方法进行Servlet的初始化;请求到达时调用Servlet的service方法,service方法会调用与请求对应的doGet或doPost等方法;当服务器关闭会项目被卸载时服务器会将Servlet实例销毁,此时会调用Servlet的destroy方法。
5.转发(forward)和重定向(redirect)的区别?
1)forward是容器中控制权的转向,是服务器请求资源,服务器直接访问目标地址的URL,把那个URL 的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。
2)redirect就是服务器端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,因此从浏览器的地址栏中可以看到跳转后的链接地址。
3)前者更加高效,在前者可以满足需要时,尽量使用转发(通过RequestDispatcher对象的forward方法,RequestDispatcher对象可以通过ServletRequest对象的getRequestDispatcher方法获得),并且,这样也有助于隐藏实际的链接;在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用重定向(通过HttpServletResponse对象调用其sendRedirect方法)。
6.get和post请求的区别?
①get请求用来从服务器上获得资源,而post是用来向服务器提交数据;
②get将表单中数据按照name=value的形式,添加到action 所指向的URL 后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;post是将表单中的数据放在HTML头部(header),传递到action所指向URL;
③get传输的数据要受到URL长度限制(1024字节);而post可以传输大量的数据,上传文件只能使用post方式;
④使用get时参数会显示在地址栏上,如果这些数据不是敏感数据,那么可以使用get;对于敏感数据还是应用使用post;
7、JSP 和Servlet 有有什么关系?
答:其实这个问题在上面已经阐述过了,Servlet是一个特殊的Java程序,它运行于服务器的JVM中,能够依靠服务器的支持向浏览器提供显示内容。
JSP本质上是Servlet的一种简易形式, JSP会被服务器处理成一个类似于Servlet的Java程序,可以简化页面内容的生成。
Servlet和JSP最主要的不同点在于,Servlet 的应用逻辑是在Java 文件中,并且完全从表示层中的HTML分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp 的文件(有人说,Servlet就是在Java中写HTML,而JSP就是在HTML中写Java代码,当然,这个说法还是很片面的)。
JSP侧重于视图,Servlet更侧重于控制逻辑,在MVC架构模式中,JSP适合充当视图(view)而Servlet适合充当控制器(controller)。
8,线程和进程有什么区别?
线程是进程的子集,一个进程可以有很多线程,每条线程并行执行不同的任务。不同的进程使用不同的内存空间,而所有的线程共享一片相同的内存空间。别把它和栈内存搞混,每个线程都拥有单独的栈内存用来存储本地数据。更多详细信息请点击这里。
,9,如何在Java中实现线程?
在语言层面有两种方式。java.lang.Thread 类的实例就是一个线程但是它需要调用java.lang.Runnable接口来执行,由于线程类本身就是调用的Runnable接口所以你可以继承java.lang.Thread 类或者直接调用Runnable接口来重写run()方法实现线程。更多详细信息请点击这里.
10,用Runnable还是Thread?
这个问题是上题的后续,大家都知道我们可以通过继承Thread类或者调用Runnable接口来实现线程,问题是,那个方法更好呢?什么情况下使用它?这个问题很容易回答,如果你知道Java不支持类的多重继承,但允许你调用多个接口。所以如果你要继承其他类,当然是调用Runnable接口好了。更多详细信息请点击这里。,
11,Thread 类中的start() 和 run() 方法有什么区别?
这个问题经常被问到,但还是能从此区分出面试者对Java线程模型的理解程度。start()方法被用来启动新创建的线程,而且start()内部调用了run()方法,这和直接调用run()方法的效果不一样。当你调用run()方法的时候,只会是在原来的线程中调用,没有新的线程启动,start()方法才会启动新线程。更多讨论请点击这里
12,自己的话简介Struts2执行流程
Struts 2的工作流程与WebWork框架基本相同,所以说Struts2是WebWork的升级版本。
基本简要流程如下:1、客户端浏览器发出HTTP请求。2、根据web.xml配置,该请求被FilterDispatcher接收。3、根据struts.xml配置,找到需要调用的Action类和方法,并通过IoC方式,将值注入给Aciton。4、Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。5、Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面。6、返回HTTP响应到客户端浏览器。
13,Java中Runnable和Callable有什么不同?
Runnable和Callable都代表那些要在不同的线程中执行的任务。Runnable从JDK1.0开始就有了,Callable是在JDK1.5增加的。它们的主要区别是Callable的 call() 方法可以返回值和抛出异常,而Runnable的run()方法没有这些功能。Callable可以返回装载有计算结果的Future对象。我的博客有更详细的说明。,
14,Java中CyclicBarrier 和 CountDownLatch有什么不同?
CyclicBarrier 和 CountDownLatch 都可以用来让一组线程等待其它线程。与 CyclicBarrier 不同的是,CountdownLatch 不能重新使用。点此查看更多信息和示例代码。
15,在Struts2中怎样把请求分发给方法去处理?
答:在struts.xml中就只需要配置一个action,在一个Action类中分发Action请求调用不同的方法。
16.如何对Object的list排序?
对objects数组进行排序,我们可以用Arrays.sort()方法
如果要对objects的集合进行排序,需要使用Collections.sort()方法
17. fail-fast 与 fail-safe 之间的区别?
Fail fast快速地报告任何的failure。无论何时任何一个问题都会引发 fail fast系统fails
在Java Fail fast 迭代器中,迭代objects集合有时会出现并发修改异常,出现这种情况有2个原因
如果一个线程正在迭代一个集合,而另一个线程同时试图修改这个集合
在调用remove()方法后,如何我们还试图去修改集合object
18. Iterator、ListIterator 和 Enumeration的区别?
Enumeration接口在Java1.2版本开始有,所以Enumeration是合法规范的接口
Enumeration使用elements()方法
Iterator对所有Java集合类都有实现
Iterator使用iterator方法
Iterator只能往一个方向前进
ListIterator仅仅对List类型的类实现了
ListIterator使用listIterator()方法
19.Java 中 Set 与 List 有什么不同?
Set是一个不允许重复元素存在的集合
Set没有索引
Set仅仅允许一个null值
Set有类:HashSet、LinkedHashMap、TreeSet
List有索引
List允许N个null值
List可以按插入顺序显示
List有类:Vector、ArrayList、LinkedList
20. arraylist 与 vector 的区别?
Vector 在Java的第一个版本就引入了,也就是说vector是一个合法规范的类
ArrayList在Java1.2版本引入的,是Java 集合框架的组成部分
Vector是同步的
ArrayList是不同步的
21.什么类实现了List接口?
ArrayList
LinkedList
Vector
22.什么类实现了Set接口?
HashSet
LinkedHashSet
TreeSet
23.如何保证一个集合线程安全?
Vector, Hashtable, Properties 和 Stack 都是同步的类,所以它们都线程安全的,可以被使用在多线程环境中
使用Collections.synchronizedList(list)) 方法,可以保证list类是线程安全的
使用java.util.Collections.synchronizedSet()方法可以保证set类是线程安全的
24.是否可以往 TreeSet 或者 HashSet 中添加 null 元素?
可以往 hashset 中添加一个 null
TreeSet 也允许一个 null值
25.Iterator符合哪个设计模式?
Iterator 设计模式
26.HashSet 实现了哪个数据结构?
HashSet 内部实现了hashmap
27.为什么 Collection 不能继承 Cloneable 和 Serializable?
List和Set唯一继承 Collection 接口
SortedMap 继承了 Map 接口
28.hashCode() 和 equals() 方法的重要性?如何在Java中使用它们?
hashCode() 和 equals() 方法定义在”object”类中
如果equals() 方法在比较2个对象时返回true,那么hashCode()的返回值必须得一样
Java热点新闻