两年Android研发,大厂面试问什么?
本文作者
作者:苍耳叔叔
链接:
https://juejin.cn/post/6956046472462729229
本文由作者授权发布。
概述
感觉毕业后时间过得真快啊,从 19 年 7 月本科毕业入职后,到现在快两年了,最近金三银四期间想着找一个新的工作,前前后后花了一个多月的时间复习以及面试,最近基本上差不多了,把部分大厂的面试经验分享给大家,祝想找工作的同学都能去自己心仪的公司!
A公司一面(1.5h)
自我介绍
Android 生命周期中 onStart 里面干了啥?
介绍一下 Activity 的四种启动模式。
android:style 和 android:theme 的区别。
http 和 https 的区别,http 组成,http 请求的整个过程。
动画种类及其工作原理。
线程启动方式,线程池原理清楚不?
讲讲 IntentService。
知道哪些 Jetpack 组件?挑一两个讲讲原理。
有哪些 ipc 方式。
Sp 怎么支持跨进程?
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道吧。。。面试的时候感觉算法题这块都不是很难,大概也许可能是运气好呗。
另外就是可以自己搞一些比较有亮点的地方,我的话是对 Android 图形系统这块比较熟悉,所以上面面试中有一些都涉及到了这个,像Surface这些,如果面试官也比较懂这块知识的话,可以聊的很开心。关于 Android 图形系统相关的解读,有兴趣的可以看看我之前的文章 Android图形系统综述(干货篇) 系列哈,另外关于 Kotlin 协程原理的话可以参考参考 Kotlin协程之深入理解协程工作原理 系列, 觉得不错的点点赞昂。
https://juejin.cn/post/6898525503960186887
https://juejin.cn/post/6890348438873964551
最后的话就是 Android, Java, Kotlin 中一些常问的知识点了,这种就跟考试一样,有些东西可能有些八股味儿,不过还是得准备准备,其实也不用花太多时间,最主要的积累过程,都在于日常的工作和学习中。
好了,暂时只能想到这些,后面如有想到其它东西再补充哈,祝想找工作的同学都能去自己心仪的公司,前程似锦!
最后推荐一下我做的网站,玩Android: wanandroid.com ,包含详尽的知识体系、好用的工具,还有本公众号文章合集,欢迎体验和收藏!
推荐阅读:
点击 关注我的公众号
如果你想要跟大家分享你的文章,欢迎投稿~
┏(^0^)┛明天见!