栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

面試就业题库-05

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

面試就业题库-05

文章目录

1. java基础(1)2. javaweb(1)3. ssm+springboot+springCloud(1.5)

4. spring框架

4.1 IOC总结4.2 BeanFactory(懒加载初始bean)和ApplicatonContext(立即初始bean)区别4.3 spring的DI4.4 aop4.5 通知 5. springmvc框架

5.1 Spring容器和SpringMVC容器的区别以及关系?5.2 SpringMVC中为什么不会出现post请求的中文乱码问题?5.3 SpringMVC 核心处理器有那些?5.4 SpringMVC 执行流程5.5 SpringMVC 的拦截器和过滤器什么区别 6. Mybatis

6.1 持久层框架6.2 mybatis在进行多表查询时,什么时候立即加载,什么时候懒加载?6.3 # 和 $ 符号什么区别?6.4 mybatis的缓存问题6.5 mybatis基于接口开发 7. SSM 结束 之环绕依赖问题8.SpringBoot

8.1. 什么SpringBoot8.2. SpringBoot构建的项目如何部署和运行8.3. SpringBoot和Spring(SpringMVC)框架区别8.4. SpringBoot常用的启动器,分别有什么用8.5. SpringBoot自动装配原理8.6. SpringBoot 配置文件

8.6.1. 全局的配置文件(名称必须按照写)8.6.2 自定义的配置文件8.6.3 springBoot框架中使用启动器,启动默认自带的配置文件8.6.4 配置文件的里面的数据是什么, 有什么作用呢? 9. SpringCloud 4. 企业开发的项目: 技术说明(1.5)5. 面试总结(3,4)

1. java基础(1) 2. javaweb(1) 3. ssm+springboot+springCloud(1.5) 4. spring框架 4.1 IOC总结

IOC 的全称 inverse of controller , 控制反转, 之前由自己new 对象的方式反转给spring容器.
spring容器其实就是一个ConCurrentHashMap, 如何创建bean对象, 如何装配?
==基于配置文件开发:
spring容器加载和读取文件, 利用反射机制(class.newInstance(),依赖无参构造创建bean),put到map集合中
== 基于注解开发
spring容器开启扫描机制,通过@ComponentScan(“指定扫描的package包”),获取到类的全路径.
常见的注解: @Component (用到普通的javaBean),@Service(用到业务层的bean上) ,@Repository(用 在dao层)
比如: 扫描这个@Repository,就能获取cn.spring.dao.UserDataJpa,
利用Class clz=Class.forName(“cn.spring.dao.UserDataJpa”);
UserDataJpa bean = clz.newInstance(); 把bean装配到map容器中.

4.2 BeanFactory(懒加载初始bean)和ApplicatonContext(立即初始bean)区别

相同点: 都是spring容器BeanFactory 顶层接口(父容器)ApplicationContext 子接口(子容器)实现初始bean对象,把bean对象装配到容器中.是以上接口的子类.

    如果是普通的java项目:
    *基于配置文件开发:
    手动创建 ClassPathXmlApplicationContext容器对象,读取配置文件,实现初始bean对象
    *基于注解开发:
    手动创建AnnotationConfigApplicationContext容器对象,扫描注解,实现初始化bean对象如果是web项目:

基于配置文件开发:
在服务器启动时, 由ContextLoadListener监听器,自动创建XmlServletWebServerApplicationContext容器对象,
读取配置文件,实现bean对象的初始化.基于注解开发
在服务器启动时,由监听器负责自动创建AnnotationConfigWebApplicationContext容器对象,扫描注解,实现bean对象的初始化.
4.3 spring的DI

DI: 依赖注入,在一个类中注入这个类所需的bean对象.方式一: set方法注入方式二: 构造方法注入基于配置文件: 实现DI,如下图
基于注解开发,实现DI

    @Resource :
    实现在类中注入bean对象,底层根据注入bean的类名(首字母小写,比如: cat---->Cat对象),
    从容器中拿到bean对象,注入到当前类中@Autowired:
    实现在类中注入bean对象,底层根据bean的类型,从容器中拿到bean对象,注入到当前类中
    Qualifier(“bean的名称”): 如果根据类型找不到, 才会 Qualifier(“bean的名称”)的bean名称找
4.4 aop

Spring框架AOP: 对业务层的方法进行增强.应用场景: 事务控制(底层就是aop)事务:

    读问题,写问题 ,引发开发者在业务层使用事务控制事务隔离级别事务的传播属性
