signed

QiShunwang

“诚信为本、客户至上”

面试被吊打,是因为你的Android知识体系零乱!值得收藏的全方面覆盖Android知识结构总结

2020/12/28 21:59:48   来源:

2017年初Android市场饱和的传言一度甚嚣尘上。2018年经济寒潮,2020年疫情打压下,众多大厂和曾经风口上的互联网企业也不得不裁员自保,通过小程序、前端渲染以达到原生的实现。

面对外界的纷繁复杂和技术栈的日新月异,我们更应该清楚认识到自身技术的短板来进行知识巩固。目前移动端Android初中级人才大量涌入,正所谓僧多粥少,但楼主始终认为:苦心人,天不负,只要自身有过硬的知识广度和深度储备,在寒冬之下,同样也能站稳脚跟。

楼主19年年前走了一波社招试试水,一番厮杀后最终拿到多家offer,回味之余,不得不感叹现在的985、211出身的技术人才真的强(楼主只是普通本科),为了践行社会主义核心价值观,于是总结自己的面试经历,结合参考其他社招面试总结整理出这一份面试知识体系,相关的答案都整理在了一个文档,有需要的文末查看领取,承蒙大家不弃,文中知识点如有描述错误,还望提出探讨纠正。

此篇文章是初中高级工程师学习文章,知识体系较为完整。有如下特点:
1.知识结构全面
2.跟随当下技术潮流实时更新
3.可用于面试 & 学习
4.知识分为文字部分和视频部分,任性选择
5.正确的职业规划
6.方便工作过程中遗忘知识点快速查询

这份知识体系大纲包括:

Android部分:

四大组件篇

  • Activity
  • BroadcastReceiver
  • ContentProvider
  • Service

第五大组件篇

  • Fragment

对话框 & 弹框 & 悬浮窗 & 通知篇

  • Dialog
  • PopWindow
  • DialogFragment
  • Notification

Android UI控件篇

  • 基础布局
  • 基础控件
  • 高级控件(ListView,RecyclerView,ViewPager,WebView...)
  • 自定义控件(包含很多其它知识)
    • Android坐标系
    • Android的角度与弧度
    • View绘制机制
    • View事件分发
    • Android动画机制
    • Canvas类
    • Path类
    • 贝塞尔曲线
    • ......
  • 原生控件源码分析

Android系统架构篇

  • 系统架构
  • 系统版本特点 & 区别

Android通信篇

  • 线程间通信框架Handler
    • AsyncTask
    • HandlerThread
    • IntentService
  • 进程间通信

Android网络编程篇

  • 网络请求
  • Token & Session & Cookie三者联系与区别
  • 数据解析[Json,XML]
  • ......

Android数据持久化篇

  • 文件存储
  • key-value存储[SharePreference,MMKV(腾讯)]
  • 数据库存储[SQL语句,SQLite]
  • 序列化

Android 原生音视频图片开发[非JNI]

  • 图片开发(Bitmap)
  • 视频开发[GsyPlayer,JiaoZiPlayer...]
  • 音频开发[MediaPlayer]

Android特殊知识点【不知道如何分类的知识点】

  • gradle
  • 蓝牙
  • 定位
  • SDK开发与接入
  • Drawable
  • ......

Android必须掌握的轮子

  • 异步通信[EventBus,RxJava]
  • 图片加载[Glide,Picasso,Fresco]
  • 内存优化[LeackCanary,BlockCanary]
  • 依赖注入[ButterKnife,Dagger]
  • 数据库轮子[LitePal,GreenDao...]

项目架构篇

  • MVC & MVP & MVVM
  • 组件化
  • JetPack

Android高级进阶篇

  • UI绘制过程
  • 一个app启动过程
  • Android 动画机制
  • View事件分发
  • 热更新 & 插件化
  • Handler源码分析
  • ......

Android优化篇

  • 内存优化
  • 布局优化
  • UI卡顿优化
  • UI适配优化
  • apk安全优化

Android职业方向篇

【这是笔者新加入的,对于Andorid开发者而言非常重要,要有自己的职业规划】

  • 资深UI工程师[自定义控件,源码方向]
  • Android底层开发工程师[C++音视频/图像算法/智能家居]
  • Android资深架构师[造得一手牛逼的好轮子,熟悉Framework,Java高级知识等等]
  • 全栈工程师(以Android为核心技术)

Android工作工具篇

  • Git/SVN(代码版本控制)
  • 调试工作
  • 测试

