剑指金九银十:Android研发面试基础篇40题+不得不看的《多
金九银十到来之际,但很多人面试之前,可能没有在互联网公司工作经验或者说工作经验不多,不知道互联网公司技术面试都会问哪些问题? 再加上可能自己准备也不充分,去面试没几个回合就被面试官几个问题问蒙了,最后惨败收场。
下述是我收录整理的Android面试题汇总,由于篇幅原因,在这只把基础知识点部分的题目列举出来,后续还会更新其余面试题内容,大家可以关注一下我,及时知晓我的更新,同时这份面试集锦的整理也花费了我很多时间,有需要答案的朋友可以继续往后翻,在文末会有免费便捷的领取方式,顺便还请您帮忙转发分享下,点个赞,让更多的朋友都可以看得到~
Android面试常问基础知识点
- 四大组件是什么
- 四大组件的生命周期和简单用法
- Activity之间的通信方式
- Activity各种情况下的生命周期
- 横竖屏切换的时候,Activity 各种情况下的生命周期
- Activity与Fragment之间生命周期比较
- Activity上有Dialog的时候按Home键时的生命周期
- 两个Activity 之间跳转时必然会执行的是哪几个方法?
- 前台切换到后台,然后再回到前台,Activity生命周期回调方法。弹出Dialog,生命值周期回调方法。
- Activity的四种启动模式
- 对比Activity状态保存于恢复
- fragment各种情况下的生命周期
- Fragment状态保存onSaveInstanceState是哪个类的方法,在什么情况下使用?
- Fragment.startActivityForResult是和FragmentActivity的startActivityForResult?
- 如何实现Fragment的滑动?
- fragment之间传递数据的方式?
- service和activity怎么进行数据交互?
- 说说ContentProvider、ContentResolver、ContentObserver 之间的关系
- 请描述一下广播BroadcastReceiver的理解广播的分类广播使用的方式和场景本地广播和全局广
播有什么差别? - AlertDialog,popupWindow,Activity区别
- Application 和 Activity 的 Context 对象的区别
- Android属性动画特性
- 如何导入外部数据库
- LinearLayout、RelativeLayout、FrameLayout的特性及对比,并介绍使用场景。
- 谈谈对接口与回调的理解
- 回调的原理
- 写一个回调demo
- 介绍下SurfView
- RecycleView的使用
- 序列化的作用,以及Android两种序列化的区别
- 差值器
- 估值器
- 计算一个view的嵌套层级
- Activity栈
- Android线程有没有上限?
- Android线程有没有上限?
- 线程池有没有上限?
- ListView重用的是什么?
- Android为什么引入Parcelable?
- 有没有尝试简化Parcelable的使用?
多线程专题面试
1.什么是线程
线程就是进程中运行的多个子任务,是操作系统调用的最小单元
2.线程的状态
New:新建状态,new出来,还没有调用start
Runnable:可运行状态,调用start进入可运行状态,可能运行也可能没有运行,取决于操作系统的调度
Blocked:阻塞状态,被锁阻塞,暂时不活动,阻塞状态是线程阻塞在进入synchronized关键字修饰的方法或代码块(获取锁)时的状态。
Waiting:等待状态,不活动,不运行任何代码,等待线程调度器调度,wait sleep
Timed Waiting:超时等待,在指定时间自行返回
Terminated:终止状态,包括正常终止和异常终止
3.线程的创建
a.继承Thread重写run方法
b.实现Runnable重写run方法
c.实现Callable重写call方法
实现Callable和实现Runnable类似,但是功能更强大,具体表现在
a.可以在任务结束后提供一个返回值,Runnable不行
b.call方法可以抛出异常,Runnable的run方法不行
c.可以通过运行Callable得到的Fulture对象监听目标线程调用call方法的结果,得到返回值,(fulture.get(),调用后会阻塞,直到获取到返回值)
4.volatile关键字
volatile为实例域的同步访问提供了免锁机制,如果声明一个域为volatile,那么编译器和虚拟机就直到该域可能被另一个线程并发更新
5.Thread为什么不能用stop方法停止线程
从SUN的官方文档可以得知,调用Thread.stop()方法是不安全的,这是因为当调用Thread.stop()方法时,会发生下面两件事:
1.即刻抛出ThreadDeath异常,在线程的run()方法内,任何一点都有可能抛出ThreadDeath Error,包括在catch或finally语句中。
2.释放该线程所持有的所有的锁。调用thread.stop()后导致了该线程所持有的所有锁的突然释放,那么被保护数据就有可能呈现不一致性,其他线程在使用这些被破坏的数据时,有可能导致一些很奇怪的应用程序错误。
读者福利
由于篇幅有限,部分题目以及答案就不做全部展示了,这些面试题的答案我已经整理成PDF文档了,同时也整理了一些问题详解;虽然说花了一点时间,但是我也愿意把它免费分享出来,希望能够帮助到有需要的Android开发工程师朋友,也省的大家再去网上花时间找资料。
平台限制,不能直接发链接,需要的朋友可以进一下传送门:
最后
希望看到朋友动动手指,帮忙转发一下,这样会帮助到更多的朋友
祝大家学习愉快!