面试无人问津到手握蚂蚁金服、快手等offer,我是如何准备大厂Android面试的?

简介: 面试 android java

前言

教育背景:

16届国防科技大学软件工程专业毕业
主修:Android移动应用开发
辅修:JAVA开发,C/C++等(数据库、jsp、数据结构与算法那些编程专业都要学的课程就不一一列举了)
时间过得飞快,眨眼间又是一年毕业季了,今年情况比较特殊,疫情的影响导致各行业的工作都不好找。在这种严峻的形势下,怨天尤人,乃庸人做法;学习进阶、提高自身核心竞争力,才是上上之策!

每个人都拥有大厂梦,我也不例外,学习Android开发的初衷,便是进大厂。在众多互联网大厂中,最终选择了阿里妈妈。“年轻、活力、富有激情”是我听到得最多对它的形容词,所以毅然决然,投递了简历。希望自己能够在这个最大的舞台上施展拳脚。

以下分享这次面试蚂蚁金服的面试题,另外还对自己的面试做了一些总结,总结里含有一些学习方法和资料,需要的朋友可以直接(点击我)无偿分享!

蚂蚁金服四面斩获Offer,定级P5

一面(五十分钟左右)
一面是一个电话面试,下午2点左右特地找了一个地方电话面试,2点准时电话就过来了,守时这方面还是专业的,时间有点远了,题目大致如下。。。
1.自我介绍

2.基本学习经历教育背景。

3.有没有实习经历?我回答:有两家家小公司共7个月的实习经验。然后会顺着往下问为什么没有留下,做过哪些项目,学到了什么等等

4.问到了java 中==和 equals 和 hashCode 的区别(这个题感觉面试必问,好多面经都有这个题)

5.进程和线程的区别

6.什么是 ANR 如何避免它?

7.点击应用图标,打开应用的过程

8.activity周期,启动模式

9.Handler机制

一些比较基础的东西,对于书本的消化,基本上没有什么难度

二面(70分钟左右吧)
二面是视频面试,是个周六下午
1、HTTP & HTTPS区别(基本都要问的)

2、socket.accept()函数对应着TCP三次握手中哪一次握手,哪个函数代表连接建立完毕,四次挥手的过程?(这个也基本都问)

3、举例工作中用到的多线程的应用场景,线程同步的问题

4、图片加载框架?如何加载100M的图片却不撑爆内存?(这题网上我都看吐了)

5、Android 中进程的优先级?

6、自定义View、View 的绘制流程、MotionEvent 是什么?包含几种事件?什么条件下会产生?

7、说下你所知道的设计模式与使用场景

三面
过了整整一周到了隔周五上午,接到了第三面的面试通知,约的是隔周三上午 10:30 。第三面面试官时不时的面带笑容,给人很轻松的感觉。
1、Looper消息机制,postDelay的Message怎么处理,Looper中的消息是同步还是异步?什么情况下会有异步消息

2、对MVC和MVP的理解,Handler的内存泄漏问题具体是什么,解决方案有什么,空数据的时候Handler的阻塞问题

3、ListView和RecyclerView区别?

4、Handler机制?子线程可以用Handler吗?

5、HashMap原理

6、你在项目中碰到什么比较棘手的问题?怎么解决的?

7、找到一个无序数组中第一次出现最多次数的元素

8、问到framework,线程同步这些。

9、反问环节(一般都会有这个环节,个人建议如下)
问技术面试官:问问技术团队多少人、技术氛围怎么样的、如果有可能问问他们的技术栈是什么,围绕着技术来问

问HR:转正的考核标准啊,薪资待遇啊,公司现有规模啊、发展情况啊,表现出对这个公司很感兴趣就行了

注意一点:考虑好你得目标公司的规模和行业。
小微公司:不看项目随便问,没有逻辑性,闭了眼睛瞎问,对于这种会就会,不会就不会,别怂,反正也不想去。
稍微大点的厂:一般是围绕项目去问,然后衍生出一些技术问题来细问,问的比较深的时候别慌,把你的理解说出来,然后说其他的就不知道了,体现出你的思考和应变能力。基本上面试就这些的,剩下的就是尽人事听天命了,记住,面试不上有时候不是你得问题,很可能是公司其实不急着找人,或者面试官不行。
四面(HR)
1、自我介绍。

2、自身有什么优势?什么劣势?

3、其他公司的面试体验怎么样?

4、学校参加过哪些活动、组织者or参与者

5、薪资预期,理想的工作模式等等

阿里巴巴面试题答案:点击【答案】即可领取!

学习经验总结

