14.nosql 和关系型数据库的区别?
nosql的优点:
查询速度:nosql数据库将数据存储于缓存之中,关系型数据库将数据存储在硬盘中,自然查询速度远不及nosql数据库。
存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,所以可以存储基础类型以及对象或者是集合等各种格式,而数据库则只支持基础类型。
扩展性:关系型数据库有类似join这样的多表查询机制的限制导致扩展很艰难
nosql缺点:
不提供对sql的支持,如果不支持sql这样的工业标准,将产生一定用户的学习和使用成本。
不提供关系型数据库对事物的处理。
非关系型数据库的优势:
1. 性能NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过 SQL层的解析,所以性能非常高。
2. 可扩展性同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。
关系型数据库的优势:
1. 复杂查询可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询。
2. 事务支持使得对于安全性能很高的数据访问要求得以实现。对于这两类数据库,对方的优势就是自己的弱势,反之亦然。
读写集中在一个数据库上让数据库不堪重负,大部分网站已使用主从复制技术实现读写分离,以提高读写性能和读库的可扩展性。
15.==和equals区别?
“==”:
==是判断的意思,对于局部变量的基本类型存储在栈之中,比较的是值,只要值相等,(byte,short,int,long,float,double,char,boolean)就返回True
引用类型来说,它比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。
“equals”:
对于equals方法,注意:equals方法不能作用于基本数据类型的变量,如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。
16.Hashcode和equals的区别?
hashCode()方法和equal()方法的作用其实一样,在Java里都是用来对比两个对象是否相等一致,那么equal()既然已经能实现对比的功能了,为什么还要hashCode()呢?因为重写的equal()里一般比较的比较全面比较复杂,这样效率就比较低,而利用hashCode()进行对比,则只要生成一个hash值进行比较就可以了,效率很高,那么hashCode()既然效率这么高为什么还要equal()呢?因为hashCode()并不是完全可靠,有时候不同的对象他们生成的hashcode也会一样(生成hash值得公式可能存在的问题),所以hashCode()只能说是大部分时候可靠,并不是绝对可靠,所以我们可以得出:
1.equal()相等的两个对象他们的hashCode()肯定相等,也就是用equal()对比是绝对可靠的。
2.hashCode()相等的两个对象他们的equal()不一定相等,也就是hashCode()不是绝对可靠的。
17.Java中深克隆和浅克隆的区别?怎么实现?
浅克隆(Shadow Clone):
把原型对象中成员变量为引用类型的引用地址也复制给克隆对象, 即原型对象汇总如果有成员变量为引用对象,则此引用对象的地址是共享给原型对象的和克隆对象的
深克隆(Deep Clone):
将原型对象中的所有类型,无论是值类型还是引用类型,都复制一份给克隆对象, 即 深克隆会把原型对象和原型对象所引用的对象,都复制一份给克隆对象
实现深克隆的几种方式:
1.所有对象都实现克隆方法;
2.通过构造方法实现深克隆;
3.使用JDK自带的字节流实现深克隆;
4.使用第三方工具实现深克隆,比如ApacheCommonsLang;
5.使用JSON工具类实现;



