存储开发入门到进阶,这几本书一定要看!!

有些朋友是已经深耕存储多年,有的朋友是刚刚入门、或者说有兴趣但是迟迟不得入门。以下从笔者的经验出发,向大家推荐几本书,可以比较系统的补充一些编程的内功和存储的基础知识,向你展示一条存储通关之路。

语言

语言是第一个要度过的关,就跟你学习语文一样,你要学习优美的文章,首先你得认字,以下就简要推荐几部语言入门的书籍,推荐两本 C 的入门书籍,两本 Go 的书籍。(市面上的好书非常之多,各有长短,大家可以自己斟酌,各取所需)

为什么选择 C 和 Go 各推荐两部?

  • C 语言无论是做哪个方面的,只要是你想和操作系统的一些底层原理打交道,这个 C 语言是逃不过的(比如想像看 Linux 源码,那么就要能读懂 C );

  • 得益于云原生的火爆,Go 水涨船高,K8S,minio,etcd 等众多 Go 优秀的项目。且笔者当前也是使用 Go 技术栈在做存储;

《C Primer Plus》

C 语言的语法本身非常简单,所以入门者走马观花的读完语法,会感觉自己啥都懂,一写代码啥都错。这本书除了详尽的语法内容,还搭配大量的代码示例和代码讲解,这对入门者来说,是非常重要的。

往往入门的时候,就是进门最难,无从下手的感觉最难受。所以,入门一项新技术的时候,最好的办法是先把姿势用起来,然后逐步配合理解,这样学习更容易理解。

《C 专家编程》

如果你感觉自己入门了,但是理解还不深刻,特别是对 C 语言的指针,内存分配还一知半解,经常忘记(因为只知其然,不知其所以然),那么这本书可能可以帮助到你。

这本书能把 C 语言的概念讲透,某些特性可能你想破脑袋也想不出来原因,这部书可能一下就跟你讲明白了,因为这些特性可能是有历史原因的。本书从 C 的历史、语言特性、循序渐进的把问题给你讲明白,非常值得推荐。

《Go语言编程》

Go语言编程(图灵出品)

市面上 Go 的书籍还挺多的,也是非常优秀的,在此推荐两部可以用来入门的。第一部就是许世伟大佬撰写的《Go 语言编程》,这本书是国内最早一批 Go 的书籍,非常值得推荐。

本书从 Go 语言的诞生和发展历程开始,介绍 Go 语言的基础用法,再介绍面向对象编程特性和并发编程姿势,最后还介绍了 Go 语言标准库和配套工具的用法,包括安全编程、网络编程、工程管理工具等。

总体来说,本书是一本适合入门,且实用性很强的书。

《Go语言并发之道》

该书是难得的佳作,众所周知 Go 以并发见长,但并发也常常是最难使用的,这本书就是详细的阐述了 Go 并发的特点,包括 Go 的并发设计哲学,是难得的佳作。这本书能教会你 Go 并发的十八般姿势。

存储入门

好,到这里,现在你已经会一两门基础语言了,能够看懂源码了,是时候做点跟存储相关的啥了。首先要补充的是一些基础知识,Linux 基础,系统 IO 接口使用等。

《鸟哥的 Linux 私房菜》

如果连 Linux 都不知道是啥?那就太尴尬了,做服务端开发的小伙伴 Linux 是你绕不过的坎,但也不要怕,有很好的入门书籍,赶紧了解起来。

推荐:《鸟哥的Linux私房菜 基础学习篇 第四版》

这本书可以说是入门 Linux 的最好书籍,入门最重要的就是让学生保持兴趣,并且逐步掌握姿势,这本书做到了这点。

想当初,学完 C 语言之后,感觉自己掌握了倚天屠龙宝剑,后来发现连个文件的概念(属性、权限)都理解不了,尴尬。

