关于java:走心的中级Android工程师跳槽经验分享

84次阅读

共计 6893 个字符,预计需要花费 18 分钟才能阅读完成。

这些教训是我最近四个月,从筹备面试到找到适合工作的汗水和泪水,心愿对你们能有帮忙!

  • define 跳槽
  • 跳槽前要思考的问题

    • 钱不到位怎么办
    • 心冤屈怎么办
    • 到职前的思考
    • 确定要走时须要做的筹备
    • 行情怎么样
  • 安卓跳槽须要温习的常识

    • 基础知识
    • 进阶常识
    • 不同公司偏重内容不同

一、define 跳槽

首先请思考一个问题:在你眼中 “跳槽”包含哪些内容

/******** 富丽丽丽的分割线 begin ************/

/******** 先思考 3 秒再往下看 ************/

/******** 富丽丽丽的分割线 end ************/

最近是“金三银四跳槽季”,很多敌人都想要跳槽,然而对“跳槽”的了解可能仅限于“写简历、面试”。

在这次跳槽前,我也这么认为的。

那时候工作不顺利,正好在一个群里看到有公司招聘,就发了简历过来,面完试本人感觉良好,后果却打了脸,让人家拒了,理由是我要的工资太高了。

认真检查后,发现我筹备的太仓促,或者说基本没怎么筹备,只是写了份简历,而后有面试机会就去了。面试过程中有些我的项目细节答不上来,很多知识点也答得不好,让人家感觉程度个别。

痛定思痛,在起初的几个月,我开始查阅各种跳槽、面试相干的材料,同时整顿了重点温习知识点,按计划一步步学习。

在两周前,感觉本人学习的差不多了,公司的状况也根本看清楚了,就决定来到。

于是写简历、投简历、面试,面了五家,拿到了五个 offer,最终抉择了对我目前来说最合适的一个。

在这个过程中,我对“跳槽”的意识逐步加深。

咋一看“跳槽”就是写简历、换工作,但要想得到称心的 offer,其实须要思考、筹备的内容很多,大略有这么几点:

  1. 跳槽前要思考分明
  2. 把握跳槽须要的知识点
  3. 写一份高质量的简历
  4. 理解简历投递的机会和形式
  5. 拿到面试邀请要做好功课
  6. 面试中要调整心态,致力体现
  7. 面试后及时思考总结
  8. 有多个 offer 如何抉择
  9. 优雅的到职
  10. 筹备入职

这些应该是一次跳槽从开始到完结比拟残缺的流程了。接下来咱们将具体理解每一部分。

二、跳槽前要思考的问题

我的如意工作是一个盖世英雄,有一天他会拿着高薪股权来迎娶我,我猜到了结尾,却猜不到这终局 …

每一份工作都是以期望开始,咱们心怀神往,心愿在公司里大展拳脚、做些成就。

然而是什么让咱们走到明天这境地,行将与它离别?

个别到职有两个起因:

  1. 钱不到位
  2. 心冤屈了

1. 钱不到位怎么办

业界一种广泛的观点是“跳槽涨工资最快”,这也确实是现状。

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

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

咱们在入职时可能只是一个菜鸟,然而在工作一段时间后,因为集体的致力以及业务的锤炼,程度曾经有了很大的不同,本人心里感觉本人不再是菜鸟了,心愿能拿更高的工资。

但你可能始终在做一个我的项目,没有承当更多的责任,公司无奈理解到你当初能力到什么水平了。

这个时候,如果领导比拟好的话,你能够先被动要求承当工作,踊跃实现(就是加班加点),而后在一段时间后找领导谈加薪。这样就有理有据,让人服气,领导个别都会批准。这样就不必跳槽了,省去筹备面试题的繁琐。Over。

如果领导不批准,那就没辙了。

2. 心里冤屈怎么办

员工到职的另外一种起因就是:待着不爽,心里冤屈了。

一些被动的起因比方领导更替、岗位调整、加班太多等,都会让人心里不难受。

拿我来说,公司业务转型,做的工作不是安卓利用开发,做久了心里不虚浮,就想到职了。

