美文网首页Android开发
Android工程师:我一直做小项目,想进大厂完成职业生涯升级面

Android工程师:我一直做小项目,想进大厂完成职业生涯升级面

作者: 10块钱new一个对象 | 来源:发表于2020-11-13 16:19 被阅读0次

本文主要是美团的Android技术专家 laberat 对大家面试或者是工作中遇到的一些疑惑提问的回答分享。

话题起因是有些同学聊到“我一直做小项目,接触的技术比较少,经验也比较缺乏,想进大厂完成职业生涯升级该如何进阶?往哪个方向努力?”

laberat:先避开你的问题,那我们面试关注的两个点来说,无论中级还是高级,有两个点我是面试中非常关注的,一曰基础二曰学习能力和探索兴趣,这两项都不依赖于项目大小,从自身角度出发 多写多改多思考是避不开的。从面试和职场的角度考虑 还要思考一下匹配度的问题 也就是“需求”,高级工程师是要求项目经验的 因为有些经验就是不断踩坑踩出来的啊……说到底不就是写得多经验就多么……

比如你工程化能力特别强 gradle 脚本玩的跟花似的 基本上肯定能进大公司。

L: 工作几年了,一直在公司做小项目如何提升?

laberat:其实这个问题,如果你仔细思考、付诸实践,面试的时候把这类问题讲明白,也是会有好的印象的;这本身就是在解决问题。

null:我就是一直做小项目,工作了5年一共就只做了 4个 APP。我看了很多面试题,基本上都是项目里面用到的,但是让我回答只能回答个表面,往深了就不行,就需要你自己总结了

laberat:这就涉及到我面试的时候考察的第二个点,你的学习兴趣和探索欲望在哪里?如果公司的项目都是小项目,是不是可以从开源项目上动动手?简单说 一个图片加载框架 就足够说很多东西了 但是我们是否自己去尝试写或者总结图片加载框架呢?

寂小桦:我不说实力部分,大佬们都说了,我就想说说如何获得大厂面试机会吧,小项目的经验往往根本就过不了大厂 HR 那一关,过了,用人部门一看也不会想约着面试的,这个问题怎么解决?

laberat:我刚刚是说了最核心一句话,项目经验证明不了你优秀,那么你用其他的证明啊,比如说:

1、你做个不错的开源项目,广受大家好评,用人部门自动问你要不要换工作,你信不信吧?
2、你技术博客写的勤快,且有深度,很多人看,可能遇到大厂的朋友看到了话,他们会给引荐。然后你说你项目根本用不上一些新技术,怎么可能写出好文章嘛?那可以关注前沿技术呀,刚刚我说的好奇心,对技术的热情,你用这些文章表达出来啊。
3、多跟大神交流,比如某大神技术分析、分享,你可以留言表达观点呀,其实大家写的文章认真讨论的没几个人,你认真一下,就容易被注意了。

这些都是小技巧,操作起来还是很费时间费功夫的。另外,我想拿我的一个朋友举例,他去YY前应该是个小公司,但是他技术文章写的很棒,很快他去了YY。我相信写技术文章对他帮助是蛮大的。

胖大海(乾三):@laberat 能讲下面试中Android基础的考察点吗?

laberat:

要想拿到大厂的offer,你也应该知道基础好是一个硬性条件,对于计算机相关专业毕业的同学来说,这些基础就是你大学所学的课程,如果不是计算机相关专业毕业的同学,那么就需要在基础知识这个方面下足功夫了,具体来说下面的东西必须掌握:

    1. 操作系统原理(里面有一些计算机组成原理的知识需要简单掌握)
    1. 网络原理

如果你没有掌握这些知识,或者之前学过,但是忘了怎么办?学啊!怎么学呢?去网上找一些计算机原理的公开课啊,去找一些计算机的书籍看啊,可能大家会有疑问,面试会问这些知识吗?直接问的很少,但是只有你了解了这些知识,才能更深入的了解一些技术和知识。举两个例子:

  • 第一个,如果要做Android里的网络优化,你不知道网络里面的一些原理,你怎么知道怎么优化?如果你不知道UDP和TCP的详细区别,技术选择时,你怎么知道选择哪一个作为你通讯的协议?关于网络还有一个出现概率很高的问题就是TCP的三次握手和四次握手,其实它就是网络原理里面的知识。

  • 第二个,操作系统中,内存是发挥什么作用的,又是怎么工作的,知道这些,你再去了解Android的内存管理就信手拈来了。

