记一次面试问题

  1. hash表的时间复杂度

无冲突的hash table时间复杂度是o(1),一般是O(c),c为哈希表关键字冲突时查找的平均长度。

  1. 为什么存取比较快

  2. struts2运行机制

    1.从客服端浏览器输入的url后,客服端通过http协议发送一个请求到服务器(tomcat),Tomcat收到这个请求之后,它会查看你请求的是哪一个web application(一般是一个项目),接着将请求交给对应的web application处理;

    2.web application的处理过程:首先读取web.xml文件,通过filter过滤url,然后调用filter-class对应的类StrutsPrepareAndExecuteFilter;

    3 接着StrutsPrepareAndExecuteFilter被调用,StrutsPrepareAndExecuteFilter询问ActionMapper来决定这个请是否需要调用某个Action。

    4 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy。

    5 ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类
    6 ActionProxy创建一个ActionInvocation的实例。
    7 ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
    8 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。

核心控制器是FilterDispatcher会过滤所有的请求,如果是满足struts要求的请求,该请求会转入框架处理。当框架获取action请求后,根据action的名字决定调用哪个业务逻辑组件。最后根据业务逻辑组件的处理信息决定转发到哪个视图;

Struts2有三部分组成:
核心控制器是FilterDispatcher,业务控制器和业务逻辑组件组件,其中核心控制器FilterDispatcher由Struts2提供,而业务逻辑控制器和业务逻辑组件要用户自己实现。

核心控制器FilterDispatcher: 负责拦截所有用户的请求,如果用户的请求以action结尾,该请求就会转入Struts2框架处理。

业务控制器组件:实现Action类的实例(或者继承了ActionSupport的实例),该类经常能够返回一个字符串。

业务逻辑组件:一般由javaBean或者EJB实现;

  1. mvc是什么

  2. mvc的好处,为什么采取mvc