4.5 通知

通知: 就是增强的业务逻辑分类

    前置通知,后置通知,返回通知,异常通知,环绕通知执行顺序:
    前置通知: 在执行目标方法(切点)前,执行
    后置通知: 在执行目标方法(切点)后,不管执行过程中,是否有异常,都会执行的通知
    返回通知: 在执行目标方法(切点)后,执行,在执行过程中,有异常,返回通知不执行
    异常通知: 在执行目标方法(切点)后,如果有异常,才会执行.
    注意: 返回通知和异常通知不能同时执行
    环绕通知配置在切点上面,如果配置了环绕通知,一般情况下不用前置,后置,返回通知.
5. springmvc框架 5.1 Spring容器和SpringMVC容器的区别以及关系?

Spring容器是父容器, 可以初始化任意层(web层,service层,dao层)的bean对象
@Component,@Controller, @Service, @RepositorySpringMVC容器称之为子容器,作用初始化web层的bean对象
@ControllerSpring容器可以初始化@Controller注解下面的bean,
SpringMVC容器可以初始化@Controller注解下面的bean,就会出现冲突.
怎么解决这个问题?
Spring容器扫描时,排除web层的@Controller注解.
SpringMVC容器扫描时,只扫描web层的@Controller注解. 5.2 SpringMVC中为什么不会出现post请求的中文乱码问题?

使用了CharacterEncodingFilter过滤器类, 默认处理了post请求的中文乱码问题.
过滤器的作用: 拦截请求和响应.
比如: 浏览器 提交post请求的中文-------->CharacterEncodingFilter过滤器(处理post乱码)-------->后台端

5.3 SpringMVC 核心处理器有那些?

中央处理器: 分发请求,比如: http://域名:port/controller的访问路径处理映射器: 将中央处理器分发的请求进行解析,根据解析controller的访问路径,访问对应的controller视图解析器: 将controller返回的数据展示视图页面.需要视图解析器解析视图页面.将数据展示
视图: Freemarker, Thyemleaf数据处理器: 比如 springmvc默认使用的JaskSon,将后台的数据转成json数据进行返回 5.4 SpringMVC 执行流程

5.5 SpringMVC 的拦截器和过滤器什么区别

1).Springmvc中的拦截器interceptor用于对控制器controller进行预处理和后处理的技术;

