我的大学Android开发学习之路——从开始到微信/支付宝/抖音Offer

Posted 上马定江山

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的大学Android开发学习之路——从开始到微信/支付宝/抖音Offer相关的知识,希望对你有一定的参考价值。

前言

笔者2016年高考考入华中科技大学计算机科学与技术专业。

2017年底(大二寒假)拿到今日头条(字节跳动)深圳研发中心android开发实习生Offer,在深圳研发中心实习至2018年3月。

2018年4月加入新成立的今日头条武汉研发中心实习,2019年5月离职。

2019年春招拿到腾讯(微信)、蚂蚁金服(支付宝)暑期实习Offer,2019年7月加入微信实习。

2019年秋招拿到字节跳动SSP(抖音)、微信(转正)、猿辅导SP(斑马英语)校招Offer,最终选择留在微信,目前已转正。

在我的大学四年中,有四年的Android开发经历,两年半的实习经历,有两款Google Play上架的应用,最重要的是最后拿到了自己满意的Offer,也算是给大学生活画上一个比较完整的句号了。

写这篇文章的目的在于,一是为了总结自己的大学四年;二是给有着和我一样的目标的同学们一些参考和建议(包括对应届生比较实用的面经),希望可以给读到这篇文章你们一些帮助,希望你们也可以达到自己的目标或是在追求更高的目标的路上更进一步,也算是作出一些微小的贡献。

技术学习与个人成长

大学四年的经历很长,总归不是三言两语就能表达清楚的,每个人所处的阶段不同可能感兴趣的内容也不同,这篇文章我着重分享基础知识的重要性及如何学习。

基础知识主要指一些计算机科学中较为基础、通用的知识,包括被称为“四大基础”的计算机组成原理、算法与数据结构、操作系统、计算机网络和其他例如C语言、汇编、数据库、计算机体系结构、编译原理等。

可以发现这些都为计算机专业开设的课程,具体学校、学院会根据侧重不同开设数电、模电等偏底层的课程或是游戏开发、面向对象编程等上层课程,这部分课程可以根据兴趣选择深入程度,优先级会比前面这些通用的课程低一些。

在回答应该花多少精力学习基础知识时,我的回答通常是四个字“往死里学”。基础知识的重要性可以体现在以下几个方面:

基础知识决定了学习能力和深度

整个计算机的知识体系其实很像计算机网络里面的分层模型,每一层都只关注这一层应该做的事情,在低一层提供的抽象的基础之上进行开发的同时为高一层提供抽象接口。

这就像滚雪球的过程,对已有知识的充分理解,可以帮助你在能更加容易地学习新的知识的同时不断巩固和加深已有的知识,最终雪球越滚越快也会越来越大。

计算机的学习曲线就是一条开始缓慢,而后不断提速直至达到一个人理解能力的极限的曲线,基础知识扎实的同学的学习速度和理解能力会远远超出基础知识不牢靠的同学,拉开越来越大的差距。

更强的学习能力可以带来更深的技术深度,但基础知识对技术深度的影响还不止于此。

对于Android开发而言:

技术深度一部分体现在对Android系统底层的理解上,理解了底层的运作才能对应用的行为有更全面的了解、解决一些应用层面很难理解的问题,才能根据底层的原理进行针对性的性能优化。而Android底层就是我们所熟悉的Linux,对于操作系统的认识在这里完全适用,另外,也需要有非常多的基础知识才能理解应用的运行时环境JVM,知道其是如何运行我们的应用代码并作出优化的。

技术深度的另一部分可以体现在对软件架构的设计能力上,而操作系统、计算机网络、数据库系统等课程中的设计理念和原则都是非常经典和优秀的,对这些系统设计的学习可以潜移默化地提升我们的软件设计能力。当时读到Android系统源码中对于输入事件的处理代码时,突然发现这不就是组成原理中CPU流水线的设计吗,后来来微信以后也在代码中发现了类似的设计,这就是优秀设计的魅力。

基础知识是面试时的重中之重

在我所经历的面试中,越是能力要求高的公司/岗位,对于基础知识的考察就越重视。很多人不能理解,基础知识大家都知道会考察,考察的问题也大同小异,为什么这些面试官还会不厌其烦地问这些问题?

对于每个刚从大学毕业、想从事开发岗的候选人来说,无论是否是所谓科班出身,通用的基础知识一定是衡量大学中对于计算机知识的掌握程度的最佳标准。一是所有人都会去学,不会出现刚好问到没接触过的方向的情况;二是对于基础知识的考察非常容易分辨真实水平,虽然面经网上一抓一大把,问题也就那么几个,但对于基础知识的掌握程度更多的靠的是前面所说的,不同知识间的相互印证和加深。

举个例子,“进程和线程的区别”是操作系统的一道非常经典的面试题,很多人都能轻松背出这个标准答案:“进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位”,但深入一步问“操作系统为进程分配了哪些资源?”,“操作系统为什么要进行线程调度,是如何进行的呢?”,这就不是大多数人能答得出来的了,更不用说面试官可以一步步深挖,直到知道面试者的认识极限。

