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
网友评论