JAVA后端笔试试题(一)

      2017年6月7日,天气晴转阴。心情还不错。

      上周六参加了自己的第一场笔试,感觉很糟糕,主要是对基础知识掌握不扎实,现在把笔试中的部分问题总结归纳如下,便于以后查看。

1.GC是什么?为什么要GC?

      GC(GarbageCollection)是垃圾回收机制。在Java中开发人员无法使用指针来自由的管理内存,GC是JVM对内存(实际上就是对象)进行管理的方式。java虚拟机可以自动判断出并收集到垃圾,但一般不会立即释放它们的内存空间,也可以在程序中使用System.gc()来强制垃圾回收,但是要注意的是,系统并不保证会立即进行释放内存。GC使得Java开发人员摆脱了繁琐的内存管理工作,让程序的开发更有效率。

GC基本原理:

      Java的内存管理实际上就是对象的管理,其中包括对象的分配和释。

      对于程序员来说,分配对象使用new关键字;释放对象时,只要将对象所有引用赋值为null,让程序不能够再访问到这个对象,我们称该对象为"不可达的"。GC将负责回收所有"不可达"对象的内存空间。 

      对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的"。当GC确定一些对象为"不可达"时,GC就有责任回收这些内存空间。但是,为了保证 GC能够在不同平台实现,Java对GC的很多行为都没有进行严格的规定。例如,对于采用什么类型的回收算法、什么时候进行回收等重要问题都没有明确的规定。因此,不同的JVM的实现者往往有不同的实现算法,这给Java程序员的开发带来行多不确定性。

2.接口和抽象类的区别?

接口是对动作的抽象,抽象类是对根源的抽象。抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人、女人,这两个类(如果是类的话),他们的抽象类是人。说明:他们都是人。人可以吃东西,狗也可以吃东西,你可以把“吃东西”定义成一个接口,然后让这些类去实现它。所以,在高级语言上,一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),但是可以实现多个接口(吃饭接口、走路接口)。

当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。

(1)抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。

(2)抽象类要被子类继承,接口要被子类实现。

(3)接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现。

(4)接口里定义的变量只能是公共的静态常量,抽象类中的变量是普通变量。

(5)抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个类实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。

(6)抽象方法只能申明,不能实现,接口是设计的结果 ,抽象类是重构的结果。

(7)抽象类里可以没有抽象方法。

(8)如果一个类里有抽象方法,那么这个类只能是抽象类。

(9)抽象方法要被实现,所以不能是静态的,也不能是私有的。

(10)接口可继承接口,并可多继承接口,但类只能单根继承。

(11)抽象类和接口都是用来抽象具体对象的,但是接口的抽象级别最高。

(12)抽象类可以有具体的方法和属性, 接口只能有抽象方法和不可变常量。

(13)抽象类主要用来抽象类别,接口主要用来抽象功能。

(14)抽象类中,如果方法不包含任何实现,派生类必须覆盖它们。接口中所有方法都必须是未实现的。

3.为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里?

Hibernate属于全自动ORM映射工具,使用Hibernate查询关联对象或者关联集合对象时,可以根据对象关系模型直接获取,所以它是全自动的。而Mybatis在查询关联对象或关联集合对象时,需要手动编写sql来完成,所以称之为半自动ORM映射工具。

 

posted @ 2017-06-08 15:01  苏書——小米  阅读(2711)  评论(0编辑  收藏  举报