android面经 - 字节,快手,美团,支付宝,oppo,滴滴

561 阅读6分钟

这是去年10-12月各大公司面经,一直想发出来分享下。除了快手都发offer了,最后选择了字节

选择字节的原因有两点吧

  1. 我是一个理想主义者,一直衷心于教育赛道,之前在网易也是做教育的,在字节也在大力教育部门。
  2. 这个岗位在成都。哈哈

下面是我的面经

字节跳动

一面

MVC,MMVM,MVP

MMVM如何解决MVP中存在的问题

内存泄漏

内存泄漏的几种情况

LeakCancary分析内存泄漏的原理

手写单例模式,并分析

算法

找到两个数组中的两个元素的和等于某个值

二面

activity

onSaveInstance

service

StartService和BindService的生命周期

求浮点数的平方根

Binder的原理

设计模式

工厂模式

抽象工厂模式和普通工厂模式

建造者模式

启动模式有几种

共享内存原理

java能实现共享内存么

kotlin协程的四个dispatcher及区别

三面

window,decorview,ViewRootImpl的关系

面试官 想让你回答如何window和windowManager如何联系的。viewRootImpl是联系window和decorview的纽带

进程间的通信方式

AIDL的用法

用法和原理

事件分发

onIntercept在哪用

事件分发底层的产生

RecycleView的用法

里面的各种Manager作用

wake lock:使屏幕常亮

Activity是如何被限制到状态栏和导航栏之下的

canvas

canvas的save和restore的作用

canvas的density有什么作用

vsync

vsync是如何生成的

android中异步一般怎么实现

android中内存泄漏发生的情况

如何去获取view的宽高

悬浮窗

如何实现一个悬浮窗

一个悬浮窗悬浮在顶层,覆盖了底层的app的启动图标,如果让事件启动图标接收到click事件

Android M之前与之后的权限变化

ContentProvider

使用

如何找到该contentProvider的

RxJava中map和flatmap的区别

view的绘制

viewgroup是如何刷新的

onMeasure,onlayout,onDraw分别起什么作用

onLayout的时候可以layout自己么?

AndroidManifest

<uses-permission>{=html}和<permission>{=html}的区别

一个是系统的权限,一个是自定义的权限

三面

两道算法

洗牌问题

接雨水

两道设计

面向对象原则

用代码描述你觉得最有设计感的项目

快手

一面

viewBinding的原理

Recycleview滑动怎么优化

缓存设计

一级缓存和二级缓存的区别
LayoutManager原理

绘制

onMeasure描述一下

onDraw描述一下

invalidate一定会调用onDraw么

事件分发

事件是由谁分发的

fragment

销毁与恢复

与Activity的通信

Activity

Activity的生命周期

销毁与恢复

国际化插件

hashmap

2^n的原因(有多个原因)

扩容

22反转链表

二面

协程原理

rxjava原理

leakcanary

如何分析引用链

线程池

给你一堆数据,如何画曲线?

事件分发

责任链模式

汽车加油问题

三面

有序无序时删除链表的重复节点

都删除

保留一个

如何实现快手和抖音的整屏滑动效果

如何让运营能看懂社区文章

项目中的难点(问得很细)比如有没有遇到什呢难点呀

美团

一面不能讲4.4.0大改版​

一面

线程池原理,几个参数

线程池里面的阻塞队列是什么类型

设计模式

状态模式和策略模式的区别

sleep和wait的区别

android序列化

Parcelable与Serializable

Handler

Hashmap

深拷贝与浅拷贝

如何实现深拷贝

sync和Reenterlock

遇到异常的区别

可重入锁和不可重入锁

funA,funB,funC,funD

postInvalidate和Invalidate的区别

requestLayout

两个有序链表合并

anr 分类及原理

二面

基本都是问的项目

三面

基本问的项目

支付宝

一面

项目

viewmodel原理

用了哪些jetpack的东西

livedata为何具有生命周期感知能力

二面

三面

shareperference如何保证线程安全,

为什么不是进程安全的

如何实现进程安全的

viewmodel是如何解决内存泄漏问题的?能解决么

mmkv共享内存和binder的区别

magic ocr项目

有做过多线程开发么

room如何实现orm的

kotlin和java产物一样么有

各种图片格式的区别

如何保证内存与文件的同步

开一个线程commit,commit不用加锁么?

bitmap

怎么确定bitmap被复用了

一张图片占用的内存大小

四面

动态加载一个recycleview item的方式

动态下发国际化

阿里(简历被捞了 淘宝特价版)

项目

进程通信方式了解哪些

binder原理

服务端了解么

View的显示原理?

Https原理

说下中间人攻击

Flutter了解么

前端了解么?

国际化文案的困难

leakcanary原理

Oppo(Camera应用开发)

问了太多关于底层渲染的东西

一面

surfaceView为撒更快

surfaceview和textureview的区别

surfaceView和普通View的区别

blog.csdn.net/YuDBL/artic…

sendBroadCast会阻塞么?

多对多项目的设计

这个不好讲项目的难点

内存的分类

android的广播

你对android相机系统怎么理解?

内存泄漏分析

二面

基本问的项目,然后聊了聊

快手(被捞了,消费事业部)

一面

recycleView的多级缓存

cacheView如何去确定该用哪个viewHolder

每层缓存的容量是多少

view绘制流程

Relativelayout如何会测量几次子view,为什么?

测量两次,因为横竖方向均有约束,比如A根据B来定位横向,B根据A来定位纵向。

view的过渡绘制

多个嵌套view,给某个view设置background,会有过渡绘制么

jni

c++层如何调用java层的函数

rxjava

observeon和subscribeon的区别

单例模式

latinvar和by lazy的区别

删除倒数第k个链表

二面

application的context和Activity的context的区别

.9图

应用场景

拉伸的场景

Activity的生命周期

销毁,恢复的生命周期

HashMap

扩容

内存泄漏的理解

handler持有引用链,考察gcRoot

RecyclerView的理解

动画

几种动画

属性动画和view动画的区别

属性动画的优势

ArrayMap与SparseArray

原理

优势在什么地方

Fragment

arguments为什么不被销毁

volidate的考察

Intent

intent里面可以传递哪些数据对象

getIntent得到的和setIntent是否是同一个实例

intent会被序列化,序列化的对象和反序列化的对象肯定不是同一个

算法

生产者消费者

两个线程轮流i++

合并两个有序链表

递归
循环

滴滴

一面

序列化

java序列化原理

只知道android pracleable的原理,java的序列化没答上来

okHttp

intercepted记录日志

request和response分别是哪个interceptor

性能优化

你是怎么分析ui卡顿的

ui卡顿的底层原理

消息队列相关

message如何知道用哪个handler

view的绘制

measureSpec

measureSpec中的mode和size的对应关系

http

range请求头含义是什么

TLS1.2升级到TLS1.3,升级了什么

系统如何判断ANR

获取屏幕高度的两种方式

事件

悬浮窗拖动如何实现的

泛型与反射

说说你对泛型的理解

反射能找到带参数的构造器么?

二面

有点忘了

webview如何加载的

i++在jvm执行的过程

dex里的class如何加载的

动态代理