• spring面试刷题


    spring面试刷题

    1、spring是什么

    spring是一套轻量级的java web开发框架,主要包括以下模块:spring core(提供ioc服务),spring aop(提供切面服务)、spring mvc(基于web应用的modle-view-controller模块)

    2、spring主要优点

    1、依赖注入:避免框架代码对业务代码的污染

    2、aop:将一些系统级别的功能使用aop的形式进行复用

    3、集成很多框架:dubbo、mybatis等

    4、spring aop的代理模式实现原理

    aop两种实现模式:动态代理、静态代理

    静态代理:aspectj,在编译期就生成代理类,将增强逻辑织入代理类中

    动态代理:两种方式jdk动态代理、cglib(code generation library)两种方式

    jdk动态代理:被代理类实现invotaionhandler接口,实现invoke方法,在invoke中发射调用原来方法,在调用前后编写增强函数,接着proxy利用invocationHandler生成目标接口的代理类。

    两个关键点:Proxy.newProxyInstance()还有InvocationHandler:第一个生成代理类,第二个是实现具体的代理逻辑

    5、spring ioc的实现原理

    https://www.iteye.com/blog/jinnianshilongnian-1715092(可以跟着这个学习)

    6、BeanFactory和applicationContext的区别

    7、spring bean的几种作用域

    • singleton
    • protype
    • session
    • request
    • globe-session

    8、单例的bean是不是线程安全的

    9、Spring两种常用的容器:beanFactory,applicationContext

    10、使用autowired注入bean,但是有两个实现,那么会报错误:

    expect one but found two

    所以:使用qualiar来标注下到底使用那个实现

    11、spring中使用的设计模式

    • 工厂模式:beanFactory里面有个beanDefinationMaps包含所有的bean的定义,然后使用abstractBeanFactory去创建对应的bean
    • 模版模式:abstractBeanFactory:将getBean方法的实现放在了这个类里面
    • 单例模式;Bean可以是单粒的
    • 代理模式:jdk动态代理创建类的代理类,增加增强逻辑

    12、spring中的事务

    我一般使用transcational去实现具体的事务

    事务的传播机制:用来描述多个事务存在的时候,怎么处理这几个事务之间的关系

    (1)required:如果有事务,就使用事务,如果没有创建事务

    (2)support:如果有事务,就使用事务,如果没有就以无事务的方式运行

    (3)报错的形式(单词忘了):如果有事务,就使用事务,如果没有就报错

    (4)required_new:如果有事务,就创建新事务去执行

    (5)not_support:如果有事务,就把当前事务挂起,以非事务的方式运行

    (6)never:没有事务正常运行,有事务报错

    (7)Nested:以嵌套事务的方式运行

    事务的隔离机制:

    (1)读未提交:脏读、不可重复读、幻读

    (2)读已提交:不可重复读、幻读

    (3)重复读:幻 读

    (4)串行

    13、Spring aop中的几个名词

    切面(aspect):抽取出来的公共逻辑

    连接点(joinPoint):指的是方法

    通知(advice):几种通知类型(before,aroud,after)

    切入点:(ponitCut)具体切入的逻辑点

    14、几种常用的通知类型

    before:前置通知,连接点之前执行,不阻止方法的执行,除非报错

    aroud:环绕执行,在方法前后执行自己的逻辑,最强大的

    after:后置通知,方法执行完成后执行的通知业务

    After returing:

    After throwing advice:

    通知的执行顺序

  • 相关阅读:
    3、excel—如何把相同年月日的中相同的数据相加
    Linux_plsql通过跳板的ssh隧道访问oracle1521(转)
    微信小程序-歌词滚动实现
    微信小程序-RSA 加解密
    如何给开源仓库贡献代码
    linux开发调试常用命令-gdb
    vector 内存分配和释放
    Ubuntu上SmartGit三十天试用到期解决办法
    Django-325版本创建时候需要手动设置的内容
    Django 博客园练习--待完成
  • 原文地址:https://www.cnblogs.com/zhangchiblog/p/11919242.html
Copyright © 2020-2023  润新知