ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

安卓未来路在何方?附面试答案

2021-07-01 23:58:08  阅读:169  来源: 互联网

标签:Java ## Kotlin 安卓 编程 技术 面试 路在何方 Android


**那么在市场紧缩以及大前端的趋势下,我们移动端程序员如何突破职业瓶颈,保持个人的核心竞争力呢?** # 一、硬技能:专业的技术知识 ## 1.Java / Kotlin开发语言 ### 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》。 ### 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 部分: ![](http://www.icode9.com/i/li/?n=2&i=images/20210701/1625151694204284.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.时间管理能力 可以参考时间管理「四象限法则」,有重点地把精力和时间集中用于处理重要但不紧急的工作,这样可以做到未雨绸缪。 ![](http://www.icode9.com/i/li/?n=2&i=images/20210701/1625151694573088.jpg) ## 5.影响力 一方面是业务影响力,另一方面是技术影响力。其中,提高技术影响力的方式包括:多参与技术分享,把积累的知识进行总结和传播;参加技术方案评审,把技术经验分享出去;帮助新同学解决技术问题;在博客、Github、StackOverflow 等平台上对外分享。 ## 6.文档编写能力 **代码注释**。很多程序员很少写注释,或者注释过多,都是不合适的。多参考开源项目的注释规范。 **编写技术设计文档**。包括流程图,类图,功能时序图等等。 此外推荐一本书:**《软技能——代码之外的生存指南》** ![](http://www.icode9.com/i/li/?n=2&i=images/20210701/1625151694358584.jpg) # ### 最后 简历首选内推方式,速度快,效率高啊!然后可以在拉钩,boss,脉脉,大街上看看。简历上写道熟悉什么技术就一定要去熟悉它,不然被问到不会很尴尬!做过什么项目,即使项目体量不大,但也一定要熟悉实现原理!不是你负责的部分,也可以看看同事是怎么实现的,换你来做你会怎么做?做过什么,会什么是广度问题,取决于项目内容。但做过什么,达到怎样一个境界,这是深度问题,和个人学习能力和解决问题的态度有关了。大公司看深度,小公司看广度。大公司面试你会的,小公司面试他们用到的你会不会,也就是岗位匹配度。 选定你想去的几家公司后,先去一些小的公司练练,学习下面试技巧,总结下,也算是熟悉下面试氛围,平时和同事或者产品PK时可以讲得头头是道,思路清晰至极,到了现场真的不一样,怎么描述你所做的一切,这绝对是个学术性问题! 面试过程一定要有礼貌!即使你觉得面试官不尊重你,经常打断你的讲解,或者你觉得他不如你,问的问题缺乏专业水平,你也一定要尊重他,谁叫现在是他选择你,等你拿到offer后就是你选择他了。 金九银十面试季,跳槽季,整理面试题已经成了我多年的习惯!**在这里我和身边一些朋友特意整理了一份快速进阶为Android高级工程师的系统且全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。** 附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。) ![](http://www.icode9.com/i/li/?n=2&i=images/20210701/1625151695897293.jpg) **本文在开源项目:【[GitHub](https://github.com/a120464/Android-P7/blob/master/Android%E5%BC%80%E5%8F%91%E4%B8%8D%E4%BC%9A%E8%BF%99%E4%BA%9B%EF%BC%9F%E5%A6%82%E4%BD%95%E9%9D%A2%E8%AF%95%E6%8B%BF%E9%AB%98%E8%96%AA%EF%BC%81.md) 】中已收录,里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…**

标签:Java,##,Kotlin,安卓,编程,技术,面试,路在何方,Android
来源: https://blog.51cto.com/u_15291419/2966463

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有