态度决定成败:大专毕业的我如何在25岁时拿到了阿里P6的offer?

477 阅读9分钟

你是否和我一样,也曾因为自己的学历低而烦恼?

首先申明我是一个大专生,很烂的一个学校,大学学Android,我什么都没学会,四级考到大三才过,可想我大学成绩有多差。其实我高中小学成绩可以,当年高考与二本线也就差几分,三本没去去了专科,虽然不后悔,但有深深的遗憾。

因为很多公司,尤其是知名公司招聘第一条就是本科以上学历。所以大多数情况下门都进不去的。所以本人绕了一个大大的圈子,历经四年才“真正”进入阿里,享受正式员工的福利待遇。

这些年的经历,本人深深感到身边圈子的重要,因为起点低,身边都是普通的人,自己的视野打不开,连努力方向都不知道。中途想改变,却茫然无力。最后只能一步步去更好的公司,与更优秀的人共事。终于花了四年光阴,极好的运气,赶上了别人的起点。

记得刚毕业的我找了几份工作,做的较长时间的一份工作实在江苏南京,一家普通软件公司APP产品运营。不算专职敲代码,做了半年,发现工资低,没有晋升空间,又没有技术傍身。因此又动了辞职的念头,开始了投递简历之旅。

终于接到了阿里的外包,优酷的工作机会。犹豫了很久,虽然是外包公司,但想着能去更好的公司,与更优秀的人共事。所以还是果断辞职去了。

刚开始的我一直加班,觉得很累,比起身体更劳累其实是心累!

学校的东西在公司根本不够用,写需求时比较吃力,尽管很努力地去想去写了,但是写出来的代码质量自己都觉得差,也被别人怼过几次了。每天压力都很大,很焦虑。

为了留下来,代码写不好,懂得又不多,只能经常向公司老员工请教,人生的发展,离不开贵人的相助。同组的高爷,当时就已经是阿里P8架构师,给了我很多帮助和鼓励,除了在工作中帮助我分析解决问题,还建议我多学习和注重能力提升。

结合高爷的建议,和自身的学习积淀,给大家分享一些学习心得:

关于Java

Java 是 Android App 开发默认的语言, Android Framework 也是默认使用 Java 语言,熟练掌握 Java 语言是 Android 开发者的必备技能。高爷同时还赠送了我几本书,《Java核心技术》、《Java并发编程的艺术》、《深入理解Java虚拟机》。至今翻看这些书都觉得获益匪浅,当然现在这些书我也都搜集到了PDF版本。需要的朋友可以自行前往免费下载。

下载地址:shimo.im/docs/Q6V8xP…

关于kotlin

Google 几年前就开始走 “Kotlin First” 的路线,目前很多官方的文档和 Demo 都是使用 Kotlin 语言作为默认,Kotlin 的重要性不言而喻。

我算是第一波开始跟风学习和接触这项技术的人,现在阿里项目上也在使用Kotlin语言,也算赶上了好的时候。当然中间的学习过程,我也有从培训机构学习和借鉴了很多技术。

下载地址:shimo.im/docs/Q6V8xP…

Android Studio

Android Studio IDE Overview

Android Studio 作为 Android 默认的开发者工具,目前的版本更新已经解决了诸多之前的性能问题,虽然目前对硬件资源的要求仍然比较高,但是一旦你接受了这个设定,真香预警!

AS 主要需要熟悉下面几点

  1. AS 快捷键
  2. AS 插件
  3. AS Profile (内存、CPU、IO、NetWork)

Project Structure — Java/Kotlin/Flutter, XML, .gradle files

熟悉各种项目的目录结构,资源文件、Gradle 文件

Android 基础知识

四大组件

这部分不必做过多的解释,下面列出的就是大家熟悉的 Android 四大组件,Android 开发的基础

  1. Activity — Activity Lifecycle, Tasks & Back Stack
  2. Service
  3. Broadcast Receiver
  4. Content Provider

Intents

  1. Types of Intent - Implicit, Explicit
  2. Intent Filter

Static User Interface

  1. View — Button, ImageView, TextView, EditText, and etc :这是开发中会遇到的常用的组件,许多复杂的布局都是用简单基础的 View 组合而成
  2. ViewGroup - LinearLayout, RelativeLayout, FrameLayout:三大传统布局,适用于不同的场合
  3. ConstraintLayout : Google 新推的布局,目前已经取代 RelativeLayout 成为默认的 App 布局,具体使用可以参考官方文档

Dynamic User Interface

  1. RecyclerView - 列表类的布局首选控件,性能相对 ListView 要好一些,功能也比 ListView 要多一些
  2. ViewPager
  3. Spinner

CustomView

Android 默认的布局很多时候都没法满足设计的需求,这时候就需要自定义 View,你需要掌握下面几个知识点的使用

  1. Canvas
  2. Bitmap
  3. Paint

UI Resources

相比 HardCode,使用资源文件会让代码的可修改性更高

  1. Drawables
  2. String
  3. Styles

Fragments

许多人提倡 App 使用 单 Activity + 多个 Fragment 的组合,可见 Fragment 在开发中的重要性,但是 Fragment 的管理又是一门技术,Fragment 的坑,只能在实际开发中慢慢填平了,不过下面的 Fragment 基础还是要牢固

  1. Fragment Lifecycle
  2. Fragment Manager

Support User Interface

这里列的同样是一些功能组件,需要知道这是什么东西,基本的用法

  1. ProgressBar - 进度条
  2. Dialogs - 弹框
  3. Toast & Snackbar - 提示

