关于android:金三银四要来了不要慌Android高级面试题刷一刷

63次阅读

共计 5743 个字符,预计需要花费 15 分钟才能阅读完成。

三月底了,尽管疫情又开始有所蔓延,然而各大公司仍然是失常运行的状态,金三银四该跳还得跳。。。

如果想变得优良那就去看那些优良的人在学什么,做什么,想尽一切办法和他们交换;多进来看看这个世界,而后把本人逼到往死里学。

这篇攻略是我从事开发工作七八年来,去面试,以及面试他人的经验总结。其中大部分都是大企业面试常问的面试题,能够对照这查漏补缺,当然了,这里所列的必定不可能笼罩全副形式,心愿对大家之后找工作有帮忙!

一、性能优化

App 稳定性优化

  • 你们做了哪些稳定性方面的优化?
  • 性能稳定性是怎么做的
  • 业务稳定性如何保障?
  • 如果产生了异常情况,怎么疾速止损?

App 启动速度优化

  • 启动优化是怎么做的?
  • 是怎么异步的,异步遇到问题没有?
  • 启动优化有哪些容易疏忽的留神点?
  • 版本迭代导致的启动变慢有好的解决形式吗?
  • 凋谢问题:如果进步启动速度,设计一个提早加载框架或者 sdk 的办法和留神的问题

App 内存优化

  • 你们内存优化我的项目的过程是怎么做的?
  • 你做了内存优化最大的感触是什么?
  • 如何检测所有不合理的中央?

App 绘制优化

  • 你在做布局优化的过程中用到了哪些工具?
  • 布局为什么会导致卡顿,你又是如何优化的?
  • 做完布局优化有哪些成绩产出?
  • 你是怎么做卡顿优化的?
  • 你是怎么样自动化的获取卡顿信息?
  • 卡顿的一整套解决方案是怎么做的?
  • TextView setText 耗时的起因,对 TextView 绘制层源码的了解?
  • 凋谢问题:优化一个列表页面的关上速度和流畅性

App 瘦身
网络优化

  • 挪动端获取网络数据优化的几个点
  • 客户端网络安全实现
  • 设计一个网络优化计划,针对挪动端弱网环境

App 电量优化
安卓的平安优化

  • 进步 app 安全性的办法?
  • 安卓的 app 加固如何做?
  • 安卓的混同原理是什么?
  • 谈谈你对安卓签名的了解

为什么 WebView 加载会慢呢?
如何优化自定义 View
FC(Force Close)什么时候会呈现?
Java 多线程引发的性能问题,怎么解决
TraceView 的实现原理,剖析数据误差起源
是否应用过 SysTrace,原理的理解?
mmap + native 日志优化?

二、Android Framework 相干

Android 零碎架构

  • 应用程序
  • Java API 框架
  • 零碎运行库
  • 硬件形象层 (HAL)
  • Linux 内核

View 的事件散发机制?滑动抵触怎么解决?

  • 理解 Activity 的形成
  • 触摸事件的类型
  • 事件散发流程
  • ACTION_CANCEL 什么时候触发,触摸 button 而后滑动到内部抬起会触发点击事件吗,再滑动回去抬起会么?
  • 如何解决 View 的事件抵触?举个开发中遇到的例子?

View 的绘制流程?

  • 理解绘制的整体流程
  • 了解 MeasureSpec
  • 如何依据 MeasureSpec 去实现一个瀑布流的自定义 ViewGroup?
  • View 的绘制流程之 Layout
  • View 的绘制流程之 Draw
  • Requestlayout,onlayout,onDraw,DrawChild 区别与分割?

跨过程通信

  • Android 中过程和线程的关系?区别?
  • 如何开启多过程?利用是否能够开启 N 个过程?
  • 为何须要 IPC?多过程通信可能会呈现的问题?
  • Android 中 IPC 形式、各种形式优缺点?
  • 讲讲 AIDL?如何优化多模块都应用 AIDL 的状况?
  • 为什么抉择 Binder?
  • Binder 机制的作用和原理?
  • Binder 框架中 ServiceManager 的作用?
  • Binder 的残缺定义
  • 手写实现简化版 AMS(AIDL 实现)
  • 简略讲讲 binder 驱动吧?
  • 跨过程传递大内存数据如何做?

