先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip204888 (备注Android)
正文
文章的内容总体上可以分为两个部分:吹水、干货。吹水部分主要是分析笔者的面试过程,有兴趣的读者可以看一下;干货部分主要是分享笔者的面试经验,从技术到非技术到面试表现,可以根据标题按需阅读。同时需要注意的是: 文章内容均为笔者的个人经验之谈,请不要奉为圭臬,辩证看待,同时欢迎各位评论区交流 。
那我们开始吧~
面试经历
这部分主要是跟大家分享一下笔者的整个实习面试过程,属于 纯吹水内容,且内容稍长 。有兴趣的读者可以看一下,或者直接跳转到知识总结看干货。
三四月几乎各路大厂开始疯狂招聘实习生。但其实有一些大厂,如腾讯、字节,在三月前甚至年前,就已经开始接收简历了。这个时候的岗位几乎应有尽有,难度也会相对三四月低一些,是一个非常好的机会。但笔者,比较怂,感觉没有准备好,到了三月才开始投递简历。
三月初投递的第一家企业就是,腾讯。
经过工作室师兄的内推投递简历,很快就收到了面试邀请,这里得非常感谢师兄的帮忙啊。在三月六号开始了腾讯的第一轮面试,也是整个金三银四的第一轮面试。面试形式是电话面,难度不高,也有适当拓展。结束后通过官网查询已经进入复试状态。当时是真的是非常高兴,之后询问了师兄,说简历已经拿给了总监,总监面试一过,就只剩下HR面试了。距离鹅厂就差临门一脚。
随后腾讯二面等待了一个多星期,非常久。等待期间经过其他师兄的内推,投递了字节跳动。
字节跳动的面试流程速度相对稳定,每一面结束后隔一两天就会打电话约下一面。3.11进行了字节一面,3.15进行了字节二面。字节跳动面试自我感觉表现挺一般,有很多的点都没答上来。当时面完我都觉得自己挂了,直接瘫坐在椅子上喘气,心想着完了,与字节无缘了。但隔了两天之后,字节HR打电话来约三面时间,很惊喜,有点失而复得的那种感觉,虽然这个比喻不太准确,但确实是我意料之外的。
隔了一个多星期,在3.16进行了腾讯二面。二面的内容主要是一些软技能问题。心想着没有技术问题,应该差不多稳了。这时候,再一次出乎我的意外:在3.18号腾讯预约了我24号 初试 。当时惊呆了:啊?怎么从复试退到初试?后来了解后发现是,我上一轮总监面试挂了,被腾讯其他的部门捞了,重新回到一面。这是我三月份的第一次面试挂,当时心里还是蛮难受的,毕竟距离鹅厂offer就差那么一步。但我并没有多少的悲伤时间,因为马不停蹄,字节三面来了。
3.22,字节三面。三面的面试官是c++开发工程师,对于android和Java似乎不太熟练,问的问题主要是c语言和算法。但我准备的内容是android和Java居多,c语言部分我回答得比较一般。总体上,整个字节跳动的三轮面试我的表现都比较一般,但当时面试完还是很期待能过的。这次没有奇迹,过了两天,字节的另一个部门HR打电话给我,给我重新安排面试。好家伙,我又又又回到了一面!!!
到这里其实心态是有点崩的。腾讯与字节都面了一趟,但是都挂了,从一面重新开始。那会的时间已经来到了三月下旬,腾讯和字节都在一面,相当于刚刚起步。而我身边的同学很多已经拿到 BAT offer了。心里有点难受,同时还有点怕,怕最终找不到实习。经过这两轮的打击,心里其实也没有什么底气了。
此时腾讯和字节的面试流程先告一段落,三月下旬,其他的企业也开始面试了。
在三月初那会,我投的不只是字节、腾讯,还有美团、蚂蚁、虎牙。但他们的流程比较慢,迟迟没开始面试。美团在三月中笔试之后,终于在3.23开始了第一场面试。
美团前面的技术面流程比腾讯和字节快很多,3.23下午进行了一面,晚上就约了3.25的二面。但是在之后的HR面试隔得比较久,到了4.1,进行了HR面试。
美团总体的面试过程是比较顺利的,一面和二面的面试题目都回答得七七八八。而且有了前面的面试经验,此时表达更加清晰、语速也没有那么快了。在4.8号美团HR打电话通知面试通过了。但是到了此时,面试情况已经和三月20号那会不一样了。至于为什么,这还要从也是在三月下旬开始面试的蚂蚁开始讲起。
在三月初我经过内推投递了蚂蚁的一个部门。蚂蚁的简历筛选阶段非常久,筛选了半个多月。我一直以为我跟蚂蚁无缘了,简历没过去。直到23号,面试官打电话过来询问了一些我的情况,项目、学习情况等等。然后25号跟我约了26号的一面。对于蚂蚁这个部门,我是真的没有抱希望能过的。前面经过了字节与腾讯的打击,这会已经信心大折。我想着:去体验一下卷中卷的部门,感受被刷的快乐。给你们看看我当时的聊天记录:
之后在26号进行了蚂蚁的一面,总体难度还是比较高,问到了比较多的一些优化、缓存的内容。而这一部分我接触得不多,大多是靠推理、猜测来回答的,也回答得不是很好。后面还跟面试官聊了一些博客相关的内容。面试完之后我觉得悬了,就也没抱着活的希望。接着就在31号上午收到了蚂蚁的电话,约了下午的面试。[oh my god, amazing]
蚂蚁二面是比较特殊的,一共有两个面试官:一个是技术面试官,另一个是HR。技术面试官先提问了一会,大概15分钟吧;之后是HR跟我聊,也是聊了15分钟。主要问的内容都是在了解我的情况,例如工作室如何、成绩如何、怎么学习、怎么管理时间、博客等等。给我印象比较深刻的是这个HR姐姐。和其他企业的HR不同的是,面试过程中就像在和一个朋友聊天,了解我的学习以及周边环境的情况,还会给我反馈表达她对我的印象。
然后在4月2号,面试官加了我微信,给我补了笔试的内容,就是做算法题。过了两天,收到了蚂蚁的录用喜报!!!当时掐了一下大腿,没在做梦。。。
再拐回来说一下腾讯和字节跳动的后续。腾讯在3.24进行了一面、3.29进行了二面、4.2进行了三面、4.13进行了HR面试。前面的速度是比较快的,只是HR可能比较忙,所以一直没约上,隔了比较久。字节跳动在4.1一面、4.6二面、4.9三面、4.14HR面,半个月完成了4个面试,速度比之前的也快了很多。
前面还讲到了三月初投递的虎牙,但虎牙的速度是真的慢,我甚至以为我的简历被筛选掉了。直到四月份才开始约面试。
虎牙在4月6号进行了一面,隔了几天约了线下二面,也是终面。但此时我已经有意向的企业,就拒绝了面试。
整个面试流程,给我最大的感触是: 不尝试,永远是0;尝试了,概率再小,都有可能是1 。
故事到这里就讲完了。诶,怎么没说去哪个公司了?哈哈,你猜我去哪了?
知识总结
面试中会被考察的具体问题有三个影响因素: 部门需求、简历、面试中提到的知识点 。因此不同的部门不同的面试者遇到的面试题很可能是完全不一样的,这也是我为什么不直接把面试题放出来的原因,没有多大的参考价值。
这一部分主要总结在面试中被考察到的知识点,多为高频面试问题,读者可以自行考察是否这些知识都掌握了。需要特别注意的是这 并不是全部的知识体系,仅仅是笔者遇到的面试题 ,读者可以按照大体的方向去学习,但切不可认为这样就足够了,这里提到的知识点是 远远不够的。
面试的过程中更多的时候不会单纯地考察知识点,而是会结合一些需求或者业务场景来多方面考察对知识点的理解。因此笔者建议,对于知识点要以理解为首要任务,而不是背诵答案。
Android
总体来说,本次春招问的android内容其实不多,主要还是看着我的简历问,简历写得不多,问得也就比较少。但android的基础内容如handler、view机制等还是要会的,其他的有更加深入的研究可以写在简历加分,如Binder、系统服务、优化等。
- Activity
-
Activity启动流程。其中考察最多的类似问题是:【从桌面点击一个图标之后,到界面显示,这个过程发生了什么?】。很多时候面试官会结合activity生命周期来考问:在启动流程的哪些阶段哪些生命周期被回调,此时Activity状态如何。
-
启动模式。也就是常见的四种启动模式,但面试官更喜欢问何时使用他们,也就是使用场景。
-
生命周期。这个很少单独问,一般和启动流程或者具体的业务场景结合考问。
-
context。主要是内存泄露的考察以及application和activity两种context如何选择。
- Handler
-
内部原理。Handler必会的啊,android的消息机制,可以称为android程序的引擎来的。
-
同步屏障。涉及到绘制优化、屏幕刷新机制等。
-
阻塞唤醒原理。这里一般是会问为何
loop()
方法是死循环却不会占用cpu时间片 or 为何next()
方法阻塞却不会卡死。更深一点会问到Linux的IO多路复用epoll
原理。 -
卡顿与内存优化。整个主线程的所有任务都必须经过Looper,是排查卡顿和ANR的关键点,以及消息太多会造成的后果等。
-
消息复用。
- 图片
-
计算一张图片大小。分辨率x像素点大小,考察得很多次。
-
加载优化。如LaunchActivity同时加载的图片太多如何优化、view的大小比图片小如何优化等。
-
缓存优化。内存缓存、硬盘缓存。
-
Glide框架。重点就是Glide对上面的优化的实现原理,因此需要着重看Glide的缓存原理。
-
drawable。对比使用图片和drawable的好处,以及drawable的原理。
- SharePreference
-
内部原理
-
commit和apply的区别
-
这部分考察得不多,但建议读者可以深入理解sp的缺点,如导致ANR原理,以及新框架MMKV、Data Store的优点。
- window
考察得非常少,主要window的类型、以及window的真正定义理解即可。
- view
-
事件分发流程。考察得最多,基本把整个分发流程讲清楚就好了;其次还会考察如何解决具体的冲突场景。
-
应用界面的view层级。
-
绘制流程与时机。activity启动时到onResume方法被调用,view依旧还未被绘制。
- IPC
-
常见IPC类型以及优缺点。
-
Binder机制。优点、缺点、特点、和传统IPC比较。Binder涉及到的很多是偏底层,更多的时候考察的是上层的应用,如和socket比较等。
-
socket。这个会重点问,涉及优缺点、使用场景、和binder相比等。
- 序列化
- serializable和parcelable的原理,以及各自的优缺点、应用场景。
- jetpack
-
使用jetpack的好处与坏处。
-
框架原理。这部分如果写在简历也很少问,看面试官;但如果问的话,一般会问原理。
- okHttp
-
拦截器以及责任链思想。这个是问的最多的。
-
内部调度器对线程、任务数的并发控制。
-
优点缺点,和URLConnection相比的好处,诞生的背景等。
- 优化
-
性能优化。问得很多,主要看自己平时有没有做过优化。
-
卡顿优化。一般询问如何定位和解决卡顿问题。
-
内存优化。一般是内存泄露、或者减少内存占用等。
-
ANR。一般会考察原理以及如何解决。
-
工具:leakcanary、profiler。优化涉及的内容太多,这个属于比较深的内容,还是得看自己平时的项目积累。
Java
Java的考察是一个非常考验功底的地方,很多的知识点都是基础中的基础,同时又都可以延伸到底层的逻辑。这些知识点在实际的运用中,也有很多的情况需要考虑,考察我们对于知识点的运用。例如线程池,可以从参数作用、到线程池原理、到阻塞唤醒机制、到实际项目的参数配置,有非常多的知识点可以考察。因而这一块就看各位的造诣了。
当然,一些基础或者常考的知识点还是得会的。
- 集合框架
-
HashMap。几乎每家公司都问,主要是内部原理如hash算法、冲突解决方案、扩容方案、红黑树的优缺点等。必会的内容,不会就直接当场去世了。
-
HashSet。内部使用HashMap来实现,value设置为object。记住这个就好了。
-
ConcurrentHashMap。必问。他的并发原理以及好处,同时有些面试官也会问缺点等问题。
-
Hashtable、SychronizeMap。一般和ConcurrentHashMap一起问,进行对比。
-
CopyOnWriteArrayList。一般会作为线程安全方法来进行比较优缺点。
-
集合框架重点还是在Map,但是其他的框架List和queue的原理也是要了解的。
- 访问限制符
public protect default private 四个要懂,基础知识了。(笔者就是忽略了这些当时回答错了)特别注意protect是可以跨包访问的。
- 类
-
4种内部类,特别注意每个class编译后都会产生一个class文件,不管静态或非静态。面试踩坑了
-
lambda的本质。就是匿名内部类。
-
抽象类和接口的区别。这个很看理解,如果有开发过具体项目的会回答得更加深刻,这是背八股文体现不出来的。
- 异常
-
异常体系、分类、机制。
-
与error的区别。
- IO
主要还是问NIO的原理以及优缺点。建议把缓冲流的原理也得学一学并进行比较。
- 线程池
-
内部原理。必会的啊。
-
关键参数作用及如何配置。重点在如何配置,需要结合具体的机器情况、任务情况等等考量。
-
线程池的作用。不仅仅只是线程复用,更重要的是管理线程、控制线程数量。这个也比较考察具体的项目运用理解。
-
常见的四种线程池。
- 并发
-
sychronize。必问,java的锁机制。特别是jdk6之后的锁优化以及运用场景。为什么是重量级的、JVM层如何实现如果了解可以加分。
-
Lock。必问,AQS的原理最好懂。一般会拿来和synchronize比较。
-
volatile。必问,会拿来和锁比较,他的两个重要作用。更深点会问到cpu缓存一致性协议、以及指令重排的类型与原理。
-
CAS。必问,问原理以及ABA问题。
-
死锁。一般询问如何解决或者产生的条件。
-
Object的wait和notify。阻塞唤醒,一般会用一个代码或者具体的场景来询问如何保证多线程同步。
-
ThreadLocal。原理、内存泄露等
-
这一块问的还是比较多,而且大都可以深入去问,看自己的学习程度了。
- JVM
-
GC机制。必问。
-
类加载机制。必问,同时还会问双亲委托机制。
-
方法调用过程。这个也问的挺多,也看对JVM的学习程度了。
-
线程与进程的内存关系。如一个线程占多少内存、一个进程可以开多少线程、一个进程占用多少内存等。
-
内存分布。JMM、运行时数据区、native内存分布。很看对JVM的理解程度。
Kotlin
kotlin其实问的很少,现在大部分的项目还是使用Java开发的。一些有kotlin业务的公司会问,但是问的内容也不多。这一块如果还没学习其实不急的,把Java学好才是王道,kotlin和java在原理上,都是互通的。
- 协程
问的是最多的,主要是理解线程和协程的关系、协程的优缺点。这个也看个人的学习程度了。
- run、let、also、with、apply
注意返回值以及作用域
- 特性的具体实现
如默认参数的具体实现。有了解过最好了,没有的话就联想Java是如何实现的,如默认参数可以联想方法重载。
计算机网络
计网这一部分主要还是HTTP和TCP的内容了,经典中的经典。需要注意的是链路层、网络层的一些协议要了解,也是计算机基础了,被问到不会的话会比较尴尬。其次是一些新的协议如QUIC、http3.0等可以了解一下,面试会很加分,同时也可以进一步去理解TCP的优缺点。
- HTTP
http在android上的体现并不多,因为大部分的工作都给框架解决了,问的问题其实很少。
-
历代http的优化以及原因
-
请求方法、响应码
- HTTPS
必问。一定要会了
-
原理以及和http的区别。加密算法、hash摘要、ca证书验证都要了解
-
建立连接过程
-
破解:中间人攻击等
- 数据链路层、IP层
-
ARP和RARP协议
-
NAT协议
-
DNS
-
这部分主要问一些常见的协议,考察计网功底,这里列出来的是笔者考察过的,读者需要比价系统地去学习这一块。
- TCP
-
握手挥手
-
拥塞控制
-
可靠传输原理
-
缺点以及如何改进。这个是比较重要的,对应http3.0的优化就是针对TCP的缺点来入手的。
-
TCP的连接数目上限
-
TCP非常重要,必问的内容,不会的读者一定要去好好学习一下。
- UDP
-
优缺点
-
和TCP比较
-
应用场景
-
一般和TCP一起出现,询问他们的区别,以及如何通过UDP来优化TCP的缺点。
- 数据格式
json的优缺点,为什么要使用json而不是XML。熟记就可以了。
设计模式
设计模式这一块问的不是很多,原因是设计模式需要实际的编码才能去真正理解他的好处。所以大部分情况下面试官都是询问在项目中用了哪些设计模式、或者哪些开源框架用了什么设计模式。其次问的最多的就是三大架构模式了,必会的。
- 常见的设计模式
一般面试官会让我们讲自己认识的设计模式,按照自己的理解讲出来就好了。
- 在项目和源码中的体现
问的最多的就是:你看过的框架源码都使用了哪些设计模式。不仅考察了设计模式、还考察了源码。另外也会问在项目中运用了哪些设计模式。
- MVC\MVP\MVVM
基本必问了。结合具体的项目实现以及自己的思考,分析他们的优缺点、适用场景等。
计算机基础
计算机基础这里包括了c语言、操作系统、数据库库、以及前面的计网等等。这部分直接问的内容不多,但却是非常重要的,也是考验我们基础扎不扎实的地方。其次,面试官也会用一些业务场景来考验我们的理解程度,如聊到java并发时,问具体为何线程切换代价高;又如聊到JVM内存分布时,问在native层是怎样的内存分布以及逻辑内存物理内存等;再如聊到volatile,会问到cpu缓存一致性的问题等等。这些都是非常考验功底的内容。因而,这些基础内容要学好,不仅是为了面试,更是为了让我们自己可以更好地学习理解知识。
- C语言
问的很少,偶尔会问到。笔者只被问到:同构结构体的内存占用、指针相关问题。
C语言作为语言鼻祖,一些基础还是要会的。
- 操作系统
-
中断原理、作用。
-
死锁原理以及如何解决。
-
操作系统这一块确实问的不多,同样也是考察基础功底了。可以不问,但是问到一定要会。
**关于上面说到的面试题以及知识点,我都放在 **GitHub上面了,有需要的可以自取。
========================================================================================================================================
项目
–
项目是非常重要的,一个拥有亮点的项目可为面试加分不少。面试前需要把自己的项目总结一下,提炼出项目的亮点难点。假如有优秀的项目,一定要把他写在简历上,并把亮点表现出来。
分享读者
作者2013年java转到Android开发,在小厂待过,也去过华为,OPPO等大厂待过,18年四月份进了阿里一直到现在。
被人面试过,也面试过很多人。深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长,而且极易碰到天花板技术停滞不前!
我们整理了一份阿里P7级别的Android架构师全套学习资料,特别适合有3-5年以上经验的小伙伴深入学习提升。
主要包括阿里,以及字节跳动,腾讯,华为,小米,等一线互联网公司主流架构技术。如果你有需要,尽管拿走好了。
35岁中年危机大多是因为被短期的利益牵着走,过早压榨掉了价值,如果能一开始就树立一个正确的长远的职业规划。35岁后的你只会比周围的人更值钱。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注Android)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
作者2013年java转到Android开发,在小厂待过,也去过华为,OPPO等大厂待过,18年四月份进了阿里一直到现在。
被人面试过,也面试过很多人。深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长,而且极易碰到天花板技术停滞不前!
我们整理了一份阿里P7级别的Android架构师全套学习资料,特别适合有3-5年以上经验的小伙伴深入学习提升。
主要包括阿里,以及字节跳动,腾讯,华为,小米,等一线互联网公司主流架构技术。如果你有需要,尽管拿走好了。
[外链图片转存中…(img-hB0jYN5X-1713218009420)]
35岁中年危机大多是因为被短期的利益牵着走,过早压榨掉了价值,如果能一开始就树立一个正确的长远的职业规划。35岁后的你只会比周围的人更值钱。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注Android)
[外链图片转存中…(img-kf6xbM7i-1713218009420)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!