当前位置: 首页 / 技术干货 / 正文
好程序员Java教程分享面试宝典之Java Web篇20题

2020-02-25

Java培训 Java教程 好程序员

  1.session和cookie的区别

  session是存储在服务器端,cookie是存储在客户端的,所以安全来讲session的安全性要比cookie高,然后我们获取session里的信息是通过存放在会话cookie里的sessionid获取的。又由于session是存放在服务器的内存中,所以session里的东西不断增加会造成服务器的负担,所以会把很重要的信息存储在session中,而把一些次要东西存储在客户端的cookie里,然后cookie确切的说分为两大类分为会话cookie和持久化cookie,会话cookie确切的说是,存放在客户端浏览器的内存中,所以说他的生命周期和浏览器是一致的,浏览器关了会话cookie也就消失了,然而持久化cookie是存放在客户端硬盘中,而持久化cookie的生命周期就是我们在设置cookie时候设置的那个保存时间,然后我们考虑一问题当浏览器关闭时session会不会丢失,从上面叙述分析session的信息是通过会话cookiesessionid获取的,当浏览器关闭的时候会话cookie消失所以我们的sessionid也就消失了,但是session的信息还存在服务器端,这时我们只是查不到所谓的session但它并不是不存在。那么,session在什么情况下丢失,就是在服务器关闭的时候,或者是session过期(默认时间是30分钟),再或者调用了invalidate()的或者是我们想要session中的某一条数据消失调用session.removeAttribute()方法,然后session在什么时候被创建呢,确切的说是通过调用getsession()来创建,这就是sessioncookie的区别.

  2、session和cookie联系?

  session是通过cookie来工作的sessioncookie之间是通过$_COOKIE['PHPSESSID']来联系的,通过$_COOKIE['PHPSESSID']可以知道sessionid,从而获取到其他的信息。
在购物网站中通常将用户加入购物车的商品联通session_id记录到数据库中,当用户再次访问是,通过sessionid就可以查找到用户上次加入购物车的商品。因为sessionid是唯一的,记录到数据库中就可以根据这个查找了。

  3.servlet的生命周期?

  Servlet生命周期可以分成四个阶段:加载和实例化、初始化、服务、销毁。

  当客户第一次请求时,首先判断是否存在Servlet对象,若不存在,则由Web容器创建对象,而后调用init()方法对其初始化,此初始化方法在整个Servlet生命周期中只调用一次。

  完成Servlet对象的创建和实例化之后,Web容器会调用Servlet对象的service()方法来处理请求。

  Web容器关闭或者Servlet对象要从容器中被删除时,会自动调用destory()方法。

Java2

  4.什么是webservice

  从表面上看,WebService就是一个应用程序向外界暴露出一个能通过Web进行调用的API,也就是说能用编程的方法通过Web来调用这个应用程序。我们把调用这个WebService的应用程序叫做客户端,而把提供这个WebService的应用程序叫做服务端。从深层次看,WebService是建立可互操作的分布式应用程序的新平台,是一个平台,是一套标准。它定义了应用程序如何在Web上实现互操作性,你可以用任何你喜欢的语言,在任何你喜欢的平台上写Web service ,只要我们可以通过Web service标准对这些服务进行查询和访问。

  5.jsp和servlet的区别、共同点、各自应用的范围

  JSPServlet技术的扩展,本质上就是Servlet的简易方式。JSP编译后是“类servlet”。ServletJSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是JavaHTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。在struts框架中,JSP位于MVC设计模式的视图层,而Servlet位于控制层。

  6.转发(forward)和重定向(redirect)的区别

  1、从地址栏显示来说
forward是服务器请求资源服务器直接访问目标地址的URL,把那个URL的响应内容读取过来然后把这些内容再发给浏览器浏览器根本不知道服务器发送的内容从哪里来的所以它的地址栏还是原来的地址

  redirect是服务端根据逻辑发送一个状态码告诉浏览器重新去请求那个地址所以地址栏显示的是新的URL。

  2、从数据共享来说
forward:转发页面和转发到的页面可以共享request里面的数据
redirect:不能共享数据

  3、从运用地方来说
forward:一般用于用户登陆的时候,根据角色转发到相应的模块
redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等

  4、从效率来说