Android 系统启动流程是什么?(提醒:init 过程 -> Zygote 过程 –> SystemServer 过程 –> 各种零碎服务 –> 利用过程)

  • 零碎是怎么帮咱们启动找到桌面利用的?

启动一个程序,能够主界面点击图标进入,也能够从一个程序中跳转过来,二者有什么区别?
AMS 家族重要术语解释
App 启动流程(Activity 的冷启动流程)
ActivityThread 工作原理
说下四大组件的启动过程,四大组件的启动与销毁的形式
播送发送和接管的原理理解吗?
AMS 是如何治理 Activity 的?
了解 Window 和 WindowManager
WMS 是如何治理 Window 的?
大体说清一个利用程序安装到手机上时产生了什么?
Android 的打包流程?(即形容清点击 Android Studio 的 build 按钮后产生了什么?)apk 里有哪些货色?签名算法的原理?

  • apk 打包流程
  • apk 组成
  • 为什么要签名?
  • 什么是签名?
  • 签名和校验的次要过程
  • keystore 和证书格局
  • jarsigner 和 apksigner 的区别
  • 在签名时,除了要指定 keystore 文件和明码外,也要指定 alias 和 key 的明码,这是为什么呢?
  • Android Apk V1 签名原理

说下安卓虚拟机和 java 虚拟机的原理和不同点?(JVM、Davilk、ART 三者的原理和区别)

  • JVM 和 Dalvik 虚拟机的区别
  • Android2 个虚拟机的区别(一个 5.0 之前,一个 5.0 之后)
  • ART 和 Davlik 中垃圾回收的区别?

安卓采纳主动垃圾回收机制,请说下安卓内存治理的原理?

  • 开放性问题:如何设计垃圾回收算法?

Android 中 App 是如何沙箱化的, 为何要这么做?
一个图片在 app 中调用 R.id 后是如何找到的?
JNI

  • Java 调用 C ++
  • C++ 调用 Java
  • 如何在 jni 中注册 native 函数,有几种注册形式?
  • so 的加载流程是怎么的,生命周期是怎么的?
    请介绍一下 NDK?

三、Android 优良三方库源码

你我的项目中用到哪些开源库?说说其实现原理?

