Java面经

1.Spring介绍

Spring是一个轻量级反入侵式的控制反转(IOC)和面向切面编程(AOP)的容器框架(开源)。
Spring是轻量级、非入侵式的框架。
轻量级指的是Spring中提供的服务是用户可以定制的,Jar包小,运行占用资源少。
非入侵式指的是引入Spring框架不会对原有项目造成影响。
方便解耦、简化开发:通过Spring的IOC容器,使对象的依赖关系(对象的创建权)交给Spring控制,避免硬编码带来的过度耦合。
Spring就是把每个bean(实体类)与bean的关系全部交给第三方容器进行管理。

2.IOC控制反转

IoC (Inversion of control )控制反转/反转控制。它是一种思想不是一个技术实现。描述的是:Java 开发领域对象的创建以及管理的问题。
例如:现有类 A 依赖于类 B
传统的开发方式 :往往是在类 A 中手动通过 new 关键字来 new 一个 B 的对象出来
使用 IoC 思想的开发方式 :不通过 new 关键字来创建对象,而是通过 IoC 容器(Spring 框架) 来帮助我们实例化对象。我们需要哪个对象,直接从 IoC 容器里面过去即可。
从以上两种开发方式的对比来看:我们丧失了创建、管理对象的权力,从而也得到了一个不用再考虑对象的创建、管理等一系列的事情的好处。

控制 :指的是对象创建(实例化、管理)的权力
反转 :控制权交给外部环境(Spring 框架、IoC 容器)

IoC 的思想就是两方之间不互相依赖,由第三方容器来管理相关资源。这样做的好处:对象之间的耦合度或者说依赖程度降低;资源变的容易管理;比如用 Spring 容器很容易就可以实现一个单例。

3.AOP面向切面编程

AOP:Aspect oriented programming 面向切面编程,AOP 是 OOP(面向对象编程)的一种延续。
通过 OOP 思想中的继承,我们可以提取出一个的父类,然后将各种方法放入父类中,子类通过继承即可自动获得这些方法方法。这样将会少些很多重复的代码。
OOP 编程思想可以解决大部分的代码重复问题。但是有一些问题是处理不了的。比如在父类中的多个方法的相同位置出现了重复的代码。这部分重复的代码,一般统称为横切逻辑代码。
横切逻辑代码存在的问题:代码重复问题;横切逻辑代码和业务代码混杂在一起,代码臃肿,不便维护。

AOP提出横向抽取机制,将横切逻辑代码和业务逻辑代码分离。

AOP 主要用来解决:在不改变原有业务逻辑的情况下,增强横切逻辑代码,根本上解耦合,避免横切逻辑代码重复。

切 :指的是横切逻辑,原有业务逻辑代码不动,只能操作横切逻辑代码,所以面向横切逻辑。

面 :横切逻辑代码往往要影响的是很多个方法,每个方法如同一个点,多个点构成一个面。

4.GC垃圾回收

为什么需要垃圾回收?

如果不进行垃圾回收,内存迟早都会被消耗空,因为我们在不断的分配内存空间而不进行回收。除非内存无限大,我们可以任性的分配而不回收,但是事实并非如此。所以,垃圾回收是必须的。

垃圾回收(Garbage Collection,GC),顾名思义就是释放垃圾占用的空间,防止内存泄露。有效的使用可以使用的内存,对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收。

Java虚拟机如何实现垃圾回收机制:
1.引用计数算法(Reference Counting)

给对象添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不可能再被使用的,这就是引用计数算法的核心。客观来讲,引用计数算法实现简单,判定效率也很高,在大部分情况下都是一个不错的算法。但是Java虚拟机并没有采用这个算法来判断何种对象为死亡对象,因为它很难解决对象之间相互循环引用的问题。

2.可达性分析法

这个算法的基本思想是通过一系列称为“GC Roots”的对象作为起始点,从这些节点向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链(即GC Roots到对象不可达)时,则证明此对象是不可用的。

那么问题又来了,如何选取GCRoots对象呢?在Java语言中,可以作为GCRoots的对象包括下面几种:

(1)虚拟机栈(栈帧中的局部变量区,也叫做局部变量表)中引用的对象。

(2)方法区中的类静态属性引用的对象。

(3)方法区中常量引用的对象。

(4)本地方法栈中JNI(Native方法)引用的对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值