心委屈怎么办
员工离职的另外一种原因就是:待着不爽,心里委屈了。
一些被动的原因比如领导更替、岗位调整、加班太多等,都会让人心里不舒服。拿我来说,公司业务转型,做的工作不是安卓应用开发,做久了心里不踏实,就想离职了。如果有条件的话,可以跟领导沟通能否恢复原样,如果无望,那就只好跳槽了。
但在真正提出离职之前,还需要思考几个问题。
离职前的思考
有的朋友可能会说:别废话,赶紧讲面试知识点,我干的不爽就跳槽了,还想什么想?
非也,每次跳槽的成本其实很大,除去面试来回的时间不说,新旧环境的适应、业务的熟悉、代码的掌握,都需要成本,如果两次跳槽间隔太短,其实时间都花在了适应新环境上,真正学习、沉淀的内容不会太多,尤其在刚开始工作,更忌讳这样子。
因此,在确定离职前,你需要先问自己 3 个问题:
-
现在的项目没有我可以学习的内容了吗?
-
离开这里我会失去什么?
-
到新环境可以得到什么?
拿我自己来说,3 月份时项目里的代码我没有掌握太扎实,框架层很多设计思路还搞不清楚,出去面试一问就问倒了。这时如果真的换了工作,恐怕又要接触新项目、新代码,根本没时间好好消化之前的代码。
除了代码,人际关系也需要沉淀,在这个公司待了那么久,看到了一些同事的优秀品质,学习、借鉴他们也需要一定的时间,如果忙着换工作,可能就失去了和同事深入交流的机会。
因此在第一次面试失败后,我把项目代码好好研究了一个多月,也跟同事请教很多学习、规划上的知识,为后面的路做好铺垫。
确定要走时需要做的准备
在确定要走后,尽量不要裸辞,现在的行情你懂得,没有准备就裸辞,等于断了自己后路。
有的网友问我:辞职在家好好复习一个多月怎么样。我劝他还是算了,都不是自觉的人,天天在家反而更学不进去。最好的状态就是一边工作,一边搜集要学习的知识点学习资料,下班路上、晚上、周末去学习,那样精神压力不会太大。
在开始复习知识点前,你需要确认以下 2 点:
-
定位
-
亮点
定位
“定位” 是指你要确定自己所处的阶段和想要的目标。主要包括:
-
目前是什么水平
-
有什么积累
-
工作项目里有什么难点
-
想找什么级别的工作
比如我,给自己的定位就是:现在是中级水平,常见应用开发需求基本都能解决,开源框架使用没问题,部分读了源码,工作项目里主要是混合开发比较复杂,想找有利于自己成长的、大公司中高级安卓开发工作。
亮点
有的朋友可能对 “亮点” 的定义不是很明白。“亮点” 其实就是能够把你和众多应聘者区分出来的优秀品质。
程序员面试主要考察这几点:
-
技能水平
-
学习能力
-
团队合作
-
工作心态等
如果你在其中任何一个方面都有自己的优势,就赶紧找出来,写到简历上,面试表达出来。
拿技能水平来说,根据做过项目的类型,确定自己当前擅长的点,比如你做的是电商应用,那可能就擅长混合开发、自定义 View;做的是电台应用,那可能就擅长后台进程保活;做的是大用户量应用,那可能就擅长监控、性能优化等等。
找到自己已有的或者该有的亮点,然后去努力掌握、精通。
行情怎么样
有的网友说早就想跳槽了,但是听说行情不好,不敢跳。其实吧,价格取决于价值,影响价格波动的是供需关系。
2016 年创业公司的确死了很多,P2P、O2O 死了一大堆,但活下来的又融了很多钱,也成立了很多新公司,也需要招很多人。
这个时候,招聘的标准就比前几年要高一些了,去招聘软件上看也可以发现,大多要求 3 年以上经验。这是因为现在安卓初级太多了,各种应届生、培训班涌入市场,前几年会用 ListView 就可以找工作的日子一去不复还。不过真正的高级,或者有潜力的中级,还是很受企业欢迎的。
因此,我们在想要跳槽时,不要被所谓的“差行情”拦住,而是要审视自己的水平,确定自己的目标,究竟是要找初级岗、中级岗,还是高级岗。
面试前,面试官拿到你的简历,根据简历上的信息会建立第一印象。因此你想要呈现给对方一个怎样的定位,有什么亮点,都需要事先思考清楚。
确定了方向后就要开始努力准备,下一节我们介绍安卓跳槽需要准备复习的知识。
在介绍面试考察内容前,先来看看我认为的“中级安卓”需要掌握的知识点,这些是结合一些面经、自己实际面试以及请教前辈总结而来的,主要包括两部分:
-
基础知识
-
进阶知识
面试中级及以下岗位时,在电话面试、一面、或者你简历没有突出亮点时,一般都会先问基础,目的是确定你基本功扎不扎实。
如果基础知识有太多不会的就危险了,必须好好准备,这是躲不过的。电话面试、一面考察基本功过关后,就会进入下一阶段 — 问些进阶的,看看你最高水平在哪里。
这个阶段有不会的很正常,因为对方正在确定你的水平,但态度一定要积极主动,即使之前没有研究过,也要结合一些经验说出推测的结果,切忌直接说“我不会”。
基础知识
基础知识主要包括以下几点:
-
Java 基础
-
并发/异步
-
安卓基础
-
设计模式
-
常见的数据结构算法
-
网络基础
1. Java 基础
虽然现在 Kotlin 挺火的,但我面了几家大公司都没问 Kotlin,问了很多 Java 。所以一定要保证当前知识掌握熟练了,再学习新知识,不然真成了狗熊掰苞米。
Java 基础主要包括以下知识点:
-
内部类、静态内部类区别、使用场景
-
抽象类、接口继承实现区别
-
集合
-
注解
-
泛型
-
异常
-
IO
2. 并发/异步
主要包括两部分:
-
安卓并发类
-
Java 并发知识
安卓的主线程模型,要求我们必须将耗时操作放到线程异步执行,否则会影响 app 的流畅甚至卡顿。
接着就需要了解 Java 的线程、内存模型和 Java 并发包下提供的类了,这也是大公司考察基础的常客。
除了面试,如果你去看过开源框架,会发现里面有很多 ConcurrentHashMap
, Lock
, Condition
,一开始看的你一脸懵逼,在掌握了 Java 并发知识后,再去看框架就会省力许多。
Java 并发主要知识点:
-
同步锁 synchronized 与 Lock 区别
-
什么是可重入锁
-
线程通信方法
-
wait 和 sleep区别
-
wait-notify 模型
-
生产者消费者模型
-
线程池
建议阅读书籍:《Android 开发艺术探索》、《Java 并发编程艺术》、《Java 并发编程实战》
3. 安卓基础
安卓基础爱问的来来回回就那些点:
-
四大组件,生命周期启动方式等常见问题
-
自定义 View 相关
绘制流程
事件传递
滑动冲突
这部分是常见的,应该大多数人都掌握差不多了,书的话还是看 《艺术探索》。
4. 设计模式
我这次找工作,笔试里出现了两次写单例模式,记得几年前校招的时候就因为单例失去过一次好机会,单例模式的重要性,你自己掂量一下。
设计模式考察的也不算太复杂,知道常用的几种设计模式使用场景,会手写单例的关键几种(静态内部类 double-check 知道区别)就可以了。
可以去看看《大话设计模式》、《Android 源码设计模式》。
5. 数据结构算法
我这次面试算法问的比较少,只手写过插入排序,建议把冒泡、插入、归并时间复杂度和实现熟悉熟悉,最好手写下,不然现场手写的时候容易出错。
作为一个有追求的程序员,这些数据结构、算法是需要掌握的:
-
数组链表区别
-
链表插入删除
-
栈及使用场景
-
队列及使用场景(有可能拓展到阻塞队列)
这些是基础,学好才能掌握其他的。
红黑树、KMP、最短路径、动态规划、背包问题这些都属于进阶了,问的比较少,了解下即可。
6. 网络基础
网络其实问的也不算多,因为毕竟不用我们自己去实现一个 HTTP Client,常见的网络问题大概以下内容:
-
七层模型
-
HTTP 内容
-
常见响应码
-
缓存相关
-
TCP 三次握手、四次挥手
-
Socket 的使用
进阶知识
在确定你的基础够用后,二三面就会考察你的进阶能力。就应用开发来说,进阶知识主要有以下内容:
- 框架原理
缓存
网络
图片
-
性能优化
-
架构模式
-
JVM
-
插件化
1. 框架原理
作为有追求的安卓开发,怎么可能只满足使用框架而不知其原理呢?
在面试时也经常会被问到:你熟悉什么框架的源码?
这个时候如果没有准备就尴尬了,失去了给自己加分的机会。
现在主流框架是 RxJava Retrofit OkHttp Picasso/Glide EventBus3,你可以选择其中两个左右熟悉一下源码和大概流程,重要的是理解为什么要有这个框架,解决的问题,如何解决的。
建议阅读书籍:《Android 进阶之光》
2. 性能优化
性能优化又是另外一个高频问题,一般主要问内存方面、UI 方面的优化。
常见问题:
- 内存优化
内存泄漏如何避免、检测
内存抖动怎么办
有使用过什么工具吗?
如何避免 OOM
- UI 优化
布局卡顿怎么办
如何判断布局是否需要优化
有哪些工具
另外也可以阅读《高性能 Android 应用开发》。
3. 架构模式
高级的安卓开发不仅需要完成一个模块,还需要负责整个项目的设计与开发。
常见的架构模式是按项目分层分,MVC MVP MVVM 这些,可以选其中两个进行学习、实践,对比了解优势和劣势就可以了,网上文章很多的。
另外就是设计思想,OOP 面向对象开发的思想一般都知道,继承封装多态,什么时候用接口什么时候用抽象类,其实和设计模式相辅相成的。
还有 AOP,面向切面编程,大型项目一般都会用到,在不入侵代码的同时添加功能,建议了解。
还有路由,现在都流行组件化,组件化的一个问题就是组件间如何依赖,如何通信,这些都需要有良好的架构设计思想。我自己也在摸索中。
这部分的知识属于个人经验,不同的人不同的体会,没有适合所有人的相关书籍,需要自己多写、多总结出来。
4. JVM
在去一家公司面试时,隔壁屋也在面试一个后台,在等待面试官时我偷偷听了下他们的对话。其中有一段对话记忆深刻:
-
请介绍下 CMS 垃圾收集器。
-
额,对不起,我只毕业一年,这方面了解的比较少。
JVM 的知识究竟需要工作几年再了解呢?
不同的人有不同的看法,我的看法是:尽可能早。
JVM 主要内容大概有这些(来自《深入理解 Java 虚拟机》):
- JMM(Java 内存模型)
学习交流
群内有许多来自一线的技术大牛,也有在小厂或外包公司奋斗的码农,我们致力打造一个平等,高质量的Android交流圈子,不一定能短期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。
35岁中年危机大多是因为被短期的利益牵着走,过早压榨掉了价值,如果能一开始就树立一个正确的长远的职业规划。35岁后的你只会比周围的人更值钱。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!
、多总结出来。
4. JVM
在去一家公司面试时,隔壁屋也在面试一个后台,在等待面试官时我偷偷听了下他们的对话。其中有一段对话记忆深刻:
-
请介绍下 CMS 垃圾收集器。
-
额,对不起,我只毕业一年,这方面了解的比较少。
JVM 的知识究竟需要工作几年再了解呢?
不同的人有不同的看法,我的看法是:尽可能早。
JVM 主要内容大概有这些(来自《深入理解 Java 虚拟机》):
- JMM(Java 内存模型)
学习交流
[外链图片转存中…(img-mWc4bkXb-1715007899229)]
[外链图片转存中…(img-pqWnjp3m-1715007899232)]
群内有许多来自一线的技术大牛,也有在小厂或外包公司奋斗的码农,我们致力打造一个平等,高质量的Android交流圈子,不一定能短期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。
35岁中年危机大多是因为被短期的利益牵着走,过早压榨掉了价值,如果能一开始就树立一个正确的长远的职业规划。35岁后的你只会比周围的人更值钱。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!