一、 数据库部分    
1、 什么是主键?什么是外键?
   主键是表格里的(一个或多个字段)只用来定义表格里的行,主键里的值总是唯一的;
   外键是用来建立两个表格之间关系的约束。这种关系一般都是涉及一个表格里的主键字段与另外一个表格里的一系列相连字段。
   即这些相连的子陈伟外键

2、 什么是存储过程?用什么来调用?
   存储过程是一个预编译的存储过程,优点是允许模块化的设计,即只需要创建一次,就可实现多次调用。
   如果某次操作需要执行多次SQL,使用存储过程,比单纯使用SQL执行要快,可以用一个命令对象来调用存储过程

3、 索引的作用?和它的优点缺点是什么?
    数据库管理系统中的一个排序的数据结构,减慢了数据录入速度

4、 维护数据库的完整性和一致性,你喜欢用触发器还是自写业务逻辑?为什么?
    尽可能多的写约束(主键约束,外键约束,非空约束,check),这样写效,效率高,也很方便
    其次使用触发器,这种方法可以保证无论什么业务系统访问数据库都可以保证数据库的完整性和一致性
    最后考虑用自写逻辑,麻烦,复杂,效率低

5、 什么是事务?什么是锁?
    事务:被绑定在一起作为一个逻辑工作单元的SQL语句分组,要么执行,要么不执行,就可以使用事务。要将有组语句作为事务考虑,
    就需要通过ACID测试,即原子性,一致性,隔离性,持久性
    锁:在DBMS中,所示执行事务的关键,锁可以保证事务的完整性和并发性,锁还有级别之分

6、 触发器的作用?
    触发器是一种特殊的存储过程,主要通过事件来触发而被执行。
    1>
    可强化约束,来维护数据的完整性和唯一性,可以跟踪数据库内的操作而不允许未经许可的更新和变化。可以级联运算
    常见的触发器有两种:after(for),instead of ,用于insert,update,delete等

7、 什么叫视图?游标是什么?
     视图:一种虚拟的表,也可进行增删改查操作,视图通常是一个表或者多个表的的行或列的子集,对视图的修改不影响基本表;
     游标:对查询出来的结果集作为一个单元来进行有效的处理,游标可以定在该单元的特定行,从结果集的当前行检索一行或者多行。
     可对结果集进行修改

9、 什么是相关子查询?如何使用这些查询?    
     相关子查询是一种包含子查询的特殊类型查询。查询里包含的子查询会真正的求请求我外面查询的值
10、 多表连接    
     内连接---只连接匹配的行
     左外连接(left join)。右外连接(right join)全外连接(full join),交叉连接(笛卡尔积)

11、 使用索引查询一定能提高查询的性能吗?为什么    
     不一定,索引也需要磁盘存储,删改查时,会有很多次的I/O读写,得不偿失
     1>基于一个范围的检索,一般查询的结果集小于标的30%时宜采用
     2>基于非唯一索引的检索
     
12、 数据库事务的四个特性及含义    
     数据库事务正确执行的四个基本要素----ACID
     1>原子性(Atomicity):整个事务中的所有操作,要么全部完成,要么全部结束 ,不存在灰色空间
     2>一致性(Correspondence):在事务开始之前和结束之后,数据库的完整性约束没有被破坏
     3>隔离性(Isolation):隔离状态执行事务,是他们好像是系统在给定时间内执行的唯一操作。
     4>持久性(Durability):在事务完成以后,该事务所对数据库做的操作的更改表持久的保存在数据库之中,并不会回滚。

13、 视图的作用,视图可以更改么?
      视图:一种虚拟的表,也可进行增删改查操作,视图不能有关联的触发器或默认值,不能被索引
       1>屏蔽底层的基表
       2>
14、 drop,delete与truncate的区别
     drop直接删除表,truncate删除表中数据,在插入是自增长id又从1开始,delete删除表中数据,并不影响其他

15、 数据库范式
     第一范式<1NF>---无重复的列
     第二范式<2NF>---非主属性部分依赖于主关键字
     第三范式<3NF>---属性不依赖于其他非主属性

16、 存储过程与触发器的区别
     触发器与存储过程非常相似,触发器也是SQL语句集,两者唯一的区别是触发器不能用EXECUTE语句调用,而是在用户执行Transact-SQL
     语句时自动(触发)激活。
     触发器是在一个修改了指定表中的数据时执行的存储过程
