从简历被拒,到头条 Android 面试。二本渣渣如何在 359 天成功拿下 offer
二、面试背景
自从去年被头条笔试的算法凌辱和被头条的前辈指教了之后对头条没啥好感了,也感觉进不去,所以后面大半年都没关注头条的招聘,直到以下两件事情的发生。
1.有一天,之前一块实习的哥们说进了头条,我也蠢蠢欲动打算开始搞了。那时有一个不成熟的想法:「连他都可以进,我应该也可以吧。
2.正好在健身房认识了一个在头条做教育的小 leader,我觉得这是天意啊。于是免费给他上了节私教课,上完让他帮忙内推。
三、准备面试
其实从十月份投递简历开始准备面试到十二月份收 offer,也不过 2 个月的时间,但这都是建立在我过去一年的积累啊,无数次的通宵自习室,图书馆的专属椅子都被我坐的陷进去。避免误导大家,这次也不做标题党,写了准备一年,踏踏实实干事。
每天早上,泡一杯咖啡,享受阳光洒在窗前的温暖。翻开武林秘籍,开背!
![](https://img-blog.csdnimg.cn/img_convert/dfa959067
c440747c26e482986cf51ec.png)
边背边加上笔记,更有助于理解哟~
以下是我去年给自己订的学习计划:
一月:
Java 入门
整个一月份都在刷入门视频和《深入理解 Java 虚拟机》,又临近期末,每天 5 点半起床,看两个小时的视频然后上课或者复习期末考。
二月:
剑指 offer 刷一遍、数据结构、JavaSE、JVM、多线程
①剑指 offer 有些搞不懂的直接跳过,等下个月第二遍再刷;
②数据结构重点是各种树、二叉树、红黑树的一些特性以及链表的特性;
③JavaSE 主要是类对象接口的区别,能不能继承,Static 的特点,各种 Hashmap,ArrayList 等集合框架的原理源码;
④JVM 是根据网上整合的高频面试题进行学习的,刷了一遍面试题之后才去看周志华的《深入理解 Java 虚拟机》,JVM 难的不是 JVM 布局,垃圾回收算法等这些理论,而是结合代码和项目场景。比如说一段代码,有很多个类、方法,其中又有静态类和全局变量,这时候项目跑起来的时候哪些先加载,哪些变量存放在哪个区,不止要懂理论,还要结合代码懂理论。还有就是项目中的 OOM,栈溢出,JVM 的参数调优等等。
⑤多线程也是刷网上面试题和博客的,几本多线程的书都是一坨一坨的,理解不来。先动手把几个多线程实现方法实现了一遍,然后分析优缺点,再由此切进去线程不安全和各种锁。多线程学习不同 JVM,自己多动手,多调试一下,控制台都会告诉你答案。
三月:
剑指 offer 二刷,数据库、操作系统、网络、准备面试
①剑指 offer 第二遍重点刷第一遍时思路懂代码不懂的。
②Android 面试题刷了网上搜集 1307 字节跳动高频面试题解,其他都是框架原理,源码解析等理论。
③操作系统刷高频面试题。死锁的产生条件、解决方法等等,资源调度算法,并发和并行等。
④网络也是刷面试题。三次握手四次挥手以及为什么要这样做、TCP 和 UDP、网页请求过程、DNS 解析过程、网络模型、响应码的意思等。
⑤我每刷一道算法或者理解了一道面试题都会进行整理,所以到面试之前看看整理的文档和博客就行,异常轻松。这个月也继续投递简历进行面试,从三月份开始都是边投边准备,不存在全部准备好再去投。
以上资源均免费分享给大家,内容均放在了开源项目:**[【Github】](
)**,大家可以自行获取。
三月份收了京东、瓜子二手车等二线大厂的 offer。
四月:
项目、手写剑指 offer、继续面试
①三月份被阿里闲鱼部门的三面面试官怼了一发,说简历没有混合开发项目面 Android 岗,理论会再多有什么用,于是打算在四月份补一下项目。
②在补项目的同时,不忘算法,练习白板写代码。
四月份收了腾讯、去哪儿一些 offer,腾讯和去哪儿终面都得现场面,所以一天飞北京,一天飞深圳。拿到腾讯 offer 的时候跟 HR 商量能不能去上海或者北京的 base,HR 说不行,于是就没去了。选工作和生活城市有一个硬性标准:离家远!那些在北方读书的同学毕业之后一直要往家里跑,而我则是一直往外跳,或许是因为在厦门待了四年吧,家乡也是「围城」啊。
5-12 月:
看框架源码,面试,整理面经
如何阅读源码?
1.深入解析微信 MMKV 源码
[MMKV](
)?是微信于 2018 年 9 月 20 日开源的一个 K-V 存储库,它与 SharedPreferences 相似,但又在更高的效率下解决了其不支持跨进程读写等弊端。
2.深入解析阿里巴巴路由框架 ARouter 源码
组件化被越来越多的 Android 项目采用,而作为组件化的基础——路由也是重中之重。因此详细的分析阿里巴巴开源的路由框架 ARouter。从源码的角度解释为什么这样使用,以及避免做什么,让你使用地更加顺滑。
3.深入解析 AsyncTask 源码(一款 Android 内置的异步任务执行库)
AsyncTask 是 Android SDK 中提供的一个用于执行异步任务的框架,在 Android 兴起的早期被广泛使用,但如今已经被 RxJava、协程等新兴框架所取代。虽然它存在着一些不足,但我们还是可以尝试了解一下它的实现原理以及存在的不足。
4.深入解析 Volley 源码(一款 Google 推出的网络请求框架)
Volley 是 Google 开发的一款网络请求框架,目前已停止更新。虽然目前大家的关注焦点都在 Retrofit、OkHttp 等第三方网络请求框架,团队的项目中所用的也是这两个框架,但 Volley 中还是有非常多优秀的设计思想值得我们去学习的。
5.深入解析 Retrofit 源码
在 Andrroid 开发中,网络请求十分常用,而在 Android 网络请求库中,Retrofit 是当下最热的一个网络请求库。
6.深入解析 OkHttp 源码
OkHttp 是一个处理网络请求的开源项目,是 Android 端最火热的轻量级框架,由移动支付 Square 公司贡献用于替代 HttpUrlConnection 和 Apache HttpClient。随着 OkHttp 的不断成熟,越来越多的 Android 开发者使用 OkHttp 作为网络框架。
7.深入解析[](
)ButterKnife 源码
作为 Android 开发者,大家肯定都知道大名鼎鼎的 butterknife。它大大的提高了开发效率,虽然在很早之前大家就开始使用它了,但是只知道是通过注解的方式实现的,却一直没有仔细的学习下大牛的代码。所以有必要系统的分析下 butterknife 的实现原理。
8.深入解析 Okio 源码(一套简洁高效的 I/O 库)
Okio 中有两个非常重要的接口——Sink 以及 Source,它们都继承了 Closeable,其中 Sink 对应了我们原来所使用的 OutputStream,而 Source 则对应了我们原来所使用的 InputStream。
Okio 的入口就是 Okio 类,它是一个工厂类,可以通过它内部的一些 static 方法来创建 Sink、Source 等对象。
9.深入解析 SharedPreferences 源码
SharedPreference 是一个 Android 开发自带的适合保存轻量级数据的 K-V 存储库,它使用了 XML 的方式来存储数据,比如我就经常用它保存一些如用户登录信息等轻量级数据。
10.深入解析 EventBus 源码
EventBus 是一个 Android 事件发布/订阅框架。
传统的事件传递方式包括:Handler(消息处理机制,一般用于更新 UI)、BroadCastReceiver(广播接收者)、Interface 回调。
EventBus 优点:
Activity、Fragment、Service 与线程之间的通讯是很常见的,EventBus 正好可以屏蔽一些线程切换问题,简单地实现发布订阅功能。
代码简洁,使用简单,并将事件发布和订阅充分解耦。
11.Android 自定义注解初探
由于之前用到的很多开源框架如 GreenDao、EventBus、ButterKnife、ARouter 等都使用了自定义注解,因此有必要去研究一下自定义注解。
12.View 的工作机制源码分析
13.[](
)Android 触摸事件分发机制源码分析
14.[](
)Android 按键事件分发机制源码分析
15.深入解析 Handler 源码
Android 的消息机制是基于 Handler 实现的。很多人以为,知道了 Handler、Looper、MessageQueue 就自以为了解了 Handler 的原理。但其实看源码的过程中慢慢就会发现,Handler 的内容可不止这点, 像同步屏障、 Handler 的 native 层的阻塞唤醒机制等等这些知识以前就没有理解清楚。
16.深入解析 Binder 源码
Binder 在 Android 中堪称武林秘籍中的"易筋经",无论是菜鸟还是老鸟都对之神往。Binder 架构是进程间相互通信的最常用手段,四大组件的基本功能都是依赖着 Binder 才能够实现的。
评论