美文网首页程序员Android开发经验谈Android技术知识
记录一次壮烈牺牲的阿里巴巴Android开发面试

记录一次壮烈牺牲的阿里巴巴Android开发面试

作者: df556ada620a | 来源:发表于2019-02-27 22:05 被阅读12次

    前言

    今天是一个小雨霏霏,凉风习习的日子。大概晚上六七点的时候,蚂蚁金服移动端大佬来了电话,要进行一轮的技术面试。我一脸黑人问号???现在的面试都流行突袭吗?
    于是我的这一次面试之旅,就此壮烈的展开。
    至于全部的内容不可能都记住,但是大概的流程和思路可以这里分享一下。有类似经历的朋友们欢迎评论区讨论。文末可以分享一份我自己一直有收集整理的各类专题面试题,包含答案和解析。从初级到中级,高级,都有。文末可领取

    自我介绍

    首先呢,大佬让我用两分钟自我介绍。我本以为自己能滔滔不绝,将对方视作相亲对象般全方位介绍自己。结果不到半分钟,我就介绍完了==。

    五秒钟的沉默后,大佬嗯了一声。

    感觉自己的脸上堆满了尴尬而不失礼貌的微笑。

    最近的项目经历

    这时大佬问我最近从事了什么项目,研究生阶段都进行了什么样的工作。
    那必须吹一吹!从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常见原理性面试专题文档截图

    相关文章

      网友评论

        本文标题:记录一次壮烈牺牲的阿里巴巴Android开发面试

        本文链接:https://www.haomeiwen.com/subject/bzqtuqtx.html