从“面试被拒”到“蚂蚁金服”,再转战“阿里”,来自Android工程师个人经历-带面试干货

正好在离职交接空档期,就抽空简单分享自己的一些个人经历给大家,希望对刚毕业不久或者工作三五年的同学能有一些帮助。

1:个人经历

提文前先来一些简单的自我介绍,这部分水分较多,如果没兴趣的同学可以直接跳到第二部分看些面试题。
我是16年本科毕业,毕业第一年在福建上班,17年到杭州,来杭州前,自己花了很长时间准备面试,本来信心满满,但是到了杭州,还是遇到很大的挫折。我还记得,当时有一个面试官问我说你说下什么是组件化和插件化,我当时就卡壳了。虽然面试前做了很多准备,看了很多开源框架设计思想的东西,并且说项目的时候也吹了一把,项目如何用到,但是当面试官叫我简单讲组件化和插件化的区别的时候,居然一时答不上了。现在想想真的很尴尬。

但杭州不愧是互联网之都,机会真的非常多,也可能是跟我前期准备比较足有关系,或者是我面的公司都比较小还是公司比较缺人的原因,反正记得当时我也拿了挺多offer。后面经过朋友推荐,选择了一家阿里系的合资公司。现在回过头来想想,真的非常感谢在杭州第一段工作的这段经历,在这里我遇到了很多很多优秀的同事(后面这些同事绝大多数也都去了阿里),也遇到了很不错的老板。

现在回想,真的很庆幸当时遇到的同事。我们当时那个团队真的氛围非常好,学习气氛很浓烈,我们当时经常私下组织技术分享,那段时间成长了非常非常多,不仅仅是最前沿的互联网技术,还有学习习惯。 在这家公司我得到了非常多的机会,并且每个机会我也都把握住了,半年后我甚至都当上了5、6个成员的小组组长,当时距我毕业还没两年。我还记得当初晋升谈话的时候,有个评委跟我说的,你才刚毕业两年就开始带人了,这个对你是挑战也是一个坑,不管是技术和经验你都非常欠缺,一定不要迷失自己,对技术要始终抱有热情,不断进步。 这句话我也同样送给在规模比较小的公司,刚开始工作不久就开始带人的其他同学。

到18年中,我跳槽到了蚂蚁金服,就是做花呗借呗的那个阿里巴巴下面的蚂蚁金服。当时跳槽纯粹是因为身边很多同事都慢慢收到阿里的offer,其实作为我们当初那个阶段的计算机专业的人来说,基本都有一个BAT的梦(现在是2021年了,可能当初的BAT已经不那么香了)。我看到大家都出去尝试也心动了,就投了阿里的岗位。应该算是一点实力加一点运气吧,本来我是面的钉钉,后面阴差阳错去了蚂蚁金服。

蚂蚁金服我是18年8月入职的,到21年的1月底,差不多两年半时间。因为我现在还在职,处在交接阶段,这里有很多事就不方便说了。在这里我遇到过很多挑战,同时也遇到很多牛逼的同事,学习到了很多做事方式。即将离开蚂蚁了,这里我也总结几个工作经验,包括我自己做的不好的几个地方,希望对后面的同学有一点借鉴:

1: 在阿里这种大厂,其实在很多公司也一样,沟通和反馈是非常非常重要,一味的埋头苦干的人其实是很吃亏的。我见过好几个踏实做事的同学被打上’325’走人的。所以一定要学会在老板和同事面前包装和表现自己。

2: 需求太多、运维工作量太大,平时各种琐事会充满你所有的时间(甚至包括你的睡眠时间和周末时间),一定要学会解脱(思考解法或者寻求帮助再或者甩给别人),然后自己抽身去做些有成长有意思的事情,只有这样你才有时间去搞些容易拿KPI的项目,不然到时候你剩下的只有抱怨为什么这么忙,为什么脏话累活都是你干。实际上这些抱怨一点用都没有,在老板和大多数人眼里,只能说明你什么事都搞不定。以结果为导向的价值观里,过程是不重要的!

3: 一般人的工作目的无非是为了在同等的条件下,获取更高的物质回报。如果你确实努力了也拼命了,还是得不到老板的精神认可,获取不到自己想要的物质回报,你要么改变自己,要么就改变环境-或者换个环境。

