腾讯十年开发者发自腾讯一线的真实Android面试资料

0.862字数 1754阅读 152

已经步入九月中旬,职场的金九银十跳槽季正悄然进行,不同的是今年比往年「冷」一些,形式更加严峻一些,在这种情况下,9、10月份仍然会有一波离职、求职潮。作为求职者来说,面试是一道坎,很多人会恐惧面试,即使是工作很多年的老鸟,可能仍存在面试的焦虑。

所以今天笔者就在这里分享一波福利(文末有领取方式!),里面包含了一些高阶Android方面的技术资料,里面包括有高级UI、性能优化、移动架构师、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter全方面的Android进阶实践技术讲解,不多说直接上干货。
图片1.png

腾讯面试题集锦文末有提供答案

1、四大组件是什么
2、四个组件的生命周期
3、Activity的四种启动模式对比
4、Activity在有Dialog时按Home键的生命周期
5、两个Activity 之间跳转时必然会执行的是哪几个方法
6、 前台切换到后台,然后再回到前台,Activity生命周期回调方法。弹出Dialog,生命值周期回调方法
7、 Sparse Array
8、 atomic包
9、 Android埋点
10、什么是Service以及描述下它的生命周期。Service有哪些启动方法,有什么区别,怎样停用Service
11、service如何杀不死
12、 Service与Activity怎么实现通信
14、什么时候使用Service
15、请描述一下Broadcast Receiver
16、如何注册广播
17、广播的生命周期
18、为什么要用ContentProvider?它和sql的实现上有什么差别
19、请介绍下Android的数据存储方式
20、简单说说Fragment
21、他们是怎么进行传递数据的
22、Fragment Manager , add 和 replace 有什么区别
23、Fragment和view的区别
24、请介绍下Android中常用的五种布局
25、TextView 、ImageView ,Button,ImageButton他们之间的联系和区别
26、RelativeLayout和FrameLayout的区别
27、Padding和Margin有什么区别
28、Listview如何显示不同条目
29、ScrowView 使用的注意
30、Android UI中的View如何刷新
31、什么是ANR(异步加载) 如何避免它
32、Gradle中buildToolsVersion和TargetSdkVersion的区别是什么
33、进程间怎么通信
34、假设手机本地需要缓存数据,如何保证和服务器的数据统一
35、分页怎么做的
36、什么Context
37、Android程序与Java程序的区别
38、Android中的动画有哪几类,它们的特点和区别是什么
39、Android工程的目录结构
40、android的启动流程

1、四大组件是什么?
Activity【活动】:用于表现功能。
Service【服务】:后台运行服务,不提供界面呈现。
BroadcastReceiver【广播接收器】:用来接收广播。
Content Provider【内容提供商】:支持在多个应用中存储和读取数据,相当于数据库。
2、四个组件的生命周期?
Service的生命周期:首先Service有两种启动方式,而在这两种启动方式下,它的生命周期不同。
通过startService()方法启动的服务
初始化结束后系统会调用 void onStart(Intent intent) 方法,用于处理传递给startService()的Intent对象。如音乐服务会打开Intent 来探明将要播放哪首音乐,并开始播放。注意:多次调用startService()方法会多次触发onStart()方法。
通过bindService ()方法启动的服务
初始化结束后系统会调用 IBinder onBind(Intent intent) 方法,用来绑定传递给bindService 的Intent 的对象。注意:多次调用bindService()时,如果该服务已启动则不会再触发此方法。
3、Activity的四种启动模式对比?
Standard:标准的启动模式,如果需要启动一个activity就会创建该activity的实例。也是activity的默认启动模式。
SingeTop:如果启动的activity已经位于栈顶,那么就不会重新创建一个新的activity实例。而是复用位于栈顶的activity实例对象。如果不位于栈顶仍旧会重新创建activity的实例对象。
SingleTask:设置了singleTask启动模式的activity在启动时,如果位于activity栈中,就会复用该activity,这样的话,在该实例之上的所有activity都依次进行出栈操作,即执行对应的onDestroy()方法,直到当前要启动的activity位于栈顶。一般应用在网页的图集,一键退出当前的应用程序。
singleInstance:如果使用singleInstance启动模式的activity在启动的时候会复用已经存在的activity实例。不管这个activity的实例是位于哪一个应用当中,都会共享已经启动的activity的实例对象。使用了singlestance的启动模式的activity会单独的开启一个共享栈,这个栈中只存在当前的activity实例对象。
4、Activity在有Dialog时按Home键的生命周期?
当我们的Activity上弹出Dialog对话框时,程序的生命周期依然是onCreate() —> onStart() —> onResume(),在弹出Dialog的时候并没有onPause()和onStop()方法。而在此时我们按下Home键,才会继续执行onPause()和onStop()方法。这说明对话框并没有使Activity进入后台,而是在点击了Home键后Activity才进入后台工作。
原因就是,其实Dialog是Activity的一个组件,此时Activity并不是不可见,而是被Dialog组件覆盖了其他的组件,此时我们无法对其他组件进行操作而已。
5、两个Activity 之间跳转时必然会执行的是哪几个方法?
首先定义两个Activity,分别为A和B。
当我们在A中激活B时,A调用onPause()方法,此时B出现在屏幕时,B调用onCreate()、onStart()、onResume()。
这个时候B【B不是一个透明的窗体或对话框的形式】已经覆盖了A的窗体,A会调用onStop()方法。
6、 前台切换到后台,然后再回到前台,Activity生命周期回调方法。弹出Dialog,生命值周期回调方法?
首先定义两个Activity,分别为A和B。
完整顺序为:A调用onCreate()方法 —> onStart()方法 —> onResume()方法。当A启动B时,A调用onPause()方法,然后调用新的Activity B,此时调用onCreate()方法 —> onStart()方法 —> onResume()方法将新Activity激活。之后A再调用onStop()方法。当A再次回到前台时,B调用onPause()方法,A调用onRestart()方法 —> onStart()方法 —> onResume()方法,最后调用B的onStop()方法 —> onDestory()方法。
弹出Dialog时,调用onCreate()方法 —> onStart()方法 —> onResume()方法。
7、 SparseArray

当新建一个key为整型的HashMap时,会出现如下的提示信息,推荐使用SparseArray来替代HashMap:
图片2.png

接下来就来介绍下SparseArray:
a.数据结构:又称稀疏数组,内部通过两个数组分别存储key和value,并用压缩的方式来存储数据
b.优点:可替代key为int、value为Object的HashMap,相比于HashMap
能更节省存储空间
由于key指定为int,能节省int和Integer的装箱拆箱操作带来的性能消耗
扩容时只需要数组拷贝工作,而不需重建哈希表
c.适用场景:数据量不大(千以内)、空间比时间重要、需要使用Map且key为整型;不适合存储大容量数据,此时性能将退化至少50%
d.使用
添加:public void put(int key, E value)
删除:
public void delete(int key)
public void remove(int key)实际上内部会调用delete方法
查找:
public E get(int key)
public E get(int key, E valueIfKeyNotFound)可设置假设key不存在时默认返回的value
public int keyAt(int index)获取相应的key
public E valueAt(int index)获取相应的value
e.get/put过程:元素会按照key从小到大进行存储,先使用二分法查询key对应在数组中的下标index,然后通过该index进行增删查。源码分析见SparseArray解析
由于篇幅问题,后续答案请关注转发后加入群聊:[Android高级开发交流群(878873098)]即可获取面试资料答案免费领取方式!**

推荐阅读更多精彩内容