17、 SQL优化
18、 存储过程和函数的区别
     从参数的返回情况来看--返回多个参数<存储过程>,返回一个参数<函数>
     函数一般情况下是用来计算并返回一个计算结果而存储过程通常用来完成特定的数据操作
19、 你认为在表上建立索引可以提高数据库系统的效率吗,为什么?
     不一定,开销太大
20、 什么是数据库的参照完整性?    
     数据库参照完整性是指表与表之间的一种对应关系,通常情况下可以通过设置两表的主外键关系,或者编写两表的触发器来实现
     有对应参照完整性的两张表格,在对他们进行插入,删除,更新的情况下系统都会将被修改表格与另一张对应表格进行对照,从而阻止一
     些不正确的数据的操作
21、 如何优化数据库,如何提高数据库的性能?
     1>硬件调整性能
     2>调整数据库
     3>使用存储过程
     4>应用程序结构和算法


            关键字:触发器,存储结构,视图,事务,索引



二、 JDBC<Java Database Connectivity>

1、 阐述JDBC操作数据库的步骤
    1>加载驱动
    Class.forName("oracle.jdbc.driver.OracleDriver");
    2>创建连接
Connection conn=DriverManager.getConnection("jdbc.oracle:thin:@localhost:1521:orcl","scott","tiger")
    3>创建语句
    preparedStatement ps=conn.prepareStatement("select * from emp where sal between ? and ?");
     ps.setInt(1,100);
     ps.setInt(2,3000);
   4>执行语句
   ResultSet rs=ps.executeQuery();
   5>处理结果
  while(rs.next()){
      System.out.println(rs.getInt("empno") + " - " + rs.getString("ename"));
 }
  6>关闭资源
    conn,close();
    
2、 在进行数据库编程时,连接池有什么作用?
    为了提升系统访问数据库的性能,可以实现创建若干连接置于连接池中,需要时直接从连接池中获取,使用完归还连接池而不必归还连接,
    从而避免了频繁创建和释放链接所造成的开销,这是典型的以空间换时间的策略(浪费了空间存储连接,但节省了创建和释放连接的时间)
3、 什么是 DAO 模式?
    DAO(DataAccess Object )为数据库或其他持久化机制提供了抽象接口的对象,在不暴露数据库实现细节的情况下提供了各种数据操作
    在应用程序中,当需要和数据源进行交互的时候则使用这个接口,并且编写一个单独的类来实现这个接口,在逻辑上该类对应一个特定的数据
    存储,DAO模式实际包含两个模式---Data Access(数据访问器)--如何访问数据
                                    Data Object(数据对象)----如何用对象封装数据
4、 使用 JDBC 操作数据库时,如何提升读取数据的性能?如何提升更新数据的性能?
    要提升读取数据的性能,可以通过指定结果集(ResultSet)对象指定每次抓取对象的大小
    要提升更新数据的性能,可以使用prepareStatement语句构建批处理
5、 Statement和PreparedStatement有什么区别?哪个性能更好?
   1>与Statement相比,PreparedStatement代表预编译的语句,主要优势在于减少SQL的编译错误并增加SQL的安全性
   2>preparedStatement语句时可以带参数的
   3>当批量处理SQL或执行频繁相同的查询时,prepareStatement有明显的优势,由于数据库可以将编译优化后的SQL语句缓存起来,下次执行
   相同语句时就会很快
6、 JDBC能否处理Blob和Clob?
     Blob(Binary Large Object)二级制大对象,Clob(Charater Large Object),可以处理的
 

四、 Servlet 与 JSP
1、 Servlet接口中有哪些方法?
    Servlet中定义了5个方法,其中前三个与Servlet生命周期相关
    init()---初始化   service---执行方法(根据需要调用doPost()或doGet())   destory---销毁方法
   getServletInfo() 和 getServletConfig()

2、 转发(forward)和重定向(redirect)的区别?
    forword是容器中控制权的转向,是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应读取过来,然后把这些内容再发
    给浏览器,浏览器根本不知道服务器发送的内容是从哪里来的,所以他的地址栏中还是原来的地址
    redirect就是服务器端根据逻辑发送一个状态码,告诉浏览器重新去请求那个地址,因此从浏览器的地址栏可以看到跳转后的链接地址
    redirect无法访问到服务器保护起来的的资源,但是可以从一个网站redirect到另一个网址

    forward更加高效(RequestDispatcher.forword()-----可以通过ServletRequest.getRequestDispatcher)有助于隐藏实际链接
    若需要访问其他服务器的资源,则必须使用重定向(HttpServletRequest.sendRedirect())


