前言

现在几乎每个it公司都在开发移动产品,我最早知道Android还是在13年成都某学院上大学的时候,从新闻上知道有这么一家公司,创始人安迪·鲁宾很有名,但安卓到底是做什么的,我并没有关注。

到2014年毕业的时候,Android已经发展到了4.4 版本,百度了一下Android,知道了(应用)开发采用的是Java语言。我当时学过 C,C++,对java有些了解,从成都辗转来到北京,找到的工作正是开发一款Android应用(生活服务类)。这时我有了一个HTC的安卓最新版手 机。

现在做Android移动开发已经有六年时间,从一个什么都不懂的小程序员到现在的项目经理,其中甘苦自知,对Android开发和对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 部分:

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.时间管理能力

可以参考时间管理「四象限法则」,有重点地把精力和时间集中用于处理重要但不紧急的工作,这样可以做到未雨绸缪。

5.影响力

一方面是业务影响力,另一方面是技术影响力。其中,提高技术影响力的方式包括:多参与技术分享,把积累的知识进行总结和传播;参加技术方案评审,把技术经验分享出去;帮助新同学解决技术问题;在博客、Github、StackOverflow 等平台上对外分享。

6.文档编写能力

代码注释。很多程序员很少写注释,或者注释过多,都是不合适的。多参考开源项目的注释规范。

编写技术设计文档。包括流程图,类图,功能时序图等等。

此外推荐一本书:《软技能——代码之外的生存指南》

文末

我总结了一些Android核心知识点,以及一些最新的大厂面试题、知识脑图和视频资料解析。

需要的小伙伴私信【学习】我免费分享给你,以后的路也希望我们能一起走下去。(谢谢大家一直以来的支持,需要的自己领取)

直接点击下方二维码也可以领取哦!

Android学习PDF+架构视频+面试文档+源码笔记

部分资料一览:

  • 330页PDF Android学习核心笔记(内含8大板块)

  • Android学习的系统对应视频

  • Android进阶的系统对应学习资料

  • Android BAT大厂面试题(有解析)

图片转存中…(img-jsIE8Ws0-1629512030454)]

  • Android学习的系统对应视频

[外链图片转存中…(img-jUiYIp5v-1629512030455)]

  • Android进阶的系统对应学习资料

[外链图片转存中…(img-canESlrh-1629512030456)]

  • Android BAT大厂面试题(有解析)

2021年“金三银四”来袭!2021年阿里+头条+腾讯大厂Android笔试真题,含答案解析相关推荐

  1. 从投递到拿到offer,这份Android面试秘籍一文全解,2021年阿里+头条+腾讯大厂Android笔试真题

    切勿答非所问,偷换概念.当面试官提出一个你并不是很了解的问题时候,即使冷场也不要答非所问,进行偷换概念.因为面试最讲究的就是真诚二字.你这样做只会加深面试官对你的厌恶. 切勿侃侃而谈.有很多人在面试时 ...

  2. 苦战金三银四:580道最全面的BATJ大厂Java面试真题分享

    一.Java SE(答案见文末) 1.Java基础 一个十进制的数在内存中是怎么存的? Java支持的数据类型有哪些?什么是自动拆装箱? int 和 Integer 有什么区别 ? 什么时候使用int ...

  3. 2021年“金三银四”来袭!java修改json文件

    第一个 分布式:限流 1.1 ZooKeeper+Nginx面试常备题(附答案) ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Ha ...

  4. 2021年“金三银四”来袭!写给即将正在找工作的Android攻城狮,全套教学资料

    前言 随着移动网络的不断升级,客户端的网络传输由3G进化到Wifi.4G.5G,且Wifi场景越来越多.虽然网络环境在变好,但也对网络的应用提出了更高的要求,会发现很多大厂都十分重视网络指标,如果技术 ...

  5. 二位四进制计数器_金三银四还在看JVM这一块?看完这篇万字JVM面试解析就够了...

    金三银四你必备的学习笔记 Java面试核心知识点笔记+高级架构面试知识点整理+互联网Java工程师必备的1080道面试解析​shimo.im Java内存区域 说一下 JVM 的主要组成部分及其作用? ...

  6. 金三银四!95后阿里P7晒出工资单:狠补了这个,真香...

    金三银四!最近一哥们跟我聊天装逼,说他最近从阿里跳槽了,我问他跳出来拿了多少?哥们表示很得意,说跳槽到新公司一个月后发了工资,月入5万多,表示很满足!这样的高薪资着实让人羡慕,我猜这是税后的薪资,税前 ...

  7. 备战金三银四,2021最全100道高频iOS面试题分享上(含答案)

    原作者:执笔续春秋 iOS面试题 本面试题为个人使用版本,如后续流传出去,请转发的朋友务必注释一下,答案正确性有待商榷,本人的答案不代表权威,仅仅是个人理解. 文章内部有写混乱,将就着看吧.另外大部分 ...

  8. 2021备战金三银四血拼一波算法:字节+百度,java编程教程视频

    ======== 一面问了项目,算法题:一个数组里只有0和1,把0换到1前面,不能使用统计次数的方法.扩展:如果有0,1,2三个数咋办? 二面项目,算法题:无向图的迪杰斯特拉算法实现. 算法血拼:&l ...

  9. 20W字纯手打Java并发学习笔记,助力你金三银四,决战春招,必进大厂

    假如阿里给了你这个机会,你却卡在三面,你会不会懊恼? 假如阿里真的让你通过,只需要你把这一块技能的底层原理摸透,你学不学? 我有一个朋友,他小厂背景.15年毕业.普通学校,这看起来确实没什么战斗力,但 ...

最新文章

  1. 机器学习(MACHINE LEARNING) 【周志华版-”西瓜书“-笔记】 DAY16-强化学习
  2. 674 Longest Continuous Increasing Subsequence(每日一题)
  3. boost::synchronized_value相关的测试程序
  4. Spark Streaming
  5. 【C】Natasha 插件编程
  6. Razor Generator
  7. centos6.5安装mongodb2.6
  8. ❤️六W字《计算机基础知识》(六)(建议收藏)❤️
  9. 频率法:数组排序的另一种思路
  10. Android Menu
  11. 测试睡眠的软件是,MOORING睡眠检测
  12. 永恒之蓝——windows server 2003 漏洞
  13. 影像自动解译_遥感图像解译
  14. Python数据可视化Matplotlib学习
  15. 三国志战略版:登庸令队伍_貂蝉与贾诩的武锋组合
  16. 史上最详细的LXR安装介绍
  17. 如何找到共享的打印机
  18. Jiangsheng的CSDN Digest(March 4, 2006)
  19. 路由器或交换机密码忘了——带你修改路由器+交换机密码
  20. FIR滤波器和IIR滤波器的区别和选择

热门文章

  1. 链路追踪-Google-Dapper论文翻译总结
  2. 随机过程 更新过程(下)
  3. Arduino 编程 - LED灯闪烁
  4. C++实现鼠标手写+自绘按钮
  5. 牛客 - 统计每个月兔子的数量
  6. 一文讲透肿瘤微生物组研究怎么做
  7. python爬虫简单实例-爬取17K小说网小说
  8. 老板:为什么你们的软件迟迟上不了线?
  9. Java计算机毕业设计大学生科研管理系统的设计与实现源码+系统+数据库+lw文档
  10. win10计算机扫描,win10电脑哪里添加扫描仪?win10电脑添加扫描仪的方法