我的杭州面试之旅

写在前面

本人2015年毕业于普通一本院校计算机专业,毕业以后一直从事Android开发,今年打算回杭州落户定居,也就有了这次杭州面试之旅。面试的岗位是Android开发,因公司业务发展需要,去年10月份开始自己陆续开发上线了两个微信小程序,所以小程序作为加分项在简历里也有所体现。从4月份准备面试到最终offer确认差不多3个月的时间,觉得还是有必要总结一下。

天猫

天猫的面试来自掘金专栏群兮诀同学的内推,这里非常感谢他提供这次宝贵的机会。

一面

Retrofit的实现与原理

应用详细启动过程,设计的进程,fork新进程(Linux)

HashMap原理,Hash冲突,并发集合

Android两种虚拟机区别与联系

GC机制

Activity的onNewIntent

View的绘制原理

类的加载机制 requestLayout,invalidate,postInvalidate区别与联系

二面

项目架构

项目详细优化

项目难点与亮点

Glide缓存源码,加载原理

网络优化,服务端与客户端两方面

三面

ActivityThread工作原理

设计模式与实际应用

adb常用命令行

Android消息机制

多线程同步

GC机制

内存泄漏与分析

博客与GitHub

AndroidP新特性

四面

微信小程序实现原理

Java反射

Binder机制,共享内存实现原理

Android动画

混合开发

笔试(5道题,两小时)

五面

业务需求分析与建议

黑盒排序算法

天猫的面试从4月中旬一直到5月中旬,接近一个月的时间。形式包括电话面试,视频面试,远程笔试,在线编程。最终面试的结果是不匹配,给出的评价是缺少对业务的理解以及对Android原理的深入研究。知道结果的时候,心里难免有些失落,但我觉得更重要的是过程。我一直认为面试是一个交流学习的机会,能够有机会与这么多阿里一线技术专家沟通,对自己来说是一笔很宝贵的经验。结合这次面试,也认识到自己的不足。像项目的难点亮点,总结的不是很好,光顾着说一些UI效果而没有去往架构封装方面去谈;像Java反射,这种最基本最不该犯错的自己答得也不是很好;像微信小程序,自己只知道一个双线程模式而没有去深入了解它的实现运行原理,等等。

有了天猫这次失败的经验之后,我没有着急再去投简历面试。5月中旬到6月中旬,结合自己优缺点,更多的是准备与总结。6月底的时候,再次开始了自己的杭州面试之旅。

51信用卡

一面

项目介绍

Retrofit的实现与原理,封装

Java泛型

设计模式与实际应用

RecyclerView与ListView(缓存原理,区别联系,优缺点)

ButterKnife实现原理

EventBus实现原理

AOP与APT

RxJava

自定义LayoutManager

嵌套滑动实现原理

混合开发

微信小程序

二面

View的绘制原理

第三方框架选择标准

项目难点与亮点

插件化,热修复

项目优化

51信用卡的整体面试表现还可以,面试官和蔼可亲,技术氛围,规模发展也很不错,值得一去的公司。

美术宝

笔试

具体场景分析Activity的生命周期

Android消息机制

Bitmap内存计算,如何压缩

SurfaceView与View

Application生命周期

Http与Https

手写单例模式

手写算法代码

面试

EventBus实现原理

自定义View里,onDraw详细优化

SurfaceView替换方案

高清加载巨图且支持手势缩放的实现方案

算法题目其他思路

美术宝是一家专门做线上教育的平台,面试方向图片处理,自定义View多一些。差不多20多分钟做完的笔试,面试官看完后夸了下笔者基础不错便开始了接下来的面试,主要结合平时图片的处理方案以及自定义View心得交流了不少时间,整体表现还行。

贝贝

一面

项目介绍

架构的搭建与原理

MVC,MVP,MVVM模式理解与使用

微信小程序实现原理

ArrayList与LinkList区别与联系

HashMap源码,JDK1.8前后详细区别,负载因子,Fail-Fast机制

线程安全的集合及各自实现原理

Synchronized原理

Volatile实现原理

详细描述应用从点击桌面图标到首页Activity展示的流程(应用启动流程,Activity的Window创建过程)

Glide加载原理

组件化

二面

Fragment的懒加载实现,参数传递与保存

ViewPager的缓存实现

Android消息机制,post与postDelay

ActivityThread工作原理