笔者也是从这本书逐步入门 Linux 的,轻松的学习过程中才发现,哦,原来这就是 Linux 呀,这就是文件呀,原来文件要执行权限才能执行,软链是这样创建的,原来文件的格式跟后缀没啥关系呀(跟 Windows 不同)。

那么下面重点推荐几个章节:第二部分 Linux文件、目录与磁盘格式

  • 第5章 Linux的文件权限与目录配置

  • 第6章 Linux文件与目录管理

  • 第7章 Linux磁盘与文件系统管理

  • 第8章 文件与文件系统的压缩

学习完这部分,你至少知道文件系统是个啥东西,文件是个啥东西,咋用这东西。

再次称赞这部书,真的是入门宝典。

《UNIX 环境高级编程》

现在你可能知道文件是啥了,但是你的程序怎么才能读写这个文件呢?

推荐:《Unix 环境高级编程》

说实话,这本书再怎么推荐都不为过(这是一本要流传后世的书籍),这本书是推荐作为存储后端开发的入门书的。云存储本质上也是由一个个本地存储节点通过网络连接起来的,所以你必须得了解本地存储的一个使用形式和形态。

《UNIX 环境高级编程》自然不是只讲解存储的书,但是这本书是存储入门的必修课。

推荐几个必读章节:

  • 第三章 文件 I/O :系统的介绍了最核心的文件相关的系统 I/O 调用接口;

  • 第四章 文件和目录 :介绍了文件和目录的相关接口,通过这样你会系统的了解文件和目录究竟有哪些操作;

  • 第五章 标准 I/O 库 :讲解了封装的带 buffer 的标准库使用姿势,通过这个章节,你能了解系统调用和标准库 I/O 的区别;

其他的章节也是非常有用的,比如和网络 I/O 相关的章节。我挑选出来以上的章节,你读完至少对文件的操作不再陌生。

《大话存储》

到这,你可能掌握了文件 IO 的方法,但是对于存储的各种形态可能还不知所云。比如,什么是 Raid?什么是 DAS,NAS,SAN?什么块存储、对象存储、文件存储?

国内阐述存储的书籍很少,很少有一本书能系统的介绍存储的各种形态和知识,初学者很难理解各种各样的存储的到底是个啥?

大话存储系列从比较高的层次来拆解传统存储到云存储的原理,是一个比较好的入门系列,这本书可以当作存储科普书来学习,里面基本涵盖了所有存储相关的知识点、术语,和常用的套路(注意,本书没有什么源码分析,里面主要是理论和存储形态,主要是加深你的存储理解)。

所以,我认为这本书的风格很适合入门、自学存储知识,作者是站在比较高的一个层次,用很通俗的话来解释各种存储的,笔者第一本存储的书就是《大话存储》。

《程序员的自我修养》

全名《程序员的自我修养:链接、装载与库》,是博文视点出品。这是一本国内大牛写的书,为什么推荐这本书?

程序员写出代码,编译成二进制,运行在操作系统之上。如果你对二进制程序都不了解,都不知道二进制居然还有格式(ELF),那就太尴尬了。这本书能补足你的程序员的内功,对编译、链接、运行 的过程不再陌生。

这本书能够给你新的视角,读了这本书,你应该能知道代码如果变成二进制在系统中运行的。系统软件底层的组成机制是什么?可执行文件(二进制)竟然还有格式?

举个例子,你是否有思考过一下问题:

  • 为什么程序从 main 开始执行?

  • 二进制文件里面竟然还有格式?

  • 目标文件是什么,静态链接,动态链接又是怎么回事?

  • 编译阶段总报错,链接阶段总报错,你能快速定位吗?

  • 句柄是什么?

这本书能解答上面的问题,如果说你一直对进程运行和库装载、编译链接等问题一知半解,那么这本书可能对你是有用的。该书的风格我也很喜欢,明明你之前觉得很复杂的概念,作者能以非常通俗简单的方式让你理解,这个需要很高的功底。

