Java、Java Web面试题(来源于MLDN、北方网)

来源于MLDN:

1.垃圾回收的优点和原理。

       将无用的对象空间进行释放。两种回收:自动回收和手动回收。手动回收实际上就是调用System.gc(),调用此方法于调用了Runtime.getRuntime().gc()方法。

2.ErrorException的区别。

       ErrorJVM进行处理,是JVM出错。Exception是可以由程序进行处理的。

3.匿名内部类是否可以extends其他类,是否可以实现interface

允许继承或者实现,因为匿名内部类是在抽象类或者接口的基础上发展起来的。

4.Static Nested ClassInner Class的不同

       使用static声明的内部类就是外部类,可以通过外部类.内部类直接进行访问

       普通的内部类是不能直接被外部所访问的,需要通过外部类实例在找到内部类的实例。

5.HashMapHashTable的区别。

       HashMap:采用异步处理方式,性能高,但是属于非线程安全。允许设置null

HashTable:采用同步处理方式,性能较低,线程安全,不允许设置null

6.GC是什么?为什么要GC?

       GC是垃圾收集。使用GC可以进行垃圾空间的释放操作。

7.sleep()wait()的区别

       sleep()Thread类中定义的方法,表示线程的休眠,会自动唤醒。Sleep不释放锁。

       Waitobject中定义的方法,需要使用notify或者notifyAll方法唤醒。Wait释放锁。

8.Java中的那些类是满足单例模式?

       Class类和Runtime类。
9.char
能不能存中文?

       能,因为使用的是Unicode编码。

10.多线程有几种实现方法?同步有几种方法?

       多线程有两种方法:继承Thread类和实现Runnable接口。Thread类是Runnable接口的子类,使用Runnable接口可以实现资源共享的目的,所有的线程操作都必须使用Thread类的start方法启动。

实现同步的方法有两种:synchronized代码块和synchronized方法。

11.StringStringBuffer的区别?

       String不能修改,StringBuffer能够修改。

12.Class.forName的作用是什么?

       Class.forName属于向容器之中加载驱动程序。

13.说出类集合框架的完整结构。

       类集框架最大的几个接口:ConnectionMapInteratorEnumeration

       |-Connection:存放单值的:

              |-List:允许有重复内容

                     |-ArrayList:异步处理,新的操作类,非线程安全

                     |-Vector:同步处理,旧的操作类,线程安全,支持Enumeration输出

             |-Set:不允许有重复内容,依靠hashCodeequals记性重复的验证

                     |-HashSet:无序存放

                     |-TreeSet:有序排列,按照Comparable排序

       |-Map:存放一对值

              |-HashMap:新的类,异步处理,非线程安全,允许null

              |-HashTable:旧的类,同步处理,线程安全,不允许为null

                     |-Properties:属性操作类

              |-TreeMap:有序排列,按照key排序,根据Comparaable指定排序规则

       |-Iterator:迭代输出,依靠Collection接口中的iterator方法输出,是新的输出标准。

       |-Enumeration:旧的输出操作。

14.Sting能不能继承?

       不能,因为使用final修饰。

15.JSP有哪些内置对象?(ROSEAPPRC(玫瑰应用发行版))

       一共九个内置对象。

       1.pageContext->javax.servlet.jsp.PageContet.表示页容器

2.request->javax.servlet.http.HttpServletRequest.服务器端取得客户端的信息

3.response->javax.servlet.http.HttpServletResponse.服务器端回应给客户端的信息

4.session->javax.servlet.http.HttpSession.表示每一个用户用于登录验证

5.application->javax.servlet.ServletContext.可以通过this.getServletContext()方法替代.表示整个服务器的上下文,常用方法是getRealPath()    

6.config->javax.servletServletConfig.取得初始化参数,在web.xml中配置

7.exception->java.lang.Throwable.表示错误页的处理操作

8.page->java.lang.Object.如同this一样,表示整个JSP页面。

9.out->javax.servlet.jsp.JspWriter.输出,尽量使用表达式输出。

16.JSP有哪些动作?

       所谓的动作,指的是标签指令。

       1.<jsp:include>:包含

       2.<jsp:forward>:跳转

       3.<jsp:useBean>:使用JavaBean

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

       5.<jsp:getProperty>:取得属性

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

17.JSP中动态include与静态include的区别

       动态include<jsp:include>,如果包含的是动态页,则先编译之后再进行处理

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

18.两种跳转的方式分别是什么,什么区别?

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

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

19.总结Web开发中会话跟踪的实现。

       1.session,最常用的一种

       2.Cookie

       3.地址重写

       4.表单隐藏域

20.说明JSP中的errorPage的作用,应用范围。

       表示错误页的操作,在一般的站点中,只要一个程序出现错误或者一行,则可以进行显示。简单的错误页基本上都是在JSP的开发中使用。要先使用errorPage需要满足:

1.       在错误处理的页面上的page指令中,增加isErrorPage=”true”

2.       在每个页面中指定errorPage,指定isErrorPagetrue的页面

如果想要建立全局的错误处理,需要在web.xml中进行配置。

21.JDBC连接Oracle的程序,实现查询。

       1.定义一系列的全局常量:驱动路径、连接地址、用户名、密码

       2.加载驱动程序

       3.连接数据库

       4.操作数据库,更新或查询

       5.关闭数据库

Public static final String DBDRIVER = “oracle.jdbc.driver.OracleDriver”;

Public static final String DBURL = “jdbc:oracle:thin:@loalhost:1521:CONAN”;

Public static final String DBUSER = “scott”;

Public static final String DBPASSWORD = “tiger”;