Storage

App 开发不免要和文件打交道,文件的读写、存储都是必不可少的,下面列出了几种 Android 中存储相关的知识点

  1. Shared Preferences - 适合存储字段
  2. File Systems - 文件存储
  3. Database — RoomDB - 数据库存储,RoomDB 是 Google 新推出的数据库解决方案(在 AndroidX 中),具体使用可以参考官方文档

Build

Android App 默认使用 Gradle 进行编译,关于 Gradle 的使用必须要熟悉,以及如何区分开发版本和 Release 版本,以及国内特有的多渠道打包技术、以及 ASM 等

  1. Gradle
  2. Debug / Release Configuration
  3. 多渠道打包
  4. ASM

Threading

理解 Thread 非常重要,Android App 只有一个主线程,其余的我们称之为工作线程,我们的很多工作需要再工作线程和主线程直接切换,如何高效创建和释放线程、线程池、线程间通信、Message-Looper-Handler 模型这些知识点都要了熟于心,另外进阶的话 Binder 通信也是需要掌握的知识

  1. Threads
  2. Handler / Looper / Message / MessageQueue
  3. AIDL / Binder

Debugging

这里列举了一些 Debug 的基本手段,实际开发中遇到具体问题的时候一般都会用到,不过有的可能入手难度要高一些,需要花时间去掌握。Debug 工具除了下面这几个还有很多

  1. Memory profiling - MAT,AS Memory Profile
  2. Logging - Log 包含非常丰富的信息,可以帮助我们还原现场
  3. Systrace - Systrace 工具可以查看一段时间内手机系统各个进程的运行状态,具体使用可以参考我博客的 Systrace 系列教程
  4. Exceptions - 各种异常,保证程序的健壮性
  5. Error Handling - Error 是必须要解决的问题,一般会导致 App 直接闪退,需要非常重视

Memory Leak

内存泄漏是一个很大的专题,包括 Java 内容泄漏和 Native 内存泄漏,涉及的知识点非常多,可以单独拿出来做一个大的知识栈。一般来说, Java 内存泄漏会比较好检测和修复,但是 Native 内存泄漏就会比较难。

  1. Detecting and Fixing Memory Leaks - 内存泄漏检测和修复,是一个比较大的工程,可以参考 LeakCanary、Matrix 等开源工具
  2. Context - 使用不当会造成该释放的对象没有释放造成内存泄漏
  3. Native Memory Leaks

3rd Party Library

经典的第三方类库,可以大幅节约我们的开发时间

  1. Image Loading - Glide, Picasso
  2. Dependency Injection - Dagger
  3. Networking - Fast Android Networking Library, Retrofit
  4. MultiThreading - RxJava, Coroutines

Data Format

常见的一些数据保存流格式

  1. JSON — GSON
  2. Flat Buffer
  3. Protocol Buffer

Android Jetpack

Jetpack 是 Google 推出的一套库、工具和指南,可帮助开发者更轻松地编写优质应用。这些组件可帮助您遵循最佳做法、让您摆脱编写样板代码的工作并简化复杂任务,以便您将精力集中放在所需的代码上。Jetpack 包含与平台 API 解除捆绑的 androidx.* 软件包库。这意味着,它可以提供向后兼容性,且比 Android 平台的更新频率更高,以此确保您始终可以获取最新且最好的 Jetpack 组件版本。

  1. Foundation Components — AppCompat, Android KTX, Multidex
  2. Architecture Components — LiveData, ViewModel, DataBinding, Paging, Work Manager, Navigation
  3. Behaviour Components - Download Manager, Media Playback, Notification, Permissions, Preference, Sharing, Slice
  4. UI Component - Animation & Transition, Android Auto, Emoji, Palette, Android TV, Android Wear

Android架构设计模式

  1. MVC架构设计模式:MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写。
  2. MVP架构设计模式:MVC全名是Model View Persenter,MVP由MVC演变而来,是现在主流的开发模式。
  3. MVVM架构设计模式:MVVM全名是Model-View-ViewModel,它本质上就是MVC的改进版。
    各种模型的主要目的都是是分离视图(View)和模型(Model),即将UI界面显示和业务逻辑进行分离。

架构学习手册
下载地址:shimo.im/docs/Q6V8xP…

Unit Testing

  1. Local Unit Testing
  2. Instrumentation Testing

Security

安全方面接触毕竟多的应该是加密、解密、混淆等,毕竟用户数据安全大于一切,不重视这个欧盟会教你做人

  1. Encrypt / Decrypt
  2. Proguard
  3. R8

音视频开发

音视频开发则需要从以下四个方面进行入门学习和提升。

1.多媒体系统

  1. FFmpeg
  2. 流媒体协议
  3. 音视频效果处理
    NDK模块开发资料包

下载地址:shimo.im/docs/Q6V8xP…

专项技术

  1. App 瘦身
  2. MultiDex
  3. 插件化
  4. 推送技术
  5. Crash 统计
  6. 函数式编程
  7. 启动保护
  8. 在线热修复
  9. AOP
  10. React Native
  11. Hybrid
  12. SDK化
  13. 依赖注入
    Android架构资料包

下载地址:shimo.im/docs/Q6V8xP…

作为一个有进取心的 Android 开发者,拥有自己的技术栈和规划非常重要,技术栈确保你有足够的市场竞争力,从而形成护城河;技术规划则可以给你一个明确的学习目标。

喜欢的朋友,别忘了关注+点赞!2020我们一起努力前行吧!