添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
  1. 一、性能优化
    1. 1、App稳定性优化
      1. 1、你们做了哪些稳定性方面的优化?
      2. 2、性能稳定性是怎么做的?
      3. 3、业务稳定性如何保障?
      4. 4、如果发生了异常情况,怎么快速止损?
      5. 5、Native Crash
    2. 2、App启动速度优化
      1. 1、启动优化是怎么做的?
      2. 2、是怎么异步的,异步遇到问题没有?
      3. 3、启动优化有哪些容易忽略的注意点?
      4. 4、版本迭代导致的启动变慢有好的解决方式吗?
      5. 5、开放问题:如果提高启动速度,设计一个延迟加载框架或者sdk的方法和注意的问题
    3. 3、App内存优化
      1. 1、你们内存优化项目的过程是怎么做的?
      2. 2、你做了内存优化最大的感受是什么?
      3. 3、如何检测所有不合理的地方?
        1. 如何避免内存抖动?(代码注意事项)
    4. 4、App绘制优化
      1. 1、你在做布局优化的过程中用到了哪些工具?
      2. 2、布局为什么会导致卡顿,你又是如何优化的?
      3. 3、做完布局优化有哪些成果产出?
      4. 4、你是怎么做卡顿优化的?
      5. 5、你是怎么样自动化的获取卡顿信息?
      6. 6、卡顿的一整套解决方案是怎么做的?
      7. 7、卡顿的主要场景?
        1. 1、UI
        2. 2、启动
        3. 3、跳转
        4. 4、响应
        5. 1、界面绘制
        6. 2、数据处理
    5. 5、App瘦身
      1. 1、怎么降低 Apk 包大小?
      2. 2、Apk 瘦身如何实现长效治理?
    6. 6、网络优化
      1. 1、在网络方面你们做了哪些监控,建立了哪些指标?
        1. 1)、质量监控
        2. 2)、流量监控
      2. 2、怎么有效地降低用户的流量消耗?
        1. 1)、数据:缓存、增量更新(这一步减少了非常多的流量消耗)
        2. 2)、上传:压缩
        3. 3)、图片:缩略图、webp
      3. 3、用户反馈消耗流量多这种问题怎么排查?
        1. 1)、精准获取流量的能力
        2. 2)、所有请求大小及次数的监控
        3. 3)、主动预警的能力
      4. 4、系统如何知道当前 WiFi 有问题?
      5. 5、移动端获取网络数据优化的几个点
      6. 6、客户端网络安全实现
      7. 7、设计一个网络优化方案,针对移动端弱网环境。
    7. 7、App电量优化
      1. 1、怎么做电量测试?
      2. 2、有哪些有效的电量优化手段?
        1. 1)、网络相关
        2. 2)、传感器相关
        3. 3)、WakeLock
        4. 4)、JobScheduler
    8. 8、安卓的安全优化
      1. 1、提高app安全性的方法?
      2. 2、安卓的app加固如何做?
      3. 3、安卓的混淆原理是什么?
      4. 4、谈谈你对安卓签名的理解。
      5. 5、谈谈Android的安全机制
    9. 9、为什么WebView加载会慢呢?
      1. WebView的漏洞有哪几种
    10. 10、如何优化自定义View
    11. 11、FC(Force Close)什么时候会出现?
    12. 12、Java多线程引发的性能问题,怎么解决?
    13. 13、TraceView的实现原理,分析数据误差来源。
    14. 14、是否使用过SysTrace,原理的了解?
    15. 15、mmap + native 日志优化?
  2. 二、Android Framework相关
    1. 1、Android系统架构
      1. 对于Android应用开发来说,最好能手绘下面的系统架构图:
    2. 2、View的事件分发机制?滑动冲突怎么解决?
      1. 了解Activity的构成
      2. 触摸事件的类型
      3. 事件分发流程
      4. 一些重要的结论:
      5. ACTION_CANCEL什么时候触发,触摸button然后滑动到外部抬起会触发点击事件吗,再滑动回去抬起会么?
        1. 点击事件被拦截,但是想传到下面的View,如何操作?
      6. 如何解决View的事件冲突?举个开发中遇到的例子?
    3. 3、View的绘制流程?
      1. DecorView被加载到Window中
      2. 了解绘制的整体流程
      3. 理解MeasureSpec
      4. 如何根据MeasureSpec去实现一个瀑布流的自定义ViewGroup?
      5. View绘制流程之Measure
        1. getSuggestMinimumWidth分析
        2. 自定义View时手动处理wrap_content时的情形
        3. LinearLayout的onMeasure方法实现解析(这里仅分析measureVertical核心源码)
        4. 在Activity中获取某个View的宽高
      6. View的绘制流程之Layout
        1. LinearLayout的onLayout方法实现解析(layoutVertical核心源码)
      7. View的绘制流程之Draw
        1. Draw的基本流程
        2. setWillNotDraw的作用
      8. Requestlayout,onlayout,onDraw,DrawChild区别与联系?
      9. invalidate() 和 postInvalidate()的区别 ?
    4. 4、跨进程通信。
      1. Android中进程和线程的关系?区别?
      2. 如何开启多进程?应用是否可以开启N个进程?
      3. 为何需要IPC?多进程通信可能会出现的问题?
      4. Android中IPC方式、各种方式优缺点?
      5. 讲讲AIDL?如何优化多模块都使用AIDL的情况?
      6. 为什么选择Binder?
      7. Binder机制的作用和原理?
      8. Binder框架中ServiceManager的作用?
      9. Binder 的完整定义
      10. 手写实现简化版AMS(AIDL实现)
      11. 简单讲讲 binder 驱动吧?
      12. 跨进程传递大内存数据如何做?
    5. 5、Android系统启动流程是什么?(提示:init进程 -> Zygote进程 –> SystemServer进程 –> 各种系统服务 –> 应用进程)
      1. 需要更详细的分析请查看以下系列文章:
      2. 系统是怎么帮我们启动找到桌面应用的?
    6. 6、启动一个程序,可以主界面点击图标进入,也可以从一个程序中跳转过去,二者有什么区别?
    7. 7、AMS家族重要术语解释。
    8. 8、App启动流程(Activity的冷启动流程)。
    9. 9、ActivityThread工作原理。
    10. 10、说下四大组件的启动过程,四大组件的启动与销毁的方式。
      1. 广播发送和接收的原理了解吗?
    11. 11、AMS是如何管理Activity的?
    12. 12、理解Window和WindowManager。
    13. 13、WMS是如何管理Window的?
      1. Window 、WindowManager、WMS、SurfaceFlinger
    14. 14、大体说清一个应用程序安装到手机上时发生了什么?
    15. 15、Android的打包流程?(即描述清点击 Android Studio 的 build 按钮后发生了什么?)apk里有哪些东西?签名算法的原理?
      1. apk打包流程
      2. apk组成
      3. 签名算法的原理
        1. 为什么要签名?
        2. 什么是签名?
        3. 数字摘要
        4. 签名和校验的主要过程
        5. 签名过程:
        6. 校验过程:
        7. 数字证书
        8. keystore和证书格式
        9. jarsigner和apksigner的区别
        10. 在签名时,除了要指定keystore文件和密码外,也要指定alias和key的密码,这是为什么呢?
        11. Android Apk V1 签名原理
    16. 16、说下安卓虚拟机和java虚拟机的原理和不同点?(JVM、Davilk、ART三者的原理和区别)
      1. JVM 和Dalvik虚拟机的区别
      2. Android2个虚拟机的区别(一个5.0之前,一个5.0之后)
      3. AOT和JIT以及混合编译的区别、优势
      4. ART和Davlik中垃圾回收的区别?
    17. 17、安卓采用自动垃圾回收机制,请说下安卓内存管理的原理?
      1. 开放性问题:如何设计垃圾回收算法?
    18. 18、Android中App是如何沙箱化的,为何要这么做?
    19. 19、一个图片在app中调用R.id后是如何找到的?
    20. 20、JNI
      1. Java中 long、float 字节数
      2. Java调用C++
      3. C++调用Java
      4. 如何在jni中注册native函数,有几种注册方式?
      5. so 的加载流程是怎样的,生命周期是怎样的?
  3. 三、Android优秀三方库源码
    1. 1、你项目中用到哪些开源库?说说其实现原理?
      1. 一、网络底层框架:OkHttp实现原理
        1. 这个库是做什么用的?
        2. 为什么要在项目中使用这个库?
        3. 这个库都有哪些用法?对应什么样的使用场景?
        4. 这个库的优缺点是什么,跟同类型库的比较?
        5. 这个库的核心实现原理是什么?如果让你实现这个库的某些核心功能,你会考虑怎么去实现?
        6. 各个拦截器的作用:
        7. 你从这个库中学到什么有价值的或者说可借鉴的设计思想?
        8. 手写拦截器?
        9. OKhttp针对网络层有哪些优化?
        10. 网络请求缓存处理,okhttp如何处理网络缓存的?
        11. HttpUrlConnection 和 okhttp关系?
        12. Volley与OkHttp的对比:
        13. 自己去设计网络请求框架,怎么做?
        14. 从网络加载一个10M的图片,说下注意事项?
        15. http怎么知道文件过大是否传输完毕的响应?
        16. 谈谈你对WebSocket的理解?
        17. WebSocket与socket的区别?
      2. 二、网络封装框架:Retrofit实现原理
        1. 这个库是做什么用的?
        2. 为什么要在项目中使用这个库?
        3. 这个库都有哪些用法?对应什么样的使用场景?
        4. 这个库的优缺点是什么,跟同类型库的比较?
        5. 这个库的核心实现原理是什么?如果让你实现这个库的某些核心功能,你会考虑怎么去实现?
        6. 你从这个库中学到什么有价值的或者说可借鉴的设计思想?
        7. Android:主流网络请求开源库的对比(Android-Async-Http、Volley、OkHttp、Retrofit)
      3. 三、响应式编程框架:RxJava实现原理
        1. RxJava到底是什么?
        2. 为什么多次执行subscribeOn(),只有第一次有效?
        3. RxJava 变换操作符 map flatMap concatMap buffer?
        4. RxJava中map和flatmap操作符的区别及底层实现
        5. 手写rxjava遍历数组。
        6. 你认为Rxjava的线程池与你们自己实现任务管理框架有什么区别?
      4. 四、图片加载框架:Glide实现原理
        1. 这个库是做什么用的?
        2. 为什么要在项目中使用这个库?
        3. 这个库都有哪些用法?对应什么样的使用场景?
        4. 这个库的优缺点是什么,跟同类型库的比较?
        5. 这个库的核心实现原理是什么?如果让你实现这个库的某些核心功能,你会考虑怎么去实现?
        6. Glide源码机制的核心思想:
        7. 你从这个库中学到什么有价值的或者说可借鉴的设计思想?
        8. Glide加载一个一兆的图片(100 * 100),是否会压缩后再加载,放到一个300 * 300的view上会怎样,800*800呢,图片会很模糊,怎么处理?
        9. 如果在一个页面中使用Glide加载了一张图片,图片正在获取中,如果突然关闭页面,这个页面会造成内存泄漏吗?
        10. 计算一张图片的大小
        11. 加载bitmap过程(怎样保证不产生内存溢出)
    2. Android中软引用与弱引用的应用场景。
      1. Android里的内存缓存和磁盘缓存是怎么实现的。
      2. LruCache原理
      3. LruCache put方法核心逻辑
      4. LruCache get方法核心逻辑
      5. LinkedHashMap原理
      6. DisLruCache原理
      7. Bitmap 压缩策略
      8. Bitmap的处理:
      9. 实现一个ImageLoader的流程
      10. Bitmap在decode的时候申请的内存如何复用,释放时机
      11. 图片库对比
      12. Fresco与Glide的对比:
      13. Bitmap如何处理大图,如一张30M的大图,如何预防OOM?
      14. Bitmap对象的理解。
      15. 对inBitmap的理解。
      16. 自己去实现图片库,怎么做?(对扩展开发,对修改封闭,同时又保持独立性,参考Android源码设计模式解析实战的图片加载库案例即可)
      17. 写个图片浏览器,说出你的思路?
    3. 五、事件总线框架:EventBus实现原理
      1. 为什么要使用事件总线机制来替代广播呢?
      2. 事件总线又是什么呢?
      3. 优缺点
      4. EventBus是基于观察者模式扩展而来的,观察者模式是什么?
      5. 每次我们在register之后,都必须进行一次unregister,这是为什么呢?
      6. EventBus2.x vs EventBus3.x
      7. RxBus vs EventBus
      8. 粘性事件
      9. eventInheritance 作用
      10. threadMode
      11. 核心原理
    4. 六、内存泄漏检测框架:LeakCanary实现原理
      1. 这个库是做什么用?
      2. 为什么要在项目中使用这个库?
      3. 这个库都有哪些用法?对应什么样的使用场景?
      4. 这个库的优缺点是什么,跟同类型库的比较?
      5. 这个库的核心实现原理是什么?如果让你实现这个库的某些核心功能,你会考虑怎么去实现?
      6. 你从这个库中学到什么有价值的或者说可借鉴的设计思想?
      7. leakCannary中如何判断一个对象是否被回收?如何触发手动gc?c层实现?
      8. BlockCanary原理:
    5. 七、依赖注入框架:ButterKnife实现原理
      1. APT
      2. ButterKnife是如何在编译时生成代码的?
    6. AOP IOC 的好处以及在 Android 开发中的应用
    7. 八、依赖全局管理框架:Dagger2实现原理
      1. 为什么要使用 Dagger2?
      2. mAndroidInjector 的作用?
    8. 九、数据库框架:GreenDao实现原理
      1. 数据库框架对比?
      2. 数据库的优化
      3. 数据库数据迁移问题
      4. 数据库索引的数据结构
      5. 平衡二叉树
      6. B-Tree
      7. B+Tree
      8. 规则:
      9. 特点:
      10. B*Tree
      11. 结论:
  • 四、热修复、插件化、模块化、组件化、Gradle、编译插桩技术
    1. 1、热修复和插件化
      1. Android中ClassLoader的种类&特点
      2. 热修补技术是怎样实现的,和插件化有什么区别?
        1. 代码热修复原理:
      3. 热修复原理:
        1. 资源修复:
        2. 代码修复:
        3. 动态链接库修复:
      4. 为什么选用插件化?
      5. 插件化的思想:
      6. 插件化的定义:
      7. 插件化的优势:
      8. 插件化框架对比:
      9. 插件化原理:
        1. Activity插件化:
        2. 资源插件化:
        3. so的插件化:
        4. 插件的加载机制方案:
    2. 2、模块化和组件化
      1. 模块化的好处
      2. 分析现有的组件化方案:
      3. 组件化开发的好处:
      4. 跨组件通信:
      5. 跨组件通信方案分析:
        1. 提供服务的业务模块:
        2. 使用服务的业务模块:
      6. 如何管理过多的路由表?
      7. ARouter路由原理:
      8. 多模块开发的时候不同的负责人可能会引入重复资源,相同的字符串,相同的icon等但是文件名并不一样,怎样去重?
    3. 3、gradle
      1. gradle熟悉么,自动打包知道么?
      2. 如何加快 Gradle 的编译速度?
      3. Gradle的Flavor能否配置sourceset?
      4. Gradle生命周期
    4. 4、编译插桩
      1. 谈谈你对AOP技术的理解?
      2. 说说你了解的编译插桩技术?
  • 五、架构设计
    1. MVC MVP MVVM原理和区别?
      1. 架构设计的目的
      2. MVC
      3. MVC缺点
      4. MVP
      5. MVP与MVC的主要区别:
      6. MVP的优点
      7. MVP的变种:Passive View
      8. MVP架构存在的问题与解决办法
      9. MVVM
      10. MVC->MVP->MVVM演进过程
      11. 三种模式的相同点
      12. 三种模式的不同点
      13. 补充:基于AOP的架构设计
      14. 最后的建议
    2. MVC的情况下怎么把Activity的C和V抽离?
    3. MVP 架构中 Presenter 定义为接口有什么好处;
    4. MVP如何管理Presenter的生命周期,何时取消网络请求?
    5. aop思想
    6. Fragment如果在Adapter中使用应该如何解耦?
    7. 项目框架里有没有Base类,BaseActivity和BaseFragment这种封装导致的问题,以及解决方法?
    8. 设计一个音乐播放界面,你会如何实现,用到那些类,如何设计,如何定义接口,如何与后台交互,如何缓存与下载,如何优化(15分钟时间)
      1. 如何设计一个大图加载框架
    9. 从0设计一款App整体架构,如何去做?
    10. 说一款你认为当前比较火的应用并设计(比如:直播APP,P2P金融,小视频等)
    11. 日志收集系统设计思路
    12. 你最优秀的工程设计项目,是怎么设计和实现的;扩展,如何做成一个平台级产品?
  • 六、音视频、图像处理面试题
    1. 1、音视频基础
    2. 2、播放器原理
    3. 3、之前有做过直播吗?你们是通过什么方式实 现直播的? 直播互动是如何做的?
      1. 视频直播流程
        1. 1.采集
        2. 2.处理
        3. 3.编码和封装
        4. 4.推流到服务器
        5. 5.服务器流分发
        6. 6.播放器流播放
    4. 4、直播中 网速比较差的条件 下,如何使画面保证流畅的效果
      1. 1 编码优化
      2. 2 传输协议优化
      3. 3 传输网络优化
      4. 4 推流、播放优化
  • 七、其它高频面试题
    1. 1、如何保证一个后台服务不被杀死?(相同问题:如何保证service在后台不被kill?)比较省电的方式是什么?
      1. 保活方案
      2. 复活方案
      3. 结论:高版本情况下可以使用弹出通知栏、双进程、无声音乐提高后台服务的保活概率。
    2. 2、Android动画框架实现原理。
    3. 3、Activity-Window-View三者的差别?
    4. 4、低版本SDK如何实现高版本api?
    5. 5、说说你对Context的理解?
    6. 6、进程保活
      1. 由A启动B Activity,A为栈内复用模式,B为标准模式,然后再次启动A或者杀死B,说说A,B的生命周期变化,为什么?
      2. Activity的启动模式有哪些?栈里是A-B-C,先想直接到A,BC都清理掉,有几种方法可以做到?这几种方法产生的结果是有几个A的实例?
    7. 7、ListView和RecyclerView系列
      1. RecyclerView和ListView有什么区别?局部刷新?前者使用时多重type场景下怎么避免滑动卡顿。懒加载怎么实现,怎么优化滑动体验。
        1. ListView、RecyclerView区别?
      2. RecyclerView与ListView缓存机制的不同
      3. 想改变listview的高度,怎么做?
      4. listview跟recyclerview上拉加载的时候分别应该如何处理?
      5. 如何自己实现RecyclerView的侧滑删除?
      6. RecyclerView的ItemTouchHelper的实现原理’
      7. 谈谈 RecyclerView 的性能优化
    8. 8、如何实现一个推送,消息推送原理?推送到达率的问题?
    9. 9、动态权限系列。
      1. 动态权限适配方案,权限组的概念
      2. Runtime permission,如何把一个预置的app默认给它权限?不要授权。
    10. 10、自定义View系列。
      1. Canvas的底层机制,绘制框架,硬件加速是什么原理,canvas lock的缓冲区是怎么回事?
      2. 双指缩放拖动大图
      3. TabLayout中如何让当前标签永远位于屏幕中间
      4. TabLayout如何设置指示器的宽度包裹内容?
      5. 自定义View如何考虑机型适配?
      6. 自定义控件优化方案
    11. 11、如何解决git冲突?
    12. 12、Jenkins 持续集成。
    13. 13、Debug跟Release的APK的区别?
    14. 14、工作中有没有用过或者写过什么工具?脚本,插件等等;比如:多人协同开发可能对一些相同资源都各自放了一份,有没有方法自动检测这种重复之类的。
    15. 15、有什么提高编译速度的方法?
    16. 16、Scroller原理。
    17. 17、Hybrid系列。
      1. webwiew了解?怎么实现和javascript的通信?相互双方的通信。@JavascriptInterface在?版本有bug,除了这个还有其他调用android方法的方案吗?
        1. Android中Java和JavaScript交互
    18. 18、如果在当前线程内使用Handler postdelayed 两个消息,一个延迟5s,一个延迟10s,然后使当前线程sleep 5秒,以上消息的执行时间会如何变化?
    19. 19、Android中进程内存的分配,能不能自己分配定额内存?
    20. 20、如何实现进程安全写文件?
    21. 21、Android长连接,怎么处理心跳机制。
    22. 22、CrashHandler实现原理?
    23. 23、SurfaceView和View的最本质的区别?
      1. SurfaceView、TextureView、SurfaceTexture、GLSurfaceView
    24. 24、Android程序运行时权限与文件系统权限
    25. 25、曲面屏的适配。
    26. 26、对文件描述符怎么理解?
    27. 27、怎么控制另外一个进程的View显示(RemoteView)?
    28. 28、如何实现右滑finish activity?
    29. 29、如何在整个系统层面实现界面的圆角效果。(即所有的APP打开界面都会是圆角)
    30. 30、非UI线程可以更新UI吗?
    31. 31、单元测试有没有做过,说说熟悉的单元测试框架?
    32. 32、如何绕过9.0限制?
      1. 如何限制?
      2. 如何绕过?
    33. 33、JetPack
  • 一、性能优化

    1、App稳定性优化

    1、你们做了哪些稳定性方面的优化?

    随着项目的逐渐成熟,用户基数逐渐增多,DAU持续升高,我们遇到了很多稳定性方面的问题,对于我们技术同学遇到了很多的挑战,用户经常使用我们的App卡顿或者是功能不可用,因此我们就针对稳定性开启了专项的优化,我们主要优化了三项:

  • Crash专项优化(=>2)
  • 性能稳定性优化(=>2)
  • 业务稳定性优化(=>3)
  • 通过这三方面的优化我们搭建了移动端的高可用平台。同时,也做了很多的措施来让App真正地实现了高可用。

    2、性能稳定性是怎么做的?