前言
19毕业于一所不知名双非本科大学,毕业时就有着一颗想进大厂的心,但又想留在成都,不愿意去北上广,现在其实相当后悔。当年在成都的大厂少之又少,再加上校招时非常努力地玩耍,导致投的几个大厂面试都全部挂掉,也错失了进大厂最好的机会,所以我奉劝大三的同学如果对自己的职业有追求,有进大厂的梦想,在大三的时候一定要好好准备,在校招的时候拿 offer。
最后我在成都一家本地科技公司做了Android开发,中间也跳过一次槽,也是做Android。但这几年时间里总感觉公司能给的成长太慢,虽然自己也在学习,还是免不了焦虑,特别是像自己这种学历和公司背景都一般的程序员,要保证自己以后不被淘汰,我必须得做点什么。
于是我把所有能利用的个人时间全部利用了起来,比如早上十点上班,我六点钟就会起床,刷两个小时面试题,八点钟洗漱之后去上班。晚上如果有时间就会把早上刷过的题拿出来继续复习,花了两个月的时间,一边预习数据结构,一边做题,LeetCode上面的高频题基本都过了一遍。
花了那么多时间刷题,都是因为自己算法太菜,以前没有进行专门的练习。题做得差不多之后,就开始复习专业知识了,具体内容我都会总结出来。前前后后准备了三个月,我才敢进行内推,经历了八次面试之后,面试时间又持续三个月,皇天不负有心人,终于在这个月等到了oc。下面是面试内容,时间太久了,可能记得不太全,但基本上包含了所有问题。
一面
都说字节的面试难度偏高,带着忐忑的心情来到面试,没想到面试官是一个和蔼可亲的爷爷型面试官,很快放稳了心态,开始面试。
- 上来先常规自我介绍然后讲项目
- recyclerview的缓存机制
- glide的缓存机制
- 从glide缓存的lruCache出发让我讲一下自己怎么实现,一开始只说到了链表,后来面试官提醒效率,于是回答到了linkedHashmap
- glide缓存的弱引用说到安卓四大引用还有在项目中的使用
- hashmap问得比较详细
- == equals
- handler机制
- 算法题是两个升序链表合并
- 总的来说这次面试体验还是特别不错的,面试官问的问题感觉一层套一层,往往在回答中说到了某个知识点,接着下个问题就会以这个知识点开始。
当天面试由于比较紧张,让两个小伙伴给我面了两个小时,口干舌燥的参加面试,脑子也比较乱哄哄,handler的一个简单问题总是集中不了精神,还好面试官比较有耐心没有给我提前结束。
隔了7天的早上收到了二面通知,冲!
二面
下午6点钟开始面试,面试官不苟言笑显得非常专业,简单调试之后开始面试。
- 先是常规自我介绍+项目
- Glide缓存
- 图片优化(讲了项目里面oss存储的取缩略图方法,还有Bitmap相关的decodeResourse方法相关)
- Bitmap
- Glide中的LruCache以及实现
- 讲几个熟悉的数据结构(把整个Collections和Map讲了个遍)
- LinkedList查找优化
- 追问HashMap
- TreeMap中红黑树
- SparseArray
- 算法题是ipv4地址转32位int输出(不会位操作符然后面试官提示用了乘2的方法)
- ipv6
- TCP
- http几个版本的不同
- https
- 对称加密、非对称加密
- RSA实现😇
- 安卓中网络请求子线程回调UI线程怎么弄(runOnUIThread、Handler)
- 多线程
- 线程池
- 操作系统中的线程竞争问题
- synchronize
- 自旋锁
- volatile(原子性?)
- CAS
总用时90分钟。
这次面试依然感受到了字节面试官的耐心温柔与专业,卡住时面试官会引导问题的回答,总体感觉如沐春风,不知不觉就一个半小时了。面到一半面试官说看得出来我准备了很多(内心两行泪,确实是背地里刷了上千道面试题)
最后聊了聊部门的工作方向和工作时间安排,面试很顺利。
三面
- 自我介绍,介绍了自己实习写的刷新加载的组件
- 问我自己组件里怎么解决的嵌套滑动冲突,三个方面实现完美分发事件
- retrofit 动态***里面如果传的不是 interface 怎么办,这块我不清楚,我就直接说不太清楚,然后说了 retrofit - 关于注解的处理
- 注解生命周期,编译时注解解析
- 你用过 weex,说下weex实现原理,我说我没有看过 weex 源码,但是我实现过一个动态页面渲染框架,说了下我的渲染过程和实现方案。
- 最近想学的技术,说了音视频,但是因为准备秋招放下了
- 为什么想学,说了自己之前做一个 APP,里面播放器无法使用没认证的 Https 请求,打算自定义一个播放器,在底层处理证书这块,然后在说了下不知道这样的方案可不可行。
- okhttp 里面怎么认证的, 说了拦截器
- ConcurrentHashMap 同步方案, 然后问了 CAS
- 环状链表
-隔了两天查到了到HR面的通知,内心又高兴又打问号,自己都不知道自己怎么过的。
HR终面
- 询问了除字节跳动以外,还在看其他工作机会么?分别是什么
- 字节、XXX公司、XXX公司,你的优先级是什么,为什么?
- 实习薪资待遇是多少?你期望的薪资是多少?
- 平时有什么爱好?
- 了解职位需求吗?
- 有没有想问的?
总结
我给大家的建议就是慢慢来,不管是社招还是校招,制定自己的计划,一定要有自己的知识体系,针对自己薄弱的地方进行强化复习,不放过任何一个细节。
在字节面试前我也准备了很久,刷了超多大厂面试真题,整理出了一份一线互联网面试最新全套真题解析,知识点整理出来分享给大家:
笔记内容全部免费分享,有需要完整版笔记的小伙伴微信扫描下方二维码免费获取哦!
Java基础
1.静态内部类和非静态内部类的比较
2.多态的理解与应用
3.java方法的多态性理解
4.java中接口和继承的区别
5.线程池的好处,详解,单例(绝对好记)
6.线程池的优点及其原理
7.线程池的优点(重点)
8.为什么不推荐通过Executors直接创建线程池
9.不怕难之BlockingQueue及其实现
Android基础
1.Activity知识点(必问)
2.Fragment知识点
3.Service知识点
4.Intent知识点
性能优化篇
1.启动优化
2.内存优化
3.绘制优化
4.安装包优化
源码流程篇
1.开源库源码分析
2.Glide源码分析
3.Android面试题:Glide
4.day 20 面试题:Glide面试题
5.聊一聊关于Glide在面试中的那些事
6.面试官:简历上如果写Glide,请注意以下几点…
7.Glide OOM问题解决方法汇总
8.OkHttp源码解析
9.okhttp连接池复用机制
10.okhttp 流程和优化的实现
11.一篇让你受用的okhttp分析
12.OkHttp面试之–OkHttp的整个异步请求流
…
最新面试题合集
1.android事件分发机制,请详细说下整个流程
2.android view绘制机制和加载过程,请详细说下整个流程
3.android四大组件的加载过程,请详细介绍下
4.Activity的启动模式
5.A、B、C、D分别是四种Activity的启动模式,那么A->B->C->D->A->B->C->D分别启动,最后的activity栈是怎么样的
6.Activity缓存方法
7.Service的生命周期,两种启动方法,有什么区别
8.怎么保证service不被杀死
9.静态的Broadcast 和动态的有什么区别
10.Intent可以传递哪些数据类型
11.Json有什么优劣势、解析的原理
12.一个语言的编译过程
…
由于本套笔记干货内容过多,没有办法一 一展示,需要这份完整版《2022Android中高级面试题汇总》的朋友可以微信扫描下方二维码免费获取!希望这套笔记可以帮助到大家,让大家在面试的道路上畅通无阻!
最后
简历上写的东西一定要会,一般都是针对简历来提问的。如果在预习的过程中感到困难或者吃力,那就对了,等你熬过去了,就是胜利。最后,祝愿大家都能拿到满意的 offer。