书本太厚,读起来非常费时间,有没有更快速的入门与进阶方式,当然是有的,来看看零声教育这套存储开发架构体系课程,绝对能打破你对培训的认知,从底层原理到实战技巧,快速掌握存储开发所需要的技术。

试听内容

最新C/C++存储开发实战教程,分布式存储,linux内核文件系统,分布式文件系统,TiDB,RocksDB,SPDK,fuse,ceph,NVMeicon-default.png?t=N7T8https://www.bilibili.com/video/BV1gZ4y1n7F6/存储开发完整的学习知识图谱:

自下而上-存储全栈(TiDB/RockDB/SPDK/fuse/ceph/NVMe/ext4) v1.4

存储进阶

你已经对怎么使用存储有了初步了解,这个时候你可能会产生更多的疑问,你想了解计算机内部存储层次的正金字塔和倒金字塔的区别,你想了解操作系统内部文件的实现形式,那么下面的书籍可能可以解答你的问题。

《深入理解计算机系统》

哇,这本书我只能用哇来形容了,是一本修炼内功的书,是一本枕头书,这本书为什么是最值得推荐的?

知识框架!!!零碎的知识最可怕,我们前期学习的时候,东一下西一下,学到了很多,但是总感觉遇到问题的时候不能举一反三,或者总感觉对自己学的有一层模糊的感觉。

这个很大的原因是因为知识体系不系统。程序员无非就是和计算机打交道,所以深入的理解计算机无比重要。编程语言只是你和计算机打交道的一个工具而已,语言是最简单的一部分,举个例子,你会写字,你就能写出文章吗?文章是有结构的,是有套路的,是有体系的。

《深入理解计算机系统》这本书最重要的就是帮你构建计算机系统的知识体系。

第一部分:程序结构和执行:告诉你程序的静态结构,存储分层的原理,让你对计算机系统的静态结构有个认识;第二部分:在系统上运行程序:告诉你程序是怎么编译和链接的,程序是怎么加载的,程序运行的时候是怎么分配内存的,让你对程序的动态运行有个认识;第三部分:程序的交互和通信:这部分介绍了 IO 的接口和基础知识,包括存储 IO 和网络 IO,多路 IO 复用等并发知识;

这本书内容其实并没有特别难,但这本书是真的厚,需要你大量的时间,这个时间很值得。

《存储技术原理分析》

《UNIX 环境高级编程》你学完之后,至少是大概知道了 IO 是怎么一回事,这个时候你会对操作系统,文件系统这些核心的逻辑感兴趣,你可能会想知道 VFS 是什么东西, Linux 里面一切皆文件是什么意思?文件系统,块设备,驱动有都是什么作用?

那么你可以看这本书,敖青云的存储技术原理分析。该书按照三大块讲述:

  • 存储技术概论

  • 设备驱动

  • 存储 I/O

读完这本书,你肯定能知道 VFS 是什么,块设备是什么,文件系统是什么。书比较厚,啃起来可能比较费劲,但是还是推荐把第一章概述,第八章文件系统读完。你会对 系统调用,vfs,ext具体文件系统有个质的变化。

这本书是一本源码级别的书,是一本真正对你工程编码有直接帮助的书。

《分布式对象存储:原理、架构及Go语言实现》

这本书比较简单,但是也非常值得学习。本书首先从一个最简单的对象存储服务原型开始,讨论在原型中存在的问题并介绍对象存储服务中一些常见的概念以及设计理念,然后通过改变架构或添加功能的方式解决这些问题。这一迭代步骤将发生多次,最终我们会收获一个足够完善的对象存储服务。

如果你想自己用 Go 编写一个对象存储,那么这本书可以帮助到你。

对象存储文档

最后推荐一个了解云存储的非常好的方式:公有云文档。以对象存储来讲,公有云会有非常详尽的文档解释,包括对象存储是什么?快速入门,SDK 使用示例,各种接口示例等等。

