面试总结

来源:互联网 发布:java和android的前景 编辑:程序博客网 时间:2024/06/11 05:48

Struts2

   1、mvc的框架

      Struts2是一个mvc框架,模型层用用于封装和传递数据、完成数据访问和 
业务逻辑,由JavaBean实现,视图层用于显示页面和用户交互用jsp来实现,控制层控制应用程序的流程用action来实现,。

   2、aop的框架

      Action执行前后都会执行配置好的拦截器,拦截器中可以对请求与返回的数据进行处理。

   3、可插拔的框架

      Struts2提供了灵活的插件机制来与其他框架进行整,只要提供所需的jar包,以及struts-plugin 配置文件即可。

      拦截器也是一种可插拔的设计,用到什么拦截器,配置一下。

   4、struts2 流程

     容器启动的时候加载那4个配置文件 ,如果其中有相同信息则后者覆盖前者,最后将这些配置信息封装到ConfigurationManager中

初始化核心分发器:Dispatcher 将struts框架工作所需的对象创建,以及其他的一些初始化工作。

当提交请求经过struts2 过滤器的doFilter(ServletRequest req, ServletResponse res, FilterChain chain)方法

 

   1 首先获得http协议的request,respon

        HttpServletRequest request=(HttpServletRequest)req;

   2 设置编码集

       prepare.setEncodingAndLocal(request,response)

  3 创建ActionContext

        prepare.createActionContext(request,response)

        创建值栈,

        初始化值栈,

        把当前的actionContext放入到threadlocal中

   4、把整个Dispatcher放入到threadlocal中

        prepare.assignDispatcherToThread();

   5 对请求url进行解析,并判断你的url是否是需要经过struts的核心

      如果不需要执行chain.doFilter放行; 如果需要,

   6 请求进行包装,解析出对应的action,

     接着得到ActionMapper的实例,通过他的getActionMapping 方法来决定是否要调用某个 Action,如果返回的ActionMapping为空 则继续判断是否是要使用到struts的静态资  源,  即路径中有/struts/  如果有调用静态资源处理器进行处理,如果没有直接放行;

  如果返回的ActionMapping不为空则执行executeAction(request, response, mapping);

   7 创建Action代理类,同时创建ActionInvocation,在ActionInvocation的初始化方法中

      1、创建action createAction(contextMap);

      2、 把当前访问的action放入到栈顶和map栈中

          stack.push(action);

          contextMap.put("action", action);

       3、获取当前请求的拦截器的迭代器的形式

        List<InterceptorMapping> interceptorList=new    ArrayList<InterceptorMapping>(proxy.getConfig().getInterceptors());

        interceptors = interceptorList.iterator();

8   执行所有的拦截器

     执行action

     执行结果集

    再次执行拦截器

9清空actionContext中的数据


Spring 

Spring是一个IOC和AOP容器框架;可以大大的简化企业开发

IOC 控制反转:将对象的创建和销毁交给外Spring进行管理使程序员有更多的时间处理业务逻辑;

IOC实现原理

解析配置文件,解析出class ,id 反射调用器构造函数创建,

然后用id为key,保存在一个map中;(如果有依赖注入:即解析字段,解析出对应的类型;通过反射方式创建出来;然后反射该字段的set方法;)

Aop

面向切面编程其实就是对公共代码的抽取,实现分离关注separate aware.

比如说我们在实际开发中经常要解决的问题:权限,日志,事务,异常等等经常性的代码,我们将他们进行抽取,分开管理,在需要的地方将切面织

AOP的原理是为目标类创建代理,创建代理的方式是:

1 当你的目标类实现了接口就用jdk的这个proxy

2 当你的目标类没有实现接口就要用CGLIB方式动态产生,他产生的类是目标类子类;

 struts2中的拦截器就是这么个东东;将所有的功能写成对应的拦截器;

在需要的时候注入就可以了:配置文件中通过interceptor-ref:进行引用即可;他就会给你在action执行前后进行拦截;

Spring  声明式事务处理是将所有整个应用中的事务管理做成一个切面aspect,统一事务的管理,在需要的地方只要配置对应的事务切入点和事务通知即可


Hibernate

hibernate是一个orm框架, 他是对JDBC的封装。

1 他是利用hql采用面向对象来操作数据库的。自动生成对应的sql 从而降低了编程时对sql语句的要求,可移植性比较好,。

只需要利用session 调用hibernate封装好的方法操作持久化对象,实现与数据库的交互。 

