字节,快手,美团,支付宝,oppo,滴滴 android面经
这是去年10-12月各大公司面经,一直想发出来分享下。除了快手都发offer了,最后选择了字节
选择字节的原因有两点吧
1. 我是一个理想主义者,一直衷心于教育赛道,之前在网易也是做教育的,在字节也在大力教育部门,
顺便提下大力教育还在持续热招各种岗位哦。下图直接扫码内推,填写内推码(WUAGU6P)欢迎你来大力哦
2. 这个岗位在成都。哈哈
下面是我的面经
- 字节跳动
- 一面
- MVC,MMVM,MVP
- MMVM如何解决MVP中存在的问题
- MMVM如何解决MVP中存在的问题
- 内存泄漏
- 内存泄漏的几种情况
- LeakCancary分析内存泄漏的原理
- 内存泄漏的几种情况
- 手写单例模式,并分析
- 算法
- 找到两个数组中的两个元素的和等于某个值
- 找到两个数组中的两个元素的和等于某个值
- MVC,MMVM,MVP
- 二面
- activity
- onSaveInstance
- onSaveInstance
- service
- StartService和BindService的生命周期
- StartService和BindService的生命周期
- 求浮点数的平方根
- Binder的原理
- 设计模式
- 工厂模式
- 抽象工厂模式和普通工厂模式
- 抽象工厂模式和普通工厂模式
- 建造者模式
- 工厂模式
- 启动模式有几种
- 共享内存原理
- java能实现共享内存么
- java能实现共享内存么
- kotlin协程的四个dispatcher及区别
- activity
- 三面
- window,decorview,ViewRootImpl的关系
面试官 想让你回答如何window和windowManager如何联系的。viewRootImpl是联系window和decorview的纽带
- 进程间的通信方式
- AIDL的用法
- 用法和原理
- 用法和原理
- 事件分发
- onIntercept在哪用
- 事件分发底层的产生
- onIntercept在哪用
- RecycleView的用法
- 里面的各种Manager作用
- 里面的各种Manager作用
- wake lock:使屏幕常亮
- Activity是如何被限制到状态栏和导航栏之下的
- canvas
- canvas的save和restore的作用
- canvas的density有什么作用
- canvas的save和restore的作用
- vsync
- vsync是如何生成的
- vsync是如何生成的
- android中异步一般怎么实现
- android中内存泄漏发生的情况
- 如何去获取view的宽高
- 悬浮窗
- 如何实现一个悬浮窗
- 一个悬浮窗悬浮在顶层,覆盖了底层的app的启动图标,如果让事件启动图标接收到click事件
- 如何实现一个悬浮窗
- Android M之前与之后的权限变化
- ContentProvider
- 使用
- 如何找到该contentProvider的
- 使用
- RxJava中map和flatmap的区别
- view的绘制
- viewgroup是如何刷新的
- onMeasure,onlayout,onDraw分别起什么作用
- onLayout的时候可以layout自己么?
- viewgroup是如何刷新的
- AndroidManifest
- <uses-permission>和<permission>的区别
一个是系统的权限,一个是自定义的权限
- <uses-permission>和<permission>的区别
- window,decorview,ViewRootImpl的关系
- 三面
- 两道算法
- 洗牌问题
- 接雨水
- 洗牌问题
- 两道设计
- 面向对象原则
- 用代码描述你觉得最有设计感的项目
- 面向对象原则
- 两道算法
- 一面
- 快手
- 一面
- viewBinding的原理
- Recycleview滑动怎么优化
- 缓存设计
- 一级缓存和二级缓存的区别
- LayoutManager原理
- 一级缓存和二级缓存的区别
- 缓存设计
- 绘制
- onMeasure描述一下
- onDraw描述一下
- invalidate一定会调用onDraw么
- onMeasure描述一下
- 事件分发
- 事件是由谁分发的
- 事件是由谁分发的
- fragment
- 销毁与恢复
- 与Activity的通信
- 销毁与恢复
- Activity
- Activity的生命周期
- 销毁与恢复
- Activity的生命周期
- 国际化插件
- hashmap
- 2^n的原因(有多个原因)
- 扩容
- 2^n的原因(有多个原因)
- 22反转链表
- viewBinding的原理
- 二面
- 协程原理
- rxjava原理
- leakcanary
- 如何分析引用链
- 如何分析引用链
- 线程池
- 给你一堆数据,如何画曲线?
- 事件分发
- 责任链模式
- 汽车加油问题
- 协程原理
- 三面
- 有序无序时删除链表的重复节点
- 都删除
- 保留一个
- 都删除
- 如何实现快手和抖音的整屏滑动效果
- 如何让运营能看懂社区文章
- 项目中的难点(问得很细)比如有没有遇到什呢难点呀
- 有序无序时删除链表的重复节点
- 一面
- 美团
一面不能讲4.4.0大改版- 一面
- 线程池原理,几个参数
- 线程池里面的阻塞队列是什么类型
- 线程池里面的阻塞队列是什么类型
- 设计模式
- 状态模式和策略模式的区别
- 状态模式和策略模式的区别
- sleep和wait的区别
- android序列化
- Parcelable与Serializable
- Parcelable与Serializable
- Handler
- Hashmap
- 深拷贝与浅拷贝
- 如何实现深拷贝
- 如何实现深拷贝
- sync和Reenterlock
- 遇到异常的区别
- 遇到异常的区别
- 可重入锁和不可重入锁
- funA,funB,funC,funD
- funA,funB,funC,funD
- postInvalidate和Invalidate的区别
- requestLayout
- requestLayout
- 两个有序链表合并
- anr 分类及原理
- 线程池原理,几个参数
- 二面
- 基本都是问的项目
- 基本都是问的项目
- 三面
- 基本问的项目
- 基本问的项目
- 一面
- 支付宝
- 一面
- 项目
- viewmodel原理
- 用了哪些jetpack的东西
- livedata为何具有生命周期感知能力
- 项目
- 二面
- 三面
- shareperference如何保证线程安全,
- 为什么不是进程安全的
- 如何实现进程安全的
- 为什么不是进程安全的
- viewmodel是如何解决内存泄漏问题的?能解决么
- mmkv共享内存和binder的区别
- magic ocr项目
- 有做过多线程开发么
- room如何实现orm的
- kotlin和java产物一样么有
- 各种图片格式的区别
- 如何保证内存与文件的同步
- 开一个线程commit,commit不用加锁么?
- bitmap
- 怎么确定bitmap被复用了
- 一张图片占用的内存大小
- 怎么确定bitmap被复用了
- shareperference如何保证线程安全,
- 四面
- 动态加载一个recycleview item的方式
- 动态下发国际化
- 动态加载一个recycleview item的方式
- 阿里(简历被捞了 淘宝特价版)
- 项目
- 进程通信方式了解哪些
- binder原理
- binder原理
- 服务端了解么
- View的显示原理?
- Https原理
- 说下中间人攻击
- 说下中间人攻击
- Flutter了解么
- 前端了解么?
- 国际化文案的困难
- leakcanary原理
- 项目
- 一面
- Oppo(Camera应用开发)
问了太多关于底层渲染的东西- 一面
- surfaceView为撒更快
- surfaceview和textureview的区别
- surfaceView和普通View的区别
https://blog.csdn.net/YuDBL/article/details/86773800
- sendBroadCast会阻塞么?
- 多对多项目的设计
这个不好讲项目的难点
- 内存的分类
- android的广播
- 你对android相机系统怎么理解?
- 内存泄漏分析
- surfaceView为撒更快
- 二面
- 基本问的项目,然后聊了聊
- 基本问的项目,然后聊了聊
- 一面
- 快手(被捞了,消费事业部)
- 一面
- recycleView的多级缓存
- cacheView如何去确定该用哪个viewHolder
- 每层缓存的容量是多少
- cacheView如何去确定该用哪个viewHolder
- view绘制流程
- Relativelayout如何会测量几次子view,为什么?
测量两次,因为横竖方向均有约束,比如A根据B来定位横向,B根据A来定位纵向。
- Relativelayout如何会测量几次子view,为什么?
- view的过渡绘制
- 多个嵌套view,给某个view设置background,会有过渡绘制么
- 多个嵌套view,给某个view设置background,会有过渡绘制么
- jni
- c++层如何调用java层的函数
- c++层如何调用java层的函数
- rxjava
- observeon和subscribeon的区别
- observeon和subscribeon的区别
- 单例模式
- latinvar和by lazy的区别
- 删除倒数第k个链表
- recycleView的多级缓存
- 二面
- application的context和Activity的context的区别
- .9图
- 应用场景
拉伸的场景
- 应用场景
- Activity的生命周期
- 销毁,恢复的生命周期
- 销毁,恢复的生命周期
- HashMap
- 扩容
- 扩容
- 内存泄漏的理解
- handler持有引用链,考察gcRoot
- handler持有引用链,考察gcRoot
- RecyclerView的理解
- 动画
- 几种动画
- 属性动画和view动画的区别
- 属性动画的优势
- 几种动画
- ArrayMap与SparseArray
- 原理
- 优势在什么地方
- 原理
- Fragment
- arguments为什么不被销毁
- arguments为什么不被销毁
- volidate的考察
- Intent
- intent里面可以传递哪些数据对象
- getIntent得到的和setIntent是否是同一个实例
intent会被序列化,序列化的对象和反序列化的对象肯定不是同一个
- intent里面可以传递哪些数据对象
- 算法
- 生产者消费者
- 两个线程轮流i++
- 两个线程轮流i++
- 合并两个有序链表
- 递归
- 循环
- 递归
- 生产者消费者
- application的context和Activity的context的区别
- 一面
- 滴滴
- 一面
- 序列化
- java序列化原理
只知道android pracleable的原理,java的序列化没答上来
- java序列化原理
- okHttp
- intercepted记录日志
- request和response分别是哪个interceptor
- intercepted记录日志
- 性能优化
- 你是怎么分析ui卡顿的
- ui卡顿的底层原理
- 你是怎么分析ui卡顿的
- 消息队列相关
- message如何知道用哪个handler
- message如何知道用哪个handler
- view的绘制
- measureSpec
- measureSpec中的mode和size的对应关系
- measureSpec中的mode和size的对应关系
- measureSpec
- http
- range请求头含义是什么
- TLS1.2升级到TLS1.3,升级了什么
- range请求头含义是什么
- 系统如何判断ANR
- 获取屏幕高度的两种方式
- 事件
- 悬浮窗拖动如何实现的
- 悬浮窗拖动如何实现的
- 泛型与反射
- 说说你对泛型的理解
- 反射能找到带参数的构造器么?
- 说说你对泛型的理解
- 序列化
- 二面
- 有点忘了
- webview如何加载的
- i++在jvm执行的过程
- dex里的class如何加载的
- 动态代理
- 有点忘了
- 一面