感觉在学习的路上有些懵了,毕竟材料太多,花了点时间整理下今后的思路,毕竟软件开发是一个从How to use 到Why的问题,但是人总难免纠结于How,并不是why。开发的前几年往往是How的问题,所以大部分初学者都对数据结构和算法不感兴趣,置若罔闻,我也曾经是。会用List<>的不是关键,会英文看文档总能搞懂,但是list怎么实现的,这也能打消一部分是否需要重写的疑虑。数据库增删改查本质也是How的问题,是种机械性的重复。纠结于这些问题只能成为一个API Caller。not even the best one.不过How是吃饭的本钱之一,在此记下一些学习的Mile Stone。权当备忘。
How to use
数据库方面:增删改查--》索引--》事务--》并发--》维护(数据库迁移)--》缓存:如何开启
Java方面:常见的包--》JavaWeb(doGet、doPost等)--》Spring框架和Hibernate等框架的使用
IDE的调试,日志的使用,及良好的注释习惯
How to use well
数据库方面:事务怎么实现--》并发原理--》缓存的几个问题:和DB一致的问题。
Java方面:几大自带数据结构怎么实现的,TCP通信的原理,类加载和垃圾回收机制
设计模式:单例模式(饿、懒),工厂模式--->依赖注入,事件监听模式等
C:如何通过指针实现自定义数据类型并操作
Why
Why的问题实际上是通用的,换了语言甚至是领域都是通用的,这一部分包括:
- 并发和线程的同步问题
- 堆栈的概念,在Java的内存如何分区?为什么?
- 内存回收机制如何实现?
- 七大排序算法、表、队列堆栈(表的延伸)、图、HashMap等实现
- 经典算法:最短路径、图像边缘检测
- 算法分析与设计(时间复杂度、空间复杂度、时空交换)
- 操作系统原理:内存管理、进程管理、线程管理、权限问题(内核态用户态)等
- 如何写一个命令行工具,如何处理字符串的不同部分,依然保持高效,比如代码实时高亮,单词自动切片
- 有哪些开源协议,并对一些不必要的实现,如安卓的双层虚拟硬件层造成了影响?