三年 Android 开发的面试心经(后悔当初没有拿 N+1)

Posted 冬天的毛毛雨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三年 Android 开发的面试心经(后悔当初没有拿 N+1)相关的知识,希望对你有一定的参考价值。

作者:勇闯天涯

当某人顺利通过大厂面试时,总会有人认为这是运气比较好罢了,但他们不曾得知对方之前受过多少苦和委屈,又付出了多少努力一步步去突破这些困境。正是因为他们的努力付出,在合适的时间与地点,用自己付出的成果牢牢找抓了自己的机遇。遇到机遇这可以说是运气,能不能抓住这还得看你自己的实力。

废话不多说了,直接来说说我最近的面试经历吧。我投简历的公司有很多,基本都收到了面试通知的邀请,其中有让我心血沸腾的简历,也有让我感到失望到无助的经历,于是我将这些经历都记录下来了,细想之后很值得,面试了这么多家公司,要是到最后什么都没有留下来,那就白白浪费了这么多的时间。至少对我来说将一些好的经历与差的经历进行整理总结,最后肯定能等到我想要的答案。希望这些能给想换工作的大家提供帮助。

离职原因

公司裁员的时候我们老大对我说:你留下来好好干,后面不管公司怎么分股份、期权、肯定不会少你。当时我很信任老大,跟着老大一起干感觉就是一种享受。

但是没有想到公司裁员后,公司内部动荡很大,主业务线从客户端A业务线转移到B业务上。我主要负责的是A客户端的架构,于是我闲下来了。B业务线那边很忙,没时间配合我做一些架构上的事情。于是我每天就在脑补的查看各种学习文档,补充知识点能量。

做了几天后,后悔自己当时没有那 N+1 走人,有种被老大忽悠的感觉。因为后面发生的是我就暂且不讲了。只怪本人经历尚浅,看不清一些大的趋势,还是老鸟们聪明,拿钱走人,然后换一个新工作,好不自在啊

没过多久我就离职,开启了我的面试之旅~

面试分级

我在家休息了一周左右的时间,给自己简单的放松了一下。休息完后就开始了投递简历(世界那么大,我想去看看)。这次看机会与以往不同,我决定先想好好的准备一番,然后开始投递简历,主要通过的是朋友内推,Boss直聘。

这次看机会我将所有公司分为三类:

1.A类: BAT公司,非常靠谱,各项待遇都是很优厚的
2.B类:一些知名的互联网公司(基本都在C轮以上),基本很靠谱,该有的都少不了
3.C类:就是那些正在招聘的公司,没啥名气,虽然钱多但是事也多。靠不靠谱真还不知道,只能碰运气

基础很重要

以前自己一直觉得从事 android 开发工作都好几年了,去面试基础问题应该没什么问题。正式因为自己傲娇的自信,导致自己总是碰壁,尤其是遇到很多基础性的提问,一时尴尬的不知道怎么回答?还有一种情况就是,一些问题面试前都记得很准确,但到我回答的时候,却怎么也打不上了。

于是在这次面试前,我在网上收集整理了一些 Android 开发相关的学习文档、面试题等进行了复习学习。还把自己之前做过的一些项目中遇到的问题进行了回顾,并找到了相应的解决方案。心想这次应该没有那么尴尬的碰壁了吧。

为了方便以后能够在此能力利于查阅翻阅复习,我特此整理在Github上,如有需要参考的可以直接去我 CodeChina地址:https://codechina.csdn.net/u012165769/Android-T3 访问查阅

刚踏入架构师之路的经历

这次我给自己的规划是做一个架构师,但是我深知架构师可不是闹着玩的,必须要有很强的一面,因此我在简历里面写的只是“架构师方向”。我在K公司 做得是架构师方向,因此我觉得有必要朝着这个方向发力,虽然现在不是很厉害,但是坚持一两年后,即使不是非常厉害,但是也距离非常厉害很近(这里使用了《孙子兵法》的一句:“求其上,得其中;求其中,得其下,求其下,必败。” )。

这个想法来源于在K 公司我第一任leader曾经跟我说过的话:『对于新东西,如果你觉得掌握了,但是不应用到项目里面来,是没有什么意义的,时间长了还是会忘记的。』我很庆幸我有一个好老大(我是属于双领导型的,K 公司 A项目的负责人是我的leader,但是我的直接汇报对象是 K 公司的副技术总监,下文就成为老大),用他的话来说就是经常踢着我的屁股走。

当我在网上了解到很多实用的新技术时,跟他随意吐露一句话,他就能非常用心的倾听我的想法,并鼓励我将这些东西带入到项目中来。从那以后我就开始看很多新技术,感觉合适的会引进到我们的项目中。从之后的证明中来看,是非常有价值的。

面试经历

