我的 2015
毕业工作三年,一直埋头应用层开发,专业理论知识有恢复出厂设置的危险,而且深感各方面提升都遇到了瓶颈;
而去年疯狂地尝试各种新技术,导致战线拉得太长;所以今年自然是回归主旋律、填坑为主:代码写得少,书看的多,总结归纳的多。
通过对基础理论的复习巩固和专业领域的深挖,不仅重新(初步)完善了知识体系,还顺利拿到鹅厂 offer,也算弥补了四年前校招的缺憾。
夯实理论基础
数据结构与算法:
去年正好复习过常用数据结构和查找排序算法,做了笔记,并用 Golang 写了实现,所以只是简要温习了一遍;
参考: 《算法》;
操作系统:
进程管理(同步/死锁、进程调度策略);
内存管理(页面置换算法);
参考: 《操作系统:精髓与设计原理》;
计算机网络:
网络分层模型;
HTTP 协议(Header 字段、Status),HTTPS 通信过程;
TCP 协议(三次握手/四次挥手、超时控制、滑动窗口机制、拥塞控制、提高网络利用率);
UDP 协议;
二进制协议(ProtocolBuffer);
参考: 《计算机网络:自顶向下方法》、《图解 TCP/IP》、《HTTP 权威指南》;
密码学:
- 对称加密、非对称加密、消息摘要、数字签名等常用算法;
参考: 在线资料;
深挖专业领域
Android:
init 启动过程、zygote、SystemServer、WatchDog;
Binder 通信机制;
Surface 系统、WindowManagerService;
PackageManagerService;
PowerManagerService;
ActivityManagerService、OomAdj/LowMemoryKiller;
参考: 《深入理解 Android : 卷 I》、《深入理解 Android : 卷 II》;
Java:
Java 内存模型、内存分配和 GC 触发策略;
GC 算法(分代、拷贝、根搜索、标记清理/标记整理),回收器(Serial、ParNew、CMS、G1 等);
ClassLoader、DexClassLoader、PathClassLoader;
JNI、NDK;
参考: 《深入理解 Java 虚拟机》;
其他内容的学习
由于项目中有 C/C++ 代码,并且涉及到图像处理,所以对相关内容做了学习:
C/C++ 语法复习及盲点梳理,继续学习 C++11 的线程和并发相关内容;
OpenCV 入门(Filter 相关函数稍作了解);
参考: 官方文档;
参与开源社区
创建的 issue:
参与的 issue:
Android SharePreference多进程访问问题 · Issue #135 · android-cn/android-discuss
Android里面为什么要设计出Bundle而不是直接用Map结构 · Issue #142 · android-cn/android-discuss
Camera多次addCallbackBuffer的作用是什么? · Issue #143 · android-cn/android-discuss
Camera onPreviewFrame处理回调数据data,如何避免阻塞线程,并且不丢帧? · Issue #144 · android-cn/android-discuss
[问答]谈谈你对 Application 类的理解 · Issue #154 · android-cn/android-discuss
求助各位大神,怎么得到手机的唯一标识【注意:不是所有的手机都能得到IMEI及Mac地址】或者其他的折中方式 · Issue #175 · android-cn/android-discuss
16 年计划
技术相关:
继续跟进 Android 相关新技术;
继续复习操作系统的文件管理模块,以及 Linux 操作系统的一些重要原理(
epoll
等);复习数据库原理(之前考虑到做 APP 开发不像 web 开发对数据库设计要求这么高,面试被问到可能性不大,所以没专门复习);
复习计算机体系结构、数字电路、微机原理等底层理论知识;
继续复习数学相关内容(微积分/概率统计/线性代数);
继续熟悉 OpenCV 图像处理和人脸识别相关内容;
其他方面:
学驾照,真的不能再拖了;
学素描,去年就开始计划的…