(一)调整好心态
心态是一个人能否成功的关键,如果不调整好自己的心态,是很难静下心来学习的,尤其是现在这么浮躁的社会,大部分的程序员的现状就是三点一线,感觉很累,一些大龄的程序员更多的会感到焦虑,而且随着年龄的增长,这种焦虑感会越来越强烈,那么唯一的解决办法就是调整好自己的心态,要做到自信、年轻、勤奋。这样的调整,一方面对自己学习有帮助,另一方面让自己应对面试更从容,更顺利。

(二)时间挤一挤,制定好计划
一旦下定决心要提升自己,那么再忙的情况下也要每天挤一挤时间,切记不可“两天打渔三天晒网”。另外,制定好学习计划也是很有必要的,有逻辑有条理的复习,先查漏补缺,然后再系统复习,这样才能够做到事半功倍,效果才会立竿见影。

(三)不断学习技术知识,更新自己的知识储备
对于一名程序员来说,技术知识方面是非常重要的,可以说是重中之重。要面试大厂,自己的知识储备一定要非常丰富,若缺胳膊少腿,别说在实际工作当中,光是面试这一关就过不了。对于技术方面,首先基础知识一定要扎实,包括自己方向的语言基础、计算机基础、算法以及编程等等。

结合自身的一个学习经历,总结了一套非常系统的复习包,包括思维脑图、Android基础知识、JAVA知识点汇总、Android扩展知识点、Android开源库源码分析、设计模式汇总、Gradle知识点汇总、常见面试算法题汇总等等。

1、Android基础知识:
笔记里的知识点非常齐全,囊括了Activity、数据储存、屏幕适配、消息机制、线程异步、webview、进程、ipc、数据储存等大量知识点,每一个知识点都有非常详细的解析,这本万能宝典在手,不信还有搞不懂的面试题!

2、JAVA知识点汇总:
笔记里的知识点非常齐全,囊括了JVM、static、并发、Java反射、Spring原理、微服务、异常处理、数据库、数据结构等大量知识点,每一个知识点都有非常详细的解析,这本万能宝典在手,不信还有搞不懂的面试题!

3、手撕架构技术篇
该篇内容囊括了以下专题的高频面试题、实战文档以及使用总结。

4、 最新大厂面试专题
这个题库内容是比较多的,除了一些流行的热门技术面试题,如Kotlin,数据库,Java虚拟机面试题,数组,Framework ,混合跨平台开发,等

5、 实战电子书
关于实战,我想每一个做开发的都有话要说,对于小白而言,缺乏实战经验是通病,那么除了在实际工作过程当中,我们如何去更了解实战方面的内容呢?实际上,我们很有必要去看一些实战相关的电子书。目前,我手头上整理到的电子书还算比较全面,HTTP、自定义view、c++、MVP、Android源码设计模式、Android开发艺术探索、Java并发编程的艺术、Android基于Glide的二次封装、Android内存优化——常见内存泄露及优化方案、.Java编程思想 (第4版)等高级技术都囊括其中。

6、Android小白到Android工程师的系统学习视频
关于视频这块,我也是自己搜集了一些,都按照Android学习路线做了一个分类。按照Android学习路线一共有八个模块,其中视频都有对应,就是为了帮助大家系统的学习。接下来看一下导图和对应系统视频吧!!!

Android高级工程师进阶思维导图

对应导图的Android高级工程师进阶系统学习视频

写在最后
我已经顺利拿到了offer,大家也要加油,希望都能找到自己想要的工作!

给大家一些建议

1.遇到问题,不要没有进行仔细分析,就直接百度和谷歌
2.学习知识的时候,不要没有自己的思考和理解,死记硬背
3.要记得深入追究一个问题的本质原因
4.一定要有自己知识点总结和梳理
5.学到知识点,没有很好的实践,动手能力不够
6.要自己的学习的方法
7.确定目标和找到有效的学习方法

最后提醒:以上整理的所有PDF,均可以免费分享,有需要的朋友,

直接点击【 我要成为Android高级工程师 】加入我们的圈子领取资料,和我们一起学习交流吧!

