阅读 252

记一次中秋前后的Android面试经历

前言

入职现在就职的公司到现在已经有一年半的时间,因为一直听说这2年互联网的大经济形势不好,所以中秋前后萌生了出去看看机会,如果有合适机会可以考虑一下的想法。从月初准备到月末决定暂时不离职,打算分享一下自己的心路历程。

面试前,写了一份自己的简历。大致按照自己的基本信息、职业经历、项目经历、技能来写。重点突出自己遇到的问题和解决手段。 接下来,是准备了一些知识点,大类上分为

  • Java
  • Android
  • 常见的计算机基础

Java重点准备了一些多线程、concurrent  package以及JVM相关的内容,Android主要根据四大组件,UI,质量,性能,工程化几个角度复习。基础知识的话复习了一些常见的数据结构、算法和网络知识。画了脑图,然后进行了整理。

关于项目,总结和准备了几个比较熟悉和拿手的东西。我个人的话是

  • Android组件化,分仓库,基于ARouter的路由SDK的重构的项目经历、
  • 路由库apt 代码和设计,文档和自动测试的中后台
  • Flutter的技术预研,相关的混合开发、基础设施的落地

然后就出去面试了,一开始我的思路是挑几个规模不大,数百人的公司进行练手。然后再面试一些规模比较大或者告诉发展期技术氛围比较好的公司。

目前接触过的有:阿里icbu,阿里大文娱,涂鸦智能,个推,哈啰出行,快手,学海教育

经过

先是脉脉上遇到了学海教育的 hrd 要了我的简历,我觉得行业和规模都和我现在公司差不多,就去尝试试了一下。面试一共三轮,2轮技术+一轮hr,最后我的预期薪资过高匹配不了他们能给的2年经验的工程师的薪资。就没有继续聊了。技术面是一轮随机的基础题目加上和技术leader的各种瞎聊。

一面的基础问题基本是

  • Activity的启动涉及哪些进程
  • 主线程的Looper是在哪里启动的,子线程如何启动一个Looper,HandlerThread的原理
  • 重绘和requestLayout的区别
  • 如何拦截一个ScrollView的触摸事件。
  • 如何实现一个三级嵌套的列表
  • 虚拟机如何判断对象是否可以回收,哪些对象可以作为 GC Root
  • 有哪些性能优化经验

面试题比较基础,基本平时认真复习背背题就能答出来。

二面主要是聊了项目,平时研究和工作的方向,方式,思考。

面完这个公司之后感觉小公司的面试题还是表现不出什么人的真实能力,于是准备多准备一下。但是在 Boss 直聘上遇到了 涂鸦智能 要简历,然后很巧的是发现找我要简历的是在 yz 同组的一个 Android 同事,想着机会不错就直接给了简历。这里说一下涂鸦的公司背景,涂鸦的创始人是浙大的毕业生,早年搞了一个国内很大的php社区,被阿里全部收了,成了阿里云的第一个业务团队。创始人的背景还是很厉害的。IOT的海外业务也扩展的不错,前段时间还看到新闻给美国的部分挖来了一个有16年通用电气 CEO 经验的部门主管。还是很有前景的一个公司。面试和内部的氛围感觉和杭州多个阿里出身的创业公司比较符合。

涂鸦我只面试了一轮,可能因为是内推就直接现场面了,公司在浙商财富,现在应该搬到了三墩,整体的面试还是很令人舒适。前面花了很大的时间介绍自己的项目。时间最多的是路由库的设计,实现和整个路由中后台的想法。对我apt怎么设计的,什么优势,他自己看得到的一些功能上的可扩展点会拿出来问我怎么思考去解决。也穿插了一些ARouter的原理的提问。聊的还是非常舒服的。感觉自己能拿出手说的事情也可以一直说出来。最后随便问了我几个基础知识,可能因为那时候还准备的不是很充分,在回答的时候还是有1-2点回答的有点不好。 总体感觉面试体验还可以。但是没有被继续第二面。最后从内推人那里了解到的理由是虽然自己的想法有落地,技术上有成果。但是身上的优势不能抵消自己在学历背景和工作经历频繁跳槽的劣势。就没有被继续面试了。还是有点可惜的。

第三家面试的是 个推 。相信移动端开发的同学对这个公司不会很陌生。这是一家靠推送出名,现在靠大数据生存的业绩还不错的上市公司。地点在西湖区福地创业园,网上看到的消息是在三墩云谷买了一块地,在造自己的新大楼。

个推面试了三轮技术+一轮hr面。整体的面试体验也非常的舒服。感觉自己也得到了很多发挥的空间。