A公司一面

  1. 自定义view
  2. Handler机制
  3. 组件化和插件化
  4. HashMap的源码
  5. retrofit和okhttp的源码用到了哪些设计模式
  6. NDK静态库和动态库编译流程
  7. openGL渲染模式
  8. Android中的动画有哪些它们之间的区别
  9. 谈谈mvvm

A公司二面

  1. 讲之前做的项目负责哪块,根据业务采用什么架构
  2. 使用过哪些设计模式,项目中遇到哪些棘手的问题,如何解决的。

A公司三面

这个是hr说,整体问下以前公司的情况等问题

感受:自己简历上写的东西要熟悉,基本面试官都是根据简历来问的。对自己以前做的项目也好好梳理,提前组织好语言,挖掘项目闪光点。

B公司一面

  1. java引用,以及引用队列,以及使用场景
  2. 拆装箱
  3. LeakCanary
  4. map
  5. 线上性能监控
  6. SharedPrefrence 遇到的问题
  7. 手写算法

B公司二面

  1. Handler
  2. 进程间通信
  3. 序列化
  4. 动画
  5. native崩溃捕获原理
  6. 结合项目提问
  7. Recyclerview的点击事件原理
  8. 启动一个空的apk,回启动几个线程
  9. 手写算法

B公司三面

  1. 跳槽原因
  2. 原来公司规模
  3. 预期薪资
  4. 个人优势

感受
1.简历上写的一定要了解,并且知道原理
2.多熟悉项目,找出一些能聊得功能点
3.崩溃捕获,以及解决(java ,native)
4.优化需要知道(大厂都会问)
5.了解由点到面,需要把知识连贯起来
6.还有如果想要高薪,一定要多跳槽,一般大厂工资涨幅都是有限度的,最高涨幅百分之30,除非你特别牛皮

C公司一面

  1. MediaCodec连环炮:MediaCodec报错,只有错误码,没有任何其它信息,如何解决?使用MediaCodec遇到了哪些问题?同步使用和异步使用有什么区别?
  2. 如何计算音频帧,一帧音频帧有多大
  3. YUV基础知识,相比于RGB减少了多少空间,YUV 各个分量都是0实际渲染出来是什么颜色的,NV21和NV12有什么区别
  4. MP4是如何存储音视频文件的,它是什么结构
  5. OpenSL 相关的问题,如何使用。可以干什么不可以干什么
  6. 结合项目问题

C公司二面

1.SurfaceView和TextureView区别
2.OpenGL ES相关问题,MVP矩阵左乘和右乘有什么区别,什么是外部纹理,为什么叫外部
3.OpenGL如何渲染一个View
4.VBO是用来干嘛的解决什么问题
5.结合项目问问题

C公司三面

1.项目是什么架构,如何设计的,为什么这么设计
2.算法题:字符串反转
3.平时如何学习的

感受:音视频开发感觉OpenGL ES问的比较多

D公司一面

1.问的项目中哪些用到了hook技术,是怎么实现的
2.Okhttp底层原理
3.点击应用图标的启动流程
4.hashmap在java7和java8的区别,为什么要引入红黑树

D公司二面

1.项目是怎么搭建的,用到了哪些技术点
2.arouter用到了什么技术点,是用来解决什么问题
3.socket底层原理
4.一个功能是如何从分析需求到落地的
5.如何带领团队的

感受:主要简历要写的好,尽量围绕简历上的点来刷面试题,不一定都要研究透彻,被问到自己不熟的点,可以尽量尝试着往自己熟悉点带,例如之前我被问到pms是怎么管理package信息的,我就说目前我对pms了解不深,主要也是研究了ams,然后就把自己了解的说一下就好了。

总结

先说再投简历前,首先要对自己的简历进行优化,简历中填写的一些项目经历要熟悉。还有就是在面试前期要复习好基础知识点,不要像文章前面说的,等到被提问是自己回答不上来,那就真的尴尬了!!!

最后跟大家分享一下我这面试前期进行收集整理复习的一些 Android 开发相关的学习文档、面试题、Android 核心笔记等等文档,希望能帮助到大家学习提升,如有需要参考的可以直接去我 CodeChina地址:https://codechina.csdn.net/u012165769/Android-T3 访问查阅。

祝想找工作换工作的小伙伴们都能去自己心仪的公司,前程似锦!

以上是关于三年 Android 开发的面试心经(后悔当初没有拿 N+1)的主要内容,如果未能解决你的问题,请参考以下文章

你后悔做软件测试了吗?

选择了软件测试,你后悔吗?

《Android开发从初级到资深全套学习资源》,Android大厂面试必备,不看后悔

三年 Android 开发的技术人生,浅谈自身面试的感悟

三年Android开发大厂面试经验分享,让你扫清Android面试障碍

(软件测试工程师)选择了软件测试,你后悔吗?