前言
今天是一个小雨霏霏,凉风习习的日子。大概晚上六七点的时候,蚂蚁金服移动端大佬来了电话,要进行一轮的技术面试。我一脸黑人问号???现在的面试都流行突袭吗?
于是我的这一次面试之旅,就此壮烈的展开。
至于全部的内容不可能都记住,但是大概的流程和思路可以这里分享一下。有类似经历的朋友们欢迎评论区讨论。文末可以分享一份我自己一直有收集整理的各类专题面试题,包含答案和解析。从初级到中级,高级,都有。文末可领取
自我介绍
首先呢,大佬让我用两分钟自我介绍。我本以为自己能滔滔不绝,将对方视作相亲对象般全方位介绍自己。结果不到半分钟,我就介绍完了==。
五秒钟的沉默后,大佬嗯了一声。
感觉自己的脸上堆满了尴尬而不失礼貌的微笑。
最近的项目经历
这时大佬问我最近从事了什么项目,研究生阶段都进行了什么样的工作。
那必须吹一吹!从Android的起源到APP发展再到各种前沿技术,顺便提一嘴音视频技术跟跨平台开发,结果半分钟一到,又说不下去了==
大佬很有耐心的听我说了一堆语无伦次的话,开始进入正题。
java
大佬:你知道什么是线程安全吗?
我:(乌鲁乌鲁说了一堆)就是比如如果同时有两个线程访问同一个变量,那么它们对变量造成的修改所带来的结果可能是不确定的。
大佬:那你知道JAVA有什么方法来实现线程安全吗?
我;不是特别知道
大佬;那你讲讲Java中重载和重写的区别?
我;重载:一个类中可以有多个相同方法名的,但是参数类型和个数都不一样。
重写;子类继承父类,则子类可以通过实现父类中的方法,从而新的方法把父类旧的方法覆盖。
大佬;final和static是怎么使用的?
我;final变量即为常量,只能赋值一次,final方法不能被子类重写,还有final类不能被继承。
static变量:对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,
在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。
.............
大佬:你java基础还可以啊,你说说为什么我们要使用java语言开发呢?
我:(因为java牛逼啊)首先呢,Android应用是由Java语言进行开发的,SDK也是由Java语言编写,所以java语言对于Android开发的重要性无可替代的。虽说kotlin语言得到了Android官方的热推,但是kotlin也是编译成了java语言再运行的。对于Android来说,只要SDK没有用kotlin重写,那么Java语言是都需要学习的。而且Android apk的后台服务器程序大概率是java语言构建,所以学习java也是一种必然。
大佬:那么你觉得Java中哪些东西是我们Android程序员最需要用的呢?
我:其实现在我们大多数做Android开发的都是 复制粘贴代码块,所以与Android中比较相关的稍微比较难的Java基础几乎都是一个门槛,像 泛型,多线程,反射,JVM,Java IO,注解,序列化等,
大佬:那你都懂这些原理了是吧?
我:啊........暂时不是特别懂,我回去准备认真研究这些原理的。
........
性能调优
大佬:说说你平时怎么样给你做的APP调优的?
我:我主要从两个层面。
第一个层面:从写代码的时候认真仔细勤勤恳恳的好好写,写出高性能高可用的代码,免得后面再回头修修改改特别麻烦;
第二个层面:对已经成型的代码,通过工具检查代码的问题,通过检查到的问题来进行代码的删改,。
大佬:你觉得你写出的代码都是高性能的吗?
我:我在leetcode上有刷了上百道题,差不多精通最常用的排序查找动态规划等算法的能力,可以根据应用场景写出符合当前场景的特殊结构,比如用sparseArray替代HashMap
大佬:好那你写好的代码进行调优一般用的什么工具和操作?
我:使用Profiler工具进行测试和检查,看哪里有性能消耗大的操作,然后分析对于代码的问题。我的方向主要是如何对内存调优,对耗电调优,对网络流量调优,当然,还有对启动速度,页面切换效果与速度,开机白屏体验,闪屏方面的原因等进行分析和调优。哦,还有屏幕适配相机适配等......
大佬:可以,总结的很全面啊(大佬的态度明显亲和了好多,我感觉放低姿态不敢嘚瑟)
我:我对性能调优这块比较熟悉点。之前主要是搞这方面的~
接着又问了一些gradle,git还有抓包工具stetho这些,终于问开始其它问题。
移动架构+音视频+混合开发
大佬:你了解Android里面哪些常用的架构?
我:(如果你通知我明天面试,我就全部了解了><)MVC,MVP,MVVM这些都了解一点。
大佬;有过实战项目吗?会组件化吗?
不好意思,深一点的知识我不熟悉,但是我很愿意去学习和实战的(赶紧表忠心啊!)
大佬很给面子的开始问下一个问题;
音视频这块有学习过吗?
我;(心中一万只骏马奔腾,我是来面试蚂蚁金服Android开发的,又不是去抖音那些公司去做音视频的)了解一些音视频的编解码技术,流媒体协议,ffmpeg,还有OpenCV/OpenGl/ 这些图像处理知识。但是要会用的话,还需要等以后了~
Weex
大佬;你对weex了解吗?
我;(还好之前强补了可以说死记硬背了一些weex的知识,毕竟Weex混合架构由于阿里系的强大,还是很多对方用到的)
Weex架构的优点;
- 自动做响应式布局, 开发过程只需要按照设计稿尺寸写像素值px
- image组件支持默认图片, 支持图片自适应
- css属性lines, 简化多行超出点点点的实现
- refresh支持下拉刷新
- slider 轮播图组件
- animation 转场动画
- 其他app原生能力........
(感觉大佬对这些还挺看重的....)
大佬;flutter怎么看?
我;最近这段时间在学这一块,flutter现在已经逐渐变成了主流的混合开发框架,我们做开发的要保持与时俱进不断学习新技术(我内心在呐喊,我学不动了,谁来拯救我!)
............
大佬;你有什么问题想需要提问的吗?
我;好奇大佬比我大不了多少,头发比我要茂盛多了?
大佬停顿了几秒,抬手拿掉头上的假发套(哈哈哈强行脑补一波~)
总结
最后当然和大佬话一话家常,进行最后的挣扎。总结来说,要想成功进行一次阿里巴巴的面试,你需要了解甚至精通以下内容:
JAVA语言,尤其是线程 JVM原理
数据结构!
熟悉sdk,精通应用开发
性能调优
常用架构,组件化
设计模式
一些比较6的前沿技术,以及混合开发
可以说是涉及范围非常广了。不过其实要想成为一名优秀的移动端开发,是需要这些知识面的,以前还觉得Android是不是不行了要凉了,原来根本还是看自身的技术水平。要继续深入学习!
最后
现在找工作和跳槽的旺季,很多朋友都在找面试方面的题目,而且是有答案和详解的那种。
这里我搜集整理了各种互联网公司Android面试涉及到的绝大部分面试题及答案,并整理做成了文档专题,以及系统的进阶学习视频资料,可以免费分享给大家。
(包括Java在Android开发中应用、APP框架知识体系、高级UI、全方位性能调优,NDK开发,音视频技术,人工智能技术,跨平台技术等技术资料),希望能帮助到你面试前的复习,且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。
资料领取方式:
加Android技术交流群;964557053,找群管理免费领取。备注一下简书看到的来领取资料就可以了!
Android进阶视频+面试资料部分截图 Android常见原理性面试专题文档截图
网友评论