最后
由于题目很多整理答案的工作量太大,所以仅限于提供知识点,详细的很多问题和参考答案我都整理成了 PDF文件
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
- 类加载机制?双亲委托模型?
其它
- 用过哪些设计模式?DCL单例模式为什么要两次判空?Android里源码或者你用过的开源库都用到了什么设计模式?
— final关键字的作用?
-
静态内部类和内部类的区别?
-
值传递类问题
-
Kotlin为什么能和Java混编
-
你有什么亮点?项目中遇到过什么难题或者坑,怎么解决的?
-
做过哪些性能优化?是怎么评测和具体优化的?
-
Activity的冷启动流程?AMS的作用?
-
怎么分析内存泄漏?
-
View的事件分发机制?滑动冲突怎么解决?
-
自定义View的原理和流程?
-
Handler原理?(一般会花式扩展)
-
有哪些多进程通信方式?Binder机制?
-
Android的生命周期和启动模式相关?
-
你项目中用到哪些开源库?说说其实现原理?(OKhttp、RxJava、Retroit重点,如果有用到的话)
-
Android的打包流程?apk里有哪些东西?签名算法的原理?
-
了解哪些插件化技术?
-
LinearLayout的布局流程?
-
对Mvp的理解?
-
Android怎么做保活?
算法
-
排序相关的(快排,分析不同排序区别,时间复杂度等)
-
字符串、数组相关的(滑动窗口、双指针)
-
链表(反转链表)
-
递归、斐波那契数列(爬楼梯)
-
动态规划
分析考点
技术面是一场技术面试官对候选人的综合评估
先从面试官角度来分析,在面试过程中的对候选人一些考查点吧。知己知彼百战不殆,面试过程中逆向思考一波,有助于我们怎么应对技术面。
- 候选人人设是否跟简历一致
主要看候选人是否坦诚真实,这个会直接影响能不能通过。候选人上的项目经验和技能点应该尽可能与候选人匹配,比如说,候选人说做了XX项目,但是问起是怎么实现的,却答不上来,或者说熟悉xx技能点,却只会调用常用的api,对其源码细节一点都不熟悉,那多半是不给过的。如果候选人要吹牛B,能拿出能圆上吹牛B的实力,也是可行的。比如说某某模块其实是你同事做的,但是你也完全理解了,可以应答如流,面试官是不会计较的。
- 技术的扎实程度和项目经验匹配程度
考查包括对技术的理解和解决问题的能力,包含一些细节,运用的场景,实现的原理等等,目的是为了测试候选人技术水平上限。答得越清晰,越深入,对细节掌握越牢靠越好,不一定需要全部答出答完美才能拿到offer,但这些题回答的效果最能影响到offer能谈多少钱。小厂偏重于技能、项目经验匹配度,大厂偏重于基础、原理。小公司,面试官通常希望候选人尽快上手,就希望候选人有类似竞品或者功能开发经验的候选人,所以也可以从这些方面做准备。大公司呢,可能会提出一些场景来考查候选人怎么设计,这就要求候选人功底深厚,逻辑严谨了。上面的题集我没写答案,因为我觉得很多题本就没有标准答案,也没有必要背题的“标准答案”,优秀的回答,应该是形成自己的理解输出的,说的有理有据就行。
- 候选人亮点、优势
一般是作为候选人的加分项,或者是面试官为了更快的打开话题,了解候选人的优势,并测测候选人的优势到底屌到什么程度。这个问题回答好了,候选人甚至能翻盘。
- 沟通能力
在一线搬砖过的应该都懂,每天正正经经写代码的时间通常不到一半,还得花不少时间跟产品撕,跟后台撕,跟UI撕等等。所以沟通协调能力也是很重要的,候选人需要理解面试官出题意图,表达要逻辑清晰。最好是候选人能跟面试官建立起讨论技术的氛围。这方面很容易被多数候选人忽略,但其实挺重要的,面试官也许不能直接决定要你,但是一般可以直接决定淘汰你,候选人要不卑不亢,保持谦逊。候选人技术再屌,态度傲慢的话,也是很容易翻车的,但也不能太怂,显得没有技术底气,所以最好是和谐的讨论氛围。
- 学习能力,自驱性
一般总监或负责人会比较关注这个。
答会的问题
-
要听明白面试官的出题意图,也就是注意审题,不要答非所问,如果对面试官提出的问题不是很理解,及时进一步沟通,把问题问清楚,这也体现了沟通能力,毕竟平时工作时,也会接到一些不是很清晰的需求,自己主动获取更清晰的需求也是程序员的优秀素质。
-
回答要尽量清晰准确,最好能答到问题的本质,展示出你对技术的更深层次的探索和挖掘。同时要注意面试官的反馈,这时候就要察言观色了。
-
如果面试官听的津津有味,并不断追问加大问题难度,那么恭喜你,你回答的很好!
-
如果面试官表现得有点不耐烦,那就精简下回答,毕竟面试时间有限,去掉那些啰嗦的话和题目关联不大的东西。
-
如果发现面试官问的题越来越简单,越来越常规表面,那么就得警惕下了,可能是你之前的回答太一般,让面试官觉得你比较菜,所以就不给你出难题了,这种情况就算最后给到offer,多半价格也谈上不去了,甚至还可能是为了给你个台阶下,然后让你回家等遥遥无期的通知了,这种情况下就得把问题回答得更深入一些了,知道多少答多少,尽可能主动展现出自己的水平来。
答不会(不确信)的问题
-
首先要对这个问题有一定的思考分析,不要轻易的说不会,但也不能完全不会还瞎答,完全不会的还是要敢于说不会,坦诚也是必要的素质。
-
如何思考分析呢?以我的经验来看,主要是从问题的关联知识或者可替代方案的角度来思考。对问题不是很清楚了解的时候,尝试从已知的相关联的知识点来做出合理推测,比如从一些开源库里面借鉴思路,或者从Android源码里面借鉴思路,但是这种情况就得跟面试官说清楚,你是推测的,还要说下为什么要这么推测,避免面试官误以为你不懂装懂。还有一种方式,就是你也提出一个可替代的能解决问题的方案。
上面的题集有些问题看起来比较简略,我这边举几个典型例子做拓展,其它题目类似。
做过哪些性能优化?是怎么评测和具体优化的?(具体问法可能有很多种,注意识别考点)
性能优化通常会设计到流畅度优化、启动优化、apk瘦身优化、网络优化、耗电量优化,先给面试官抛出几个大的方向,一边回答一边观察面试官反馈,通常面试官会从这几个方面挑拣一两个感兴趣的让你更进一步的讲解,如果没有,那你就对每个方面抓住最核心关键的部分简要回答就行了。举个让你继续谈流畅度优化的问题,那你就得考虑到,怎么评测出是否流畅的?用了什么工具或者技巧?比如说用了GPU程序模式分析,用了腾讯GT插件的SM指标,用了TraceView、Systrace、Hierarchy Viewer等等,很可能面试官还会问,卡顿的原理是什么?哪些情况会导致卡顿?这时候你就得回答出FPS、垂直同步的原理了。接着你得说出你用了哪些技巧优化的,优化的成果怎么样?那数字肯定是最有说服力的,所以大家平时在优化前和优化后都得做好记录。你回答优化技巧后,比如减少过度绘制啊、布局优化啊,还有可能会追着问view的gone和ViewStub的区别,以及分别用在了什么场景?原理是什么?为什么就能优化了?
- 反思点:
平时工作时,对技术细节、原理需要多关注,不光要知道怎么用,还要知道背后的机制。
你项目中用到哪些开源库?说说其实现原理?
回答开源库相关的问题,要想回答的好,就得自己想清楚几个问题,这几个问题想清楚了,就可以随便回答了。
-
这个库是做什么用的?
-
为什么要在项目中使用这个库?
-
这个库都有哪些用法?对应什么样的使用场景?
-
这个库的优缺点是什么,跟同类型库的比较?
-
这个库的核心实现原理是什么?如果让你实现这个库的某些核心功能,你会考虑怎么去实现?
-
你从这个库中学到什么有价值的或者说可借鉴的设计思想?
算法相关的
首先要想答好,还是得多理解数据结构,去LeetCode多刷题,多总结套路。我这块儿也比较薄弱,只能说一些浅见。面试了这几家,大概有一半考察了在白纸上手写算法题。而且很多题我也答的并不是很理想完美,但依然拿到了offer,所以我就说一些逆风应对技巧吧。举个爬楼梯的例子。
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
-
先审题,发现n是个未知数,题目也没明说n的范围,那么这个时候你应该跟面试官确认一些这个n的范围(这体现了你的沟通能动性和对需求的理解能力)
-
审完题后,发现还是一脸懵逼,不知道怎么下手。这时先冷静,别指望一步登天,解出最优解,考虑什么时间复杂度啊什么的,先解出答案再说。如果暴力解法都想不出来,那么就先把题目缩小范围,把n明确化,比如是3阶的楼梯怎么爬,这个时候一般可以画图来辅助自己寻找思路,直接脑子干想不如图像直观,很可能这么一顿操作你就能发现规律,找到解题思路了,就算最后真的没写出具体算法,将已知思路和阻塞自己的难点告知面试官,也可能会通过面试(这个过程体现了你解决未知难题的能力,程序员解决未知问题的能力是很重要的素质)。
-
你画了图之后发现这个是个树形结构,凭借刷题的套路总结,一般树形结构的问题通常可以使用递归解决。而且巧得很,这还是一个斐波那契数列问题。这个时候你开始写代码,用到了递归算法,那就得注意递归的一些特性,比如说递归终止条件。在你写完后,就可以跟面试官讲解你的思路,和分析时间复杂度了。
-
还没完,你学过的算法课会告诉你,有些递归算法,是可以进一步用动态规划的方式优化的,你仔细观察了一下,发现这个问题还可以用动态规划的思想优化(字节范儿:追求极致!)
-
《Android开发艺术探索》
-
《Android进阶之光》
-
《Android进阶解密》
-
《深入理解Java虚拟机》
-
《Android源码设计模式》
-
《深入理解Android内核设计思想》
我面试之前自己在网上收集了一些面试相关的进阶学习文档,在这次面试中就有相关的问题问道了,当时我想得的是庆幸这道相关的题目我刚刷过。这次的面试能通过有部分的功劳来自这些学习文档。因此小编想让让这些文档发挥出它应有的作用,特此拿出进行分享,大家可以加入Android 粉丝裙:872206502联系管理员进行免费获取,望能在面试中助大家一臂之力。
QQ扫码快速通道
文末
对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。 整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。
最后想要拿高薪实现技术提升薪水得到质的飞跃。最快捷的方式,就是有人可以带着你一起分析,这样学习起来最为高效,所以为了大家能够顺利进阶中高级、架构师,我特地为大家准备了一套高手学习的源码和框架视频等精品Android架构师教程,保证你学了以后保证薪资上升一个台阶。
当你有了学习线路,学习哪些内容,也知道以后的路怎么走了,理论看多了总要实践的。
进阶学习视频
附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
点、常见算法题汇总。)
[外链图片转存中…(img-yJVYMc2o-1715724356595)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!