网络底层框架:OkHttp 实现原理

  • 这个库是做什么用的?
  • 为什么要在我的项目中应用这个库?
  • 这个库都有哪些用法?对应什么样的应用场景?
  • 这个库的优缺点是什么,跟同类型库的比拟?
  • 这个库的外围实现原理是什么?如果让你实现这个库的某些外围性能,你会思考怎么去实现?
  • 你从这个库中学到什么有价值的或者说可借鉴的设计思维?
  • OKhttp 针对网络层有哪些优化?
  • 网络申请缓存解决,okhttp 如何解决网络缓存的?
  • HttpUrlConnection 和 okhttp 关系?
  • Volley 与 OkHttp 的比照
  • 本人去设计网络申请框架,怎么做?
  • 从网络加载一个 10M 的图片,说下注意事项?
  • http 怎么晓得文件过大是否传输结束的响应?
  • 谈谈你对 WebSocket 的了解?
  • WebSocket 与 socket 的区别?
  • 网络封装框架:Retrofit 实现原理
  • 这个库是做什么用的?
  • 为什么要在我的项目中应用这个库?
  • 这个库都有哪些用法?对应什么样的应用场景?
  • 这个库的优缺点是什么,跟同类型库的比拟?
  • 这个库的外围实现原理是什么?如果让你实现这个库的某些外围性能,你会思考怎么去实现?
  • 你从这个库中学到什么有价值的或者说可借鉴的设计思维?
  • Android:支流网络申请开源库的比照(Android-Async-Http、Volley、OkHttp、Retrofit)
  • 响应式编程框架:RxJava 实现原理
  • RxJava 变换操作符 map flatMap concatMap buffer?
  • 你认为 Rxjava 的线程池与你们本人实现工作治理框架有什么区别?
  • 图片加载框架:Glide 实现原理
  • 这个库是做什么用的?
  • 为什么要在我的项目中应用这个库?
  • 这个库都有哪些用法?对应什么样的应用场景?
  • 这个库的优缺点是什么,跟同类型库的比拟?
  • 这个库的外围实现原理是什么?如果让你实现这个库的某些外围性能,你会思考怎么去实现?
  • Glide 源码机制的核心思想
  • 你从这个库中学到什么有价值的或者说可借鉴的设计思维?
  • Glide 如何确定图片加载结束?
  • Glide 应用什么缓存?
  • Glide 内存缓存如何管制大小?
  • 计算一张图片的大小
  • 加载 bitmap 过程(怎么保障不产生内存溢出)
  • Android 里的内存缓存和磁盘缓存是怎么实现的
  • LruCache 原理
  • LruCache put 办法外围逻辑
  • LruCache get 办法外围逻辑
  • LinkedHashMap 原理
  • DisLruCache 原理
  • Bitmap 压缩策略
  • Bitmap 的解决
  • 实现一个 ImageLoader 的流程
  • Bitmap 在 decode 的时候申请的内存如何复用,开释机会
  • 图片库比照
  • Fresco 与 Glide 的比照
  • Bitmap 如何解决大图,如一张 30M 的大图,如何预防 OOM?
  • Bitmap 对象的了解。
  • 对 inBitmap 的了解。
  • 本人去实现图片库,怎么做?(对扩大开发,对批改关闭,同时又放弃独立性,参考 Android 源码设计模式解析实战的图片加载库案例即可)
  • 写个图片浏览器,说出你的思路?
  • 事件总线框架:EventBus 实现原理
  • 内存透露检测框架:LeakCanary 实现原理
  • 这个库是做什么用?
  • 为什么要在我的项目中应用这个库?
  • 这个库都有哪些用法?对应什么样的应用场景?
  • 这个库的优缺点是什么,跟同类型库的比拟?
  • 这个库的外围实现原理是什么?如果让你实现这个库的某些外围性能,你会思考怎么去实现?
  • 你从这个库中学到什么有价值的或者说可借鉴的设计思维?
  • leakCannary 中如何判断一个对象是否被回收?如何触发手动 gc?c 层实现?
  • 依赖注入框架:ButterKnife 实现原理
  • 依赖全局治理框架:Dagger2 实现原理
  • 数据库框架:GreenDao 实现原理
  • 数据库框架比照?
  • 数据库的优化
  • 数据库数据迁徙问题
  • 数据库索引的数据结构
  • 均衡二叉树
  • B-Tree
  • B+Tree
  • B*Tree

四、热修复、插件化、模块化、组件化、Gradle、编译插桩技术

1、热修复和插件化

  • Android 中 ClassLoader 的品种 & 特点
  • 热修补技术是怎么实现的,和插件化有什么区别?
  • 热修复原理
  • 为什么选用插件化?
  • 插件化的思维
  • 插件化的定义
  • 插件化的劣势
  • 插件化框架比照
  • 插件化原理

2、模块化和组件化

  • 模块化的益处
  • 剖析现有的组件化计划
  • 组件化开发的益处
  • 跨组件通信
  • 跨组件通信计划剖析
  • 如何治理过多的路由表?
  • ARouter 路由原理
  • 多模块开发的时候不同的负责人可能会引入反复资源,雷同的字符串,雷同的 icon 等然而文件名并不一样,怎么去重?

3、gradle

  • gradle 相熟么,主动打包晓得么?
  • 如何放慢 Gradle 的编译速度?
  • Gradle 的 Flavor 是否配置 sourceset?
  • Gradle 生命周期

4、编译插桩

  • 谈谈你对 AOP 技术的了解?
  • 说说你理解的编译插桩技术?

