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、面试前夕,刷题冲刺
面试的前一周时间内,就可以开始刷题冲刺了。请记住,刷题的时候,技术的优先,算法的看些基本的,比如排序等即可,而智力题,除非是校招,否则一般不怎么会问。
关于面试刷题,我个人也准备了一套系统的面试题,帮助你举一反三。
总结
改变人生,没有什么捷径可言,这条路需要自己亲自去走一走,只有深入思考,不断反思总结,保持学习的热情,一步一步构建自己完整的知识体系,才是最终的制胜之道,也是程序员应该承担的使命。
以上内容均免费分享给大家,需要完整版的朋友,点这里可以看到全部内容。