写点什么

2020Android 开发者学习路线(快速篇),分析 android 进程管理机制

用户头像
Android架构
关注
发布于: 刚刚

腾讯 SNG(一二面)

![](https://upload-images.jianshu.io/upload_images/24244313-3243a8ca4c921bd


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


9.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


  • 一面很简单,二面问的特别深,而且面试官好凶 Orz

  • 对 Android 消息机制的理解

  • Java 有哪几种创建新线程的方法及区别

  • static 修饰的方法可以被子类重写吗?为什么?

  • 如何优化一个 ListView?

  • 哪些情况会导致 OOM?

  • 如何监测内存泄露?有哪些工具?

  • 用 leak 工具监测内存泄露的原理是什么?

小米(一二面)


一面问的很详细,二面也很深入,面试官态度也超好~


  • ThreadLocal 的理解

  • HashMap HashSet HashTable 的区别?

  • 如何让 HashMap 可以线程安全?

  • Android 对 HashMap 做了优化后推出的新的容器类是什么?

  • Java 多线程之间如何通信

  • 线程池的实现机制

  • RxJava 中 map 和 flatmap 操作符的区别及底层实现

  • 对消息机制中 Looper 的理解)

  • Integer 类对 int 的优化

  • 单例模式有哪些实现方式

  • 通过静态内部类实现单例模式有哪些优点

  • synchronized volatile 关键字有什么区别?以及还有哪些同样功能的关键字

  • 算法题:两个有序链表合并

  • 界面卡顿的原因有哪些?

  • 造成 OOM/ANR 的原因?

  • Activity 与 Fragment 生命周期有何联系

  • Activity 与 Fragment 之间如何进行通信?

  • RecyclerView 与 ListView 缓存机制的不同

阿里


  • 操作系统进程间通信有哪些方法

  • 谈谈对 Socket 的理解

  • 不同架构的机器有何不同(如 x86 等)

  • TCP/UDP 比较

  • 什么时候会发生死锁

  • 操作系统层面上,线程可以加哪些锁

  • 算法题:求无序数组中的中位数

  • 二叉树深度算法

  • android 什么情况下会发生内存泄露

  • 栈在系统中的方向是怎样的?为什么?

二、 JAVA 部分总结

我觉得 JAVA 部分大致上可以分为这几大块,细想一套代码,其实就是类和组合这些类,怎么组合其实就是设计模式。而类里面包含的其实就是基本数据类型和一些数据机构来存放这些基本数据类型或者类,然后就是 JVM 去怎么加载这些类。针对上面几个部分我推荐几本书吧:


《JAVA 编程思想》《深入理解 JAVA 虚拟机 第二版》《大话设计模式》《HeadFirst 设计模式》《数据结构和算法》《图解 HTTP》



在这由于文字很多,我总结了 Android 面试所涉及到的常问范围及常问面试题免费分享给大家,文末有领取!

三 、Android 相关

Android 部分我就不分几大块了。直接列举,但是列举到的每一项都是面试经常会问到并且会延伸问的,所以需要深入的去研究。


1.四大组件有哪些,说出你对他们在 Android 系统中的作用和理解。2.Activity 生命周期,A 启动 B 两个页面生命周期怎么运行的,为什么会 这样,生命周期为什么这么设计,你有了解过吗。3.四种启动模式,内部堆栈是怎么回事,你工作中怎么使用的。4.Activity 的启动过程,这个我强烈建议每个 Android 开发人员都要清楚的知道,并且跟一下源码,几个核心类的作用。你会对 Android 有一个更好的认识。5.事件分发流程,怎么处理滑动冲突。举例:长按 ListView 的一个 Item 它变灰了。这个时候在滑动。item 恢复原来的样子,这个时候他们内部的事件传递是什么样子。有很多种问法,所以你一定要搞清楚。6.自定义 View,View 的绘制流程。onMeasure,onLayout,onDraw 都是什么作用。ViewGroup 是怎么分发绘制的。onDraw 里面怎么去做绘制,Canvas,Path,Paint 你都需要了解。并且配合 ValueAnimtor 或者 Scroller 去实现动画。有时候面试的会突发奇想问你 ViewGroup 是树形结构,我想知道树的深度,你怎么计算,突然就变成了一个数据结构和算法的题。7.Bitmap 和 Drawable8.Animation 和 Animator9.LinearLayout、RelativeLayout、FrameLayout 三种常用布局的特性,他在布局的时候是怎么计算的。效率如何。CoordinatorLayout 配合 AppbarLayout 的使用,以及自定义 Behavior。ConstraintLayout 的使用。用来减少层级。10.Handler 消息机制,推荐看一下 Looper 的源码 11.进程间通信,Binder 机制 12.AsyncTask 源码看一下。13.图片的压缩处理,三级缓存,Lru 算法 14.分辨率和屏幕密度,以及计算一个图片大小。mdpi,hdpi 的关系和比例。15.优化,内存优化,布局优化,启动优化,性能优化。内存泄露,内存溢出。怎么优化,用了什么工具,具体怎么做的。16.listView 和 RecycleView 对比,以及缓存策略。17.JNI(很少问)18.MVC,MVP,MVVM19.开源框架 Okhttp,Glide,EventBus,Rxjava 等,以及 JetPack 下的开源库,要会用,还说说出一些东西,推荐 Retrofit,Okhttp,Glide,EventBus 这些看一下源码。20.RecyclerView 四大块,能实现什么效果,大致怎么实现的,心里要有数 21.DecorView,Window,WindowManager,PhoneWindow 关系,以及个子的职责。加分项:Kotlin,Gradle,Flutter,组件化,插件化,热修复。