五、架构设计

  • MVC MVP MVVM 原理和区别?
  • MVC 的状况下怎么把 Activity 的 C 和 V 抽离?
  • MVP 架构中 Presenter 定义为接口有什么益处;
  • MVP 如何治理 Presenter 的生命周期,何时勾销网络申请?
  • aop 思维
  • Fragment 如果在 Adapter 中应用应该如何解耦?
  • 我的项目框架里有没有 Base 类,BaseActivity 和 BaseFragment 这种封装导致的问题,以及解决办法?
  • 设计一个音乐播放界面,你会如何实现,用到那些类,如何设计,如何定义接口,如何与后盾交互,如何缓存与下载,如何优化(15 分钟工夫)
  • 从 0 设计一款 App 整体架构,如何去做?
  • 说一款你认为以后比拟火的利用并设计(比方:直播 APP,P2P 金融,小视频等)
  • 实现一个库,实现日志的实时上报和提早上报两种性能,该从哪些方面思考?
  • 你最优良的工程设计我的项目,是怎么设计和实现的;扩大,如何做成一个平台级产品?

六、其它高频面试题

  • 如何保障一个后盾服务不被杀死?(雷同问题:如何保障 service 在后盾不被 kill?)比拟省电的形式是什么?
  • Android 动画框架实现原理
  • Activity-Window-View 三者的差异?
  • 低版本 SDK 如何实现高版本 api?
  • 说说你对 Context 的了解?
  • Android 的生命周期和启动模式
  • ListView 和 RecyclerView 系列
  • 想扭转 listview 的高度,怎么做?
  • listview 跟 recyclerview 上拉加载的时候别离应该如何解决?
  • 如何本人实现 RecyclerView 的侧滑删除?
  • RecyclerView 的 ItemTouchHelper 的实现原理
  • 如何实现一个推送,音讯推送原理?推送达到率的问题?
  • 动静权限系列
  • 自定义 View 系列
  • Canvas 的底层机制,绘制框架,硬件加速是什么原理,canvas lock 的缓冲区是怎么回事?
  • 双指缩放拖动大图
  • TabLayout 中如何让以后标签永远位于屏幕两头
  • TabLayout 如何设置指示器的宽度包裹内容?
  • 自定义 View 如何思考机型适配?
  • 对谷歌新推出的 Room 架构。
  • 没有给权限如何定位,特定机型定位失败,如何解决?
  • Debug 跟 Release 的 APK 的区别?
  • android 文件存储,各版本存储地位的权限管制的演进,内部存储,外部存储
  • 有什么进步编译速度的办法?
  • Scroller 原理。
  • Hybrid 系列
  • 如果在以后线程内应用 Handler postdelayed 两个音讯,一个提早 5s,一个提早 10s,而后使以后线程 sleep 5 秒,以上音讯的执行工夫会如何变动?
  • Android 中过程内存的调配,能不能自己调配定额内存?
  • 下拉状态栏是不是影响 activity 的生命周期,如果在 onStop 的时候做了网络申请,onResume 的时候怎么复原
  • Android 长连贯,怎么解决心跳机制
  • CrashHandler 实现原理?
  • SurfaceView 和 View 的最实质的区别?
  • Android 程序运行时权限与文件系统权限
  • 曲面屏的适配。
  • TextView 调用 setText 办法的外部执行流程。
  • 怎么管制另外一个过程的 View 显示(RemoteView)?
  • 如何实现右滑 finish activity?
  • 如何在整个零碎层面实现界面的圆角成果。(即所有的 APP 关上界面都会是圆角)
  • 非 UI 线程能够更新 UI 吗?
    如何解决 git 抵触?
  • 单元测试有没有做过,说说相熟的单元测试框架?
    Jenkins 继续集成。
  • 工作中有没有用过或者写过什么工具?脚本,插件等等;比方:多人协同开发可能对一些雷同资源都各自放了一份,有没有办法自动检测这种反复之类的。
  • 如何绕过 9.0 限度?
  • 对文件描述符怎么了解?
  • 如何实现过程平安写文件?

结尾

学习技术是一条慢长而艰辛的路线,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在保持!

以上内容均放在了开源我的项目:我的 github 中已收录,外面蕴含不同方向的自学 Android 路线、面试题汇合 / 面经、及系列技术文章等,资源继续更新中 …

正文完
 0