程序员人生 网站导航

JAVA(基础篇)android的面试题(三)

栏目:综合技术时间:2015-03-18 09:50:01

1.Collection 和 Collections 的区分。

Collection 是集合类的上级接口,继承于他的接口主要有 Set 和 List.
Collections 
是针对集合类的1个帮助类,他提供1系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。 

2.HashMap 和 Hashtable 的区分。 

HashMap 是 Hashtable 的轻量级实现(非线程安全的实现),他们都完成了 Map 接口,HashMap是非线程安全,效力上可能高于 Hashtable在多个线程访问 Hashtable 时,不需要自己为它的方法实现同步,而 HashMap 就必须为之提供外同步。

HashMap 允许将 null 作为1个 entry 的 key 或 value,而 Hashtable 不允许。

HashMap 把 Hashtable 的 contains 方法去掉了,改成 containsvalue 和 containsKey。由于 contains 方法容易让人引发误解。Hashtable 继承自 Dictionary 类,而 HashMap 是 Java1.2 引进的 Map interface 的1个实现。


Hashtable 和 HashMap 采取的 hash/rehash 算法都大概1样,所以性能不会有很大的差异。


3.sleep() 和 wait() 有甚么区分

sleep 是线程类(Thread)的方法,致使此线程暂停履行指定时间,给履行机会给其他线程,但是监控状态仍然保持,到时后会自动恢复。调用 sleep 不会释放对象锁。
wait 是 Object 类的方法,对此对象调用 wait 方法致使本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出 notify 方法(或 notifyAll)后本线程才进入对象锁定池准备取得对象锁进入运行状态。 


4.short s1 = 1; s1 = s1 + 1;有甚么错? short s1 = 1; s1 += 1;有甚么错?

short s1 = 1; s1 = s1 + 1; (s1+1 运算结果是 int 型,需要强迫转换类型)short s1 = 1; s1 += 1;(可以正确编译)


5.Math.round(11.5)等於多少? Math.round(⑴1.5)等於多少?

Math.round(11.5)==12
Math.round(⑴1.5)==⑴1
round 
方法返回与参数最接近的长整数,参数加 1/2 后求其 floor. 


1. ArrayList,Vector, LinkedList 的存储性能和特性

ArrayList 和 Vector 都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按 序号索引元素,但是插入元素要触及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector 由于使用了 synchroni zed 方法(线程安全),通常性能上较 ArrayList 差,而 LinkedList 使用双向链表实现存储,按序号索引数据需要进行前向或后 向遍历,但是插入数据时只需要记录本项的前后项便可,所以插入速度较快。 

2.Collection 和 Collections 的区分

Collection 是集合类的上级接口,继承与他的接口主要有 Set 和 List. Collections 是针对集合类的1个帮助类,他提供1系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

3.HashMap 和 Hashtable 的区分

HashMap 是 Hashtable 的轻量级实现(非线程安全的实现),他们都完成了 Map 接口,主要区分在于 HashMap 允许空(null)键值(key),由于非线程安全,效力上可能高于 Hashtable。 HashMap 允许将 null 作为1个 entry 的 key 或 value,而 Hashtable 不允许。 
HashMap 把 Hashtable 的 contains 方法去掉了,改成 containsvalue 和 containsKey。由于 contains 方法容易让人引发误解。 Hashtable 继承自 Dictionary 类,而 HashMap 是 Java1.2 引进的 Map interface 的1个实现。 最大的不同是,Hashtable 的方法是 Synchronize 的,而 HashMap 不是,在多个线程访问 Hashtable 时,不需要自己为它的 方法实现同步,而 HashMap 就必须为之提供外同步。
Hashtable 和 HashMap 采取的 hash/rehash 算法都大概1样,所以性能不会有很大的差异。 

4.sleep() 和 wait() 有甚么区分

sleep 是线程类(Thread)的方法,致使此线程暂停履行指定时间,给履行机会给其他线程,但是监控状态仍然保持,到时 后会自动恢复。调用 sleep 不会释放对象锁。 
wait 是 Object 类的方法,对此对象调用 wait 方法致使本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发 出 notify 方法(或 notifyAll)后本线程才进入对象锁定池准备取得对象锁进入运行状态。 

5.Overload 和 Override 的区分

Overloaded 的方法是不是可以改变返回值的类型? 方法的重写 Overriding 和重载 Overloading 是 Java 多态性的不同表现。重写 Overriding 是父类与子类之间多态性的1种表现,重载 Overloading 是1个类中多态性的1种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义犹如被"屏蔽"了。如果在1个类 中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded 的 方法是可以改变返回值的类型。 

6.同步和异步有何异同,在甚么情况下分别使用他们?

如果数据将在线程间同享。例如正在写的数据以后可能被另外一个线程读到,或正在读的数据可能已被另外一个线程写过了, 那末这些数据就是同享数据,必须进行同步存取。 当利用程序在对象上调用了1个需要花费很长时间来履行的方法,并且不希望让程序等待方法的返回时,就应当使用异步编程, 在很多情况下采取异步途径常常更有效力。

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