刚开始面试的时候我真的是处处碰壁,面一家挂一家,面完之后怀疑自我,是不是自己真的太菜了找不到工作。工作本身就是双向选择,一家不行再换一家,总有合适的,千万不要因为别人的一句话就全盘否定自己,一定要自信。
下面是面试经历,分享出来是为了给大家一个借鉴,知道这些一线互联网企业注重那些技术,自己去面试也好有个准备,千万别像我,挂了三家公司才知道去准备面试。
快手
一面
viewBinding的原理
-
Recycleview滑动怎么优化
-
缓存设计
一级缓存和二级缓存的区别
LayoutManager原理
-
-
绘制
onMeasure描述一下
onDraw描述一下
invalidate一定会调用onDraw么
-
事件分发
- 事件是由谁分发的
-
销毁与恢复
与Activity的通信
-
Activity
Activity的生命周期
销毁与恢复
国际化插件
-
hashmap
2^n的原因(有多个原因)
扩容
22反转链表
二面
协程原理
rxjava原理
-
leakcanary
- 如何分析引用链
线程池
给你一堆数据,如何画曲线?
事件分发
责任链模式
汽车加油问题
三面
-
有序无序时删除链表的重复节点
都删除
保留一个
如何实现快手和抖音的整屏滑动效果
如何让运营能看懂社区文章
项目中的难点(问得很细)比如有没有遇到什呢难点呀
美团
一面
-
线程池原理,几个参数
- 线程池里面的阻塞队列是什么类型
-
- 状态模式和策略模式的区别
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被复用了
一张图片占用的内存大小
说来也挺惋惜的,前三家公司都是到了二面甚至是三面才挂掉,如果是一面就挂掉我也不用花那么多时间去煎熬、等待结果,只怪自己自视过高,在一家公司做久了对自己的能力没有一个正确的认知。
之后我开始猛刷大厂的面试题,在朋友的内推下收到了字节的面试题通知,又把字节近几年的面试题都翻出来刷了个遍,终于在四轮技术面+一轮HR面后收到了offer。下面是字节面经:
一面
-
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>和<permission>的区别
一个是系统的权限,一个是自定义的权限
- <uses-permission>和<permission>的区别
四面
-
两道算法
洗牌问题
接雨水
-
两道设计
面向对象原则
用代码描述你觉得最有设计感的项目
后面就是HR面了,我就省略了,相信这些大厂HR面试都不会有太大的差别。
我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、 丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!
面试官通常会问一些开放性的问题,对你的思维拓展能力、多方位的思考能力也是一种考验
永远不要打无准备之仗!早做准备,多做准备!
下面分享一下我之前刷过的面试题以及算法资料,希望能帮助到有心在技术这条道路上一路走到黑的朋友!
Java部分
- 操作系统相关
- JDK&JVM&JRE
- 面向过程 & 面向对象
- 八大基本数据类型&引用类型
- 数组
- Java异常
- 集合(容器)
- 线程
- 泛型
- 反射
- 注解
- Socket编程
- 设计模式
- JVM相关
Android部分
Activity
- 典型情况下的Activity生命周期?
- 异常情况下的Activity的生命周期 & 数据如何保存和恢复?
- 从Activity A跳转到Activity B之后,然后再点击back建之后,它们的生命周期调用流程是什么?
- 如何统计Activity的工作时间?
- Activity的启动模式 & 使用场景
- 如何在任意位置关掉应用所有Activity & 如何在任意位置关掉指定的Activity?
- Activity的启动流程(从源码角度解析)?
- Activity任务栈是什么?在项目中有用到它吗?说给我听听
BroadcastReceiver
- 广播是什么?
- 广播的注册方式有哪些?
- 广播的分类 & 特性 & 使用场景?
ContentProvider
- 什么是内容提供者?
- 说说如何创建自己应用的内容提供者 & 使用场景
- 说说ContentProvider的原理
- ContentProvider,ContentResolver,ContentObserver之间的关系
- 说说ContentProvider的权限管理
Service
- 什么是Service?
- 说说Service的生命周期
- Service和Thread的区别?
- Android 5.0以上的隐式启动问题及其解决方案。
- Service保活方案
- IntentService是什么 & 原理 & 使用场景 & 和Service的区别。
- 创建一个独立进程的Service应该怎样做?
Handler
- 子线程一定不能更新UI吗?
- 给我说说Handler的原理
- Handler导致的内存泄露你是如何解决的?
- 如何使用Handler让子线程和子线程通信?
- HandlerThread是什么 & 原理 & 使用场景?
- 一个线程能否创建多个Handler,Handler和Looper之间的对应关系?
- 为什么Android系统不建议子线程访问UI?
AsyncTask
- AsyncTask是什么?能解决什么问题
- 给我谈谈AsyncTask的三个泛型参数作用 & 它的一些方法作用。
- 给我说说AsyncTask的原理
- 你觉得AsyncTask有不足之处吗?
Fragment
- Android中v4包下Fragment和app包下Fragment的区别是什么?
- Fragment的生命周期 & 请结合Activity的生命周期再一起说说。
- 说说Fragment如何进行懒加载。
- ViewPager + Fragment结合使用会出现内存泄漏吗 & 如何解决?
- Fragment如何和Activity进行通信 & Fragment之间如何进行通信?
- 给我谈谈Fragment3种切换的方式以及区别 & 使用场景。
文件存储
- 说说Android中数据持久化的方式 & 使用场景
- 接触过MMKV吗?说说SharedPreference和它的区别
- 第三方数据库框架用过哪些?有没有自己封装过一个SQLite的库
- SQLite是线程安全的吗 & SharedPreference是线程安全的吗?
- 请简单的给我说说什么是三级缓存?
- SharedPreference的apply和commit的区别
- 谈谈你对SQLite事务的认识
ListView & RecyclerView
- ListView是什么?如何使用?
- RecyclerView是什么?如何使用?如何返回不一样的Item。
- ListView和RecycyclerView的区别是什么?
- 分别讲讲你对ListView & RecyclerView的优化经验。
- 给我说说RecyclerView的回收复用机制
- 说说你是如何给ListView & RecyclerView加上拉刷新 & 下拉加载更多机制
- 谈谈你是如何对ListView & RecycleView进行局部刷新的?
图片编程
- 你对Bitmap了解吗?它在内存中如何存在?
- 有关Bitmap导致OOM的原因知道吗?如何优化?
- 给我谈谈图片压缩。
- LruCache & DiskLruCache原理。
- 说说你平常会使用的一些第三方图片加载库,最好给我谈谈它的原理。
- 如果让你设计一个图片加载库,你会如何设计?
- 你知道Android中处理图片的一些库吗(OpenCv & GPUImage ...)?
WebView
- WebView会导致内存泄露吗?原因是什么?解决方式有哪些?
- 你知道Hybrid开发吗?说说你的相关经验
- 说说WebSettings & WebViewClient & WebChromeClient这三个类的作用 & 用法。
- 说说你了解的Hybrid框架。
- 如何提高原生的WebView加载速度?
- 谈谈你对webView工作机制的认识,你在项目中优化过它吗?说说是从哪些方面着手的?
ViewPager
- 什么是ViewPager?说说它的那些适配器。(校招&实习)
- 你了解ViewPager2吗?和ViewPager 1有哪些区别?
- ViewPager + Fragment结合使用存在的内存泄漏的原因是什么?如何解决?
View事件分发机制
- 什么是事件分发机制?主要用来解决什么问题?(校招&实习)
- 给我说说事件分发的流程 & 你项目解决事件冲突的一些案例。
- 分别讲讲有关事件分发的三个方法的作用及关系。
- 如果我在一个设置了点击事件的TextView中dispatchTouchEvent方法强制返回ture或
者false会发生什么? - 谈谈你对MotionEvent的认识?Cancel事件是什么情况下触发的?
- requestLayout(),onLayout(),onDraw(),drawChild()区别和联系?
更多Android可以查看我的个人介绍!!!