某度员工从事Android 5年为何还是初级工程师?

无意间在脉脉上看到了某度某位员工的言论,他说安卓没什么技术,没什么难度,插件化、热修复都是业界自己加戏?

在这里插入图片描述
点赞最高的这位网友的说法我很赞同,当我们的项目业务越来越多,性能产生问题时,我们就需要研究底层原理,保证性能,保证崩溃率不飙升。

今天我整理了一些粉丝最近提供的大厂面试题目,来看看你能答上来多少?

2面美团:

面试官问了四大组件的生命周期、Activity启动模式等等;

问了项目总用户量具体多少,日活和周活具体多少,上线crash率降到的千分概率,说几个解决的上线后 crash的修复;

LeakCanary底层原理,其中弱引用如何检测对象没有被引用的;GC的底层原理;

线程池的使用,比如需要开上万个线程,线程池的处理规则;

热修复、插件化与组件化;

性能优化;

怎么处理在线app出现的闪退问题,比如是偶现的那种,怎样查找原因?

如果是报oom,怎么去定位哪里内存泄漏了?

有没有用过kotlin开发…

3面阿里钉钉:

阿里的面试基本上都是边聊边问,根据你的工作经历以及面试过程中的内容进行展开。

面试官先问,你最擅长Android中的哪个方向呢?

我答了插件化、组件化、热修复、React Native,最近也在钻研Flutter,对flutter有一些自己的理解。(我故意这么讲,希望面试官可以多问一下flutter。)

面试官:插件化和热修复有什么区别吗?

我:插件化是把需要实现的模块或功能独立提取出来,减少宿主的规模,需要相应功能时再去加载相应模块;而热修复则是从修复bug的角度出发,不需要二次安装应用、用户无感知的情况下就可以修复已知bug。(这么基础的问题,回答的时候自信满满…图片)

面试官:热修复的核心原理是什么?

我:主要是利用Android类加载机制,把需要修复的类打包成dex文件,把这个修复过的dex文件排在dexElements最前面,ClassLoader在修复过的dex文件加载到类之后就不会再去加载错误的类了。(还好面试前有看过)

面试官:类加载为什么要使用双亲委托机制?

我:…(我记得我看过的来着,一下子想不起来了。)

面试官:jvm和dalvik、art的区别是什么?

我:jvm是基于栈的,dalvik和art是基于寄存器的。(这时候我慌得一比,快顶不住了…)

面试官又追问:那什么是基于栈的虚拟机,什么又是基于寄存器的虚拟机?

我说不知道。(那时完全不懂面试官为什么要问这个)

面试官:art加载类的流程和Dalvik有区别吗?

我:有区别吗?不就是ClassLoader吗?(面试官稍微提了一下机器码。)

后续查资料才知道,原来art水这么深,7.0以前直接编译为机器码。之后又变成混合aot、jit和解释执行了,加载类底层使用classlinker,先从classtable缓存查找,如果没有再从oat文件查找,否则就解释执行
面试官:那art下,热修复的实现上有什么需要注意的地方?

最后一个问题听完之后直接懵逼了…查资料才感觉到面试官其实还是在问:art下类加载的流程。原来aot会生成一个base.art文件,在ClassLoader创建之后就会把base.art中的类注入到缓存中去,所以会导致这些类无法修复。

面试官又问了我遇到的最难的内存优化问题和解决方案;未来三年计划,技术发展纵深的选择。

感觉凉了…

3面小米:

对okhttp的源码解析;用rxjava遇到过哪些坑;

用过最复杂的自定义view和优化处理;

用EventBus遇到的坑;

glide如何检测生命周期;

底层替换热修复和冷启动热修复有什么区别,怎么实现?

常用算法,递归;各种算法空间和时间复杂度;

事件冲突解决;

绘制中MeasureSpec的结构和数据的计算规则;

最近几个系统版本的系统适配做过哪些工作( 不是ui适配)。

大厂招Android高级工程师要求很高,问的东西很深,一般都会问到原理和底层,你必须专精于Android中某一块的知识点,不然面试中对什么知识都是点到即止,肯定是不行

这里给大家分享下之前在阿里内部培训的时候收集到的这份《Android Framework源码开发揭秘》,希望能帮助大家在技术的道路上更进一步,需要完整版的朋友可以文末卡片直接领取

第一章 系统启动流程分析

  • 第一节 Android启动概览
  • 第二节 init.rc解析
  • 第三节 Zygote
  • 第四节 面试题

第二章 Binder解析

  • 第一节 宏观认识Binder
  • 第二节binder的jni方法注册
  • 第三节binder驱动
  • 第四节 数据结构
  • 第五节 启动service_manager
  • 第六节获取service_manager
  • 第七节 addService流程
  • 第八节 Binder面试题全解析

在这里插入图片描述

第三章 Handler解析

  • 第一节 源码分析
  • 第二节 难点问题
  • 第三节Handler常问面试题

第四章 AMS 解析

  • 第一节 引言
  • 第二节 Android架构
  • 第三节 通信方式
  • 第四节 系统启动系列
  • 第五节 AMS
  • 第六节 AMS 面试题解析

第五章 WMS解析

  • 第一节Activity与Window相关概念
  • 第二节 Android窗口管理服务WindowManagerService计算Activity窗口大小的过程分析
  • 第三节Android窗口管理服务WindowManagerService对窗口的组织方式分析
  • 第四节 Android窗口管理服务WindowManagerService对输入法窗口的管理分析
  • 第五节 Android窗口管理服务WindowManagerService对壁纸窗口的管理分析

第六章PKMS Android10.0 源码解读

  • 第一节 前言 PKMS 是什么东西?
  • 第二节 PKMS 概述信息
  • 第三节 PKMS角色位置
  • 第四节 PKMS 启动过程分析
  • 第五节 APK的扫描
  • 第七节 PMS之权限扫描
  • 第八节 PackageManagerService大综合笔记

小伙伴们如果有需要这份《Android Framework源码开发揭秘》,点击下方卡片即可【免费领取】,承诺100%免费

猜你喜欢

转载自blog.csdn.net/m0_59614665/article/details/127410260
今日推荐