Android-6年开发面经,历时两个月斩获BAT+头条四个公司-Offer(1)

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注Android)
img

正文

关于如何复习项目,从面试情况看,可以从总体架构、项目细节、项目亮点、碰到的问题以及场景复述等方面入手。

总体架构和项目细节不用过多解释,前者是从宏观角度向对方介绍你的项目的架构,用最短的时间让对方理解项目通过哪些模块或组件间的协作去实现功能的;后者是对方可能会提出一些感兴趣的点询问你项目细节 —— 所以千万记得认真掌握项目关键细节,否则答不出来会很尴尬。

项目亮点和难题则是面试必备,基本大部分面试都会问到这块,无他,对方不了解你的项目的情况下肯定希望你能展示出可以为自己加分的点。

1.4 简历投递

准备得差不多后就可以开始进入简历投递环节了,我觉得简历投递的途径的优先级是这样的:熟人内推 > 优秀猎头推荐 > 普通网友内推 > 普通猎头推荐 > 官网投递

假如你的简历光芒闪闪,阿里星那种级别,那随便投递都可以很快有响应,否则投递的途径还是很重要的。

熟人内推当然是第一选择,通过熟人你不止可以知道部门内部的业务发展、晋升、加班等情况,在走流程时也可以通过他直接接触到你的未来 leader。而为什么优秀猎头的内推会比普通网友内推要好呢?我个人的感受是优秀猎头会比普通网友更了解招聘情况且能更积极得帮你催流程,而真正优秀的猎头,在对公司整体信息的掌握上是高于普通员工的。

二、面试中常见的考察方向

面试中要沉着冷静、面试前要确认面试时间并提前到……这些啰嗦的小 Tip 我就不说了,聪明的你一定能注意。这里我尝试总结一下碰到过的常见的考察方向(或者说“题型”)。

2.1 算法

对于算法的考察,从个人有限的经验上看,貌似难度都是适中的。特别是对于我们客户端开发而言,考察的算法都比较常规。(呃,某些很注重这块的公司除外 —— 当然注重这块也是好事,我们只能去适应公司的风格而不能要求公司适应我们)

算法这块我也是“低手”(这块强的同学可以留言教授一下比较好的学习方案),多学习多练习吧。

这次求职中,比较高频的题目是"第 TopK 大的数"(快排思想、能提到线性查找算法 BFPAT 更佳) 和 “前 TopN 个数” (堆排序、先分治再堆排序)。

2.2 技术基础

就像面试前我们准备的,基础题基本是必问的,就算不深究 Android 的基础,问你一些计算机网络的东西不为过吧。这块我们必须拿出校招时的劲头来,老老实实复习。至于具体的题目什么的我就不罗列了,网上有一堆面经,github 上也有很多整理好的题库。

对 Android 开发来说,可以分成两块,第一块是 Android 相关基础。**跟初级开发的面试不同的是,这里的基础不会是简单的“四大组件是哪些”,而是会问你具体的使用和碰到的问题。**比如四大组件的考察会结合 ANR(四大组件是否都会产生 ANR、时间是多少等)、进程优先级、启动模式 等等一起问。网上的面经和题库命中概率还是蛮高的,大部分题目都似曾相识,毕竟 Android 常用知识点也就这些。当然不要因此掉以轻心,优秀的面试官是会针对细节深入挖掘的,所以不止要“知道”,还要“理解和掌握”

另一块是计算机网络、计算机原理等。对客户端开发来说,计算机网络的考察会比较多,TCP 和 UDP 的区别、TCP 的拥塞控制、TCP 的握手与挥手流程、HTTP 与 HTTPS 的差别等等。基本面的所有公司都问到这块了

**这块需要特别注意的点就是你的覆盖面是否足够,因为不同公司的不同部门的不同面试官都可能会有不同的提问姿势。**你不完整系统得把基础过一遍,真不能保证你能信心十足(一两个问题被问倒其实没什么,但能不被问倒更好不是)。