子线程访问UI的验证与后果

主线程Looper.loop为什么不会造成死循环

Android里的多线程与实现原理

热修复实现方案

EventBus实现原理

Android内存优化与分析

类加载机制,加载过程

组件化实现方案,路由原理

单链表添加具体实现

三面

进程与线程

项目详细优化

设计模式与实际应用

ListView与RecyclerView的对比

自定义View的优化

具体场景分析高并发访问服务器的解决方案

贝贝的技术实力很强,每一轮面试针对你的回答,面试官总能深入拓展到另外一个层级,对你不了解的部分会给你详细分析解答。组件化这一块我之前接触的比较少,只知道实现原理而没有实际使用过。二面时和面试官在这一块讨论了不少时间,面试官针对我给出的一些方案进行评价优化,然后再给出自己的解决方案,非常棒的一次面试体验。技术上贝贝真的很强。

小影

一面

项目介绍,整体框架搭建

Glide加载原理,缓存方案,LRU算法

Glide加载长图,图片背景变色

ArrayList与LinkList区别与联系

RecyclerView缓存原理,局部刷新原理

Android事件分发机制

结合具体场景处理滑动冲突事件

Android消息机制

ActivityThread工作原理

二面

EventBus实现原理

View的绘制原理

热修复实现原理,解决方案

组件化具体实现

项目详细优化

Android权限管理

编码风格与规范

项目管理

小影主要做的是短视频编辑,在海外市场与国内市场积累了不少的用户,在音视频处理,直播方面做的真的很不错。

蘑菇街

蘑菇街的面试本来约在周一,因为当时自己正在参加面试无法赶到,面试官很友好的调到了周二。面试官表示之前有看过自己的博客,所以面试方向更多的是从项目角度切入。包括项目整体架构的搭建(MVP模式的优缺点),第三方框架选择的理由以及各自实现原理,RecyclerView的自定义LayoutManager,ItemTouchHelper的实现原理,自定义View的流程与注意事项,Android 65K问题,引入第三方包冲突解决方案等。 蘑菇街在微信小程序上拥有非常成熟的体系与产品,在另一个主管看到我有微信小程序开发的经验后,表示很感兴趣,我便给他们展示了自己3月份做的另外一个小程序--LACEUP履型。包括它的架构实现(小程序类似于Android里的DataBinding模式),组成结构,Flex布局实现,实现原理,亮点难点,多场景分享,Android项目与微信小程序的互相关联。期间两位主管也发表了一些他们的看法,包括微信小程序的扩展性,低端机型适配,分包处理等问题。非常愉悦的一次交流。

因为考虑上下班距离的原因推掉的面试有同花顺,个推。最后,在所有拿到offer的公司里面,我选择了蘑菇街,技术与平台是自己参考的两个标准,相信自己的选择。

分享一些自己的经验,希望能对你有所帮助:

关于简历

自己在离开北京之前,一直在面试别人,深知一份优秀的简历有多重要。尽量别用DOC格式,兼容性很差,优先考虑PDF格式;职业技能中,掌握的技术,使用的框架并且出现在简历上的,一定要充分把握,这是面试官会着重考察的部分;项目经验中突出亮点难点,这是吸引人的地方;千万别造假,实事求是,这是一个程序员应该具备的品质。

关于机会

拉勾+BOSS直聘+V2EX+内推

关于面试

对于自己掌握的技能,不仅要充分理解并且还要表达清楚,因为最终面试官是通过你的描述来了解你的技术深度。针对需要掌握的知识点,我会提前总结好一套自己的答案,比如像Android事件分发机制,我会从这些角度回答:事件分发的对象,事件分发的顺序,事件分发核心方法,事件分发的详细分析,滑动冲突的处理。这样条理清楚,回答起来也可以做到不慌不忙。 对于自己没有掌握的技能,这个在面试中经常遇到,很正常的事情,关键是如何应对。我一般会这样回答:“面试官虽然我不知道X的实现原理,但是在项目中遇到过Y(和X有一定联系)的相关问题,可以介绍一下Y的相关知识吗?”。相对于什么都不说,出现冷场尴尬的情况,这样肯定会好一点。

写在最后

以此来记录我这三个月的杭州面试之旅。长路漫漫,及时认知,调整,改正。

一起加油,共勉!

猜你喜欢

转载自juejin.im/post/5b4767b6e51d45190e34ee6e