FAQ

头像
隼舞
    阅读 3 分钟

    1.IDEA 是什么? (集成开发工具-IDE)
    2.IDEA 做了哪些配置?
    0)JDK的配置(JDK1.8)
    1)自动编译配置(代码发生变化以后要重新build)
    2)Maven的配置(服务,设置,本地库)--->每次创建新的项目都要重新配置(创建module不需要配置)
    3)项目编码(UTF8)
    SpringBoot项目创建及入门分析

    1)SpringBoot最核心作用是什么?简化Spring工程的创建,配置,运行,维护.
    a)起步依赖?(项目创建以后会自动添加一些项目环境的基础依赖)
    b)基础配置?(Spring项目中需要的基础配置,例如bean的扫描,基础bean的作用域配置,...)
    c)健康监控?(对项目启动,运行过程会有一个监控):暂时还没有讲到
    d)内置WEB服务?(例如tomcat,....,可以使用嵌入式服务器运行你的项目):暂时还没有讲到

    2)SpringBoot项)创建以后(maven构建方式)要做什么?

    a)了解其项目结构
    b)添加maven区(新的idea中需要实现的,没有在maven区项目不会帮你自动下载依赖)
    c)掌握业务代码编写在什么位置?
    d)掌握测试代码编写在什么位置?(springboot中的单元测试不使用org.junit包中的test)
    e)了解springboot的配置文件?(application.properties)
    f)熟悉maven工程构建文件?(pom.xml-假如这个文件中有些依赖呈现的是红色,可能没下载下来)
    SpringBoot初始项目运行时可能出现的问题?

    a)NoSuchBeanDefinitionException?(检查类所在的包,类上的注解)
    b)NullPointerException?(检查调用方法或属性的对象的值)
    c)No Test Found Exception?(检查单元测试方法写的是否正确,例如是否使用了public修饰,返回值类型是否为void)
    d)ParameterResolutionException?(单元测试方法不能写参数)
    e)ClassNotFoundException?(首先看一下是哪个类没有找到,假如是第三方的应该是依赖没有取下来)
    f) unable to find @SpringBootConfiguration?(检查是否有启动类,单元测试类所在包)
    g)found multiple @SpringBootConfiguration?(检查项目中是否有多个启动类)
    1.SpringBoot工程中Bean对象相关特性分析?

    1)我们定义的Bean应该放在什么包中会在项目启动时被加载?(必须在启动类所在包或子包中)
    2)如何判定我们写的类,在项目启动时被加载了?(借助JVM参数进行分析:-XX:+TraceClassLoading)
    3)spring工程中类被读到内存时是否会直接创建其对象?(不确定,要看其配置)
    4)对象被创建的一个标识是什么?(构造方法执行了)
    5)假如不希望对象在项目启动时创建,该如何配置?(通过@Lazy注解描述对应的类)
    6)SpringBoot工程什么样对象适合延迟加载配置?(大对象,稀少用,也就是启动后可能马上用不到)
    7)SpringBoot工程中的延迟加载如何理解?(对象不用时,不创建其时,节省内存)
    8)SpringBoot工程假如希望对类的实例进行重用,我们该如何配置?(设置Singleton作用域)
    6)SpringBoot工程中Bean的作用域为Singleton时,此类的实例有什么特点?
    6.1)可以设置延迟加载特性
    6.2)此Bean的实例可以存储到Bean池,让此对象可以重用.
    6.3)单例对象在使用时要注意其线程安全?(单例对象共享时)
    7)假如对象每次从spring容器获取都需要创建信息的实例,这个类型如何配置?(设置Prototype作用域)
    8)Springboot工程中什么样的对象适合设置为prototype作用域?(对象不需要重用,对象不是线程安全的)
    9)SpringBoot工程中可以为Bean对象设置生命周期方法,但并不是每个对象都要设置.(什么样的对象一般会设置?)
    10)为什么一些Spring Bean池中的一些对象要设置生命周期方法?(辅助对象进行初始化和销毁)

    2.SpringBoot工程中Bean对象的依赖查找(DL)和依赖注入(DI)?

    1)实际项目中我们会将所有的业务都写到一个对象中吗?(不会-每个对象都应该有一个自己的职责)
    2)实际项目中对象会通过协同方式完成一个业务?(正确->这种协同就需要对象之间存在依赖)
    3)当对象之间存在依赖时(这种现象又称之为耦合),应该降低这种依赖?(耦合于抽象,耦合工厂)
    4)当对象中存在耦合关系时,如何进行值的注入?(最好由对象管理方完成对象注入,例如spring)
    5)Spring中为对象类型属性赋值推荐使用什么方式?(自动依赖注入-底层技术需要用到反射)
    6)Spring中为对象类型属性赋值时常用的注入策略是什么?(直接为属性赋值,构造方法赋值,set方法赋值)
    7)当使用@Autowired注解描述属性时,Spring底层为属性进行DI操作的过程是怎样的?

    为什么要将对象交给Spring管理?

    我们程序中对象的运行有一个目标?第一:要解决业务问题,第二,要高效低耗的优化业务的执行.
    那如何才能达成这样的目标?第一:充分分析业务,确定其对象,第二,要思考解决业务的这些对象
    的运行性能.在Spring框架中不会帮我们解决业务问题,但可以从对象运行时的性能方面给予一定
    的设计,例如Spring为我们的对象赋予了很多个更加科学的特性,例如延迟加载,作用域,生命周期方法以及运行
    时的自动依赖注入(降低耦合,提高程序的可维护性).

    2)Spring框架中通过什么方式创建Bean对象?借助反射
    a)获取类的字节码对象(Class类型-->类加载到内存时就可以获取)
    b)获取类中的构造方法对象(Constructor类型)
    c)基于(Constructor类型的对象创建对应类的实例(底层调用newInstance方法)

    1.Spring是一个什么框架?(资源整合框架)

    1)这里的资源指的是什么?在内存中运行的所有资源都可以理解对象.
    2)这些资源对象有一些是我们自己定义(结合业务自己写的一些类),还有一些是第三资源(通用的一些库或框架)?

    2.借助Spring进行资源整合的目的是什么?

    1)让资源更加科学的得到使用.(科学->高效低耗)
    2)提高程序的可维护性,可扩展性.(降低了对象之间的耦合)

    3.使用SpringBoot要解决什么问题?
    简化Spring框架资源整合的过程,为Spring框架的资源整合提供基础依赖,基础配置,基础监控等,
    实现了软件开发过程中的开箱即用特性.

    1.如何理解数据库连接池?

    1)何为连接池?(内存中一块存储"可重用连接对象"的空间)
    2)为什么使用连接池?(提高其性能-反复创建和销毁连接会带来很大的性能损耗)
    3)为什么说创建连接和销毁连接会有很大性能损耗?(底层建立连接使用的是TCP/IP协议,
    基于此协议创建连接需要三次握手,释放连接需要四次挥手)

    在C/S架构,如何提高服务端响应数据的速度(降低响应时间)?
    1)请求数据的传输时间?(数据量-压缩,带宽)
    2)请求数据的处理时间?(架构,算法,CPU,磁盘,内存)
    3)响应数据的传输时间?(数据量-压缩,带宽,缓存)
    4)响应数据的渲染时间? (html,css,js,images)
    .假如让你设计一个连接池你会考虑哪些问题?

    1)池的存储结构?(数组,链表)
    2)从池中借,还连接的算法?
    3)池操作的线程安全?(如何在保证线程安全的情况还要有很好的性能。)
    Java中连接池的规范是什么?为什么要有规范?

    1)规范的定义:javax.sql.DataSource
    2)使用规范可以让代码更严谨,其可维护性也会更好。

    Java编程领域中所有连接池提供方,必须实现DataSource接口,后续我们编程时,可以通过
    此接口获取具体连接池对象。
    Java中具体是哪个对象负责建立与数据库的链接?Driver

    5.SpringBoot工程中想使用HikariCP连接池应该如何实现?
    第一步:添加依赖(mysql,spring-data-jdbc)
    第二步:配置链接数据库的url,username,password,........
    第三步:在程序中耦合DataSource接口获取具体数据源对象,。。。


    隼舞
    1 声望0 粉丝