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生命周期


参考google官方文档

13. 重载

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

14. 重写

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

15. 常见异常

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

更多相关文章

  1. Binder学习笔记(十二)—— binder_transaction(...)都干了什么?
  2. Parcelable和Parcel
  3. Android(安卓)的消息机制(4)
  4. android 多线程 UI 入门
  5. android 细节收集
  6. 利用Android(安卓)UncaughtExceptionHandler捕获崩溃异常
  7. Android中socket的实例分析(二)
  8. listview 设置数组为空
  9. Android重写HorizontalScrollView仿ViewPager效果

随机推荐

  1. android所有控件
  2. android单选按钮RadioGroup的详细使用
  3. Android 单选队列 RadioGroup与RadioButt
  4. 48.Android(安卓)标签TextView的点击技巧
  5. Android界面开发
  6. Android Handler机制4之Looper与Handler
  7. android Toast大全(五种情形)建立属于你自
  8. android 应用移植到ophone 平台需注意
  9. 设置TextView文字居中
  10. Android 音视频汇总