字节跳动面试官一招差点KO我,一共面试了3轮(5年经验),艰难拿下2-2职级offer!
前言
我从大学毕业开始做Android开发,现在已经五年时间了,现在在山东老家济南做Android开发。这三年里面,也只是一心在做Android开发,其他语言接触的并不多,了解点JS之类的。现在感觉Android开始不像以前那样好做了,也可能是现在年纪慢慢大了,要考虑的事情变多了的缘故吧。
不知道以后应该何去何从,总是感觉做Android或者说做程序员一直处在一种不稳定之中,在一些中小公司里面,可能工作一年两年就因为各种各样的原因而离职。马上就要结婚了,该买房了。济南的房价一直在涨,而自己的收入还是这么不温不火的,加上这不稳定的工作,让人对于前途实在是乐观不起来。
再加上今年的大环境非常差,互联网企业裁员的现象比往年更严重了,可今年刚好是我的第一个“五年计划”截止的时间点,说什么也不能够耽搁了,所以早早准备的跳槽也在疫情好转之后开始进行了。但是,不得不说,这次字节的面试真的太难为我了,可以说是和面试官大战了3个回合,不过好在最后给了offer。
我个人情况是5年Android开发经验,字节跳动定级2-2(年薪是50-100w左右含加班费和股票折现,不含车餐房补)的样子,我是拿到了年薪60w+,13薪。下面是我的面试经历,与学习经验分享,希望能带来一些不一样的启发和帮助。
我与字节跳动面试官“大战”3回合,胜!
我的学习经验
1—4年大学
•Java
无论什么级别的Android从业者,Java作为Android开发基础语言。不管是工作还是面试中,Java都是必考题。如果不懂Java的话,薪酬会非常吃亏(美团尤为重视Java基础)
详细介绍了Java泛型、注解、并发编程、数据传输与序列化、高效IO、容器集合、反射与类加载以及JVM重点知识线程、内存模型、JVM运行时内存、垃圾回收与算法、Java中四种引用类型、GC 分代收集算法 VS 分区收集算法、GC 垃圾收集器、JAVA IO/NIO 、JVM 类加载机制的各大知识点。
•筑基必备
Android架构师筑基包括哪些内容呢:
1.深入 Java 泛型.
2.解深入浅出
3.并发编程
4.数据传输与序列化
5.Java 虚拟机原理
6.反射与类加载
7.高效 IO
8.Kotlin项目实战
大学1-4年架构师筑基必备
•学习笔记整理
架构师筑基必备目录
架构师筑基必备第一章
自己工作1-3年,3-5年规划
免费分享网站源码我认为三年对于程序员来说是第一个门槛,这个阶段将会淘汰掉一批不适合写
代码的人。这一阶段,我们走出校园,迈入社会,成为一名程序员,正式从书本上的内容迈向真正的企业级开发。我们知道如何团队协作、如何使用项目管理工具、项目版本如何控制、我们写的代码如何测试如何在线上运行等等,积累了一定的开发经验,也对代码有了一定深入的认识,是一个比较纯粹的
Coder的阶段。
工作1-3年需要哪些知识呢?
◆ AIDL:熟悉AIDL,理解其工作原理,懂transact和onTransact的区别;
◆ Binder:从Java层大概理解Binder的工作原理,懂Parcel对象的使用;
◆ 多进程:熟练掌握多进程的运行机制,懂Messenger、Socket等;
◆ 事件分发:弹性滑动、滑动冲突等;
◆ 玩转View:View的绘制原理、各种自定义View;
◆ 动画系列:熟悉View动画和属性动画的不同点,懂属性动画的工作原理;
◆ 懂性能优化、熟悉mat等工具
◆ 懂点常见的设计模式
这个阶段须掌握图中“Android核心高级技术”;还要多阅读Android源码,阅读官方文档并尝试写技术文章,需要有一定技术深度和自我思考。在这个阶段的学习过程中,有2个点是比较困扰大家的,一个是阅读源码,另一个是自定义View以及滑动冲突。
如何阅读源码呢?阅读源码的时候不要深入代码细节不可自拔,要关注代码的流程并尽量挖掘出对应用层开发有用的结论。另外仔细阅读源码中对一个类或者方法的注释,在看不懂源码时,源码中的注释可以帮你更好地了解源码中的工作原理,这个过程虽然艰苦,但是别无他法,然而这个过程的收获也是其他学习方式不可替补的。
◆ PS:我这里也是整理了一份源码笔记,有需要的可以在我的【GitHub】里查看!
工作3-5年规划
五年又是区分程序员的第二个门槛。有些人在三年里,除了完成工作,在空余时间基本不会研究别的东西,热衷于研究各种技术实现细节、看了N多好
书、写一些博客、在Github上分享技术。
这些人在五年后必然具备在技术上独当一面的能力并且清楚自己未来的发展方向,从一个Coder逐步走向系统分析师或是架构师,成为项目组中不可或缺的
人物。
◆ 继续加深理解“稍微深入的知识点“中所定义的内容
◆ 了解系统核心机制:
1.了解SystemServer的启动过程
2.了解主线程的消息循环模型
3.了解AMS和PMS的工作原理
4.能够回答问题”一个应用存在多少个Window?“
5.了解四大组件的大概工作流程
6.…
◆ 基本知识点的细节:
1.Activity的启动模式以及异常情况下不同Activity的表现
2.Service的onBind和onReBind的关联
的区别
4.AsyncTask在不同版本上的表现细节
5.线程池的细节和参数配置
6.…
◆ 熟悉设计模式(常用设计模式)架构意识。
工作3-5年规划
学习笔记内容
热修复设计、插件化框架设计、组件化框架设计、图片加载框架、网络访问框架设计、RXJava响应式编程框架设计
字节跳动面试经历
第一轮:
•起手式:自我介绍
•介绍下简历上的项目
•线程池的使用,线程池如何实现的,线程池的原理
•Thread 的join 函数的作用
•java 线程间通信的方法有哪些
•Android handler 机制,源代码
•juc atomicInteger 类为什么能保持线程安全,普通的变量为什么不能保证线程安全
•java 内存模型(问了我有没有阅读过JSR 133的官方文档?并没有,很惭愧,感觉学的路子有点野)
•java 内存分区
•concurrentHashMap 的原理
•100以内,10万以内,10万到无穷个数,三种情况排序,选择排序算法•你有什么要问我的?(问了一些技术相关的问题)
第二轮:
•愿意不愿意来杭州
•自我介绍
•java的gc(gc工作原理,gc回收机制,gc内存分配)
•http和https区别
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论