Android校招面经干货分享(头条、快手、小米、美团)|掘金技术征文

2,231 阅读7分钟

先说下个人情况吧,双非本科大四,基本从大一下学期开始自学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吧。

附掘金秋招征文大赛链接