阿里P10赵海平跳槽字节跳动:深度解析跳槽从开始到结束完整流程!

262 阅读14分钟

其实跳槽不是一件简单轻松的事情,什么样的跳槽才真正有价值!本文带你深入了解跳槽相关的所有细节,建议收藏!

很多人以为“跳槽”就是写简历、换工作,但要想得到满意的 offer,其实需要思考、准备的内容很多,大概有这么几点:

  1. 跳槽前要思考清楚

  2. 掌握跳槽需要的知识点

  3. 写一份高质量的简历

  4. 了解简历投递的时机和方式

  5. 拿到面试邀请要做好功课

  6. 面试中要调整心态,努力表现

  7. 面试后及时思考总结

  8. 有多个 offer 如何选择

  9. 优雅的离职

这些应该是一次跳槽从开始到结束比较完整的流程了。接下来我们将详细了解每一部分。

01. 跳槽前要思考的问题

=================================================================================

每一份工作都是以希冀开始,我们心怀憧憬,希望在公司里大展拳脚、做些成就。

然而是什么让我们走到今天这地步,即将与它分手?

一般离职有两个原因:

  • 钱不到位

  • 心委屈了

钱不到位怎么办

业界一种普遍的观念是“跳槽涨工资最快”,这也的确是现状。

为什么公司迟迟不给加薪,非得逼得我们跳槽呢?

答案很简单:因为公司没有意识到你价值的增长。

我们在入职时可能只是一个菜鸟,但是在工作一段时间后,由于个人的努力以及业务的锻炼,水平已经有了很大的不同,自己心里觉得自己不再是菜鸟了,希望能拿更高的工资。

但你可能一直在做一个项目,没有承担更多的责任,公司无法了解到你现在能力到什么程度了。

这个时候,如果领导比较好的话,你可以先主动要求承担任务,积极完成(就是加班加点),然后在一段时间后找领导谈加薪。这样就有理有据,让人信服,领导一般都会同意。这样就不用跳槽了,省去准备面试题的繁琐。Over。

如果领导不同意,那就没辙了。

心委屈怎么办

员工离职的另外一种原因就是:待着不爽,心里委屈了。

一些被动的原因比如领导更替、岗位调整、加班太多等,都会让人心里不舒服。拿我来说,公司业务转型,做的工作不是安卓应用开发,做久了心里不踏实,就想离职了。如果有条件的话,可以跟领导沟通能否恢复原样,如果无望,那就只好跳槽了。

但在真正提出离职之前,还需要思考几个问题。

离职前的思考

If you don’t like something, change it. If you can’t change it, change your attitude. Don’t complain.

有的朋友可能会说:别废话,赶紧讲面试知识点,我干的不爽就跳槽了,还想什么想?

非也,每次跳槽的成本其实很大,除去面试来回的时间不说,新旧环境的适应、业务的熟悉、代码的掌握,都需要成本,如果两次跳槽间隔太短,其实时间都花在了适应新环境上,真正学习、沉淀的内容不会太多,尤其在刚开始工作,更忌讳这样子。

因此,在确定离职前,你需要先问自己 3 个问题:

  1. 现在的项目没有我可以学习的内容了吗?

  2. 离开这里我会失去什么?

  3. 到新环境可以得到什么?

拿我自己来说,3 月份时项目里的代码我没有掌握太扎实,框架层很多设计思路还搞不清楚,出去面试一问就问倒了。这时如果真的换了工作,恐怕又要接触新项目、新代码,根本没时间好好消化之前的代码。

除了代码,人际关系也需要沉淀,在这个公司待了那么久,看到了一些同事的优秀品质,学习、借鉴他们也需要一定的时间,如果忙着换工作,可能就失去了和同事深入交流的机会。

因此在第一次面试失败后,我把项目代码好好研究了一个多月,也跟同事请教很多学习、规划上的知识,为后面的路做好铺垫。

确定要走时需要做的准备

在确定要走后,尽量不要裸辞,现在的行情你懂得,没有准备就裸辞,等于断了自己后路。

有的网友问我:辞职在家好好复习一个多月怎么样。我劝他还是算了,都不是自觉的人,天天在家反而更学不进去。最好的状态就是一边工作,一边搜集要学习的知识点学习资料,下班路上、晚上、周末去学习,那样精神压力不会太大。