如果有条件的话,能够跟领导沟通是否复原原样,如果有望,那就只好跳槽了。

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

3. 到职前的思考

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

有的敌人可能会说:别废话,连忙讲面试知识点,我干的不爽就跳槽了,还想什么想?

非也,每次跳槽的老本其实很大,除去面试来回的工夫不说,新旧环境的适应、业务的相熟、代码的把握,都须要老本,如果两次跳槽距离太短,其实工夫都花在了适应新环境上,真正学习、积淀的内容不会太多,尤其在刚开始工作,更禁忌这样子。

因而,在确定到职前,你须要先问本人 3 个问题:

  1. 当初的我的项目没有我能够学习的内容了吗?
  2. 来到这里我会失去什么?
  3. 到新环境能够失去什么?

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

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

因而在第一次面试失败后,我把我的项目代码好好钻研了一个多月,也跟共事求教很多学习、布局上的常识,为前面的路做好铺垫。

4. 确定要走时须要做的筹备

在确定要走后,尽量不要裸辞,当初的行情你懂得,没有筹备就裸辞,等于断了本人后路。

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

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

  1. 定位
  2. 亮点

定位

“定位”是指你要确定本人所处的阶段和想要的指标。次要包含:

  • 目前是什么程度
  • 有什么积攒
  • 工作我的项目里有什么难点
  • 想找什么级别的工作

比方我,给本人的定位就是:当初是中级程度,常见利用开发需要根本都能解决,开源框架应用没问题,局部读了源码,工作我的项目里次要是混合开发比较复杂,想找有利于本人成长的、大公司中高级安卓开发工作。

亮点

有的敌人可能对“亮点”的定义不是很明确。

“亮点”其实就是可能把你和泛滥应聘者辨别进去的优秀品质。

程序员面试次要考查这几点:

  • 技能程度
  • 学习能力
  • 团队单干
  • 工作心态等

如果你在其中任何一个方面都有本人的劣势,就连忙找进去,写到简历上,面试表达出来。

拿技能程度来说,依据做过我的项目的类型,确定本人以后善于的点,比方你做的是电商利用,那可能就善于混合开发、自定义 View;做的是电台利用,那可能就善于后盾过程保活;做的是大用户量利用,那可能就善于监控、性能优化等等。

找到本人已有的或者该有的亮点,而后去致力把握、精通。

5. 行情怎么样

有的网友说早就想跳槽了,然而据说行情不好,不敢跳。

其实吧,价格取决于价值,影响价格稳定的是供需关系。

20117 年守业公司确实死了很多,P2P、O2O 死了一大堆,但活下来的又融了很多钱,也成立了很多新公司,也须要招很多人。

这个时候,招聘的规范就比前几年要高一些了,去招聘软件上看也能够发现,大多要求 3 年以上教训。这是因为当初安卓高级太多了,各种应届生、培训班涌入市场,前几年会用 ListView 就能够找工作的日子一去不复还。不过真正的高级,或者有后劲的中级,还是很受企业欢送的。

因而,咱们在想要跳槽时,不要被所谓的“差行情”拦住,而是要扫视本人的程度,确定本人的指标,到底是要找高级岗、中级岗,还是高级岗。

面试前,面试官拿到你的简历,依据简历上的信息会建设第一印象。因而你想要出现给对方一个怎么的定位,有什么亮点,都须要当时思考分明。

确定了方向后就要开始致力筹备,下一节咱们介绍安卓跳槽须要筹备温习的常识。

三、安卓跳槽须要温习的常识

在介绍面试考查内容前,先来看看我认为的“中级安卓”须要把握的知识点,这些是联合一些面经、本人理论面试以及求教前辈总结而来的,次要包含两局部:

  1. 基础知识
  2. 进阶常识

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

如果基础知识有太多不会的就危险了,必须好好筹备,这是躲不过的。

电话面试、一面考查基本功过关后,就会进入下一阶段 — 问些进阶的,看看你最高程度在哪里。

