常见JAVA开发的面试总结

一.什么是spring框架?使用spring框架的好处是什么?

  1. Spring 是轻量级开源框架,基本的版本大约2MB,

  2. IOC(控制反转): Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们。

  3. DI是依赖注入,DI机制降低了业务对象替换的复杂性,提高了组件之间的解耦

  4. AOP(面向切面编程): Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开。
    Aspectj是AOP的一个框架,SpringAOP配置过于繁琐,因此使用了Aspectj依赖注解开发

  5. 容器:Spring 包含并管理应用中对象的生命周期和配置

  6. MVC框架:Spring的WEB框架是个精心设计的框架,是Web框架的一个很好的替代品。

  7. 事务管理:Spring 提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务(JTA)。
    **Spring好处:**简易开发,AOP面向切面的编程,声明了事务的支持,方便解耦,方便了程序测试,方便集成各种优秀框架,降低了JAVAEE API的使用难度

二.什么是Spring Bean容器?Spring Bean容器与Spring IOC 容器有什么不同吗?

  1. Spring Boot容器就是用于创建bean对象,管理bean对象的那个容器
  2. Spring IOC 容器本质上指的的就是Spring Bean容器,Spring Bean容器中最核心一个机制是IOC机制(控制反转),所以有时候又将springbean容器称之为Spring IOC 容器

对IOC和DI的理解:

  1. IOC 是Spring中提供一种控制反转机制,目的是将我们项目中对象的依赖管理交给Spring实现,这样可以更好实现对象关系的解耦,提高程序的可扩展性.
  2. DI 是Spring中的依赖注入机制,IOC的实现需要借助这种机制.我们通常会这样理解,Spring Bean容器中的IOC思想一种目标,DI是实现这种思想的目标的手段.

三.Spring 框架中的Bean对象有什么特性?

在这里插入图片描述

  1. 延迟加载 ( @Lazy(value=true) )
    优点:优化资源使用,(充分利用内存空间)
    缺点:用的时候再创建对象会影响程序的响应速度
  2. 作用域(@Scope注解进行描述)
    优点:让对象在有效的作用域之中使用,尽量控制对象的初始化与销毁,从而实现对象的高效低耗的运行
    缺点:底层框架编写难度加大,可能在不熟练的情况下可能会出现域冲突的问题
  3. 生命周期方法
    @PostConstruct注解,用来描述生命周期初始化方法
    @PreDestroy 注解,用来描述生命周期销毁方法

请解释Spring Bean的生命周期?
Spring Bean的生命周期简单易懂。在一个bean实例被初始化时,需要执行一系列的初始化操作以达到可用的状态。同样的,当一个bean不在被调用时需要进行相关的析构操作,并从bean容器中移除。
Spring bean factory 负责管理在spring容器中被创建的bean的生命周期。Bean的生命周期由两组回调(call back)方法组成。
Spring Bean的作用域之间有什么区别?
Spring容器中的bean可以分为5个范围:

  1. singleton:这种bean范围是默认的,这种范围确保不管接受到多少个请求,每个容器中只有一个bean的实例,单例的模式由bean factory自身来维护。
  2. prototype:原形范围与单例范围相反,为每一个bean请求提供一个实例。
  3. request:在请求bean范围内会每一个来自客户端的网络请求创建一个实例,在请求完成以后,bean会失效并被垃圾回收器回收。
  4. Session:与请求范围类似,确保每个session中有一个bean的实例,在session过期后,bean会随之失效。
  5. global-session:global-session和Portlet应用相关。当你的应用部署在Portlet容器中工作时,它包含很多portlet。如果你想要声明让所有的portlet共用全局的存储变量的话,那么这全局变量需要存储在global-session中。

全局作用域与Servlet中的session作用域效果相同。

spring注解举几个例子说明做什么的

1.@Controller 标识该类是SpringMVC controller处理器,用来创建处理HTTP请求的对象
2.@Service 用来标注业务层组件,用注解的方式把这个类注入到Spring配置中
3.@Autowired 用来装配Bean,可以写在字段或者方法上
4.RequestMapping 提供映射信息
5.@Scope 用来配置Spring bean的作用域,标识bean的作用域