3、 JSP 有哪些内置对象和动作?它们的作用分别是什么?
      9大内置对象
      request(用户端请求)---包含来自GET/POST请求的参数
      response(回应)--------网页传回用户端的回应
      pageContext-----------管理网页的属性
      session---------------与请求有关的会话期
      application----------Servlet正在执行的内容
      out------------------传送回应的输出
      config---------------Servlet的构架部件
      page-----------------JSP网页本身
      exception-----------针对错误网页,为捕捉的意外

4、 描述 JSP 和 Servlet 的区别、共同点、各自应用的范围    
    Jsp在本质上就是Servlet,但两者的创建方式不一样,Servlet完全由JAVA程序构成,擅长于与流程控制和事务处理,Servlet生成动态网页很不
    直观,,JSP由HTML和JSP标签构成,可以方便的编写动态网页
5、 从以下哪一个选项中可以获得 Servlet的 初始化参数?
    ServletConfig可以获取初始化的参数
6、 哪一个对象可以用于获得浏览器发送的请求?
     HttpServletRequest
7、 在服务器的网络编程中,解决会话跟踪的方法有:
     1>使用Cookie  2>使用URL重写  3>使用隐藏的表单域
8、 JSP 有九个隐含对象
        9大内置对象
      request(用户端请求)---包含来自GET/POST请求的参数
      response(回应)--------网页传回用户端的回应
      pageContext-----------管理网页的属性
      session---------------与请求有关的会话期
      application----------Servlet正在执行的内容
      out------------------传送回应的输出
      config---------------Servlet的构架部件
      page-----------------JSP网页本身
      exception-----------针对错误网页,为捕捉的意外
9、 下面的那一个不属于 MVC 模式中的对象?
     M(Model)  V(View) C(Collection)

10、 在 Servlet 处理请求的方式为。(选择1项)
      Servlet采用多线程来处理多个请求同时访问,Servlet容器维护了一个线程池来服务请求

11、 javax.Servlet 的包中,属于类的是。(选择1项)
      ServletContext和ServletRequest是该包下的接口

12、 下列哪个为 JSP 的小脚本的标签?(选择1项)    
      <%   %>

13、 以下不属于 JSP 的标准指令的是。(选择1项)
       Tablib--Include---Page是JSP的标准指令
       而Import是page指令的一个属性

14、 对于每一个网站访问用户都要访问的变量,应该将它设为____变量。(选择1项)
        Applicaton应用级程序变量

17、 get和post请求的区别?
     1>get请求用来从服务器上获得资源----post用来向服务器提交数据
     2>get将表单中的数据按照name=value的形式,添加到Action所指向的URL后面,且两者用?连接,变量用“&”连接
      post将表单中的数据放在HTTP协议的请求头或者消息体中 ,传递到action所指向的URL
     3>get传输的数据要受到URL长度限制(1024字节);而post可以传输大量的数据,上传文件通常要用post
     4>对于敏感数据还是用post保险

 18、 JSP和Servlet是什么关系?
      Jsp在本质上就是Servlet,但两者的创建方式不一样,Servlet完全由JAVA程序构成,擅长于与流程控制和事务处理,Servlet生成动态网页很不
    直观,,JSP由HTML和JSP标签构成,可以方便的编写动态网页

19、 讲解JSP中的四种作用域
     JSP的四种作用域包括Page,request,application, session
     page----------一个页面相关的对象及属性
     request-------Web客户机发出的一个请求相关的对象以及属性
     sessiion------用户与服务器建立的一次会话相关的对象以及属性
     application---整个web应用程序相关的对象以及属性

20、如何实现JSP或Servlet的单线程模式?
     对于JSP页面,可以通过Page指令进行设置---<%Page isThreadSafe="false">
     对于Servlet,可以让自定义的Servlet实现SingleThreadModel标识出口
     ------------------每个请求创建一个Servlet实例--------------------------------------------------
21、实现会话跟踪的技术有哪些?
    Hattp协议本身是无状态的,服务器为了区分不同的用户,就需要用户进行跟踪,简单的说就是对用户进行登记,为用户进行登记,
    为用户分配唯一的id,下次用户在请求中包含此ID服务器据此判断到底是哪一个用户。
    1>Cookie技术:Cookie有两种,一种是基于窗口的,浏览器关闭,cookie就没了;另一种是将信息存储在一个临时文件中,并设置存在的
    时间
    2>URL重写:在URL中添加用户会话的消息作为请的参数,或者将唯一的会话约ID添加到URL结尾以标识一个会话,
    3>隐藏表单域:将和会话跟踪相关的字段添加到隐式表单域中,这些信息不回出啊在浏览器中,但是在提交表单是提交到服务器
    4>HttpSession:在所有的会话跟踪技术中HTTPSession是最强大也是功能最多的,当一个用户第一次访问某个网站是会自动创建HttpSession
   ,每个用户可以访问自己的HttpSession.

