记的之前有次有个朋友去腾讯面试,前面可以说是一路畅通,结果最后倒在了一些常问的基础知识点的细节上,才觉得细节决定成败,回来后一起把很多能用到的点整理了出来。整整983页的PDF
对此很多面试中遇到的问题,花了15个小时整理成为了一份983页的PDF文档。

需要的可以联系我领取完整的PDF
更多完整项目下载。未完待续。源码。图文知识后续上传github。
可以点击关于我联系我获取
一. 腾讯
三轮面试
一面
- 算法题
- Android 沉浸式状态栏 怎么实现的
- 事件处理函数有哪几个,父View 子View 监听同一个事件,重写哪些方法。在哪个View重写?
- ViewRootImpl接受事件吗?
- apk编译打包流程 V1,V2 签名区别
- 利用logging监听方法耗时,会不会让app增大延迟。
- eventbus为什么要用CopyOnWriteList?
- 插件化怎么加载资源的?
- JVM怎么保证gc效率跟线程运行效率的 ?
- 如果android没用对应的view,flutter能运行吗? 手写单例模式,volatile 跟 synchronized区别?
- 接口暴露,但是不让别人调用,有哪些办法?
二面
- 为什么采用flatbuffer? 比Json好在哪里?
- 如何处理Crash,NativeCrash呢?Google是怎么做到的?如果上报过程中再次产生Crash能不能捕捉到?
- uncaughtException是被谁调用的,如果再次崩溃能不能捕获到?
- Linux是怎么知道app崩溃的,如果想要在被kill前 做一些耗时操作,该怎么做?
- 考虑设计一个crash捕捉模块。
- 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.
应用场景:应用的主页面
9、Activity状态保存于恢复
Activity被主动回收时,如按下Back键,系统不会保存它的状态,只有被动回收时,虽然这个Activity实例已被销毁,但系统在新建一个Activity实例时,会带上先前被回收Activity的信息。在当前Activity被销毁前调用onSaveInstanceState(onPause和onStop之间保存),重新创建Activity后会在onCreate后调用onRestoreInstanceState(onStart和onResume之间被调用),它们的参数Bundle用来数据保存和读取的。
保存View状态有两个前提:View的子类必须实现了onSaveInstanceState; 必须要设定Id,这个ID作为Bundle的Key
10、fragment各种情况下的生命周期
11、Fragment状态保存onSaveInstanceState是哪个类的方法,在什么情况下使用?
12、Fragment.startActivityForResult是和FragmentActivity的startActivityForResult?
13、如何实现Fragment的滑动?
ViewPager+FragmentPagerAdapter+List<Fragment>
14、fragment之间传递数据的方式?
15、service和activity怎么进行数据交互?
1)通过bindService启动服务,可以在ServiceConnection的onServiceConnected中获取到Service的实例,这样就可以调用service的方法,如果service想调用activity的方法,可以在service中定义接口类及相应的set方法,在activity中实现相应的接口,这样service就可以回调接口言法;
2)通过广播方式
16、说说ContentProvider、ContentResolver、ContentObserver 之间的关系
17、在manifest 和代码中如何注册和使用BroadcastReceiver?
18、AlertDialog,popupWindow,Activity区别
19、Application 和 Activity 的 Context 对象的区别
更多完整项目下载。未完待续。源码。图文知识后续上传github。
可以点击关于我联系我获取

本文记录了一位朋友在腾讯面试中因基础知识点细节未能通过的经历,强调了细节的重要性。文章整理了Android面试常问的基础知识点,包括四大组件生命周期、Activity间的通信、横竖屏切换、Service交互等,覆盖了面试中的常见问题,如状态保存恢复、EventBus使用、快速排序等,旨在帮助读者巩固基础知识。
2328

被折叠的 条评论
为什么被折叠?