在开始复习知识点前,你需要确认以下 2 点:

  • 定位

  • 亮点

定位

“定位” 是指你要确定自己所处的阶段和想要的目标。主要包括:

  • 目前是什么水平

  • 有什么积累

  • 工作项目里有什么难点

  • 想找什么级别的工作

举个例子,你可以给自己的定位就是:现在是中级水平,常见应用开发需求基本都能解决,开源框架使用没问题,部分读了源码,工作项目里主要是混合开发比较复杂,想找有利于自己成长的、大公司中高级安卓开发工作。

亮点

有的朋友可能对 “亮点” 的定义不是很明白。“亮点” 其实就是能够把你和众多应聘者区分出来的优秀品质。

程序员面试主要考察这几点:

  • 技能水平

  • 学习能力

  • 团队合作

  • 工作心态等

如果你在其中任何一个方面都有自己的优势,就赶紧找出来,写到简历上,面试表达出来。

拿技能水平来说,根据做过项目的类型,确定自己当前擅长的点,比如你做的是电商应用,那可能就擅长混合开发、自定义 View;做的是电台应用,那可能就擅长后台进程保活;做的是大用户量应用,那可能就擅长监控、性能优化等等。

找到自己已有的或者该有的亮点,然后去努力掌握、精通。

行情怎么样

有的网友说早就想跳槽了,但是听说行情不好,不敢跳。其实吧,价格取决于价值,影响价格波动的是供需关系。

疫情原因,很多互联网企业生存艰难,招聘的岗位标准就比以要高一些了,去招聘软件上看也可以发现,大多要求 3 年以上经验。这是因为现在安卓初级太多了,各种应届生、培训班涌入市场,前几年会用 ListView 就可以找工作的日子一去不复还。不过真正的高级,或者有潜力的中级,还是很受企业欢迎的。

因此,我们在想要跳槽时,不要被所谓的“差行情”拦住,而是要审视自己的水平,确定自己的目标,究竟是要找初级岗、中级岗,还是高级岗。

面试前,面试官拿到你的简历,根据简历上的信息会建立第一印象。因此你想要呈现给对方一个怎样的定位,有什么亮点,都需要事先思考清楚。

确定了方向后就要开始努力准备,下一节我们介绍安卓跳槽需要准备复习的知识。

02. Android开发跳槽需要复习的知识

==========================================================================================

在介绍面试考察内容前,先来看看我认为的“中高级Android”需要掌握的知识点,这些这是我们集合了牛客网、掘金、简书、知乎、CSDN等网站的几十篇面经和群友自己面试的经历的合集,以及请教前辈总结而来的。整理的知识点会有 Java、Android SDK、Android 源码、常见面试算法题、其他的一些计算机基础以及常见的面试题等几个部分:

1.Java 知识点汇总

2.Android 知识点汇总

3.Android 扩展知识点汇总

4.Android 开源库源码分析

5.设计模式汇总

6.计算机网络基础

7.常见面试算法题汇总

8.Kotlin知识点汇总

9.Flutter知识点汇总

面试中级及以下岗位时,在电话面试、一面、或者你简历没有突出亮点时,一般都会先问基础,目的是确定你基本功扎不扎实。

如果基础知识有太多不会的就危险了,必须好好准备,这是躲不过的。电话面试、一面考察基本功过关后,就会进入下一阶段 — 问些进阶的,看看你最高水平在哪里。

这个阶段有不会的很正常,因为对方正在确定你的水平,但态度一定要积极主动,即使之前没有研究过,也要结合一些经验说出推测的结果,切忌直接说“我不会”。

第一章 Java 知识点汇总


  • JVM

  • JVM 工作流程

  • 运行时数据区(Runtime Data Area)

  • 方法指令

  • 类加载器

  • 垃圾回收 gc

  • 对象存活判断

  • 垃圾收集算法

  • 垃圾收集器

  • 内存模型与回收策略

  • Object

  • equals 方法

  • hashCode 方法

  • static

  • final

  • String、StringBuffer、StringBuilder

  • 异常处理

  • 内部类

  • 匿名内部类

  • 多态

  • 抽象和接口

  • 集合框架

  • HashMap

  • 结构图

  • HashMap 的工作原理

  • HashMap 与 HashTable 对比

  • ConcurrentHashMap

  • Base 1.7

  • Base 1.8

  • ArrayList

  • LinkedList

  • CopyOnWriteArrayList

  • 反射

  • 单例

  • 饿汉式

  • 双重检查模式

  • 静态内部类模式

  • 线程

  • 状态

  • 状态控制

  • volatile

  • synchronized

  • 根据获取的锁分类

  • 原理

  • Lock

  • 锁的分类

  • 悲观锁、乐观锁

  • 自旋锁、适应性自旋锁

  • 死锁

  • 引用类型

  • 动态代理

  • 元注解

