Java SSM框架面试题(删繁就简,系统全面)

目录

一、git

二、Maven

三、SpringIOC

四、AOP、代理模式

五、SpringAOP

六、SpringMVC

七、MyBatis

八、SSM整合


前言:当我们学习到Java企业级框架时,能明显的感受到知识的抽象化,理解起来也不是特别的简单,其中包含spring、springmvc、mybatis等等,那么对于这样抽象化的东西怎样才能更好的去理解呢?应该把抽象变为具体,或者把它变为生活化的东西来帮助我们理解,或者通过一些图形也能帮助我们渗透知识点。还有一点特别重要的是,框架部分的知识点是特别多的,其中包含的面试题也是非常多的,在真实面试场景中spring框架的面试题也是占了主导部分,所以,背好面试题,是我们迈入公司,高薪就业的第一步。

一、git

1、什么是git

        Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。它采用了分布式版本库的方式,不必服务器端软件支持。

2、git的常用命令

初始化

git init

配置

git config 配置

克隆

git clone 地址

添加暂存区

git add 文件

提交仓库

git commit –m 注释

推送远程仓库

git push

更新代码

git pull

 3、git的工作流程(借助图来记忆)

(1)、git clone 克隆远程资源到本地目录,作为工作目录;

(2)、然后在本地的克隆目录上添加或修改文件;

(3)、如果远程修改了,需要同步远程的内容,直接git pull就可以更新本地的文件;

(4)、本地在修改之后,可以通过git status 查看修改的文件。然后使用git add 添加修改的文件暂到缓冲区;

(5)、在添加之后,可以使用git commit添加到当前的工作区;

(6)、在修改完成后,如果发现错误,可以撤回提交并再次修改并提交;

(7)、git push将本地的修改推送到远程的git服务器。

二、Maven

 1、什么是Maven

        jar包管理工具,Maven是一种项目管理工具,基于POM(项目对象模型),帮助实现管理依赖,以及项目的构建、发布、部署、生成报告等。

2、常用的Maven命令

  • mvn -version 查看版本

  • mvn compile 编译项目

  • mvn test 运行单元测试

  • mvn package 项目打包

  • mvn clean 删除target目录

  • mvn install 安装打包好的项目jar包到仓库

  • mvn archetype:generate 构建项目目录

    参数:-DgroupId=组织名 -DartifactId=项目名 -Dversion=版本 -Dpackage=包

3、Maven的生命周期管理

  1. clean 清理,部署前清理项目

  2. default 默认,默认生命周期又包含7个步骤

    1. validate 验证

    2. compile 编译

    3. test 测试

    4. package 打包

    5. verify 核准,部署前验证

    6. install 安装,安装到仓库

    7. deploy 部署,部署服务器

  3. site 发布,发布网站,生成报告

        IDEA提供了Maven窗口,可以快捷的操作上面的生命周期,双击某个选项都可以执行该生命周期

 4、Maven的继承与聚合

         继承,项目之间可以继承,子项目可以继承父项目的依赖和插件

        聚合,一个项目可以把多个项目整合到一起打成一个包,部署到一起,聚合项目用modules配置被聚合的项目

5、Maven仓库的工作流程

当项目需要某个jar包时,先从本地仓库查找,如果有就返回,如果没有就到远程仓库查询,如果找到就返回jar包并保存到本地仓库,如果还没找到就到中央仓库查找,如果找到了就保存到远程仓库和本地仓库中,如果没有就查找失败了。 

三、SpringIOC

1、spring的基本概念

        Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

2、spring的主要组件

  • Core 核心组件 ,提供IOC功能

  • Context 上下文组件,提供包的扫描、国际化、事件等功能

  • Beans JavaBean的管理

  • SpEL Spring表达式

  • AOP 面向切面编程

  • Test 集成单元测试

  • MVC SpringMVC框架

  • JDBC 集成JDBC开发

  • ORM 数据库开发

  • Cloud 微服务开发框架

  • Securty 权限控制框架

  3、什么是IOC,IOC的作用?

        IOC(Inverse of Controll)控制反转是一种程序设计思想,一般情况下对象的创建和管理由开发者控制,反转是把对象的创建和管理交给容器完成,然后再交给开发者。

        IOC的好处是程序解耦,没有IOC的程序中,我们使用硬编码来完成对象的创建和生命周期管理,代码不灵活、不利于扩展和维护。

        有了IOC后对象的创建由第三方(Spring容器)完成,由Spring来管理应用中所有对象的生命周期,开发者只需要关注自己的业务逻辑,代码更利于扩展和维护。

4、什么是DI?

       DI(Dependency Injection)依赖注入,是IOC另一种说法,也就是对象由容器来管理,注入到我们需要依赖中。

5、SpringIOC有哪些容器?