我可以举几个例子,比如在问大图加载时顺口问一下“同一个文件,放到 drawable 目录下和放到 SD 卡中,加载到内存时内存占用一样么” (这里涉及到了 Bitmap decode 时的过程以及 Bitmap 内存占用的计算),比如 HashMap put 方法调用时内部的流程是怎样(方法内部的流程、HashMap 的扩容等),比如 Http 1.1 和 2.0 的特点和区别 —— 这些例子都是我或者我朋友真实碰到的面试题,在没经过充分的面试准备之前,你能答出多少呢?

2.3 技术原理

一般这类问题是在问基础题时顺势往底层问,或者是你自己在回答时顺便带出来,比如屏幕绘制原理、几种动画的原理、布局加载原理等等,是体现个人的技术深度的。

我觉得这类题目不是死记硬背可以解决的,作为面试官,自然有办法考察出你是“了解”还是“理解”。

其实系统地复习这些内容本身也是挺有趣的,你会很容易发现技术背后的实现存在深层的联系。所以这块不只是面试题那么简单,它也是我们以后往“资深开发者”走的一个方向。

**回答这类问题,主动比被动更好。**一般面试官问你很基础的问题时,你当然可以惜字如金只回答对应的答案,但假如你能主动扩展到原理层面、甚至隐晦地表示你看过源码,要我是面试官也会喜欢你(斜眼笑)。

2.4 项目架构和模块设计

我一开始也没有经验,面爱奇艺时让我介绍项目我就简单介绍了下项目需求是怎样,可以看出面试官并不满意。后面专门向一个牛逼的前同事请教了这个,他的建议是注意介绍项目架构,后面面其他家时,果然感觉轻松了一些。

不管是做业务开发还是做基础技术开发,对于整个项目的架构一定要了解。比较常见的情况是面试官会让你画出架构图。当然,就算面试官只是让你介绍项目,你也可以主动介绍项目的架构 —— 这可以体现出你对架构设计的关注

我个人因为经历独特,所以有机会在公司接触几个项目的架构,同时能在从零到一的新项目中尝试自己设计架构并作出各种调整和优化。但没有这方面经历的同学也没伤心,就算是只做很小的业务,你也可以主动去了解整个项目的架构,思考优缺点并考虑改进。我的理解是,对架构有思考的同学比单纯做业务熟练工会更受欢迎。

另一块是模块设计能力。我记得在面百度时有个面试官是为架构组招人,当场让设计一个线程安全的高效的数据处理模块(当时没答好,惭愧);后面在面蚂蚁时也有让设计一些模块。这块我觉得就是多积累,多看开源项目。目前我也没做得很好,后面会花精力去专门研究。

2.5 项目优化

我上一次正儿八经面试还是找实习时,所以刚开始我对面试的理解还是停留在展现自己“能做事、能力强”,而这次求职给我的收获是,基本所有公司都会考察项目优化能力以区分普通开发和注重项目质量的开发

项目优化可以是架构重构,也可以是内存、卡顿优化、电量优化等细节优化,还可以是开发效率的优化等等。

这块的博客很多,比如胡凯大神的《Android性能优化典范》等,光了解不够,要实操,要有具体的场景和优化后的结果。

三、各大公司的面试

我有一个习惯是,每面完一家公司后都会把具体的问题记录下来,把不会的题目当天解决 —— 你还别说,后续的面试还真让我碰上了之前的题目。当然我不会事无巨细,主要是记录自己不大肯定或不会的问题。

下面我简单介绍一下经历过的几大公司的面试过程。

3.1 爱奇艺

爱奇艺是现场面的,效率很高,当天面完所有流程。算了下大概有四面技术面 + 一面 HR 面。

一面是 Java 和 Android 基础,面试官可能是 Java 开发出身,对 Java 方面的东西问得很细,比如堆和栈的区别、栈帧里记录了哪些信息等等。Android 方面的问题比较常规。

