首先,我承认,我取这样的标题确实有点夸大其词了,不过offer是真的,本意还是为了帮助更多在面试中的朋友,还请刷到文章的朋友见谅一下。
一、自身情况
本人19年毕业于一家普通一本,考研裂开且没有实习经验,只做过两个项目会一点Android。
每天就是不断地投简历、刷面经,感觉自己都要抑郁了,最后勉强进入了一家学校合作的互联网公司写了2年的业务代码,每个月拿着9000的薪水还要被迫接受996,感觉未来没有希望。
但是在今年的五月中旬看着自己的同事跳槽涨薪拿着月薪18k+的薪水,我决定做出改变,离开这里!打算裸辞~

二、为什么要面大厂?
原因有以下几点:
- 第一,你周围大概率会是很多很优秀的人。你从这些优秀的人身上可以学到很多的东西。包括他们做事的方法、解决问题的思路,以及他们的一些工作习惯。这些往往都会影响到你后续的职业生涯。另外,当你周围都是很优秀的人的时候,你会被这种气氛和环境所感染,你需要不断的努力才能达到这些人的平均水平。所以你不太敢懈怠,因为一旦懈怠,你可能就会掉队,你会有这种落差或者危机感。
- 第二,大厂里会用到很多比较新的技术。可能有的技术还没有被大范围的推广,但是出于开源或者是公司资源的角度,都会涌现出一些比较好用的工具。即使你没有自己做这个工具,但是通过使用这个工具,你可能就能领会到其中的一些精髓。对你以后自己来去构思这些工具的时候,会提供一个比较好的基础。
- 第三,有一个优势就是大厂里机遇更大。你如果跟对了leader,即使你在这个公司离职了,只要你跟老板有一个比较好的联络。那么等有机会的时候,你可以再次去投奔他。也就是说,除了你通过自己努力,有一个比较好的发展之外,你还多了一条路,就是你的老板有一个更好的发展前景。这样的话,当他成功的时候,你可以去投奔他,这样能够节约很多的成本。从概率上来讲,大厂的leader,发展好的概率更大。
- 第四,还有一些客观上的好处,就是你有了大厂的经历之后,再去找下一份工作的时候会有一些天然的优势。尤其在涨工资定级方面,有过大厂工作经验,和只有小公司工作经验相比,估计大部分人都会选择前者。在一般情况下,这是一个非常大的优势。
当你明白这些以后,你才会明白为什么有一些程序员会挤破头都要挤进大厂,因为这些高福利、高待遇的工作每分钟都在提醒着我需要进步;

三、字节跳动四轮面经+offer
我并不是裸辞之后就直接去面字节的,因为有些技术点在工作中不常用就很容易忘记,所以我必须要重头过一遍,给了自己大概1.5个月(接近40天)的复习时间,从四大组件下手开始着手复习。
一开始准备地时候其实并不轻松,感觉自己的技术还停留在2年前刚毕业的时候。
对于大厂互联网企业的技术栈一概不通,每天废寝忘食的学习,不断地去提升自己的技术能力.也受到了很多同学的帮助,其中一位成功上岸字节的同学(大学室友)教给了我上岸字节的秘诀,并给了我内推!
在这里很感谢他;

