开头
移动应用开发从逐渐开始火爆到如今也有小十年了,大部分的学校还是没有开放专门的课程。
目前市场上的大部分 Android 开发工程师大多数是自学或者是培训出身,用一段时间上手 Android 开发技能(畅销书作家 Josh Kaufman 提出,掌握正确的方法后,可以在短期内上手任何技能 ),而后进入一家公司或者接手一个项目培养实操能力、积累实战经验。
再之后呢,Android 开发初期之后怎么提升?怎么才能叫精通?方向在哪?
通常情况下,Android 工程师 1-3 年时间应该能从初级上升到中高级工程师,这个阶段主要就是技术的提升和经验的积累。
之后 1-3 年持续做到高级工程师,这个位置要求能独立完成整个模块,对项目架构有比较深入的了解,能够设计复杂模块的程序方案。
同时需要一定的管理能力,能够带新同事快速入手项目,所以这时候一般同时也担任了主程或者 Team Leader,部分参与项目的管理工作。
Scudo是一种用户模式分配器,旨在提供额外的mitigation 来防止堆的漏洞的方法,同时保持良好的性能。它是开源的,是LLVM的editor-rt项目的一部分。
Scudo当前是Fuchsia中的默认分配器,已在Android的某些组件中启用,并在某些Google生产服务中使用。虽然最初是在sanitizer_common的某些组件之上实现的,但现在它被重写为独立的,而无需依赖其他编译器-rt部件,从而易于使用(以及其他性能和安全性优势)。
Scudo由以下组件组成:
Primary 分配器
这是一个快速分配器,用于处理较小的请求(可在编译时配置)。它是“隔离的”,例如:相同大小的块最终位于相同的存储区域中,并与其他区域分隔开(64位的分隔更强,其中专门为主要区域保留了存储区域);主节点分配的块被随机分配以避免可预测的地址序列(请注意,大小越大,地址彼此之间的可预测性就越高)。
Secondary 分配器
包装平台内存分配原语,因此速度较慢,用于服务较大的分配。辅助服务器完成的分配被保护页面包围;
本地缓存
这些是线程专用的存储,持有指向空闲块的指针,以减轻对全局空闲列表的争用。有两种模式:独占模式和共享模式。使用排他性模型,每个线程都有一个唯一的缓存,这会占用更多的内存,但几乎没有争用。使用共享模型,线程可以共享一定数量的缓存,这些缓存可以在运行时根据竞争情况进行动态重新分配-与专用模型相比,它使用的内存更少,通常可以更好地满足最终用户平台的需求。
隔离区
可以等同于heap 范围内的延迟释放列表,在将其释放系统之前,将最近释放的块保留一段时间,直到满足条件(通常达到一定大小)为止。 有线程的隔离区和一个全局隔离区。就内存使用情况和某种程度上的性能而言,这是最有影响力的:即使是较小的隔离区也会对进程RSS产生很大影响。因此,默认情况下它是禁用的,并且可以在每个进程的基础上启用(并根据进程的需要调整大小)。
安全性
强制执行最大大小和对齐值,但还要检查提供的指针是否正确对齐;这些是便宜的检查,以避免整数溢出并捕获较低的挂起分配错误(或滥用);
每个块之前都有一个header,该header存储有关分配的基本信息和校验码,并经过校验和以能够检测到该memory是否损坏。
header的校验和,要处理的指针以及header的内容-这并不意味着密码学上很强。至于存储在头文件中的数据,它保存分配的大小,块的状态(可用,已分配,隔离),其来源(malloc,new,new [])和一些内部数据。头是原子操作的,以检测在同一块上运行的线程之间的竞争尝试。
确保释放函数与返回目标块的分配函数一致(例如:free / malloc,delete / new);我们会随机分配一切,以尽可能降低可预测性;线程缓存的附带好处之一是,如果攻击者利用不同线程中的分配原语,它们会使攻击者更难在所需的状态下获取所需的块。
让我们看一下Google生产服务的一些典型基准,其中涉及许多异步线程,protobuf,RPC和其他优点,所有这些都运行在具有512GB RAM的72核心Xeon机器上(并不是要进行最严格的比较,而是让您了解最新情况。)第一个指标是每秒的查询数,第二个指标是程序的RSS峰值(由/ usr / bin / time报告)。
最后说一下我的学习路线
其实很简单就下面这张图,含概了Android所有需要学的知识点,一共8大板块:
- 架构师筑基必备技能
- Android框架体系架构(高级UI+FrameWork源码)
- 360°Androidapp全方位性能调优
- 设计思想解读开源框架
- NDK模块开发
- 移动架构师专题项目实战环节
- 移动架构师不可不学习微信小程序
- 混合开发的flutter
Android学习的资料
我呢,把上面八大板块的分支都系统的做了一份学习系统的资料和视频,大概就下面这些,我就不全部写出来了,不然太长了影响大家的阅读。需要的小伙伴,我免费分享给大家,或者直接点击下面链接领取,谢谢大家这么久以来的支持。
如果你有其他需要的话,也可以在文档上查看,下面的资料也会陆续上传到文档
330页PDF Android学习核心笔记(内含上面8大板块)
Android学习的系统对应视频
总结
我希望通过我自己的学习方法来帮助大家去提升技术:
-
1、多看书、看源码和做项目,平时多种总结
-
2、不能停留在一些基本api的使用上,应该往更深层次的方向去研究,比如activity、view的内部运行机制,比如Android内存优化,比如aidl,比如JNI等,并不仅仅停留在会用,而要通过阅读源码,理解其实现原理
-
3、同时对架构是有一定要求的,架构是抽象的,但是设计模式是具体的,所以一定要加强下设计模式的学习
-
4、android的方向也很多,高级UI,移动架构师,数据结构与算法和音视频FFMpeg解码,如果你对其中一项比较感兴趣,就大胆的进阶吧!
解码,如果你对其中一项比较感兴趣,就大胆的进阶吧!
希望大家多多点赞,转发,评论加关注,你们的支持就是我继续下去的动力!加油!