后面几面比较注重项目,大概流程是先问了很多项目细节,中途穿插了一些算法、计算机网络的题目。

3.2 滴滴

滴滴一面主要是技术基础,问得非常细。比如会问到 git cherry-pickgit hook,还问到 inSampleSize 为什么是 2 的幂等等。

二面和三面是去的现场面,主要是项目相关,以及一些视频相关的优化。

3.3 百度

百度整体求职体验很好,面试官的问题以及沟通都很 nice,就是从住处去张江面试实在太远了。。。

一面是 Android 基础,二面会比较注重项目优化,三面是问了项目的架构设计并当场给了一道模块设计题目,四面主要是项目相关。

我在上文的反思中有很多都是来自在百度这里踩的坑,面试官会比较注重项目优化、注重架构和模块设计能力,发现了我的知识体系上不少漏洞,非常感谢那几个面试官。

3.4 蚂蚁

蚂蚁整体流程是一周一面的节奏,会有三到四面技术面 + 一面 HR 面。

蚂蚁面试的特点是会偏业务一点,但接触过的几个面试官中你能感受到对方思维敏捷、很聪明。比如在让你介绍项目时,会在询问细节的同时突然给你一个相关的场景让你做一个模块设计。比如在你絮絮叨叨说一堆时能及时发现你的回答不准确。

而 HR 面的过程比较专业,除了一些常规的问题外还会问你之前工作的一些细节等。

考察的内容主要是项目、基础,有些面试官会问计算机网络的问题,或者一些常规算法题。

3.5 腾讯

腾讯的面试过程是很舒心,也是一周一面,但全程会有 HR 短信通知,整体很人性化

大概是三面技术面和一面 HR 面。一面和二面都是技术基础,有不少计算机网络和算法题(当然也是比较常规的算法题),后面的 GM 面试则是不拘泥于 Android 范畴,会问“你的优势是什么”,“对来深圳工作有什么难处”等等。

3.6 字节跳动

字节跳动是三面技术面 + 一面 HR 面,有趣的是三面都是视频面试,虽然应聘的部门就在上海,但不需要赶过去现场面。

而且整体流程非常专业:面试前会有专人打电话约时间、面试后会及时通知你面试结果并约下一面的时间、面试中是在牛客网上视频面试(网站上配置有白板可以写代码)。

再说面试内容,字节跳动或者说我们熟悉的“头条”的特点的确是面试过程中算法比重很高,但面试官绝不是无脑问算法题。比如一面问的算法题是线段树 —— 这个数据结构我的确不熟悉,但面试官在提问过程中不断引导和考察其他方面的东西,我能比较好得回答出来,最后虽然没有命中最优解“线段树”,但还是让我过了。

最后再强调一下,我没有把所有面试题全部罗列出来是因为这几个公司的面试题都算比较常规,只要你按照我上问说的那些踏踏实实去准备了,基本绝大多数都可以命中。

最后,面试前该准备哪些资源复习?

其实客户端开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

这里再分享一下我面试期间的复习路线:(以下体系的复习资料是我从各路大佬收集整理好的)

《Android开发七大模块核心知识笔记》

面试字节两轮后被完虐,字节面试官给你的技术面试指南,请查收

面试字节两轮后被完虐,字节面试官给你的技术面试指南,请查收

《960全网最全Android开发笔记》

面试字节两轮后被完虐,字节面试官给你的技术面试指南,请查收

《379页Android开发面试宝典》

历时半年,我们整理了这份市面上最全面的安卓面试题解析大全
包含了腾讯、百度、小米、阿里、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。熟悉本文中列出的知识点会大大增加通过前两轮技术面试的几率。

《507页Android开发相关源码解析》

只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。

真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注Android)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

友,可以添加V获取:vip204888 (备注Android)**
[外链图片转存中…(img-gZ1qYE41-1713692949923)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 22
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值