1、BeanFactory,最简单的容器,给 IOC提供了基本的支持

2、 ApplicationContext,更高级的容器,继承BeanFactory,包含BeanFactory的所有功能之外,在国际化支持、资源访问(如URL和文件)、事件传播等方面进行了良好的支持

6、IOC属性注入的几种方式

        1) set方法注入,就是上面通过property进行配置

        2) 构造方法注入

        3) 自动装配

                可以通过bean的autowire属性配置

7、自动装配的几种方式

8、spring的重要注解

9、@Autowire和@Resource的区别(上图有)

10、IOC的实现原理
        利用了反射机制,在解析XML文件后,通过反射机制来动态创建对象,调用set方法,将对象注入到对应的属性中,然后通过容器返回对象。

四、AOP、代理模式

1、AOP的实现流程

2、代理模式

        什么是代理模式

                一种设计模式,当调用者不能直接调用目标对象时,通过代理对象间接进行调用目标对象。

代理模式分为两种:

1) 静态代理,在运行前,通过编写代码的方式生成代理类

2) 动态代理,在运行后,通过反射机制生成代理类

和静态代理不同,动态代理是在运行时,通过反射机制动态生成代理类。开发者不需要手动编写新的代理类。

Java的动态代理主要有两种实现:

1)JDK动态代理

2)CGLib动态代理

3、JDK的动态代理如何实现

        1) 实现InvocationHandler接口

        2)实现invoke方法

        3)通过Proxy.newProxyInstance方法返回代理对象

4、JDK和CGLib动态代理的区别

        JDK动态代理的被代理类必须实现过接口

        CGLib 通过继承实现,代理类是被代理类的子类

五、SpringAOP

1、AOP是什么,有什么作用

        AOP是面向切面编程,是OOP编程的一种重要补充,能实现代码解耦,将代码的核心业务和非核心业务分离开来。

2、AOP的通知类型

        前置 before、后置 after、环绕 around、返回后置 afterReturning、异常后置 afterThrowing

3、AOP在实际项目用有哪些应用

        项目开发时,如果发现很多方法都会有些相同的代码,和核心业务又没有关系时,就可以考虑使用AOP,如:事务管理、缓存管理、日志处理、权限管理、性能监控等

六、SpringMVC

1、什么是MVC

M(Model模型)负责数据访问、业务逻辑(dao、service、entity)

V(View视图)负责和用户交互、展示数据(页面)

C(Controller控制器)负责调用模型、更新视图(servlet-->Controller)

作用:解耦,便于开发和维护

2、SpringMVC的执行流程

1) 用户发送请求

2)前端控制器获得用户请求的URL,发送URL给处理器映射

3)处理器映射将Handler(包装方法信息)返回给前端控制器

4)前端控制器发送Handler给处理器适配器,适配器执行Handler方法

5)执行Handler方法后,返回ModelAndView(逻辑视图)给前端控制器

6)前端控制器将ModelAndView发送给视图解析器,解析出物理视图返回给前端控制器

7)前端控制器渲染视图,发送视图给用户

 3、SpringMVC的常用注解

@Controller配置控制器类
@RequestMapping("URL")配置请求方法         
@GetMapping("URL")配置GET请求方法
@RequestParam("名称")配置请求参数
@PathVariable("名称")配置路径参数

4、SpringMVC获得页面参数值有几种方法?

1)参数直接绑定

2)@RequestParam注解绑定参数

3)对象绑定参数

4)@PathVariable绑定参数

5)通过Map集合进行参数绑定

6)通过List集合进行参数绑定

5、SpringMVC将数据绑定页面有几种方法? 

在JSP页面中可以通过EL表达式来绑定后台的数据,后台数据可以保存到:

  1. 将数据保存到HttpServletRequest、HttpSession、ServletContext中

  2. 在参数中定义Model参数保存数据

  3. 在参数中定义Map参数保存数据

6、SpringMVC和Ajax交互
        目前后台和前端进行通信主要的数据格式是:JSON

        相关注解

7、什么是拦截器?与过滤器的区别?

         类似于JavaWeb中的Filter过滤器,用于过滤请求,可以对不符合要求的请求进行拦截

1)过滤器的使用范围比拦截器大,JavaWeb项目都可以使用,拦截器只能在SpringMVC使用

2)拦截器效率高于过滤器

8、拦截器的使用

1) 实现HandlerInterceptor接口

2)实现方法

  • preHandle 前置处理

  • postHandle 后置处理

  • afterCompletion 完成后处理

3) 配置拦截器

七、MyBatis

 1、什么是MyBatis?

        MyBatis是目前主流的ORM框架,MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

2、什么是ORM?

        对象关系映射(Object Relational Mapping,简称ORM)是通过使用描述对象和数据库之间映射的元数据,将面向对象语言程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。

