结语
由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!以下是目录截图:
由于整个文档比较全面,内容比较多,篇幅不允许,下面以截图方式展示 。
再附一部分Android架构面试视频讲解:
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
- 100万个数字求100个最大值。
- 手写快速排序算法。
三面 (GM面)
- kotlin比Java好在哪里,是函数式编程吗?
- 如何防止DNS劫持?
- 如果让你实现一个调试器,你会怎么设计?静态调试?动态调试呢?
我觉得进大厂不仅仅技术要过关,更看重思路与抽象的解决方案
二. Android面试常问基础知识点细节篇
1、四大组件的生命周期和简单用法
1)Activity :onCreate()
->onStart()
->onResume()
->onPause()
->onStop()
->onDestory()
onCreate()
:为Activity设置布局,此时界面还不可见;
onStart()
: Activity可见但还不能与用户交互,不能获得焦点
onRestart()
: 重新启动Activity时被回调
onResume()
: Activity可见且可与用户进行交互
onPause()
: 当前Activity暂停,不可与用户交互,但还可见。在新Activity启动前被系统调用保存现有的Activity中的持久数据、停止动画等。
onStop()
: 当Activity被新的Activity覆盖不可见时被系统调用
onDestory()
: 当Activity被系统销毁杀掉或是由于内存不足时调用
2)Service
a) onBind
方式绑定的:onCreate
->onBind
->onUnBind
->onDestory
(不管调用bindService
几次,onCreate只会调用一次,onStart不会被调用,建立连接后,service会一直运行,直到调用unBindService或是之前调用的bindService的Context不存在了,系统会自动停止Service,对应的onDestory会被调用)
b) startService
启动的:onCreate
->onStartCommand
->onDestory
(start多次,onCreate
只会被调用一次,onStart
会调用多次,该service会在后台运行,直至被调用stopService
或是stopSelf
)
**c)**又被启动又被绑定的服务,不管如何调用onCreate()
只被调用一次,startService
调用多少次,onStart
就会被调用多少次,而unbindService
不会停止服务,必须调用stopService
或是stopSelf
来停止服务。必须unbindService
和stopService(stopSelf)
同时都调用了才会停止服务。
3)BroadcastReceiver
a) 动态注册:存活周期是在Context.registerReceiver
和Context.unregisterReceiver
之间,BroadcastReceiver
每次收到广播都是使用注册传入的对象处理的。
b) 静态注册:进程在的情况下,receiver会正常收到广播,调用onReceive
方法;生命周期只存活在onReceive
函数中,此方法结束,BroadcastReceiver
就销毁了。onReceive()
只有十几秒存活时间,在onReceive()
内操作超过10S,就会报ANR
。
进程不存在的情况,广播相应的进程会被拉活,Application.onCreate
会被调用,再调用onReceive
。
4)ContentProvider
应该和应用的生命周期一样,它属于系统应用,应用启动时,它会跟着初始化,应用关闭或被杀,它会跟着结束。
2、Activity之间的通信方式
1)通过Intent方式传递参数跳转
2)通过广播方式
3)通过接口回调方式
4)借助类的静态变量或全局变量
5)借助SharedPreference
或是外部存储,如数据库或本地文件
3、横竖屏切换的时候,Activity 各种情况下的生命周期
1)切换横屏时:onSaveInstanceState
->onPause
->onStop
->onDestory
->onCreate
->onStart
->onRestoreInstanceState
->onResume
2) 切换竖屏时:会打印两次相同的log
onSaveInstanceState
->onPause
->onStop
->onDestory
->onCreate
->onStart
->onRestoreInstanceState
->onResume
->onSaveInstanceState
->onPause
->onStop
->onDestory
->onCreate
->onStart
->onRestoreInstanceState
->onResume
3) 如果在AndroidMainfest.xml
中修改该Activity的属性,添加android:configChanges
=“orientation
”
横竖屏切换,打印的log一样,同1)
4) 如果AndroidMainfest.xml
中该Activity中的android:configChanges
=“orientation|keyboardHidden
”,则只会打印onConfigurationChanged
->
4、Activity与Fragment之间生命周期比较
Fragment生命周期:onAttach
->onCreate
->onCreateView
->onActivityCreated
->onStart
->onResume
->onPause
->onStop
->onDestoryView
->onDestory
->onDetach
切换到该Fragment:onAttach
->onCreate
->onCreateView
->onActivityCreated
->onStart
->onResume
按下Power键:onPause
->onSaveInstanceState
->onStop
点亮屏幕解锁:onStart
->onRestoreInstanceState
->onResume
切换到其他Fragment: onPause
->onStop
->onDestoryView
切回到该Fragment: onCreateView
->onActivityCreated
->onStart
->onResume
退出应用:onPause
->onStop
->onDestoryView
->onDestory
->onDetach
5、Activity上有Dialog的时候按Home键时的生命周期
AlertDialog
并不会影响Activity的生命周期,按Home键后才会使Activity走onPause
->onStop
,AlertDialog
只是一个组件,并不会使Activity进入后台。
6、两个Activity 之间跳转时必然会执行的是哪几个方法?
前一个Activity的onPause
,后一个Activity的onResume
7、前台切换到后台,然后再回到前台,Activity生命周期回调方法。弹出Dialog,生命值周期回调方法。
**1)**前台切换到后台,会执行onPause
->onStop
,再回到前台,会执行onRestart
->onStart
->onResume
**2)**弹出Dialog,并不会影响Activity生命周期
8、Activity的四种启动模式对比
1)standard:标准启动模式(默认),每启动一次Activity,都会创建一个实例,即使从ActivityA startActivity
ActivityA
,也会再次创建A的实例放于栈顶,当回退时,回到上一个ActivityA
的实例。
2) singleTop:栈顶复用模式,每次启动Activity,如果待启动的Activity位于栈顶,则不会重新创建Activity的实例,即不会走onCreate
->onStart
,会直接进入Activity的onPause
->onNewIntent
->onResume
方法
3) singleInstance: 单一实例模式,整个手机操作系统里只有一个该Activity实例存在,没有其他Actvity
,后续请求均不会创建新的Activity。若task中存在实例,执行实例的onNewIntent()
。
应用场景:闹钟、浏览器、电话
4) singleTask:栈内复用,启动的Activity如果在指定的taskAffinity
的task栈中存在相应的实例,则会把它上面的Activity都出栈,直到当前Activity实例位于栈顶,执行相应的onNewIntent()
方法。如果指定的task不存在,创建指定的taskAffinity
的task,taskAffinity
的作用,进入指写taskAffinity
的task,如果指定的task存在,将task移到前台,如果指定的task不存在,创建指定的taskAffinity
的task.
应用场景:应用的主页面
学习福利
【Android 详细知识点思维脑图(技能树)】
其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。
虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。
这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司19年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。
由于篇幅有限,这里以图片的形式给大家展示一小部分。
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
以戳这里获取](https://bbs.csdn.net/topics/618156601)**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!