两年Android面试大厂上岸经

216 阅读6分钟
  • Binder 原理流程介绍一下

  • window, view, activity 关系

  • 软硬件绘制区别,性能比较,具体绘制任务(如复杂动画)怎么选择?

  • 性能优化方式讲一讲

  • 查找算法有哪些?手写二分查找

  • 了解哪些跨平台方案?

A公司二面(1h)

=========

  • 自我介绍

  • 主要是抠实际项目,然后从中引出一些问题

B公司一面(1h)

=========

  • 自我介绍

  • 问项目的一些细节,优化方案等

  • SurfaceView, TextureView及View的区别。SurfaceView怎么控制它处于的层级

  • Binder工作流程

  • 介绍一下MVC,MVP,MVVM,你们项目用的是哪个?

  • 对组件化的理解,你们是怎么实现组件化的?功能模块之间互相引用会有什么问题?

  • 内存优化工具,LeakCanary和MAT的原理

  • JVM内存模型

  • Java同步机制有哪些,volatile和syncronized区别

  • HashMap和HashTable区别,ConcurrentHashMap分段加锁的原理

  • 二叉树的前中后遍历

  • 算法:判断一棵树是否是平衡二叉树

  • 算法题:给定一个链表L1、L2,每个元素是为10以内的正整数,链表表示一个数字,表头为高位。 求两个链表之差,以链表形式返回

  • Java和Kotlin的一些区别,Kotlin的缺点?

  • SurfaceView和TextureView的区别?

  • 了解过哪些插件化的实现?

  • 说说ARouter的原理

  • 两个业务组件模块之间,怎么实现相互调用接口?

  • 让你设计一个下载功能,实现多个大文件同时下载,考虑哪些(断点续传)?

  • 有没有音视频开发经验?

  • 怎么处理内存泄漏?强引用弱引用?LeakCanary原理说一下。

B公司二面(1h)

=========

  • 问更熟悉Java还是Kotlin,答Java,所以问的都是Java相关的一些题

  • HashMap扩容机制

  • Java volatile原理和作用

  • 乐观锁,悲观锁区别

  • 线程池工作原理,各个参数的作用

  • Android 三缓存是什么?为什么需要它

  • 讲讲做的业务开发中比较有挑战的项目

  • 还有一些比较常规的Android方面的问题,具体想不起来了

  • 算法题:查找单链表中倒数第k个节点。做完后面试官问是不是刷过这道题,那我再出一道吧...

  • 题:给定一台8核的手机,设计一个快速检索出sdcard下所有文件名为a的程序,返回一个列表

B公司三面(1.5h)

===========

  • 主要深挖项目细节,有些不太清楚的最好别提,不然被挖到了很尴尬

  • 平时怎么学习技术

  • 在之前的公司,你对自己的成长满意吗

  • 在面哪些公司,情况怎么样

C公司一面(1.5h)

===========

  • 不记得了。。

  • 算法题:给定一个排好序的数组,找出最左边的某个指定数字的下标。

C公司二面(40min)

============

  • 介绍项目,问一些细节。

  • 你认为Java和Kotlin的不同点,在编程范式角度再介绍一下区别?Java的lamda和Kotlin函数对象区别?

  • Kotlin协程为什么能以同步代码写出异步逻辑?

  • 在协程上定义了一个局部变量,为什么在其中的其他线程里的协程也能访问到?

  • JetPack Compose有了解过没?

  • 性能优化;ConstraintLayout为什么效果好?为什么多了层级,性能可能会差很多?

C公司三面(1h)

=========

  • 依旧是项目细节,三面比较长的时间都是项目

  • 为什么要离职,家是哪里的之类的问题

D公司一面(45min)

============

  • 主要聊项目细节

  • 线程池运行流程,你们平时怎么使用线程池?一个线程池够吗?

  • 觉得工作经验不长,说当应届生面的,要求低。。。

D公司二面(1h)

=========

  • 自我介绍

  • 不知道为啥,跳过了第二轮技术面,直接来了 leader 面。聊人生,聊性格,聊成才和氛围比薪资重要等等

  • 没有技术问题

一些总结

====

毕业时选择的是一家非一线大厂的公司,在这边工作的近两年时间里,业余学习了许多 Android 相关的专业知识(因为不忙),但是由于业务原因,且公司发展一直在走下坡路,我在项目上的经验比较欠缺,因此考虑进一家大厂继续磨练磨练自己。

这次面试也暴露出了我的一些问题,最主要的话还是业务项目经验上不太足,所幸面试到的公司基本上都通过了,可能是因为我在 Android 基础上还可以吧。面试也是一种能够快速地发现自己缺点与不足的方法,可以更好地提高自己。

关于算法题:个人感觉有些八股了,也比较讨厌刷题,只写了剑指offer和leetcode上hot前百中所有easy难度的题,以及几道中等题,总共估计不超过100道吧。。。面试的时候感觉算法题这块都不是很难,大概也许可能是运气好呗。

学习分享

在当下这个信息共享的时代,很多资源都可以在网络上找到,只取决于你愿不愿意找或是找的方法对不对了

很多朋友不是没有资料,大多都是有几十上百个G,但是杂乱无章,不知道怎么看从哪看起,甚至是看后就忘

如果大家觉得自己在网上找的资料非常杂乱、不成体系的话,我也分享一套给大家,比较系统,我平常自己也会经常研读。

2020最新上万页的大厂面试真题

七大模块学习资料:如NDK模块开发、Android框架体系架构...

只有系统,有方向的学习,才能在段时间内迅速提高自己的技术。

这份体系学习笔记,适应人群: 第一,学习知识比较碎片化,没有合理的学习路线与进阶方向。 第二,开发几年,不知道如何进阶更进一步,比较迷茫。 第三,到了合适的年纪,后续不知道该如何发展,转型管理,还是加强技术研究。如果你有需要,我这里恰好有为什么,不来领取!说不定能改变你现在的状态呢! 由于文章内容比较多,篇幅不允许,部分未展示内容以截图方式展示 。如有需要获取完整的资料文档的朋友点击我的GitHub免费获取。