前几天,梳理了自己的知识体系,大部分围绕Android展开横向与纵向的学习(当然Android只是解决业务需求的其中一个平台,不能拘泥于Android),横向比如gradle、kotlin、flutter作为支撑工具,纵向向底层靠拢,NDK(C/C++)、音视频以计算机图形学为基础展开对webRtc、openGL、ffmepg的学习、围绕JVM展开对ASM字节码修改辅助性能优化等等,下面汇总学习书单:
C/C++
推荐原因:
- Java GC机制的好处是不用关注垃圾的回收,坏处是对程序员来讲屏蔽了内存使用细节
- 一些高性能的组件还是得通过C完成,比如mmap
- 《C和指针》
- 《C++ primer》
Java
重点掌握并发、反射、JVM等
- 《Java编程思想》
- 《Java核心技术》
- 《深入理解 Java 虚拟机》
- 《Effective Java》
- 《Java并发编程的艺术》
- 《Java并发编程实战》
操作系统-以Linux为例
Android基于Linux内核,所以掌握必不可少:
- handler机制需要靠epoll机制深入理解
- binder通信机制为什么不采用linux中的管道、信号量、消息等通信机制
- 《Linux内核设计与实现》
- 《Linux系统编程》
- 《UNIX环境高级编程》
计算机
三个问题:
- 从敲出一个“hello word”,计算机是如何显示到屏幕上的
- 操作系统如何对内存进行管理的?
- so文件如何产生,以及如何编译到apk中的 下面两本书中有答案:
- 《深入理解计算机系统》 注:神书,程序员必读
- 《程序员的自我修养-装载、链接与库》
网络
一切皆协议,掌握分层概念,以TCP/IP为重点,关注网络发起的整个请求过程,解决弱网优化问题
- 《计算机网络:自顶向下方法》
- 《TCP/IP详解 卷1:协议》
数据结构与算法
掌握常见数据结构比如链表、数组、堆、栈、树、图,以及常见算法分治、动态规划、回溯等等
- 《数据结构与算法之美》
- 《剑指offer》
- 《大话数据结构》
Android
从framework入手串起对整个Android架构的理解,比如AMS、WMS、PMS、Binder等等
- 《深入理解Android内核设计思想》
- 《Android开发艺术探索》