数据结构和算法

数据结构和算法其实是分开的东西,我们需要先掌握各种数据结构,再去加深算法,数据结构和算法其实也属于基础,但是它现在越来越重要,所以我就单独拿出来说了。

至于算法,首先要做的就是动手,翻资料+LeetCode上直接干你觉得还不行吗?第二阶段就是要总结各种算法的思想和套路,像递归、动态规划等这些算法都是有套路的,在LeetCode上也有按数据结构和算法分类的筛选,大家可以针对性练习和总结。

当然,对于一个Android程序员,能做到每天在LeetCode上刷题就非常不错了,所以一定要坚持,等你坚持到一定的时间,你会发现你越来越游刃有余。


这里我把《数据结构与算法常见面试题》总结成了PDF,共计341页(实际上比预期多花了不少精力)。包含很多的知识脉络 + 诸多细节,由于简书篇幅有限,这里以图片的形式给大家展示一部分。需要获取高清完整版PDF的朋友————可以去我的【Github】下载免费获取

设计模式

设计模式中包括了设计原则,其实对于Android开发人员来说,设计模式就那23种,知道并了解这些设计模式是第一个阶段,仅仅是到这个阶段是不够的,一般面试也不会问你某个设计模式的概念,而会让你具体的说说你对某一种设计模式的深入了解和使用,它的优缺点,所以,第二阶段就是要运用它们,其次要和Android源码中运用到设计模式地方进行结合学习。

例如建造者模式,Andoird中的Dialog创建就使用到了,还有像单例模式、适配器模式、观察者模式等等都是在Android中非常常用的设计模式,也是在面试中出现频率很高的。


Java

Java我就来直接一点了,如下:

  1. Java集合(HashMap一般必考,通读源码很有必要)
  2. 反射
  3. 多线程
  4. IO、NIO(可选)
  5. 泛型
  6. JVM相关,如内存的管理、内存的回收、类的的加载等等
  7. Java异常

大家可能觉得这些自己多多少少都了解,但是当问到细节就不知道了,所以对于上面的知识还是需要系统的认知,项目中没有机会深入就自己一个一个突破,比如Java集合,首先对集合要有一个宏观的认知,这是我之前总结的一张关于Java集合的图:

它就是我通过查看集合的源码一步一步画出来的,等我画完,我脑袋里也有了一个清晰的认识。然后从常见类的源码开始动手,如HashMap,循序渐进,逐个击破。

从这点也可以看出,我们对每一类知识一定要深入的了解,而不是泛泛的知道,比如Android的一些热修复框架,其中就是JVM中类加载和反射等技术。又比如并发中,线程池和ThreadLocal这些都是必要掌握和熟练使用的知识,也是面试经常会被问到的。


Android

Android其实要说的不多,对于一个有工作经验的Android程序员来说,基础的一些Android技术大家都是掌握了的,而如果要做一个加分的Android程序员,下面的Android技术就需要深入了解了:

  1. Android View的绘制和流程
  2. Android触摸事件分发机制
  3. 性能优化(网络、内存、电量、UI)
  4. 常见Android源码,如Handler、AsyncTask等等
  5. 熟悉Binder原理
  6. 了解一些Framework常见知识,如AMS
  7. Framework
  8. Jetpack
  9. Flutter
  10. NDK/音视频技术
  11. Kotlin

这里我也把Android实战核心技术总结成了PDF,共计837页,需要获取高清完整版PDF的朋友————可以去我的【Github】下载免费获取

总结

总之,每个面试官问的技术考察点都不一样,用一个人的力量是很难记住那些千变万化的面试题的,想要全部熟悉这是奢望而且不切实际的。

而底层的东西从来都没怎么变,只有把更底层的原理搞通透,面试的时候才是你最大的竞争力,有根了才能对面试官提出的各种问题有一个相应的解决办法,这样才不会让自己的学到的东西像断了线的风筝一样,再脑海里就像一个过客,越飘越远,因为这些风筝们都没有一条线是能够连着你的根~

Github地址:https://github.com/733gh/xiongfan2.0/tree/main

相关文章

网友评论

    本文标题:Android工程师:我一直做小项目,想进大厂完成职业生涯升级面

    本文链接:https://www.haomeiwen.com/subject/qbdevktx.html