第一轮主要是我自己介绍自己的项目。面试官中间评价了一句觉得我还是比较有想法的。结合我写过比较多的SDK的经历问了一些写SDK的体会。然后问了一些基础知识

  • Handler
  • SSL握手过程,抓包原理
  • 对称加密和非对称加密
  • 有没有了解过安全和反编译。(这里我是没了解过的,后面了解到个推的SDK对这方面还有比较高的要求,但是面试的时候你没研究过也不会刁难你)

第二轮是移动端的部门主管面试的,因为个推是一个做SDK转大数据的公司,所以人思维不限于一端的方式在个推还是比较受欢迎的。这个和我在公司思考的一些事情和实践也比较吻合,所以聊的还是比较舒服的。后面用非常快的语速提问和让我回答了一些基础知识:

  • ssl 握手流程
  • service的生命周期,保活方案
  • Activity在signleinstance的生命周期
  • 如果你是一个公司的技术负责人,设计一个日志系统你会思考一些什么。尽可能的说

专注于端上的同学可能会疑惑最后一个问题,但是我非常能理解这个问题。在现在这个公司参与过一些端上日志收集的工作。对很多事情客户端一端出发思考出来的方案是不全不合理一厢情愿是有很大的感受的。我们需要专注端上的细节和疑难杂症,但是不要忘记去关注具体业务和其他端的视角,知道的越多,我们能做的决策会更准。 第三轮是研发总监的面试,主要就是聊了项目经历、职业规划等

总体个推给我的感觉还是对技术比较有追求,技术思维比较开放的一家公司。技术理念也非常合我意。后面虽然offer的薪资达不到我的预期。但是把季度奖平摊,结合公积金比例,确实比我现在强了很多。但是手上没有其他公司的offer,个推也没有让我强烈中意的点,加上最后有对自己的一些工作上的反思。最后我还是选择了不离职婉拒了offer。期间个推的 HR小姐姐和移动端负责人也很热心的帮我分析,给我建议。也很理解我的选择。还是非常感谢面试的时候遇到这样的一家公司和人的。

第四家接触的就是让我有很大执念的阿里了。这次阿里我面了2个部门,都是惨败收场。但是也收获了不少,也有了下一步的准备方向。

第一个部门是朋友招人帮忙内推的阿里国际,传说中阿里最奇特的不加班部门。icbu面了2轮。第一轮问的问题主要是:

  • 为什么研究flutter,新技术上的话什么考虑,有哪些人一起做,其他人对flutter的观点是什么,你们一起共事的时候有没有过观念冲突
  • 路由库做了什么,怎么做的,用apt的原因
  • 下载库做了什么,怎么设计的。你觉得为什么会出现新技术替换老技术的现象。你觉得你的设计被替代的几率多大
  • 日志库做了什么,性能有没有做过前后对比,如果让你再做一次,你会怎么做

然后问了一些基础问题

  • hashtable和hashmap区别。hash表线程安全的实现是什么样?
  • activity的launch mode
  • sp需要注意什么
  • ssl握手流程,ssl为什么是安全的,怎么抓https的包,7.0上有什么变化,怎么抓,怎么防止被抓
  • 插入排序的流程、时间复杂度,稳定性
  • android的存储有哪些
  • java的垃圾回收算法有哪些

基础知识问的感觉比较简单。自己设想的view原理,binder什么的都没问。但是前面几个对于工作中的思考还是有点直击灵魂的。对做一件事的思考能力还是很有要求的。

二面就比较尴尬了,后面一个偶然的原因了解到那时候招聘级改成了 P7,所以被用来走了招聘流程。问了几个很简单的问题就草草结束了。比较可惜。

从icbu的流程出来之后,找之前yz同组在大文娱的同事,确认了他们招p6,但是也被告知2年面p6很难。抱着试试看的态度面了一轮电话。电话是面试官在高铁上打给我的。简单聊了下简历,就开始了一堆基础知识的提问

  • 对自己负责的业务的理解
  • 日志sdk怎么设计的,上报策略是什么样的
  • 项目里面比较复杂的场景举例子
  • android ipc有哪几种,content provider的原理是啥
  • 简述handler和消息机制
  • view的渲染原理和流程
  • android有哪些动画类型
  • 简述网络架构,tcp三次握手的流程,为什么是三次不是2次
  • http和https的区别,ssl握手的流程,了解哪些对称和非对称加密算法,是否了解数字签名
  • gc的算法有哪些,什么过程。java有哪些引用类型,什么情况下用软引用
  • java有哪些锁,有什么样的应用场景

基本上大部分时间都是在面基础题。感觉自己被面试官带了节奏,没有发挥出自己的一丁点优势。虽然大部分题也答上来了,但是还是挂了。反馈是没有突出优势。

后面还接触了 快手 和 哈啰出行

