面试七

比较一下Java和JavaSciprt?

------基于对象和面向对象:

Java是一种真正的面向对象的语言,即使是开发简单的程序,必须设计对象;JavaScript是种脚本语言,它可以用来制作与网络无关的,与用户交互作用的复杂软件。它是一种基于对象(Object-Based)和事件驱动(Event-Driven)的编程语言,因而它本身提供了非常丰富的内部对象供设计人员使用。

---- 解释和编译:

Java的源代码在执行之前,必须经过编译。

JavaScript是一种解释性编程语言,其源代码不需经过编译,由浏览器解释执行。(目前的浏览器几乎都使用了JIT(即时编译)技术来提升JavaScript的运行效率) ---- 强类型-------变量和类型弱变量:

Java采用强类型变量检查,即所有变量在编译之前必须作声明;

JavaScript中变量是弱类型的,甚至在使用变量前可以不作声明,JavaScript的解释器在运行时检查推断其数据类型。 ---- 代码格式不一样。

Java中如何跳出当前的多重嵌套循环?

在最外层循环前加一个标记如A,然后用break A;可以跳出多重循环。

我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,请你讲讲如何输出一个某种编码的字符串?

Public String translate (String str) { 
     String tempStr = “”; 
     try { tempStr = new String(str.getBytes(“ISO-8859-1″), “GBK”); 
     tempStr = tempStr.trim();
     } catch (Exception e) { 
           System.err.println(e.getMessage()); 
        } 
return tempStr;
 }

Java Web 通常包含哪些常用的技术规范(组件)?

JSP 和 Servlet:JSP 的本质其实就是 Servlet,所有 JSP 页面都需要先编译成 Servlet 后,然后才能处理 用户请求、生成响应。Servlet 通常需要配置,既可在 web.xml 中使用 XML 元素配置,也可使用 @WebServlet 注解配置。

Filter:Filter 的作用是对用户请求或响应进行过滤,它可以对用户请求进行预处理,也可以对响应进 行后处理。使用 Filter 是典型的链式处理:Filter 对用户请求进行预处理,接着将请求交给 Servlet 进 行处理并生成响应,后 Filter 再对服务器响应进行后处理。 。Filter 通常需要配置,既可在 web.xml 中使用 XML 元素配置,也可使用@Filter 注解配置。

Listener:Listener 就是监听器。不同的 Listener 监听不同的事件,ServletContextListener 监听 Web 应 用的启动和结束;HttpSessionListener 监听用户会话的开始和结束;ServletRequestListener 监听用户请 求;还有 ServletContextAttributeListener、HttpSessionAttributeListener、ServletRequestAttributeListener 分别监听 application、session、request 范围的属性的改变。Listener 需要配置,既可在 web.xml 中使用 XML 元素配置,也可使用注解配置。

标签库:标签库是一种优秀的表现层技术。通过标签库,可以在简单的标签中封装复杂的数据展示逻辑。标签库通常需要先编写标签处理类,然后在*.tld 文件中配置标签。JSTL 就是 Java Web 官方提供 的标准标签库。

EL 表达式语言:EL 表达式语言并不是真正的编程语言,它只是一种数据访问语言,通常用于访问 Java Web 应用各范围内的数据。

HTTP 请求的 GET 和 POST 的区别?

  1. GET 方式的请求会将请求参数的名和值转换成字符串,并附加在原 URL 之后, 因此可以在地址栏中看到请求参数名和值。POST 请求使用请求 正文提交请求数据,因此用户不可见。

  2. GET 请求传送的数据量较小,一般不能大于 2KB。POST 方式传送的数据量较大,通常认为 POST 请求参数的大小不受限制,只取决于服务器的限制。

  3. POST 请求更安全,能用POST 就不用GET

常见的 Web 服务器有哪些?应用服务器有哪些?它们有什么区别?

常见的 Web 服务器有 Tomcat、Jetty、Resin 等。

