腾讯三面,往往被打败的点是最细节的基础内容

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记的之前有次有个朋友去腾讯面试,前面可以说是一路畅通,结果最后倒在了一些常问的基础知识点的细节上,才觉得细节决定成败,回来后一起把很多能用到的点整理了出来。整整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)ActivityonCreate()->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来停止服务。必须unbindServicestopService(stopSelf)同时都调用了才会停止服务。

3)BroadcastReceiver

a) 动态注册:存活周期是在Context.registerReceiverContext.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

切换到该FragmentonAttach->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->onStopAlertDialog只是一个组件,并不会使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不存在,创建指定的taskAffinitytask,taskAffinity的作用,进入指写taskAffinity的task,如果指定的task存在,将task移到前台,如果指定的task不存在,创建指定的taskAffinity的task.
应用场景:应用的主页面

9、Activity状态保存于恢复

Activity被主动回收时,如按下Back键,系统不会保存它的状态,只有被动回收时,虽然这个Activity实例已被销毁,但系统在新建一个Activity实例时,会带上先前被回收Activity的信息。在当前Activity被销毁前调用onSaveInstanceState(onPauseonStop之间保存),重新创建Activity后会在onCreate后调用onRestoreInstanceStateonStartonResume之间被调用),它们的参数Bundle用来数据保存和读取的。

保存View状态有两个前提:View的子类必须实现了onSaveInstanceState; 必须要设定Id,这个ID作为Bundle的Key

10、fragment各种情况下的生命周期

11、Fragment状态保存onSaveInstanceState是哪个类的方法,在什么情况下使用?

12、Fragment.startActivityForResult是和FragmentActivitystartActivityForResult

13、如何实现Fragment的滑动?
ViewPager+FragmentPagerAdapter+List<Fragment>

14、fragment之间传递数据的方式?

15、service和activity怎么进行数据交互?

1)通过bindService启动服务,可以在ServiceConnectiononServiceConnected中获取到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。
可以点击关于我联系我获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值