这个阶段有不会的很失常,因为对方正在确定你的程度,但态度肯定要积极主动,即便之前没有钻研过,也要联合一些教训说出揣测的后果,切忌间接说“我不会”。

上面的所有技术知识点具体内容都整顿在了开源我的项目【GitHub】, 有须要的能够自取。

一、基础知识

基础知识次要包含以下几点:

  1. Java 根底
  2. 并发 / 异步
  3. 安卓根底
  4. 设计模式
  5. 常见的数据结构算法
  6. 网络根底

1.Java 根底

尽管当初 Kotlin 挺火的,但我面了几家大公司都没问 Kotlin,问了很多 Java。所以肯定要保障以后常识把握纯熟了,再学习新常识,不然真成了狗熊掰苞米。

Java 根底次要包含以下知识点:

  • 外部类、动态外部类区别、应用场景
  • 抽象类、接口 实战应用场景
  • 汇合

    • 汇合专栏
  • 注解

    • 什么是注解以及运行时注解的应用
    • 应用编译时注解简略实现相似 ButterKnife 的成果
  • 反射

    • 深刻了解 Java 反射:Class(反射的入口)
    • 深刻了解 Java 反射:Field(成员变量)
    • 深刻了解 Java 反射:Method(成员办法)
  • 泛型

    • 深刻了解 Java 泛型
  • 异样
  • IO NIO

倡议看《Java 编程思维》,不仅解答了 What 还有探讨 Why。

2. 并发 / 异步

次要包含两局部:

  1. 安卓并发类
  2. Java 并发常识

安卓的主线程模型,要求咱们必须将耗时操作放到线程异步执行,否则会影响 app 的晦涩甚至卡顿。

因而必须把握安卓提供的 HandlerHandlerThreadIntentServiceAsyncTask,这是安卓为咱们封装好的异步类,从应用到原理,都要了解,面试常客。

接着就须要理解 Java 的线程、内存模型和 Java 并发包下提供的类了,这也是大公司考查根底的常客。

除了面试,如果你去看过开源框架,会发现外面有很多 ConcurrentHashMapLockCondition,一开始看的你一脸懵逼,在把握了 Java 并发常识后,再去看框架就会省力许多。

Java 并发次要知识点:

  • 同步锁 synchronized 与 Lock 区别
  • 什么是可重入锁
  • 线程通信办法
  • wait 和 sleep 区别
  • wait-notify 模型
  • 生产者消费者模型
  • 线程池

倡议浏览书籍:《Android 开发艺术摸索》、《Java 并发编程艺术》、《Java 并发编程实战》

我把所有遇到的 Java 面试题做了一个整顿,均放在了开源我的项目【GitHub】, 有须要的能够自取。

3. 安卓根底

安卓根底爱问的来来回回就那些点:

  • 四大组件,生命周期启动形式等常见问题

    • Android 进阶 1:Activity 的生命周期
    • Android 进阶 2:Activity 的 Task 与启动模式
    • Android 进阶 3:Intent 与 IntentFilter 匹配规定
    • Android 进阶 4:Service 的一些细节
  • 自定义 View 相干

    • 绘制流程
    • 事件传递
    • 滑动抵触

这部分是常见的,应该大多数人都把握差不多了, 分享给大家我整顿的 Android 根底局部面试题,有须要的去我的【GitHub】自取。

4. 设计模式

我这次找工作,口试里呈现了两次写单例模式,记得几年前校招的时候就因为单例失去过一次好机会,单例模式的重要性,你本人掂量一下。

设计模式考查的也不算太简单,晓得罕用的几种设计模式应用场景,会手写单例的要害几种(动态外部类 double-check 晓得区别)就能够了。

倡议去看看《大话设计模式》、《Android 源码设计模式》。

5. 数据结构算法

我这次面试算法问的比拟少,只手写过插入排序,倡议把冒泡、插入、归并工夫复杂度和实现相熟相熟,最好手写下,不然现场手写的时候容易出错。

