本文内容基于《Java程序员面试笔试宝典》,何昊、薛鹏、叶向阳著。


1. Servlet与JSP

1.1 页面请求的工作流程是怎样的?

1.2 HTTP中GET与POST方法有什么区别?

1.3 什么是Servlet?

1.4 Servlet的生命周期?

1.5 JSP有哪些优点?

1.6 如何使用JSP与Servlet实现MVC模型?

1.7 Servlet中forward与redirect有什么区别?

1.8 JSP的内置对象有哪些?

1.9 JSP中的include指令和include动作有什么区别?

1.10 cookie与session有什么区别?

2. J2EE

2.1 什么是J2EE?

2.2 J2EE中常用的术语?

2.3 EJB与JavaBean有什么异同?

2.4 什么是Web Service?

2.5 SOAP与REST有什么区别?

2.6 J2EE开发有哪些调优的方法?

3. 框架

3.1 Struts?

3.2 IoC?

3.3 AOP?

3.4 Spring?

3.5 Hibernate?


1. Servlet与JSP

1.1 页面请求的工作流程是怎样的?

1.2 HTTP中GET与POST方法有什么区别?

  • GET

GET的主要功能是从服务端获取用户所需资源,并将其作为响应返回给客户端。不建议采用GET方法向服务端上传数据,因为GET的数据量通常只有1024Byte左右,并且是添加在URL中的,存在安全隐患。

  • POST

POST除了能够从服务端获取资源外,同时还可以向服务器上传数据

1.3 什么是Servlet?

HTML只能用来保存静态内容,所以动态页面的概念被引入。其中一种方法是采用CGI(公共网关接口),另一种方法是采用Servlet技术。

Servlet是采用Java语言编写的服务端程序,它运行于Web服务器中的Servlet容器中,它的主要功能是提供请求/响应的Web服务模式,可以生成动态的Web内容。

Servlet的优点:

  • 较好的可移植性;
  • 执行效率高(CGI针对每个请求创建一个进程来处理,Servlet针对每个请求创建一个线程来处理);
  • 功能强大(CGI无法与Web服务器直接交互,而Servlet可以);
  • 使用方便;
  • 可扩展性强;

Servlet是在容器的控制下执行的,最常被使用的容器是Tomcat,当Web服务器获取到一个对Servlet的请求时,该服务器将会把这个请求交给对应的容器来处理,容器通过调用Servlet的方法来响应客户端的请求。

Servlet处理客户端请求的步骤:

  • 用户通过单击一个链接来向Servlet发起请求;
  • Web服务器接收到该请求后,会把该请求交给相应的容器来处理,当容器发现这是对Servelt发起的请求后,容器会创建HttpServletRequest和HttpServletResponse对象;
  • 容器可以根据请求消息中的URL消息找到对应的Servlet,然后针对该请求创建一个单独的线程;
  • 容器调用Servlet的service()方法来完成对用户请求的响应,service()方法会调用doPost()或doGet()方法来完成具体的响应任务,同时把生成的动态页面返回给容器;
  • 容器把响应消息组装成HTTP格式返回给客户端。

【注】doGet()和doPost()方法是在HttpServlet中定义的。

1.4 Servlet的生命周期?

  • 加载

容器通过类加载器使用Servlet对应的文件来加载Servlet。

  • 创建

通过调用Servlet的构造方法来创建一个Servlet实例。

  • 初始化

通过调用Servlet的init()方法来完成初始化,会创建或打开任何与Servlet相关的资源以及执行初始化工作。

  • 处理客户端请求

Servlet创建完成后,一旦有请求到来时,容器都会创建一个线程来处理,调用Servlet的service()方法。

  • 卸载

通过调用Servlet的destory()方法,让Servlet释放其占用的系统资源。

【注】init()方法和destory()方法都只会调用一次。

1.5 JSP有哪些优点?

在引入JSP之前,在Web应用程序中,所有业务逻辑和HTML响应都是在Servlet中实现的,这种方法必须把给用户响应的视图组装成一个很长的HTML格式的字符串写入println()方法中。