22、过滤器有哪些作用和用法?
    对于web应用来讲 ,过滤器是驻留在服务器端的web组件,它可以截取客户端与服务器之间的请求与响应信息,并对这些信息进行过滤;
    常见过滤器主要包括:对用户请求进行统一验证,对用户的访问请求进行纪录和审核,对用户发送的数据进行过滤或替换,转换图像格式,
    对响应内容进行压缩以减少传输量,对请求或响应信息进行加密处理,触发资源访问事件,对xml输出应用XSTL等

23、监听器有哪些作用和用法?
    java web中的监听器(Listener)就是application,session,request三个对象创建,销毁或者往其中添加修改删除属性时自动执行代码的
    功能组件
    1>ServletContextListener-------对Servlet上下文的创建和销毁进行监听
    2>ServletContextAttributeListener----对Servlet上下文属性的添加,删除和替换进行监听
    3>HttpSessionListener----------对Session的创建和销毁
    4>HttpSessionAttributeListener---对Session上下文属性的添加,删除和替换进行监听
    5>ServltRequestListener---------对request对象的初始化和销毁进行监听。
    6>ServletRequestAttributeListener--对request对象属性的添加,删除和替换进行监听
24、web.xml文件中可以配置哪些内容?
    web.xml用于配置web应用的相关信息,如:监听器(Listener),过滤器(filter).Servlet,相关参数,会话超过时间,安全验证方式
   错误页码等
25、你的项目中使用过哪些JSTL标签?
    项目中主要使用了JSTL核心库---<C:if>,<c:choose>,<c:when>,<c:otherwise>,<c:foreach>等,主要用于构建循环和分支结构以控制显示
    逻辑
    《最好只使用分支和循环标签并辅以表达式语言(EL),这样才能做到显示和业务逻辑相分离,这才是最佳实践》
26、使用标签库有什么好处?
     1>数据显示和业务逻辑的分离
     2>开发者可以创建自定义标签来封装业务逻辑和显示逻辑
     3>标签具有很好的可移植性,可维护性和可重用性
     4>避免了Scriptlet(小脚本)的使用

27、说一下表达式语言(EL)的隐式对象及其作用
    EL的隐式对象包括--pageContext,initParam(访问上下文参数),param(访问请求参数) ,paramValues,header(访问请求头)
    headerValues,Cookie(访问Cookie),applicationScope(访问application作用域),SessionScope(访问Session作用域),requestScope
    (访问Reques作用域),pageScope(访问Scope作用域)
    ${pageContext.request.method}
    ${pageContext["request"]["method"]}
    ${pageContext.request["method"]}
    ${pageContext["request"].method}
    ${initParam.defaultEncoding}
    ${header["accept-language"]}
    ${headerValues["accept-language"][0]}
    ${cookie.jsessionid.value}
    ${sessionScope.loginUser.username}

28、表达式语言(EL)支持哪些运算符?
    除了.和[]外,el还提供了:
    -算数运算符:+,-,*,/或div或mod
    -关系运算符:==或eq!=或ne,>或gt,>=或ge,<或lt,<=或le
    -逻辑运算符:&&或and,||或or,!或not
    -条件运算符:${statement?A:B}
    -empty运算符:检查一个运算符是否为空或者null
   
29、Java Web开发的Model 1和Model 2分别指的是什么?
    Model1---以页面为中心的java web 开发,使用jsp+javaBean技术将页面显示逻辑和业务逻辑处理分开
    Model2---基于MVC架构模式的开发模型,实现了模型和视图的彻底分离,利于团队开发和代码复用
   
30、如何在基于Java的Web项目中实现文件上传和下载?
    Servlet3以前,Servlet API中没有支持上传功能的API,要借助第三方插件
    Servlet3以后,有其内置方法