总结

  • 对于一个新的领域,笔者认为学习的路径应该是从使用姿势开始,先用起来,先知其然。保持兴趣,保持自己的信心最重要;

  • 等你各种姿势使用都体验了个遍,不出意外你肯定对其内部原理会很感兴趣,这个时候可以从一个很小的点切入,把这个点分析个透彻,会给你带来不一样的感受,这个时候知其所以然也;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/644245.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot服务设置禁止server.point端口的使用

问题&#xff1a; 当项目服务引用了jar spring-boot-starter-web后 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency>所以项目一启动&#xff0c;就会使用serv…

网络中的长连接和短连接

在网络通信中&#xff0c;长连接和短连接是两种不同的连接方式。它们指的是客户端和服务器之间持续通信的时间。 短连接 短连接是一种临时性的连接&#xff0c;客户端发送请求后&#xff0c;服务器响应请求并传输数据后&#xff0c;连接会立即关闭。每次请求都需要建立一个新的…

Git将当前分支暂存切换到其他分支

在我们使用Git进行版本控制时&#xff0c;经常会遇到这样的情况&#xff1a;我们正在一个分支上进行一些修改&#xff0c;但突然需要切换到另一个分支进行一些操作。这时&#xff0c;我们可以使用git stash命令来暂存我们的修改&#xff0c;然后再切换到其他分支。下面&#xf…

55. 跳跃游戏 - 力扣(LeetCode)

题目描述 给定一个非负整数数组&#xff0c;你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个位置。 题目示例 输入&#xff1a;nums [2,3,1,1,4] 输出&#xff1a;true 解释&#xff1a;可以先跳 1 步&#x…

LFU算法

LFU算法 Least Frequently Used&#xff08;最不频繁使用&#xff09; Leetcode有原题&#xff0c;之前手写过LRU&#xff0c;数据结构还是习惯于用java实现&#xff0c;实现是copy的评论题解。 题解注释写的很清楚 大致就是说LFUCache类维护一个存放node的map&#xff0c;同…

go语言入门介绍 - 特征、命名、关键字、保留字、声明

Go 语言是谷歌 2009 年首次推出并在 2012 年正式发布的一种全新的编程语言&#xff0c;可以在不损失应用程序性能的情况下降低代码的复杂性。 1、优点 自带gc。静态编译&#xff0c;编译好后&#xff0c;扔服务器直接运行。简单的思想&#xff0c;没有继承&#xff0c;多态&a…

基于springboot+vue的墙绘产品展示交易平台系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 研究背景…

「nuxt2配置tailwindcss」nuxt2添加tailwindcss详细步骤!解决版本不对称各种报错~~复制黏贴搞定!

