2017年6月7日,天气晴转阴。心情还不错。java
上周六参加了本身的第一场笔试,感受很糟糕,主要是对基础知识掌握不扎实,如今把笔试中的部分问题总结概括以下,便于之后查看。程序员
1.GC是什么?为何要GC?算法
GC(GarbageCollection)是垃圾回收机制。在Java中开发人员没法使用指针来自由的管理内存,GC是JVM对内存(实际上就是对象)进行管理的方式。java虚拟机能够自动判断出并收集到垃圾,但通常不会当即释放它们的内存空间,也能够在程序中使用System.gc()来强制垃圾回收,可是要注意的是,系统并不保证会当即进行释放内存。GC使得Java开发人员摆脱了繁琐的内存管理工做,让程序的开发更有效率。sql
GC基本原理:工具
Java的内存管理实际上就是对象的管理,其中包括对象的分配和释。spa
对于程序员来讲,分配对象使用new关键字;释放对象时,只要将对象全部引用赋值为null,让程序不可以再访问到这个对象,咱们称该对象为"不可达的"。GC将负责回收全部"不可达"对象的内存空间。 .net
对于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映射工具。