Android知识点汇总以及常见面试题

Android知识点汇总以及常见面试题

        • 1. 链表和数组的区别
        • 2. List Hash 数组的区别
        • 3. 用过哪些三方SDK
        • 4. Android四大组件
        • 5. 堆和栈的区别
        • 6. Activity和Fragment的区别
        • 7. 常用ADB命令
        • 8. String,StringBuilder,StringBuffer的区别
        • 9. 线程和线程池的区别
        • 10. Android工程目录结构
        • 11. build.gradle文件
        • 12. Activity生命周期
        • 13. 重载
        • 14. 重写
        • 15. 常见异常

以下内容都是自己的知识点总结以及面试时遇到的一些问题,在这里做个总结,如果有发现错误的地方还请指正,谢谢。

1. 链表和数组的区别

  • 查询效率:数组查询效率较高(因为可通过下标查询),链表查询效率较低。所以查询较多的情况下使用数组。
  • 增删效率:数组增删效率较低(因为需要移动增加或删除位置后面所有的数据),链表增删效率较高。所以增删操作频繁的情况下使用链表。
  • 内存空间:数组的内存空间连续,固定。链表动态分配。
  • 扩展性:数组扩展性差,链表扩展性强。因为数组创建完成时,就固定了内存大小,当内存满了的时候就无法扩展,只能重新创建。而链表是添加一个数据,分配一点内容空间。
  • 随机读取率:数组随机读取率高,链表随机读取率低。因为数组的内存空间是连续的,而链表是散乱的。
  • 位置:数组元素在栈区,链表元素在堆区

2. List Hash 数组的区别

  • 存储对象:list只能存储对象,数组能存储基本数据类型和对象,hash存储键值对。
    注意:
//这种情况不会报错,看上去是添加的基本数据类型,但是添加的时候自动转换成了包装类型。
ArrayList array = new ArrayList();
array.add(100);
  • 存储顺序:List中存储的数据有序,是按照添加数据的顺序存储的。数组有序。hash没有顺序,输出的数据顺序不是存入的顺序。
  • 数据是否可重复:List中的数据可重复,数组中的数据可重复,hash中的数据不可重复,因为在HashMap中是通过键值对来存取的数据,当key重复的时候,会将原来的value替换新的value。
  • 获取元素个数:List通过size()方法,数组通过length属性,HashMap通过size()方法。

3. 用过哪些三方SDK

  • Bmob:后端云。
  • 和风天气:天气接口。
  • 聚合数据:各种数据接口。
  • Face++:人脸识别相关技术。
  • 虹软:人脸识别相关技术。

4. Android四大组件

  • Activity
  • Service
  • Broadcast Receiver
  • Content Provider

5. 堆和栈的区别

  • 用途:堆内存用于存放new创建的对象或数组,栈内存用于存放方法或局部变量。
  • 顺序:堆先进先出,后进后出。栈先进后出,后进先出。

6. Activity和Fragment的区别

  • Fragment是Android3.0+之后才出现的。
  • Activity可以有多个Fragment,而Fragment只能依附于一个Activity。
  • Fragment更加灵活更加轻量。

7. 常用ADB命令

Android开发常用ADB命令集合

8. String,StringBuilder,StringBuffer的区别

  • 运行速度:StringBuilder > StringBuffer > String。String为字符串常亮,而StringBuilder和StringBuffer为字符串变量。即String变量一旦创建后不可更改,而StringBuilder和StringBuffer可更改。
  • 线程安全:StringBuffer线程安全,StringBuilder线程不安全。
    String为final修饰的类,不可继承。
  • 使用情景:字符串不经常变化的情况使用String,在单线程有大量字符串操作的情况下使用StringBuilder,在多线程有大量字符串操作的情况下用StringBuffer。

9. 线程和线程池的区别

  • 线程Thread每次new对象的时候,性能差。而线程池重用存在的线程,减少对象的创建、消亡的开销,性能高。
  • 新建线程缺乏统一管理,可能会出现无限创建线程的情况,相互竞争,最后占用系统资源造成死机或者OOM。而线程池可有效控制最大并发数线程,提高系统资源利用率,避免过多的资源竞争造成系统堵塞。
  • 线程缺乏某些功能,比如定时执行,定期执行,中断线程等。而线程池就提供了这些功能。

10. Android工程目录结构

Android项目目录结构中各个文件夹的作用

11. build.gradle文件

Android build.gradle文件详解

12. Activity生命周期

Android知识点汇总以及常见面试题_第1张图片
参考google官方文档

13. 重载

  • 方法名相同
  • 返回值,参数类型,参数个数不完全相同
  • 重载方法可以改变修饰符

14. 重写

  • 参数列表与被重写方法相同
  • 返回类型可以不同,但必须是父类返回类型的子类
  • 访问权限不能比被重写方法低
  • 父类的成员方法只能被子类重写
  • final修饰的方法不能被重写
  • static修饰的方法不能被重写,但是能再次声明
  • 子类和父类在同一个包中,子类可以重写父类除了final和private修饰的所有方法
  • 子类和父类不在同一个包中,子类只能重写父类pubilc、protected和非final方法

15. 常见异常

  • 编译时异常
    SQLExecption
    IOExecption
    ClassNotFindExecption
    FileNotFindExecption
  • 运行时异常
    NullPointerExecption
    StringIndexOutOfBoundsExecption
    ArrayIndexOutOfBoundsExecption
    ArithmeticExecption
    ClassCastExecption

你可能感兴趣的:(android,Android,知识点,面试题,常见问题,总结)