首页 > 代码库 > (转)Android 50道面试题总结(大家看看吧)

(转)Android 50道面试题总结(大家看看吧)

 

 

1、 方法重载与覆盖的区别?(Overload与Override的区别)
2、 String 和StringBuffer的区别
3、 字符串“abcde”通过写一个函数不让调用第三方的字符串,实现一个字符串倒序,比如字符串“abcde”变成“edcba”.
4、 抽象类与接口的区别(abstract与interface的区别
5、 集合的实现类与区别?
6、 线程有几种状态,分别是哪些?(调用run()和调用start()的区别
7、 线程的实现方式
8、 sleep() 与wait()的区别
9、 线程中wait,join,sleep,yield,notify,notifyall,synchronized,区别及联系
10、 Final、finally、finanlize()的区别
11、 常用设计模式及应用场景,用两种方式实现单例模式,要求线程安全
12、 常用排序算法,时间复杂度,实现思路
13、 android系统架构?
14、 Activity生命周期?保存activity的一些信息在哪个生命周期方法中
15、 Activity的onSaveInstanceState() 和 onRestoreInstanceState()
16、 Android的四大组件是什么?它们的作用是什么?
17、 广播如何调用,有什么方式,各自的区别?
18、 Android中asset文件夹和raw文件夹区别
19、 Android中的五种存储方式及其应用场景
20、 什么是ANR 如何避免它?(Android线程间的通信方式?
21、 Handler的运行机制(运行原理)(Handler,Looper,MessageQueue,Message之间的关系) 8
22、 listview优化策略
23、 ListView分页加载实现思路
24、 ListView图片异步加载实现思路
25、 Intent的原理,作用,可以传递哪些类型的参数
26、 如何实现屏幕分辨率的自适应
27、 简述Android中的IPC机制
28、 Android程序入口如何判断?
29、 android哪几种方式访问网络
30、 说说HttpClient的通信过程
31、 移动互联数据交互格式有哪些及其区别?(Json与xml的区别
32、 XML解析有哪几种?各自优缺点,官方推荐使用哪种?
33、 百度地图核心类,及实现的功能
34、 GC内存泄露在什么情况下回出现?怎么解决
35、 android内存的优化
36、 加载大图片的时候如何防止内存溢出
37、 Android缓存机制
38、 如何实现消息推送,有哪些方式,各自优缺点,最常使用哪种?
39、 MVC在Android中的应用
40、 Android自定义组件实现思路
41、 版本更新的实现思路
42、 播放视频有哪些实现方式
43、 NDK开发流程?(JNI运行原理
44、 如何实现一键退出
45、 AndroidManifest.xml清单文件<Activity>标签中属性android:excludeFromRecents="true"android:screenOrientation="portrait" android:configChanges="orientation|locale"的含义
46、 如何将一个Activity设置成窗口的样式
47、 谈谈UI中,Padding和Margin有什么区别,gravity与layout_gravity的区别
48、 哪个组件可以实现手风琴效果,用来实现设置界面的类,实现抽屉效果,悬浮窗口?
49、 Android SDK 3.0(HoneyComb)及4.0(IceCream)新特性
50、 android客户端如何实现自动登录


 
 
1、方法重载与覆盖的区别?( OverloadOverride的区别)
方法的重载属于编译时多态,方法名相同参数列表不同,返回值必须相同或都没有返回值类型。方法的覆盖属于运行时多态,子类覆盖父类的方法,子类指向父类引用,在调用方法的时候用父类的引用调用。
2、StringStringBuffer的区别
答: STRING的长度是不可变的,STRINGBUFFER的长度是可变的。如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法。
StringBuder是不安全的 StringBuffer 是安全的
3、字符串“abcde”通过写一个函数不让调用第三方的字符串,实现一个字符串倒序,比如字符串“abcde”变成“edcba
答: String   src   =  "ABCDEF ";
String   dst   =  new  StringBuffer(src).reverse().toString();
4、抽象类与接口的区别(abstractinterface的区别)
答:abstract可以修饰抽象方法,而一个类只要有一个抽象方法,就必须用abstract定义该类,即抽象类。
用interface修饰的类,里面的方法都是抽象方法,因此在定义接口的时候,可以直接不加那些修饰,系统会默认的添上去。接口里面的字段都是公有常量,即public static final修饰的字段。
5、集合的实现类与区别?
:Collection接口,集合结构总的父接口,有两个子接口listset
   List接口元素有序可重复.
   实现类有:ArrayList 数组实现轻量级,运行快,线程不安全。JDK1.2 查询快
            Vector   数组实现重量级,运行慢,线程安全。JDK1.0
            LinkedList链表实现 常用语堆栈与队列的实现增删操作快
Set 接口 元素无序不可重复
实现类有:HashSet,底层用hashCode()算法实现,保证元素的无序唯一,自定义对象存进HashSet为了保证元素内容不重复需要覆盖hashCode()equals()方法。
          SortedSet(不重要元素有序(Unicode升序)唯一
  TreeSet要求元素有序,自定义的对象需要实现Comparable接口的 compareToobject o)方法
Map(接口): Collection接口无关,有一个子接口SortedMap特点元素是key-value, key
唯一,无序; value可重复
  实现类: HashMap 轻量级线程不安全的,允许keyvaluenull JDK1.2
        HashTable 重量级线程安全的 不允许keyvaluenull   JDK1.0
           PropertiesHashTable的子类,主键和值都是字符串
  SortedMap:(不重要)
  特点: key唯一,有序(Unicode升序)
  实现类:TreeMap
6、线程有几种状态,分别是哪些?(调用run()和调用start()的区别)
答:1)、新建状态(New):新创建了一个线程对象。
  2)、就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。
  3)、运行状态(Running):就绪状态的线程获取了CPU,执行run()方法。
  4)、阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。阻塞的情况分三种:
  (一)、等待阻塞:运行的线程执行wait()方法,JVM会把该线程放入等待池中。
  (二)、同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池中。
  (三)、其他阻塞:运行的线程执行sleep()或join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。
5)、死亡状态(Dead):线程执行完了或者因异常退出了run()方法,该线程结束生命周期。
当调用start方法的时候,该线程就进入就绪状态。等待CPU进行调度执行,此时还没有真正执行线程。
当调用run方法的时候,是已经被CPU进行调度,执行线程的主要任务。
7、线程的实现方式
答:线程的实现有两种方式,一是继承Thread类,二是实现Runnable接口
8、sleep() wait()的区别
答:1.这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object
         类。
         2.最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可
         以使用同步控制块或者方法。sleep不出让系统资源;wait是进入线程等待池
         等待,出让系统资源,其他线程可以占用CPU。一般wait不会加时间限制,
         因为如果wait线程的运行资源不够,再出来也没用,要等待其他线程调用
         notify/notifyAll唤醒等待池中的所有线程,才会进入就绪队列等待OS分配系
         统资源。sleep(milliseconds)可以用时间指定使它自动唤醒过来,如果时间不到
         只能调用interrupt()强行打断。
