上个月一整个月都比较焦虑。希望快点找到工作。一边补短,一边投简历,一边面试。
有几样东西想要记录下:
1 思维导图的重要性:思维导图具有思维导向性的作用(谁用谁知道,真的),能够帮助你串联记忆你学的知识点。
比如我学数据库的隔离级别时,感觉越学越没劲。后来用思维导图学,画图记知识点的时候,就会想,这个节点要和哪个连,怎么连。其实就是在思考知识节点之间是否有关联,有什么关联,下面是否还有子知识节点。上面是否有父知识节点,思考了这些问题,我会带有兴趣的去一个个填满这些漏洞节点。这个过程是自觉和自然的。
具体的,对于数据库隔离级别,是否有父节点?有,数据库隔离级别可以放在数据库事务的特性ACID的I下面作为子节点。然后其他几个特性又会去填上,比如,A是什么(原子性)?什么是原子性?原子性的目的是解决什么问题。当你知道原子性要解决的问题时,你会觉得很顺理成章,就叫原子性嘛,之前可能还被这个名词吓到的你已经完全认同了这个东西,记忆会加深。
更深一步想,原子性其实只是控制事务安全的一个原则,即事务不可分割的最小执行单元,一个整体的事务成功,必须是所有的相关联的事务都成功,比如经常被用来举例的银行转账:我这边转过去给同事A100元,我的卡上面扣了100,我接到短信通知说我扣了100,那对方就应该收到我的100元,他的银行卡上必须有我转的100元,且不说他多久之后收到这100元合理(时间是具体的效率问题和客户体验问题),他最终必须收到100元,这次事务才成功。否则最终收不到,那这次事务就是失败的。
再来看看隔离级别的子知识节点,即有哪几种隔离级别(未提交读、已提交读、可重复读、可串行化)?每种有什么问题(对应的脏读、不可重复读、幻读的问题)?怎么解决(引出InnoDB实现的隔离级别)?MySQL的InnoDB引擎实现的是哪种隔离级别?和标准的隔离级别有什么不同(其实也可以问为什么不使用其他几种隔离级别)?InnoDB引擎为什么这样实现(出于数据安全性和性能的考量,还会涉及到悲观锁、乐观锁的问题,B+树结构、gap lock等等,这里不展开讨论)?出于什么考量?这种考量又带来什么问题?怎么处理这样的问题?
最终你又会发现:每种工具或者软件都是为了解决某种特定问题而存在,所以他不能解决一些其他问题的时候,又要开始考虑在那些不适合的场景下的解决方案。
在哪看这些知识?当然是自己搜和总结了。推荐看书,可以知乎上问针对某个知识有哪些推荐的书。书的话很多,我看的不多,最近把并发编程的艺术啃了两遍。发现有些内容讲的我觉得还是不够,对我的理解不够,有些内容不是我想要的。这本书关注的是并发,只关注到JDK1.7,我看了JDK1.8的很多并发实现和书上描述的不一样。1.8有一些底层效率性的东西都是用unsafe类的方法实现。这里不是我这篇文章想主要表达的,所以都是轻描淡写,具体自己去挖,写成博文,网上也有一些人已经写了1.8的并发类实现。
还有博客,我认为技术博客中不得不提美团点评技术团队的博文。