-->

左耳听风_078_77_程序员练级攻略Linux系统内存和网络

你好,我是陈浩网名左耳朵house.那今天呢我们将正式进入程序员练级攻略的第五个篇章高手成长篇。

这一篇章是本系列当中最长的一篇。

那其中包括了以下这些内容。

第一呢是系统底层相关内容主要是以linux系统为主。

那其中有大量的文章可以让你学习到linux内核和内存网络EOL模型,log free的无锁编程,还有其他的和系统底层相关的东西。

注意啊,系统底层要是深下去是可以完全不见底的,而且内存方面的知识啊也是比较多的。

所以这里呢还是主要给出一些非常有价值的基础性的知识和技术。

那学好了这些东西,你会对系统有很深的理解,并且啊还可以把这些知识反哺到架构设计上来。

第二是数据库相关的内容。

在数据库方面呢,主要是mysql和各种开源NOO sql一些相关的有价值的文章和导读,主要是让你对这些数据库的内在有一定的了解,但又不会太深。

真正的深入啊是需要扎入到源代码当中的那需要说明的。

是啊,这块技术不是我的长项,但又是每个架构师需要知道的。

所以说我在这里给出的学习资源可能会比较浅,那这一点还希望你来补充和指正。

第三是分布式架构。

那这一部分啊是最长最多的那其中呢有架构入门以及分布式理论中各种非常有价值的经典论文。

然后是一些分布式工程设计方面的文章,那其中呢包括设计模式和工程应用。

那最后啊还有各大公司的架构供你参考。

第四是微服务,有了分布式的架构,理论和工程的基础。

那接下来啊就是对微服务的学习。

在这一部分内容当中呢,我会罗列几个介绍微服务架构的非常系统的文章,然后会比较一下微服务和SOA的差别。

那最后呢则是一些工程实践和最佳的实践。

第五是容器化和自动化运维。

在容器化和自动化运维当中呢,主要是学习docker和corpernatice这两个自动化运维的杀手型技术,而不是salght puppet、 chef和ancible这样比较传统的工具。

那原因呢很简单,因为自动化部署根本不够,还需要对环境和运行式的管理和运维才够。

而只有docker和copernetice才是未来。

所以这里重点呢让你学习这两个技术。

那其中有很多的文章需要一些系统底层的知识。

第六是机器学习和人工智能,机器学习和人工智能也不是我的长项,我也只是一个入门者。

那这里呢我主要给了一些基础性的知识,那其中包括基本原理、图书、课程、文章,还有相关的算法。

你顺着我画的这条路走,不能说成为一个人工智能专家,但成为一个机器学习的高级工程师,甚至准专家还是有可能的。

第七是前端开发,那这里的前端主要是h time mail五的前端啊,那这一节呢我会带你学习一下前端开发所需要的基础知识,尤其啊是对前端开发语言javascript的学习。

我花费了相当大的篇幅啊,列出了很多很经典的学习资料,毕定会让你成为一个java cririp的高手。

然后你还需要了解浏览器是怎么工作的,还有相关的网络协议和一些性能优化的技巧。

那最后呢则是java script框架的学习。

那这里呢我只给了react GS和view GS,并通过react GS带出了函数式编程的学习。

我虽然不是一个前端程序员啊,但是我相信我这个后端程序员给出来的这组前端开发的学习资料和路径会比前端程序员更靠谱一些。

那最后呢我还会提供一些信息源。

那其中呢包括各大公司的技术block,还有相关的论文集散地。

另外呢,我这里需要说明几点,我假设你在前面已经打下了非常扎实的基础,但是要成为一个高手,基础知识只是一个地基,你还需要很多更为具体的技术。

那对我来说呢就是要看各种各样的文章手册,论文,还有分享等等。

那其实学习到了一定程度啊,就是要从书本中走出去,到社区里和大家一起学习,而且呢还需要自己找事吃了。

所以说对于这里面的文章,有很多都是在罗列各种文章和资源只是为你梳理信息源,而不是为你吃饭。

老实说呀,我已经为你梳理并过滤掉了很多的信息。

那这里呢只留下了百分之三十,我觉得最经济也最有价值的信息。

那虽然对于不同定位和不同需求的人,还可以再对这些信息进行删减。

但是呢我觉得我这么一做就会对其他人不公平了。

所以说这也是我觉得最小数量级的信息和资源吧,你也可以把我这里的东西啊当成一个索引来对待。

