您的位置:首页 > 编程语言 > Java开发

Java基础知识(一)

2015-10-25 12:00 423 查看
1.ArrayList和LinkList、Vector有什么区别,性能、安全性、扩容

ArrayList 和Vector 是一个可改变大小的数组,LinkedList 是一个双链表。

所以当更多的元素加入到ArrayList和Vector中时,其大小将会动态地增长,Vector每次请求其大小的双倍空间,而ArrayList每次对size增长50%。

而LinkedList由于其数据结构是双链表,所以,在添加和删除元素时具有比ArrayList更好的性能.但是在get与set方面弱于ArrayList和Vector。

安全性方面,只有Vector是线程安全的。

2.线程池和连接池是什么,线程池可以做什么,连接池可以做什么,你用过什么连接池

线程池类似于操作系统中的缓冲区的概念,它的流程如下:先启动若干数量的线程,并让这些线程都处于睡眠状态,

当客户端有一个新请求时,就会唤醒线程池中的某一个睡眠线程,让它来处理客户端的这个请求,当处理完这个请求后,线程又处于睡眠状态。

连接池,和线程池类似,数据库连接池的解决方案是在应用程序启动时建立足够的数据库连接,

并将这些连接组成一个连接池(其实就是在一个“池”里放了好多半成品的数据库联接对象,

由应用程序动态地对池中的连接进行申请、使用和释放。对于多于连接池中连接数的并发请求,应该在请求队列中排队等待。

并且应用程序可以根据池中连接的使用率,动态增加或减少池中的连接数。

作用是不用频繁地创建销毁线程、打开和关闭数据库链接来减少资源的浪费。

3.什么是线程可见性,线程之间如何保证共享变量的一致性

可见性就是当有一份数据在A,B线程之间共享那么在A线程中改变了B会马上知道。

当一个域声明为volatile类型后,它确保对一个变量的更新以可预见的方式告知其他的线程。

volatile变量不会缓存在寄存器或者缓存在在对其他处理器隐藏的地方。

所以,读取一个volitile类型的时,总会返回由某一线程所写入的最新值。

volatile只能保证可见性,而加锁可以保证可见性和原子性。

保证共享变量的一致性可以采用的方法是:

①将整个类加锁 (代码为synchronized(this));

②定义一个object,访问某些相关变量是,对该对象加锁(代码为synchronized(lockobj))。

4.String、StringBuffer、StringBuild的区别

String、StringBuffer、StringBuild的区别:

对String对象的任何改变都不影响到原对象,相关的任何change操作都会生成新的对象。

对代码段

for(int i=0;i<10000;i++){

string += "hello";

}

来说,每次循环会new出一个StringBuilder对象,然后进行append操作,最后通过toString方法返回String对象。

一般来说,String、StringBuilder、StringBuffer三者的执行效率:

StringBuilder > StringBuffer > String

StringBuilder和StringBuffer类拥有的成员属性以及成员方法基本相同,区别是StringBuffer类的成员方法前面多了一个关键字:synchronized,

这个关键字是在多线程访问时起到安全保护作用的,也就是说StringBuffer是线程安全的。

当字符串相加操作较多的情况下,建议使用StringBuilder,如果采用了多线程,则使用StringBuffer。

5.LinkHashMap和HashMap、HashTable的区别

①HashMap是一个最常用的Map,它根据键的hashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。

HashMap最多只允许一条记录的键为null,不允许多条记录的值为null。

HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致。

如果需要同步,可以用Collections.synchronizedMap(HashMap map)方法使HashMap具有同步的能力。

②Hashtable与HashMap类似,不同的是Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。

HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。

它不允许记录的键或者值为空;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,然而,这也导致了Hashtable在写入时会比较慢。

③LinkedHashMap保存了记录的插入顺序,在用Iteraor遍历LinkedHashMap时,先得到的记录肯定是先插入的。在遍历的时候会比HashMap慢。有HashMap的全部特性。

④TreeMap能够把它保存的记录根据键排序,默认是按升序排序,也可以指定排序的比较器。当用Iteraor遍历TreeMap时,得到的记录是排过序的。TreeMap的键和值都不能为空。

6.Spring mvc由几大组件组成

①前端控制器(DispatcherServlet)

②控制器组件(Controller)

③处理器映射器组件(HandlerMapping)

④处理器适配器组件(HandlerAdapter)

⑤拦截器组件(HandlerInterceptor)

⑥视图解析器组件(ViewResolver)

⑦视图组件(View)

7.Restful风格的由来

Representational State Transfer,简称REST)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。