forward:

  redirect:

  7.request.getAttribute()和request.getParameter()有何区别?

  1request.getParameter()取得是通过容器的实现来取得通过类似postget等方式传入的数据。

  2request.setAttribute()getAttribute()只是在web容器内部流转,仅仅是请求处理阶段。

  3getAttribute是返回对象,getParameter返回字符串

  4getAttribute()一向是和setAttribute()一起使用的,只有先用setAttribute()设置之后,才能够通过getAttribute()来获得值,它们传递的是Object类型的数据。而且必须在同一个request对象中使用才有效。,getParameter()是接收表单的get或者post提交过来的参数

  8.jsp静态包含和动态包含的区别

  1、两者格式不同,静态包含:<%@ include file="文件" %>,而动态包含:<jsp : include page = "文件" />

  2、包含时间不同,静态包含是先将几个文件合并,然后再被编译,缺点就是如果含有相同的标签,会出错。动态包含是页面被请求时编译,将结果放在一个页面。

  3、生成的文件不同,静态包含会生成一个包含页面名字的servletclass文件;而动态包含会各自生成对应的servletclass文件

  4、.传递参数不同,动态包含能够传递参数,而静态包含不能

  9.MVC的各个部分都有哪些技术来实现?如何实现?

  MVCModelViewController的简写。"Model" 代表的是应用的业务逻辑(通过JavaBeanEJB组件实现), "View" 是应用的表示面(由JSP页面产生),"Controller" 是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示

  逻辑分成不同的组件实现。这些组件可以进行交互和重用。

  10.jsp有哪些内置对象?作用分别是什么?

  JSP9个内置对象: 
request:封装客户端的请求,其中包含来自GETPOST请求的参数; 
response:封装服务器对客户端的响应; 
pageContext:通过该对象可以获取其他对象; 
session:封装用户会话的对象; 
application:封装服务器运行环境的对象; 
out:输出服务器响应的输出流对象; 
configWeb应用的配置对象; 
pageJSP页面本身(相当于Java程序中的this); 
exception:封装页面抛出异常的对象。

  11.Http请求的get和post方法的区别。

  1Get是向服务器发索取数据的一种请求,而Post是向服务器提交数据的一种请求

  2Get是获取信息,而不是修改信息,类似数据库查询功能一样,数据不会被修改

  3Get请求的参数会跟在url后进行传递,请求的数据会附在URL之后,以?分割URL和传输数据,参数之间以&相连,XX中的XX为该符号以16进制表示的ASCII,如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密。
4Get传输的数据有大小限制,因为GET是通过URL提交数据,那么GET可提交的数据量就跟URL的长度有直接关系了,不同的浏览器对URL的长度的限制是不同的。

  5GET请求的数据会被浏览器缓存起来,用户名和密码将明文出现在URL上,其他人可以查到历史浏览记录,数据不太安全。

  在服务器端,用Request.QueryString来获取Get方式提交来的数据
Post请求则作为http消息的实际内容发送给web服务器,数据放置在HTML Header内提交,Post没有限制提交的数据。PostGet安全,当数据是中文或者不敏感的数据,则用get,因为使用get,参数会显示在地址,对于敏感数据和不是中文字符的数据,则用post
6POST表示可能修改变服务器上的资源的请求,在服务器端,用Post方式提交的数据只能用Request.Form来获取。

  12.tomcat容器是如何创建servlet类实例?用到了什么原理?

  当容器启动时,会读取在webapps目录下所有的web应用中的web.xml文件,然后对xml文件进行解析,并读取servlet注册信息。然后,将每个应用中注册的servlet类都进行加载,并通过反射的方式实例化。(有时候也是在第一次请求时实例化)
  在servlet注册时加上<load-on-startup>1</load-on-startup>如果为正数,则在一开始就实例化,如果不写或为负数,则第一次请求实例化。

  13.JDBC访问数据库的基本步骤是什么?

  第一步:Class.forName()加载数据库连接驱动;

  第二步:DriverManager.getConnection()获取数据连接对象;

  第三步:根据SQL获取sql会话对象,有2种方式 StatementPreparedStatement ;

  第四步:执行SQL,执行SQL前如果有参数值就设置参数值setXXX();

  第五步:处理结果集;

  第六步:关闭结果集、关闭会话、关闭连接。

  14.为什么要使用PreparedStatement

  PreparedStatement接口继承StatementPreparedStatement实例包含已编译的SQL语句,所以其执行速度要快于Statement对象。

  作为Statement的子类, PreparedStatement 继承了Statement的所有功能。三种方法executeexecuteQueryexecuteUpdate已被更改以使之不再需要参数。

   JDBC 应用中,多数情况下使用PreparedStatement,原因如下:

  代码的可读性和可维护性。Statement需要不断地拼接,而PreparedStatement不会。

  PreparedStatement尽最大可能提高性能。DB有缓存机制,相同的预编译语句再次被调用不会再次需要编译。

  最重要的一点是极大地提高了安全性。Statement容易被SQL注入,而PreparedStatement传入的内容不会和sql 语句发生任何匹配关系。

  15.数据库连接池的原理。为什么要使用连接池?

  1数据库连接是一件费时的操作,连接池可以使多个操作共享一个连接。