快手是北京的部门视频面试的。因为提前被给了牛客的链接,就总觉得一定要手写算法挂定了,所以非常紧张。加上自己是第一次视频面试,感觉非常不习惯和紧张。面试官问了比较简单的题目,结果sb了一样大脑空白写不出来。非常的尴尬和可惜。大概的面试套路也分享一下,可能头条类似的公司现在也是这个套路?

给了一段Handler# postDelay 的代码,问GC root的引用链。我一下子脑子短路居然没想起来Handler是被匿名内部类引用了Activity导致的泄漏。期间面试官还引导我问我Activity被谁引用了我也没反应过来。真的是尴尬至极。中途也问了哪些对象可以作为gc root,handler怎么处理delay的时间等问题,还是比较全的。而且很从实际出发的面试套路。 后面是一个算法题。递归反转链表。其实自己知道递归是怎么反转的。。。但是太紧张了就是写不出代码,就差反转的指针关系没写出来。也是尴尬至极。 全程面试表现的很sb。。。浪费了一次大好的机会。

哈啰出行是面试了杭州成立的新部门。全程面试官在拉高自己的姿态。几乎我说什么都试图用我觉得你根本不理解其中原理的态度跟我说话。面试体验极差,我随便举例说几个 例如:

  • okhttp我说我主要就看了拦截器,知道有线程池但是没有关心使用线程池的逻辑。但是他一个劲的怼我说ok要看就看线程调度。其他都不用看。。。
  • 问我arouter和普通跳转有什么区别,我说个人经历觉得动态下发路由表可以提升动态性。思考了一下说你这也是个思路但是优点是可以做统跳。。。我很纳闷,intent+scheme也可以啊。。。
  • 跟我聊Flutter优势,我巴拉巴拉说了一堆优缺点,最后怼我说你没写过ios我觉得你不理解跨平台原理。然后跟我说底层用c++写的内存和原生占用差不多。当我面说hotreload不是效率优势最后用“我觉得你不懂”的语气跟我说他看了一些原理但是没写过Flutter。。。

因为自己感觉在杭州需要去一次阿里的情节。所以后面就没有怎么继续投递简历了。感觉面试阿里还是很有收获的。 对人和技术的要求都非常的高。

总结

通过这些面试,我总结了一些个人的体会作为观点。也决定再继续沉淀一段比较长的时间再出去试试大厂。

  • 关注一些身边朋友面试的体验。个人感觉现在面试的要求和套路和刚毕业的时候完全不一样。2016年看面经,拿大厂offer的基本是原理、源码回答的漂亮。现在你回答的再好别人也知道你可能是背博客背的,会很看重你在平时工作中的思考和对原理真正的探究和应用。如果你有很好的落地结果或者能教面试官一些细节知识。面试结果会很不一样。
  • 准备好自己的自我介绍。找到自己的优势和可以拿出来说的点。电面可以提前根据start原则写下来,直接对着读给面试官听。这样的详细介绍,即可以占用时间,也可以引导面试官掌握主动。个人觉得自己面阿里文娱的时候完全没有说出自己的优势项目,被各种基础知识问。如果基础知识的原理你没有直接应用深入理解过,你是很难给出令人眼前一亮的回答的。我这次面试,工作经历很简单的介绍了等着面试官问,结果很少被问到我自己的擅长项目。从这个角度看,我这次是亲手把自己推向了被动。
  • 面试的时候要克服不自信的心态,要时刻记得你是和面试官交流的。要不卑不亢。这点对我来说还不是很容易。视频面的时候表现糟的令自己不敢相信。遇到辣鸡面试官的时候也很木,任由人家漏洞百出的怼。思路也比较木,没有准备到的东西根本扯不出来,举个例子,content provider的原理我没有具体看,但是我知道 1. 四大组件都会跟ams走ipc,2. cp是读取另一个app进程的数据。其实这2点稍微思考下就能分析出来然后扯很多。但是我却木木的说不清楚。这个其实是很吃亏的,完全表现不出自己的思考能力。这可能也是很多小伙伴需要提升的能力吧。
  • 不要频繁跳槽,想清楚自己为什么离职。如果不是公司真的提供不了发挥的环境或者你真的非常缺这点钱,还是比较建议在这家公司发挥出你最大能发挥的价值再离职。这样你出去,反而可能会带着亮点出去。对于年轻人来说,你的亮点无非四点:
  1. 985,211背景
  2. 大厂背景
  3. 项目经历很有亮点,在某些点研究、实践、落地、思考的很深入。
  4. 开源项目

大部分人可能和我一样没有1和2。那么如果你做不到3和4的其中一点,只是会跟网上的面经一样干扯源码扯原理,还是很难收获满意的offer的。

请关注我的微信公众号 【半行代码】

关注下面的标签,发现更多相似文章
评论