开启安卓虚拟机后一直停在控制台页面_金九银十要来了?不要慌,这些安卓 BAT高级面试题刷一刷...

52f7be49f42f0fe0d1489ecacce095a7.png

已经九月中旬了,差不多很多程序员都准备在这个时候跳槽或者找工作了。。。

如果想变得优秀那就去看那些优秀的人在学什么,做什么,想尽一切办法和他们交流;多出去看看这个世界,然后把自己逼到往死里学。

这篇攻略是我从事开发工作七八年来,去面试,以及面试别人的经验总结。其中大部分都是大企业面试常问的面试题,可以对照这查漏补缺,当然了,这里所列的肯定不可能覆盖全部方式,希望对大家之后找工作有帮助!

一、性能优化

App稳定性优化

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

App启动速度优化

  • 启动优化是怎么做的?
  • 是怎么异步的,异步遇到问题没有?
  • 启动优化有哪些容易忽略的注意点?
  • 版本迭代导致的启动变慢有好的解决方式吗?
  • 开放问题:如果提高启动速度,设计一个延迟加载框架或者sdk的方法和注意的问题

App内存优化

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

App绘制优化

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

App瘦身网络优化

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

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

  • 提高app安全性的方法?
  • 安卓的app加固如何做?
  • 安卓的混淆原理是什么?
  • 谈谈你对安卓签名的理解

为什么WebView加载会慢呢?如何优化自定义ViewFC(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和WindowManagerWMS是如何管理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?
54d04787d96ea45d9910a64e6352b350.png

三、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-TreeB+TreeB*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限制?
  • 对文件描述符怎么理解?
  • 如何实现进程安全写文件?

结尾

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

最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上我搜集整理的2019-2020BAT 面试真题解析,我把大厂面试中常被问到的技术点整理成了PDF,包知识脉络 + 诸多细节。

节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

一键领取:【Android超硬核面试资料】

《960全网最全Android开发笔记》

0f585bfd542ecafc2eba4ed5b25e4ca0.png

《379页Android开发面试宝典》

历时半年,我们整理了这份市面上最全面的安卓面试题解析大全
包含了腾讯、百度、小米、阿里、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。熟悉本文中列出的知识点会大大增加通过前两轮技术面试的几率。

如何使用它?

1.可以通过目录索引直接翻看需要的知识点,查漏补缺。
2.五角星数表示面试问到的频率,代表重要推荐指数

e524625aa8460e0be5c66a679824876d.png

《507页Android开发相关源码解析》

只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。

真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。

6a48017e5db0ce5e9141fcda2ee97f74.png

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

8358eb1697f31f0f426f444c279a1c89.png

资料太多,全部展示会影响篇幅,暂时就先列举这些部分截图;

需要的朋友,直接转发+点赞+私信回复【资料】一键领取

最后,祝愿即将跳槽和准备求职的大家都能找到一份好的工作!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值