四.Mybatis的基本工作流程

  1. 读取配置文件,配置文件包含数据库连接信息和Mapper映射文件或者Mapper包路径。
  2. 有了这些信息就能创建SqlSessionFactory,SqlSessionFactory的生命周期是程序级,程序运行的时候建立起来,程序结束的时候消亡
  3. SqlSessionFactory建立SqlSession,目的执行sql语句,SqlSession是过程级,一个方法中建立,方法结束应该关闭
  4. 当用户使用mapper.xml文件中配置的的方法时,mybatis首先会解析sql动态标签为对应数据库sql语句的形式,并将其封装进MapperStatement对象,然后通过executor将sql注入数据库执行,并返回结果。
  5. 将返回的结果通过映射,包装成java对象

五.MyBatis应用动态SQL解决了什么问题

  1. 固定的sql语句不能够满足我们的应用需求。这个时候需要在标准的基础上建立动态的查询语句。
  2. Mybatis提供了多种注解,可以提供动态查询语言。
  3. 在这里插入图片描述
    MyBatis应用中#与 有 什 么 异 同 点 : 相 同 点 : 都 是 通 过 g e t 来 获 取 值 的 不 同 点 : 有什么异同点: 相同点:都是通过get来获取值的 不同点: :get传进去的字符串不带引号 #号带引号

MyBatis的优缺点?
优点:
易于上手和掌握,SQL写在XML中,便于统一管理和优化,减少SQL与程序代码的耦合,提供XML,支持动态SQL编写.
mybatis封装了底层JDBC API的调用细节,并能自动将结果集转换成JavaBean对象,大大简化了Java数据库编程的重复工作。
缺点:
SQL工作量大,多表时字段多.
SQL依赖于数据库,导致数据库移植性差. 由于xml里面标签id必须唯一,导致DAO中方法不支持方法重载。所以dao层必须是接口

六.MyBatis的缓存机制,一级,二级介绍一下

一级缓存
默认开启
SqlSession级别的缓存,实现在同一个会话中数据的共享
一级缓存的生命周期和SqlSession一致
当有多个SqlSession或者分布式环境下,数据库写操作会引起脏数据。

二级缓存
默认不开启,需手动开启
SqlSessionFactory级别的缓存,实现不同会话中数据的共享,是一个全局变量
可自定义存储源,如Ehcache
当开启缓存后,数据查询的执行的流程是:二级缓存>一级缓存>数据库
不同于一级缓存,二级缓存可设置是否允许刷新和刷新频率实现
实体类实现序列化,在mapper文件中开启
在配置文件中设置cacheEnabled为true

七.描述Spring MVC处理流程及应用优势

在这里插入图片描述

  1. 客户端发出一个http请求给web服务器,web服务器对http请求进行解析,如果匹配前端控制器(或分发器/DispatcherServlet)的请求映射路径, web容器将请求转交给DispatcherServlet.
  2. DipatcherServlet接收到这个请求之后将根据请求的信息以及处理器映射器(HandlerMapping)的配置找到处理请求的处理器(Handler)。
  3. 由具体的处理器适配器(HandlerAdapter)对Handler进行具体的调用。
  4. Handler对数据处理完成以后将返回一个ModelAndView()对象给 DispatcherServlet。
  5. DispatcherSevlet通过视图解析器(ViewResolver)将ModelAndView()转 化为真正的视图View。
  6. Dispatcher通过model解析出ModelAndView()中的参数进行解析最终展现出完整的view并返回给客户端。

八.Spring Boot 的核心特性

  1. Spring Boot是一个脚手架,构建与Spring框架基础之上
  2. 基于快速构建理念,提供了自动配置功能,可实现其开箱即用特性(创建完一个基本的项目以后,可零配置或者少量配置即可运行我们的项目)
  3. 起步依赖(Starter Dependency)-项目创建时底层帮你关联依赖。
    自动配置(Auto Configuration)。
    健康检查(Actator)-监控。

九.Spring Boot项目在启动时发生了什么?

在这里插入图片描述

  1. SpringBoot 项目在启动时,首先基于启动入口类上的注解描述,进行自动配置并扫描指定包以及子包中的类进行加载
  2. 检测类上是否有Spring框架中指定的注解描述(例如@Component,@Controller,@Service等),假如有,则将类交给Spring框架中的BeanFactory工厂接口的实现类对象,此工厂对象会基于反射创建Bean的实例,假如此Bean指定了生命周期方法,还会调用生命周期方法
  3. 当实例创建以后,Spring框架还会基于类的作用域描述,将实例存储到不同作用域的容器中。以实现Bean对象的科学应用。
  4. Spring boot启动顺序:查找,加载,读和存储配置,创建和存储实例对象