答案解析

第一章Java知识点汇总

2020年Android开发最新全套面试题答案解析

第二章 Android 知识点汇总


  • Activity

  • 生命周期

  • 启动模式

  • 启动过程

  • Fragment

  • 特点

  • 生命周期

  • 与Activity通信

  • Service

  • 启动过程

  • 绑定过程

  • 生命周期

  • 启用前台服务

  • BroadcastReceiver

  • 注册过程

  • ContentProvider

  • 基本使用

  • 数据存储

  • View

  • MeasureSpec

  • MotionEvent

  • VelocityTracker

  • GestureDetector

  • Scroller

  • View 的滑动

  • View 的事件分发

  • 在 Activity 中获取某个 View 的宽高

  • Draw 的基本流程

  • 自定义 View

  • 进程

  • 进程生命周期

  • 多进程

  • 进程存活

  • OOM_ADJ

  • 进程被杀情况

  • 进程保活方案

  • Parcelable 接口

  • 使用示例

  • 方法说明

  • Parcelable 与 Serializable 对比

  • IPC

  • IPC方式

  • Binder

  • AIDL 通信

  • Messenger

  • Window / WindowManager

  • Window 概念与分类

  • Window 的内部机制

  • Window 的创建过程

  • Activity 的 Window 创建过程

  • Dialog 的 Window 创建过程

  • Toast 的 Window 创建过程

  • Bitmap

  • 配置信息与压缩方式

  • 常用操作

  • 裁剪、缩放、旋转、移动

  • Bitmap与Drawable转换

  • 保存与释放

  • 图片压缩

  • BitmapFactory

  • Bitmap创建流程

  • Option类

  • 基本使用

  • 内存回收

  • 屏幕适配

  • 单位

  • 头条适配方案

  • 刘海屏适配

  • Context

  • SharedPreferences

  • 获取方式

  • getPreferences

  • getDefaultSharedPreferences

  • getSharedPreferences

  • 架构

  • apply / commit

  • 注意

  • 消息机制

  • Handler 机制

  • 工作原理

  • ThreadLocal

  • MessageQueue

  • Looper

  • Handler

  • 线程异步

  • AsyncTask

  • 基本使用

  • 工作原理

  • HandlerThread

  • IntentService

  • 线程池

  • RecyclerView 优化

  • Webview

  • 基本使用

  • WebView

  • WebSettings

  • WebViewClient

  • WebChromeClient

  • Webview 加载优化

  • 内存泄漏

答案解析

第二章Android知识点汇总

第三章 Android 扩展知识点汇总


  • ART

  • ART 功能

  • 预先 (AOT) 编译

  • 垃圾回收优化

  • 开发和调试方面的优化

  • ART GC

  • Apk 包体优化

  • Apk 组成结构

  • 整体优化

  • 资源优化

  • 代码优化

  • .arsc文件优化

  • lib目录优化

  • Hook

  • 基本流程

  • 使用示例

  • Proguard

  • 公共模板

  • 常用的自定义混淆规则

  • aar中增加独立的混淆配置

  • 检查混淆和追踪异常

  • 架构

  • MVC

  • MVP

  • MVVM

  • Jetpack

  • 架构

  • 使用示例

  • NDK 开发

  • JNI 基础

  • 数据类型

  • String 字符串函数操作

  • 常用 JNI 访问 Java 对象方法

  • NDK 开发

  • 基础开发流程

  • System.loadLibrary()

  • CMake 构建 NDK 项目

  • 常用的 Android NDK 原生 API

  • 类加载器

  • 双亲委托模式

  • DexPathList

第三章 Android 扩展知识点汇总

2020年Android开发最新全套面试题答案解析

第四章 Android 开源库源码分析


  • LeakCanary

  • 初始化注册

  • 引用泄漏观察

  • Dump Heap

  • EventBus

  • 自定义注解

  • 注册订阅者

  • 发送事件

