2020年最新java面试宝典
- 格式:docx
- 大小:214.62 KB
- 文档页数:30
Java 面试宝典Spring的理解是一个轻量级控制反转(IOC)和面向切面(AOP)的容器框架目的:解决企业应用开发的复杂性功能:使用基本的javabean代替EJB并提供了更多的企业应用功能什么是EJB?(EnterPrise JavaBean)EJB是Sun公司的javaEE服务器端组件模型,设计目标与核心应用是部署分布式应用程序范围:所有的Java应用轻量:大小和开销Spring都是轻量的控制反转(IOC):Spring通过控制反转促进了松耦合,使用了IOC一个对象以外的其他对象会通过被动的方式传递进来,而不是这个对象直接创建,或者查找依赖对象面向切面(AOP):Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务和事物管理进行内聚性的开发(使用了动态代理模式)容器:Spring包含并管理应用对象的配置和生命周期,在这个意义上是一个容器框架:Spring可以将简单的组件配置组成复杂的应用Spring三大核心组件Core(核心)核心容器提供Spring框架的基本功能Spring以bean的方式组织和管理Java应用中的各个组件及其关系Spring使用BeanFactory来产生和管理Bean,它是工厂模式的实现BeanFactory使用控制反转(IOC)模式将应用的配置和依赖性规范与实际的应用程序代码分开BeanFactory使用依赖注入的方式提供给组件依赖Context(上下文对象)上下文是一个配置文件,向Spring框架提供上下文信息Bean(实体类)Bean组件在Spring中的Beans包下,为了解决三件事Bean的创建,Bean 的定义,Bean的解析最关心的就是Bean的创建重要的Spring注解@Controller - 用于 Spring MVC 项目中的控制器类@Service - 用于服务类@RequestMapping - 用于在控制器处理程序方法中配置 URI 映射@ResponseBody - 用于发送 Object 作为响应,通常用于发送 XML 或 JSON 数据作为响应@PathVariable - 用于将动态值从 URI 映射到处理程序方法参数@AutoWired - 用于在 spring bean 中自动装配依赖项SpringMVC工作原理浏览器发送请求dispatcherServlet(核心控制器)接收到请求后将请求交给HandlerMapping(映射器)映射器根据地址对应的控制器,如果是静态资源则直接跳转到静态资源,返回给核心控制器,如果没有找到则直接返回null(404)核心控制器接收到映射器返回的内容后将请求控制权交给HandlerAdaper(适配器)适配器根据请求执行方法返回modelAndview(模型和视图)给核心控制器,根据视图地址找到视图解析器,找到相对应视图对象将模型数据交给视图对象进行视图渲染简述MVC(Model View Controller)Model:处理业务逻辑的模块每一种处理一个模块View:负责页面显示,显示model处理的结果给用户,实现数据到页面的转换过程Controller:负责请求分发,把form数据传递给model处理,把结果传递给view显示什么是MybatisMybatis的前身是ibatisMybatis是一个ORM框架(持久层框架)Mybatis提供了三种映射:表和类,属性和字段,组件和方法专注于sql语句,对象映射和输入输出,都由框架帮你完成,所以属于半 ORM 系统什么是ORM(Object Relation Mapping)对象关系映射它的作用是在关系型数据库和对象之间作一个映射,内部封装了jdbc,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道编写程序的时候,以面向对象的方式处理数据保存数据的时候,却以关系型数据库的方式存储ORM是通过使用描述对象和数据库之间映射的元数据,将JAVA程序中的对象自动持久化到关系数据库中请写出数据库的crud代码1.insert into 表名 values(‘数据’,…);2.select * from 表名where 条件3.update 表名 set 列名="新值" WHERE 条件4.delete from 表名 where 条件Mybatis的优点(mybatis与JDBC的区别):(1)基于SQL语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL写在XML里,解除sql与程序代码的耦合,便于统一管理,提供XML标签,支持编写动态SQL语句,并可重用(2)与JDBC相比,减少了50%以上的代码量,消除了JDBC大量冗余的代码,不需要手动开关连接(3)很好的与各种数据库兼容(因为MyBatis使用JDBC来连接数据库,所以只要JDBC支持的数据库MyBatis都支持)(4)能够与Spring很好的集成(5)提供映射标签,支持对象与数据库的ORM字段关系映射,提供对象关系映射标签,支持对象关系组件维护MyBatis框架的缺点:(1)SQL语句的编写工作量较大,尤其当字段多、关联表多时,对开发人员编写SQL语句的功底有一定要求(2)SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库Mybaits的运行原理:1. 返回创建SqlSessionFactory对象2. 返回SqlSession的实现类DefaultSqlSession对象3. 返回一个MapperProxy的代理对象4. 执行查询流程Mybatis的动态SQL1.编写sql2.配置对象属性与结果集中列名的对应关系13.拼接sql4格式化输出1.insert—update—delete-select2.ResultMap是什么?建立sql查询结果与实体属性的映射关系信息查询结果集转换成java对象,方便进一步操作将结果集的列与java对象中的属性对应起来并将值填充进去3.if标签—foreach标签—choose标签(switch)4.where标签—set标签Mybatis缓存机制缓存:瞬间的存储->内存条->文件当中(缓存服务器中redis mongodb)->解决数据库(关系型数据库)压力1)事务级别在同一事务中数据进行了缓存,当出现一致的则不会进行数据库访问mybatis默认就有一级缓存(事务级别),不能去除事务(同一会话(session))2)应用级别数据缓存是针对整个应用程序,mybatis称为二级缓存,必须实体类需要序列化3)集群级别一级缓存作用域是SqlSession范围的,当在同一个sqlSession中执行两次相同的sql 语句时,第一次执行完毕会将数据库中查询的数据写到缓存(内存)第二次查询时会从缓存中获取数据,不再去底层数据库查询,从而提高查询效率二级缓存是mapper级别的缓存使用二级缓存时,多个SqlSession使用同一个Mapper 的sql语句去操作数据库,得到的数据会存在二级缓存区域,它同样是使用HashMap进行数据存储二级缓存的范围更大,多个Sqlsession可以共用二级缓存,二级缓存是跨SqlSession的Hibernate有那五个核心接口Configuration接口:配置Hibernate,根据其启动Hibernate,创建SessionFactory对象SessionFactory接口:初始化Hibernate,充当数据存储源的代理,创建Session对象,SessionFactory是线程安全的,意味着同一个实例可以被应用的多个线程共享,是重量级,二级缓存Session接口:负责保存,更新,删除,加载和查询对象,是线程不安全的,避免多个线程共享同一个session,是轻量级,一级缓存Transaction接口:管理事物query接口和Criteria接口:执行数据库查询Hibernate和Mybatis有什么区别1. Hibernate是全自动,而Mybatis是半自动hibernate完全可以通过对象关系模型实现对数据库的操作,拥有完整的JavaBean对象与数据库的映射结构来自动生成sql而Mybatis仅有基本的字段映射,对象数据以及对象实际关系仍然需要通过手写sql来实现和管理2. Hibernate数据库移植性远大于Mybatishibernate通过它强大的映射结构和hql语言,大大降低了对象与数据库(oracle、mysql等)的耦合性,而mybatis由于需要手写sql,因此与数据库的耦合性直接取决于程序员写sql的方法,如果sql不具通用性而用了很多某数据库特性的sql语句的话,移植性也会随之降低很多,成本很高3. Hibernate拥有完整的日志系统,Mybatis则欠缺一些hibernate日志系统非常健全,涉及广泛,包括:sql记录、关系异常、优化警告、缓存提示、脏数据警告等;而mybatis则除了基本记录功能外,功能薄弱很多4. mybatis相比hibernate需要关心很多细节hibernate配置要比mybatis复杂的多,学习成本也比mybatis高但也正因为mybatis使用简单,才导致它要比hibernate关心很多技术细节mybatis由于不用考虑很多细节,开发模式上与传统jdbc区别很小,因此很容易上手并开发项目,但忽略细节会导致项目前期bug较多,因而开发出相对稳定的软件很慢,而开发出软件却很快hibernate则正好与之相反但是如果使用hibernate很熟练的话,实际上开发效率丝毫不差于甚至超越mybatis5. sql直接优化上,mybatis要比hibernate方便很多由于mybatis的sql都是写在xml里,因此优化sql比hibernate方便很多而hibernate的sql很多都是自动生成的,无法直接维护sql;虽有hql,但功能还是不及sql强大,见到报表等变态需求时,hql也歇菜,也就是说hql是有局限的;hibernate虽然也支持原生sql,但开发模式上却与orm不同,需要转换思维,因此使用上不是非常方便总之写sql的灵活度上hibernate不及mybatisSpring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置,以最小的代价进行开发项目SpringBoot的优点·独立运行·简化配置·自动配置·无代码生成和XML配置·应用监控·上手快SpringBoot的元注解1.@SpringBootApplication:包含了@ComponentScan、@Configuration和@EnableAutoConfiguration注解。