从《线性代数应该这样学》到《Redis的设计与实现》
《线性代数应该这样学》
起因
这本是好早之前买的,当时想着是时候复习一下线性代数了,因为以后要用到(那时候想到可能需要接触一下机器学习了)。买来之后发现太数学了,怕是数学系的许多人也吃不消看这种书。
收获与总结
这本书可以作为第一本或者第二本线性代数的学习材料。但这本书远比本科工科的要求要高出许多,以致于作者在前言里说,这本每页应当至少投入一小时来学习。匆匆看完前两章我便放下了,书里充斥着大量证明,从最基本的向量空间
的定义引出基本的性质,然后用证明的方式来引出各种向量空间的特点跟性质。而这是第一章的内容,读起来还是挺熟悉的感觉的,只是换了一种表述各种概念的方式和术语,但深入思考便与之前学习的向量没有多少差别。这里与我大一学的过程就差别大了,大一是直接从矩阵着手,最后讲到向量,但那时候觉得向量是很突兀的东西,甚至跟高中学习的向量完全不一样,没有从几何的角度稍加解释向量的一些特点。而这本书从标量
开始,比较了标量跟向量的异同,开阔了一下从标量到向量的思路,本质上它们比自己想像的还要相似。
第二章接着从有限维度引申到无限维度,在讨论了无限维度的一些异同后,继续深入了向量空间的各种特性,譬如张成空间
,直和
这些陌生的概念。而这些与普通向量之间的联系是很紧密的,但读到后面愈发抽象,我其实也忘记了七七八八了,惭愧。
后面几章暂时就没有看了,基本应该是从向量空间引申到线性映射,然后引出矩阵及其性质。在我看来矩阵是向量空间的更一般化,所以以后继续讨论的大量性质,也可能用于向量。最后从矩阵的一般运算到各种算子,最后才提出行列式相关内容,大概就是这样(痛苦)的过程吧。
《TCP/IP网络编程》
感获
这本书是一本网络编程的入门书,整体难度跟CSAPP
的第三部分差不多,各有侧重吧,内容有比较多重叠,但内容稍微多于CSAPP
。用的是C语言的socket接口
来讲解基本原理。用C语言讲有个好处,就是能直接从操作系统级别来思考网络编程,而且能使用全部的socket模式、所有并发模型、IO模型。
缺点是这些socket api相当底层,以至于一个api只做一个最基本的逻辑操作。学习起来特别费劲,而且高度依赖一部分操作系统的知识。
因为之前接触过golang
和nodejs
,分别也简单用过相应的socket接口。这两个语言的并发模型比较受限,nodejs目前只能异步跟简单多进程(将来应该可以用上简单多线程),golang倒是用goroutine(线程调度),通道(或者叫信道),多进程。而它们的socket接口便是跟这些模型有一定的耦合,而且高度精简,有更好的语义,从底层上面减去一些麻烦。当然,nodejs因为更单一,比golang还精简。
言归正传,这本书其实重点不在于讲解socket api,而是从使用api来达到理解socket编程思维,socket的各种核心功能,tcp/udp基本原理,并发模型的基本原理,可能还有较多的跨平台编程思路(因为C语言的socket各个系统有差异)。
一点思考
因为听说是隔壁网络工程的网络编程课的教材(说实话,这本书可能稍微浅了点,除非隔壁把这本书全部内容都讲授,我觉得才比较合理),我也无意中看到并且有打算看看。不过这本书实际比较狭窄,基本专注于tcp和并发这两个内容了,虽然充分且不错地解释了部分tcp知识,部分操作系统知识,对应用层太忽略了(提了下dns跟http),我个人认为把传输层跟应用层稍加紧密地联系起来,更能激发学习兴趣,也使这本书更加实用。
其实大概就匆匆看了半本,而且忽略了windows下的实现,自己也就琢磨了下源码,基本没有自己去写过(坏习惯啊),算是预热计算机网络
跟操作系统
的知识了。
《Redis的设计与实现》
这是图书馆借的到好书,其实早想看了,之前拿起来抱怨看不懂,这次再拿起来,已经不是那么可怕了。
收获
不过现在我看的比较少,数据结构篇还没有看完,也算是温习一些数据结构的知识了。这本书把redis相关的数据结构的内存模型很漂亮的表述清楚了,特别是hash和跳表,结合了许多图片来理解。也讲清楚了实现该数据结构的动机,复杂度,和一些特性。但大部分的数据结构基础操作忽略了,有些地方比较好奇,却没有讲到。这是我目前读到第六章的感受。但快开学了,这些书不太可能全看完,接下来怎么看还是得看心情咯。
最近的读书总结
其实还看了不少书,比如《深度学习》、《机器学习》、《统计学习方法》、《流畅的python》等,这些应该是一两个月前开始看的,都是需要长期学习的知识,在暑假机器学习集训班学习时来补充机器学习相关知识的。之后会写机器学习相关的总结,所以没有在这里总结一些知识跟感想。 还有部分书是跟下学期的课比较紧密的,提前看看也算是预习,本身也挺感兴趣的,也不一一列出了,读的篇幅不多,列出意义也不大。