作为一个有谋求的程序员,这些数据结构、算法是须要把握的:

  • 数组链表区别
  • 链表插入删除
  • 栈及应用场景
  • 队列及应用场景(有可能拓展到阻塞队列)

这些是根底,学好能力把握其余的。

红黑树、KMP、最短门路、动静布局、背包问题这些都属于进阶了,问的比拟少,理解下即可。

能够买本《剑指 offer》看看,锤炼下算法题的常见解题思路。《算法》就太科班化了,个别人也看不进去,有趣味的能够看看。

6. 网络根底

网络其实问的也不算多,因为毕竟不必咱们本人去实现一个 HTTP Client,常见的网络问题大略以下内容:

  • 七层模型
  • HTTP 内容
  • 常见响应码
  • 缓存相干
  • TCP 三次握手、四次挥手
  • Socket 的应用

    • 过程通信之 Socket(顺便回顾 TCP UDP)

进阶常识

在确定你的根底够用后,二三面就会考查你的进阶能力。就利用开发来说,进阶常识次要有以下内容:

  1. 框架原理:缓存、网络、图片
  2. 性能优化
  3. 架构模式
  4. JVM
  5. 插件化

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 内存模型)
  • GC(垃圾回收策略)
  • 虚拟机性能监控、调优
  • 类文件构造
  • 类加载机制
  • 程序编译优化

这些内容可能听起来比拟边远,很多人感觉我就开发业务,须要理解这么多吗?看起来都没什么用。

了解这些内容,对咱们日常的业务开发有极大地促进作用:

  • 理解 JMM 后,你对内存调配、OOM 的了解就不会只停留在表层
  • 理解 GC 后,对性能优化的了解也会更上一层
  • 相熟类加载机制后,对你学习插件化也会有很大帮忙
  • 理解虚拟机对程序的优化,就会明确一些并发原语的作用及意义

而这些也是面试时常常问的问题,晓得的越多,对你的加分就越多。

倡议浏览:《深刻了解 Java 虚拟机》

5. 插件化

插件化这么火,各大公司都在研发本人的插件化,这不仅仅是对业务的撑持,同时也显示出他们安卓研发的技术深厚。

有的敌人可能会说了:我当初的我的项目用户这么少,用这个有什么用。

不说学了有没有用,在学习的过程中,能够对你现有常识体系有极大的晋升,要开发插件化,须要把握的内容大略有这些:

  • 类加载机制
  • 四大组件启动流程
  • 资源加载
  • 动静代理

看到了吧,它是对一些疑难知识点的利用,通过有目标的学习,能够让咱们对基础知识把握的更加醇厚。

面试时如果你说本人有被动学习这方面的常识,还能说出一部分知识点,不仅显示出你的技术能力,还体现了你的被动学习性和学习能力,大大的加分!

倡议浏览:田维术的博客

进阶常识是我本人教训所得,如果有脱漏,欢送补充。

不同公司偏重内容不同

有敌人可能会问了: 根底的内容太多了吧,我可不可以间接筹备高级的。

首先你间接学高级很吃力,容易误会不说,硬记下来没多久也就遗记了;其次面试时的发问程序我下面也说了,都是从根底开始的,根底不扎实,活不过两集。

这里再唠叨一句,如果一家公司靠投机取巧就能够进去,那进去的投机取巧者岂止你一个人,那样的公司气氛是你想要的吗?如果想进入一个现实的大公司,还是踏踏实实地一步步走吧。

把握了知识点后,接下来就要针对各公司偏重内容重点温习了。

各大公司面试考查的知识点,网上相干的材料不少,我平时也在关注一些面经,做了一些搜集整理,看看外面有什么是本人欠缺的,而后找工夫补上, 有须要的敌人能够去我的【GitHub】自取。

最初

如果你想去一家不错的公司,然而目前的硬实力又不到,我感觉还是有必要去致力一下的,技术能力的高下能决定你走多远,平台的高下,能决定你的高度。

如果你通过致力胜利进入到了心仪的公司,肯定不要懈怠放松,职场成长和新技术学习一样,逆水行舟。

正文完
 0