JSP的引入让Servlet只负责其对应的业务逻辑的处理,让JSP来负责用户的HTML显示。

JSP最终要被转换成Servlet来运行,区别在于,Servlet是在Java中嵌入HTML代码,而JSP是在HTML中嵌入Java代码。

1.6 如何使用JSP与Servlet实现MVC模型?

MVC模型关系图:

用JSP与Servlet实现MVC模型:

1.7 Servlet中forward与redirect有什么区别?

  • forward

forward是服务器内部的重定向,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,而客户端并不知道,因此在客户端浏览器的地址栏中不会显示跳转后的地址,还是原来的地址。由于在整个定向的过程中用的是同一个Request,因此forward会将Request信息带到被定向的JSP或Servlet中使用。

  • redirect

redirect是客户端的重定向,是完全的跳转,即客户端浏览器会获取到跳转后的地址,然后重新发送请求,因此浏览器中会显示跳转后的地址。同时,由于这种方式比forward方式多了一次网络请求,因此其效率要低于forward方式。客户端的重定向可以通过设置特定的HTTP头或写JS脚本实现。

1.8 JSP的内置对象有哪些?

  • request:客户端请求;
  • response:用来表示服务端对客户端的响应;
  • pageContext:提供了对JSP页面所有对象及命名空间的访问;
  • session:用来表示客户端与服务端的一次会话;
  • application:代表JSP所属的Web应用本身;
  • out:用于在客户端浏览器输出信息;
  • config:主要作用是取得服务器的配置信息;
  • page:表示当前JSP页面;
  • exception:用来表示异常。

1.9 JSP中的include指令和include动作有什么区别?

  • include指令

<%@ include file="test.jsp" %>

include指令是编译阶段的指令,即在编译时,编译器会把指令所指向目标文件的内容复制到指令所在的位置,替换指令,最终形成一个文件,在运行时只有一个文件,适用于包含静态页面的情况。

  • include动作

<jsp:include page="test.jsp"></jsp:include>

include动作是运行时的语法,在主页面被请求时,才将用到的页面包含进来,涉及两个文件,类似于方法调用,因此更适用于包含动态页面的情况。

1.10 cookie与session有什么区别?

cookie是在HTTP下,服务器或脚本可以维护客户工作站上信息的一种方式。它是由Web服务器保存在用户浏览器上的小文件,可以包含有关用户的信息。

session是指用来在客户端与服务端之间保持状态的解决方案以及存储结构。

区别:

  • cookie机制采用的是在客户端保持状态的方案,即数据存放在客户端的浏览器上,而session机制采用的是在服务端保持状态的方案,即数据放在服务器上;
  • cookie安全性不够,session比较安全;
  • cookie性能更高一些;
  • 单个cookie保存的数据不能超过4KB。

2. J2EE

2.1 什么是J2EE?

J2EE是Java平台企业版的简称,是用来开发与部署企业级应用的一个架构,它提供了一种统一的、开放标准的多层平台,该平台主要由构件、服务和通信3个模块构成:

  • 构件

    • 客户端构件

      • Applets
      • Application Clients
    • 服务端构件
      • Web构件

        • Servlet
        • JSP
      • EJBs
  • 服务:由J2EE平台提供商实现,分为Service API(开发时使用)和运行时服务。
  • 通信:由容器提供的,支持协作构件之间的通信。

J2EE只是一个行业标准,主要用来通过Java开发服务端应用提供一个独立的、可移植的、多用户的企业级平台,从而能够简化应用程序的开发和部署。

2.2 J2EE中常用的术语?

  • Web服务器

Web服务器是指驻留在Internet上的计算机程序,它是一种服务程序,其主要工作是接收来自客户端的请求,然后把对请求的处理结果返回给客户端。如IIS和Apache等。

  • Web容器(Web应用服务器)

Web应用服务器是一种服务程序,用来给运行在其中的程序提供一个运行的环境。如Tomcat、JBoss、WebLogic和WebSphere等。

  • EJB容器

