美文网首页Android高级进阶Android开发Android开发经验谈
【绝对干货】超全Android中高级面试复习大纲,覆盖所有面试知

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

作者: 小小小小怪兽_666 | 来源:发表于2020-08-13 14:26 被阅读0次

    文章目录如下:

    • Activity面试题
    • Fragment面试题
    • Service面试题
    • Broadcast Receiver面试题
    • WebView面试题
    • Binder面试题
    • Handler面试题
    • AsyncTask面试题
    • HandlerThread面试题
    • IntentService面试题
    • 视图工作机制面试题
    • 事件分发机制面试题
    • ListView面试题
    • Android项目构建面试题(由于篇幅太长,今天就先分享到这里)
    • ANR面试题
    • OOM面试题
    • Bitmap面试题
    • UI卡顿面试题
    • 内存泄漏面试题
    • 内存管理面试题
    • 冷启动和热启动面试题
    • 其他优化面试题
    • 架构模式面试题
    • 插件化面试题
    • 热更新面试题
    • 进程保活面试题
    • 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无法释放

    解决:

    • AsyncTask内部持有外部Activity的弱引用
    • AsyncTask改为静态内部类
    • AsyncTask.cancel()

    5、AsyncTask生命周期

    在Activity销毁之前,取消AsyncTask的运行,以此来保证程序的稳定

    6、AsyncTask结果丢失

    由于屏幕旋转、Activity在内存紧张时被回收等情况下,Activity会被重新创建,此时,旧的AsyncTask持有旧的Activity引用,这个时候会导致AsyncTask的onPostExecute()对UI更新无效

    7、AsyncTask并行or串行

    • AsyncTask在Android 2.3之前默认采用并行执行任务,AsyncTask在Android 2.3之后默认采用串行执行任务

    • 如果需要在Android 2.3之后采用并行执行任务,可以调用AsyncTask的executeOnExecutor()

    HandlerThread面试题

    1、HandlerThread产生背景

    当系统有多个耗时任务需要执行时,每个任务都会开启一个新线程去执行耗时任务,这样会导致系统多次创建和销毁线程,从而影响性能。为了解决这一问题,Google提供了HandlerThread,HandlerThread是在线程中创建一个Looper循环器,让Looper轮询消息队列,当有耗时任务进入队列时,则不需要开启新线程,在原有的线程中执行耗时任务即可,否则线程阻塞

    2、HanlderThread的特点、

    • HandlerThread本质上是一个线程,继承自Thread
    • HandlerThread有自己的Looper对象,可以进行Looper循环,可以创建Handler
    • HandlerThread可以在Handler的handlerMessage中执行异步方法
    • HandlerThread优点是异步不会堵塞,减少对性能的消耗
    • HandlerThread缺点是不能同时继续进行多任务处理,需要等待进行处理,处理效率较低
    • HandlerThread与线程池不同,HandlerThread是一个串行队列,背后只有一个线程。

    IntentService面试题

    1、IntentService是什么

    IntentService是继承自Service并处理异步请求的一个类,其内部采用HandlerThread和Handler实现的,在IntentService内有一个工作线程来处理耗时操作,其优先级比普通Service高。当任务完成后,IntentService会自动停止,而不需要手动调用stopSelf()。另外,可以多次启动IntentService,每个耗时操作都会以工作队列的方式在IntentService中onHandlerIntent()回调方法中执行,并且每次只会执行一个工作线程

    2、IntentService使用方法

    • 创建Service继承自IntentService
    • 覆写构造方法和onHandlerIntent()方法
    • 在onHandlerIntent()中执行耗时操作

    视图工作机制面试题

    ListView面试题

    1、ListView是什么

    ListView是能将一个数据集合以动态滚动的方式展示到用户界面上的View

    2、ListView的RecycleBin机制

    3、ListView的优化

    • 重用convertView
    • 使用ViewHolder
    • 图片三级缓存
    • 监听滑动事件
    • 少用透明View
    • 开启硬件加速

    Android项目构建面试题

    1、android构建流程

    2、jenkins持续集成构建

    3、Git常用命令

    • git init:仓库的初始化
    • git status:查看当前仓库的状态
    • git diff:查看仓库与上次修改的内容
    • git add:将文件放进暂存区
    • git commit:提交代码
    • git clone:克隆代码
    • git bransh:查看当前分支
    • git checkout:切换当前分支

    4、git工作流

    • fork/clone(主流)
    • fork:将别人的仓库代码fork到自己的仓库上
    • clone:克隆下自己仓库的代码
    • update、commit:修改代码并提交到自己的仓库
    • push:提交到自己的仓库
    • pull request:请求添加到别人的仓库
    • clone

    5、proguard是什么

    ProGuard工具是用于压缩、优化和混淆我们的代码,其主作用是移除或混淆代码中无用类、字段、方法和属性

    6、proguard技术功能

    • 压缩
    • 优化
    • 混淆
    • 预检测

    7、proguard工作原理

    将无用的字段或方法存入到EntryPoint中,将非EntryPoint的字段和方法进行替换

    8、为什么要混淆

    由于Java是一门跨平台的解释性语言,其源代码被编译成class字节码来适应其他平台,而class文件包含了Java源代码信息,很容易被反编译。

    最后

    最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的24套腾讯、字节跳动、阿里、百度2019-2020BAT 面试真题解析,我把大厂面试中常被问到的技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。

    还有 高级架构技术进阶脑图 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

    领取:【PDF】

    Android 基础知识点

    Java 基础知识点

    Android 源码相关分析

    常见的一些原理性问题

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

    以上内容,均可以免费分享给大家,希望大家在今年的金九银十里能够发挥顺利,进到自己想进的公司,共勉!

    相关文章

      网友评论

        本文标题:【绝对干货】超全Android中高级面试复习大纲,覆盖所有面试知

        本文链接:https://www.haomeiwen.com/subject/mdwbdktx.html