先说下我的状况吧,双非本科大四,基本从大一下学期开始自学Android,有美图公司两个月实习经验,而后截止到如今面了头条、小米、快手和美团。下面是本身整理的一些面经,基本我能回忆起来的都写上了,但愿能帮到你们。android
头条四面(跪)
头条这个是在校招提早批前大概两周面的,很感谢学长给的内推机会,虽然最后玄学挂掉了,不过仍是很不错的面试体验。面试
一面
- 层次遍历二叉树
- 改变数组使其奇数在前偶数在后且相对顺序不变
- Activity四种启动模式
- 俩App的activtiy很奇葩的互相启动来启动去,而后依次按返回键判断当前activity
- 强软弱虚四种启动类型
- Handler原理
- EventBus源码
- 线程通讯
- 广播
- 服务的分类
- 如何与服务交互
- 如何终止线程
- 服务所在的线程
- IntentService的原理以及好处
二面
- Binder原理
- 服务相关
- 说说设计模式而且结合Android源码解释
- OkHttp源码深刻讲解
- 责任链模式
- 事件分发
- 以及几个一面稍微重合的问题,就不写出来了
三面
旷日持久的Leader面,问的问题是在太多,下面是我回忆起来的一部分。并且Leader面通常问一个问题会问的愈来愈深,知道你打不出来为止。当时Leader还说我面的不错,而后就给挂掉了。。。算法
计组
- Arm与X86的区别
- Android使用的是哪儿一个
- RISC与CISC
- 二者的优劣
- 大小端问题
- 原码,反码和补码
- 补码的优点
- 浮点数的表示
- 浮点数的运算
计网
- TCP与OSI相比少了哪儿几层
- 表示层和会话层的功能
- TCP与UDP的区别
- ARQ协议
- 拥塞控制算法
- 路由器与交换机的区别
编译原理
软件工程
数据结构
- HahMap的原理
- 冲突,扩容等。。
- Java中equal与hashCode的意义
- 若是hashCode返回相同的值的后果
- 若是equal返回true形成的后果
- Set,Map讲讲原理
操做系统(问的很细)
- 操做系统的功能
- 进程与线程的区别
- CPU调度的实现
- 线程组成
- TCB的组成
- 线程怎样映射到硬件实现
- 线程同步
- Sync与Lock的区别
- Android多进程
- 如何实现多进程
- 多进程的必要性
- 多进程通讯
- 详细讲每种多进程通讯以及相应优缺点
- 进程调度
Android
- Glide源码
- Glide与其余图片加载框架的优劣
- 三级缓存机制
- Lru算法
- 详细讲解Glide的图片缓存
Hr面
快手二面(跪)
只能说快手的画风清奇,难度很大。设计模式
一面+二面
- 二叉树交叉层次遍历
- Activity四种启动模式
- 任务栈相关
- 消息分发
- 如何使当前消息分发中止
- EventBus扯很久,原理,优劣,使用场景
- MVP,MVC,MVVM的对比,以及如何去改进
- OkHttp源码
- Glide源码
- RxJava基础
- 手写RxJava实现十个请求当请求所有完成打印输出,如有错误打印中止请求,而且处理线程切换
- 手写AsyncTask
- 事件分发机制
- 如何实现一个不规则遮罩层实现遮罩层只盖住一部分,而未遮住部分能够响应事件(能够有多种方法)
- 自定义View流程
- 如何自定义View实现随着百分比改变View的背景颜色(例以下载进度百分之三十,左边百分之三十是黑色,右面为白色)
- 跨进程相关
- Binder原理
小米五面(offer)
一面+二面
- 手写快排
- 最大子序列
- Activity的四个启动方法
- Activity的生命周期
- Fragment的生命周期
- Fragment相比Activity有什么优劣
- Fragment和Activity的交互
- Fragment的使用场景
- 本地广播的用法
- 本地广播的原理
- 如何让广播只发送给特定的App
- Intent如何传递大文件
- Intent传递超出范围的文件的后果
- 如何传递大文件
- 如何避免大图片OOM
- 图片压缩的原理
- Glide源码
- 图片的三级缓存
- Lru算法
- EventBus原理
- RemoteView使用场景及其方法
- RemoteView能使用的View的范围
- Notification可否使用自定义View以及缘由
- RemoteView原理
- 简述事件分发机制
- 事件分发中的方法名、方法参数以及不一样的返回值的意义
- ListView中如何使不一样的Item加载不一样的样式
- ListView中convertview的做用以及意义
- RecyclerView与ListView的区别
- 如何解决ListView异步加载图片的问题
- ContentProvider的用法,详细到方法
- 跨进程通讯的方式
- AIDL原理
- Binder原理,详细到方法
- 启动一个Server和绑定Server的区别
- 举例Server和绑定Server的不一样使用场景
- IntentServer与普通Server的区别
- IntentServer的使用场景
- IntentServer原理
- 如何保证Server不被杀死
- 实现多线程的几种方法
- 几种动画
- 如何本身去实现一个动画,具体到方法
- 属性动画的原理
一面和二面是连着的,而后面完以后面试官告诉我leader不在,让我等消息。。。我当时还觉得挂掉了,还好几天后接到了面试电话。不过话说一面二面的题量可真大。数组
三面
- 两个链表寻找交叉
- 探讨Json解析器的实现(词法分析 语法分析 采用何种数据结构而且为何等问题)
- 图片的三级缓存
- MVC,MVP,MVVC区别
- Android中使用MVP而不用MVC的缘由
- 讲解MVP(手写代码)
- MVVM与DataBinding
- 实现监听手机拍照和截屏,悄悄地将一些数据隐藏进入图片而且能够经过图片恢复数据
交叉面
- Fragment与Activity的生命周期
- Fragment在哪儿个生命周期方法调用后真正加入Activity,在哪儿个生命周期方法getActivity()返回null或者不为null,为何
- 讲一下实习中以为比较不错的东西
- 如下是实习项目相关
- 图片压缩
- 图片缓存
- 高斯模糊
- 高斯模糊动态效果
- 以上是实习项目相关
- 双栈实现队列
- Java内存模型
- GC算法
- 项目中遇到的内存泄漏类型
- 解决内存泄漏问题的方法
- MAT
- LeakCanary
- Handler内存泄漏的缘由
- 软引用与弱引用
- 虚拟机栈以及栈帧
- Binder原理
- Java中的同步方法
- Sync与Lock的区别
- Sync的原理
- Lock的内部实现
- AQS的内部实现
- CAS
- startActivity框架层实现
- ActivityMamagerService
- ApplicationThread
五面
美团三面(offer)
一面+二面
- 0~n求1的个数
- n个点,要求画一个圆,使其能够覆盖通常的点
- Sql多表查询
- 消息分发机制原理
- 线程通讯
- 四种线程池的配置
- 线程池内部实现
- JMM
- GC算法
- 为何要Stop The Wrold
- 为何屡次GC会卡顿
- 内存泄露原理以及如何发现内存泄露
- 自定义View
- 举例measureSpec在父布局和当前布局分别使用精确数值和matchparent和wrapcontent的时候分别是哪儿种Mode,里面的数值又分别为多少
三面
- 基本都是开放题目,也没什么固定答案
- 以及谈谈之后的工做
到这里个人秋招基本已经结束了,但愿这篇面经能帮到你们拿到喜欢的offer吧。缓存
附掘金秋招征文大赛连接数据结构