刷题日志
- 说说对Java的理解
- JAVA中抽象类和接口之间的区别
- Java中的泛型
- == 和equals()的区别
- 八种基本数据类型与他们的包装类
- 在一个静态方法内调用一个非静态成员为什么是非法的
- 静态方法与实例方法有何不同
- 重载与重写
- 深拷贝浅拷贝
- 面向过程与面向对象
- 成员变量与局部变量
- Spring框架
- Spring的优势
- Spring,SpringMVC,SpringBoot之间的区别
- SOFABoot,SpringBoot之间的区别
- Spring Bean支持的作用域
- Spring容器的启动过程
- Spring Bean的生命周期
- Spring框架的 单例Bean是否是线程安全的
- Spring框架使用了哪些设计模式
- SpringMVC的优点是什么
- SpringMVC工作流程
- SpringMVC九大内置组件
- SpringBoot中的starter
- Spring的事务的实现原理
- Spring的事务什么时候会失效
- Spring的事务隔离级别
- Spring的事务传播机制
- Sring StringBuffer StringBuilder
- 泛型中super和extend的却别
- == 和 equals的区别
- 重载和重写的区别
- List和Set的区别
- ArrayList和LinkedList的区别
- 深拷贝和浅拷贝
- jdk1.7 1jdk1.8 的HashMap区别
- HashMap的put方法
说说对Java的理解
- 难度 ※
- 薪水 ※
JAVA中抽象类和接口之间的区别
- 难度 ※ ※
- 薪水 ※ ※
Java中的泛型
== 和equals()的区别
八种基本数据类型与他们的包装类
题目
Integer i1= 40;
Integer i2 = new Integer(40);
System.out.println(i1==i2);
在一个静态方法内调用一个非静态成员为什么是非法的
静态方法与实例方法有何不同
重载与重写
深拷贝浅拷贝
面向过程与面向对象
成员变量与局部变量
------------------------------------------------------------------------------------------Spring-------------------------------------------------------------------------------------
Spring框架
- Spring是一个轻量级的容器框架,容器:包含并管理应用对象的生命周期,spring是桶,对象是水
- Spring是为了简化企业开发而生的,使得开发变得更加优雅和简洁
- Spring最显著的两个特点是AOP和IOC
Spring的优势
- Spring通过DI,AOP和消除样板式代码来简化企业级开发(Spring的IOC和AOP)
- Spring拥有庞大的生态,它将Spring扩展到了不同的领域,如Web服务,移动开发,REST,NOSQL等(Spring)
- Spring代码相对独立,污染极低(Spring)
- Spring独立于应用服务器,可以做到一次写,多出用 Write Once Run Anywhere(Spring)
- Spring的IOC容器降低了业务对象替换的复杂性,提高了组件之间的解耦(Spring的IOC)
- Spring的AOP允许将一些通用任务,例如安全,事务,日志等进行集中式处理。从而提供了更好的复用(Spring的AOP)
- Spring的ORM和DAO提供了与第三方持久层框架的良好整合,并简化了底层数据库的访问,也可通过它的核心包直接访问(Spring的ORM)
- Spring的高度开放性,并不强制应用完全依赖Spring,开发者可自由选用Spring框架的部分或全部(Spring)
Spring,SpringMVC,SpringBoot之间的区别
Spring是一个一站式的轻量级java开发框架,底层支撑,全栈的一个框架,针对于开发的WEB层(SpringMVC),业务层(IOC),持久层(jdbcTemplate)等都提供了多种配置和解决方案
SpringMVC是一个WEB框架,是一个基于Servlet的一个MVC框架,通过XML配置,统一开发前端视图和后端逻辑
SpringBoot是一个脚手架,并且相对于SpringMVC,SpringBoot简化路配置流程,SpringBoot更专注于单体微服务接口的开发和前端解耦。
SOFABoot,SpringBoot之间的区别
- SOFABoot相对于SpringBoot提供了基于Spring的上下文隔离和模块化开发能力,使得每个SOFABoot模块独立使用Spring上下文,避免不同SOFABoot模块间的冲突
- 增加模块并行加载和Spring Bean异步初始化能力,加速了应用的启动速度
- 日志空间隔离,避免中间件和应用日志绑定
- 增加基于SOFAArk的类隔离能力,方便解决类冲突问题
- 扩展SpringBoot健康检查,额外提供了Readiness Check 能力 保证应用实例安全上线
- 增加中间件集成管理能力,每一个SOFA中间件都是独立可插拔的组件
Spring Bean支持的作用域
- singleton:使用该属性创建Bean实例,IOC容器每次返回的是同一个Bean实例
- prototype:使用该属性创建Bean实例,IOC容器每次返回的是一个新的Bean实例
- request:该属性进队HTTP请求产生作用,使用该属性创建Bean实例时,每次HTTP请求都会创建一个新的Bean,适用于WebApplicationContext环境
- session:该属性仅用于HTTP Session ,同一个Session共享一个Bean实例,不同Session使用不同的Bean实例
- global-session:该属性仅用于HTTP Session,所有的Session共享一个Bean实例。
Spring容器的启动过程
- 进行扫描,得到所有BeanDefinition对象,并存入一个Map中
- 然后筛选出所有非懒加载的单例BeanDefinition创建Bean(对于多例Bean和懒加载的单例Bean则会在每次获取Bean时去创建它)
- 利用BeanDefiniton创建Bean就是Bean的生命周期,期间包括了BeanDefinition合并,推断构造方法,实例化,属性填充,初始化前,初始化,初始化后等步骤
- 单例Bean创建完之后,Spring就会发布一个容器启动事件
- 容器启动结束
Spring Bean的生命周期
- Bean定义 BeanDefinition
- 实例化 Instantiation
- 属性赋值 populate
- 初始化 initialization
- 销毁 destruction
总结:
- Bean定义
- Bean实例化(会有实例化前后置处理,调用postProcessorBefore/After Instantiation方法)
- Bean的属性注入(如果实现了相关的Aware接口,就调用相关接口,如BeanNameAware,BeanFactoryAware,BeanClassLoeader)
- Bean的初始化(执行initialization-method属性设置的方法,会有初始化的前后置处理,调用postProcessorBefore/After Initialization,对于单例Bean会返回给用户,放入缓存池,对于多例Bean,也会返回给用户,剩下生命周期由用户执行)
- Bean的销毁(执行destory-method属性设置的方法,如果实现类Disponseable接口,会调用destory方法)
参考文章:一文读懂 Spring Bean 的生命周期
Spring框架的 单例Bean是否是线程安全的
Spring框架使用了哪些设计模式
- 工厂模式 BeanFactory就是一种工厂模式的体现,用来创建对象实例
- 模板方法 解决代码重复性问题 如RestTemplate,JDBCTemplate
- 观察者模式 一对多的依赖关系,监听器 Spring中的listener
- 代理模式 Spring中AOP用到了JDK的动态代理和cglib的字节码技术
- 单例模式 单例Bean
SpringMVC的优点是什么
SpringMVC工作流程
SpringMVC九大内置组件
SpringBoot中的starter
Spring的事务的实现原理
Spring的事务什么时候会失效
Spring的事务隔离级别
Spring的事务传播机制
=========================================================================================================