3、MyBatis和Hibernate的区别

        Hibernate

1) 是全自动框架,不用写SQL,全部自动生成

2) 不利于SQL的优化

3) 入门相对复杂

        MyBatis

1) 半自动框架,需要写SQL,由框架完成映射

2) 方便SQL的优化

3) 入门相对容易

4、#{}和${}的区别

        #{xx}占位符,用ParameterStatement的?占位符方式在SQL中插入参数值,能避免注入攻击。${}是字符串拼接,不能避免注入攻击 

5、MyBatis的基本使用

        1、导入依赖

        2、添加配置文件mybatis-config.xml

        3、编写mapper接口

        4、编写映射文件

        5、编写测试,创建SqlSessionFactory,创建SqlSession获得Mapper,调用方法

6、MyBatis的动态SQL 

        MyBatis的一个重要特性就是动态SQL,能通过条件动态生成SQL语句

动态SQL通过下面几种标签实现:

if、where、set、trim、foreach

7、MyBatis的关联查询如何实现

        MyBatis映射文件中,在ResultMap里可以配置关联关系

        主要有两种标签来映射关联属性:

                collection 配置集合类型的属性

                association 配置单独对象的属性

8、什么叫延迟加载

        延迟加载也叫懒加载,需要数据时再启动查询,是MyBatis对数据库的优化机制。

9、Mybatis的缓存机制

        缓存是将数据库的数据保存到内存或磁盘上,查询数据时直接访问内存或磁盘,减少对数据库的访问。 

        缓存的作用:

        1、减少数据库的负担

        2、提升性能

        MyBatis有两级缓存,查询数据时先访问一级缓存,如果查询到就返回数据,没有再查询二级缓存,如果查询到,保存到一级缓存后返回数据,如果没有就查询数据库,查到就保存到一级和二级缓存中,返回。

        MyBatis一级缓存的作用域为session,具有相同的sql和参数,默认开启。原理:mybatis执行查询时首先去缓存区命中,如果命中直接返回,没有命中执行sql,从数据库中查询。

        mybatis 的二级缓存的作用域是一个mapper的namespace ,同一个namespace中查询sql可以从缓存中命中。默认开启。

八、SSM整合

1、介绍下SSM整合的过程

导入相关依赖

配置SpringMVC(ViewResolver等)

配置MyBatis(基础设置)

配置Spring整合MyBatis(数据源、Session工厂、接口扫描器) 

Spring配置把SpringMVC和MyBatis配置整合进来

Web.xml的配置(DispatcherServlet)

完成数据表的查询,完成entity、dao、service、controller、jsp

2、介绍事务的特性(ACID)

        软件项目中一个具体的业务,包含多个数据库的操作,这些操作必须作为整体执行,要么全部成功,要么全部失败。

  • 原子性(Atomic)

    一个事务的多个操作作为一个整体不可分割,要么全部执行,要么全部失败

  • 一致性(Consistency)

    数据在事务执行前和执行后处于一致状态(正确)

  • 隔离性(Isolation)

    系统的多个事务需要相互隔离,互相不影响

  • 永久性(Duration)

    一旦事务提交,对数据库的修改是永久的

3、事务的实现

        在Service层的方法上配置

        分为两种:

  1. 编程式事务:

    编写Java代码,实现启动事务、提交事务或回滚事务

    编程麻烦、代码侵入性高,不推

  2. 声明式事务:

        通过配置+注解实现

        代码简洁,侵入性低,推荐

                声明式事务:1)在spring配置文件中添加事务管理的配置                              

                                      2) 在需要事务的Service方法上添加注解:

                                                @Transactional

4、事务并发问题有哪些

事务和事务之间需要相互隔离,否则可能出现问题:

严重性从高到低:

1)脏读

一个事务读到另一个事务没有提交的数据

2)不可重复读

一个事务进行多次读取,读取到的结果不一样

3)幻读

一个事务第一次读取时没有某条数据,第二次读取时出现新的数据(幻影数据)

5、数据库隔离级别有哪些

事务的并发问题可以通过设置数据库的隔离级别来解决

隔离级别(从低到高):

Read uncommitted 读未提交,可能出现脏读

Read committed 读已提交,解决脏读

Repeatable read 可重复读,解决不可重复读(mysql的默认隔离级别)

Serializable  串行化,解决所有并发问题,排队执行性能低

隔离级别越高,并发问题越少,性能越低

6、Spring事务的传播性

事务传播性是Spring中的特性,用于指定调用的方法和上级方法的事务存在的关系。

事务传播性的配置

@Transactional注解的属性propagation

 

关于框架部分的面试题小编还会继续更新,请大家持续关注,拭目以待哦~~ 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值