【绝对干货】超全Android中高级面试复习大纲,覆盖所有面试知识!(上篇)

  • 热更新面试题

  • 进程保活面试题

  • Lint面试题

  • Kotlin面试题

Activity面试题

1、Activity是什么

Activity是四大组件之一,它提供一个界面让用户点击和各种滑动操作,这就是Activity

2、Activity四种状态

  • runing

  • paused

  • stopped

  • killed

3、Activity生命周期

  • onCreate()

  • onStart()

  • onResume()

  • onPause()

  • onStop()

  • onDestroy()

  • onRestart()

4、进程的优先级

  • 空进程

  • 后台进程

  • 服务进程

  • 可见进程

  • 前台进程

5、Activity任务栈

  • 先进后出

6、Activity启动模式

  • standard

  • singletop

  • singletask

  • singleinstance

7、scheme跳转协议

Android中的scheme是一种页面内跳转协议,通过定义自己的scheme协议,可以跳转到app中的各个页面

  • 服务器可以定制化告诉app跳转哪个页面

  • App可以通过跳转到另一个App页面

  • 可以通过H5页面跳转页面

Fragment面试题

1、Fragment为什么被称为第五大组件

Fragment比Activity更节省内存,其切换模式也更加舒适,使用频率不低于四大组件,且有自己的生命周期,而且必须依附于Activity

2、Activity创建Fragment的方式

  • 静态创建

  • 动态创建

3、FragmentPageAdapter和FragmentPageStateAdapter的区别

  • FragmentPageAdapter在每次切换页面的的时候,是将Fragment进行分离,适合页面较少的Fragment使用以保存一些内存,对系统内存不会多大影响

  • FragmentPageStateAdapter在每次切换页面的时候,是将Fragment进行回收,适合页面较多的Fragment使用,这样就不会消耗更多的内存

4、Fragment生命周期

  • onAttach()

  • onCreate()

  • onCreateView()

  • onActivityCreated()

  • onStart()

  • onResume()

  • onPause()

  • onStop()

  • onDestroyView()

  • onDestroy()

  • onDetach()

5、Fragment的通信

  • Fragment调用Activity中的方法:getActivity

  • Activity调用Fragment中的方法:接口回调

  • Fragment调用Fragment中的方法:FragmentManager.findFragmentById

6、Fragment的replace、add、remove方法

  • replace:替代Fragment的栈顶页面

  • add:添加Fragment到栈顶页面

  • remove:移除Fragment栈顶页面

Service面试题

1、Service是什么

Service是四大组件之一,它可以在后台执行长时间运行操作而没有用户界面的应用组件

2、Service和Thread的区别

  • Service是安卓中系统的组件,它运行在独立进程的主线程中,不可以执行耗时操作。Thread是程序执行的最小单元,分配CPU的基本单位,可以开启子线程执行耗时操作

  • Service在不同Activity中可以获取自身实例,可以方便的对Service进行操作。Thread在不同的Activity中难以获取自身实例,如果Activity被销毁,Thread实例就很难再获取得到

3、Service启动方式

  • startService

  • bindService

4、Service生命周期

  • startService

  • onCreate()

  • onStartCommand()

  • onDestroy()

  • bindService

  • onCreate()

  • onBind()

  • onUnbind()

  • onDestroy()

Broadcast Receiver面试题

1、Broadcast Receiver是什么

Broadcast是四大组件之一,是一种广泛运用在应用程序之间传输信息的机制,通过发送Intent来传送我们的数据

2、Broadcast Receiver的使用场景

  • 同一App具有多个进程的不同组件之间的消息通信

  • 不同App之间的组件之间的消息通信

3、Broadcast Receiver的种类

  • 普通广播

  • 有序广播

  • 本地广播

  • Sticky广播

4、Broadcast Receiver的实现

  • 静态注册:注册后一直运行,尽管Activity、进程、App被杀死还是可以接收到广播

  • 动态注册:跟随Activity的生命周期

5、Broadcast Receiver实现机制

  • 自定义广播类继承BroadcastReceiver,复写onReceiver()

  • 通过Binder机制向AMS进行注册广播

  • 广播发送者通过Binder机制向AMS发送广播

  • AMS查找符合相应条件的广播发送到BroadcastReceiver相应的循环队列中

  • 消息队列执行拿到广播,回调BroadcastReceiver的onReceiver()

6、LocalBroadcastManager特点

  • 本地广播只能在自身App内传播,不必担心泄漏隐私数据

  • 本地广播不允许其他App对你的App发送该广播,不必担心安全漏洞被利用

  • 本地广播比全局广播更高效

  • 以上三点都是源于其内部是用Handler实现的

WebView面试题

1、WebView安全漏洞

API16之前存在远程代码执行安全漏洞,该漏洞源于程序没有正确限制使用WebView.addJavascriptInterface方法,远程攻击者可通过使用Java反射机制利用该漏洞执行任意Java对象的方法

2、WebView销毁步骤

WebView在其他容器上时(如:LinearLayout),当销毁Activity时,需要在onDestroy()中先移除容器上的WebView,然后再将WebView.destroy(),这样就不会导致内存泄漏

3、WebView的jsbridge

客户端和服务端之间可以通过Javascript来互相调用各自的方法

4、WebViewClient的onPageFinished