EJB容器是一个服务端容器,是J2EE应用的业务层的技术标准,只要满足J2EE规范的组件就能在EJB容器中运行,EJB容器主要是为EJB组件提供一个运行的环境。

  • Applet容器

Applet容器是一个客户端容器,包含的组件为Applet。Applet是一种嵌入在浏览器中的轻量级客户端,无法使用J2EE的各种Service和API。

  • Application Client容器

Application Client容器是一个客户端容器,包含的组件为Application Client。Application Client是一种较重量级的客户端,可以使用J2EE的大多数Service和API。

  • JNDI

Java命名与目录接口,提供了一个目录系统,并将服务名称与对象关联起来,从而使得开发人员在开发过程中可以使用名称来访问对象。

  • JMS

Java消息服务,它是一个Java平台中面向消息中间件的API,主要实现各个应用程序之间进行异步通信。

  • JTA

Java事务服务,它提供各种分布式事务服务,为J2EE实现分布式事务处理提供了重要的支撑。

  • JAF

JavaBeans激活框架,它是一个专用的数据处理框架,提供了一种统一处理不同数据格式的方法。

  • RMI

远程方法调用,主要用于远程调用服务,通过它,可以像调用本地函数一样调用另外一台计算机上运行的程序。

2.3 EJB与JavaBean有什么异同?

EJB是基于RMI的技术,可以被远程访问,但它必须被部署在Webspere、WebLogic等容器中。

JavaBean是可复用的组件,是被容器如Tomcat创建的,是不能被跨进程访问的。

EJB JavaBean
主要用在服务端的开发

主要用在客户端的开发

可以作为独立的单元被部署到EJB容器中 不可被部署
支持使用部署描述符对EJB应用进行定制化 定制化只能在开发阶段
EJB构建分布式对象,可以被远程的对象访问 JavaBean构建不是分布式对象,只能在应用程序内部被访问
EJB构件对终端用户不可见 部分JavaBean对终端用户可见

2.4 什么是Web Service?

Web Service是一种基于网络的分布式模块化组件,它可以将可调用的功能发布到Web上以供应用程序访问。

调用Web Service时,服务提供者把所提供的服务发布到服务代理的一个目录上,然后服务请求者使用UDDI首先到服务代理提供的目录上搜索服务,得到如何调用该服务的信息(WSDL),然后根据得到的调用信息使用SOAP调用服务提供者提供的服务。

2.5 SOAP与REST有什么区别?

SOAP是一个严格定义的信息交换协议,用于在Web Service中把远程调用和返回封装成机器可读的格式化数据,SOAP数据使用XML数据格式,定义了一整套复杂的标签,来描述调用的远程过程、参数、返回值和出错信息等内容。

REST是一种软件架构风格,而不是一个具体的协议或标准,而且它是面向资源的。

2.6 J2EE开发有哪些调优的方法?

  • 优化设计(小心使用继承、简化类结构、面向接口编程、尽量使用主要类型、避免对象的过度使用等);
  • 尽可能使用数据库连接池;
  • 给Web容器配置合理的线程数量来处理客户端的HTTP请求;
  • 根据实际情况设置JVM中堆空间的大小;
  • 使用框架来提高系统的效率;
  • 把一些经常被访问的Servlet或JSP缓存起来;
  • 优化I/O性能;
  • 优化查询;
  • 对session进行合理管理与设置。

3. 框架

3.1 Struts?

Struts是由自定义标签、信息资源、Servlet和JSP组成的一个可重用的MVC2模式的框架,它的结构图如下所示:

优点:

  • 采用MVC模式,大量的tag有助于提高开发效率;
  • 提供了页面导航功能;
  • 提供了表单的验证功能;
  • 提供了数据库连接池管理;
  • 提供了Exception处理机制;
  • 支持国际化。

不足:

  • 大量的tag对于初学者难度较大;
  • 包含大量XML格式的配置文件,不易调试也不便于管理;
  • 只能支持Web应用程序的开发;
  • Action不是线程安全的,且必须进行同步;
  • 单元测试不方便;
  • 部署繁琐;
  • 对Servlet的依赖性过强。

