Java常见面试题(基础)

明天夏天准备去面试一下关于人工智能或者软件开发的暑期实习生,所以 提前准备一下,在网上看到一些很好的面试题,所以转载方便日后观看。


转自此处  

 

                    JAVA常见面试题

 

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<Integer> set = new TreeSet<Integer>();

       String[] s = str.split(" ");    //进行拆分

       for(String t : s) {

           set.add(Integer.parseInt(t));

       }

       System.out.println("排序之后的结果是:");

       for(Iterator<Integer> it = set.iterator(); it.hasNext();) {

           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 可变的字符串,线程安全的

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                    Java Web常见面试题

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有哪些动作?作用分别是什么?

所谓的动作实质上指的是标签指令。

<jsp:include>:包含

<jsp:forward>:跳转

<jsp:useBean>:使用userBean

<jsp:setProperty>:设置属性,通过反射调用方法。

<jsp:getProperty>:取得属性。

<jsp:plugin>:插入Applet程序的代码

 

3》:JSP中动态include与静态include的区别?

动态include:<jsp:include>,如果包含的是动态页面,则先编译再处理。

静态include:<%@ include%>,直接将内容先包含后处理。

 

4》:两种跳转的方式分别是什么?有什么区别?

服务器端跳转:<jsp:forward>,跳转之后地址栏不变,可以传递request属性,实际上是对RequestDispatcher接口的封装。

客户端跳转:response.sendRedirect(),跳转之后地址栏变化。

 

5》:请总结一下WEB开发中的会话跟踪实现。

1、session,也是最常用的一种

2、cookie

3、地址重写

4、隐藏域

 

6》:在WEB开发中需要处理HTML标记时,应该做什么样的处理,要筛选哪些字符(<,>,&,、)。

因为以上的标记都属于HTML范畴的内容,所以必须进行转义操作:&lt,&gt,&quot,&apos,&amp;

 

7》:说明JSP中errorPage的作用,应用范围。

    表示错误页的操作,在一般的站点中,只要有一个程序出现了错误,就是产生了异常,则可以统一跳转到一个页面上进行显示。那么这种操作就属于错误性的处理,但是简单的错误页基本上都是在JSP的开发中使用的。

    要想进行错误页的设置,需要满足以下两个条件:

    1:在错误能够处理的页上的page指令中,增加:isErrorPage=“true”,表示处理错误。

    2:在每一个页面制定errorpage,指向isErrorPage为true的页面。

如果现在希望配置一种全局的错误处理的话,则可以在web.xml中进行配置。

<error-page>

    <error-code>404</error-code>

    <location>/errors.jsp</location>

</error-page>

<error-page>

    <error-code>java.lang.NullPointerException</error-code>

    <location>/errors.jsp</location>

</error-page>

一旦出现错误之后,会自动跳转到指定的页面中,但是这种跳转,永远是属于服务器端的跳转。

 

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语句导入或者通过<jsp:useBean>

 

11》:说一说servlet的生命周期

1:初始化:正常一次:对应init方法,有两个init方法,其中一个是有ServletConfig对象,此方法存在,则无参不调用。正常情况下在第一次使用servlet的时候进行初始化操作,也可以配置 web.xml中在容器启动的时候初始化。<load-on-startup>

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中各个组件的运行代码,也可以配置整个容器的状态:<error-page><welcome-file-list><servlet><session-timeout>

<listener><filter>等等


猜你喜欢

转载自blog.csdn.net/StarCoder_WangYue/article/details/77206929