4: 工作是公司的,只有技术、成长还有健康是自己的。此处不留爷,自有留爷处,但是打铁还需自身硬,说白了,你想跳槽也是要看你实力,在日常工作中一定要抽时间多学习多总结,互联网这行业,技术更新换代速度太快,只有自己成长才是王道。

2:面试经验

我面的岗位是Android开发,前前后后面了很多一二线互联网公司,其中包括腾讯,阿里,滴滴,网易,美团、头条、快手等等,下面的文章水分较少,都是一些面试干货。希望能为大家圈一些“考试范围”,给大家面试带来一点点帮助。

第一个我要说的就是面试时间点很关键,这直接决定了你的竞争力和拿到offer的难度。同一个岗位,不同时间点面试,难度和要求是不一样的。因为这里要看缺人的程度和岗位HC的数量
根据我的观察在杭州互联网的话,一般每年年底机会比较多。另外就是如果有认识的人,推荐的比较急的或者“放水”几率比较大的岗位的话,那么你拿到offer的可能性自然而然就比较高,这就是我前面说的面试是实力的基础上加一点运气。

第二个点,Android基础。我是毕业4年半,即将5年,面的岗位有开发工程师,有开发专家(近期也拿到过一二线厂的开发专家的offer)。基本每次面试都要准备一下Android面试常见的“八股文”,也基本每次都会被问到,比如Activity、Service、比如Handler NDK,等等,这些基础的肯定要掌握,甚至要滚瓜烂熟,举一反三。

第三点:笔试题,最近两年的面试一些大厂基本都要做一些笔试题,一般都是牛客网上面出题,这些题大多数都是一些算法题,基本都是leetcode的原题,所以要准备面试的同学,要提前适应一下,去leetcode上面刷刷题。一般面试官会根据你的面试表现然后出一些不同难度的题目,如果你面试问题回答的比较好,给的题目就相对比较简单,如果回答的不好,可能就直接给你一道hard。

不过根据我的经验,大多数情况给的题都是leetcode上面热题100的中等难度的原题。我这里整理了一些我最近两个月面试过程中遇到的笔试原题,供大家参考:点此处GitHub查看完整题库。

第四点,各种常用的性能优化、源码:一定要掌握他的原理,如果有时间最好撸一下核心源码,一般的面试官很喜欢问这些东西,特别是小厂跳大厂的时候。这些知识点大家可以根据网上的文章和自己的情况去做一些相应的准备。 这里东西太多,我就不做总结了。

第五点,项目。说项目的时候如果是业务项目,就要体现出项目的难点和解法,最好有高并发、大数据量,怎么保证稳定性等等。如果是框架型的项目,就要体现出他的平台性、怎么保证高可靠等等。然后就是你在项目中做的哪些比较有特色的事,最难的事情(这个时候就是要活学活用了,不管是不是你做的,你只要能说的上来就是你的)。

这里可能有很多同学没接触到什么有难度的项目,就是项目在面试官眼中是没什么挑战性的,那这个时候你最好要准备一个中间件类似的项目说一下,来吸引一下面试官的眼球,比如限流、比如任务调度、比如配置平台等等,这些都是通用的万能的项目,很容易集成到自己的业务项目中

3:小结

离职交接期无聊,就简单的回顾一下自己的这几年的一些工作经历,顺便把这段时间积累的一些面试经验分享给大家,希望对大家有一点点帮助。

4:写在最后

我现在已经入职新公司了。之前写这篇文章是为了分享自己的一些经验,另外下面分享一份由阿里九位架构师联合发布的Android架构师成长学习路线与学习资料:
1.架构师筑基必备技能:
Android应用是由Java语言进行开发的,SDK也是由Java语言编写,所以我们要学习java语言。另外,虽说kotlin语言得到了Android官方的热推,但是kotlin也是编译成了java语言再运行的。对于Android来说,只要SDK没有用kotlin重写,那么Java语言是都需要学习的。而且Androidapk的后台服务器程序大概率是java语言构建,所以学习java也是一种必然。

那么Java中哪些东西是我们Android程序员需要学习的呢?由于Android程序员习惯了CV代码块,所以与Android中比较相关的稍微比较难的Java基础几乎都是一个门槛,像泛型,多线程,反射,JVM,高效 IO,注解,序列化等,都是被CV的对象,而程序员是不懂原理的,具体内容如图所示。