REST 从资源的角度来观察整个网络,分布在各处的资源由URI确定,而客户端的应用通过URI来获取资源的表徵。

获得这些表徵致使这些应用程序转变了其状态。随着不断获取资源的表徵,客户端应用不断地在转变着其状态,所谓表徵狀態轉移(Representational State Transfer)。

需要注意的是,REST是设计风格而不是标准。REST通常基于使用HTTP,URI,和XML以及HTML这些现有的广泛流行的协议和标准。

资源是由URI来指定。

对资源的操作包括获取、创建、修改和删除资源,这些操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法。

通过操作资源的表现形式来操作资源。

资源的表现形式则是XML或者HTML,取决于读者是机器还是人,是消费web服务的客户软件还是web浏览器。当然也可以是任何其他的格式。

8.线程并发包

java.util.concurrent 包含许多线程安全、高性能的并发构建块。换句话说,创建 java.util.concurrent 的目的就是要实现 Collection 框架对数据结构所执行的并发操作。

9.Memcached和Redis区别,客户端都是什么,如何用Redis做NoSQL

在Redis中,并不是所有的数据都一直存储在内存中的。这是和Memcached相比一个最大的区别。

Redis只会缓存所有的 key的信息,如果Redis发现内存的使用量超过了某一个阀值,将触发swap的操作,

Redis根据“swappability = age*log(size_in_memory)”计 算出哪些key对应的value需要swap到磁盘。

然后再将这些key对应的value持久化到磁盘中,同时在内存中清除。

这种特性使得Redis可以 保持超过其机器本身内存大小的数据。

当然,机器本身的内存必须要能够保持所有的key,毕竟这些数据是不会进行swap操作的。

同时由于Redis将内存 中的数据swap到磁盘中的时候,提供服务的主线程和进行swap操作的子线程会共享这部分内存,

所以如果更新需要swap的数据,Redis将阻塞这个 操作,直到子线程完成swap操作后才可以进行修改。

Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。

Redis支持数据的备份,即master-slave模式的数据备份。

Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。

10.Oracle的分页查询语句是什么

SELECT * FROM

(

SELECT A.*, ROWNUM RN

FROM (SELECT * FROM (此处添加你要分页的表)) A

WHERE ROWNUM <= 14000

)

WHERE RN >= 1

数字代表你显示的行数。

11.Mysql的分页语句是什么?

SELECT * FROM 表名称 LIMIT M,N

12.数据库三范式是为了解决什么问题的,为什么后来又推出了NoSQL非关系数据库,和关系型数据库有什么区别,有什么优点

第一范式:确保每列的原子性.

如果每列(或者每个属性)都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式.

例如:顾客表(姓名、编号、地址、……)其中"地址"列还可以细分为国家、省、市、区等。

第二范式:在第一范式的基础上更进一层,目标是确保表中的每列都和主键相关.

如果一个关系满足第一范式,并且除了主键以外的其它列,都依赖于该主键,则满足第二范式.

例如:订单表(订单编号、产品编号、定购日期、价格、……),"订单编号"为主键,"产品编号"和主键列没有直接的关系,即"产品编号"列不依赖于主键列,应删除该列。

第三范式:在第二范式的基础上更进一层,目标是确保每列都和主键列直接相关,而不是间接相关.

如果一个关系满足第二范式,并且除了主键以外的其它列都不依赖于主键列,则满足第三范式.

为了理解第三范式,需要根据Armstrong公里之一定义传递依赖。假设A、B和C是关系R的三个属性,如果A-〉B且B-〉C,

则从这些函数依赖中,可以得出A-〉C,如上所述,依赖A-〉C是传递依赖。

例如:订单表(订单编号,定购日期,顾客编号,顾客姓名,……),初看该表没有问题,满足第二范式,

