java面试题+答案

1、JSP有哪些内置对象,作用分别是什么?

a) 一共有九个内置对象
pageContext javax.servlet.jsp.PageContext
request javax.servlet.http.HttpServletRequest
response javax.servlet.http.HttpServletResponse
session javax.servlet.http.HttpSession
application javax.servlet.Servlet Context –>可用this.getServletContext()替代
config javax.servlet.ServletConfig
exception java.lang.Throwable
page java.lang.Object
out javax.servlet.jsp.JspWriter
b) 作用:
1、pageContext 表示页容器 –>EL、标签、上传
2、request 服务器端取得客户端的信息:头信息、Cookie、请求参数、MVC设计模式
3、response 服务器端回应给客户端信息:Cookie、重定向
4、session 表示每一个用户,用于登录验证
5、application 表示整个服务器,getRealPath()
6、config 去的初始化参数,初始化参数在web.xml中配置
7、exception 表示的是错误页的处理操作
8、page 如同this一样,表示整个JSP页面
9、out 输出,但是尽量使用表达式输出

——————————————————————————————————————————————————————————————————

2、JSP页面间传递参数的方法有哪些?

JSP页面间传递参数是经常需要使用到的功能,有时还需要多个JSP页面间传递参数。下面介绍一下实现的方法。

(1)直接在URL请求后添加

如:< a href="thexuan.jsp?action=transparams&detail=directe">直接传递参数< /a>

特别的在使用response.sendRedirect做页面转向的时候,也可以用如下代码:

response.sendRedirect("thexuan.jsp?action=transparams&detail=directe") ,可用request.getParameter(name)取得参数

(2)jsp:param

它可以实现主页面向包含页面传递参数,如下:

 
 
  1. < jsp:include page="Relative URL"> 
  2.  
  3. < jsp:param name="param name" value="paramvalue" /> 
  4.  
  5. < /jsp:include> 

还可以实现在使用jsp:forward动作做页面跳转时传递参数,如下:

 
 
  1. < jsp:forward page="Relative URL"> 
  2.  
  3. < jsp:param name="paramname" value="paramvalue" /> 

< /jsp:forward> 通过这种方式和一般的表单参数一样的,也可以通过request.getParameter(name)取得参数

(3)设置session和request

通过显示的把参数放置到session和request中,以达到传递参数的目的

 
 
  1. session.setAttribute(name,value);  
  2.  
  3. request.setAttribute(name,value)  

取参数:

 
 
  1. value=(value className)session.getAttribute(name);  
  2.  
  3. value=(value className)request.getAttribute(name);  
  4.  

大家肯定已经注意到了,在取参数的时候,做了类型转换,这是因为放置在session和request中的对象的属性被看作 java.lang.Object类型的了,如果不转换,在将直付给value时会报classcastexception异常。

在多个JSP页面之间传递参数

1.       怎么在多个JSP页面之间进行参数传递?需要使用JSP的内置作用域对象session。利用它的两个方法setAttribute(),getAttribute()

2.       下面的这个实例实现了把第一个JSP页面的参数传递给第三个页面的功能

3.       代码如下:1.jsp

 
 
  1. < html> 
  2.        < form method=get action=2.jsp> 
  3.        what's your name< input type=text name=username> 
  4.        < input type=submit value=submit> 
  5.        < /form> 
  6. < /html> 

4.       2.jsp

 
 
  1. < html> 
  2.  
  3.        < form method=post action="3.jsp?pass=11"> 
  4.        < %  
  5.               String name=request.getParameter("username");  
  6.               session.setAttribute("username",name);  
  7.        %> 
  8.        Your name is:< %=request.getParameter("username")%> 
  9.        < br>what's your hobby< input type=text name=hobby> 
  10.        < input type=submit value=submit> 
  11.        < /form> 
  12. < /html> 
  13.  
  14.     

5.       3.jsp

 
 
  1. < html> 
  2.        your name is:< %=session.getAttribute("username")%> 
  3.        < br> 
  4.        your hobby is:< %=request.getParameter("hobby")%> 
  5.        < br> 
  6.        your password is:< %=request.getParameter("pass")%> 
  7.        < br> 
  8.        < /form> 
  9. < /html> 
——————————————————————————————————————————————————————————————————

3、servlet中什么时候调用 doGet和dopost 方法,这两个方法有什么不同?

第一:你的servlet如果是继承自HttpServlet,就必须重写它里面的两 个虚方法doGet和doPost,也就是说,先不管别的servlet或jsp会去调用哪个方法,这两个方法都应该有。

第二:至于它调用哪个方法,就看提交方式 <form action="myServlet" method="get" > method属性的值是get,它就去调用对应servlet的doGet方法。 同理,method属性的值是get,它就去调用对应servlet的doPost方法。 一般来说,不管采用那种提交方式,在servlet里要做的事情是一样的。所以,我们很多情况下,在一个方法里面调用另一个方法,这样随你那种方式提交的,都可以转去做一种处理。

——————————————————————————————————————————————————————————————————

4、左连接和右连接的区别?


假设有A,B两个表。  
 
表A记录如下:  
aID     aNum  
1     a20050111  
2     a20050112  
3     a20050113  
4     a20050114  
5     a20050115  
 
表B记录如下:  
bID     bName  
1     2006032401  
2     2006032402  
3     2006032403  
4     2006032404  
8     2006032408  
 