字节跳动面经(一面)
- string,equals,==有什么区别
- AsyncTask内存泄露
- dispatchTouchEvent,onInterceptEvent,onTouchEvent顺序,关系
- onMeasure,onLayout,onDraw关系
- 算法题,链表求和
- 说说你对协程的理解
- 协程怎么取消
- 说说MVP与MVVM的区别
- ...
字节跳动面经(二面)
- 算法题,二叉树的最大深度
- 如果android端和IOS端调一个接口,一个通了一个没通,你会如何解决
- 如果android端和IOS端调一个接口,一个比较慢,一个比较快,有什么思路
- ARouter的原理是什么?如果不用ARouter,你会怎么去解藕。接口?设计接口有什么需要注意的?
- h5与native交互做过什么工作?
- 登陆功能,登陆成功然后跳转到一个新Activity,中间涉及什么?从事件传递,网络请求,AMS交互角度分析
- AMS交互调用生命周期是顺序的吗?
- binder进程间通信可以调用原进程方法吗?
- mvp与mvvm有什么区别?
- token放在本地如何保存?如何加密比较好?
- ...
字节跳动面经(三面)
- 说说HashMap的原理
- 说说Java的内存分区
- 讲讲你对垃圾回收机制的了解,老年代有什么算法?
- 说说你对volatile字段有什么用途?
- 说说事件分发机制,怎么写一个不能滑动的ViewPager
- 说说你对类加载机制的了解?DexClassLoader与PathClassLoader的区别
- 说说插件化的原理,资源的插件化id重复如何解决?
- mvp与mvvm模式的区别是什么?
- JetPack组件用过哪些?lifeCycle的原理是什么?如果在onStart里面订阅,会回调onCreate吗?
- 单例模式有什么缺点?
- 说说App的启动过程,在ActivityThread的main方法里面做了什么事,什么时候启动第一个Activity?
- 说说你对Handler机制的了解,同步消息,异步消息等
- 说说你对屏幕刷新机制的了解,双重缓冲,三重缓冲,黄油模型
- onCreate,onResume,onStart里面,什么地方可以获得宽高
- 为什么view.post可以获得宽高,有看过view.post的源码吗?
- DataBinding的原理了解吗?
- 算法题:给定一个链表L1、L2,每个元素是为10以内的正整数,链表表示一个数字,表头为高位。 求两个链表之差,以链表形式返回
字节跳动面经(四面)
- 介绍一下你们项目的架构
- Rxjava是怎么实现线程切换的
- Rxjava自定义操作符
- ARouter的原理
- ARouter怎么实现接口调用
- ARouter怎么实现页面拦截
- MVP怎么处理内存泄漏
- OkHttp怎么实现连接池
- 如果让你来实现一个网络框架,你会考虑什么
- 你做过什么性能优化的工作
- 热修复的原理,资源的热修复的原理,会不会有资源冲突的问题
- ViewPager中嵌套ViewPager怎么处理滑动冲突
- android源码中有哪些设计模式
- 说说binder机制的原理
- ...
面经虽然有参考性,但是最重要的还是你自身的技术水平如何,作为一个Android开发者,不仅要打好自身基础,更重要的是要建立起自己的知识体系, 你要知道知识是碎片化的,建立知识体系会让自己对技术的运用更加融会贯通,往“T型”人才发展;
技术上的成长往往是会花费很多时间的,但是利用这些时间帮你技术上更上一层台阶进入大厂,岂不妙哉?
这里,我对比之前复习过的Android知识点和字节面试的经验,给大家做了一个技术整理,分别包括了:
- Java基础:JVM、String、内部类、多态、抽象和接口、集合框架(Hashmap、Arraylist)、单例、线程、Synchronized、Look锁、动态代理、引用
- Android基础:四大组件、View、进程、Bitmap、屏幕适配、消息机制、线程异步、WebView。
- Android扩展:Framework、AMS/PMS/WMS、Binder源码、Handler源码、ART、Apk优化、Hook、Proguard、架构(MVC/MVP/MVVM)、Jetpack、NDK开发、Rxjava、
- Android源码:Leakcanary、Eventbus
- 设计模式:面向对象六大原则、工厂模式、单例模式、建造者模式、观察者模式、适配器模式、策略模式、代理模式。
数据结构与算法:
- 线性链表
- 查找:顺序查找、二分查找
- 排序:交换类、插入类、选择类
- 树、二叉树、图:深度优先(DFS)、广度优先(BFS)
- 递归
- 分治
- 滑窗
- 三大牛逼算法:回溯、贪心、动态规划(DP)
- ......
PDF格式版:


完整目录版
《Android面试+提升手册》内容完整版我已经整理PDF模板了,
点击下方的推荐阅读即可进入;
推荐阅读:【2021年Android程序员面试+进阶知识点整理(加入免费获取PDF版)】

博主分享了自己从普通公司离职,决心脱产复习并成功拿到字节跳动Android开发Offer的经历。阐述了选择面大厂的原因,包括学习机会、新技术应用、职业发展和求职优势。详细记录了字节跳动的四轮面试内容,涵盖技术点如Android基础、面试算法、并发编程、设计模式等,并提供了全面的技术整理和学习资源推荐。
2537

被折叠的 条评论
为什么被折叠?