另外呢这些内容不能说是隔离开朗啊,应该说是相辅相成的,也没什么顺序,可以各取所需。

呃,虽然看上去内容很多呀,但你也别害怕啊,真的不用害怕,你会越学越快,越实践越有感觉,也越有效率。

那在一开始呢可能会很慢,但是坚持住积累一段时间之后呢,就会越来越快了。

而且我要告诉你啊,绝大多数人是坚持不下来的,但只要你能坚持下来,我保证啊你一定会成为各个大公司的抢手货。

那这一点你一定要相信我,你不需要特别努力,只需要日进一步。

那三到五年之后呢,你就会发现绝大多数人都在你身后很远的地方了。

那今天分享的内容啊是系统底层知识中的linux系统内存和网络等方面的相关知识,还有推荐的学习资料。

那首先呢,我们来谈一谈linux系统相关方面的内容,学习linux操作系统的原理是通向系统工程师的必经之路。

我觉得unix和linux操作系统里的东西并不难学,你千万不要一下子扎到源代码里面去啊,那也没用。

你还是要在上层先通过读一些不错的文档来学习。

那这里呢我在文中罗列了一些很不错的站点,那其中呢有很多的内容供你去钻研和探索,你课后一定要打开链接看一看。

那这里呢我就不再一个个说了,我在这里默认啊,你前面已经读过并读懂了我推荐的那些unix和linux相关的图书了。

所以我相信你对unix和linux下的编程已经是有一些基础了。

因此呢,你继续深挖linux下面的那些知识,应该也不是很难的事了。

那其次呢是内存相关的内容。

计算机内存管理啊是每一个底层程序员需要了解的非常重要的事儿。

那当然啊这里我们的重点还是linux操作系统相关的,内存管理上的知识,你都首先LWN点net上有一系列的。

Whatever grammmer should know about memory的文章,你需要读一下。

呃,当然啊你也可以直接访问一个完整的PDF文档。

我的文中啊也给你了这个系列文章的网页版列表,读完这个列表中的内容啊,你基本上就会对内存有一个比较好的知识体系了,然后是几篇和内存相关的论文。

呃,接下来这三篇论文啊是我觉得能对你非常有帮助的文章,尤其是你要做一些程序的性能优化方面,第一篇叫做memory barriers, a hard review for software hackers.那所谓的内存读写屏障啊,就是在线程并发访问共享的内存数据时啊,从程序本身到编译器再到CPU,都必须遵循的一个规范。

那有了这个规范,才能保证在访问共享内存数据时啊,一个线程对数据的更新能被另一个线程以正确的顺序感知到在SMP啊,也就是对称多处理这种类型的多处理器系统,也包括多核系统上面这种读写屏障还包含了复杂的缓存一致性策略。

那这篇文章也做了详细的解释。

第二篇论文叫做tutory introduduction the ararand power relax memory models.那这个呢是对arm和power的宽松内存模型的一个教程式的简介。

这篇文章的焦点是在arm和power的体系结构之下,多处理器系统内存并发访问一致性的设计思路和使用方法和支持较强的TSO模型的叉叉六体系结构不同,arm和power这两种体系结构出于对功耗和性能的考虑,使用了一种更为宽松的内存模型。

本文呢详细讨论的arm和power的模型。

第三篇论文叫做x city six TSOA regarverless and usable programmers model for XI six multi processors.他介绍了x八六的多处理器内存并发访问一致性模型ESO.那接下来就是开发者最关心的内存管理方面的内部库。

通常来说啊我们有三种内存分配管理模块。

就目前而言呢,BSD的JE my lock有很大的影响力。

那后面我们可以看到不同公司的实践性文章。

第一个是PT, mallock啊,它是j lip c的内存分配管理。

那第二个呢是TC malloc,它来自google的内存分配管理模块。

它的全称啊是thred castion malloc基本上来说啊比j llip c的PT malloc快两倍以上。

第三个呢是JE my lock,它是BSD提供的内存分配管理,它的论文叫做scalleable concurrent mealloc, implemenittation or free BSD,这是一个可以并行处理的内存分配管理器。

那关于c的这些内存分配器啊,你可以参看维基百科的c dynamic ic memalallocation这个词条我这里还放了几篇文章的链接,让你感觉一下前面这三种内存分配器的一些比较和工程实践。

最后呢我们来说一说计算机网络,首先对于网络学习,我推荐一本书叫做计算机网络。

那这本计算机网络和前面推荐的那本计算机网络不一样,前面那本偏扫盲。

