Android超实用最全面试大纲(四)

作者: Android_until | 来源:发表于2019-03-15 17:11 被阅读10次

    文章目录:

    • 冷启动和热启动面试题
    • 其他优化面试题
    • 架构模式面试题
    • 插件化面试题
    • 热更新面试题
    • 进程保活面试题
    • Lint面试题
    • Kotlin面试题

    一、冷启动和热启动面试题

    1、什么是冷启动和热启动

    • 冷启动:在启动应用前,系统中没有该应用的任何进程信息
    • 热启动:在启动应用时,在已有的进程上启动应用(用户使用返回键退出应用,然后马上又重新启动应用)

    2、冷启动和热启动的区别

    • 冷启动:创建Application后再创建和初始化MainActivity
    • 热启动:创建和初始化MainActivity即可

    3、冷启动时间的计算

    这个时间值从应用启动(创建进程)开始计算,到完成视图的第一次绘制为止

    4、冷启动流程

    • Zygote进程中fork创建出一个新的进程
    • 创建和初始化Application类、创建MainActivity
    • inflate布局、当onCreate/onStart/onResume方法都走完
    • contentView的measure/layout/draw显示在界面上

    总结:Application构造方法->attachBaseContext()->onCreate()->Activity构造方法->onCreate()->配置主题中背景等属性->onStart()->onResume()->测量布局绘制显示在界面上

    5、冷启动优化

    • 减少第一个界面onCreate()方法的工作量
    • 不要让Application参与业务的操作
    • 不要在Application进行耗时操作
    • 不要以静态变量的方式在Application中保存数据
    • 减少布局的复杂性和深度
    • 不要在mainThread中加载资源
    • 通过懒加载方式初始化第三方SDK

    二、其他优化面试题

    1、Android不用静态变量存储数据

    • 静态变量等数据由于进程已经被杀死而被初始化
    • 使用其他数据传输方式:文件/sp/contentProvider

    2、SharePreference安全问题

    • 不能跨进程同步
    • 文件不宜过大

    3、内存对象序列化

    • Serializeble:是java的序列化方式,Serializeble在序列化的时候会产生大量的临时对象,从而引起频繁的GC
    • Parcelable:是Android的序列化方式,且性能比Serializeble高,Parcelable不能使用在要将数据存储在硬盘上的情况

    4、避免在UI线程中做繁重的操作

    三、架构模式面试题

    四、插件化面试题

    1、插件化解决的问题

    • 动态加载APK(反射、类加载器)
    • 资源加载(反射、AssetManager、独立资源、分段资源)
    • 代码加载(反射获取生命周期)

    2、类加载器(Java中字节码添加到虚拟机中)

    • DexClassLoader:能够加载未安装的jar/apk/dex,主要用于动态加载和代码热更新
    • PathClassLoader:只能加载系统中已经安装过的apk

    五、热更新面试题

    1、热更新主要流程

    • 线上检查到Crash
    • 拉出Bugfix分支修复Crash问题
    • jenkins构建和补丁生成
    • app通过推送或主动拉取补丁文件
    • 将Bugfix代码合到master上

    2、热更新主流框架

    • Dexposed
    • AndFix
    • Nuwa
    • Tinker

    3、热更新的原理

    • 在ClassLoader创建一个dexElements数组
    • 将修复好的dex文件存放在dexElements数组的最前面
    • ClassLoader会遍历dexElements数组,找到最前面的dex文件优先加载

    六、进程保活面试题

    1、进程的优先级

    • 空进程
    • 后台进程
    • 服务进程
    • 可见进程
    • 前台进程

    2、Android进程回收策略

    • Low memory Killer(定时执行):通过一些比较复杂的评分机制,对进程进行打分,然后将分数高的进程判定为bad进程,杀死并释放内存
    • OOM_ODJ:判别进程的优先级

    3、Android保活方案

    • 利用系统广播拉活
    • 利用系统Service机制拉活
    • 利用Native进程拉活
    • 利用JobScheduler机制拉活
    • 利用账号同步机制拉活

    七、Lint面试题

    1、什么是Android Lint

    Android Lint是一个静态代码分析工具,它能够对你的Android项目中潜在的Bug、可优化的代码、安全性、性能、可用性、可访问性、国际化等进行检查

    2、Lint工作流程

    3、配置Lint

    • 创建Lint.xml到根目录下,自定义Lint安全等级等
    • 在Java文件中可以使用@suppressLint(“NewApi”)来忽视Lint的报错
    • 在xml文件中可以使用tool:ignore(“UnusedResources”)来忽视Lint的报错
    • 自定义Lint检查,可以创建类,继承Detector和实现JavaPsiScanner

    八、Kotlin面试题

    1、什么是Kotlin

    • Kotlin是一种基于JVM的编程语言
    • 对Java的一种拓展,比Java更简洁
    • Kotlin支持函数式编程
    • Kotlin类和Java类可以相互调用

    2、Kotlin环境搭建

    • 直接在Plugin中下载Kotlin插件即可
    • 系统会自动配置到Kotlin环境

    针对于上面的面试题,我总结出了互联网公司Android程序员面试涉及到的绝大部分面试题及答案,并整理做成了文档,以及系统的进阶学习视频资料,免费分享给大家。
    (包括Java在Android开发中应用、APP框架知识体系、高级UI、全方位性能调优,NDK开发,音视频技术,人工智能技术,跨平台技术等技术资料),希望能帮助到你面试前的复习,且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。
    资料领取方式:加Android技术开发交流②;979045005,找群管理免费领取。备注一下简书看到的来领取资料就可以了!

    相关文章

      网友评论

        本文标题:Android超实用最全面试大纲(四)

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