起因
因为种种原因计划从现在的公司离职 , 而离职后面临的第一个问题就是找下一份工作 , 找工作就难免要进行面试 , 关于 Android 的面试题在网上还真是不少,故而打算自己汇总一下问题并搜集一下关于问题的答案进行记录 , 希望自己能在收集汇总时加深印象,也希望自己能顺利找到新的工作.
推荐
在搜索面试题的时候给我印象比较深刻的就是 goeasyway 创建的 Android 面试 文集,其中的面试一天一题,不仅从一个应试者的角度来理解这些问题,更从一个面试官的角度提出了这个问题所考察的重点,而且往往能通过自己的一些面试经历及应试经历给予建议,这里也推荐其他准备面试的人可以去参考学习一下.
PS:一下问题来源于网络,答案也一样,难免会有错误,如果您发现错误欢迎指正!
问题 1 : 创建线程的方式
三种
- 继承 Thread 类创建线程类,通过 start 方法开启新线程
- 实现 Runnable 接口
- 实现 Callable 接口
问题 2 : Android 常用的操作多线程的方式
- Handler+Thread
- AsyncTask
- ThreadPoolExecutor
- IntentService
问题 3 : 线程池有什么优势
- 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的开销
- 提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。
- 提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配,调优和监控。
- 更强大的功能,线程池提供了定时、定期以及可控线程数等功能的线程池,使用方便简单。
答案来源:
https://zhuanlan.zhihu.com/p/29937635
http://gityuan.com/2016/01/16/thread-pool/
问题 4 : 怎么停止一个线程
- 使用退出标志,使线程正常退出,也就是当 run 方法完成后线程终止。
- 使用 stop 方法强行终止线程(这个方法不推荐使用,因为 stop 和 suspend、resume 一样,也可能发生不可预料的结果)。
- 使用 interrupt 方法中断线程。
答案来源:
http://blog.csdn.net/feiduclear_up/article/details/43270375
问题 5 : 方法锁与对象锁的区别
-
对象锁(方法锁) : 是针对一个对象的,它只在该对象的某个内存位置声明一个标志位标识该对象是否拥有锁,所以它只会锁住当前的对象。一般一个对象锁是对一个非静态成员变量进行 syncronized 修饰,或者对一个非静态方法进行 syncronized 修饰。对于对象锁,不同对象访问同一个被 syncronized 修饰的方法的时候不会阻塞住。
-
类锁 : 是锁住整个类的,当有多个线程来声明这个类的对象的时候将会被阻塞,直到拥有这个类锁的对象被销毁或者主动释放了类锁。这个时候在被阻塞住的线程被挑选出一个占有该类锁,声明该类的对象。其他线程继续被阻塞住。
问题 6 : View 事件分发机制
答案来源 :
http://blog.csdn.net/carson_ho/article/details/54136311
问题 7 : Android 中 Service 的启动方式
- 通过 startService 启动
- 通过 bindService 启动
答案来源:
https://juejin.im/post/5a96533ef265da4e967425ce
问题 8 : Activity 与 Service 的通信方式
- 不论是 start 还是 bind,都可以在开始时通过 intent 携带一定量数据
- 通过 Broadcast,Activity 发送广播,Service 接收;或者 Service 发送广播,Activity 接收
- 通过 bind 方式启动时,可以通过实现 ServiceConnection 来完成 Activity 和 Service 的交互
答案来源:
https://juejin.im/post/5a96533ef265da4e967425ce
https://www.cnblogs.com/aademeng/articles/6542189.html
问题 9 : Android 中 asset 和 res 目录的区别
- res 目录下的资源文件会在 R 文件中生成对应的 id,asset 不会
- res 目录下的文件在生成 apk 时,除 raw(即 res/raw)目录下文件不进行编译外,都会被编译成二进制文件;asset 目录下的文件不会进行编译
- asset 目录允许有子目录
问题 10 : Android 中的几种动画
- FrameAnimation(逐帧动画):将多张图片组合起来进行播放,类似于早期电影的工作原理,很多 App 的 loading 是采用这种方式。
- TweenAnimation(补间动画):是对某个 View 进行一系列的动画的操作,包括淡入淡出(Alpha),缩放(Scale),平移(Translate),旋转(Rotate)四种模式。
- PropertyAnimation(属性动画):属性动画不再仅仅是一种视觉效果了,而是一种不断地对值进行操作的机制,并将值赋到指定对象的指定属性上,可以是任意对象的任意属性。
答案来源:
http://blog.csdn.net/yanbober/article/details/46481171
网友评论