JAVA基础面试题二

1.简单介绍一下Spring

Spring是一个开源框架,主要目的是简化企业开发!它的核心部分为IOC(控制反转)和Aop(面向切面编程);使用Spring可以降低各个组件间的耦合度,他对主流的应用框架如:SpringMvc、MyBatis、Strtus2等提供了很好的集成,简化了开发步骤。

2.理解IOC和AOP

1.IOC:控制反转,将原本手动new 对象的权力交给Spring工厂,由Spring工厂来负责实例化对象以及维护对象与对象之间的依赖关系。

2.AOP:在原本的OOP编程中,不可避免会有很多重复代码,或者代码与代码之间的强耦合性,SpringAOP很好的解决了这样的问题,他使用动态代理,动态获取目标类对象,反射执行方法,为目标方法提供了一个可拔插的选项,避免了代码冗余和代码与代码之间的强耦合。

3.你了解动态代理吗

再Spring中实施了两种代理模式,即Cglib和jdk代理模式。

1.JDK代理:JDK的动态代理必须指定接口,这些接口都是已经被代理对象实现了的

2.CGLIB代理:CGLIB代理不需要指定接口

4.JDK动态代理的实现方式

基于JDK的动态代理需要实现InvocationHandler接口,通过类加载器Class.ClassLocald(),获取类对象,反射invoke()执行目标方法,缺点是只能基于接口进行代理

5.CGLIB动态代理的实现思路

基于CGLIB动态代理的方式,方法需要实现MethodInterceptor接口,覆盖intercept方法,通过参数methodProxy的methodProxy.invokeSuper(Object methodName,Object[] args)方法执行方法;他可以不用依赖于接口执行:

缺点:他不能代理find方法

代理模式详解

6.SpringBean工厂的实例化步骤

1.加载配置文件或者配置类(重点)

2.通过BeanID找到类的全限定名,反射加载对象(重点)

3.判断对象是否设置为了单例模式,如果是单例模式直接返回(重点)

4.执行依赖检查,防止循环依赖

5.如果存在依赖对象(注入对象),则进行递归创建,反射赋值到对应的属性上。

6.返回Bean实例

7.什么是单例模式

他是一种设计模式,一个类只有一个实例,能够自行初始化,并且向系统提供全局的访问接口

8.单例模式实现原理

单例模式比较流行的分为懒汉式和饿汉式

8.1 :单例模式懒汉式速记

​ 首先先私有化无参构造防止外部手动实例化!

​ 突出一个懒字,每一次用的时候才会去判断是不是为null,为null就创建对象,不为null就直接返回,不用就不判断!懒

package com.singlecase;

import org.apache.poi.ss.formula.functions.T;

/**
 * 传说中的懒汉式单例
 * 每一次等到用的时候才会判断它是否已经实例化了  所以说它懒啊
 * @author 皇甫
 */
public class LazySingleCase {
    private static LazySingleCase lazySingleCase;

    /**
     * 私有化构造函数 不让用户手动创建只能被动获取
     */
    private LazySingleCase(){}

    /**
     * 提供返回对象的方法
     * @return
     */
    public static LazySingleCase getInstance() throws InterruptedException {
        //用的时候才会去判断是不是为null
        if(lazySingleCase == null){
            lazySingleCase = new LazySingleCase();
        }
        return lazySingleCase;
    }
}

8.2:单例模式饿汉式速记

​ 设置私有的静态的成员对象,JVM保证,静态属性只被加载一次

​ 首先先私有化无参构造防止外部手动实例化!

​ 重点突出一个饿字,不管你能不能使用,我都会创建对象,static特点;因为饿,所以看见就吃,不管好 不好吃,因为饿,所以看见就创建不管用不用的上!

package com.singlecase;

/**
 * 饿汉式单例模式
 * @author 皇甫
 */
public class HungryChineseSingleCase {
    /**
     * 静态成员变量
     */
    private static HungryChineseSingleCase hungryChineseSingleCase = new HungryChineseSingleCase();
    
    private HungryChineseSingleCase(){}

    /**
     * 直接返回实例
     * @return
     */
    public static HungryChineseSingleCase getInstance(){
        return hungryChineseSingleCase;
    }
}

9.单例模式的懒汉式和饿汉式的优缺点

懒汉式 :节省空间,但是线程不安全

饿汉式:线程安全,但是不节省空间

单例模式详解

10.简单描述一下SpringMVC的执行流程

在这里插入图片描述

首先需要了解一点,再SpringMVC容器进行初始化的时候,会遍历所有的带有@Controller的类,将类里面的方法与@RequestMapping("xxxxx")的值做Map映射 Map<String,Method>,比如

@Controller
public class userController{
    @RequestMapping("/user/findAll")
    public List<User> findAllUser(){
        return new ArrayList<User>();
    }
}

模拟以上方法,它在容器初始化时Map映射为**("/user/findAll"---------->findAllUser)**

执行步骤如下:

1.客户端发送请求被DispathcherServlet拦截,发送给处理映射器(Handler Mapping),会根据url查询Map集合,返回Method对象,返回给DispathcherServlet

2.DispathcherServlet将方法对象给处理器映射器(Handler Adapter),执行Method.invoke()方法,返回ModeAndView给处理器映射器(Handler Adapter),再次将ModeAndView返回给DispathcherServlet

3.DispathcherServlet将试图对象(ModeAndView)传递给视图解析器(view Resolver),返回视图信息给DispathcherServlet

4…DispathcherServlet将视图信息返回给客户端

喜欢这篇文章的小伙伴,请识别下方二维码关注本公众号,小编不定期赠送免费的学习资源哦
在这里插入图片描述
关注公众号,我会不定期赠送各种java学习资源
在这里插入图片描述
下面是我的个人微信号,欢迎叨扰!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值