2020 - 阿里 Android + 前端面试题及部分答案(拿到 offer)

面试时间:2019.12.16 1面、2020.12.21 2面、2020.1.08 3面技术 & HR面
面试部门 + 岗位:蚂蚁金服-数据体验技术部门-前端专家
面试感想:主要是对面试内容有点懵,1面是 Android 知识,2面是前端知识,3面主要是项目方案设计之类的宏观知识,实属有点让我不知道这个岗位是做 Android 还是前端。虽然也问了主要工作做啥,但大概是我领悟力不行,依然...黑人问号.gif。前两面不仅重基础知识,还重视更深层次的理解,比如对项目使用知识源码级别的掌握(怎么掌握2面中有个例子-_-),整体没有算法面试。
面试建议:如果特别想进阿里或者非进阿里不可,一定要提前准备,提前规划!比如面试公司顺序、最长能等一家公司多少时间。阿里面试流程真的好慢好慢啊,我第一个面试,最后一个结束,过了还有体检、背调才能发 offer。之前自己就是没搞清楚流程,然后又因为时间太久,加上一些其他原因,没等住 offer 发下来...

1面 - Android 知识

  1. 有什么做得比较好的 Android 性能优化事情?

尽量说一个自己做过的。

  1. Android应用中哪些是 Context,一个应用有多少个 Context?

Android Context 熟悉还是陌生

  1. Context 的使用上如何避免内存泄漏?

  2. Application、Activity、Service 的创建顺序是什么?

Application和四大组件启动时的方法顺序:

  • 1.每个应用程序在第一次启动时,都会首先创建 Application 对象。创建时机是在ActivityThread.handleBindApplication方法中,创建 Application 时同时创建 ContextIml 实例;
  • 2.之后通过 startActivity() 或 startActivityForResult() 请求启动一个 Activity 时,如果系统检测需要新建一个 Activity 对象,会调用到 ActivityThread.performLaunchActivity() 方法,创建一个Activity 实例时同时创建 ContextIml 实例;
  • 3.通过 startService 或 bindService 时请求新创建一个 Service 对象,系统就会回调ActivityThread.handleCreateService() 完成相关数据操作,创建一个 Service 实例时同时创建ContextIml 实例
  • 注:ContextIml 对象与 Application、Activity、Service 对象是一一绑定的
  1. 如何跨进程拿 Context?如 Activity 还没启动的时候如何拿 Context?
  • getApplication 与 getApplicationContext 区别:getApplication() 用用来获取 Application实例的,但这个方法只有在 Activity 和 Service 中才能调用。如果在一些其它的场景,比如BroadcastReceiver 中也想获得 Application 的实例,这时需要借助 getApplicationContext() 方法。也就是说,getApplicationContext() 方法的作用域会更广一些,任何一个 Context 的实例,只要调用 getApplicationContext() 方法都可以拿到我们的Application对象;
  • Application 中方法的执行顺序为:Application 构造方法 → attachBaseContext() → onCreate()。如果在 attachBaseContext() 中或执行前,调用 getApplicationContext() 得到的值为null
  1. 点击桌面图标的启动过程?涉及的进程和组件

默认Home应用程序(Launcher)的启动过程源码分析

  1. 对Activity的理解是什么?

问题范围较大。从页面结构讲的 (Activity、Window、View、LayoutInflater),用户交互入口

  1. Activity 的生命周期有哪些?

实例详解 Activity 生命周期

  1. Fragment 的理解,与 Activity 的区别

  2. Java 引用类型的分类和区别

  3. 对 Handler 的理解

  4. 进程通信的方式有哪些,Android 中的有哪些?

  • Java 中的进程通信方式:管道(pipe)、有名管道(namedpipe)、信号量(semophore) 、套接字(socket)、消息队列(messagequeue) 、共享内存(shared memory) 、信号(sinal)
  • Android 中的进程通信方式:AIDL(基于 Binder)、Messenger (基于 Binder)、Socket、Binder (基于 mmp 共享内存)、文件
  1. 为什么会出现oom?