Android工作必备技能篇

  • 玩转Gradle
  • 打包 & 多渠道打包
  • 加固 & 混淆

Android跨平台开发篇

  • WebView & 第三方内核
  • Flutter

*Android项目学习篇

  • 实战项目学习

Java部分

基础部分

  • 操作系统
  • 八大基本数据类型&引用类型
  • JDK&JRE&JVM篇
  • 面向过程&面向对象篇
  • 数组
  • NIO/BIO/AIO
  • Java异常体系篇
  • 集合篇
  • 多线程篇
  • 泛型篇
  • Java注解篇
  • 反射篇
  • Socket
  • Java设计模式篇

高级部分

  • JVM
  • AOP
  • APT
  • 多线程核心知识点

Kotlin部分:

基础部分

  • 基本数据类型
  • 数组
  • 集合
  • 函数
  • 类 & 接口
  • 扩展方法
  • 空类型安全
  • 智能类型转换
  • ......

高级部分

  • 泛型
  • 反射
  • 注解
  • 协程

数据结构与算法部分

数据结构部分

  • 时间复杂度 & 空间复杂度
  • 数组
  • 链表
  • 队列
  • 散列表

算法部分

  • 排序(8大排序)
  • 查找
  • 递归 & 回溯算法
  • 贪心算法

计算机网络部分

  • 五层网络模型
  • http[请求头,响应体,三次握手,四次挥手等]
  • https
  • DNS
  • Socket & WebSocket
  • 浏览器访问一个url的过程
  • Android技术应用【Andorid中能运用的网络知识点】

Android面试部分

  • Java部分
  • Kotlin部分
  • Android部分
  • 移动UI框架部分(Flutter为主)
  • 数据结构与算法部分
  • 常用的开源库部分
  • 计算机网络认识

面试复习系统路线

1、看视频进行系统学习

这几年的Crud经历,让我明白自己真的算是菜鸡中的战斗机,也正因为Crud,导致自己技术比较零散,也不够深入不够系统,所以重新进行学习是很有必要的。我差的是系统知识,差的结构框架和思路,所以通过视频来学习,效果更好,也更全面。关于视频学习,个人可以推荐去B站进行学习,B站上有很多学习视频,唯一的缺点就是免费的容易过时。

2、进行系统梳理知识,提升储备

客户端开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

系统学习方向:

  • 架构师筑基必备技能:深入Java泛型+注解深入浅出+并发编程+数据传输与序列化+Java虚拟机原理+反射与类加载+动态代理+高效IO

  • Android高级UI与FrameWork源码:高级UI晋升+Framework内核解析+Android组件内核+数据持久化

  • 360°全方面性能调优:设计思想与代码质量优化+程序性能优化+开发效率优化

  • 解读开源框架设计思想:热修复设计+插件化框架解读+组件化框架设计+图片加载框架+网络访问框架设计+RXJava响应式编程框架设计+IOC架构设计+Android架构组件Jetpack

  • NDK模块开发:NDK基础知识体系+底层图片处理+音视频开发

  • 微信小程序:小程序介绍+UI开发+API操作+微信对接

  • Hybrid 开发与Flutter:Html5项目实战+Flutter进阶

知识梳理完之后,就需要进行查漏补缺,所以针对这些知识点,我手头上也准备了不少的电子书和笔记,这些笔记将各个知识点进行了完美的总结。

3、读源码,看实战笔记,学习大神思路

“编程语言是程序员的表达的方式,而架构是程序员对世界的认知”。所以,程序员要想快速认知并学习架构,读源码是必不可少的。阅读源码,是解决问题 + 理解事物,更重要的:看到源码背后的想法;程序员说:读万行源码,行万种实践。

主要内含微信 MMKV 源码、AsyncTask 源码、Volley 源码、Retrofit源码、OkHttp 源码等等。

4、面试前夕,刷题冲刺

面试的前一周时间内,就可以开始刷题冲刺了。请记住,刷题的时候,技术的优先,算法的看些基本的,比如排序等即可,而智力题,除非是校招,否则一般不怎么会问。

关于面试刷题,我个人也准备了一套系统的面试题,帮助你举一反三:

总结

改变人生,没有什么捷径可言,这条路需要自己亲自去走一走,只有深入思考,不断反思总结,保持学习的热情,一步一步构建自己完整的知识体系,才是最终的制胜之道,也是程序员应该承担的使命。

以上内容均免费分享给大家,需要完整版的朋友,点这里可以看到全部内容。