作者:勇闯天涯
当某人顺利通过大厂面试时,总会有人认为这是运气比较好罢了,但他们不曾得知对方之前受过多少苦和委屈,又付出了多少努力一步步去突破这些困境。正是因为他们的努力付出,在合适的时间与地点,用自己付出的成果牢牢找抓了自己的机遇。遇到机遇这可以说是运气,能不能抓住这还得看你自己的实力。
废话不多说了,直接来说说我最近的面试经历吧。我投简历的公司有很多,基本都收到了面试通知的邀请,其中有让我心血沸腾的简历,也有让我感到失望到无助的经历,于是我将这些经历都记录下来了,细想之后很值得,面试了这么多家公司,要是到最后什么都没有留下来,那就白白浪费了这么多的时间。至少对我来说将一些好的经历与差的经历进行整理总结,最后肯定能等到我想要的答案。希望这些能给想换工作的大家提供帮助。
离职原因
公司裁员的时候我们老大对我说:你留下来好好干,后面不管公司怎么分股份、期权、肯定不会少你。当时我很信任老大,跟着老大一起干感觉就是一种享受。
但是没有想到公司裁员后,公司内部动荡很大,主业务线从客户端A业务线转移到B业务上。我主要负责的是A客户端的架构,于是我闲下来了。B业务线那边很忙,没时间配合我做一些架构上的事情。于是我每天就在脑补的查看各种学习文档,补充知识点能量。
做了几天后,后悔自己当时没有那 N+1 走人,有种被老大忽悠的感觉。因为后面发生的是我就暂且不讲了。只怪本人经历尚浅,看不清一些大的趋势,还是老鸟们聪明,拿钱走人,然后换一个新工作,好不自在啊。
没过多久我就离职,开启了我的面试之旅~
面试分级
我在家休息了一周左右的时间,给自己简单的放松了一下。休息完后就开始了投递简历(世界那么大,我想去看看)。这次看机会与以往不同,我决定先想好好的准备一番,然后开始投递简历,主要通过的是朋友内推,Boss直聘。
这次看机会我将所有公司分为三类:
1.A类: BAT公司,非常靠谱,各项待遇都是很优厚的
2.B类:一些知名的互联网公司(基本都在C轮以上),基本很靠谱,该有的都少不了
3.C类:就是那些正在招聘的公司,没啥名气,虽然钱多但是事也多。靠不靠谱真还不知道,只能碰运气
基础很重要
以前自己一直觉得从事 Android 开发工作都好几年了,去面试基础问题应该没什么问题。正式因为自己傲娇的自信,导致自己总是碰壁,尤其是遇到很多基础性的提问,一时尴尬的不知道怎么回答?还有一种情况就是,一些问题面试前都记得很准确,但到我回答的时候,却怎么也打不上了。
于是在这次面试前,我在网上收集整理了一些 Android 开发相关的学习文档、面试题等进行了复习学习。还把自己之前做过的一些项目中遇到的问题进行了回顾,并找到了相应的解决方案。心想这次应该没有那么尴尬的碰壁了吧。
为了方便以后能够利用空余时间进行查阅翻阅复习,我特此整理在该笔录里面了,如有需要参考的可以直接去我 https://qr18.cn/CgxrRy
访问查阅。
刚踏入架构师之路的经历
这次我给自己的规划是做一个架构师,但是我深知架构师可不是闹着玩的,必须要有很强的一面,因此我在简历里面写的只是“架构师方向”。我在K公司 做得是架构师方向,因此我觉得有必要朝着这个方向发力,虽然现在不是很厉害,但是坚持一两年后,即使不是非常厉害,但是也距离非常厉害很近(这里使用了《孙子兵法》的一句:“求其上,得其中;求其中,得其下,求其下,必败。” )。
这个想法来源于在K 公司我第一任leader曾经跟我说过的话:『对于新东西,如果你觉得掌握了,但是不应用到项目里面来,是没有什么意义的,时间长了还是会忘记的。』我很庆幸我有一个好老大(我是属于双领导型的,K 公司 A项目的负责人是我的leader,但是我的直接汇报对象是 K 公司的副技术总监,下文就成为老大),用他的话来说就是经常踢着我的屁股走。
当我在网上了解到很多实用的新技术时,跟他随意吐露一句话,他就能非常用心的倾听我的想法,并鼓励我将这些东西带入到项目中来。从那以后我就开始看很多新技术,感觉合适的会引进到我们的项目中。从之后的证明中来看,是非常有价值的。
面试经历
A公司一面
- 自定义view
- Handler机制
- 组件化和插件化
- HashMap的源码
- retrofit和okhttp的源码用到了哪些设计模式
- NDK静态库和动态库编译流程
- openGL渲染模式
- Android中的动画有哪些它们之间的区别
- 谈谈mvvm
A公司二面
- 讲之前做的项目负责哪块,根据业务采用什么架构
- 使用过哪些设计模式,项目中遇到哪些棘手的问题,如何解决的。
A公司三面
这个是hr说,整体问下以前公司的情况等问题
感受:自己简历上写的东西要熟悉,基本面试官都是根据简历来问的。对自己以前做的项目也好好梳理,提前组织好语言,挖掘项目闪光点。
B公司一面
- java引用,以及引用队列,以及使用场景
- 拆装箱
- LeakCanary
- map
- 线上性能监控
- SharedPrefrence 遇到的问题
- 手写算法
B公司二面
- Handler
- 进程间通信
- 序列化
- 动画
- native崩溃捕获原理
- 结合项目提问
- Recyclerview的点击事件原理
- 启动一个空的apk,回启动几个线程
- 手写算法
B公司三面
- 跳槽原因
- 原来公司规模
- 预期薪资
- 个人优势
感受:
1.简历上写的一定要了解,并且知道原理
2.多熟悉项目,找出一些能聊得功能点
3.崩溃捕获,以及解决(java ,native)
4.优化需要知道(大厂都会问)
5.了解由点到面,需要把知识连贯起来
6.还有如果想要高薪,一定要多跳槽,一般大厂工资涨幅都是有限度的,最高涨幅百分之30,除非你特别牛皮
C公司一面
- MediaCodec连环炮:MediaCodec报错,只有错误码,没有任何其它信息,如何解决?使用MediaCodec遇到了哪些问题?同步使用和异步使用有什么区别?
- 如何计算音频帧,一帧音频帧有多大
- YUV基础知识,相比于RGB减少了多少空间,YUV 各个分量都是0实际渲染出来是什么颜色的,NV21和NV12有什么区别
- MP4是如何存储音视频文件的,它是什么结构
- OpenSL 相关的问题,如何使用。可以干什么不可以干什么
- 结合项目问题
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 核心笔记等等文档,希望能帮助到大家学习提升,为了方便以后能够利用空余时间进行查阅翻阅复习,我特此整理在该笔录里面了,如有需要参考的可以直接去我 https://qr18.cn/CgxrRy
访问查阅。
祝想找工作换工作的小伙伴们都能去自己心仪的公司,前程似锦!