2).可以定义拦截器链,拦截器链就是将拦截器按着一定的顺序结成一条链,在访问被拦截的方法时,拦截器链中的拦截器会按着定义的顺序执行。
3).拦截器interceptor与过滤器filter的区别
1.过滤器是servlet中的,任何框架都可以使用过滤器技术;
2.拦截器是Springmvc所独有的
3.过滤器设置 public class DemoByMyatis { @Test public void testX(){ Class[] inters = {DemoMapper.class}; //得到代理对象 Object proxy = Proxy.newProxyInstance(DemoByMyatis.class.getClassLoader(), inters, new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println(method.getName()); System.out.println(Arrays.toString(args)); //使用注解类, 获取当前方法上面的注解,获取注解里面配置是sql语句 Select se = method.getAnnotation(Select.class);//@Select String[] value = se.value(); System.out.println(value[0]); //使用jdbc规范: PrepareStatement return null; } }); //类型转换: 为什么不报错? 因为生成的代理实现了该接口 DemoMapper dm = (DemoMapper) proxy; dm.findById("1001"); } } 7. SSM 结束 之环绕依赖问题

如图描述:

解决方案:

    在开发中尽量避免出现这种环绕问题.使用spring的缓存机制: 保存spring容器初始化的bean对象.注意,这里不是函数的循环调用,是对象的相互依赖关系。循环调用其实就是一个死循环,除非有终结条件。

Spring中循环依赖场景有:

(1)构造器的循环依赖 (在类中,通过构造方法传入依赖的对象)

(2)field属性的循环依赖(在类中,通过set方法注入依赖的对象),上图演示的: 属性的循环依赖

其中,构造器的循环依赖问题无法解决,只能拋出BeanCurrentlyInCreationException异常,在解决属性循环依赖时,spring采用的是提前暴露对象的方法(底层采用spring的三级缓存机制)。

8.SpringBoot 8.1. 什么SpringBoot

用来简化spring应用的初始搭建以及开发过程 使用特定的方式来进行配置(properties或yml文件)创建独立的spring引用程序 main方法运行嵌入的Tomcat 无需部署war文件简化maven配置自动配置spring添加对应功能starter(启动器)自动化配置 8.2. SpringBoot构建的项目如何部署和运行

开发环境: 直接启动的应用类, 启动我们的项目生成环境: 项目开发完毕,要上线了.
方式一: springboot默认是jar包, 通过 java的jar启动命令, 来部署和运行项目.
方式二: springboot打成war包(排除springboot内嵌的tomcat), 把war包部署到tomcat服务器运行. 8.3. SpringBoot和Spring(SpringMVC)框架区别

Spring框架构建应用程序时比较麻烦,配置比较重,如果引入第三方依赖,需要手动在pom.xml配置
特别是引入核心依赖时,如果该核心依赖还有其它依赖,需要将依赖以及它的其它依赖同时在pom.xml配置
比如:


           com.fasterxml.jackson.core
           jackson-core
           2.9.8
       
       
           com.fasterxml.jackson.core
           jackson-databind
           2.9.8
       

springBoot简化了spring的配置,在构建spring的应用程序时,比较方便.
springBoot通过封装启动器,将核心依赖以及直接依赖都封装进来,
在pom.xml配置时,只需引入启动器即可总结:
spring重配置,体现pom.xml配置这里.
springBoot通过启动器,简化了配置. 8.4. SpringBoot常用的启动器,分别有什么用

spring-boot-starter-web 嵌入tomcat和web开发需要servlet与jsp支持spring-boot-starter-data-jpa 数据库支持spring-boot-starter-data-redis redis数据库支持spring-boot-starter-data-solr solr支持mybatis-spring-boot-starter 第三方的mybatis集成starter细节:

    如果启动器是以spring-boot-starter-x开头的, 那就表示该启动器是springBoot封装的如果启动器是以x-spring-boot-starter开头的,那就表示该启动器是不是springBoot封装的,是第三方封装的
8.5. SpringBoot自动装配原理

自动装配

    扫描开发者自定义带注解的类, 初始化bean对象,装配到容器(ConCurrentHashMap)读取spring-boot-autoconfigure-版本号: spring-autoconfigure-metadata.properties这个配置文件
    将配置文件配置的类, 初始化bean对象, 装配到容器(ConCurrentHashMap)

如何实现自动装配的?
如图: 8.6. SpringBoot 配置文件 8.6.1. 全局的配置文件(名称必须按照写)

 *   application和bootstarp配置文件。
   其中application配置文件分为两种情况
   一种是: application.yml
   二种是: application.properties

注意:
1.扩展名为yml和properties,它们的配置内容是一样,在项目中只需写一种就可了
2.如果版本号不同, yml和properties配置文件的优先级不一样.

bootstarp配置文件(后缀名为yml或者 yaml)
使用Spring Cloud Config注册中心时 需要在bootStarp配置文件中添加链接到配置中 心的配置属性来 加载外部配置中心的配置信息。
一些固定的不能被覆盖的属性
一些加密/解密的场景 8.6.2 自定义的配置文件

比如: 自定义数据源配置文件 dataSource.properties

8.6.3 springBoot框架中使用启动器,启动默认自带的配置文件

spring-boot-版本号: spring.properties
spring-boot-autoconfigure-版本号:spring.properties, spring-autoconfigure-metadata.properties

8.6.4 配置文件的里面的数据是什么, 有什么作用呢?

全局配置文件: 作用配置springboot框架的的全局信息,比如: 启动的端口号自定义配置文件: 作用配置springboot项目所需的数据信息,比如: 自定义数据源配置文件springboot自带的配置文件

    spring-boot-x: spring.properties:
    里面配置的大多是监听器,监听器的作用在springboot启动时,会自动加载全局的配置文件.
    当引导类执行main方法(启动),触发ApplicaitonEvent事件–>
    ConfigFileApplicationListener执行初始全局配置文件的操作
    2.spring-boot-autoconfigure-版本号:spring.properties, spring-autoconfigure-metadata.properties
    spring-autoconfigure-metadata.properties配置文件: 配置启动器关联第三方的核心类信息
    比如: JaskSon, CharacterEncodingFilter等等
    作用:
    当引导类执行main方法(启动)–> 通过读取 spring-autoconfigure-metadata.properties核心类–>自动装配搭配容器里面.
    当引导类执行main方法(启动)–>同时开启包扫描机制: 将开发者定义带注解的类,初始化成bean–>自动装配搭配容器里面.
9. SpringCloud 4. 企业开发的项目: 技术说明(1.5) 5. 面试总结(3,4)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/737529.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号