为了整个Android系统的内存控制需要,Android 系统为每一个应用程序都设置了一个硬性的Dalvik Heap Size 最大限制阈值,这个阈值在不同的设备上会因为 RAM 大小不同而各有差异。如果应用占用内存空间已经接近这个阈值,此时再尝试分配内存的话,很容易引起OutOfMemoryError 的错误。

  1. 哪些原因会导致 oom?
  • 虚拟机堆内存不足:内存泄漏(内存缓增)、大对象/大图片(内存突增)
  • 内存碎片,无足够连续内存空间:循环中创建对象、字符串拼接...
  • 系统底层限制:FD 数量超出限制、线程数量超出限制、其他系统限制
  1. debug 包有什么修改方式使不出现 oom?
  • Android为每个进程分配内存时,采用弹性的分配方式,即刚开始并不会给应用分配很多的内存,而是给每一个进程分配一个“够用”的内存大小,这个值由具体的设备决定
  • 在AndroidManifest.xml中的application标签中设置largeHeap为true,可以申请最多的内存的限制
  • 这个内存限制的值是在 /system/build.prop文件中可以查看与修改
  1. 有哪些原因会引起内存泄漏?

Android 内存泄露与分析工具

  1. 内存泄漏有什么方式检测?用过哪些工具,其中的原理是什么?

Java内存问题 及 LeakCanary 原理分析:

  • 基本原理:用ActivityLifecycleCallbacks接口来检测Activity生命周期,主要是在onDestroy()方法中,手动调用 GC,然后利用ReferenceQueue+WeakReference 监听对象回收情况 ,来判断是否有释放不掉的引用,再结合dump memory的hpof文件, 用HaHa分析出泄漏地方;
  • LeakCanary会单独开一进程,用来执行分析任务,和监听任务分开处理。Application中可通过processName判断是否是任务执行进程;
  • 利用主线程空闲的时候执行检测任务,在MessageQueue中加入了一个IdleHandler来得到主线程空闲回调;
  • LeakCanary检测只针对Activiy里的相关对象。其他类无法使用,还得用MAT原始方法
  1. 对 BroadCast 的理解,分类有哪些?

  2. MRN 比 原生 RN,有什么优势?还是只是为了做而做?

  3. MRN 页面成功率现在有多少?是如何保证成功率的?

  4. MRN 框架开发中,你在其中的角色是什么?

  5. 现有的 MRN、week 等动态化底层原理是什么?

  6. 有了解过其他公司的动态化方案吗?

  7. Flutter 有了解过吗?有什么不同?

  8. 你对加班怎么看?

2面 - 前端知识

1.所做业务需要应对政策变更,都有什么样的政策变更?

2.除了缩短发版时间,还有什么手段可以快速应对政策变更?

3.有没有类似配置的手段控制业务流程没有?举例说下

4.最近两个项目的方案设计和框架选型,详细介绍下

5.你们是怎么保证 RN 页面加载的性能的?

6.React 渲染 View 到屏幕的过程

需要看 React 的源码过程

7.React 多次 setState 会多次调用吗?

不会。setState 是异步的,多次会合

8.什么情况下多次调用 setState 会出现多次调用?

React 实现壁垒,需要对源码实现足够了解!(有木有,学习源码的正确姿势~)

9.Redux 是怎么与 React 连接起来的?

10.产品思维、技术深度、沟通协作,你觉得哪个是你的优势,举个例子

说的项目管理,最后应该被映射到沟通协作了...

3面 - 技术+HR

【Boss 面】
1.详细说一两个你近期的项目,为什么做、技术方案设计、意义之类的...

2.MRN 初期问题多,为啥你们的动态化方案还选择这个?

本着不重复造轮子的原则

3.RN 怎么实现动态化的?

4.Native 页面跟 RN 页面的优劣对比

5.如果给你一个 App,你如何来选择哪些页面用 Native,哪些用 RN?

6.你觉得你们现在的业务,有哪些技术体系还需要完善的?

7.主动发现业务问题,是通过怎样的方式来发现问题?

8.你之前做 Android,为什么要学习前端?

9.有没有关注一些最新的技术

10.近一年多的绩效,为什么给你这样的绩效?

11.现在的职级、入职时候的职级

12.为什么要换工作?

【HR】
1.介绍下自己的性格特点

2.有什么兴趣爱好

3.看你有跳舞的兴趣爱好,年会能上去跳舞吗?

4.你觉得你的缺点是什么,还有哪些需要提高点的?

5.你觉得阿里能带给你什么?


感谢小伙伴的支持,看到最后啦。努力感谢送福利 字节跳动 GIP 研发团队 Android/iOS 校招提前批超稳通道 / 社招内推实时进度 快快上车~(特别是2021毕业的学弟学妹们抓住机会哦)

文中若有不对的地方,欢迎大家批评斧正,谢谢~

你可能感兴趣的:(2020 - 阿里 Android + 前端面试题及部分答案(拿到 offer))