其他分享
首页 > 其他分享> > 2021年春招Android面试题,系列篇

2021年春招Android面试题,系列篇

作者:互联网

# 从初中级到高级,移动端程序员的进阶宝典 **想要成为一名优秀的Android开发,你需要一份完备的 知识体系,在这里,让我们一起成长为自己所想的那样。** 下面我们就以 Android 开发为例,从硬技能和软技能两方面,梳理大前端趋势下移动端程序员从初级到高级进阶所需的技能点,并且推荐一些实用的书籍资料。 **(一) 硬技能:专业的技术知识** **1. Java / Kotlin开发语言** **(1) Java** **常用数据结构:**ArrayList、Vector、CopyOnWriteArrayList、HaspMap、ConcurrentHashMap、HashTable 等使用场景。 **JVM 虚拟机**包括 Java 内存管理,GC 垃圾回收机制,类加载机制。推荐书籍:《深入理解 Java 虚拟机 JVM 高级特性与***实践》。 **多线程编程,**包括线程池,锁机制,线程同步 。推荐书籍:《Java 并发编程实战》和《Java 多线程编程核心技术》。 **AOP 编程实现**,包括 JDK 动态代理实现,ASM 直接操作字节码、CGLIB 实现,其原理封装了 ASM,使用更方便。 **Javassist**:在字节码加载前直接修改需要切入的方法,以及注解处理器 APT,这在 Android 中开源的库应用较多,比如 DataBinding , ButterKnife, EventBus3 等等。 **异常处理 Exception**,包括检查性异常、运行时异常处理。 **IO 流相关**,包括堵塞型 IO 和非堵塞型 IO。 **Java 的一些高性特级**,比如反射、代理、泛型、枚举、正则表达式等等;同时了解一下 jdk1.8,1.9,1.10 等新特性。相关书籍比较多,推荐**《Thinking in Java》**和**《Effective Java》**。 **(2) Kotlin** Kotlin 是一个基于 JVM 的新编程语言,在 Google IO 2017 中被 Google 宣布成为 Android 官方开发语言。 **Kotlin 有哪些优点?** **①简洁性: **提供了很多标准函数,大大减少样板代码的数量。 **②安全性:**避免空指针异常等错误。 **③互操作性:**充分利用 JVM、Android 和浏览器的现有库。 **④工具友好: **可用任何 Java IDE 或者使用命令行构建。 在 Kotlin 中要**树立函数式编程思想**。把函数理解为一个值到另一个值的映射关系,以函数作为单元来处理各个业务逻辑,函数既可以做参数,也可以作为返回值。多使用 Kotlin 提供的标准函数,比如 let、run、with、apply、also、 Lambda 表达式。尽量使用闭包和高阶函数。 Kotlin 的另一个突出特点是**协程**,为设计异步、非阻塞的程序提供了强大的范式。协程是一种轻量级的线程,它提供避免阻塞且更廉价可控的操作: 协程挂起。将复杂异步操作放入底层库中,程序逻辑可顺序表达,以此简化异步编程。 **简单说下 Kotlin/Native,它的设计初衷是支持在非 JVM 虚拟机平台环境的编程,如 iOS、嵌入式平台等,同时支持与 C 互操作。推荐书籍:** **《Kotlin 实战》**。 **2. Android 进阶技术点** **进程相关**,包括 App 进程原理以及 AIDL 原理。 **性能优化**,包括:内存,cpu,耗电量、网络请求、UI 布局、线程、数据库等优化方法以及优化工具的使用。 **Android 源码相关**,包括:Binder 机制,Activity 启动流程,Handler 原理,AMS ,PMS,WMS 原理,View 的绘制流程,Touch 事件传递机制等等。 **编译打包流程**,从 java/kotlin 源码到最终形成 APK 的过程。 **热修复的实现原理**,目前热修复框架的种类繁多,常见的包括底层替换、类加载和 Instant Run 方案。 **逆向工程原理**,主要是为了防止 apk 被反编译破解,以及了解 apk 加固方案。 **插件化**,目前方案同样很多,主流的技术实现是 Hook 方式,注册 Activity 进行占坑,使用占坑 Activity 通过 AMS 验证,还原插件 Activity,其他组件的原理也大致类似。 **NDK 开发**,调用 JNI 以及回调 Java 的方式。 **自定义控件**,需要注意 onMeasure,onLayout,onDraw 的调用时机,以及 Touch 事件分发机制。 **动画 View Animation**,视图动画在很早的 Android 版本系统中就已经提供了,只能被用来设置 View 的动画。 **属性动画 Property Animation**,只对 3.0 以上版本,可以设置给任何 Object,包括还没有渲染到屏幕上的对象。这种动画是可扩展的,可自定义任何类型和属性的动画。 **Webview 中 Native JS 交互**,常用的 JSBridge 等。 **Gradle 的特性以及 DSL 语法**,比如 Gradle Transform API 的使用,它允许第三方插件在 class 文件转为 dex 文件前操作编译好的 class 文件。利用这一特性,我们可以在代码编译阶段实现代码注入或者代码修改,这也是很多埋点技术和热修复技术的基础。 **安全性:**HTTPS 通信原理,数据加密方式,包括 MD5,RSA 等,webview 安全性,代码混淆,数据验签,组件通信安全,服务器通信。 **CI 持续集成**:Jenkins ,Gitlab CI 等搭建持续集成开发工具。 **Sersor 传感器**:包括陀螺仪,加速传感器,方向传感器,重力传感器,光线传感器等。 **Android 开发国际化**。 **ART 和 Dalvik 虚拟机的区别**,主要是 AOT,Ahead-Of-Time 预编译。 **熟悉 DEX 文件结构。** **单元测试**:JUnit4,AndroidJUnitRunner,Mockito 框架的使用。 **自动化测试**:Monkey / Monkey Runner ,Espresso ,UI Automator 等。 **掌握模块化开发方式**:主要注意分好层、模块间跳转通信。 **代码重构能力**,推荐书籍:**《重构改善既有代码的设计》、《重构与模式》** **Google 动态化框架 App Bundles**。 **Jetpack**,Google 推出的新一代组件、工具和架构指导,旨在加快 Android 应用开发速度。Jetpack 主要分为 4 部分: ![img](http://www.icode9.com/i/li/?n=2&i=images/20210706/1625574344391533.jpg) 大前端趋势下移动端程序员要凉?这些进阶技能助你逆袭 **Android开发常用的第三方库:** 响应式编程:RxJava、RxAndroid,Google 的Agera 网络库:包括Retrofit,OkHttp,Volley 图片:Fresco,Gilde,Picasso 依赖注入:Dagger2 数据库:Realm,ORMLite,GreenDAO,ObjectBox 数据总线:EventBus,otto 内存泄漏检测工具 LeakCanary 等 *各个技能点如果详细拓展开,会形成相当庞杂的一张知识图谱,建议大家自行梳理总结消化。* **3. OOAD 和设计模式** 在架构设计方面,首先要掌握的就是面向对象的开发和设计。具体知识点包括: **面向对象三大特性:**封装,继承,多态。 **五大基本原则(SOLID 原则)**,单一职责原则,开放封闭原则,里氏替换原则,依赖倒置原则,接口分离原则。 **23 种设计模式**:常用的有工厂、单例、适配器、桥接、组合、代理、命令、观察者、策略、状态模式等等。 **4. APP架构设计** 包括 MVC、MVP、MVVM、MVI、VIPER、Clean Architecture、Flux。目前除了 MVC 外 MVP 和MVVM 用得比较多,具体的架构设计还要结合业务去考虑。 **(二) 软技能** 人在职场,行走江湖,想进阶高级程序员光有技术深度是不够的,还需要掌握众多软技能,注意综合职业素养的磨练。有很多人一开始重视程度不足,在职场后半段的上升过程中,容易遇到瓶颈。 下面是我个人总结出的高级程序员必备软技能,供大家参考。 **1. 快速学习能力:**包括技术深度和广度,能够不断探究新技术,不断学习。 **2. 沟通能力:**加强表达、阅读、编写能力,即使在技术发达的今天也绝不会过时。因为任何方式的沟通在企业内部都是非常有必要的。 **3. 团队协作能力:**开发人员很容易陷入孤立的人际交往状态,但开发工作永远都不可能是一个人完成,只有成员真正能融入团队内,顺利与其他同事沟通合作,才能体现出其真正的价值,被列为未来职位晋升候选人的几率也更大。 **4. 时间管理能力:**可以参考时间管理「四象限法则」,有重点地把精力和时间集中用于处理重要但不紧急的工作,这样可以做到未雨绸缪。 ![img](http://www.icode9.com/i/li/?n=2&i=images/20210706/1625574344264659.jpg) 大前端趋势下移动端程序员要凉?这些进阶技能助你逆袭 **5. 影响力:**一方面是业务影响力,另一方面是技术影响力。其中,提高技术影响力的方式包括:多参与技术分享,把积累的知识进行总结和传播;参加技术方案评审,把技术经验分享出去;帮助新同学解决技术问题;在博客、Github、StackOverflow 等平台上对外分享。 **6. 文档编写能力:** **代码注释**。很多程序员很少写注释,或者注释过多,都是不合适的。多参考开源项目的注释规范。 **编写技术设计文档**。包括流程图,类图,功能时序图等等。 **最后附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题**?(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。) ![](http://www.icode9.com/i/li/?n=2&i=images/20210706/1625574345741605.jpg) 面试成功其实是必然的,因为我做足了充分的准备工作,包括刷题啊,看一些Android核心的知识点,看一些面试的博客吸取大家面试的一些经验,**下面这份PDF是我翻阅了差不多1个月左右一些Android大博主的博客从他们那里取其精华去其糟泊所整理出来的一些Android的核心知识点,** 全部都是精华中的精华,我能面试到现在资深开发人员跟我整理的这本Android核心知识点有密不可分的关系,在这里本着共赢的心态分享给各位朋友。 ![](http://www.icode9.com/i/li/?n=2&i=images/20210706/1625574345498231.jpg) 这份PDF囊括了JVM,Java集合,Java多线程并发,Java基础,生命周期,微服务, 进程,Parcelable 接口,IPC,屏幕适配,线程异步,ART,架构,Jetpack,NDK开发,计算机网络基础,类加载器,Android 开源库源码分析,设计模式汇总,Gradle 知识点汇总...... 由于篇幅有限,就不做过多的介绍,大家请自行脑补,需要这份Android核心知识点及大厂面试题答案的朋友 * **[点击这里即可免费获取](https://docs.qq.com/doc/DSkNLaERkbnFoS0ZF)**

标签:知识点,面试题,Java,包括,Kotlin,年春招,Android,技能
来源: https://blog.51cto.com/u_15285976/2994258