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

📅 2026/8/27 12:02:46
我的大学Android开发学习之路——从开始到微信/支付宝/抖音Offer
前言笔者2016年高考考入华中科技大学计算机科学与技术专业。2017年底大二寒假拿到今日头条字节跳动深圳研发中心Android开发实习生Offer在深圳研发中心实习至2018年3月。2018年4月加入新成立的今日头条武汉研发中心实习2019年5月离职。2019年春招拿到腾讯微信、蚂蚁金服支付宝暑期实习Offer2019年7月加入微信实习。2019年秋招拿到字节跳动SSP抖音、微信转正、猿辅导SP斑马英语校招Offer最终选择留在微信目前已转正。在我的大学四年中有四年的Android开发经历两年半的实习经历有两款Google Play上架的应用最重要的是最后拿到了自己满意的Offer也算是给大学生活画上一个比较完整的句号了。写这篇文章的目的在于一是为了总结自己的大学四年二是给有着和我一样的目标的同学们一些参考和建议包括对应届生比较实用的面经希望可以给读到这篇文章你们一些帮助希望你们也可以达到自己的目标或是在追求更高的目标的路上更进一步也算是作出一些微小的贡献。技术学习与个人成长大学四年的经历很长总归不是三言两语就能表达清楚的每个人所处的阶段不同可能感兴趣的内容也不同这篇文章我着重分享基础知识的重要性及如何学习。基础知识主要指一些计算机科学中较为基础、通用的知识包括被称为“四大基础”的计算机组成原理、算法与数据结构、操作系统、计算机网络和其他例如C语言、汇编、数据库、计算机体系结构、编译原理等。可以发现这些都为计算机专业开设的课程具体学校、学院会根据侧重不同开设数电、模电等偏底层的课程或是游戏开发、面向对象编程等上层课程这部分课程可以根据兴趣选择深入程度优先级会比前面这些通用的课程低一些。在回答应该花多少精力学习基础知识时我的回答通常是四个字“往死里学”。基础知识的重要性可以体现在以下几个方面基础知识决定了学习能力和深度整个计算机的知识体系其实很像计算机网络里面的分层模型每一层都只关注这一层应该做的事情在低一层提供的抽象的基础之上进行开发的同时为高一层提供抽象接口。这就像滚雪球的过程对已有知识的充分理解可以帮助你在能更加容易地学习新的知识的同时不断巩固和加深已有的知识最终雪球越滚越快也会越来越大。计算机的学习曲线就是一条开始缓慢而后不断提速直至达到一个人理解能力的极限的曲线基础知识扎实的同学的学习速度和理解能力会远远超出基础知识不牢靠的同学拉开越来越大的差距。更强的学习能力可以带来更深的技术深度但基础知识对技术深度的影响还不止于此。对于Android开发而言技术深度一部分体现在对Android系统底层的理解上理解了底层的运作才能对应用的行为有更全面的了解、解决一些应用层面很难理解的问题才能根据底层的原理进行针对性的性能优化。而Android底层就是我们所熟悉的Linux对于操作系统的认识在这里完全适用另外也需要有非常多的基础知识才能理解应用的运行时环境JVM知道其是如何运行我们的应用代码并作出优化的。技术深度的另一部分可以体现在对软件架构的设计能力上而操作系统、计算机网络、数据库系统等课程中的设计理念和原则都是非常经典和优秀的对这些系统设计的学习可以潜移默化地提升我们的软件设计能力。当时读到Android系统源码中对于输入事件的处理代码时突然发现这不就是组成原理中CPU流水线的设计吗后来来微信以后也在代码中发现了类似的设计这就是优秀设计的魅力。基础知识是面试时的重中之重在我所经历的面试中越是能力要求高的公司/岗位对于基础知识的考察就越重视。很多人不能理解基础知识大家都知道会考察考察的问题也大同小异为什么这些面试官还会不厌其烦地问这些问题对于每个刚从大学毕业、想从事开发岗的候选人来说无论是否是所谓科班出身通用的基础知识一定是衡量大学中对于计算机知识的掌握程度的最佳标准。一是所有人都会去学不会出现刚好问到没接触过的方向的情况二是对于基础知识的考察非常容易分辨真实水平虽然面经网上一抓一大把问题也就那么几个但对于基础知识的掌握程度更多的靠的是前面所说的不同知识间的相互印证和加深。举个例子“进程和线程的区别”是操作系统的一道非常经典的面试题很多人都能轻松背出这个标准答案“进程是操作系统资源分配的基本单位而线程是任务调度和执行的基本单位”但深入一步问“操作系统为进程分配了哪些资源”“操作系统为什么要进行线程调度是如何进行的呢”这就不是大多数人能答得出来的了更不用说面试官可以一步步深挖直到知道面试者的认识极限。为了提前对面试者的基础知识进行筛选和节省面试投入现在各个大厂都会进行笔试进行考察也非常流行进行交叉面试让不是这个方向的面试官考察通用能力。事实证明基础知识牢靠的面试者会非常容易得到面试官的好评通过率也往往非常高毕竟语言和具体的开发方向工作后都可以慢慢学习唯独基础知识是必须在大学中才能学好的。明白了这一点又怎会不去重视大学中基础知识的学习呢如何学习基础知识花了这么大的篇幅介绍基础知识的重要性还是想让大家从心里认同基础知识的价值这是开始学习的第一步弄清楚为什么要学这样才不至于在这个过程中感到迷茫和动摇。下面我想分享一下这些年来我对于技术一些归纳和总结和自己对作为一名Android高级开发者需要掌握那些技能的笔记分享。《高级UI》UI这块知识是现今使用者最多的。当年火爆一时的Android入门培训学会这小块知识就能随便找到不错的工作了。不过很显然现在远远不够了拒绝无休止的CV亲自去项目实战读源码研究原理吧《Framework精编内核解析》主要内容包含深入解析Binder深入解析HandlerDalvik VM 进程系统深入解析 WMSPackagerManagerService《360°全方面性能调优》内容主要包含一下几点1、设计思想与代码质量优化2、程序性能优化启动速度与执行效率优化布局检测与优化内存优化耗电优化网络传输与数据储存优化APK大小优化3、开发效率优化分布式版本控制系统Git自动化构建系统Gradle4、项目实战启动速度流畅度抖音在APK包大小资源优化的实践优酷响应式布局技术全解析网络优化手机淘宝双十一性能优化项目揭秘高德APP全链路源码依赖分析彻底干掉OOM的实战经验分享微信Android终端内存优化实践《Android第三方框架》本篇内容要点1042页热修复设计插件化组件化框架设计图片加载框架网络请求框架RXJava 响应式编程框架设计IOC 架构设计Android架构组件Jetpack《NDK模块开发》NDK是原生开发工具包这套工具允许Android使用C/C代码并提供了众多的平台库。主要内容包含NDK 模块开发JNI 模块Native 开发工具Linux 编程底层图片处理音视频开发机器学习《Jetpack架构组件从入门到精通》Android Jetpack - NavigationAndroid Jetpack - Data BindingAndroid Jetpack - ViewModel LiveDataAndroid Jetpack - RoomAndroid Jetpack - PagingAndroid Jetpack - WorkMangerAndroid Jetpack架构组件之LifecycleAndroid Jetpack Compose 最全上手指南《Flutter技术进阶》Flutter跨平台开发概述Windows中Flutter开发环境搭建编写你的第一个Flutter APPFlutter Dart语言系统入门《2020大厂面试高频知识点》一、图片二、网络和安全机制三、数据库四、插件化、模块化、组件化、热修复、增量更新、Gradle五、架构设计和设计模式六、性能优化七、Android Framework八、Android优秀三方库源码由于篇幅限制这里只能展示部分内容朋友们如果需要这份完整版的PDF资料合集微信扫描下方CSDN官方二维码【免费获取】。遇到问题对于这些基础知识的学习过程并不轻松时常会碰到不能理解的知识点我的习惯是一般会先跳过这些点有些是知识点的编排问题导致后面才会解释的概念提前出现看到后面再回过头来自然就能理解了另一些情况确实是书籍讲解的不够细致比较直接的办法是直接搜索相关文章、博客、问题等帮助理解有些专门针对于一个技术细节的文章讲得会比书中详细得多麻烦一点的话就是找其他书的对应部分做参照如果还没有找到答案我觉得大概率这个问题其实并不重要有时候过分关注于细节就是一种浪费。一方面是不懂的地方可以暂时跳过另一方面是如果一本书读完还觉得云里雾里完全没了解到这门课程的内容那么绝对不能就此罢休可以换个课程学一段时间再回过头来再细读一遍或者干脆就换本书继续学。还是前面所说的基础知识值得我们“往死里学”。最后最后的最后还是要强调一下“身体是革命的本钱”这句话身体的健康是这一切的一切的前提失去了健康意味着人生就此变换了方向以前做的大部分努力都将付之一炬这是绝大部分人所承受不起的。知易行难与君共勉。