第四章 Android 开源库源码分析

第五章设计模式汇总


  • 设计模式分类

  • 面向对象六大原则

  • 工厂模式

  • 单例模式

  • 建造者模式

  • 原型模式

  • 适配器模式

  • 观察者模式

  • 代理模式

  • 责任链模式

  • 策略模式

  • 备忘录模式

答案解析

第五章设计模式汇总

第六章计算机网络基础


  • 网络体系的分层结构

  • HTTP 相关

  • 请求报文

  • 请求行

  • 请求头

  • 响应报文

  • 常见状态码

  • 缓存机制

  • Https

  • Http 2.0

  • TCP/IP

  • 三次握手

  • 四次挥手

  • TCP 与 UDP 的区别

  • Socket

  • 使用示例

答案解析

第六章计算机网络基础

2020年Android开发最新全套面试题答案解析

第七章 常见面试算法题汇总


  • 排序

  • 比较排序

  • 冒泡排序

  • 归并排序

  • 快速排序

  • 线性排序

  • 计数排序

  • 桶排序

  • 二叉树

  • 顺序遍历

  • 层次遍历

  • 左右翻转

  • 最大值

  • 最大深度

  • 最小深度

  • 平衡二叉树

  • 链表

  • 删除节点

  • 翻转链表

  • 中间元素

  • 判断是否为循环链表

  • 合并两个已排序链表

  • 链表排序

  • 删除倒数第N个节点

  • 两个链表是否相交

  • 栈 / 队列

  • 带最小值操作的栈

  • 有效括号

  • 用栈实现队列

  • 逆波兰表达式求值

  • 二分

  • 二分搜索

  • X的平方根

  • 哈希表

  • 两数之和

  • 连续数组

  • 最长无重复字符的子串

  • 最多点在一条直线上

  • 堆 / 优先队列

  • 前K大的数

  • 前K大的数II

  • 第K大的数

  • 二叉搜索树

  • 验证二叉搜索树

  • 第K小的元素

  • 数组 / 双指针

  • 加一

  • 删除元素

  • 删除排序数组中的重复数字

  • 我的日程安排表 I

  • 合并排序数组

  • 贪心

  • 买卖股票的最佳时机

  • 买卖股票的最佳时机 II

  • 最大子数组

  • 主元素

  • 字符串处理

  • 生成括号

  • Excel表列标题

  • 翻转游戏

  • 翻转字符串中的单词

  • 转换字符串到整数

  • 最长公共前缀

  • 回文数

  • 动态规划

  • 单词拆分

  • 爬楼梯

  • 打劫房屋

  • 编辑距离

  • 乘积最大子序列

  • 矩阵

  • 螺旋矩阵

  • 判断数独是否合法

  • 旋转图像

  • 二进制 / 位运算

  • 落单的数

  • 格雷编码

  • 其他

  • 反转整数

  • LRU缓存策略

答案解析

第七章 常见面试算法题汇总

第八章 Kotlin 相关知识点


  • from-java-to-kotlin

  • kotlin_tips

  • 从原理分析Kotlin的延迟初始化: lateinit var和by lazy

  • 使用Kotlin Reified 让泛型更简单安全

  • Kotlin里的Extension Functions实现原理分析

  • Kotlin系列之顶层函数和属性

  • Kotlin 兼容 Java 遇到的最大的 “坑”

  • Kotlin 的协程用力瞥一眼

  • Kotlin 协程「挂起」的本质

  • 到底什么是「非阻塞式」挂起?协程真的更轻量级吗?

  • 资源混淆是如何影响到Kotlin协程的

  • Kotlin Coroutines(协程) 完全解析

答案解析

第八章 Kotlin 相关知识点

第九章 Flutter 相关知识点汇总


  • Flutter原理与实践

  • 揭秘Flutter Hot Reload(原理篇)

  • Flutter 动态化探索

  • Flutter如何和Native通信-Android视角

  • 深入理解Flutter Platform Channel

  • Flutter Engine 编译指北

  • Flutter Engine 线程模型

  • 深入理解Flutter多线程

  • Flutter状态管理 - 初探与总结

  • Flutter | 状态管理指南篇——Provider

  • 深入理解Flutter应用启动

  • Flutter渲染机制—UI线程

  • Flutter渲染机制—GPU线程

  • 深入理解Flutter应用启动

  • 深入理解setState更新机制