十.Spring Boot整合连接池

  1. 实际开发中应用程序与数据库交互时,“获得连接”或“释放资源”是非常消耗系统资源的两个过程,为了解决此类性能问题,通常情况我们采用连接池技术来重用连接
    在这里插入图片描述
  2. 整合HiKariCP连接池
    HiKariCP号称是目前世界上最快的连接池,有江湖一哥的称号,目前在springboot工程默认推荐使用HiKariCP连接池

十一.Spring Boot 整合MyBatis框架

  1. Mybatis是一个优秀的持久层框架,底层基于JDBC实现与数据库的交互。并在JDBC操作的基础上做了封装和优化,它借助灵活的SQL定制,参数及结果集的映射方式,更好的适应了当前互联网技术的发展。Mybatis框架的简单应用架构
    在这里插入图片描述
  2. 在互联网应用中项目,mybatis框架通常会由spring框架进行资源整合,作为数据层技术实现数据交互操作。
  3. 数据持久化
    ●持久化就是将程序的数据在持久状态和瞬时状态转化的过程
    ●内存:断电即失
    ●数据库(Jdbc), IO文件持久化。
    持久层就是,有些对象.数据,不让它丢失

MyBatis的基本工作流程
4. 读取配置文件,配置文件包含数据库连接信息和Mapper映射文件或者Mapper包路径。
5. 有了这些信息就能创建SqlSessionFactory,SqlSessionFactory的生命周期是程序级,程序运行的时候建立起来,程序结束的时候消亡
6. SqlSessionFactory建立SqlSession,目的执行sql语句,SqlSession是过程级,一个方法中建立,方法结束应该关闭
7. 当用户使用mapper.xml文件中配置的的方法时,mybatis首先会解析sql动态标签为对应数据库sql语句的形式,并将其封装进MapperStatement对象,然后通过executor将sql注入数据库执行,并返回结果。
8. 将返回的结果通过映射,包装成java对象

十二.Servlet常见问题

servlet是什么?
servlet是用来处理客户端请求并产生动态网页内容的JAVA类.
Servlet是运行在web服务器上的服务端的组件.
Servlet主要是处理或者存储HTML表单提交的数据,产生动态内容,在五无状态的HTTP协议下管理状态信息.

什么是Web应用程序
web应用程序是对Web或者是应用服务器的动态拓展,有两种类型的Web应用程序面向表现和面向服务的.
面向表现的Web应用程序会产生包含了很多标记语言和动态内容的交互的Web页面作为请求响应,
面向服务的Web应用实现了Web服务的端点(endpoint)
一个Web应用可以看成是一组安装在服务器URL名称空间的特定子集下面的Servlet的集合.

说一说Servlet的生命周期
 Servlet生命周期就是servlet从创建到销毁的过程,包括加载和实例化,初始化,服务,和销毁4步。
   当客户第一次请求时,首先判断是否存在servlet对象,第一次请求时不存在,则由tomcat创建对象,调用init()方法对其初始化,用service()方法判断是post请求还是get请求,调用对应的方法返回给客户。
   当客户第二次请求时,还是判断是否存在servlet对象,由于之前已经创建过对象,所以直接到service()方法判断提交方式,调用对应的方法返回给客户端,
   当tomcat关闭时,调用destory()方法销毁对象。
Servlet与JSP的比较
都可以生成动态网页。JSP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是"类servlet"。
 JSP的优点是擅长于网页制作,侧重于视图,生成动态页面比较直观,缺点是不容易跟踪与排错。
 Servlet是Java语言,擅长于处理流程和业务逻辑,缺点是生成动态网页不直观。
什么情况下调用doGet()和doPost()?
JSP页面中的form标签里的method属性为get时调用doGet(),为post时调用doPost();超链接跳转页面时调用doGet()

十三.redis常见问题

在这里插入图片描述

1. String 字符串类型
是redis中最基本的数据类型,一个key对应一个value。
String类型是二进制安全的,意思是 redis 的 string 可以包含任何数据。如数字,字符串,jpg图片或者序列化的对象。sts)
实战场景:
缓存: 经典使用场景,把常用信息,字符串,图片或者视频等信息放到redis中,redis作为缓存层,mysql做持久化层,降低mysql的读写压力。

