其实跳槽不是一件简单轻松的事情,什么样的跳槽才真正有价值!本文带你深入了解跳槽相关的所有细节,建议收藏!
很多人以为“跳槽”就是写简历、换工作,但要想得到满意的 offer,其实需要思考、准备的内容很多,大概有这么几点:
-
跳槽前要思考清楚
-
掌握跳槽需要的知识点
-
写一份高质量的简历
-
了解简历投递的时机和方式
-
拿到面试邀请要做好功课
-
面试中要调整心态,努力表现
-
面试后及时思考总结
-
有多个 offer 如何选择
-
优雅的离职
这些应该是一次跳槽从开始到结束比较完整的流程了。接下来我们将详细了解每一部分。
=================================================================================
每一份工作都是以希冀开始,我们心怀憧憬,希望在公司里大展拳脚、做些成就。
然而是什么让我们走到今天这地步,即将与它分手?
一般离职有两个原因:
-
钱不到位
-
心委屈了
钱不到位怎么办
业界一种普遍的观念是“跳槽涨工资最快”,这也的确是现状。
为什么公司迟迟不给加薪,非得逼得我们跳槽呢?
答案很简单:因为公司没有意识到你价值的增长。
我们在入职时可能只是一个菜鸟,但是在工作一段时间后,由于个人的努力以及业务的锻炼,水平已经有了很大的不同,自己心里觉得自己不再是菜鸟了,希望能拿更高的工资。
但你可能一直在做一个项目,没有承担更多的责任,公司无法了解到你现在能力到什么程度了。
这个时候,如果领导比较好的话,你可以先主动要求承担任务,积极完成(就是加班加点),然后在一段时间后找领导谈加薪。这样就有理有据,让人信服,领导一般都会同意。这样就不用跳槽了,省去准备面试题的繁琐。Over。
如果领导不同意,那就没辙了。
心委屈怎么办
员工离职的另外一种原因就是:待着不爽,心里委屈了。
一些被动的原因比如领导更替、岗位调整、加班太多等,都会让人心里不舒服。拿我来说,公司业务转型,做的工作不是安卓应用开发,做久了心里不踏实,就想离职了。如果有条件的话,可以跟领导沟通能否恢复原样,如果无望,那就只好跳槽了。
但在真正提出离职之前,还需要思考几个问题。
离职前的思考
If you don’t like something, change it. If you can’t change it, change your attitude. Don’t complain.
有的朋友可能会说:别废话,赶紧讲面试知识点,我干的不爽就跳槽了,还想什么想?
非也,每次跳槽的成本其实很大,除去面试来回的时间不说,新旧环境的适应、业务的熟悉、代码的掌握,都需要成本,如果两次跳槽间隔太短,其实时间都花在了适应新环境上,真正学习、沉淀的内容不会太多,尤其在刚开始工作,更忌讳这样子。
因此,在确定离职前,你需要先问自己 3 个问题:
-
现在的项目没有我可以学习的内容了吗?
-
离开这里我会失去什么?
-
到新环境可以得到什么?
拿我自己来说,3 月份时项目里的代码我没有掌握太扎实,框架层很多设计思路还搞不清楚,出去面试一问就问倒了。这时如果真的换了工作,恐怕又要接触新项目、新代码,根本没时间好好消化之前的代码。
除了代码,人际关系也需要沉淀,在这个公司待了那么久,看到了一些同事的优秀品质,学习、借鉴他们也需要一定的时间,如果忙着换工作,可能就失去了和同事深入交流的机会。
因此在第一次面试失败后,我把项目代码好好研究了一个多月,也跟同事请教很多学习、规划上的知识,为后面的路做好铺垫。
确定要走时需要做的准备
在确定要走后,尽量不要裸辞,现在的行情你懂得,没有准备就裸辞,等于断了自己后路。
有的网友问我:辞职在家好好复习一个多月怎么样。我劝他还是算了,都不是自觉的人,天天在家反而更学不进去。最好的状态就是一边工作,一边搜集要学习的知识点学习资料,下班路上、晚上、周末去学习,那样精神压力不会太大。
在开始复习知识点前,你需要确认以下 2 点:
-
定位
-
亮点
定位
“定位” 是指你要确定自己所处的阶段和想要的目标。主要包括:
-
目前是什么水平
-
有什么积累
-
工作项目里有什么难点
-
想找什么级别的工作
举个例子,你可以给自己的定位就是:现在是中级水平,常见应用开发需求基本都能解决,开源框架使用没问题,部分读了源码,工作项目里主要是混合开发比较复杂,想找有利于自己成长的、大公司中高级安卓开发工作。
亮点
有的朋友可能对 “亮点” 的定义不是很明白。“亮点” 其实就是能够把你和众多应聘者区分出来的优秀品质。
程序员面试主要考察这几点:
-
技能水平
-
学习能力
-
团队合作
-
工作心态等
如果你在其中任何一个方面都有自己的优势,就赶紧找出来,写到简历上,面试表达出来。
拿技能水平来说,根据做过项目的类型,确定自己当前擅长的点,比如你做的是电商应用,那可能就擅长混合开发、自定义 View;做的是电台应用,那可能就擅长后台进程保活;做的是大用户量应用,那可能就擅长监控、性能优化等等。
找到自己已有的或者该有的亮点,然后去努力掌握、精通。
行情怎么样
有的网友说早就想跳槽了,但是听说行情不好,不敢跳。其实吧,价格取决于价值,影响价格波动的是供需关系。
疫情原因,很多互联网企业生存艰难,招聘的岗位标准就比以要高一些了,去招聘软件上看也可以发现,大多要求 3 年以上经验。这是因为现在安卓初级太多了,各种应届生、培训班涌入市场,前几年会用 ListView 就可以找工作的日子一去不复还。不过真正的高级,或者有潜力的中级,还是很受企业欢迎的。
因此,我们在想要跳槽时,不要被所谓的“差行情”拦住,而是要审视自己的水平,确定自己的目标,究竟是要找初级岗、中级岗,还是高级岗。
面试前,面试官拿到你的简历,根据简历上的信息会建立第一印象。因此你想要呈现给对方一个怎样的定位,有什么亮点,都需要事先思考清楚。
确定了方向后就要开始努力准备,下一节我们介绍安卓跳槽需要准备复习的知识。
==========================================================================================
在介绍面试考察内容前,先来看看我认为的“中高级Android”需要掌握的知识点,这些这是我们集合了牛客网、掘金、简书、知乎、CSDN等网站的几十篇面经和群友自己面试的经历的合集,以及请教前辈总结而来的。整理的知识点会有 Java、Android SDK、Android 源码、常见面试算法题、其他的一些计算机基础以及常见的面试题等几个部分:
1.Java 知识点汇总
2.Android 知识点汇总
3.Android 扩展知识点汇总
4.Android 开源库源码分析
5.设计模式汇总
6.计算机网络基础
7.常见面试算法题汇总
8.Kotlin知识点汇总
9.Flutter知识点汇总
面试中级及以下岗位时,在电话面试、一面、或者你简历没有突出亮点时,一般都会先问基础,目的是确定你基本功扎不扎实。
如果基础知识有太多不会的就危险了,必须好好准备,这是躲不过的。电话面试、一面考察基本功过关后,就会进入下一阶段 — 问些进阶的,看看你最高水平在哪里。
这个阶段有不会的很正常,因为对方正在确定你的水平,但态度一定要积极主动,即使之前没有研究过,也要结合一些经验说出推测的结果,切忌直接说“我不会”。
-
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
-
锁的分类
-
悲观锁、乐观锁
-
自旋锁、适应性自旋锁
-
死锁
-
引用类型
-
动态代理
-
元注解
答案解析
-
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 加载优化
-
内存泄漏
答案解析
-
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
-
LeakCanary
-
初始化注册
-
引用泄漏观察
-
Dump Heap
-
EventBus
-
自定义注解
-
注册订阅者
-
发送事件
-
设计模式分类
-
面向对象六大原则
-
工厂模式
-
单例模式
-
建造者模式
-
原型模式
-
适配器模式
-
观察者模式
-
代理模式
-
责任链模式
-
策略模式
-
备忘录模式
答案解析
-
网络体系的分层结构
-
HTTP 相关
-
请求报文
-
请求行
-
请求头
-
响应报文
-
常见状态码
-
缓存机制
-
Https
-
Http 2.0
-
TCP/IP
-
三次握手
-
四次挥手
-
TCP 与 UDP 的区别
-
Socket
-
使用示例
答案解析
-
排序
-
比较排序
-
冒泡排序
-
归并排序
-
快速排序
-
线性排序
-
计数排序
-
桶排序
-
二叉树
-
顺序遍历
-
层次遍历
-
左右翻转
-
最大值
-
最大深度
-
最小深度
-
平衡二叉树
-
链表
-
删除节点
-
翻转链表
-
中间元素
-
判断是否为循环链表
-
合并两个已排序链表
-
链表排序
-
删除倒数第N个节点
-
两个链表是否相交
-
栈 / 队列
-
带最小值操作的栈
-
有效括号
-
用栈实现队列
-
逆波兰表达式求值
-
二分
-
二分搜索
-
X的平方根
-
哈希表
-
两数之和
-
连续数组
-
最长无重复字符的子串
-
最多点在一条直线上
-
堆 / 优先队列
-
前K大的数
-
前K大的数II
-
第K大的数
-
二叉搜索树
-
验证二叉搜索树
-
第K小的元素
-
数组 / 双指针
-
加一
-
删除元素
-
删除排序数组中的重复数字
-
我的日程安排表 I
-
合并排序数组
-
贪心
-
买卖股票的最佳时机
-
买卖股票的最佳时机 II
-
最大子数组
-
主元素
-
字符串处理
-
生成括号
-
Excel表列标题
-
翻转游戏
-
翻转字符串中的单词
-
转换字符串到整数
-
最长公共前缀
-
回文数
-
动态规划
-
单词拆分
-
爬楼梯
-
打劫房屋
-
编辑距离
-
乘积最大子序列
-
矩阵
-
螺旋矩阵
-
判断数独是否合法
-
旋转图像
-
二进制 / 位运算
-
落单的数
-
格雷编码
-
其他
-
反转整数
-
LRU缓存策略
答案解析
-
from-java-to-kotlin
-
kotlin_tips
-
从原理分析Kotlin的延迟初始化: lateinit var和by lazy
-
使用Kotlin Reified 让泛型更简单安全
-
Kotlin里的Extension Functions实现原理分析
-
Kotlin系列之顶层函数和属性
-
Kotlin 兼容 Java 遇到的最大的 “坑”
-
Kotlin 的协程用力瞥一眼
-
Kotlin 协程「挂起」的本质
-
到底什么是「非阻塞式」挂起?协程真的更轻量级吗?
-
资源混淆是如何影响到Kotlin协程的
-
Kotlin Coroutines(协程) 完全解析
答案解析
-
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更新机制