【注】Sturts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有请求,而Struts2 Action对象为每一个请求产生一个实例,因此不存在安全问题。

3.2 IoC?

IoC即控制反转或依赖注入。是一种降低对象之间耦合关系的设计思想。

一般而言,在分层体系结构中,都是上层调用下层的接口,上层依赖于下层的执行,即调用者依赖于被调用者。而通过IoC的方式,使得上层不再依赖于下层的接口,即通过一定的机制来选择不同的下层实现,完成控制反转,使得由调用者来决定被调用者。

IoC通过注入一个实例化的对象来达到解耦的目的,使用这种方法后,对象不会被显示地调用,而是根据需求通过IoC容器来提供。

优点:

  • 开发人员不需要关心对象是如何被创建的,增加新类非常方便;
  • 便于进行单元测试。

不足:

  • 对象是通过反射机制实例化出来的,因此会对系统的性能有一定的影响;
  • 创建对象的流程变得比较复杂。

3.3 AOP?

AOP即面向切面编程。是面向对象开发的一种补充,它允许开发人员在不改变原来模型的基础上动态地修改模型以满足新的需求,如增加日志、安全或异常处理的功能。

3.4 Spring?

Spring是一个J2EE框架,提供了对轻量级IoC的支持和对APO的封装。

Spring的设计非常模块化,由7个模块组成:

  • Spring AOP:提供AOP支持,还提供了事务管理;
  • Spring ORM:提供ORM框架的支持;
  • Spring DAO:提供对DAO模式和JDBC的支持;
  • Spring Web:提供Servlet监听器的Context和Web应用的上下文;
  • Spring Context:提供Spring上下文,包括国际化、E-mail和JNDI访问等;
  • Spring Web MVC:提供Web应用的MVC实现;
  • Spring Core:Spring核心容器,最主要的BeanFactory组件提供了组件生命周期的管理,组件的创建、装配、销毁等功能。

3.5 Hibernate?

Hibernate是一个开放源代码的ORM框架,不仅可以运行在J2EE容器中,还可以在J2EE容器外运行,它对JDBC进行了非常轻量级的对象封装。

Hibernate如何提高性能:

  • 延迟加载:当Hibernate从数据库获取某一个对象数据、获取某一个对象的集合属性值时或者获取某一个对象所关联的另一个对象时,并不会立即从数据库中把数据加载到对象中,而是通过建立一个代理对象,把这个对象的属性都设置为默认值,只有当这些数据在被使用时才会从数据库中去加载对应的数据;
  • 缓存技术:一级缓存和二级缓存;
  • 优化查询语句。

Hibernate的一级缓存和二级缓存:

  • 一级缓存由Session来管理,在使用时必不可少。当使用Session查询数据时,首先会在该Session内部查找该对象是否存在,若存在,则直接返回,否则就到数据库中去查询,并将查询的结果缓存起来以便后期使用。缺点就是Session表示一次会话,生命周期较短,而且是线程不安全的。
  • 二级缓存由SessionFactory来管理,在使用时可有可无。在使用二级缓存后,当查询数据时,会首先在内部缓存中去查找,如果不存在,接着在二级缓存中查找,最后才去数据库中查找。二级缓存是独立于Hibernate的软件部件,属于第三方的产品。

