写点什么

Android- 春招 - 面试经历 -2019 年,已收藏

用户头像
Android架构
关注
发布于: 刚刚

链接:https://www.jianshu.com/p/840688b02c7f


声明:本文已获JarryWell授权发表,转发等请联系原作者授权

感叹一声

耗时两个月的找工作经历终于是画上句号了,几十个日日夜夜的酸甜苦辣只有裸辞的亲尝者才能体会到吧,下面想来复盘或者说总结一下这段经历。但不管怎么总结,核心还是那一句话:一定要充分的准备!!!涉及到的知识点一项都不漏的复习一遍(至于深浅程度主要看自己平时的积累了),一则能很大程度的提高自信(不需要担心被面试官问倒);二则面对问到的知识点时还可以扩展的说清楚该知识点在安卓或者 Java 体系中的关系和逻辑。否则后续因为复习不到位而与自己理想的公司或岗位失之交臂时你会感到些懊恼。

简历准备阶段

可以说面试官了解你的唯一入口就是简历了,因此一般都是根据你写的项目经验为入口来展开来问知识点。这个时间段应该要去认真阅读自己参与过的项目代码,归纳出技术点、解决的问题以及最终达到的效果来完善项目经验。另外要注意:简历一定要写自己比较熟悉的技术点,因为简历作为一个入口,面试官很可能会层层深入的询问你,如果不是特别熟悉就可能会招架不住。


反例:我在简历里写了一个 WebView 与 RecycleView 滑动冲突的项目经历,有好几个面试官犀利的看到在 fling()滑行过程中会出现在交界处位置停顿的问题,继续问到这个情况要怎么解决,如果没有扩展去了解 MD 控件(CoordinatorLayout+ Behavior)滑动机制的话可能就回答不上来了。甚至还有面试官继续追问道:如果要你自己基于 onTouchEvent()这个事件机制来解决这个问题要如何做,通过三个层次的追问就给问蒙了,囧。

初期准备阶段

刚开始两个礼拜还能耐得住性子在家里老老实实的复习,一个知识点一个知识点的过。第三个礼拜便开始着急了,觉得这样复习太慢有点浪费时间。于是草草把没有复习完的内容快速过了一遍,着急开始找前同事和猎头推简历,面试机会确实是来了,而且是一线互联网公司。结果可想而知都很不理想:阿里的第一轮电话面试就败下阵来、oppo 勉强冲到第二轮也没能再过关。看到问题后于是停止了推简历,又老老实实的复习剩下的知识点,并做好复习笔记。虽然从失败中总结到了经验,但白白浪费了机会,得不偿失。


该阶段复习可以参考知识点列表:https://www.jianshu.com/p/0f82b0650909,基本涵盖到安卓和 Java 的绝大部分的基础知识点了,后续阶段的复习也可以参考这里的知识点。


另外一个总结得不错的列表可以作为补充:https://lrh1993.gitbooks.io/android_interview_guide/content

中期阶段

过完前面的基础知识点后,这个阶段主要是去熟悉源码了。可以结合项目中用到的开源框架有针对性的阅读下源码,面试过程中一般会根据你在项目中用到的框架,询问你对这些框架的原理是否熟练掌握。通用框架一般无外乎网络库、图片库、工具类、插件化或热更新库等。这些知识点应该平时多去积累和练习为好,此时只要稍加复习即可。如果不是特别熟悉的可以去参考别人总结比较好的文章对着源码梳理,一定要在自己脑中形成知识结构,基本的实现细节要陈述出来。


另外就是平常用到的安卓原生代码一起要去熟悉下,比如:消息机制、View 的绘制流程、Binder 通信、java 集合、并发等。觉得这些更像是基础吧,没什么好说的。理解的越深对自己平常的运用越有帮助。

后期阶段

有了上面两个阶段的准备后,前两轮的基础面试基本没什么问题了。如果目标岗位是资深开发或者架构师的话,一般还会问到更底层原理和更抽象的宏观层面问题。


底层原理方面:比如虚拟机的内存区域和 gc 流程、tcp 的流量和拥塞控制、https 建立连接的交互流程等,这里可以去找对应的技术文章熟悉了解。


