美文网首页
面试常见问题总结

面试常见问题总结

作者: 艾剪疏 | 来源:发表于2018-08-20 22:08 被阅读19次

    1 结合项目谈谈你对MVC的理解

    MVC 是Model-View-Control的简称。即模型-视图-控制器。MVC是一种设计模式,它强制性的把应用程序的输入、处理和输出分开。
    MVC中的模型、视图、控制器分别负担着不同的任务。

    • 视图:视图是用户看到并与之交互的界面。视图向用户显示相关的数据,并接受用户的输入。视图不进行任何业务逻辑的处理。
    • 模型:模型表示业务数据和业务处理。相当于JavaBean。一个模型能为多个视图提供数据。这提高了应用程序的重用性。
    • 控制器:控制器接受请求并调用相应的模型去处理请求。然后根据处理的结果调用相应的视图来显示处理的结果。

    项目中的MVC对应:View对应项目中的JSP,Controler对应Action,Model对应service+dao层的业务逻辑和持久层的操作。

    2 项目为什么要使用SSH

    1. 使用Struts是因为Struts是基于MVC模式的,很好的将应用程序进行了分层,是开发者更加关注业务逻辑的实现;Struts有着丰富的标签库,能大大提高开发的效率。
    2. 使用Hibernate是因为Hibernate为Java应用提供了一个易用的、高效率的对象关系映射框架。Hibernate是个轻量级的持久性框架,功能丰富。
    3. 使用Spring是因为spring基于IoC(Inversion of Control,控制反转)和AOP构架、多层j2ee系统的框架。

    3 挑选一个你做的个说说SSH框架的应用原理

    1. 在表示层中,首先通过JSP页面实现交互界面,负责传送请求(Request)和接受响应(Response),然后Struts根据配置文件(*-struts.xml)将ActionServlet接收到的Request委派给相应的Action处理。
    2. 在业务层中,管理服务足迹的SpringIoC容器负责向Action提供业务模型(Model)组件和该组件的协作对象数据处理(DAO)组件完成业务逻辑,并提供事务处理、缓冲池等容器组件以提升系统性能和保证数据的完整性。
    3. 在持久层中,则依赖于Hibernate的对象化映射和数据库交互,处理DAO组件请求的数据,并返回处理结果。

    结合上面的描述,将某个项目的该过程描述一遍。

    4 Struts工作原理

    详细回答

    image.png

    (1) 客户端(Client)向Action发用一个请求(Request)
    (2) Container通过web.xml映射请求,并获得控制器(Controller)的名字
    (3) 容器(Container)调用控制器(StrutsPrepareAndExecuteFilter或FilterDispatcher)。在Struts2.1以前调用FilterDispatcher,Struts2.1以后调用StrutsPrepareAndExecuteFilter
    (4) 控制器(Controller)通过ActionMapper获得Action的信息
    (5) 控制器(Controller)调用ActionProxy
    (6) ActionProxy读取struts.xml文件获取action和interceptor stack的信息。
    (7) ActionProxy把request请求传递给ActionInvocation
    (8) ActionInvocation依次调用action和interceptor
    (9) 根据action的配置信息,产生result
    (10) Result信息返回给ActionInvocation
    (11) 产生一个HttpServletResponse响应
    (12) 产生的响应行为发送给客服端。

    简单回答

    • 发送http请求;
    • Web服务器;
    • 执行struts核心过滤器StrutsPrepareAndExecuteFilter;
    • 加载struts配置文件中配置信息,找到对应的Action类并实例化;
    • 执行各类拦截器和Action中对应的方法;
    • 配置文件中找到返回结果;
    • 转发到具体页面或其他操作;

    5 Struts优缺点

    优点:

    • MVC模式,结构清晰;
    • 丰富的struts标签库,提高开发效率;
    • 全局结果和声明式异常;
    • 可使用OGNL进行参数传递;
    • 拦截器使用方便;
    • 允许POJO(Plain Old Java Objects)对象 作为Action;
    • 基于Spring AOP思想的拦截器机制,更易扩展;

    缺点:

    • 转到表现层时,需要配置结果页面,页面较多是较为复杂;
    • 对Servlet的依赖性较强
    • struts标签稍微比el表达式繁重

    6 为何使用spring

    spring是一个轻量级的控制反转(IoC)、面向切面(AOP)、面向接口、事务管理、包容促进其他框架;使系统中用到的其他框架耦合程度大大降低,拓展性增强、简单易用好管理。

    7 spring在项目中如何使用充当黏合剂

    1. 在项目中利用spring的IoC(控制反转或依赖注入)。明确地定义组件接口(如UserDAO),开发者可以独立开发各个组件,然后根据组件间的依赖关系组装(UserAction依赖于UserAService、UserService依赖于UserDao)运行,很好的把struts(Action)和hibernate(DAO的实现)结合起来。
    2. spring的事务管理把hibernate对数据库的操作进行了事务配置。

    8 描述在系统中如何使用spring的事务控制

    spring事务包括编程式事务和声明式事务。在系统中使用了声明式事务管理是用spring的AOP来实现的;配置了只读事务和回滚事务(传播行为为REQUIRED)当出现错误后进行回滚操作。在项目中通过aop切入事务到Service层,这样做能使一次业务逻辑中的几个数据库操作都包含在一个事务中。

    9 Hibernate在系统中使用的优化策略

    Hibernate对数据的缓存包括两个级:一级缓存,在Session级别上进行,主要是对象缓存,以其id为键保存对象,在Session的生命周期间存在;二级缓存,在SessionFactory的级别上进行,有对象缓存和查询缓存,查询缓存以查询条件为键保存结果,在SessionFactory的生命周期间存在。默认的,Hibernate只启用一级缓存。

    关于这个问题,回答系统使用了Hibernate的二级缓存就好。

    10 Jpuery异步获取数据的方式有几种?

    1. load载入远程HTML文件代码并插入到DMO中;
    2. get;
    3. post;
    4. ajax;
    5. getJSON;
    6. getScript通过GET方式请求载入并执行一个Javascript文件;

    11 系统并发量如何,如何解决大并发量的请求?

    系统并发量不大,但是有在应用服务器中间件weblogic和Nginx上做负载均衡的配置;

    12 项目中遇到问题如何解决?

    自行解决 -- 网络搜索 -- 团队讨论

    相关文章

      网友评论

          本文标题:面试常见问题总结

          本文链接:https://www.haomeiwen.com/subject/dcqkiftx.html