Android面试

1.说一下arrayList和linkedList的区别。一脸懵逼,虽然在看数据结构。

总体来说,Vector和ArrayList是一致的,实现的接口也是完全一样,内部的存储结构也基本一致【都是数组】,每个方法的实现也几乎相同。

区别在于,Vector是线程安全的,每个方法都加了synchronized修饰符,而ArrayList没有。

而且Vector是JDK1.0引入的,而ArrayList是JDK1.2引入的。


再来说ArrayList和LinkedList的区别,上面说过ArrayList内部是数组实现的,LinkedList内部是链表实现的。

因此,当遇到读取比较多,插入、删除比较少的时候,推荐使用ArrayList,毕竟数组读取速度飞快,插入删除速度需要移动大量元素;而当遇到插入删除比较多的时候,推荐使用LinkedList。


在Java集合工具类Collections中,提供了一个Collections.synchronizedList方法,可以传入一个List对象,返回出一个SynchronizedList。SynchronizedList只是提供了一个对List对象的封装,对List的每个操作都添加了synchronized修饰,基本上与Vector一致,只是用法不同而已。比如现在已经有个LinkedList,如果想要一个线程安全的List,只需执行Collections.synchronized(linkedList)即可,没有任何的元素拷贝操作,此时,如果用Vector实现,则必须遍历LinkedList,将其中的每一个元素拷贝到Vector中。

2.那hashMap和linkedHashMap的区别呢。

HashMap是一个最常用的Map,它根据键的hashCode值存储数据,根据键可以直接获取它的值,有很快的访问速度。HashMap最多只允许一条记录的键为null,允许多条记录的值为null。HashMap不支持线程同步,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致性。如果需要同步,可以用Collections的synchronizedMap方法使HashMap具有同步的能力。

Hashtable与HashMap类似,不同的是:它不允许记录的键或者值为空;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtable在写入时会比较慢。

LinkedHashMap保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的。

在遍历的时候会比HashMap慢TreeMap能够把它保存的记录根据键排序,默认是按升序排序,也可以指定排序的比较器。当用Iterator遍历TreeMap时,得到的记录是排过序的。

3.设计模式,你常用的有哪些,场景。setOnclickListener算是那种模式。

单例模式,工厂模式,观察者模式;setOnclickListener算是观察者模式

4.布局的优化。

4.加载图片的优化。

5.架构设计。

6.网络请求框架。

7.activity四种启动模式。

8.MVP模式的优化。

9.自定义view,内切圆还是外切圆。

10.handler机制。

11.观察者模式。

12.scrollview嵌套listview为什么listview就显示一行,怎么解决滑动冲突。

你可能感兴趣的:(Android面试)