宏观层面:一般是架构模式(MVC、MVP、MVVM)、开发模式(模块化、组件化、模块组件化)以及设计模式相关问题,要能熟练掌握到灵活运用的层度,并总结出它们之间的异同特点。


另一大块就是算法了,某些一线公司比较喜欢考,比如今日头条在面试邮件中就明确指明要考算法。因此要对标你的目标公司是不是要考来进行复习。具体考哪些内容,以我面试的那些历程来看,基本都没超出《剑指 offer》那六十几道题的范围(可能有对应题的变形),因此花一个礼拜左右的时间把那六十几道题弄懂并自己动手实现一遍基本 ok,当然一些基础算法还要自己认真去总结学习,比如排序


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


、二分查找、链表和树的基本操作等。

面试经历

主要是根据回忆总结的(会有遗漏点)。


1. 腾讯(QQ 音乐)


感觉不擅长互动较少的电话面,很难快速暖场,问题回答确实不好。当时还在复习的初级阶段内容都没看完,也是一部分原因,基本算是草草收场吧。问得比较多的是优化相关的问题。


2. 支付宝(海外版)


仍是电话面的,还是没有找到感觉,回答不在状态。最后猎头反馈的本次面评是:过往项目功能较简单、某些技术细节掌握不到位。算是浪费了机会。


3. 今日头条


是所有参加的面试里比较专业的面试体验吧,面试官体现了很好的技术素养。总共参加了 3 轮视频面试(技术面全部面完),开始还以为很有希望(感觉面得不错,基本没有阻塞的知识点),最终结果却是挂掉了,原因目前未知。当然这里也花了很长时间准备(3 个礼拜左右),主要是因为要考算法,重头复习了算法,还把所有知识点重头捋了一遍。


主要考察的问题大体有如下一些:


android:


  • webview 加载 h5 的优化(问得很多)

  • 优化相关(包大小、启动优化、卡顿),webp 的透明通道如何处理,代码压缩如何处理

  • native-jni 相关;如何分析 native 的崩溃堆栈;

  • 进程保活

  • 插件化原理

  • 网络优化(答的不好)

  • https,fiddler 抓包怎么处理的,为什么 fiddler 可以篡改 https 的数据。header 中的 host 作用是什么

  • 懂不懂 kotlin (直接说不会了)

  • activity 的 4 种启动模式,A 启动 B 时 activity 的两个 acitivity 的生命周期的流程是什么

  • 如何监听 activity 是从后台切换到了前台?不是在 onResume()中处理


push 进程的挂掉之后,再次拉起时如何恢复 push 进程中 service 的状态


  • 两个进程如何使用 binder 进行双向通信

  • 如何监测普通对象是否泄漏,leakcanary 在 dump 时卡顿厉害,这里该如何优化


listview 和 recycleview 的差别


  • WebSocket、socket、NIO

  • 对 app 架构的理解

  • activity 的启动流程

  • 两个页面的消息同步怎么做?(类似以前评论 sdk 的在子评论页面点赞时,back 回来后需要同步这个点赞状态)


java:


  • 类加载流程

  • 类的唯一标识是什么

  • gc 流程

  • map 都有哪些类型,特点是什么,hashmap 内部结构

  • 动态代理跟静态代理区别,如何代理一个普通对象


算法:


  • 合并两个有序链表,使得最终有序。

  • Map


map,按 value 平方的升序打印 key-value。


  • 1000 万个 0~100 之间的小数,找 top100。如果是保留两位小数,怎么做?


4. akulaku


整体的面试体验还是不错的,面试官技术素养也不错。一下午走完了所有流程(2 轮技术 1 轮 HR)。该公司应该也算是创业公司吧,有阿里的投资,内部很多产品线,主打东南亚电商和金融,目前算是个爆发增长期。


记忆比较深刻的问题有:


retrofit 的动态代理中是如何处理接口返回类型的(因为接口申明的泛型在运行时会被擦除)

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
Android-春招-面试经历-2019年,已收藏