为了提前对面试者的基础知识进行筛选和节省面试投入,现在各个大厂都会进行笔试进行考察,也非常流行进行交叉面试,让不是这个方向的面试官考察通用能力。事实证明,基础知识牢靠的面试者会非常容易得到面试官的好评,通过率也往往非常高,毕竟语言和具体的开发方向工作后都可以慢慢学习,唯独基础知识是必须在大学中才能学好的。明白了这一点,又怎会不去重视大学中基础知识的学习呢?

如何学习基础知识

花了这么大的篇幅介绍基础知识的重要性,还是想让大家从心里认同基础知识的价值,这是开始学习的第一步:弄清楚为什么要学,这样才不至于在这个过程中感到迷茫和动摇。下面我想分享一下这些年来,我对于技术一些归纳和总结,和自己对作为一名Android高级开发者需要掌握那些技能的笔记分享。

《高级UI》

UI这块知识是现今使用者最多的。当年火爆一时的Android入门培训,学会这小块知识就能随便找到不错的工作了。

不过很显然现在远远不够了,拒绝无休止的CV,亲自去项目实战,读源码,研究原理吧!

《Framework精编内核解析》

主要内容包含:

  • 深入解析Binder
  • 深入解析Handler
  • Dalvik VM 进程系统
  • 深入解析 WMS
  • PackagerManagerService

《360°全方面性能调优》

内容主要包含一下几点:

1、设计思想与代码质量优化

2、程序性能优化

  • 启动速度与执行效率优化
  • 布局检测与优化
  • 内存优化
  • 耗电优化
  • 网络传输与数据储存优化
  • APK大小优化

3、开发效率优化

  • 分布式版本控制系统Git
  • 自动化构建系统Gradle

4、项目实战

  • 启动速度
  • 流畅度
  • 抖音在APK包大小资源优化的实践
  • 优酷响应式布局技术全解析
  • 网络优化
  • 手机淘宝双十一性能优化项目揭秘
  • 高德APP全链路源码依赖分析
  • 彻底干掉OOM的实战经验分享
  • 微信Android终端内存优化实践

《Android第三方框架》

本篇内容要点(1042页)

  • 热修复设计
  • 插件化
  • 组件化框架设计
  • 图片加载框架
  • 网络请求框架
  • RXJava 响应式编程框架设计
  • IOC 架构设计
  • Android架构组件Jetpack

《NDK模块开发》

NDK是原生开发工具包,这套工具允许Android使用C/C++代码,并提供了众多的平台库。

主要内容包含:

  • NDK 模块开发
  • JNI 模块
  • Native 开发工具
  • Linux 编程
  • 底层图片处理
  • 音视频开发
  • 机器学习

《Jetpack架构组件从入门到精通》

  • Android Jetpack - Navigation
  • Android Jetpack - Data Binding
  • Android Jetpack - ViewModel & LiveData
  • Android Jetpack - Room
  • Android Jetpack - Paging
  • Android Jetpack - WorkManger
  • Android Jetpack架构组件之Lifecycle
  • Android Jetpack Compose 最全上手指南

《Flutter技术进阶》

  • Flutter跨平台开发概述
  • Windows中Flutter开发环境搭建
  • 编写你的第一个Flutter APP
  • Flutter Dart语言系统入门

《2020大厂面试高频知识点》

一、图片
二、网络和安全机制
三、数据库
四、插件化、模块化、组件化、热修复、增量更新、Gradle
五、架构设计和设计模式
六、性能优化
七、Android Framework
八、Android优秀三方库源码


所有资料已经全部上传至开源项目【GitHub】,有需要的朋友自取。

遇到问题

对于这些基础知识的学习过程并不轻松,时常会碰到不能理解的知识点,我的习惯是一般会先跳过这些点,有些是知识点的编排问题导致后面才会解释的概念提前出现,看到后面再回过头来自然就能理解了;另一些情况确实是书籍讲解的不够细致,比较直接的办法是直接搜索相关文章、博客、问题等帮助理解(有些专门针对于一个技术细节的文章讲得会比书中详细得多),麻烦一点的话就是找其他书的对应部分做参照,如果还没有找到答案,我觉得大概率这个问题其实并不重要,有时候过分关注于细节就是一种浪费。

一方面是不懂的地方可以暂时跳过,另一方面是如果一本书读完还觉得云里雾里,完全没了解到这门课程的内容,那么绝对不能就此罢休,可以换个课程学一段时间再回过头来再细读一遍,或者干脆就换本书继续学。还是前面所说的,基础知识值得我们“往死里学”。

最后

最后的最后,还是要强调一下“身体是革命的本钱”这句话,身体的健康是这一切的一切的前提,失去了健康意味着人生就此变换了方向,以前做的大部分努力都将付之一炬,这是绝大部分人所承受不起的。

知易行难,与君共勉。

以上是关于我的大学Android开发学习之路——从开始到微信/支付宝/抖音Offer的主要内容,如果未能解决你的问题,请参考以下文章

微信公众平台开发入门教程(PHP从入门到精通)

开发之路

Android开发学习之路-二维码学习

如何实现从Android第三方平台推送微信公众号

从0开始的CNN学习之路-新疆大学智能制造现代产业学院

从初级“码农”到高级“架构”,我的成长之路(Java向)