2. Hash (哈希)
是一个Hasmap,指值本身又是一种键值对结构,如 value={{field1,value1},…fieldN,valueN}}
实战场景:
缓存: 能直观,相比string更节省空间,的维护缓存信息,如用户信息,视频信息等。

3. Linkedlist链表
List 说白了就是链表(redis 使用双端链表实现的 List),是有序的,value可以重复,可以通过下标取出对应的value值,左右两边都能进行插入和删除数据。
实战场景:
timeline:例如微博的时间轴,有人发布微博,用lpush加入时间轴,展示新的列表信息。

4. Set 集合
集合类型也是用来保存多个字符串的元素,但和列表不同的是集合中 1. 不允许有重复的元素,2.集合中的元素是无序的,不能通过索引下标获取元素,3.支持集合间的操作,可以取多个集合取交集、并集、差集。
实战场景;
1.标签(tag),给用户添加标签,或者用户给消息添加标签,这样有同一标签或者类似标签的可以给推荐关注的事或者关注的人。
2.点赞,或点踩,收藏等,可以放到set中实现

5. zset 有序集合
有序集合和集合有着必然的联系,保留了集合不能有重复成员的特性,区别是,有序集合中的元素是可以排序的,它给每个元素设置一个分数,作为排序的依据。
实战场景:
1.排行榜:有序集合经典使用场景。例如小说视频等网站需要对用户上传的小说视频做排行榜,榜单可以按照用户关注数,更新时间,字数等打分,做排行。

Redis三个特点:
1.Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
2.Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
3.Redis支持数据的备份,即master-slave模式的数据备份。
性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s

Redis一般应用在:
1、热点数据的缓存。
2、限时业务的运用,利用这一特性可以运用在限时的优惠活动信息、手机验证码等业务场景。
3、计数器相关问题,所以可以运用于高并发的秒杀活动、分布式序列号的生成。
4、排行榜相关问题,进行热点数据的排序。
5、分布式锁。

二.ajax运用在什么场景,简单描述

Ajax是一种创建交互式网页应用的的网页开发技术;Asynchronous JavaScript and XML”的缩写。
Ajax的优势:
通过异步模式,提升了用户体验。
优化了浏览器和服务器之间的传输,减少不必要的数据往返,减少了带宽占用。
Ajax引擎在客户端运行,承担了一部分本来由服务器承担的工作,从而减少了大用户量下的服务器负载。
Ajax的最大特点:
可以实现局部刷新,在不更新整个页面的前提下维护数据,提升用户体验度。
使用场景:

  1. 只需要进行数据交互的地方(注册登录,异步提交、删除、编辑、分页)
  2. 操作起来只需要刷新页面局部的地方
  3. 单页面应用,所有数据通过AJAX与后端交互

三 .事务的特性

  1. 什么是事务
    数据库事务是指作为单个逻辑工作单元执行的一系列操作(SQL语句)。这些操作要么全部执行,要么全部不执行。
  2. 为什么需要事务
    经典的银行转账行为,A账户转给B账户10元,数据库操作需要两步,第一步A账户减10元,第二步B账户加10元,如果没有事务并且在两步中间发生异常,就会导致A的账户少了10元,但B的账户没有变化,如果不能保证这两步操作统一,银行的转账业务也没法进行展开了。
    事务管理是每个数据库(oracle、mysql、db等)都必须实现的。
  3. 事务特性(4种):
    原子性 (atomicity):强调事务的不可分割.
    一致性 (consistency):事务的执行的前后数据的完整性保持一致.
    隔离性 (isolation):一个事务执行的过程中,不应该受到其他事务的干扰
    持久性(durability) :事务一旦结束,数据就持久到数据库
  4. 事务运行模式(3种)
    自动提交事务:默认事务管理模式。如果一个语句成功地完成,则提交该语句;如果遇到错误,则回滚该语句。
    显式事务:以BEGIN TRANSACTION显式开始,以COMMIT或ROLLBACK显式结束。
    隐性事务:当连接以此模式进行操作时,sql将在提交或回滚当前事务后自动启动新事务。无须描述事务的开始,只需提交或回滚每个事务。它生成连续的事务链。

Mysql 中四种隔离级别分别是什么?
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值