相关文章
|
4天前
|
ARouter IDE 开发工具
Android面试题之App的启动流程和启动速度优化
App启动流程概括: 当用户点击App图标,Launcher通过Binder IPC请求system_server启动Activity。system_server指示Zygote fork新进程,接着App进程向system_server申请启动Activity。经过Binder通信,Activity创建并回调生命周期方法。启动状态分为冷启动、温启动和热启动,其中冷启动耗时最长。优化技巧包括异步初始化、避免主线程I/O、类加载优化和简化布局。
24 3
Android面试题之App的启动流程和启动速度优化
|
5天前
|
安全 Java 编译器
Android面试题之Java 泛型和Kotlin泛型
**Java泛型是JDK5引入的特性,用于编译时类型检查和安全。泛型擦除会在运行时移除类型参数,用Object或边界类型替换。这导致几个限制:不能直接创建泛型实例,不能使用instanceof,泛型数组与协变冲突,以及在静态上下文中的限制。通配符如<?>用于增强灵活性,<? extends T>只读,<? super T>只写。面试题涉及泛型原理和擦除机制。
15 3
Android面试题之Java 泛型和Kotlin泛型
|
2天前
|
缓存 JSON 网络协议
Android面试题:App性能优化之电量优化和网络优化
这篇文章讨论了Android应用的电量和网络优化。电量优化涉及Doze和Standby模式,其中应用可能需要通过用户白名单或电池广播来适应限制。Battery Historian和Android Studio的Energy Profile是电量分析工具。建议减少不必要的操作,延迟非关键任务,合并网络请求。网络优化包括HTTPDNS减少DNS解析延迟,Keep-Alive复用连接,HTTP/2实现多路复用,以及使用protobuf和gzip压缩数据。其他策略如使用WebP图像格式,按网络质量提供不同分辨率的图片,以及启用HTTP缓存也是有效手段。
21 9
|
6天前
|
网络协议 算法 安全
小米安卓春招面试一面
小米安卓春招面试一面
21 3
|
6天前
|
缓存 网络协议 Java
Android面试题之Java网络通信基础知识
Socket是应用与TCP/IP通信的接口,封装了底层细节。网络通信涉及连接、读写数据。BIO是同步阻塞,NIO支持多路复用(如Selector),AIO在某些平台提供异步非阻塞服务。BIO示例中,服务端用固定线程池处理客户端请求,客户端发起连接并读写数据。NIO的关键是Selector监控多个通道的事件,减少线程消耗。书中推荐《Java网络编程》和《UNIX网络编程》。关注公众号AntDream了解更多。
18 2
|
7天前
|
XML JSON Java
Android面试题 之 网络通信基础面试题
序列化对比:Serializable码流大、性能低;XML人机可读但复杂;JSON轻量、兼容性好但空间消耗大;ProtoBuff高效紧凑。支持大量长连接涉及系统限制调整、缓冲区优化。select/poll/epoll是IO多路复用,epoll在高连接数下性能更优且支持边缘触发。水平触发持续通知数据,边缘触发仅通知新数据。直接内存减少一次拷贝,零拷贝技术如sendfile和MMAP提升效率。关注公众号&quot;AntDream&quot;了解更多技术细节。
12 1
|
7天前
|
Android开发 Kotlin
Android面试题 之 Kotlin DataBinding 图片加载和绑定RecyclerView
本文介绍了如何在Android中使用DataBinding和BindingAdapter。示例展示了如何创建`MyBindingAdapter`,包含一个`setImage`方法来设置ImageView的图片。布局文件使用`&lt;data&gt;`标签定义变量,并通过`app:image`调用BindingAdapter。在Activity中设置变量值传递给Adapter处理。此外,还展示了如何在RecyclerView的Adapter中使用DataBinding,如`MyAdapter`,在子布局`item.xml`中绑定User对象到视图。关注公众号AntDream阅读更多内容。
16 1
|
9天前
|
Android开发
Android面试题之activity启动流程
该文探讨了Android应用启动和Activity管理服务(AMS)的工作原理。从Launcher启动应用开始,涉及Binder机制、AMS回调、进程创建、Application和Activity的生命周期。文中详细阐述了AMS处理流程,包括创建ClassLoader、加载APK、启动Activity的步骤,以及权限校验和启动模式判断。此外,还补充了activity启动流程中AMS的部分细节。欲了解更多内容,可关注公众号“AntDream”。
12 1
|
10天前
|
存储 Java 调度
Android面试题之Kotlin 协程的挂起、执行和恢复过程
了解Kotlin协程的挂起、执行和恢复机制。挂起时,状态和上下文(局部变量、调用栈、调度器等)被保存;挂起点通过`Continuation`对象处理,释放线程控制权。当恢复条件满足,调度器重新分配线程,调用`resumeWith`恢复执行。关注公众号“AntDream”获取更多并发知识。
20 2
|
10天前
|
Java Linux Android开发
Android面试题之说说系统的启动流程(总结)
这篇文章概述了Android系统的启动流程,从Boot Rom到Zygote进程和SystemServer的启动。init进程作为用户级别的第一个进程,负责创建文件目录、初始化服务并启动Zygote。Zygote通过预加载资源和创建Socket服务,使用fork函数生成SystemServer进程。fork过程中,子进程继承父进程大部分信息但具有独立的进程ID。Zygote预加载资源以减少后续进程的启动时间,而SystemServer启动众多服务并最终开启Launcher应用。文中还讨论了为何从Zygote而非init或SystemServer fork新进程的原因。
19 2