Connection conn = null;

PreparedStatement pstmt = null;

ResultSet rs = null;

String sql = “SELECT empno,ename,job FROM emp”;

Class.forName(DBDRIVER);

Conn.Drever,Manager.getConnection(DBURL,DBUSER,DBPASSWORD);

Pstmt=conn.prepareStatement(sql);

rs=pstmt.executeQuery();
while(rs.next())

{

Int empno = rs.getInt(1);

String ename = rs.getString(2);

String job = rs.getString(3);

}

Rs.close();

Pstmt.close();

Conn.close();//正着打开,反着关闭

22.JSP中如何实现分页操作?

       分页分为真分页和假分页。

       真分页:性能高,基于数据库的操作,只是从数据库中去纯白虎部分的数据进行显示,但可移植性低。

       假分页:性能低,查询全部结果,之后依靠算法分页,可移植性高。

       实现原理:

1.       定义一些列的变量:curruentPagelineSize,计算出pageSizeallRecorders

2.       pageSize=allRecords+lineSize-1/lineSize

3.       之后的数据查询执行lineSizecurrentPage进行数据的查询

4.       通过表单不断的修改currentPagelineSize就可以实现分页显示

23.Servlet声明周期。

       0.加载

       1.初始化。正常一次,对应init()方法,有两个inti()方法,其中一个是ServletConfig对象,此方法存在则无参不调用,正常情况下在第一次使用Servlet的时候才进行初始化操作。当然,也可以通过在容器启动的时候自动进行初始化:<load-on-startup>

       2.服务。服务多次。所有的服务都由services方法分配,主要由doGetdoPost

       3.销毁。正常一次,调用destroy方法。如果一个servlet长时间不使用,也会自动销毁,而当再次使用时也会重新初始化。

       4.卸载。加载和卸载有容器处理。

24.Servlet中的forwardredirect的区别

       ForwardRequestDispatcher接口定义的,而redirectresponse定义的。一个是服务器端跳转,一个是客户端跳转。

25.MVC各部分的技术,如何实现。

       MVC:MODELVIEWCONTROLLER

       |-Mode:JavaBean:业务处理、数据处理

       |-View:最好不存在Scriptlet,可使用标签消除

|-Controller:控制,接受View传递的内容和调用JavaBean,并根据JavaBean的处理结果进行跳转。

实现原理:所有的JSP将内容提交给ServletServlet接受这些内容并调用相应的JavaBean进行业务及数据的处理,JavaBean完成业务的操作。之后Servlet将其提交给JSP显示。

26.实现国际化的思路。

       Local、属性文件、ResourceBundle

       国际化程序的实现,是根据本机操作系统的语言类型,根据不同的属性文件,所有的程序代码基本一样,但是文字显示不一样,所以将内容作为属性文件出现之后,可以值显示属性文件中的字。

27.描述JSPServlet的区别、共同点、各自应用的范围。

       JSP:先有Servlet,再有JSPServlet是在Java中嵌入HTMLJSP是在HTML中嵌入Java代码。

JSP可以完成的,Servlet都可以完成,但是对于过滤器、监听器只能由Servlet完成。

应用范围:JSP用于显示,Servlet用于控制。

28.简述web.xml的作用

       称为部署描述符,在整个Java中是容器都会存在部署描述符,此部署描述符可以控制整个web中各个组件的运行状态。


北风网笔试面试精讲

1.    找奇数:public static Boolean isOdd(int i){return i%2==1;}

忽略了对负数进行考虑。比如-1%2就是false,但是-1是奇数。应该为return i%2!=0;

2.    浮点数想加减:System.out.pirntln(2.0-1.1);输出结果为0.9999999999

Java默认为double,因此输出的小数位数长。可改为System.out.printf(“%.2f”,2.0-1.1);输出为0.9.

3.    长整除:final long MICRO = 24*60*60*1000*1000;final MILL = 24*60*60*1000;System.out.println(MICRO/MILL);结果不为1000

应该为:final long MICRO = 24L*60*60*1000*1000;final MILL = 24L*60*60*1000;因为之前都是int型,最终MICROMILL都是int型,计算式溢出。可以通过在其中一个数加上L提升整体的类型为long型。

4.    交换变量:int x =1948;int y = 2001; x^=y^=x^y=y;

C/C++中可以这样,但是Java中应该改为:y=(x^=(y^=x))^y

       5.    System.out.proint(‘H’+’a’);

              输出结果为169。因为单引号表示字符char,相加的会自动提升为int型。

6.    字符数组:char[] numbers = {’1’,’2’};System.out.println(number);输出为12.而如下语句System.out.println(“number”+number);输出为number@2342.

       因为跟字符串运算时默认调用toStirng方法,数组的toString默认为ObjecttoString,打印出来的是hashCode

7.         转义字符:System.out.println(“a\u0022.length()+\u0022b”.length());

输出结果为2。因为\u0022表示的是双引号的转义字符。

8.         打印输出类名:MyClass.class.getName().replaceAll(“.”,”/”+”.class”);

还是需要注意转义字符的使用。“.”应该改为“\\.”。

       9.    StringBuffer的使用;

StringBuffer构造时有StringBuffer(int capacity),因此使用StringBuffer sb = new StringBuffer(‘p’);需要格外注意, ‘P’表示的是int类型的数!!!可改为“P”

       10.   Math.rand(-11.5)=-11.四舍五入往前如!

       11.   I/Ofinally中其实也不能写close关闭语句,因为close关闭语句也会抛出异常。


发布了100 篇原创文章 · 获赞 208 · 访问量 42万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览