WebViewClient的onPageFinished在每次完成页面的时候调用,但是遇到未加载完成的页面跳转其他页面时,就会一直调用,使用WebChromeClient.onProgressChanged可以替代

5、WebView后台耗电

在WebView加载页面的时候,会自动开启线程去加载,如果不很好的关闭这些线程,就会导致电量消耗加大,可以采用暴力的方法,直接在onDestroy方法中System.exit(0)结束当前正在运行中的java虚拟机

6、WebView硬件加速

Android3.0引入硬件加速,默认会开启,WebView在硬件加速的情况下滑动更加平滑,性能更加好,但是会出现白块或者页面闪烁的副作用,建议WebView暂时关闭硬件加速

7、WebView内存泄漏

由于WebView是依附于Activity的,Activity的生命周期和WebView启动的线程的生命周期是不一致的,这会导致WebView一直持有对这个Activity的引用而无法释放,解决方案如下

  • 独立进程,简单暴力,不过可能涉及到进程间通信(推荐)

  • 动态添加WebView,对传入WebView中使用的Context使用弱引用

腾讯、字节跳动、阿里、百度等BAT大厂 2019-2020面试真题解析

Binder面试题

1、Linux内核的基本知识

  • 进程隔离/虚拟地址空间:进程间是不可以共享数据的,相当于被隔离,每个进程被分配到不同的虚拟地址中

  • 系统调用:Linux内核对应用有访问权限,用户只能在应用层通过系统调用,调用内核的某些程序

  • binder驱动:它负责各个用户的进程,通过binder通信内核来进行交互的模块

2、为什么使用Binder

  • 性能上,相比传统的Socket更加高效

  • 安全性高,支持协议双方互相校验

3、Binder通信模型

  • Service服务端通过Binder驱动在ServiceManager的查找表中注册Object对象的add方法

  • Client客户端通过Binder驱动在ServiceManager的查找表中找到Object对象的add方法,并返回proxy的add方法,add方法是个空实现,proxy也不是真正的Object对象,是通过Binder驱动封装好的代理类的add方法

  • 当Client客户端调用add方法时,Client客户端通过Binder驱动将proxy的add方法,请求ServiceManager来找到Service服务端真正对象的add方法,进行调用

4、AIDL

  • 客户端通过aidl文件的Stub.asInterface()方法,拿到Proxy代理类

  • 通过调用Proxy代理类的方法,将参数进行封包后,调用底层的transact()方法

  • transact()方法会回调onTransact()方法,进行参数的解封

  • 在onTransact()方法中调用服务端对应的方法,并将结果返回

Handler面试题

1、Handler是什么

Handler通过发送和处理Message和Runnable对象来关联相对应线程的MessageQueue

2、Handler使用方法

  • post(runnable)

  • sendMessage(message)

3、Handler工作原理

Android进阶——Android消息机制之Looper、Handler、MessageQueen

4、Handler引起的内存泄漏

原因:非静态内部类持有外部类的匿名引用,导致Activity无法释放

解决:

  • Handler内部持有外部Activity的弱引用

  • Handler改为静态内部类

  • Handler.removeCallback()

AsyncTask面试题

1、AsyncTask是什么

它本质上就是一个封装了线程池和Handler的异步框架

2、AsyncTask使用方法

三个参数

  • Params:表示后台任务执行时的参数类型,该参数会传给AysncTask的doInBackground()方法

  • Progress:表示后台任务的执行进度的参数类型,该参数会作为onProgressUpdate()方法的参数

  • Result:表示后台任务的返回结果的参数类型,该参数会作为onPostExecute()方法的参数

五个方法

  • onPreExecute():异步任务开启之前回调,在主线程中执行

  • doInBackground():执行异步任务,在线程池中执行

  • onProgressUpdate():当doInBackground中调用publishProgress时回调,在主线程中执行

  • onPostExecute():在异步任务执行之后回调,在主线程中执行

  • onCancelled():在异步任务被取消时回调

3、AsyncTask工作原理

4、AsyncTask引起的内存泄漏

原因:非静态内部类持有外部类的匿名引用,导致Activity无法释放
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

小结

有了这么多优秀的开发工具,可以做出更高质量的Android应用。

当然了,“打铁还需自身硬”,想要写出优秀的代码,最重要的一点还是自身的技术水平,不然用再好的工具也不能发挥出它的全部实力。

在这里我也分享一份大佬自己收录整理的Android学习PDF+架构视频+面试文档+源码笔记,还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料这些都是我闲暇还会反复翻阅的精品资料。在脑图中,每个知识点专题都配有相对应的实战项目,可以有效的帮助大家掌握知识点。

总之也是在这里帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

oid开发知识点,真正体系化!**

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

小结

有了这么多优秀的开发工具,可以做出更高质量的Android应用。

当然了,“打铁还需自身硬”,想要写出优秀的代码,最重要的一点还是自身的技术水平,不然用再好的工具也不能发挥出它的全部实力。

在这里我也分享一份大佬自己收录整理的Android学习PDF+架构视频+面试文档+源码笔记,还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料这些都是我闲暇还会反复翻阅的精品资料。在脑图中,每个知识点专题都配有相对应的实战项目,可以有效的帮助大家掌握知识点。

总之也是在这里帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值