常见的应用服务器有 WebLogic、WebSphere、JBoss、Glassfish 等。

Web 服务器通常只支持 Java Web 规范,比如只能支持 JSP、Servlet、Listener、Filter 等技术,通常也 能支持 JNDI、数据源等。因此 Web 服务器支持的功能较少。

应用服务器则需要完整地支持 Java EE 规范,不仅需要支持 Java Web 的全部功能,还需要支持 JTA、 EJB、JMS、JPA 等各种 Java EE 规范,因此应用服务器的功能比较强大。 但 WebLogic、WebSphere 的价格都很昂贵,一般中小型企业都用不起这么贵的产品,而且目前企业 比较流行使用轻量级 Java EE 开发架构,这种轻量级 Java EE 通常会使用 Spring、Hibernate、MyBatis 等各种开源框架,这些开源框架并不需要应用服务器的支持,因此一般企业应用现在都不需要使用应用服务器。

在 Tomcat 上部署 Web 应用的方式有几种?

在 Tomcat 上部署 Web 应用很简单,实际上在所有 Web 服务器上部署 Web 应用都很简单。

在 Tomcat 中部署 Web 应用的方式通常有如下几种。¾ 利用 Tomcat 的自动部署。

  • 利用控制台部署
  • 增加自定义的 Web 部署文件。
  • 修改 server.xml 文件部署 Web 应用。

如果在开发阶段向 Tomcat 部署 Web 应用则更加简单,比如使用 Eclipse EE 版本,只要选中该 Web 应 用,通过右键菜单的“Run on Server”即可把该应用部署到指定的 Web 服务器上。

什么是 Servlet?

Servlet 是平台独立的 Java 类,编写一个 Servlet,实际上就是按照 Servlet 规范编写一个 Java 类。Servlet 被编译为平台中立的字节码,可以被动态的加载到支持 Java 技术的 Web 服务器中运行。 Servlet 是一个基于 Java 技术的 Web 组件,运行在服务器端,由 Servlet 容器管理,用于生成动态内容。

Servlet 的生命周期。

Servlet 有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由 javax.servlet.Servlet 接口的 init、service 和 destroy 方法代表。

Servlet 被 Web 服务器实例化后,容器运行其 init 方法,该方法在整个生命周期中只运行一次,用于做一些准备工作,当该方法结束时该 Servlet 可以处理客户端请求。

客户请求到达时运行其 service 方法,service 方法自动派遣运行与请求对应的 doXxx 方法(doGet、 doPost)等,该方法在整个生命周期中运行多次,每个请求都使用 service 方法进行处理。

当服务器决定将实例销毁的时候调用其 destroy 方法,该方法在整个生命周期中只运行一次 ,用于做一些清除工作。

forward 和 redirect 的区别?

  1. forward 服务器内部跳转(在当前 webapp 中跳转),地址栏不显示跳转后的 URL;sendRedirect 是 强制浏览器重新发请求,地址栏显示的是跳转后的 URL。

  2. 执行 forward 后依然是上一次请求,执行 redirect 后会生成第二次请求。因此 forward 的目标页面可以访问原请求的请求参数,因为依然是同一次请求,所有原请求的请求参数、request 范围的属性全部 存在;redirect 的目标页面不能访问原请求的请求参数,因为是第二次请求了,所有原请求的请求参 数、request 范围的属性全部丢失。

  3. forward 时前面是什么请求,跳转之后还是什么请求,而 sendRedirect 则一定是 get 请求。

  4. 如果希望访问其他 webapp 的请求。由于 forward 是服务器内部跳转,只在当前 webapp 跳转,所以 是完成不了的,因此只能用 sendRedirect 来重定向。

ServletConfig 对象和 ServletContext 对象有什么区别?

一个 Servlet 对应有一个 ServletConfig 对象,可以用来读取该 Servlet 的配置参数。

