面试知识点
单元测试
对mvp框架的理解,有什么优点?
activity的四种启动模式: standard(标准模式)、singtop 栈顶模式 singtask、singinstance
Activity生命周期? oncreate—>onrestart—>onstart—>onresume—>onpause—>onstop—>ondestory
Service生命周期?这里要注意service有两种启动方式,startService()和bindService():
oncreate—>onstartcommand—>ondestory
oncreate—>onbind—>onunbind—>ondestory
理解Activity,View,Window三者关系?
activity 启动的时候会初始化一个Window,准确的说是phonewindow,这个phonewindow有一个ViewRoot,这个ViewRoot是一个view或viewgroup,是最初始的根布局,“ViewRoot”通过addView方法来一个个的添加View。比如TextView,Button等,这些View的事件监听,是由WindowManagerService来接受消息,并且回调Activity函数。比如onClickListener,onKeyDown等。
View的绘制流程?
Touch事件传递机制?
界面性能优化?
- ui过渡绘制,
- android 系统要求每一帧都要在16ms内完成
- 耗时操作放在非ui线程操作
- Lint工具检测布局
- 对布局嵌套进行优化
java内存的分配:
- 静态存储区:编译时就分配好,在程序整个运行期间都存在。主要存在静态数据和常量
- 栈区:方法执行时,会在栈区内存中创建方法体内的局部变量,方法结束后,自动释放内存。
- 堆区:通常存放new 出来的对象,由java 垃圾回收器回收。
四种引用类型的介绍:
- 强引用:JVM宁可跑出oom,也不让gc回收具有强引用的对象
- 软引用:只有当内存不足的时,才会被回收的对象
- 弱引用:在GC时,一旦发现了具有弱引用的对象,不管内存是否足够与否,都会回收ta的内存
- 虚引用:任何时候都可以被GC回收
造成内存泄漏的几个原因:
- 单例模式
- handle
- context 的不正确使用
- 资源没有关闭,比如cursor, stream broadcastrevices
- 注册监听器的泄漏
- 非静态内部类的静态实例
- Webview 造成的泄漏
- 集合中对象没有清理造成的内存泄漏
- 线程造成的内存泄漏,比如 AsyncTask, 任务没有执行完,ta 隐式的拥有activity的引用
ANR
Threadlocal 怎么使用?
设计模式
算法
handle 原理
http tcp ip 怎么理解
对链表结构的理解?
对于集合的理解:
- List:有序、元素可重复,有索引
- ArrayList :查询快,增删慢,不同步
- LinkedList:查询慢,增删快,不同步
- Set:无序,无索引,元素不可以重复
- HashSet:底层是哈希表,无序,线程不同步
- LinkedHashSet 有序,是hashset的子类
- TreeSet:底层是二叉树,可对元素进行排序
- HashSet:底层是哈希表,无序,线程不同步
- Map:
- HashTable:底层数据结构是哈希表,同步,不能存入null键和null值
- HashMap:底层数据结构也是哈希表,不同步,能存null键和null值
- TreeMap:底层数据结构是二叉树,不同步,可排序
- List:有序、元素可重复,有索引
collection与map的区别?
- 单列集合,一次只能存入一个元素collection, map双列集合,一次存一对集合
对于多线程的理解?
- 进程和线程:进程是静态的,而线程是动态的,是真正执行的单元,执行的过程,线程是作为进程的一个单元存在的
- 同样作为基本的执行单位,线程是划分的比进程更小的执行单位
- 每个进程都有一段专用的内存区域。于此相反,线程却共享内存单元(包括代码和数据),通过共享的内存单元来实现数据交换,实时通信与必要的同步操作。
- 创建线程的方式:
- 继承thread
- 定义一个类继承Thread
- 覆盖Thread中的run方法
- 直接创建Thread子类对象
- 调用start 方法
- 实现runnbale
- 定义类实现runnable接口
- 覆盖Runnable接口中的run方法
- 通过Thread创建线程对象
- 将Runnable接口的子类对象作为Thread类的构造函数参数进行传递
- 两个的区别:继承方式:线程代码放在继承thread子类的run方法中,实现方式,线程代码放在Runnable的子类run方法中,这样的好处避免了单继承的局限性,建议使用。
- 继承thread
- 线程的状态
- 创建: start()
- 临时状态
- 运行状态
- 冻结状态
- 消亡状态
- wait和sleep的区别?
- 进程的级别:
- 前台进程
- 可视进程
- 服务进程
- 后台进程
- 空进程
android中的四大组件?
android序列化的方式 ,原理有什么区别?
线程池是什么?
位移?
xml/json解析数据区别?
怎么加载一张大图片?
android 消息推送原理?
webview的bug?
奔溃日志的处理?