Java面试题2019.4.3
1.操作系统中 heap 和 stack 的区别?
Java 把内存划分成两种:一种是栈内存,另一种是堆内存。
在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量分配的内存空间,该内存空间可以立即被另作它用。 堆内存用来存放由new创建的对象和数组,在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。
在java中主要存在4块内存空间,这些内存的名称及作用如下:
1.栈内存空间:保存所有的对象名称(更准确地说是保存了引用的堆内存空间的地址)
2.堆内存空间:保存每个对象的具体属性内容。
3.全局数据区:保存static类型的属性。
4.全局代码区:保存所有的方法定义。
2.什么是 对象/关系 映射?
对象关系映射,简单讲就是Java对象 Object 和关系型数据库 Relationship 之间的映射Mapping, 即ORM。
为什么要使用ORM?
因为面向对象的概念,使得操作关系型数据库也可以用操作对象那样处理。操作关系型数据库,就像操作Java对象一样,更容易以面向对象的方式理解。
ORM框架:常见的ORM框架有:Hibernate、TopLink、Castor JDO、Apache OJB等
ORM实现原理
其实,要实现JavaBean的属性到数据库表的字段的映射,任何ORM框架不外乎是读某个配置文件把JavaBean的属 性和数据库表的字段自动关联起来,当从数据库Query时,自动把字段的值塞进JavaBean的对应属性里,当做INSERT或UPDATE时,自动把 JavaBean的属性值绑定到SQL语句中。
所谓对象关系映射(Object Relational Mapping,简称ORM)是通过使用描述对象和数据库之间映射的元数据,将面向对象语言程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。
详细一点,是 面向对象编程中的 对象(Object)和关系数据库的 关系(Relation)
的一个映射(Mapping)。产生的原因是因为软件开发已经是面向对象的了。 所有的值,操作都是基于对象的概念。而数据库还是关系数据库。记录的存储还是一条一条的。 为了在逻辑上使得软件开发与存取数据库保持一致(都按照对象的概念进行开发,
存取。)。才出现了这种or-mapping
3.什么是 Java 的反射机制?
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。