Java程序员面试笔试宝典-Java Web(二)相关推荐

  1. Java程序员面试笔试宝典-Java基础知识(一)

    本文内容基于<Java程序员面试笔试宝典>,何昊.薛鹏.叶向阳著. 1. 基本概念 1.1 Java语言有哪些优点? 1.2 Java与C++有什么异同? 1.3 为什么需要public ...

  2. 程序员面试必备——《Java程序员面试笔试宝典》pdf

    <Java程序员面试笔试宝典>pdf 链接: https://pan.baidu.com/s/1uqxvY55jFOEAAzcn-pNVSQ 提取码: fety 1 内容简介 · · · ...

  3. Java程序员面试笔试宝典刷题总结~11

    虽然申请博客已经有一段时间了,却是第一次写博客,有点激动,不知道该写些什么,刚好大三老学姐正值找实习工作之际,每天都会刷一点题,现在在看Java程序员面试笔试宝典一书,刚好把里面的题每天总结5道,写在 ...

  4. Java程序员面试笔试宝典-数据结构与算法(四)

    本文内容基于<Java程序员面试笔试宝典>,何昊.薛鹏.叶向阳著. 1. 链表 1.1 如何实现单链表的增删操作? 1.2 如何从链表中删除重复元素? 1.3 如何找出单链表中的倒数第k个 ...

  5. Java程序员面试笔试宝典

    1. 基本概念 1.1 Java语言有哪些优点? Java为纯面向对象的语言: 平台无关性: Java提供了很多内置的类库: 提供了对Web应用开发的支持: 具有较好的安全性(数组边界检测和Bytec ...

  6. 读书笔记-Java程序员面试笔试宝典--持续更新中

    文章目录 第四章 Java基础知识 4.1 基础概念 4.2 面向对象技术 4.3 关键字 4.4 基本类型与运算 4.5 字符串与数组 4.6 异常处理 4.7 输入输出流 4.8 Java平台与内 ...

  7. Java接口有时有结果 有时没有_《Java程序员面试笔试宝典》之为什么Java中有些接口没有任何方法...

    由于Java不支持多重继承,即一个类只能有一个父类,为了克服单继承的缺点,Java语言引入了接口这一概念.接口是抽象方法定义的集合(接口中也可以定义一些常量值),是一种特殊的抽象类.接口中只包含方法的 ...

  8. Java程序员面试笔试宝典答案,基于HTML

    <p> 截至2012年,石埇镇有耕地面积12021亩,人均0.61亩:林地面积共计26344亩. </p><p><b> 矿藏资源</b>&l ...

  9. java程序员面试笔试宝典8.3排序

    1如何进行选择排序 1)对于给定的一组纪录,经过第一轮比较得到最小的纪录将该纪录与第一个纪录的位置进行交换. 2)接着对不包括第一个纪录以外的其他纪录进行第二轮比较,得到最小的纪录并与第二个纪录进行位 ...

最新文章

  1. gcc/g++等编译器 编译原理: 预处理,编译,汇编,链接各步骤详解
  2. Docker 容器时区时间不一致问题解决
  3. VTK:Filtering之LandmarkTransform
  4. PHP语言 -- Ajax 查询数据
  5. java请求并行方案_让 Yar Java Client 支持执行并行请求,ExecutorService 的使用
  6. unity打开一片黑_黑花儿和白花儿——记我家的两只猫星人
  7. java dns 解析域名解析_java网络学习 java dns 域名解析协议实现
  8. 关于服务器耗电量的计算
  9. left join条件放在on和where的区别
  10. 如何解决Maple的应用在数学中
  11. 启动tomcat8时出现springfox.documentation.spi.service.contexts.OperationContext.headers()Ljava/util/Set;错误
  12. kafka7 探索生产者同步or异步发送消息
  13. iOS 9 Spotlight搜索 OC版
  14. L1-087 机工士姆斯塔迪奥 和 L1-048 矩阵A乘以B
  15. 抓包PC微信小程序失败解决方法
  16. 关于人工智能写作的发展以及看法
  17. 排序---希尔排序实现和性能分析
  18. CRM如何帮助企业提高客户满意度?
  19. STM32使用寄存器点灯实验
  20. 基于matlab双反馈风力发电机系统Simulink仿真设计

热门文章

  1. 计算机设备管理器该文件没有与之,该文件没有与之关联的程序怎么办?
  2. 该文件没有与之关联的程序来执行该操作
  3. Python数据可视化 | 6、基于Sesborn探索变量间的关系
  4. HBase 表结构 学习篇 (三)
  5. Embedding层
  6. 解放生产力!chatGPT接入Excel与Word教程(需要魔法上网,不用的都是骗人的)
  7. ProE二次开发 Creo二次开发 MCADEx Tools 工程图管理工具
  8. C++ string与int的转换
  9. 第一次参加《有道难题》
  10. EffectComposer、OutlinePass特效引发的问题和卡顿