一个 Web App 对应一个 ServletContext 对象,因此 ServletContext 代表的整个 Web 应用,比如需要读取整个 Web 应用的配置参数,访问 application 范围的属性,都使用 ServletContext。

实际上,application 内置对象就是 ServletContext 的实例。

ServletContext 对象可以通过 context.getResourceAsStream("/images/tomcat.gif"); 或者 context.getRealPath("/")去获取 webapp 的资源文件。

ServletContext对象的setAttribute(String name,Object o)方法可以将对象存储在Context作用范围域又称 为全局作用范围域,在整个 web 应用当中可以共享。

ServletContext 对象可以和服务器进行通讯,比如写信息到服务器的日志信息当中。

Servlet 的会话机制?

因为 HTTP 协议是无状态协议,又称为一次性连接,所以 webapp 必须有一种机制能够记住用户的一 系列操作,并且唯一标示一个用户。

Cookie:就是使用一个短文本保存用户信息,在页面加载完毕是通过响应写回客户端进行保存。

Session:在服务器保存数据,Session 就是单个客户的一块内存,用以存储数据。

Tomcat 的 Session 是 HashMap 的实现。

当 request.getSession()时 Session 对象被服务器创建,并且产生一个唯一的 SessionID。 SessionID 会通过 Cookie 写回客户端进行保存。如果 Cookie 被客户端禁用,只能使用 URL 重写机制。

Session 对象可以使用 setAttribute(String name,Object o)将对象存储在 Session 作用范围域中。Session 作用范围域是在浏览器打开到浏览器关闭。

Filter 是什么?有什么作用?

Filter 是过滤器,它既可以对用户请求进行预处理,也可以对响应进行后处理。Struts 2 的核心控制 器就是使用一个 Filter 实现的。Filter 可负责拦截多个请求或响应;一个请求或响应也可被多个 Filter 拦截。

常用的 Filter 有如下:

  • 用户授权的 Filter:Filter 负责检查用户请求,根据请求过滤用户非法请求。 ¾ 日志 Filter:详细记录某些特殊的用户请求。
  • 负责解码的 Filter:包括对非标准编码的请求解码

Listener 是什么?有什么作用?

Listener 是指 Servlet 中的监听器。

Listener 可以对 ServletContext 对象、HttpSession 对象、ServletRequest对象进行监听。既可监听 ServletContext 对象、HttpSession 对象、ServletRequest 对象的开始和结束,也可监听它们对应范围的 属性的改变。

常用的 Listener 有如下几个:

  • ServletContextListener:监听 Web 应用的启动和结束。
  • HttpSessionListener:监听用户 Session 的开始和结束。
  • ServletRequestListener:监听用户请求。
  • ServletContextAttributeListener:监听 application 范围的属性的改变。
  • HttpSessionAttributeListener:监听 session 范围的属性的改变。
  • ServletRequestAttributeListener:监听 request 范围的属性的改变。

Servlet 3.0 有哪些新特性

Servlet 3.0 相对于 Servlet 2.0 来说大的改变是引入了注解来取代 XML 配置,用于简化 Web 应用的 开发和部署。主要几项特性:

  1. 新增的注解支持:该版本新增了若干注解,用于简化 Servlet、过滤器(Filter)和监听器(Listener) 的配置,这使得 web.xml 文件从该版本开始不再是必选的了。

  2. 异步处理支持:有了该特性,Servlet 线程不再需要一直阻塞,直到业务处理完毕才能再输出响应, 后才结束该 Servlet 线程。在接收到请求之后,Servlet 线程可以将耗时的操作委派给另一个线程来 完成,自己在不生成响应的情况下返回至容器。针对业务处理较耗时的情况,这将大大减少服务器资 源的占用,并且提高 并发处理速度。

  3. 可插性支持:熟悉 Struts 2 的开发者一定会对其通过插件的方式与包括 Spring 在内的各种常用框 架的整合特性记忆犹新。将相应的插件封装成 JAR 包并放在类路径下,Struts 2 运行时便能自动加载 这些插件。现在 Servlet 3.0 提供了类似的特性,开发者可以通过插件的方式很方便的扩充已有 Web 应用的功能,而不需要修改原有的应用。

  4. 改进的文件上传 API,以前 Web 应用要上传文件通常需要借助于 common-fileupload 等工具,但 Servlet 3.0 的 HttpServletRequest 可以直接处理文件上传,开发者只要使用@MultipartConfig 修饰该 Servlet,接下来就可在该 Servlet 中使用 HttpServletRequest 的 getPart 方法获取文件上传域。