2数据库连接池的基本思想就是为数据库连接建立一个缓冲池。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从缓冲池中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量、使用情况,为系统开发,测试及性能调整提供依据。
3使用连接池是为了提高对数据库连接资源的管理

  16.execute,executeQuery,executeUpdate的区别是什么?

  1Statementexecute(String query)方法用来执行任意的SQL查询,如果查询的结果是一个ResultSet,这个方法就返回true。如果结果不是ResultSet,比如insert或者update查询,它就会返回false。我们可以通过它的getResultSet方法来获取ResultSet,或者通过getUpdateCount()方法来获取更新的记录条数。 
2StatementexecuteQuery(String query)接口用来执行select查询,并且返回ResultSet。即使查询不到记录返回的ResultSet也不会为null。我们通常使用executeQuery来执行查询语句,这样的话如果传进来的是insert或者update语句的话,它会抛出错误信息为 “executeQuery method can not be used for update”java.util.SQLException,
3StatementexecuteUpdate(String query)方法用来执行insert或者update/deleteDML)语句,或者 什么也不返回,对于DDL语句,返回值是int类型,如果是DML语句的话,它就是更新的条数,如果是DDL的话,就返回0 
  只有当你不确定是什么语句的时候才应该使用execute()方法,否则应该使用executeQuery或者executeUpdate方法。

  17.JDBC的ResultSet是什么?

  在查询数据库后会返回一个ResultSet,它就像是查询结果集的一张数据表。 
  ResultSet对象维护了一个游标,指向当前的数据行。开始的时候这个游标指向的是第一行。如果调用了ResultSetnext()方法游标会下移一行,如果没有更多的数据了,next()方法会返回false。可以在for循环中用它来遍历数据集。 
  默认的ResultSet是不能更新的,游标也只能往下移。也就是说你只能从第一行到最后一行遍历一遍。不过也可以创建可以回滚或者可更新的ResultSet

  当生成ResultSetStatement对象要关闭或者重新执行或是获取下一个ResultSet的时候,ResultSet对象也会自动关闭。 
  可以通过ResultSetgetter方法,传入列名或者从1开始的序号来获取列数据。

  18.什么是Servlet?

  Servlet是使用Java Servlet应用程序接口(API)及相关类和方法的Java程序,所有的Servlet都必须要实现的核心接口是javax.servlet.servlet。每一个servlet都必须要直接或者间接实现这个接口,或者继承javax.servlet.GenericServletjavax.servlet.HTTPServlet
Servlet主要用于处理客户端传来的HTTP请求,并返回一个响应。

  19.doGet和doPost方法有什么区别

  doGetGET方法会把名值对追加在请求的URL后面。因为URL对字符数目有限制,进而限制了用在客户端请求的参数值的数目。并且请求中的参数值是可见的,因此,敏感信息不能用这种方式传递。

  doPOSTPOST方法通过把请求参数值放在请求体中来克服GET方法的限制,因此,可以发送的参数的数目是没有限制的。最后,通过POST请求传递的敏感信息对外部客户端是不可见的。

  20.JSP有哪些动作?分别是什么?

  JSP共有以下6种基本动作

  jsp:include:在页面被请求的时候引入一个文件。

  jsp:useBean:寻找或者实例化一个JavaBean

  jsp:setProperty:设置JavaBean的属性。

  jsp:getProperty:输出某个JavaBean的属性。

  jsp:forward:把请求转到一个新的页面。

  jsp:plugin:根据浏览器类型为Java插件生成OBJECTEMBED标记

  好程序员Java培训高品质面授教学,讲师、项目老师、班主任、就业老师全程跟班,以项目为主线、主导知识点学习,让学员成为真正意义上的高能、高薪、高职开发人才。更多Java行业动态和学习资料,可以关注“好程序员”微信公众号,好程序员还为大家准备了大量Java教程供大家参考学习。


好程序员公众号

  • · 剖析行业发展趋势
  • · 汇聚企业项目源码

好程序员开班动态

More+
  • HTML5大前端 <高端班>

    开班时间:2021-04-12(深圳)

    开班盛况

    开班时间:2021-05-17(北京)

    开班盛况
  • 大数据+人工智能 <高端班>

    开班时间:2021-03-22(杭州)

    开班盛况

    开班时间:2021-04-26(北京)

    开班盛况
  • JavaEE分布式开发 <高端班>

    开班时间:2021-05-10(北京)

    开班盛况

    开班时间:2021-02-22(北京)

    开班盛况
  • Python人工智能+数据分析 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2020-09-21(上海)

    开班盛况
  • 云计算开发 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2019-07-22(北京)

    开班盛况
IT培训IT培训
在线咨询
IT培训IT培训
试听
IT培训IT培训
入学教程
IT培训IT培训
立即报名
IT培训

Copyright 2011-2023 北京千锋互联科技有限公司 .All Right 京ICP备12003911号-5 京公网安备 11010802035720号