运行环境 node和npm使用版本 node v14.21.3 (npm v6.14.18) 1.插件下载 官方文档说明 npm install -D nuxtjs/tailwindcss3.4.3 tailwindcss3.4.1 postcss^8.4.33 autoprefixer10.4.17 2.nuxt.config.js配置 module.exports {// ...buildModules: [nuxtjs/tailwindcss],// …

spring(1):基于XML获取Bean对象以及各种依赖注入方式

1. 获取Bean XML文件&#xff1a;<bean id"helloworld" class"org.kkk.spring6.bean.HelloWorld"></bean>1.1 根据id获取 Test public void testHelloWorld(){//加载XML文件ApplicationContext context new ClassPathXmlApplicationContext…

微信小程序商城注册是个人还是公司的?

随着移动互联网的飞速发展&#xff0c;微信小程序已经成为了商家们开展电子商务的重要平台之一。微信小程序商城以其便捷的操作、庞大的用户基础和较低的成本投入&#xff0c;吸引了众多商家的关注。然而&#xff0c;对于想要进入这一领域的创业者来说&#xff0c;一个基础性的…

C# CefSharp 输入内容,点击按钮,并且滑动。

前言 帮别人敲了个Demo,抱试一试心态&#xff0c;居然成功了&#xff0c;可以用。给小伙伴们看看效果。 遇到问题 1&#xff0c;input输入value失败&#xff0c;里面要套了个事件&#xff0c;再变换输入value。后来用浏览器开发工具&#xff0c;研究js代码&#xff0c;太难了&a…

Authorization Failed You can close this page and return to the IDE

一.问题描述 注册JetBrains成功&#xff0c;并且通过了学生认证&#xff0c;但在activate pycharm时&#xff0c;却显示Authorization Failed You can close this page and return to the IDE如上图 二.原因&#xff1a; 可能是因为之前使用了破解版pycharm 三.解决方法&am…

GNSS技术与无人机协同:开启未来交通新篇章

随着科技的不断发展&#xff0c;全球导航卫星系统&#xff08;GNSS&#xff09;技术与无人机技术的协同应用成为未来交通系统的引人瞩目的新方向。创新微公司在这一领域的技术创新为实现GNSS技术与无人机的紧密协同提供了新的可能性。本文将深入探讨GNSS技术与无人机协同的前景…

软件工程测试3

1.【多选】关于领域类建模说法正确的是 A. 需求描述中的名词或名词短语都划分为领域概念类 B. 在类的聚合关系中&#xff0c;聚合体对象是整体&#xff0c;聚合元素对象是部分 C. 需求描述中的名词、数词、形容词等有可能是属性值 D. 在类的继承关系中&#xff0c;父类中的属性…

创新医疗服务:宠物在线问诊系统的搭建与应用

随着科技的不断进步&#xff0c;创新的医疗服务方式也日渐成为宠物主人关心爱宠健康的首选。本文将深入介绍如何搭建一套创新的宠物在线问诊系统&#xff0c;并展示其应用的技术代码。 1. 系统架构与技术选择 在开始搭建之前&#xff0c;我们需要设计系统的架构并选择合适的…

springboot初始项目每一层的含义

一.创建的时候主要勾选了以下 二.项目架构 三.有的项目下创建出来&#xff0c;存在更多不同的层级 src/main/java/com/example/demo/controller: 控制器层&#xff0c;包含处理 HTTP 请求和响应的控制器类。 src/main/java/com/example/demo/service: 服务层&#xff0c;包含业…

ardupilot开发 --- RTSP多媒体数据流(视频流) 篇

0. 一些概念 RTSP是 TCP/IP 协议体系中的一个应用层协议&#xff0c;该协议定义了一对多应用程序如何有效地通过 IP 网络传送多媒体数据。RTSP在体系结构上位于RTP和RTCP之上&#xff0c;它使用TCP或UDP完成数据传输。 在mission planner中查看(拉取)RTSP视频流

我每天如何使用 ChatGPT

我们都清楚互联网的运作方式——充斥着各种“爆款观点”&#xff0c;极端分裂的意见&#xff0c;恶搞和无知现象屡见不鲜。 最近&#xff0c;大家对于人工智能&#xff08;AI&#xff09;特别是大语言模型&#xff08;LLMs&#xff09;和生成式 AI&#xff08;GenAI&#xff0…

四、arcgispro二次开发运行程序修改的地方还是没有变踩坑

对于arcgispro二次开发学习是一件充满兴趣并且具有好奇心的一件事&#xff0c;但是当创建了一个工程第一次调试成功&#xff0c;并出来了自己期待很久的一个程序后&#xff0c;当第二次修改并运行&#xff0c;发现一直没有反应&#xff0c;很是头疼&#xff0c;查了很多资料也没…

日常记帐软件,你的财务守护者

在快节奏的现代生活中&#xff0c;理财的重要性日益凸显。如何让每一分钱都花在刀刃上&#xff0c;是许多人都渴望知道的答案。今天&#xff0c;我要为大家介绍一款简单实用的记账软件——晨曦记账本&#xff0c;相信它会是你财务之路上的得力助手。 所需工具&#xff1a; 一…