明天夏天准备去面试一下关于人工智能或者软件开发的暑期实习生,所以 提前准备一下,在网上看到一些很好的面试题,所以转载方便日后观看。
转自此处
1》:Java中的异常处理机制的简单原理和应用
简单原理:每当产生异常之后,如果没有程序进行相应的处理,则程序出现中断的现象,那么,此时实际上一旦产生一个异常之后,JVM会抛出一个异常类的实例对象,如果此时使用了try语句进行捕获,则可以进行异常处理,如果没有的话,则交给JVM进行处理,当try语句捕获到了异常之后,会与catch中的异常类进行匹配,如果匹配成功,则使用此catch语句进行处理。
应用:简单的引用,就是在所有有throws关键字的地方加入try…catch
如果按照一个标准做法的话,try、catch、finally、throw、throws关键字应该一起使用。
2》:垃圾回收的优点和原理。并考虑两种回收机制。
优点和原理:将无用的对象空间进行释放。
两种回收:自动回收,手工调用System.gc()方法。调用System.gc()方法实际上相当于调用了RunTime.getRumTime().gc()方法。
3》:Error和Exception有什么区别?
Error:表示是由JVM进行处理的,是JVM出错。
Exception:是可以由程序进行处理的。使用try…catch进行处理.
4》:谈谈final,finally,finallize的区别.
Final是定义常量、方法、和类的,声明的方法不能被覆写、声明的类不能被继承。
Finally是异常的统一出口。
Finallize是垃圾回收前的收尾工作。是Object对象定义的。
5》:Anonymous Inner Class(匿名内部类)是否可以extends(继承)其他类,是否可以implements(实现)Interface(接口)
允许继承或实现,因为匿名内部类就是在抽象类和接口的基础上发展起来的。
6》:Static Nested Class和Inner Class的不同。
使用static声明的内部类就是外部类,可以通过外部类.内部类直接访问。
普通的内部类是不能被外部所直接访问的。需要通过外部类实例再找到内部类实例。
7》:HashMap和HashTable的区别
|-HashMap:是jdk1.2之后推出的,是新的类。
采用异步处理方式,性能较高,但并非线程安全。
允许设置为null
|-HashTable:是Jdk1.0之后推出的,是旧的类
采用同步处理方式,性能较低,但是属于线程安全。
不允许设置null,否则将出现NullPointException
8》:什么时候用assert?
Jdk1.4之后增加的新关键字---assert,表示断言,即程序执行到某个地方之后肯定是预计好的。
一般程序中很少使用assert
要想使用断言,则必须使用-ea参数。
9》:GC是什么?为什么要有GC?
GC:垃圾收集
使用GC可以进行垃圾空间的释放操作.
10》:String s = new String(“xyz”);创建了几个String Object?
产生了两个实例化对象,一个是匿名对象“xyz”,另外一个是通过关键字new实例化的。
11》:sleep()和wait()方法有什么区别?
Sleep()是Thread定义的方法,表示线程的休眠,会自动唤醒。
Wait()是Object里的方法,需要手工调用notify()或notifyAll()方法。
12》:Java中有没有goto?
Goto属于保留的关键字,Java中存在goto,只是无法使用。
13》:数组中有没有length()这个方法?String中有没有length()这个方法?
数组中存在length这个属性,String中存在length()这个方法.
14》:Overload和Override的区别。Overload的方法是否可以改变返回值的类型?
Overload重载:在一个类中定义的若干方法。
所有的方法名称相同,但是参数的个数或类型不同。
Override覆写:在继承的关系中
子类定义了与父类相同的方法,参数个数或类型最好完全一样。注意访问权限不能更加严格。
Overload重载的时候不是靠返回值类型区分的,而是靠参数。
15》:Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还是equals()?他们有何区别?
依靠hashCode()和equals()两个方法完成,==属于地址比较,而equals()属于内容比较。使用的是equals()方法。
16》:列举出一些常见的runtime Exception。
NumberFormatException、ArrayOutIndexOfBoundException、NullPointerException、ClassCastException
17》:abstract Class和interface有什么区别?
抽象类:1:由抽象方法和常量,变量、全局常量、构造方法、普通方法组成。
2:使用abstract声明。
3:子类要通过extends继承抽象类,子类如果不是抽象类,则必须覆写抽象类 的全部抽象方法。
4:存在单继承局限,一个子类只能继承一个抽象类。
5:抽象类可以实现若干个接口
接口:1:全部由抽象方法和全局常量组成。
2:使用interface声明。
3:子类通过implements实现接口,子类如果不是抽象类,则必须覆写抽象类中的全部抽象方法。
4:不存在单继承局限,一个子类可以同时实现多个接口。
5:接口不能继承一个抽象类,但是允许继承多个接口。
18》:启动一个线程是用run()还是start()?
使用start()方法,因为要通知JVM进行PCU资源分配。
19》:try{}里有一个return语句,那么紧跟在try后的finally{}里的code会不会被执行,什么时候被执行,在return前还是后?
会执行,在return之前执行,只要是finally{}的代码永远会被执行。
20》:写一个singleton出来。
核心就是构造方法私有化。
Public class Singleton{
Private static final Singleton sin = new Singleton();
Private Singleton(){}; //将构造方法私有化
Public static Singleton getInstance() {
Return sin;
}
}
在Java中有Runtime类、Class类属于单例设计。
21》:编一段代码,实现在控制台里输入一组数字后,排序在控制台里输出。
假设数字中间使用“ ”进行分隔,既然可以排序,则可以
Public void queueIntArray() {
BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入一组数据");
String str = buf.readLine();
Set
String[] s = str.split(" "); //进行拆分
for(String t : s) {
set.add(Integer.parseInt(t));
}
System.out.println("排序之后的结果是:");
for(Iterator
System.out.print(it.next() + "\t");
}
}
22》:列出某文件夹下的所有文件。
递归方法的调用
public static void main(String[] args) {
File file = new File("D:" + File.separator + "sse3.2");
fun(file);
}
public static void fun(File file) {
if(file.isDirectory()) {
File[] f = file.listFiles();
if(f != null) {
for(int i = 0; i < f.length; i ++) {
fun(f[i]);
}
}
} else {
System.out.println(file);
}
}
23》:char型变量中能不能存储一个中文汉字?为什么?
可以存放,因为使用的是unicode编码.
24》:多线程有几中实现方法?都是什么?同步有几种实现方式?都是什么?
多线程:两种实现方式。继承Thread类,实现Runnable接口。
1:Thread类是Runnable接口的子类。
2:使用Runnable接口可以实现资源共享的目的。
3:所有线程操作都必须通过Thread类的start()方法启动。
同步:两种实现方式:
1:同步代码块:Synchronized(this){}
2:同步方法
25》:float型float f = 3.4是否正确?
不正确,因为默认情况下3.4是double类型的数据。
26》:String与StringBuffer的区别是什么?
String不可以修改,String允许修改。
27》:Class.forName的作用?为什么要用。
Class.forName属于向容器中加入驱动程序,例如:JDBC中的使用。
28》:int和Integer有什么别?
Int是基本数据类型,Integer是包装类
在JDK1.5之后,可以实现自动装箱及拆箱的操作
29》:用最有效的方法算出2乘以8等于几?
使用移位操作:2<<3
30》:请说出类集框架的完整结构。
1:类集框架最大的接口:Collection、Map、Iterator
2:Collection存放单值
List:允许有重复内容
ArrayList:异步处理,新的操作类,非线程安全
Vector:同步处理:旧的操作类,线程安全,支持Enumeration
Set:不允许有重复内容,靠hashCode()和equals()进行重复的验证。
HashSet:无序排列
TreeSet:有序排列,按Comparable排序
3:Map:存放-对值
HashMap:新的类,异步处理,非线程安全,允许有null
HashTable:新的类,同步处理,非线程安全,不允许有null
Properties:属性操作类
TreeMap:有序排列,按key排序,根据Compariable制定排序规则。
4:Iterator:
迭代输出,依靠Collection接口的iterator方法输出,是新的输出标准
5:Enumeration:旧的输出。
31:是否允许继承String类。
不允许,因为使用了final声明。
32:String、Stringbuffer、Stringbuilder的区别是什么?
string不可变的字符串
stringbuilder可变的字符串,非线程安全的
stringbuffer 可变的字符串,线程安全的
1:JSP有哪些内置对象?作用分别是什么?
一共有9个内置对象。
PageContext javax.servlet.jsp.PageContext
Request javax.servlet.http.HttpServletRequest
Response javax.servlet.http.HttpServletResponse
Session javax.servlet.http.HttpSession
Application javax.servlet.ServletContext àthis.getServletContext()
Config javax.servlet.ServletConfig
Exception java.lang.Throwable
Page java.lang.Object
Out javax.servlet.jsp.JspWriter
作用:
1:pageConext 表示页容器 ->EL、标签、上传
2:request 服务器端取得客户端的信息 :头信息、Cookie、请求参数
3:response 服务器端回应给客户端的信息 :Cookie、重定向
4:session 表示每一个用户,用户验证登陆上
5:applcation 表示整个服务器, getRealPath()
6:config 取得初始化参数,初始化参数 web.xml中配置。
7:exception 表示的是错误页的处理操作
8:page 如同this一样,表示的是整个jsp页面。
9:out 输出,但是尽量使用表达式输出。
2》:JSP有哪些动作?作用分别是什么?
所谓的动作实质上指的是标签指令。
3》:JSP中动态include与静态include的区别?
动态include:
静态include:<%@ include%>,直接将内容先包含后处理。
4》:两种跳转的方式分别是什么?有什么区别?
服务器端跳转:
客户端跳转:response.sendRedirect(),跳转之后地址栏变化。
5》:请总结一下WEB开发中的会话跟踪实现。
1、session,也是最常用的一种
2、cookie
3、地址重写
4、隐藏域
6》:在WEB开发中需要处理HTML标记时,应该做什么样的处理,要筛选哪些字符(<,>,&,、)。
因为以上的标记都属于HTML范畴的内容,所以必须进行转义操作:<,>,",&apos,&
7》:说明JSP中errorPage的作用,应用范围。
表示错误页的操作,在一般的站点中,只要有一个程序出现了错误,就是产生了异常,则可以统一跳转到一个页面上进行显示。那么这种操作就属于错误性的处理,但是简单的错误页基本上都是在JSP的开发中使用的。
要想进行错误页的设置,需要满足以下两个条件:
1:在错误能够处理的页上的page指令中,增加:isErrorPage=“true”,表示处理错误。
2:在每一个页面制定errorpage,指向isErrorPage为true的页面。
如果现在希望配置一种全局的错误处理的话,则可以在web.xml中进行配置。
一旦出现错误之后,会自动跳转到指定的页面中,但是这种跳转,永远是属于服务器端的跳转。
8》:写一段JDBC连接Oracle的程序,并实现数据查询。
A:步骤
1:定义一系列的全局常量:驱动程序,连接地址,用户名,密码。
2:加载驱动程序
3:连接数据库
4:操作数据库:更新或查询
5:关闭数据库
B:
Public static final String DRIVER = “oracle.jdbc.driver.OracleDriver”
Public static final String URL= “jdbc:oracle:thin:@localhost:1052:MLDN”
Public static final String USER = “zhj”;
Public static final String PWD = “zhj”;
Collection conn = null;
PreparedStatement pst = null;
ResultSet rs = null;
String sql = “select name from emp”;
Class.forName(DRIVER);
Pst = conn.preparedStatement(sql);
Rs = pst.executeQuery();
While(rs.next()){
Int empNo = rs.getInt(1);
String eName = rs.getString(2);
}
Rs.close();
Pst.close();
Conn.close();
9》:简述JSP中是如何实现分页操作的。
真分页:性能较高,是基于数据库的操作。是从数据库中取出部分数据进行显示,所以性能很高,但是可一移植性低.
假分页:性能较低,是将全部的结果查询出来,之后依靠分页算法,只显示部分数据。因为使用的是通用的语法,所以可移植性很高。
真分页的原理:
1:定义一系列的变量:currentPage、lineSize、并通过查询求出allRecords和计算出pageSize。 PageSize= (allRecord + lineSize – 1) / lineSize;
2:之后数据库查询语句中根据lineSize和currentPage进行数据的查询。 Oracle中使用rownum,mysql中使用limit()
3:之后通过表单不断的修改currentPage和lineSize就可以实现分页显示。
10》:介绍在JSP中如何使用JavaBean?
JavaBean的格式要求:必须有包、public class 声明、属性封装、无参构造、setter、getter方法。
Import语句导入或者通过
11》:说一说servlet的生命周期
1:初始化:正常一次:对应init方法,有两个init方法,其中一个是有ServletConfig对象,此方法存在,则无参不调用。正常情况下在第一次使用servlet的时候进行初始化操作,也可以配置 web.xml中在容器启动的时候初始化。
2:服务:服务多次,所有的服务都由service方法分配,主要有doGet方法和doPost方法,分别处理doGet和doPost请求。
3:销毁:正常一次,调用destory方法,如果servlet长时间不使用也会自动销毁。
12》:servlet的forward()和redirect()的区别。
Forward是RequestDispatcher接口定义的,而redirect方法是response定义的。一个是服务器跳转,另一个是客户端跳转。
13》:MVC的各个部分都有哪些技术来实现,如何实现。
MVC:model、view、colltroller
|-Model:javabean:业务处理,数据处理。
|-view:显示的jsp,最好不存在任何的scriptlet,可以使用标签消除。
|-Controller:控制,接收View传递的内容和调用的Javabean,并根据javabean的处理结果进行跳转。
实现原理:所有的jsp将内容提交给servlet,servlet接受这些内容并调用相应的javabean进行业务及数据的处理,一般javabean有专人负责开发,完成业务的操作流程,而servlet调用的只是接口,并根据这些接口的操作结果将内容交给JSP进行显示。
14》:简述国际化的实现原理
Local、属性文件,ResourceBoundle
国际化程序的实现,是根据本机的操作系统的语言类型,选择不同的属性文件,所有程序的基本代码一样。但是现实文件不一样。所以将内容作为属性文件出现之后,可以只显示属性文件中的文字。
15》:描述JSP和Servlet的区别,共同点,各自应用的范围。
先有servlet,再有jsp,servlet是java中嵌入HTML代码,而JSP是HTML中嵌入Java代码。
共同点:JSP可以完成的功能,Servlet都可以完成,但是对于过滤器,监听器只能由servlet完成。
应用范围:JSP用于显示,而Servlet用于控制。
16》:简述web.xml的应用。
属于部署描述符,在整个Java中只要是容器都会存在部署描述符,此部署描述符可以控制整个WEB中各个组件的运行代码,也可以配置整个容器的状态: