背景
面试成功的面经大家都非常需要,近日,在逛脉脉的时候,看到一位985本科毕业3年的程序员,称自己40天拿下阿里p6口头offer。由于自我感觉没什么问题了,所以和广大网友分享一下自己的面经。
原贴如下:
不少网友表示羡慕的同时想让楼主内推。“好羡慕啊”、“老铁,熬过来了,厉害啊”
也有网友问面试时的详细情况:“第三轮技术是老大面吗?主要问些啥呢”、“请问下楼主的11天是hr面试完到谈薪资吗,还是谈薪资了之后的offer审批”、“可以咨询下hr视频面流程怎么样,问了什么嘛,目前也到这一步”
楼主也很热心的在评论区回复了。
在毕业生眼里,阿里是他们最想去的公司中之一,虽然每年投阿里的简历有十几万,但每年也就招一千来人。其竞争可想而知。
在阿里,P6对应的title叫做高级XX工程师,高级XX产品经理,或者高级XX运营专员。一般来说本科毕业3-5年,专科毕业5-8年能定级到阿里P6,如果是硕士,可能工作1-3年后就能拿到P6的职级。
阿里P6的税前月薪在20K-30K之间,按照阿里标准16薪计算,薪水区间在32万-48万之间(现金部分),中位数一般是40万左右,25k*16个月=39万。
个人情况
首先描述下背景,楼主是一个3年多经验的Android开发工程师,先后服务于3家互联网公司,均从事于Android开发的工作。离职前我在最后这家公司已经工作了将近2年的时间。
那为什么要离职呢?
其实这个问题一直都不是一个单一性的问题,它一定是一个多元化多维度的问题。对于我来说,主要体现在以下几个方面。
- 当前所使用的技术对自身成大不是很大了。
- 当前所负责的项目发展空间到了瓶颈。
- 认为自己的职场履历需要一段大厂经历。
- 这一点本来不太想说,但是确实也是自己比较在意的一点,那就是组织架构频繁变动,导致业务线频繁变更,这一点对业务很不利,需要一直磨合。
面试目标
其实当时的面试目标也不是单一的,比如我的面试目标按以下排序:
阿里巴巴 > 头条 > 美团 > 小米
阿里的面试经历
阿里一面
简历上写的项目问了一遍,然后开始问知识点。
- volley的源代码,在图片缓存部分讨论了挺长时间,http中缓存机制,Last-Modify的作用等;
- fragment的生命周期 ;
- service一些知识 ;
- 事件分发机制 ;
- Binder实现机制,Stub类中asInterface函数作用,BnBinder和BpBinder区别;
- gradle中buildToolsVersion和TargetSdkVersion的区别是什么;
- 手机适配一些方案 ;
- hashmap的实现原理 ;
- 静态方法是否能被重写;
这些大概聊了1个半小时,开始的时候还有些紧张,慢慢聊开了,就好多了,面试官的语速有点快,老是需要面试官重复一遍,我也不经意间语速也变快了,不过能看出来面试官还是很厉害的。
阿里二面
- 3次握手和4次挥手的原因,以及为什么需要这样做;
- 数据结构,搜索二叉树的一些特性,平衡二叉树;
- hashmap是如何解决hash冲突的;
- 进程与线程区别;
- 写了一个二分查找和单例模式;
- http中的同步和异步;
- 聊了一些项目上做的东西,问了问职业规划;
由于二面面试官不是做Android,本来面试我的人临时开会去了,所以这一轮面试没怎么问android相关知识,不过二面面试官一直是微笑,所以这一轮很轻松,更像是一起讨论问题。
面试完已经是下午4:30了,由于面试当天是星期五,而周五会议比较多,所以等了会,二面面试官说三面面试官在开会,面试另约时间,我还是说这次一次面试完吧,这一等就等了2个半小时,期间hr跟我说三面面试官是个大牛。
阿里三面
- 我认为Android做的优秀的几个地方,然后又根据我说的问了问比较深入问题;
- Android是如何进行资源管理的;
- java比较重要的几个特性;
- 网络五层结构,每一层协议,由于我网络不是很好,还问了一些其他的问题(例如MAC地址和ip地址的区别等);
- 为什么离开原来公司,以及职业规划,然后因为面试完大概就晚上8点了,就先让我回去,下周让hr跟我联系,我想这是应该通过面试了吧;
阿里HR面
企业智能事业部Leader面后又收到了HR面的面试通知,这一轮面试大致问了以下问题:
- 你为什么要离开现在的公司
- 你们公司的岗位等级是怎么评定的,你现在是什么岗位等级
- 谈谈你在公司的绩效情况
- 你觉得你做的最有成就感的一件事
- 你一般解决问题的方法有哪些
- 你是因为什么契机选择做前端
- 你有对你所在的公司做过什么流程或制度规范上的改进么
- 你最近在看什么书,和工作相关么,你为什么要看这些书
- 看到你之前还面试了其他两个部门都挂在了一面,你感觉是什么原因
- 你期望的薪资待遇是多少
小提示:这里HR会问的其实不止这些问题,例如你为什么喜欢Android开发这个岗位、你未来的职业规划、你觉得你的优点和缺点有哪些、为什么选择阿里巴巴、对之前几个面试官做下评价、你用过阿里的哪些产品顺便谈谈这些产品的优缺点、你对于互联网是怎么理解的...
面试感受:
阿里技术还是很厉害的,从面试官的水平就可以看出来,尤其是外卖核心部门,办公环境是不错,但是感觉就是有点乱,不知道是不是因为今天面试的人很多,基本上一直有很多人来回走动,有一些嘈杂。
分享一些面试思路
面试过程即是一个 自我考察 的过程,同是也是一个 非常讲究方式方法 的过程,接下来通过这两个方面来展开阐述。
- 自我考察
技术实力是面试的大前提,你需要非常清晰的了解自己,了解自己所要面试岗位,这是决定面试是否成功的先决条件。
比如我工作时间3年多,我要面试的岗位是高级Android工程师,那我这个自身素质是否能满足面试岗位所要求的条件?
其实这一点在我刚刚面试的时候也是拿不准的,因为在公司已经3年,这段时间对外界的发展其实是不了解的,所以我做了以下几件事。
-
把自己负责的项目业务进行整体总结。
-
把项目中用到的所有技术进行整体总结。
-
复习常用 框架/系统 源码,比如Glide,Okhttp,Reteofit,Activity启动流程,Hander,HashMap,锁等等常用的源码原理。
-
查看BOSS,拉勾对应岗位所要求的技能。
-
方式方法
面试环节中即便你技术很好,项目经验很丰富,你也不乏有知识盲区,也有未能顾及的技术点,当这些点集中出现的时候你面试的成功率也会大大降低。所以针对面试我总结了以下几个流程。
1.面试分为3个阶段(初期,中期,高offer期)。
初期 主要通过(BOSS,拉勾投递即可),初期主要投递小公司,这部分公司有两个目的。 第一是相互交流技术点,不断完善自己的技术覆盖度。 第二是了解当前市场的需求点。
中期 主要通过猎头去投递,这个阶段主要投递中场,这类公司要求技术深度会比初期公司要深一些,算法的考察会加重,同时面试官的技术水平也会偏高一些,甚至有的中场面试难度会达到大场的水平,这个中期尽可能的持续长一些,非常有利于后续的面试经验总结。
高offer期 这个阶段主要投递你的目标企业,切记面试优先级从最不意向的公司开始投递。投递的方式也是通过猎头,这样可以加快面试流程。以上的初中期更多的是完善你的技术覆盖度,以及你的面试感。为了是让你以最好的姿态去挑战你最想去的企业,这样一路走来你面试的成功率会大大提高。
- 沟通能力
面试除了考察你的技术实力以外,还有一点是比较重要的,那就是沟通能力,你面试的岗位越高,对你沟通能力的要求也就越高。
沟通是特别重要的一个点,这决定你是否能非常清晰的把你所知所想完整的阐述出来。
我们面试的过程就是自我营销的一个过程,所以当你觉得自己沟通能力不是很强的时候,那么你就需要定向的去总结几个点。
比如一个出色的自我介绍, 项目中遇到的最难解决的一个问题,如果让你设计一个架构你应该怎么设计,简单的介绍一下你负责的业务 等..
如何提升技能提高大厂通过率?
下面我提供一下我多年工作以来收集整理的学习路线,给大家做个参考:
学习一线大厂的各项技术:
大厂是我们的技术先驱,不仅仅是各种技术,还有很多令你大开眼界的使用方法,学习这些有利于自己竞争力的提高,深入理解后也可以提升你的学习效率。
现在竞争这么激烈,只有通过不断学习,提高自己,才能保持竞争力。
1.2020大厂面试高频知识点
- 图片
- 网络和安全机制
- 数据库
- 插件化、模块化、组件化、热修复、增量更新、Gradle
- 架构设计和设计模式
- 性能优化
- Android Framework
- Android优秀三方库源码
2.Jetpack架构组件从入门到精通
- Android Jetpack - Navigation
- Android Jetpack - Data Binding
- Android Jetpack - ViewModel & LiveData
- Android Jetpack - Room
- Android Jetpack - Paging
- Android Jetpack - WorkManger
- Android Jetpack架构组件之Lifecycle
- Android Jetpack Compose 最全上手指南
3.Framework精编内核解析
主要内容包含:
- 深入解析Binder
- 深入解析Handler
- Dalvik VM 进程系统
- 深入解析 WMS
- PackagerManagerService
4.Kotlin强化实战(附Demo)
- 第一章 Kotlin入门教程
- 第二章 Kotlin 实战避坑指南
- 第三章 项目实战《Kotlin Jetpack 实战》
- 从一个膜拜大神的 Demo 开始
- Kotlin 写 Gradle 脚本是一种什么体验?
- Kotlin 编程的三重境界
- Kotlin 高阶函数
- Kotlin 泛型
- Kotlin 扩展
- Kotlin 委托
- 协程“不为人知”的调试技巧
- 图解协程:suspend
5.Android设计思想解读开源框架
- 热修复
- 插件化
- 组件化框架设计
- 图片加载框架
- 网络请求框架
- RXJava 响应式编程框架设计
- IOC 架构设计
- Android架构组件Jetpack
6.NDK模块开发
- NDK 模块开发
- JNI 模块
- Native 开发工具
- Linux 编程
- 底层图片处理
- 音视频开发
- 机器学习
定期面试:
光学习了大厂的技术还不够,如何了解当下Android市场需要哪些技术呢?
定期的面试足以让你了解当下市场需要哪些技术,也更加容易确定自身的短板在哪,同时,也可以督促自己学习提升(小伙子,你了解的技术有点落伍了呀…)
万一拿到了高薪Offer,岂不是更赚?
《379页Android开发面试宝典》
多看大佬的学习笔记,学习大佬的设计思想:
只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。
真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。
《486页超全面Android开发相关源码精编解析》