美文网首页
Java基础与框架

Java基础与框架

作者: 做自己的Yang光 | 来源:发表于2019-04-12 14:30 被阅读0次

    1.String、StringBuffer、StringBuilder的区别?

    可变性:String不可变(字符串常量),StringBuffer和StringBuilder可变(字符串变量)。

    线程安全:String因不可变,线程安全。StringBuffer线程安全(内部使用synchronized关键字进行同步)。StringBuilder线程不安全。

    运行速度:StringBuilder>StringBuffer>String。

    2.接口和抽象的区别

    接口强调特定功能的实现,其设计理念是“has-a”关系,而抽象类强调所属关系,设计理念为“is-a”关系。

    接口需要实现(用implements),抽象类只能被继承(用extends)。一个类可以实现多个接口,但是只能继承一个抽象类,使用接口可以间接达到多重继承的目的。

    接口的字段只能是 static 和 final 类型的,而抽象类的字段没有这种限制。

    接口的成员只能是 public 的,而抽象类的成员可以有多种访问权限。

    接口是抽象类的延伸,在 Java 8 之前,它可以看成是一个完全抽象的类,也就是说它不能有任何的方法实现。从 Java 8 开始,接口也可以有默认的方法实现,使得修改接口的成本也变的很低。

    3.重写与重载

    重写override存在于继承体系中,指子类实现了一个与父类在方法声明上完全相同的一个方法。

    重载overload存在于同一个类中,指一个方法与已经存在的方法名称上相同,但是参数类型、个数、顺序至少有一个不同。注意返回值不同,其它都相同不算是重载。

    4.封装、继承、多态理解?

    封装,就是把对象的属性和行为包装起来,隐藏属性,公开行为。

    继承,是子类和父类之间共享属性和行为的机制。

    多态,是对象的消息处理机制,不同的对象接收到同一个消息可以产生完全不同的结果。

    5.final关键字(”这是无法改变的、终态的“)

    final可以修饰非抽象类、非抽象类成员方法和变量。final不能用于修饰构造方法。

    final类不能被继承,没有子类,final类中的方法默认是final的。

    final方法不能不被子类的方法覆盖(重写),但可以被继承。

    final成员变量表示常量,只能被赋值一次,复制后值不再改变。

    static关键字

    6.Spring的AOP作用是什么?如何实现?

    Spring是一个轻量级的IOC和AOP容器框架,用于简化企业应用程序的开发,开发者只需关心业务需求。常见的配置方式:基于xml的配置、基于注解的配置、基于java的配置。

    AOP-面向切面编程,是对面向对象开发的一种补充。用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,该模块即为“切面”。

    作用:降低模块间的耦合度,使系统容易扩展,减少系统中的重复代码,更好的代码复用。

    AOP通过代理模式实现的。AOP代理主要分为静态代理和动态代理。静态代理的代表为AspectJ(依赖特殊编译器),动态代理以Spring AOP为代表。动态代理主要有两种方式:jdk动态代理和cglib动态代理。区别:jdk动态代理只能对实现了接口的类生成代理,而不能针对类。cglib是针对类实现代理,主要是对指定的类生成一个子类,并覆盖其中的方法,但因采用的是继承,所以不能对final修饰的类进行代理。

    7.IOC作用是什么?如何实现?初始化过程?

    初始化过程:读取XML资源,并解析,最终注册到Bean Factory中。

    https://www.cnblogs.com/wang-meng/p/5597490.html

    作用:解决对象之间耦合度过高的问题,实现对象之间的解耦。

    IOC-控制反转,是指创建对象的控制权转移,对象的创建不用去new了,可以由spring自动生成,使用java的反射机制,根据配置文件在运行时动态的去创建和管理对象,并调用对象的方法。通过引入IOC容器,利用依赖关系注入的方式实现对象之间的解耦。Spring的IOC由三种注入方式:构造器注入、setter注入、注解注入。

    在传统的实现中,由程序内部代码来控制组件之间的关系。我们经常使用new关键字来实现两个组件之间关系的组合,这种实现方式会造成组件之间耦合。IOC很好地解决了该问题,它将实现组件间关系从程序内部提到外部容器,也就是说由容器在运行期将组件间的某种依赖关系动态注入组件中。

    对象A依赖于对象B,当对象 A需要用到对象B的时候,IOC容器就会立即创建一个对象B送给对象A。IOC容器就是一个对象制造工厂,你需要什么,它会给你送去,你直接使用就行了,而再也不用去关心你所用的东西是如何制成的,也不用关心最后是怎么被销毁的,这一切全部由IOC容器包办。

    IOC是通过单例模式和工厂模式实现的。

    8.反射

    反射机制提供的功能:得到一个对象所属的类;获取一个类的所有成员变量和方法;在运行时动态地创建对象;

    在运行时调用对象的方法。

    9.Spring MVC的理解?

    https://github.com/Snailclimb/JavaGuide/blob/master/docs/system-design/framework/SpringMVC%20工作原理详解.md

    Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。

    10.Spring MVC工作原理 / 流程?

    客户端发送请求-> 前端控制器 DispatcherServlet 接受客户端请求 -> 找到处理器映射 HandlerMapping 解析请求对应的 Handler-> HandlerAdapter 会根据 Handler 来调用真正的处理器开处理请求,并处理相应的业务逻辑 -> 处理器返回一个模型视图 ModelAndView -> 视图解析器进行解析 -> 返回一个视图对象->前端控制器 DispatcherServlet 渲染数据(Moder)->将得到视图对象返回给用户


    注解

    https://blog.csdn.net/sha1024/article/details/82791098

    @Component:标注普通的spring Bean类。

    @Repository:标注DAO组件类。

    @Service:标注业务逻辑组件类。

    @Controller:标注控制器组件类。

    @Autowired @Resource 区别?场景?

    https://blog.51cto.com/qiangmzsx/1359952

    相关文章

      网友评论

          本文标题:Java基础与框架

          本文链接:https://www.haomeiwen.com/subject/rqalbqtx.html