JSP 是什么?有什么特点?

JSP 全称是 Java Server Pages,它和 Servlet 技术一样,都是 Sun 公司(已被 Oracle 收购)定义的一种 用于开发动态 Web 站点的技术。JSP 通过在 HTML 页面中直接嵌入 Java 脚本,从而使得页面可以显 示动态数据。

相比 Servlet 在 Java 代码中嵌入 HTML 标签,JSP 在页面显示上具有更方便的优势。

JSP 的本质还是 Servlet,JSP 会由 Web 服务器编译成 Servlet,因此 JSP 实际上还是以 Servlet 的形式 在运行。 在实际开发中,通常会使用 MVC 模式开发,其中 Servlet 充当控制器,Servlet 负责处理请求、并调用 Service 等组件处理请求,并通过 Service 等组件获取数据,而 JSP 只是充当视图,负责数据的展现工作。

JSP 页面包含哪些语法?它们具有什么特征?

JSP 页面可包含如下 4 种语法:

  1. JSP 注释:它的语法格式为:<%-- 注释 --%>,JSP 注释与 HTML 注释的区别在于:JSP 注释是服务端注释,当 Web 服务器处理编译 JSP 页面时,它就会忽略这些 JSP 注释,JSP 编译生成的 Servlet 并不包含 JSP 注释,因此 JSP 注释不会输出到浏览器。而 HTML 注释则会输出到浏览器。

  2. JSP 声明:它的语法是:<%! 声明 %>。JSP 声明对应于 Servlet 的成员变量部分,因此 JSP 声明语 法内可定义成员变量、方法、内部类,而且这些成员变量、方法也可使用 private、protected、public、 static 等修饰符修饰。由于 JSP 声明的内容属于该 Servlet 的成员,因此它们可以在所有脚本中使用。

  3. JSP 脚本(也可叫 Java 脚本):它的语法是:<% 声明 %>。JSP 脚本对应于 Servlet 的 service 方法 中执行代码,因此 JSP 脚本中只能定义局部变量和放置可执行性语句,JSP 脚本中定义的局部变量不能使用 private、protected、public、static 等修饰符修饰,唯一可使用的修饰符是 final。

  4. 表达式(也叫输出表达式):它的语法是:<%= 表达式%>,这种语法比较简单,只能用于在页面 上输出表达式的值。JSP 表达式对应于 JSP 脚本对应于 Servlet 的 service 方法中的一条 out.writeln(表 达式)语句。

JSP 的编译指令有哪些?

JSP 使用编译指令的语法为:

<%@ 编译指令名 属性名="属性值"…%>

JSP 编译指令有如下 3 条:

  1. page:该指令是针对当前页面的指令,通常用于对该页面指定某些设置信息,比如该页面的字符集、 该页面需要导入的 Java 包。一个 JSP 页面可以包含多条 page 指令。

  2. include:用于指定包含另一个页面。这种包含被称为静态包含。一个 JSP 页面可以包含多条 include 指令。

  3. taglib:用于导入定义标签库。一个 JSP 页面可以包含多条 taglib 指令。

posted @ 2019-12-05 09:05  一个名  阅读(176)  评论(0编辑  收藏  举报