Android面经:二流Android攻城狮用一个月面试+复习+总结,收获Offer涨薪40%

摘要

开篇之前,首先说一下,大神就别点进来了。博主只是尘世间一个迷途小开发,二流程序员。

这篇文章并不像其他面经一样金光闪闪,只是一个二流Android攻城狮在市场的大潮之下,用一个月时间面试+复习+总结,最终拿到了自己喜欢企业offer(非一线大厂,但是薪资也涨了40%多,对我来说已经很满意惹)的故事。当然,大厂谁不想去呢?可是时间紧,生活压力大,计划赶不上变化。生活的真谛就是妥协而已。

前提

出来社会摸爬滚打三年多,不得不承认人是分三六九等的。即便是专注度、努力这些颇为客观的因素,也是因人而异的。(没办法,我也知道客观上应该努力啊555~~,可我主观上只想躺着刷B站~~555)

First,先列一下博主目前的客观情况:

  • 双非本科,非计算机专业。本专业是机械
  • 工作三年,都是小厂,小组最多没超过4个人
  • 算法基础一丢丢(翻书‘马冬梅’,合书‘什么梅’)
  • 英语水平半文盲
  • 有一个自己常年维护的博客,GitHub所有项目加起来有200多个star
  • 懂一点应用层方面的音视频编解码常识

如何准备

我是从去年8月接近中旬开始面试的,一直到9月初结束,整个面试周期满打满算有一个月的时间(我是相当于裸辞找工作的)。这次面试采用的策略是以战代练,就是边面边复习。面试的话,主要是朋友内推,Boss和拉勾。但Boss的话,初期不建议把简历可见,我就在这方面吃了苦头(别提了都是泪)。

接下来我将这一个月内我接触的常识点铺展开来,也给大家一点参考,文末也有分享完整详细的Android常识大全PDF

书籍:《Android开发艺术探索》、《Android进阶之光》、《Android进阶解密》、《图解Http》

书是不能不看的,以上这几本,除了图解Http之外,都要大致读一遍。当然时间可能没那么充裕,所以要跟着目录,挑一些自己的弱项好好复习一下。Http这本书是因为有几家企业面试问到了网络相关的常识,所以我才去阅读的

算法:LeetCode,把链表、排序、树标签里所有简单类型的题目练一下手。特别是排序,冒泡、快速、二分、选择、归并一定要达到手写的水平!

数据结构:Java的HashMap——7和8的区别、ArrayList、LinkeList。Android的ArrayMap、SparseArray系列。还有阻塞队列ArrayBlockingQueue、LinkedBlockingQueue。HashMap的结构和细节是遇到最多,建议仔细看一下源码,一定要有自己的理解(划重点)。把HashMap如何存储、如何查找。hash碰撞,以及内存利用率这些问题理解一下

设计模式和架构:准备一些自己拿手的模式,在网上查一下资料。准备一些套话,关键词耦合,二次修改方便,外部不用关心内部实现等等。MVC、MVP、MVVM三种,起码要了解两种,并且能清晰明确的说出,两种架构间的优缺点。

我本身经历过一次MVC -> MVP的过渡,所以面试的时候就只提了这两种。MVVM没接触过,就实话实说没搞过,面试官也不会再问。千万不要打肿脸充胖子,没接触过就说不会就可以了。
关键词:UI逻辑、业务逻辑、不影响对方的前提下修改、逻辑清晰,方便定位

简历:这个就8用提了,面试的敲门砖。我的简历也写的不是很好,但因为会一点音视频的常识,所以还是有一点加分项的。简历要注意简洁明了,star法则;诸如:我做了A工作,将效率提高200%、我优化了xxx,把速度优化了10~20倍。1 ~ 2页最佳

最开始写简历的时候,实在不知道该如何动笔。磨磨蹭蹭憋了好几天没整出来。其实这个时候就要平心静气,把自己的思维拔高一点。站在整个项目的角度去细细查看,这个时候就会发现项目中还是有不少亮点的。

Android基础:这个就很重要了,当然涉及面也相当广。四大组件,生命周期这个啥都不说了,直接冲就是了,基本都会问到。Handler、View绘制流程、事件分发,这些都是老生常谈。

Android框架基础:AMS,Activity的启动过程。Android绘制流程(这个看个人了,因为我简历上写了熟悉Canvas哭,手动狗头)

Java基础:多线程、线程池、锁机制,这两个常识点问到的还挺多的。其他的包括,内存区域、内存泄漏、垃圾回收。。。(这些懂个概念即可,不深究)

面试

以上是一些复习的常识点,因为要准备的东西还是蛮多的。所以时间上的安排一定要灵活,我是早上复习Java基础,中午看Android,晚上复习算法和数据结构。有面试的话,就提前去了解一下企业的产品,去官网上冲一冲浪,下个APP玩一下。也算提前给自己一个心理准备。

