Android知识点汇总以及常见面试题
16lz
2021-01-26
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
更多相关文章
- Binder学习笔记(十二)—— binder_transaction(...)都干了什么?
- Parcelable和Parcel
- Android(安卓)的消息机制(4)
- android 多线程 UI 入门
- android 细节收集
- 利用Android(安卓)UncaughtExceptionHandler捕获崩溃异常
- Android中socket的实例分析(二)
- listview 设置数组为空
- Android重写HorizontalScrollView仿ViewPager效果