入职字节跳动那一天,我哭了(蘑菇街被裁,奋战3个月拿下offer)
前言
先说一下自己的个人情况,18届应届生,通过校招进入到了蘑菇街,然后一待就待了差不多2年多的时间,可惜的是今年4月份受疫情影响遇到了大裁员,而我也是其中一员。好在早有预感,提前做了准备,之前一直想去字节跳动,年前就已经在做准备了,这场持久战拉得很长,也最终以7个月的时间取得胜利。在踏入字节跳动,办理入职手续的那一天,作为一个男子汉,确实是落泪了。特分享一波我的真实经历,共勉。
小tip:
其实一个公司要进行裁员通常都会出现一些前期征兆:业务发展遇到较大瓶颈,并且难以突破、频繁调整战略目标、高管开始陆续离职、开始严抓考勤、开始部分同事劝退,如果你现在的公司也开始出现这些症状,别想了,是时候开始做准备了。
以下内容涉及4大环节:
环节一:制定计划,做足准备
环节二:实施计划,准备实战
环节三:制定简历,投递简历
环节四:字节跳动面试经历,真实记录还原
四个环节中,内容中包含了很多文档资料,由于文章篇幅有限,全整理在文档内,包括Android学习资料、学习笔记、算法宝典、面试题合集、思维导图(Xmind)等,需要这些资料的朋友可简信我【字节跳动】自行获取下载方式~
环节一:制定计划,做足准备
1.梳理知识体系
现在大部分的程序员的现状都特别奇怪,自己所掌握的知识是比较零散的,或者对某个知识点只知其表不知其里,其实这都是对自己掌握的技术内容没有进行一个系统的梳理,所以制定计划的第一步就是要梳理好自己的知识体系。关于梳理知识体系,要做到以下2点:
你是否了解这个知识点的why、where、how
你能否能将这些概念和知识能简单通俗易懂的讲给另一个完全不理解的人听懂
1.架构师筑基必备技能(基础):深入Java泛型+注解深入浅出+并发编程+数据传输与序列化+Java虚拟机原理+反射与类加载+动态代理+高效IO+Kotlin项目实战
2.Android高级UI与FrameWork源码:高级UI晋升+Framework内核解析+Android组件内核+数据持久化
3.360°全方面性能调优:设计思想与代码质量优化+程序性能优化+开发效率优化
4.解读开源框架设计思想:热修复设计+插件化框架解读+组件化框架设计+图片加载框架+网络访问框架设计+RXJava响应式编程框架设计+IOC架构设计+Android架构组件Jetpack
5.NDK模块开发:NDK基础知识体系+底层图片处理+音视频开发+智能家居串口编程实战
6.架构师炼成实战:架构设计+网上商城项目实战+新闻客户端项目实战+多格式播放器项目实战+Gradle自动化项目实战
7.微信小程序:小程序介绍+UI开发+API操作+微信对接+小程序项目实战
8.Hybrid 开发与Flutter:Html5项目实战+Flutter
系统知识图
解读开源框架设计思想思维图(xmid)
Android高级UI与FrameWork源码
2.准备算法
该如何学习算法?
程序员必须掌握的算法有哪些?
Leetcode刷题,到底稳吗?
关于算法部分,其实要准备的细节内容非常多,所以我也花了不少心思整理了一份关于算法方面的宝典,这份资料我对算法的认识以及我的学习方法,除了Leetcode以外,字节跳动喜欢问的核心算法题也进行一道一道的深度解析。
3.收集整理面试题
除了算法部分以外,要想在实际面试中做到心中有数,大厂的常问的一些面试题或知识点也很有必要看一看。我特意搜集整理了近3年来一线互联网公司的面试题(技术部分),会发现这些面试题实际问的大同小异,但考察你的内容和技术都是有不同的目的性的,对这一部分的分析,我也有写在答案里(详细见文档)。
环节二:实施计划,准备实战
前期准备的这些需要一步一步行动起来了,但除了以上肯定是远远不够的,面试官除了技术相关的问题,必问的就是项目相关的内容,那项目相关内容需要怎么来准备呢?除了自己的实战经验的积累以外,其实我们还是可以阅读一些技术大牛写出来的实战经验及笔记。如:Android高级UI与FrameWork源码笔记、架构师筑基必备技能技术笔记等。
更多实战书籍下载,关注我+私信口令「实战」即可:
环节三:制定简历,投递简历
简历对于程序员来说是非常重要的一个环节,一份优秀的简历往往能够帮助我们敲开一线互联网大厂的大门,简历部分我就不做过多的赘述。可以参考《程序员找工作指南》,另外我可以提供18种优秀的简历模板。
下载好之后,根据模板来制定自己的简历,接下来就可以顺利投递啦!投递简历一定要参考好匹配值,建议最好找熟人内推。
环节四:字节跳动面试经历,真实记录还原
字节跳动一面:
第一面我觉得应该是基础面,重点考察的是自己技术的广度 和一些技术的掌握情况,一面小哥哥也没有深究于某个特定的点,面试时间大约1个小时。
自我介绍
描述Activity的生命周期。
描述一个Activity启动另外一个Activity的生命周期
Activity标签可以配置什么
IntentFilter里面的标签可以干嘛
Service怎么启动
了解IntentService吗?
几大控件有
存储数据的方式有
Intent可以干嘛Sharedpreference里面的apply和commit有什么区别
ContentProvider用过吗?为什么要用这个
ASyncTask用过吗?知道是怎么实现的吗?
线程池知道吗?怎么创建?底层怎么实现?
Set、List、Map区别,Map底层怎么实现的
重写View怎么重写?
快排实现
实现两个链表表示的整数相加(空间复杂度要求很低)
字节跳动二面:
自我介绍
Handler实现机制,同步屏障,IdleHandler
Looper可以在子线程创建吗
Handler如何实现对于消息的定时发送
HandlerThread的实现原理
事件传递机制,结合滑动冲突具体场景解决问题
View绘制流程,从Vsync信号到ViewRootImpl到最终View的draw
Apk打包流程(点击 Android Studio 的 build 按钮后发生了什么 )
Apk安装过程
内存泄漏,Handler如何导致Activity内存泄漏,如何做检测,引用的链路到GCRoot
Fragment生命周期
Activity各类启动模式下的切换状态后显示状态
屏幕反转Activity的生命周期变化
Dialog弹起背后的Activity生命周期发生何种变化?
一个应用启动过程,如何与AMS,PMS交互
EventBus的实现原理,粘性事件是如何实现的?为什么要用EventBus,其优势在哪里?
Retrofit的实现原理结合动态代理来问
Picasso与Glide的区别(缓存的差异性)
Volley与Okhttp的差异性,Okhttp的实现与其优势
多进程的数据库与文件操作该如何实现?
Android签名,V1,V2
Glide中生命周期如何实现的
Glide如何加载一个Gif图
字节跳动第三面:
自我介绍
对于Android中内存使用中注意的点(围绕内存泄露与内存优化讲)
MVP,MVVM,MVC的差异性已经适用场景
Android APK为什么不可以在IOS上运行,如何设计可以让其运行?
Android系统设计为什么要用虚拟机不直接执行机器码?
通过虚拟机运行和直接执行机器码的差异性其各自的优势在哪里?
Dalvik和ART的区别
Native生命周期如何通知到Web?
了解Android中的ANR吗?
了解Android中的OOM吗?
RecyclerView中的缓存实现原理
RecyclerView中ItemDecoration的实现原理
Activity,Window,WindowManager,ViewRootImpl如何看这几个的关系
广播动态注册和静态注册的差异是什么?
Android中进程通信的方式,Binder的优势是什么?
SparyArray和ArrayMap的实现原理?
使用过Koltin吗?
使用过RxJava和Retrofit吗?
Web与Native的通讯方式
SurfaceView和TextureView的区别
Surface为什么要用双缓冲机制?
Bitmap大图加载的优化策略?
SharePreference的commit和apply的区别
字节跳动面试题答案:
以上三轮面试的技术题的详细答案与解析均整理在文档内,由于解析文字过多,不在文章中分享,需要这份面试题答案可以私信我。
总结
这次能够顺利入职字节跳动,可以说是运气和实力参半,但我一直持有的一个观念就是:好运永远是留给有准备的人。
所以,作为一名技术人,对大厂有着执念,那就要落实下来,相信自己付出是会有所回报的。在这,我也祝大家在接下来的金九银十里,面试顺利,过关斩将,拿下offer。