Java面试时遇到的问题:
1.请解释一下IOC和AOP的区别?
答:①AOP:面向(方面)切面的编程,Filter(过滤器)也是一种AOP,AOP是一种新的方法论,是对传统OOP的补充,AOP的主要编程对象是切面,而切面模块化横切关注点,可以举例通过事务说明
②IOC:控制反转也称为DI(依赖注入)其思想是反转资源获取的方向,传统的资源查找方式要求组件向容器发起请求查找资源,作为回应,容器适时的返回资源,而应用了IOC之后,则是容器主动的将推送给它所管理的组件,组件所要做的仅是选择一种合适的方式来接受资源,这种行为也被称为查找的被动形式。
2.请解释Java的架构。
答:Java的三层架构:
①表现层(UI):展现给用户的界面,即用户在使用一个系统的时候他的所见所得。
②业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。
③数据访问层(DAL):直接操作数据库,对数据表CRUD(增删改查)操作。
3.请解释MVC的三种开发模式。
答:
4.请解释MVC的执行过程。
答:
①首先客户端发起用户请求,以http形式进入到servlet容器中,servlet容器解析http数据成为一个endpoint对象,endpoint对象包含了请求url、http header以及解析完或者读取完的body数据流。
②然后进入用户自定义的filter,在filter中用户可以对request进行处理,然后经过多个filter处理完后,进入到dispatcherservlet,也就是springmvc的入口。
③然后会先进入到一些常用的解析器中,比如用来解析上传文件的MultipartResolver,如果请求是Multipart,也就是说header包含Multipart,springmvc就会解析上传的请求里面的上传文件,解析成字节流,以及把一些字符串k、v读出来,封装到对象中以供后续的comtroller进行接收,从解析器出来后,就是根据请求url寻找handler(controller)的过程。
④由于我们在controller方法中使用requestMapping注解定义了url映射,在启动过程中springmvc就会将controller及对应的方法注册到HandlerMapping中,如果无法在handlerMapping中找到请求对应的controller,就会报404错误。
⑤找到controller后进入到HandlerInterceptor,即拦截器,在拦截器中可以进行打印日志,身份鉴权等操作。
⑥经过拦截器后,springmvc会对数据进行绑定(与方法参数进行绑定),及数据验证,反射调用我们的controller方法,执行方法体中的业务逻辑,执行完成后创建ModelAndView。model就是数据,此时的view只是个viewName(String)。
⑦如果我们定义了异常处理器,在拦截器处理数据绑定、数据验证、业务处理这些所有环节,只要出现了异常,都会被异常处理器拦截,可以在异常处理中返回相应的错误页面。
⑧如果正常执行,会通过ViewResolver进行view的资源定位,找到view之后就会进入渲染页面的过程,实际是将数据进行模版的变量替换的过程,数据来源于request,modelMap,session中。
⑨渲染之后就经过dispatcherservlet返回,再经过filter后续的处理,最终通过servlet容器形式http响应返回给客户端。
5.请解释AOP的实现方式。
答:①代理模式静态的实现AOP ②aspectj静态代理实现AOP ③jdk动态代理实现AOP ④cglib动态代理实现AOP