• 面试相关的技术问题--WEB基础


    1. servlet生命周期、各个方法 和工作原理
    servlet的生命周期包括三个阶段,分别是:
    初始化阶段:调用init()方法(整个生命周期内只被调用一次)
    响应客户端请求阶段:service()
    终止阶段:destroy()
    工作原理:
    首先客户发送一个请求,Servlet是调用service()方法对请求进行响应,通过源代码可见,service()方法中对请求的方式进行了匹配,选择调用doGet,doPost等这些方法,然后再进入对应的方法中调用逻辑层的方法,实现对客户的响应。在Servlet接口和GenericServlet中是没有doGet,doPost等等这些方法的,HttpServlet中定义了方法,但是都是返回error信息,所以,我们每次定义一个Servlet的时候,都必须实现doPost,doGet等这些方法。


    2. servlet中如何定义filter
    实现Filter接口
    public class TestFilter implements Filter


    3. JSP原理
    (1)当用户访问一个JSP页面时,向一个Servlet容器(Tomcat)发出请求;
    (2)如果是第一次请求页面,或页面有所改动,则servlet容器首先要把JSP页面转化为Servlet代码,再将其转化为.class文件;因为这个过程(编译)会耗费一定时间,所以第一次访问或jsp文件有改动时,访问时间有些长;
    (3)JSP容器负责调用从JSP转换来的servlet,这些servlet负责提供服务相应用户请求(比如客户端发送表单,要求servlet:formprocessor.java来处理,则容器会建立一个线程,调用formprocessor.java来处理该请求);如果用户有多个请求,则容器会建立多个线程处理多个请求;
    (4)容器执行字节码文件(包括调用的servlet:formprocessor.java字节码),并将其结果返回到客户端;(返回的最终方式是有servlet输出html格式的文件流)


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


    5. Jsp动态include和静态include
    <%@ include file=” ”%>
    <jsp:include page=” ” flush=”true”/>
    前者是指令元素、后者是行动元素。
    动态INCLUDE在使用的时候,会先解析所要包含的页面(你例子中的included.jsp),解析后在和主页面放到一起显示;
    静态INCLUDE在使用的时候,不会解析所要包含的页面(你例子中的included.htm),也就是说,不管你的included.htm中有什么,我的任务就是把你包含并显示,其他的一概不管


    6. Struts请求处理过程
    1.客户端初始化一个指向servlet容器的请求。
    2.请求经过一系列的过滤器(ActionContextCleanUp、SiteMesh)

    3.FilterDispatcher被调用,并询问ActionMapper来决定这个请求是否需要调用某个Action
    4.ActionMapper决定要调用那一个Action,FilterDispatcher把请求交给ActionProxy。
    5. ActionProxy通过Configurate Manager询问Struts配置文件,找到要调用的Action类
    6. ActionProxy创建一个ActionInvocation实例
    7. ActionInvocation实例使用命令模式来调用,回调Action的exeute方法
    8. 一旦Action执行完毕,ActionInvocation负责根据Struts.xml的配置返回结果


    7. MVC概念
    MVC是Modal View Controler的缩写,原业是用于桌面程序设计中的概念,由以下三个主要部分构成,三部分各司其职。
    Model :模型层(用于数据库打交道)
    View :视图层(用于展示内容给用户看)
    Controller :控制层(控制业务逻辑)


    8. SpringMVC和struts区别

    9. Restful有几种请求
    四种:
    GET
    Post
    Put
    Delete

    10. memcached和redis的区别
    1.网络IO模型
    Memcached是多线程,非阻塞IO复用的网络模型,分为监听主线程和worker子线程,监听线程监听网络连接,接受请求后,将连接描述字pipe 传递给worker线程,进行读写IO, 网络层使用libevent封装的事件库,多线程模型可以发挥多核作用,但是引入了cache coherency和锁的问题,比如,Memcached最常用的stats 命令,实际Memcached所有操作都要对这个全局变量加锁,进行计数等工作,带来了性能损耗。
    Redis使用单线程的IO复用模型,自己封装了一个简单的AeEvent事件处理框架,主要实现了epoll、kqueue和select,对于单纯只 有IO操作来说,单线程可以将速度优势发挥到最大,但是Redis也提供了一些简单的计算功能,比如排序、聚合等,对于这些操作,单线程模型实际会严重影 响整体吞吐量,CPU计算过程中,整个IO调度都是被阻塞住的。
      2.内存管理方面
    Memcached使用预分配的内存池的方式,使用slab和大小不同的chunk来管理内存,Item根据大小选择合适的chunk存储,内存池的方式可以省去申请/释放内存的开销,并且能 减小内存碎片产生,但这种方式也会带来一定程度上的空间浪费,并且在内存仍然有很大空间时,新的数据也可能会被剔除,原因可以参考Timyang的文 章:http://timyang.net/data/Memcached-lru-evictions/
    Redis使用现场申请内存的方式来存储数据,并且很少使用free-list等方式来优化内存分配,会在一定程度上存在内存碎片,Redis跟据存储命 令参数,会把带过期时间的数据单独存放在一起,并把它们称为临时数据,非临时数据是永远不会被剔除的,即便物理内存不够,导致swap也不会剔除任何非临 时数据(但会尝试剔除部分临时数据),这点上Redis更适合作为存储而不是cache。
      3.数据一致性问题
    Memcached提供了cas命令,可以保证多个并发访问操作同一份数据的一致性问题。 Redis没有提供cas 命令,并不能保证这点,不过Redis提供了事务的功能,可以保证一串 命令的原子性,中间不会被任何操作打断。
      4.存储方式及其它方面
    Memcached基本只支持简单的key-value存储,不支持枚举,不支持持久化和复制等功能
    Redis除key/value之外,还支持list,set,sorted set,hash等众多数据结构,提供了KEYS
      进行枚举操作,但不能在线上使用,如果需要枚举线上数据,Redis提供了工具可以直接扫描其dump文件,枚举出所有数据,Redis还同时提供了持久化和复制等功能。
      5.关于不同语言的客户端支持
      在不同语言的客户端方面,Memcached和Redis都有丰富的第三方客户端可供选择,不过因为Memcached发展的时间更久一些,目前看在 客户端支持方面,Memcached的很多客户端更加成熟稳定,而Redis由于其协议本身就比Memcached复杂,加上作者不断增加新的功能等,对 应第三方客户端跟进速度可能会赶不上,有时可能需要自己在第三方客户端基础上做些修改才能更好的使用。
      根据以上比较不难看出,当我们不希望数据被踢出,或者需要除key/value之外的更多数据类型时,或者需要落地功能时,使用Redis比使用Memcached更合适。

  • 相关阅读:
    Queryable.Union 方法实现json格式的字符串合并
    战舰少女官方网站正式开启 -手机卡牌游戏
    星工场逆转娱乐圈预计5.1后上线
    Eclipse编辑jsp卡死解决方案
    Eclipse的workspace中放入Ext JS卡死或OOM的解决方案
    Ext Js详解指南
    Android 自定义RadioButton实现
    反编译Android APK及防止APK程序被反编译
    Android自定义控件
    优秀博客
  • 原文地址:https://www.cnblogs.com/myadmin/p/5824822.html
Copyright © 2020-2023  润新知