但这本书中有很多的细节。

这本书是国内外使用最广泛、最权威的计算机网络经典教材。

全书按照网络协议模型自下而上系统的介绍了计算机网络的基本原理,并结合internet给出了大量的协议实例。

这本书还与时俱进的引入了最新的网络技术,包括无线网络三g蜂窝网络IFID与传感器。

网络内容分发与p to p网络、流媒体传输与IP语音还有延迟容忍网络等等。

另外呢,这本书还针对当前网络应用中日益突出的安全问题,用了一整章的篇幅,对计算机网络的安全性进行了深入的讨论,而且把相关的内容与最新的网络技术结合起来阐述。

那这本书读起来并不枯燥啊,因为其中有很多的小故事和小段子,然后呢有两个网上的教程和讲义,也可以让你入门。

那第一个呢是沃太华大学的一个课程讲义,叫computer network design.第二个是give for gigs上的一个简单的computer networks tutorious.那接下来如果你想学习网络调优,你可能需要一些非常实用的可以操作的技术。

下面我介绍的这几篇文章,相信可以帮助到你。

首先是linux高级路由和流量控制,how too,这是一个非常容易上手的关于IP root two流量整型和一点net futer的指南。

其次啊,关于网络调优,你还可以看一个文档,叫做red had enterprise linux network performance tunion guide.那还有一些网络工具啊,也能够帮上你的大忙。

这里有一个网络工具的ausome列表,在其中罗列了各种网络工具,能够让你更从容的调试网络相关的程序。

另外making linux TCP fast也是一篇非常不错的TCP调优的论文。

那最后啊文中还有两篇在package cloud上面的关于linux网络栈相关的底层文章,非常值得一读。

接下来想要学习网络协议,最好的方式就是学习通讯相关的IFC.所以在这里啊我会推荐一系列值得读的IFC给你读IFC有几个好处,一方面是可以学习技术。

另一方面呢,你可以通过IFC学习到一个好的技术文档是怎么写的,还能看到各种解决问题的方案和思路。

对于第二层电路层啊,你可能需要了解一下ARP,还有他等相关的协议。

而对于第四层啊,你最需要了解的就是TCPIP了和TCP相关的RFC相当之多。

我在文中呢也给了一系列经典的RFC,这些RFC啊我都引用在了我在哭笑上的TCP的那些事儿上和下这两篇文章当中。

那如果你看不懂RFC呢,你也可以去看我上面的文章。

我个人觉得啊TCP它最牛的不是不丢包,而是拥色控制。

对此啊,如果你感兴趣,可以读一下经典论文,congestion avoidance and control.关于linux下面的TCP参数,你需要仔仔细细的读一下TCP的main page.而对于第七层协议呢,HTTP协议是重点要学习的。

首先我推荐的是HTTP权威指南,这本书有点厚,可以当参考书来看。

那虽然这本书里没有提到HTTP二的事儿,但是呢可以让你了解到HTTP的绝大多数特性。

Htep一点一的原始RFC是一九九九年六月的RFC二六幺六。

但是它在二零一四年之后呢,就很快被文中的这些RFC给取代掉了。

关于HTP二,这是HTP的一个比较新的协议。

它呢是在二零一五年批准通过了。

现在基本上所有的主流浏览器啊都默认启用了这个协议。

所以呢,你有必要学习一下这个协议,文中也有相关的学习资源链接。

最后你可以去维基百科的internet protocol suit页面上看一看。

那这个呢是一个很不错的网络协议,磁条的汇集地。

那顺着这些协议啊,你可以找到很多有用的东西。

好了,我总结一下今天的内容,这个是程序员练极攻略二零一八版第五篇章高手成长篇的第一篇文章。

前面的内容啊,我先介绍了一些这一系列内容的总体构成和每一部分的学习重点。

后面呢是这一篇章。

第一个主题系统,底层知识中的部分内容啊分别是linux系统、内存和计算机网络。

同时呢我也给出了相应的学习资料和它的链接。

我认为啊学习到一定程度啊,就是要从书本中走出去到社区里和大家一起学习,而且还需要自己找谁吃的。

所以在这篇文章里啊,我罗列了各种文章和资源,并给出了简短的推荐语言,而就是在为你梳理信息源,而不是为你吃饭。

我更希望看到你自驱式的成长。

在下一节课,我们分享的内容啊是关于系统底层知识中的异步IO模型,lock free编程和其他的一些相关的知识点和学习资源,敬请期待。