以下是一些面试题,供给大家参考:

  • RecycleView复用机制
  • RecyclerView的LayoutManager如何布局
  • 设计模式:观察者模式
  • APP启动优化
  • 注解原理
  • java内存模型
  • 内存泄漏处理;可能出现的内存泄漏问题
  • 性能优化如何做——这是一个比较泛的问题,主要从布局分析、绘制分析、内存优化几个大的方面去延伸,如何定位、如何解决,说出自己的理解和经验即可
  • 链表和数组比较
  • 死锁和多线程——因为自己说秃噜嘴了,提了一句死锁。就被问到了555,好惨。所以千万别装,不会就别提
  • 自定义view。要具体到在onMeasure里怎么处理,onLayout怎么处理
  • 矩阵原理,因为我说了我熟悉Canvas
  • 事件处理,事件分发。同学们,这道题基本必问。敲黑板!
  • 差值器原理
  • 线程池原理,涉及到阻塞队列
  • Kotlin,apply和let区别
  • AS如何检查内存泄漏——考察你的工具使用熟练度
  • canvas的绘制是如何实现的——硬绘和软绘
  • 遇到的印象最深一次的内存问题
  • 如何写一套图片加载库——考验你的综合能力
  • Bitmap的缓存,软引用、Lrucache。recycle如何实现
  • view的post如何实现
  • Fragment和View的区别
  • Http的请求方式,RestFul熟悉吗——网络我基本只知道一些概念
  • linearlayou 和relativelayou性能比较
  • MessageQueue 和message 的创建
  • 手写快速排序,手写二分查找

好了,以上就是遇到的一些问题。还有些问题涉及到音视频这方面,因为不具有通用性,我就不提了。

还是那句老话,面试是一个双向考察的过程,面试官考察你,同时你也要考察考察企业。要真是不喜欢的话,工作做得也不开心,当然也不会长久。工作毕竟还是占据了生活中的大部分时间,找一个自己喜欢并愿意投入的工作对自己的成长也好一点。

同时,面试也是一个考察综合能力的地方。不要以为技术上准备的很充分了就万事大吉。在面试的时候,态度、分析问题的能力、自信度、人品这些都决定了你能否拿到offer。

其他细节

面试一般的时间是在两三个小时左右,作为求职者。大家要在这段时间内,将大家的价值展现给面试官和HR。就像推销产品一样,你得站在旁观者的角度思考一下,这个人值不值得大家买入(发offer),他(她)的性格怎么样,人品值得信任吗等等。

站在这个角度想一下的话,有很多问题你自己就想通了。当然你考虑这些问题的前提是你的技术准备已经挺充分的了。

  • 自我先容;准备一段两三分钟的自我先容,挑一些有亮点的东西说一下。面试官也是人,你长篇大论五六分钟,他记住的点也不会太多。所以要精简,要学会提炼关键字。譬如:工作上偏重架构设计,技术上偏重技术实现(实现了什么牛逼的技术)

  • 语气腔调:这个也有必要练习一下(不要笑,这个很重要),你可以自己录音听一下,试试有没有一个合适的语速让别人能听清楚你说的话。还有说话要自信,不要结结巴巴,不会的东西就直接说没接触过就行了,切忌扭扭捏捏~~还有回答问题的时候,不要等面试官问完就立马回答。停顿个几秒钟作思考状(手动狗头),如果是特别特别熟的问题,就稍微顿一下,不要太流利。有些点可以适度说想不起来这个程度自己把握,挑一些不太重要的点,留给面试官补充,不然你各个问题回答如流,只会加速面试流程。说不定碰到一个轴一点的,就抛出一个史诗大问题给你。当然这个小技巧面试用一次就最多了,千万别乱用。。。

  • 离职原因:这个有的技术官不会问,有的会问。HR会比较看重这个问题,这个就自己斟酌吧。反正不要给人留下这个人很浮躁,不会在大家这里久留的印象就好了。

  • 技术思考:这也是一个很泛的点,要具象的话。就是你在项目中如何写你的代码,有的面试官会看重这个问题。这个嘛,就纯是看个人了~~~

总结

面试总结下来,比前两年要难上许多当然大厂还是一如既往的难~~~。如今的面试官经验也丰富很多,很多问题并不会直接问你,而是抛出一个具体的问题由你去分析。有的还是考察你在产品和开发之间的项目协调问题,比如出了一个客观上无法解决的问题,你该如何去协调。还比如会考察你一些对产品的思考。

现如今而言,工程师尤其是Android工程师是远不如前两年火爆了。现在更考察的是一个工程师的综合能力,你的基础、交流能力、问题组织能力、有没有过对产品的思考

最后这里放上我这段时间复习的资料,这个资料也是偶然一位朋友分享给我的,里面包含了Tencent、字节跳动、阿里、百度2019-2020面试真题解析,并且把每个技术点整理成了视频和PDF(常识脉络 + 诸多细节)。

还有 高级架构技术进阶脑图、高级进阶架构资料 帮助大家学习提升进阶,这里我也免费分享给大家也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

有需要的朋友可以点击:Android面试资料免费领取~

攻城狮!时代在进步,工程师们也要进步,不仅仅是技术。工程师更是一个综合能力的结合,涉及到演技,口才,交流能力,技术基础,产品思维等等~~