3.waitnotifynotifyAll只能在同步控制方法或者同步控制块里面使用,而
sleep可以在任何地方使用
4. Sleep需要捕获异常,wait不需要
9、线程中waitjoinsleepyield, notifynotifyallsynchronized,区别及联系
答:1).sleep()方法
在指定时间内让当前正在执行的线程暂停执行,但不会释放锁标志。不推荐使用。sleep()使当前线程进入阻塞状态,在指定时间内不会执行。
2).wait()方法
在其他线程调用对象的notifynotifyAll方法前,导致当前线程等待。线程会释放掉它所占有的锁标志,从而使别的线程有机会抢占该锁。
唤醒当前对象锁的等待线程使用notifynotifyAll方法,waite() notify()必须在synchronized函数或synchronized block中进行调用。
  • yield方法暂停当前正在执行的线程对象。yield()只是使当前线程重新回到可执行状态,所以执行
  • 3)yield()的线程有可能在进入到可执行状态后马上又被执行。yield()只能使同优先级或更高优先级的线程有执行的机会。
    4).join方法
    等待该线程终止。等待调用join方法的线程结束,再继续执行。如:t.join();//主要用于等待t线程运行结束,若无此句,main则会执行完毕,导致结果不可预测。
    Final、finally、finanlize()的区别
    答:final?用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不
    可继承。
    finally是异常处理语句结构的一部分,表示总是执行。
    finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。
     
Loader: 装载器从android3.0开始引进。它使得在activityfragment中异步加载数据变得简单
50、android客户端如何实现自动登录
通过SharedPreferences存储用户名,密码,当存储不为空时实现自动登录功能