每列都和主键列"订单编号"相关,再细看你会发现"顾客姓名"和"顾客编号"相关,"顾客编号"和"订单编号"又相关,最后经过传递依赖,

"顾客姓名"也和"订单编号"相关。为了满足第三范式,应去掉"顾客姓名"列,放入客户表中。

NoSQL数据库易于数据的分散

各个数据之间存在关联是关系型数据库得名的主要原因,为了进行join处理,关系型数据库不得不把数据存储在同一个服务器内,这不利于数据的分散,

这也是关系型数据库并不擅长大数据量的写入处理的原因。

相反NoSQL数据库原本就不支持Join处理,各个数据都是独立设计的,很容易把数据分散在多个服务器上,故减少了每个服务器上的数据量,

即使要处理大量数据的写入,也变得更加容易,数据的读入操作当然也同样容易。

NoSQL数据库优点:

1)成本:nosql数据库简单易部署,基本都是开源软件,不需要像使用oracle那样花费大量成本购买使用,相比关系型数据库价格便宜

2)查询速度:nosql数据库将数据存储于缓存之中,关系型数据库将数据存储在硬盘中,自然查询速度远不及nosql数据库

3)存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,所以可以存储基础类型以及对象或者是集合等各种格式,而数据库则只支持基础类型

4)扩展性:关系型数据库有类似join这样的多表查询机制的限制导致扩展很艰难

缺点

1)维护的工具和资料有限,因为nosql是属于新的技术,不能和关系型数据库10几年的技术同日而语。

2)不提供对sql的支持,如果不支持sql这样的工业标准,将产生一定用户的学习和使用成本

3)不提供关系型数据库对事物的处理

13.集合类的底层数据结构是什么样的

ArrayList维护着一个对象数组。

LinkedList的实现是一个双向链表。

HashMap的结构是一个散列桶。

LinkedHashMap是HashMap的子类,增加一个双向链表,用来存储每个新加入的节点。在遍历时,按链表的顺序进行。差不多是上面HashMap和LinkedList的和。

HashSet使用HashMap来保持元素。Key = 元素,value是一个公有的对象,对每个元素都一样,在HashMap里面key是惟一的,当然很适合于构造set集合。等同于用HashMap包装了次,显示Set自己的特性。

14.冒泡算法思想是什么,快速排序的思想是什么,时间复杂度和空间复杂度是什么

冒泡算法思想:比较相邻的元素大小,将小的前移,大的后移,就像水中的气泡一样,最小的元素经过几次移动,会最终浮到水面上。

时间复杂度 O(n^2),空间复杂度 O(n2)

快速排序思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,

然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

时间复杂度 最理想 O(nlogn) 最差时间O(n^2) 空间复杂度 O(Nlogn)

15.数据库schema是干什么的

数据库Schema有两种含义,一种是概念上的Schema,指的是一组DDL语句集,该语句集完整地描述了数据库的结构。

还有一种是物理上的 Schema,指的是数据库中的一个名字空间,它包含一组表、视图和存储过程等命名对象。物理Schema可以通过标准SQL语句来创建、更新和修改。

例 如以下SQL语句创建了两个物理Schema:

create schema SCHEMA_A;

create table SCHEMA_A.CUSTOMERS(ID int not null,……);

create schema SCHEMA_B;

create table SCHEMA_B.CUSTOMERS(ID int not null,……);

简单的说:就是一个数据库用户所拥有的数据库的对象。

比如scott用户建立了表,索引,视图,存储过程等对象,那么这些对象就构成了schema scott。

参考资料:

/article/2584899.html

/article/2631477.html

http://blog.sina.com.cn/s/blog_4905fa450100ve29.html

http://www.open-open.com/lib/view/open1350440858024.html

/article/10493610.html

http://blog.sina.com.cn/s/blog_667ac0360102ed6h.html

/content/5921868.html

http://www.tuicool.com/articles/26Vj6z

http://blog.sina.com.cn/s/blog_6f2274fb0100xg8z.html

http://blog.csdn.net/tonysz126/article/details/8280696/

http://xsb.itpub.net/16566331/viewspace-671694/

/article/5785558.html

/article/3860995.html

http://www.360doc.com/content/12/0424/11/3303212_206103980.shtml
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: