Android应届生被为难,字节面试5轮,最后把面试官收拾了
前言
今年的大环境非常差,互联网企业裁员的现象比往年更严重了,可今年刚好是我的第一个“五年计划”截止的时间点,说什么也不能够耽搁了,所以早早准备的跳槽也在疫情好转之后开始进行了。但是,不得不说,这次阿里面试真的太难为我了,可以说是和面试官大战了5个回合,不过好在最后给了offer。
下面是我的面试经历分享,希望能带来一些不一样的启发和帮助。
友情提醒:下部分涉及到的内容比较多,更多资料整理在文档里,包括Android学习资料、学习笔记、算法宝典、面试题合集、思维导图等,需要这些资料的朋友直接点击文档链接免费下载~
我与字节面试官“大战”5回合,胜
字节面试涉及到的范围也很广,也具有一定挑战性的,以下包括字节实习四面和校招一面,最终拿到了Android开发岗位offer,字节面试过程中的感觉就是很多我不太熟悉的知识点都被问到了,甚至是不知道的知识点,但整体面试官给人的体验还不错,一般会提前打电话沟通面试时间。
字节实习提前批一面
-
Activity四种启动,SingleTask模式下上面的act删除以后对当前act会回调哪些方法
-
onNewIntent
-
Service 和 IntentService区别
-
Android一张图片占用的内存怎么计算
-
实习是怎么做UI适配的
-
Handler机制,Looper作用,他怎么知道message对应handler,主线程就有这个looper吗,主线程还能再创建一个looper吗,一个线程可以有几个looper,怎么保证只有一个looper,多线程怎么都知道自己是不是有looper
-
内存泄漏,Android中出现场景,和内存抖动的区别
-
Fragment add 和 request 的区别
-
RecyclerView 的缓存机制
-
抽象类和接口的区别,使用场景
-
== equals
-
重写和重载区别
-
string方法和stringBuilder区别
-
synchronized
-
list 和 set 区别
-
http https 区别
-
排序算法比较优劣,稳定性
字节实习提前批二面
- Handler是用来做啥的
- 每个线程都能有自己的Handler吗
- Fragment和Activity之间传递数据
- Activity加载Fragment的方式
- add一个Fragment的时候已经有一个Fragment的话,对之前的Fragment的生命周期的影响
- ActivityA启动ActivityB的生命周期回调
- Activity的启动模式(分别用于什么场景)
- onSaveInstance和onReStoreInstance作用
- ViewModel怎么实现的
- ViewModel是不是一直存在内存中(比如我开启了很多页面,或者ViewModel持有Bitmap这样的对象)
- Android用过哪些布局
- View的绘制会经过哪些(onMeasure,onLayout,onDrow)
- 让View重新绘制的方法(重绘时,onMeasure会调用几次)
- onMeasure会执行几次
- ConstraintLayout经常用到的属性
- guaidline为什么不会在布局上显示
- 事件分发机制
- Android中线程挂了进程会崩溃吗?
- RxJava用过了哪些操作符
字节实习正式批一面
-
Java内存分为哪些区域
-
堆内存溢出、栈溢出相同吗
-
哪些场景下会发生栈溢出
-
创建的对象一般在哪个区域
-
GCRoots有哪些
-
复制算法(GC算法之一)的流程
-
静态内部类和内部类的区别
-
volatile的作用是什么
-
禁止指令重排序是怎么实现的
-
为什么需要禁止指令重排序
-
synchronized修饰静态方法和普通方法时的区别
-
synchronized可重入吗
-
类锁、对象锁有区别吗
字节实习正式批二面
- 为什么要用MVVM
- 数据变更UI自动更新怎么实现的,用的DataBinding吗
- 什么是观察者模式,有什么好处
- 什么情况下用责任链模式?哪里遇到过?有什么好处?
- 怎么实现的责任链模式
- 为什么okHttp里面用到责任链模式
- 用户可以自定义多个拦截器吗
- 有网状态下的缓存和无网状态下的缓存一样吗
- 缓存是自己做的还是okhttp做的
- 可以手写一些sql吗
- room是什么类型的数据库
- room是怎么实现的,为什么不要写sql呢
- livedata粘性事件
- jetpack还用过哪些
- navigation用来做什么
- TCP UDP区别
- 为什么需要三次握手和四次挥手
- 三次挥手不行吗
- 两次挥手呢(服务器接收到客户端的FIN报文,立马将回复客户端ACK和自己的FIN报文一并发给客户端可以吗?)
- TCP属于哪一层
- TCP的上一层是哪一层
- 应用层常见的协议
- http与https的区别
- https怎么进行的加密
- 对称加密和非对称加密的方式
- 你知道的非对称和对称加密有哪些
字节校招提前批一面
-
View的事件分发、View的绘制流程
-
Okhttp3的优点
-
内存溢出、内存泄漏、四种引用类型
-
glide和picasso区别,图片缓存机制,Bitmap是存在java层还是native层
-
弱网优化
-
Android线程间通信方式有哪些
-
Handler机制,loop()为什么不会阻塞主线程,postDelayed()的原理。
-
手撕代码:括号匹配合法性判断。比较简单,写完后改了下题目,增加非括号字符,另外面试官建议实现方法的可扩展性(不仅是括号,可能有其他匹配规则),最后优化内存。
面试腾讯之前,我流了多少汗?
1.梳理知识
一般的面试,会被问到JVM原理、Android基础、四大组件和热修复等内容,这都是一名普通Android开发人员的知识结构,那么肯定是需要具备更多的知识树,需要掌握更全面的知识体系,所以就需要对知识进行一个系统的梳理了。
一、基础技能:
二、Android框架体系架构
三、360全方面性能调优
..........
2.复习知识
工作这么久要重新再去面试肯定是要将自己的知识储备重新拿出来,要把各个知识点复习到位,需要通过各个方式,选择自己最习惯的。无论是读电子书籍还是观看视频都是可以的,但要记得做好自己的学习笔记,能够起到总结的作用,再去复习起来就特别清晰了。
知识点总结:
学习笔记:
学习视频:
3.刷面试题
工作5年,虽然清楚现在流行什么技术,但对于互联网大公司会面试一些什么还真是不太清楚,所以面试之前刷一刷面试题还是很有必要的,能够做到举一反三。一线互联网的面试题,我整理了近三年的,内容还真不少。
拿到offer后的规划和心态
毕业后,我的第一个5年按照计划进行了,那么拿到字节offer后,下一个5年也有要清晰的目标。接下来的时间,是形成思维方法论和知识体系的阶段,同时也要培养自己团队协助与管理能力,提升自己的眼界,从而有更长远的发展。
至于心态,脚踏实地,不傲不馁。
总结
最后,希望大家都能够有自己清晰的发展路线,希望大家都能顺利拿下offer,进入理想的公司,共勉!