2 还有一个特点就是延迟加载的策略,控制系统发出sql语句的时机,在某些时候 大大的提高了系统的性能。 

例如: 加载菜单树时, 只需要加载出父节点,等到点击父节点是才去加载子节点,可以提高系统性能。当然延时加载也会有负面的影响,就是有的时候取哪些还未加载出来的数据时,session关闭了。 这是会抛no session 异常。  此时可以通过 配置opensessionview这个过滤器来解决这个问题

3 然后就是他的缓存机制,将查询出来的持久化对象放到缓存中,再次使用这些数据的时候  直接从缓存中取,减少了与数据库的交互次数,大大提高了系统的效率。

----

表关系复杂,或数据处理量大,一般不用hibernate,二用半自动的Ibatis,或直接jdbc.

系统数据处理量巨大,性能要求极为苛刻,这往往意味着我们必须通过经过高
度优化的SQL语句(或存储过程)才能达到系统性能设计指标。

是相对Hibernate等提供了全面的数据库封装机制的“全自动化”
ORM 实现而言,“全自动”ORM 实现了POJO 和数据库表之间的映射,以及SQL 的自动生成和执行  

Mybatis

 Mybatis首先也是一个对jdbc的封装 但更侧重于 面向sql编程, 核心配置文件中需要要配置结果集, 需要写一些sql语句, 这样也就使的 对程序员在sql语句上有更高的要求。     但是又一点好处,就是 可以进行sql语句的优化来提高性能。 这是hibernate做不到的。 一般大项目用MyBatis 或直接jdbc

----POJO--简单的Java对象

SQL开发的工作量大和数据库移植性较差,为系统设计提供了更大的自由空间

ibatis 的着力点,则在于POJO SQL之间的映射关系。也就是说,ibatis
并不会为程序员在运行期自动生成SQL 执行。具体的SQL 需要程序员编写,然后通过映
射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定POJO

SpringMVC

Spring的MVC框架主要由DispatcherServlet、处理器映射、处理器、视图解析器、视图组成

整个处理过程从一个HTTP请求开始:

1、 DispatcherServlet接收到请求后根据对应配置文件中配置的处理器映射,找到对应的处理器(Handler)

2、 调用相应处理器中的处理方法,处理该请求,处理器处理结束后会将一个ModelAndView类型的数据传给DispatcherServlet,这其中包含了处理结果的视图和视图中要使用的数据

3、 DispatcherServlet根据得到的ModelAndView中的视图对象,找到一个合适的ViewResolver(视图解析器),根据视图解析器的配置,DispatcherServlet将视图要显示的数据传给对应的视图,最后给浏览器构造一个HTTP响应

DispatcherServlet是整个Spring MVC的核心,它负责接收HTTP请求组织协调Spring MVC的各个组成部分

其主要工作有以下三项:

1、 截获符合特定格式的URL请求

2、 初始化DispatcherServlet上下文对应的WebApplicationContext,并将其与业务层、持久化层的WebApplicationContext建立关联

3、 初始化Spring MVC的各个组成组件,并装配到DispatcherServlet中

 

JBPM常用接口有哪些?

ProcessEngine工作流的流程引擎对象

1、RepositoryService    流程资源服务的接口。 

   作用:    提供对流程定义部署、查询、删除等操作。 

2、ExecutionService     流程执行服务的接口。 

   作用:    提供启动流程实例、“执行”推进,设置流程实例变量等操作。 

3、ManagementService   流程管理控制服务接口。 

   作用:    提供异步工作相关的执行和查询操作。 

4、TaskService          人工任务服务接口。 

   作用:    提供对任务(Task)的创建、提交、查询、保存、删除等操作。 

5、HistoryService       流程历史服务的接口。 

 作用:    提供对任务的管理操作,提供对流程历史库中历史流程实例、历史活动实例等记录的查询操作。还提供诸如某个流程定义中所有活动的平均持续时间、某个流程定义中某转移的结果次数等数据分析服务。 

6、IdentityService      身份认证服务的接口。 

   作用:    提供对流程用户、用户组以及组成员关系的相关服务。 


现在列举出几个  向公司提出的问题?

1、 公司主要做哪些方面的项目? 主要是针对业务。  (如果他事先给你介绍了就取消这个问题)

2、 公司主要用的是哪些技术?  有没有自己写的框架之类的?

3、 公司有没有相关的培训项目啊?  自己有没有机会参与?

4、 公司定期会不会一些重大的活动呢?

5、 公司的五险一金 是怎么交的? 有没有什么补助之类的?




0 0