四、 Android 相关总结

上面的列的相关内容,看似很短一句话,但是每一项都需要你深入的去研究,要了解原理,最好去看一下源码实现。当然还有一些是我没写到的,可能是我写的时候没有想起来,并不代表他们不重要,你也需要重视,再来一波推荐:


《Android 开发艺术探索》强烈推荐,建议细细的读,如果粗心大意建议读两到三遍,针对性的读。《Android 进阶之光》《高级 Android 开发强化实战》《Android 组件化架构》《Android 热修复技术原理》《Android 插件化开发指南》


网络框架有哪些?他们之间的区别是什么?(这个也会问到)Xutils


这个框架非常全面,可以进行网络请求,可以进行图片加载处理,可以数据储存,还可以对 view 进行注解,使用这个框架非常方便,但是缺点也是非常明显的,使用这个项目,会导致项目对这个框架依赖非常的严重,一旦这个框架出现问题,那么对项目来说影响非常大的


OKhttp


Android 开发中是可以直接使用现成的 api 进行网络请求的。就是使用 HttpClient,HttpUrlConnection 进行操作。okhttp 针对 Java 和 Android 程序,封装的一个高性能的 http 请求库,支持同步,异步,而且 okhttp 又封装了线程池,封装了数据转换,封装了参数的使用,错误处理等。API 使用起来更加的方便。但是我们在项目中使用的时候仍然需要自己在做一层封装,这样才能使用的更加的顺手。


Volley


Volley 是 Google 官方出的一套小而巧的异步请求库,该框架封装的扩展性很强,支持 HttpClient、HttpUrlConnection, 甚至支持 OkHttp,而且 Volley 里面也封装了 ImageLoader,所以如果你愿意你甚至不需要使用图片加载框架,不过这块功能没有一些专门的图片加载框架强大,对于简单的需求可以使用,稍复杂点的需求还是需要用到专门的图片加载框架。Volley 也有缺陷,比如不支持 post 大数据,所以不适合上传文件。不过 Volley 设计的初衷本身也就是为频繁的、数据量小的网络请求而生。


Retrofit


Retrofit 是 Square 公司出品的默认基于 OkHttp 封装的一套 RESTful 网络请求框架,RESTful 是目前流行的一套 api 设计的风格, 并不是标准。Retrofit 的封装可以说是很强大,里面涉及到一堆的设计模式,可以通过注解直接配置请求,可以使用不同的 http 客户端,虽然默认是用 http ,可以使用不同 Json Converter 来序列化数据,同时提供对 RxJava 的支持,使用 Retrofit + OkHttp + RxJava + Dagger2 可以说是目前比较潮的一套框架,但是需要有比较高的门槛。


Volley VS OkHttp


Volley 的优势在于封装的更好,而使用 OkHttp 你需要有足够的能力再进行一次封装。而 OkHttp 的优势在于性能更高,因为 OkHttp 基于 NIO 和 Okio ,所以性能上要比 Volley 更快。IO 和 NIO 这两个都是 Java 中的概念,如果我从硬盘读取数据,第一种方式就是程序一直等,数据读完后才能继续操作这种是最简单的也叫阻塞式 IO,还有一种是你读你的,程序接着往下执行,等数据处理完你再来通知我,然后再处理回调。而第二种就是 NIO 的方式,非阻塞式, 所以 NIO 当然要比 IO 的性能要好了,而 Okio 是 Square 公司基于 IO 和 NIO 基础上做的一个更简单、高效处理数据流的一个库。理论上如果 Volley 和 OkHttp 对比的话,更倾向于使用 Volley,因为 Volley 内部同样支持使用 OkHttp,这点 OkHttp 的性能优势就没了, 而且 Volley 本身封装的也更易用,扩展性更好些。


OkHttp VS Retrofit


毫无疑问,Retrofit 默认是基于 OkHttp 而做的封装,这点来说没有可比性,肯定首选 Retrofit。


Volley VS Retrofit


这两个库都做了不错的封装,但 Retrofit 解耦的更彻底,尤其 Retrofit2.0 出来,Jake 对之前 1.0 设计不合理的地方做了大量重构, 职责更细分,而且 Retrofit 默认使用 OkHttp,性能上也要比 Volley 占优势,再有如果你的项目如果采用了 RxJava ,那更该使用 Retrofit 。所以这两个库相比,Retrofit 更有优势,在能掌握两个框架的前提下该优先使用 Retrofit。但是 Retrofit 门槛要比 Volley 稍高些,要理解他的原理,各种用法,想彻底搞明白还是需要花些功夫的,如果你对它一知半解,那还是建议在商业项目使用 Volley 吧。


18.熟悉哪些设计模式?


按照自己的实际情况回答,当然是越多越好。比如我自己也就熟悉个单例模式。

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
2020Android开发者学习路线(快速篇),分析android进程管理机制