2.Android框架体系架构——Andlroid高级UI与FrameWork源码
说到FrameWork别的不说,你只要去 Github上看一下腾讯Matrix的源码,就知道Framework 的知识有多重要了。像掉帧监控,函数插装,慢函数检测,ANR 监控,启动监控,都需要对 Framework 有比较深入的了解,才能知道怎么去做监控,利用什么机制去监控,函数插桩插到哪里,反射调用该反射哪个类哪个方法哪个属性……

3. 360°全方面性能调优
Android性能调优方面包括了很多知识点,其中关键的就有设计思想与代码质量优化, 程序性能优化,开发效率优化, 我们开发者将这些统称为Android360°全方面性能调优。 其实在软件开发过程中,想必很多读者都遇到过系统性能问题。而解决系统性能问题的几个主要步骤是:

测评:对系统进行大量有针对性的测试,以得到合适的测试数据。
分析系统瓶颈:分析测试数据,找到其中的hotspot(热点,即bottleneck)。
性能优化:对hotspot相关的代码进行优化。

4.解读开源框架设计思想
在Android开发中开源框架设计思想中的知识点也是较为重要的,相信大家都可以看到在每个公司招聘当中,对Android开源框架要求都是比较严谨的。而想要完全搞懂还得学会整理和规划:我们常见的Android热修复框架、 插件化框架、 组件化框架、 图片加载框架、 网络访问框架、 RxJava响应式编程框架IOC依赖注入框架、最近架构组件Jetpack等等Android第三方开源框架,这些都是属于Android开源框架设计思想的。如下图所示:

5.NDK模块开发
Android平台从诞生起,就已经支持C、C++开发。众所周知,Android的SDK基于Java实现,这意味着基于Android SDK进行开发的第三方应用都必须使用Java语言。但这并不等同于“第三方应用只能使用Java”。在Android SDK首次发布时,Google就宣称其虚拟机Dalvik支持JNI编程方式,也就是第三方应用完全可以通过JNI调用自己的C动态库,即在Android平台上,“Java+C”的编程方式是一直都可以实现的。在最近比较吃香的音视频开发技术也是属于NDK模块开发。关于音视频进阶方面可看这篇文章:关于音视频进阶方面可点击这篇文章:作为一个Android程序员,精通音视频开发,寒冬再冷也冻不到你


6.架构师练成实战
在学好以上知识后就应该运用到实战当中了,在常见的实战当中:架构设计,网上商城项目实战,新闻客户端项目实战,多格式播放器项目实战,Gradle自动化项目 都是属于重中之重的。

当然还有小程序项目实战也是Android开发者必须搞懂的:

7.微信小程序
阿里架构师对小程序的看法:

第一点,不管小程序能不能在未来的时间里在移动端大放异彩,学习它,掌握它,都是没有任何坏处的。
第二点,就目前的版本而言,还是太过封闭。开发小程序就感觉像是在微信给我们划定的一个小圈子里兜兜转转,在圈里也许我们能得到很良好的开发体验,但是一步都出去不得。
第三点,在性能与便捷之间,最终往往会是便捷取胜。
第三点,能用 js 开发的,最终都会用 js 开发。

8.Hybrid开发与Flutter
想要成为一名优秀的架构师,需要掌握的知识是有点篇多,出来新的技术也不能落下学习,正像Flutter
在flutter中,一切皆控件!一切皆控件!一切皆控件!牢牢记住这个概念。Text是控件,Image是控件,Icon是控件,布局脚手架也Scaffold也是控件,甚至整个APP也是控件。

学习大纲配套学习笔记:

1.架构师筑基必备技能:
2.Andlroid高级UI与FrameWork源码:
3.360°全方面性能调优:
4.解读开源框架设计思想:

5.NDK模块开发:
6.架构师练成实战

7.微信小程序:
8.Hybrid开发与Flutter:
如果你正在走往架构师的道路上迷茫了,感觉自己的所知知识已经膨胀了,那么可能你学的多而不精,缺少一份完整的学习思路大纲,我想此篇文章正好能够帮助到你。小公司的可能没有架构师这个概念,大公司的架构师职位又不是那么容易拿下。但不管怎样,不断去学习新的技术,提升自己的层次是很有必要的,无论你在哪一家公司,过硬的技术水平才能吃得开。
文中所有资料和完整架构师学习大纲可以直接点此处免费获取。

猜你喜欢

转载自blog.csdn.net/Android578/article/details/114080314