31、服务器收到用户提交的表单数据,到底是调用Servlet的doGet()还是doPost()方法?
    HTML的<form>元素有一个method属性,用来指定提交表单的方式,其值可以是get或post;
    自定义的Servlet一般情况下会重写doget()和dopost方法之一或者全部
    GenericServlet--->HttpServlet(重写了Service()方法)--->Servlet(重写doget()或dopost()方法,即用重写的自定义方法)
                                            |                                              |
                                            |     1>先获取用用户请求的方法                 |
                                            ——》2>根据去请求方法调用dopost(),doget(),doput(),doDelete()等方法

32、JSP中的静态包含和动态包含有什么区别?
    静态包含是通过JSP的include指令包含页面,动态包含是通过JSP标准动作<jsp:forward>包含页面
    1>静态文件是编译时包含,如果包含的页面不存在则会报错,编译时生成一个Class文件,因此被包含的页面发生的变动在包含他的页面
    更新前不会得到更新
    2>动态包含是运行时包含,可以向所包含的页面传递参数,可以编译出两个Class文件,如果被包含的页面不存在,并不会产生编译错误
    也不影响其他部分的执行
   <!--静态包含-->
   <%@ include file="被包含页面"%>
    <!--动态包含-->
   <jsp:include page="被包含页面">

33、Servlet中如何获取用户提交的查询参数或表单数据?
    可以通过请求对象(HttpServletRequest)的getParameter()方法通过参数名获取参数值,如果包含多个值的参数(复选框)。可以通过请
    求对象的getParamValues()方法获得。当然也可以通过请求对象的getParameterMap()获得一个参数名和参数值的映射(Map)

34、Servlet中如何获取用户配置的初始化参数以及服务器上下文参数?
    可以通过重写Servlet的init(ServletConfig)方法并通过ServletConfig对象的getInitParameter()方法来获取Servlet参数

35、如何设置请求的编码以及响应内容的类型?
    通过请求对象(ServletRequest)的setCharacterEncoding(String)方法可以设置请求的编码
    通过响应对象(ServletResponse)的SetContextType(String)可以设置响应内容的类型

36、解释一下网络应用的模式及其特点
    典型的网络应用模式大致有三类:B/S,C/S,P2P
    B/S可以认为是特殊的C/S应用模式
    P2P应用模式中,成千上万台彼此连接的计算机都处于对等的地位,整个网络一般来说不依赖专用的集中服务器,每一台计算机既能充当网络
    服务的请求者,又对其他计算机的请求做出子响应,提供资源和服务;
   
37、Web三种表现形式
    1>超文本
    2>超媒体
    3>超文本传输协议

38、Web的优势
     安全性,稳定性,广泛性

39、http工作的原理:
    浏览器可以向web服务器发送请求并显示收到的网页,当用户在浏览器地址栏中输入一个URL或点击一个超链接时,浏览器就向服务器发出了
    HTTP请求,该请求被送往有URL指定的WEB服务器,web服务区接收到请求后,进行相关文档的检索并以HTTP规定的格式送回所要求的文件或
    其他相关信息,再有用户计算机上的浏览器负责解释和显示

40、http请求/响应的步骤:
    1>客户端连接到web服务器
    2>发送HTTP请求
    3>服务器接收请求并分返回HTTP响应
    4>释放连接TCP连接
    5>客户端浏览器解析HTML内容

41、Servlet的工作原理
    1>用户通过URL来请求一个Servlet
    2>当用户请求Servlet时容器构建ServletRequest对象request和ServletResponse对象response,并传递给Servlet的service()方法,service
    通过request对象获取到请求的参数,然后根据参数做出相应的处理,通过response对象来想客户端发送相应内容

42、Servlet生命周期
    1>加载类
    2>初始化(调用init方法)-------只初始化一次
    3>执行service()-----------调用多次
    4>销毁destory()方法-----------只一次)(随着服务器的停止或者项目卸载而销毁)
    
43、为什么要重写dopost、doget这两个方法而不是其他方法?
    1>html只有form表单可以提交数据
    2>form表单提交数据只有两种形式(post和post)重写的dopost()方法和doget()方法用来接收post和get()方法
    3>在dopost()方法里调用dopost()
    4>在dopost里写流程语句

