大厂模拟面试--毕业一年入职百度的优秀小伙

作者: android00 发布时间: 2021-01-07 浏览: 1844 次 编辑

这篇文章来源于去年和一位读者朋友(下文以小欧代称)的模拟面试,把面试问题记录一下,看看是否能给大家带来一些启发

读者介绍

涉及到个人隐私,这里不把简历放出来,对小欧做一些大致介绍

工作情况

小欧 19 年本科毕业,目前已入职百度

专业技能

小欧简历里写的专业技能比较全面,包括这些:

Java 的知识(反射、泛型、注解、List 等集合源码、并发、JVM 相关)

Android 知识(四大组件、View、Binder、Handler、SP、Activity 启动、插件化等)

性能优化(包体积、布局、内存优化)

Gradle(Task、打包流程、自定义 Plugin、编译优化等)

计算机基础知识(计算机网络、设计模式等等)

项目经验

小欧在上家公司做过组件化和 MVP,写过 Gradle Plugin,做过 Gradle 编译优化,做过包体积优化

简历评价 & 问题导向

从专业技能来看,对于毕业一年的 Android 开发者来说,Java、Android、计算机基础知识是必备技能,性能优化、Gradle 算加分项了

从项目经验来看,小欧毕业一年做了不少事情,算是比较难得了,其中的 Gradle 编译优化、包体积优化就是亮点了

所以总体上来看,这份简历可以体现出小欧比较出色的能力(学习能力和做事能力),所以面试问题路线大概是两点:

  1. 先确认项目是否真实做过,做的多深,对项目中用到的知识、工具掌握有多深
  2. 考察专业技能的深度和广度

面试题目及考察点

下面是面试的题目和考察点,对于一些比较敏感的问题,没有展示出来(以下观点仅代表个人,不代表任何组织和公司)

1. 组件化如何实现?和 Arouter 的区别?优势?(考察项目中对组件化的参与程度,以及对组件化的一些思考)

此类问题其实和项目关联度很大,需要对所做的项目有详细的了解,同时也需要对已有方案的了解

2. 组件间如何通信?(考察对组件化的了解程度)

3. MVC、MVP、MVVM 区别?MVP 的缺点?(考察对 MVP 以及相近的架构的理解)

对于 MVC、MVP、MVVM 的分析其实有很多文章,如果在回答的时候有一些自己不一样的思考就更好了

4. 包体积如何优化?(考察项目具体的实现)

关于包体积优化,网上其实有很多通用方案,如果自己真的做过,有一些自己不一样的思考就更好了

5. png 和 webp 的区别?(考察细节点)

知识类问题,知道即可

6. arsc 是怎么用的?(考察细节点)

知识类问题,知道即可

7. Gradle 构建优化做了什么事情?(考察 Gradle 构建优化做的事情)

网上有关的文章其实也很多,如果能答上来,会往更深层次问下去,需要有一些准备

8. Gradle 6.5.1 相比 4.4.1 的变化?(考察细节)

9. Gradle 的生命周期?分为哪些阶段?(考察对 Gradle 的掌握程度)

网上有关的文章其实也很多,如果能答上来,会往更深层次问下去,需要有一些准备

10. Android 打包流程?(考察基础知识)

网上有关的文章其实也很多,如果能答上来,会往更深层次问下去,需要有一些准备,下面的几个问题都属于打包流程引申出来的深入问题了

11. AAPT2 和 AAPT 和 有什么区别 (考察细节点)

12. Class 和 Dex 文件的区别?(考察细节点)

13. V1 V2签名?(考察细节点)

14. 为什么要分 Dex?(考察细节点)

15. 多 dex 怎么加载?(考察细节点)

16. View 的绘制流程?(基础知识考察)

关于 View 的绘制流程,网上讲解的文章也比较多,如何区分是看文章还是看源码了解的知识呢?本质上还是根据对细节的了解程度来区分的

17. 如何重绘?requestLayout 和 invalidate 的区别?(基础知识考察)

18. View 事件分发 cancel 事件什么时候触发?(基础知识考察)

19. 事件如何从点击屏幕传递到 View 的?(基础知识考察)

20. Java 内部类如何访问外部类方法?(基础知识考察)

21. 如何访问 private 方法(基础知识考察)

22. 如何检测线上 ANR?(知识广度考察)

23. 如何检测 crash?(知识广度考察)

总结

但是整体问下来,可以看出来小欧的知识还是比较扎实的,深度和广度都有的,项目中的内容了解也比较好,作为刚毕业一年的同学来说还是很优秀的

上面的问题其实更多的局限在知识掌握的层面,对工作经验更多的面试者来说,考察点可能又会不一样了,可能重点就在项目和对项目的思考上了

因为时间关系,还有很多问题其实是没有考察的,比如 Java 集合、多线程、四大组件等等

面试的过程其实就是抽样检测,各个公司、面试官考察的重点也不一样,但不变的目标都是考察面试者的工作、学习能力,挖掘潜力,以及和岗位的匹配程度

另外对于一些基础知识,面试之前还是要复习一下的,不然可能出现的情况是知识点就在口中,但是说不出来

最后,一个小目标

自从在网上更新一些安卓知识文章以后,收到了很多读者朋友们不错的反馈,我也很高兴能给大家带来帮助和启发,至少说明这些文章还是有一些价值的

在新的一年里,我想给大家提供一些更实质的帮助,希望能 2021 年能 【帮助 100 位安卓开发者入职大厂】

我觉得这件事,在一定程度上是有意义的

可能对于一些大佬来说,在大厂之间游走是很随意的事情,但是还有更多的是希望能进入大厂的开发者,他们可能缺少一些机会,可能缺少一些方法,可能缺少一些指导,而且进入大厂这件事可能会给后面的人生带来不一样的可能性

而且这件事其实是互利互惠的,对开发者来说,获得进入大厂的机会,对公司来说,也有更多的选择范围,对我来说当然是有发文的话题了,另外也是一个提升的机会,对其他读者来说,从面试题目中应该也能得到一些启发

所以我想来尝试做这件事

具体怎么做呢?

  1. 尽可能提供大厂内推的机会(当然目前内推可能比较少,不过我相信后面会多起来的)
  2. 提供简历修改建议
  3. 提供模拟面试以及面试建议
  4. 大厂面试过程中遇到的问题讨论

后面应该还会有更多的想法

为什么是 100 位呢?
先定一个小目标吧