--------------------------------------------  
1. left  join  
sql语句如下:   
select  from  A  
left  join  B   
on  A.aID = B.bID  
 
结果如下:  
aID     aNum     bID     bName  
1     a20050111    1     2006032401  
2     a20050112    2     2006032402  
3     a20050113    3     2006032403  
4     a20050114    4     2006032404  
5     a20050115     NULL      NULL  
 
(所影响的行数为 5 行)  
结果说明:  
left  join 是以A表的记录为基础的,A可以看成左表,B可以看成右表, left  join 是以左表为准的.  
换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).  
B表记录不足的地方均为 NULL .  
--------------------------------------------  
2. right  join  
sql语句如下:   
select  from  A  
right  join  B   
on  A.aID = B.bID  
 
结果如下:  
aID     aNum     bID     bName  
1     a20050111    1     2006032401  
2     a20050112    2     2006032402  
3     a20050113    3     2006032403  
4     a20050114    4     2006032404  
NULL      NULL      8     2006032408  
 
(所影响的行数为 5 行)  
结果说明:  
仔细观察一下,就会发现,和 left  join 的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用 NULL 填充.  
--------------------------------------------  
3. inner  join  
sql语句如下:   
select  from  A  
innerjoin B   
on  A.aID = B.bID  
 
结果如下:  
aID     aNum     bID     bName  
1     a20050111    1     2006032401  
2     a20050112    2     2006032402  
3     a20050113    3     2006032403  
4     a20050114    4     2006032404  
 
结果说明:  
很明显,这里只显示出了 A.aID = B.bID的记录.这说明 inner  join 并不以谁为基础,它只显示符合条件的记录.  
--------------------------------------------  
PS:   
LEFT  JOIN 操作用于在任何的  FROM  子句中,组合来源表的记录。使用  LEFT  JOIN  运算来创建一个左边外部联接。左边外部联接将包含了从第一个(左边)开始的两个表中的全部记录,即使在第二个(右边)表中并没有相符值的记录。   
 
语法: FROM  table1  LEFT  JOIN  table2  ON  table1.field1 compopr table2.field2   
 
说明:table1, table2参数用于指定要将记录组合的表的名称。  
field1, field2参数指定被联接的字段的名称。且这些字段必须有相同的数据类型及包含相同类型的数据,但它们不需要有相同的名称。  
compopr参数指定关系比较运算符: "=" ,  "<" ,  ">" ,  "<=" ,  ">="  或  "<>" 。  
如果在 INNER  JOIN 操作中要联接包含Memo 数据类型或 OLE Object 数据类型数据的字段,将会发生错误   
 
注: left right 是外连接, Inner 是内连接。
 
多看看SQL的帮助就明白了 

——————————————————————————————————————————————————————————————————

5、存储过程和函数的区别?

本质上没区别。只是函数有限制只能返回一个标量,而存储过程可以返回多个。并且函数是可以嵌入在SQL中使用的,可以在SELECT等SQL语句中调用,而存储过程不行。执行的本质都一样。

——————————————————————————————————————————————————————————————————

6、事务是什么?在java中如何手工执行事务?

事务 指作为单个逻辑工作单元执行的一系列操作。 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性;在java中你要手工执行事务,如果是jdbc连接数据库,那么就设置提交的时候手动提交conn.setAutoCommit(false);//conn 是connection对象当结束后conn.commit();

——————————————————————————————————————————————————————————————————

7、java中会存在内存泄露吗?

会有的,虽然java虚拟机中的垃圾回收机制可以自动进行内存空间的申请和释放,但还是有些不能显式地进行释放,必须手动释放,比如关闭打开的文件和数据库连接.最后可能导致内存的可用空间越来越少,最终崩溃.

——————————————————————————————————————————————————————————————————

8、java中实现多态的机制是什么?

方法的重写Overriding和重载Overloading是Java多态性的不同表现.

重写Overriding是父类与子类之间多态性的一种表现

重载Overloading是一个类中多态性的一种表现


——————————————————————————————————————————————————————————————————

9、重载和重写的区别?

重载(Overloading) 
(1)       方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时
存在,具有不同的参数个数/类型。重载Overloading是一个类中多态性的一种表现。
(2)       Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具
有不同的参数和不同的定义。调用方法时通过传递给它们的不同参数个数和参数类型
来决定具体使用哪个方法这就是多态性。
(3)       重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同
也可以不相同。无法以返回型别作为重载函数的区分标准。

重写(Overriding
(1)    父类与子类之间的多态性,对父类的函数进行重新定义。如果在子类中定义某
           
方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)Java中,
子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不
动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又
称方法覆盖。
(2)    若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,
则新方法将覆盖原有的方法。如需父类中原有的方法,可使用super关键字,该关键
字引用了当前类的父类。
(3)    子类函数的访问修饰权限不能少于父类的; 
 
总结:重载和重写(覆盖) 
   
 方法的重写Overriding和重载OverloadingJava多态性的不同表现。重写
Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性
的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法
被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而
言,父类中的定义如同被屏蔽了,而且如果子类的方法名和参数类型和个数都和
父类相同,那么子类的返回值类型必须和父类的相同;如果在一个类中定义了多个同
名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载
(Overloading)Overloaded的方法是可以改变返回值的类型。也就是说,重载的返回
值类型可以相同也可以不同。

——————————————————————————————————————————————————————————————————

10、

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值