44、web.xml配置servlet信息
     1>声明Servlet
     <Servlet>
        <servlet-name>myServlet</servlet-name>
        <servlet-class>com.oak.User,MyServlet</servlet-class>
     </Servlet>
     2>让Servlet和路径产生映射(一对一映射)
     <Servlet-Mappiong>
        <Servlet-name>myServlet</Servlet-name>
        <url-pattern>/*.do</url-pattern>

     </Serlvlet-Mapping>

45、转发和重定向的区别?
     forword是容器中控制权的转向,是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应读取过来,然后把这些内容再发
    给浏览器,浏览器根本不知道服务器发送的内容是从哪里来的,所以他的地址栏中还是原来的地址
    redirect就是服务器端根据逻辑发送一个状态码,告诉浏览器重新去请求那个地址,因此从浏览器的地址栏可以看到跳转后的链接地址
    redirect无法访问到服务器保护起来的的资源,但是可以从一个网站redirect到另一个网址
46、servlet要实行三步走?
    1>处理request对象的参数(获取、修改)
    2>调用接口并且调用对应处理方法处理--new一个javaBean对象并赋值
    3>根据处理结果做出相应

47、保存状态的两种方式及区别?
    Session:(服务器端)适合保存大量数据,安全,效率高
    Cookie:(客户端)不适合保存大量数据,不安全,效率低

48、jsp小脚本的机制
     1>所用java小脚本内容相通
     2>jsp先编译,在执行,在编译期间所有的小脚本都被解析成html内容

49、jsp三个编译指令、七个动作指令分别是?
     三指令:page,include(),taglib
     七动作:jsp:forword,jsp.param,jsp.include ,jsp.plugin,jsp.useBean,jsp:setProperty,jsp.getProperty

50、jsp有哪些内置对象?作用分别是什么?
      9大内置对象
      request(用户端请求)---包含来自GET/POST请求的参数
      response(回应)--------网页传回用户端的回应
      pageContext-----------管理网页的属性
      session---------------与请求有关的会话期
      application----------Servlet正在执行的内容
      out------------------传送回应的输出
      config---------------Servlet的构架部件
      page-----------------JSP网页本身
      exception-----------针对错误网页,为捕捉的意外

51、JSP中动态 INCLUDE与静态 INCLUDE的区别
       静态包含是通过JSP的include指令包含页面,动态包含是通过JSP标准动作<jsp:forward>包含页面
    1>静态文件是编译时包含,如果包含的页面不存在则会报错,编译时生成一个Class文件,因此被包含的页面发生的变动在包含他的页面
    更新前不会得到更新
    2>动态包含是运行时包含,可以向所包含的页面传递参数,可以编译出两个Class文件,如果被包含的页面不存在,并不会产生编译错误
    也不影响其他部分的执行
   <!--静态包含-->
   <%@ include file="被包含页面"%>
    <!--动态包含-->
   <jsp:include page="被包含页面">

52、jsp作用域有哪些及活动范围?
     JSP的四种作用域包括Page,request,application, session
     page----------一个页面相关的对象及属性
     request-------Web客户机发出的一个请求相关的对象以及属性
     sessiion------用户与服务器建立的一次会话相关的对象以及属性
     application---整个web应用程序相关的对象以及属性
53、JSP和 Servlet有哪些区别
      Jsp:本质上是一个Servlet,主要负责页面显示
      Servlet:逻辑处理方便

54、页面跳转有哪几种方式:
    转发:request.getRequestDispatcher(url).forword(resquest,response)
    重定向:response.sendRedirect(url)

55、数据传递方式:
    1>jsp页面通过form表单或着参数列表将参数提交到Servlet
    2>Servlet 获取数据之后,将数据封装到JavaBean中,传递到Service,进而传递到dao
    3>dao从javaBean获取参数作为SQL语句的参数,通过DBUtil以jdbc方式连接数据库进行数据操作
    4>数据操作之后DBUtil以List<Map>方式返回结果集到dao
    5>dao将结果集封装成List<Bean>或Bean传递给Service
    6>Service将List<Map>或Bean传回给Servlet
    7>Servlet将结果集以List<Bean>或Bean传回jsp页面

56、解释一下什么是servlet
   Servlet有良好的生存期定义,包括加载和实例化,初始化,处理请求,以及服务结束,这个生存期由javax.servlet.Servlet接口的init().Service()和destory()方法表达

57、Servlet的基本架构    
    public class ServletName extends HttpServlet{
    public void doPost(HttpServletRequest request,HttpServletResponse response){
     
}
    public void doGet(HttpServletRequest request,HttpServletResponse response){
     
}
 
}
58、 SERVLET API中 forward()与 redirect()的区别?
    forword是容器中控制权的转向,是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应读取过来,然后把这些内容再发
    给浏览器,浏览器根本不知道服务器发送的内容是从哪里来的,所以他的地址栏中还是原来的地址
    redirect就是服务器端根据逻辑发送一个状态码,告诉浏览器重新去请求那个地址,因此从浏览器的地址栏可以看到跳转后的链接地址
    redirect无法访问到服务器保护起来的的资源,但是可以从一个网站redirect到另一个网址
    
59、什么情况下调用 doGet()和 doPost()
    JSP页面中的from标签里的methid属性为get是调用doGet(),为post时调用doPost()

60、get和post请求的区别??
     1>get请求用来从服务器上获得资源----post用来向服务器提交数据
     2>get将表单中的数据按照name=value的形式,添加到Action所指向的URL后面,且两者用?连接,变量用“&”连接
      post将表单中的数据放在HTTP协议的请求头或者消息体中 ,传递到action所指向的URL
     3>get传输的数据要受到URL长度限制(1024字节);而post可以传输大量的数据,上传文件通常要用post
     4>对于敏感数据还是用post保险

61、过滤器有哪些作用和用法?
      对于web应用来讲 ,过滤器是驻留在服务器端的web组件,它可以截取客户端与服务器之间的请求与响应信息,并对这些信息进行过滤;
    常见过滤器主要包括:对用户请求进行统一验证,对用户的访问请求进行纪录和审核,对用户发送的数据进行过滤或替换,转换图像格式,
    对响应内容进行压缩以减少传输量,对请求或响应信息进行加密处理,触发资源访问事件,对xml输出应用XSTL等

62、监听器有哪些作用和用法?
       java web中的监听器(Listener)就是application,session,request三个对象创建,销毁或者往其中添加修改删除属性时自动执行代码的
    功能组件
    1>ServletContextListener-------对Servlet上下文的创建和销毁进行监听
    2>ServletContextAttributeListener----对Servlet上下文属性的添加,删除和替换进行监听
    3>HttpSessionListener----------对Session的创建和销毁
    4>HttpSessionAttributeListener---对Session上下文属性的添加,删除和替换进行监听
    5>ServltRequestListener---------对request对象的初始化和销毁进行监听。
    6>ServletRequestAttributeListener--对request对象属性的添加,删除和替换进行监听

63、你的项目中使用过哪些JSTL标签?
    项目中主要使用了JSTL核心库---<C:if>,<c:choose>,<c:when>,<c:otherwise>,<c:foreach>等,主要用于构建循环和分支结构以控制显示
    逻辑
    《最好只使用分支和循环标签并辅以表达式语言(EL),这样才能做到显示和业务逻辑相分离,这才是最佳实践》

64、使用标签库有什么好处?
     1>数据显示和业务逻辑的分离
     2>开发者可以创建自定义标签来封装业务逻辑和显示逻辑
     3>标签具有很好的可移植性,可维护性和可重用性
     4>避免了Scriptlet(小脚本)的使用

65、表达式语言(EL)支持哪些运算符?
           除了.和[]外,el还提供了:
    -算数运算符:+,-,*,/或div或mod
    -关系运算符:==或eq!=或ne,>或gt,>=或ge,<或lt,<=或le
    -逻辑运算符:&&或and,||或or,!或not
    -条件运算符:${statement?A:B}
    -empty运算符:检查一个运算符是否为空或者null
   
66、Java Web开发的Model 1和Model 2分别指的是什么?
    Model1---以页面为中心的java web 开发,使用jsp+javaBean技术将页面显示逻辑和业务逻辑处理分开
    Model2---基于MVC架构模式的开发模型,实现了模型和视图的彻底分离,利于团队开发和代码复用
   
67、服务器收到用户提交的表单数据,到底是调用Servlet的doGet()还是doPost()方法?
    HTML的<form>元素有一个method属性,用来指定提交表单的方式,其值可以是get或post;
    自定义的Servlet一般情况下会重写doget()和dopost方法之一或者全部
    GenericServlet--->HttpServlet(重写了Service()方法)--->Servlet(重写doget()或dopost()方法,即用重写的自定义方法)
                                            |                                              |
                                            |     1>先获取用用户请求的方法                 |
                                            ——》2>根据去请求方法调用dopost(),doget(),doput(),doDelete()等方法

68、Servlet中如何获取用户提交的查询参数或表单数据?
    可以通过请求对象(HttpServletRequest)的getParameter()方法通过参数名获取参数值,如果包含多个值的参数(复选框)。可以通过请
    求对象的getParamValues()方法获得。当然也可以通过请求对象的getParameterMap()获得一个参数名和参数值的映射(Map)
69、Servlet中如何获取用户配置的初始化参数以及服务器上下文参数?    
    可以通过重写Servlet的init(ServletConfig)方法并通过ServletConfig对象的getInitParameter()方法来获取Servlet参数

70、如何设置请求的编码以及响应内容的类型?
    通过请求对象(ServletRequest)的setCharacterEncoding(String)方法可以设置请求的编码
    通过响应对象(ServletResponse)的SetContextType(String)可以设置响应内容的类型


五、 UML
1、UML是什么?UML中有哪些图?
   UML是统一建模语言(Unified Modeling Language)的缩写,是一个支持模型化和软件系统开发的图形化语言,为软件开发大所有阶段提供模型化和可视化支持
   UML有例图(usercase diagram),类图,时序图等

六、 常见设计模式
1、写一个单例类    
   饿汉式
   public class Singleton{
   private Singleton(){}
   private static Singleton instance=new Singleton();
   public static Singleton get    Instance(){
   return instance

}}
  懒汉式
  public class Singleton(){
  private static Singleton instance=null;
  private Singleton(){}
  public static synchronizrd Singleton getInstance(){
   if(instance==null)
   instance=new Singleton();
   return instence;

}}
  单例的特点:外界无法通过构造器来创建对象,该类必须提供一个静态方法向外界提供该类的唯一实例


2、说说你所熟悉或听说过的设计模式以及你对设计模式的看法。
   1>Abstract Factory(抽象工厂模式)
   2>Proxy(代理模式)
   3>Observe(观察者模式)
   4>Singleton(单例模式)
   所谓设计模式,就是一套被反复使用的代码设计经验的总结,使用设计模式是为了可重用代码,代码更容易让他人理解。保证代码可靠性

3、你在开发中都用到了那些设计模式?用在什么场合?
    抽象工厂模式:工厂类可以根据条件生成不同的子类实例,这些子类有一个共同的抽象父类,但是这些方法针对不同的数据进行了不同的操作(多态方法)
    当得到子类的实例后,开发人员可以调用基类中的方法,而不必考虑到底返回的是那一个子类的实例
   代理模式:给一个对象提供一个代理对象,并由代理对象控制元对象的引用
    单例模式:此类只允许外界穿件一个实例

5、常见的设计原则
   1>单一职责原则
   2>开闭原则
   3>里氏替换原则
   4>合成聚合复用原则

6、Java企业级开发中常用的设计模式有哪些?
     按照分层开发的观点,可以将应用划分为:表示层、业务逻辑层和持久层,每一层都有属于自己类别的设计模式。
     表示层设计模式:
    1)Interceptor Filter:拦截过滤器,提供请求预处理和后处理的方案,可以对请求和响应进行过滤。
    2)Front Controller:通过中央控制器提供请求管理和处理,管理内容读取、安全性、视图管理和导航等功能。Struts 2中的StrutsPrepareAndExecuteFilter、Spring MVC中的DispatcherServlet都是前端控制器,后者如下图所示:
    3)View Helper:视图帮助器,负责将显示逻辑和业务逻辑分开。显示的部分放在视图组件中,业务逻辑代码放在帮助器中,典型的功能是内容读取、验证与适配。
    4)Composite View:复合视图。

   业务逻辑层设计模式:
   1)Business Delegate:业务委托,减少表示层和业务逻辑层之间的耦合。
   2)Value Object:值对象,解决层之间交换数据的开销问题。
   3)Session Fa?ade:会话门面,隐藏业务逻辑组件的细节,集中工作流程。
   4)Value Object Assembler:灵活的组装不同的值对象
   5)Value List Handler:提供执行查询和处理结果的解决方案,还可以缓存查询结果,从而达到提升性能的目的。
   6)Service Locator:服务定位器,可以查找、创建和定位服务工厂,封装其实现细节,减少复杂性,提供单个控制点,通过缓存提高性能。
   持久层设计模式:
   1)Data Access Object:数据访问对象,以面向对象的方式完成对数据的增删改查。

七、 MVC概念
1、MVC概念
   MVC的概念是Model-view-Controller
   是一个层次框架设计模式
2、MVC各层的工作职责:
   Model(模型层):业务逻辑层
   view(视图层):负责展示页面,接收用户输入,展示数据
   Contrller(控制层):居中协调

3、MVC的各个部分都有那些技术来实现?如何实现?
   Model(模型层)---JavaBean
   View(视图层)----JSP页面产生
   Controller(控制层)--Servlet