Java开发面试题

41. IOC的DI注入方式有哪些?

a.接口注入

b.setter方法注入

c.构造方法注入

d.注解方式注入


42. 什么是代理,增强,切入点,编织?

面向切面AOP

代理就是代替我们去执行一些额外的工作。

增强处理:额外功能(公共功能) ,通知/建议(advice)

切入点:需要把增强处理加在的位置;service层的方法上面;需要在配置文件中配置

编织/织入:把增强处理放置在切入点的过程

【 Proxy(代理) 

一个类被 AOP 织入增强后,就产生一个结果代理类。

Advice(通知/增强) 

所谓增强是指拦截到 Joinpoint 之后所要做的事情就是增强。增强定义了增强代码切入到目标代码的时 间点,是目标方法执行之前执行,还是之后执行等。增强类型不同,切入时间不同。

增强的类型:前置增强 , 后置增强 , 异常增强 , 最终增强 , 环绕增强。 切入点定义切入的位置,增强定义切入的时间。

Pointcut(切入点) 

切入点指声明的一个或多个连接点的集合。通过切入点指定一组方法。

被标记为 final 的方法是不能作为连接点与切入点的。因为最终的是不能被修改的,不能被增强的

Weaving(织入).

是指把增强应用到目标对象来创建新的代理对象的过程。 spring 采用动态代理织入,而 AspectJ 采用编译期织入和类装载期织入。

切面的三个关键因素:

1 、切面的功能 -- 切面能干啥

2 、切面的执行位置 -- 使用 Pointcut 表示切面执行的位置

3 、切面的执行时间 -- 使用 Advice 表示时间,在目标方法之前还是之后执行。】


43. Spring AOP的主要实现形式有哪些?

AOP可以有多种实现方式,而Spring AOP支持如下两种实现方式:

JDK动态代理:这是Java提供的动态代理技术,可以在运行时创建接口的代理实例。Spring AOP默认采用这种方式,在接口的代理实例中织入代码。

CGLib动态代理:采用底层的字节码技术,在运行时创建子类代理的实例。当目标对象不存在接口时,Spring AOP就会采用这种方式,在子类实例中织入代码。

【在Spring AOP中,如果一个类实现了接口,那么就使用JDK动态代理的方式进行AOP实现,而如果这个类没有实现接口,则使用Cglib动态代理的方式进行AOP实现。如果一个类既没有接口,同时又被final修饰,那么这个类不能进行AOP动态代理。】

44. SpringMVC的工作流程?

 

用户通过浏览器发起 HttpRequest 请求到前端控制器 (DispatcherServlet)。

DispatcherServlet 将用户请求发送给处理器映射器 (HandlerMapping)。

处理器映射器 (HandlerMapping)会根据请求,找到负责处理该请求的处理器,并将其封装为处理器执行链 返回 (HandlerExecutionChain) 给 DispatcherServlet

DispatcherServlet 会根据 处理器执行链 中的处理器,找到能够执行该处理器的处理器适配器(HandlerAdaptor)    --注,处理器适配器有多个

处理器适配器 (HandlerAdaptoer) 会调用对应的具体的 Controller

Controller 将处理结果及要跳转的视图封装到一个对象 ModelAndView 中并将其返回给处理器适配器 (HandlerAdaptor)

HandlerAdaptor 直接将 ModelAndView 交给 DispatcherServlet ,至此,业务处理完毕

业务处理完毕后,我们需要将处理结果展示给用户。于是DisptcherServlet 调用 ViewResolver,将 ModelAndView 中的视图名称封装为视图对象

ViewResolver 将封装好的视图 (View) 对象返回给 DIspatcherServlet

DispatcherServlet 调用视图对象,让其自己 (View) 进行渲染(将模型数据填充至视图中),形成响应对象 (HttpResponse)

前端控制器 (DispatcherServlet) 响应 (HttpResponse) 给浏览器,展示在页面上。

 

用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet(中央处理器)捕获;

 DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回给DispatcherServlet(中央处理器);

DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(…)方法)

提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:

HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息数据转换:对请求消息进行数据转换。如String转换成Integer、Double等数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中.

Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象;

根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet ;

ViewResolver 结合Model和View,来渲染视图

将渲染结果返回给客户端。】


45. SpringMVC的参数搜集有哪些方式?底层实现是什么?

请求参数:通过 GET 或 POST 方法提交的表单数据,可以通过 @RequestParam 注解将参数绑定到方法的参数上。

路径变量:将 URL 中的某些部分作为参数,可以通过 @PathVariable 注解将参数绑定到方法的参数上。

请求头:可以通过 @RequestHeader 注解将请求头中的某个值绑定到方法的参数上。

请求体:将整个请求体作为参数,可以通过 @RequestBody 注解将请求体绑定到方法的参数上。

底层实现方面,Spring MVC 使用了 HandlerMethodArgumentResolver 接口来实现参数搜集。当一个请求进入 Spring MVC 的处理流程时,Spring MVC 会根据方法参数的类型,选择一个合适的 HandlerMethodArgumentResolver 实现类来进行参数搜集。不同的参数搜集方式,对应不同的 HandlerMethodArgumentResolver 实现类。在参数搜集完成后,Spring MVC 会将参数绑定到方法的参数上,并调用方法进行处理。


46. 什么是视图解析器?

视图解析器是用来接收经过处理器适配器调用具体的controller后生成的逻辑视图的,它接受 DispatcherServlet传过来的ModelAndView,然后将ModelAndView数据填充到相应的视图中,然后返回一个带有数据的视图再传给DispatcherServlet.

47. SpringMVC 默认处理JSON的方式是什么?

Jackson


48. 什么是JSON, Ajax ? Ajax可以接收不是JSON串的数据类型吗?

AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。

AJAX = 异步 JavaScript和XML(标准通用标记语言的子集)。

AJAX 是一种用于创建快速动态网页的技术。

通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

传统的网页(不使用 AJAX)如果需要更新内容,必须重载整个网页页面。

json就是一种在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递和交互。json是一种数据格式,json是一种格式,而不是一种数据。

可以,首先不得不说数据格式,ajax接收返回数据时,必须将获取到的json数组反序列化为json对象。


49. 什么是RestFul风格?

Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

REST即Representational State Transfer的缩写,可译为"表现层状态转化”。REST最大的几个特点为:资源、统一接口、URI和无状态。

它仅仅是一种风格!!

【REST(英文:Representational State Transfer,简称REST)
一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。】

50. 常用的密码加密有哪些方法?

散列哈希[MD5、SHA1、CRC32],对称[DES,3DES(TDEA、Triple DES),AES、,Blowfish,RC4、RC5,IDEA],Base64、Rabbit、Escape。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值