【吐血整理】那些让你起飞的计算机基础知识:学什么,怎么学?

640?wx_fmt=png

作者:帅地

来源公众号:苦逼的码农

我公众号里的文章,写的大部分都是与计算机基础知识相关的,这些基础知识,就像我们的内功,如果在未来想要走的更远,这些内功是必须要修炼的。框架千变万化,而这些通用的底层知识,却是几乎不变的,了解了这些知识,可以帮助我们更快着学习一门知识,更加懂得计算机的运行机制。当然,在面试中也经常会被问到,特别是对于应届生,对于春秋招,也可以看看我前阵子写过的文章历经两个月,我的秋招之路结束了!。也有读者经常问的计算机基础知识究竟是指啥?学习顺序?推荐书籍?

我公众号的读者学生以及非科班的应该挺多的,所以我今天这篇文章就写一写,我学过的计算机基础知识,看过的书以及我学过的顺序

当然,以下是我个人的一些经验,并且学过的一些知识,仅供参考,也欢迎大家进行补充

一、计算机网络

在我们用的程序中,99% 都离不开网络,作为一个程序员,我觉得了解计算机网络是必须的,在大学的课程中,一般也都会开设这一门课。

在我学习这门课之前,我就特别好奇,一台电脑是怎么把消息发给另外一台电脑的呢?例如:

1、两台电脑啥线路也没有相连,怎么就能把消息发送给他呢?

2、世界上的电脑那么多,咋就能找到那台特点的电脑呢?有人说我们可以 MAC 或者 IP 来唯一标识啊,可是,我就有点疑惑了,世界那么大,电脑那么多,有了这个标识,我们该怎么找到他呢?遍历所有电脑?

3、多个程序同时发消息给一台电脑,电脑是如何准确把这些消息拿给这些不同程序的呢?

4、发送的消息丢失了怎么办?

总之,一大堆疑问,看了计算机网络之后,才豁然开朗。自己也写了一篇评价不错的文章:一文读懂一台计算机是如何把数据发送给另一台计算机的

所以这里,我是强烈建议大家学一下的,在面试中,计算机网络也是高频考点,这里我大致总结一下一些必学协议以及面试高频考点:

1、http协议,包括:封装格式,常见响应码,不同版本的区别,常见请求方法,存在哪些安全隐患,啥是无状态协议等。

2、https协议:http 是明文传输,https 是加密安全的,需要知道 https 是如何加密的、数字证书如何形成,啥的对称加密、非对称加密。

3、TCP协议:三次握手、四次挥手、如何保证可靠传输、流量控制、拥塞控制。

4、UDP:这个大致了解即可,好像内容比较少

5、DNS、ICMP、ARP、DHCP(我就不一个一个写了)

上面写的这些协议,我觉得是比较重要的,特别是在面试中。我公众号文章也写了好几篇这些协议的,大家可以去计算机基础那个模块找。

对于新手推荐视频:可以看韩老师讲的视频,在哔哩哔哩搜索韩老师就可以找到 韩老师讲高校《计算机网络原理》

推荐书籍:《计算机网络:自顶向下》、《图解http》

我是先看了视频,在看这两本书的(文末我会给出电子版)。

二、操作系统

操作系统也是一门非常重要的知识,在面试中也是问的非常多(当然,看公司,有些公司技术栈是 Java 的,可能问的比较少)。对于操作系统,要学的也挺多,例如:

啥是进程,啥是线程,他们的本质区别?我们运行一个程序时,数据放在哪里?代码放在哪里?咋就还要分堆和栈?线程切换时是上下文是啥意思?

虚拟地址是什么鬼东西?线程需要那么多种状态干啥子?什么是乐观锁、悲观锁?死锁是怎么造成的?解决死锁的策略有哪些?等等

有人说学操作系统太他妈枯燥了,确实挺枯燥,不过说实话,我还是学的挺有意思的,感觉可以学到很多种策略,一种比一种好,每次看完都是:我去,咋我就想不到呢。我觉得,对于前期,我们需要多参考别人的策略,看多了,有了一定的基础,慢慢形成自己的策略,总之,看这些书,不单要掌握这些知识点,更重要的是一种思维逻辑的提升

对于操作系统,我总结了下面一些比较核心,面试相对容易被考到的。

1、进程的通信方式(我写过一篇很不错的文章:记一次面试:进程之间究竟有哪些通信方式?---- 告别死记硬背)

2、进程、线程究竟是由什么组成的?有哪些数据?

3、内存管理,包括:虚拟内存(重点)、分页、分段、分页系统地址映射、内存置换算法(重点)。

4、死锁的处理策略(死锁预防、死锁检测与恢复、死锁避免)

5、进程调度算法

6、磁盘寻道算法

上面说的这些,我认为是比较重要的,如果你没学过,我相信学了之后,你可以学到很多东西,知识点只是其中之一。

推荐视频:这个我没看过视频,所以想学的,我推荐去中国mooc大学找各大高校的课,也可以去国外找对应的课。

推荐书籍:我看过的书籍是《操作系统—精髓与设计原理(第八版)》,不过大佬们都推荐《深入理解计算机操作系统(原书第三版)》,我看过目录,感觉还不错,这里也推荐这一本。不过对于零基础的,我建议可以先看一本专门给小白看的书:《程序是如何跑起来的》。

操作系统的学习,还是挺枯燥的,不过,只有把最难的啃过去,才能变的更加强大。也欢迎大家持续关注我的公众号:苦逼的码农

三、数据库(这里我用 MySQL)

在大学的课程里,一般都会开设一门数据库的课程,不过这门数据库是没有针对某一种数据库语言的(例如 MySQL、Oracle)。不过我这里只讲 MySQL的学习,别问为什么,问就是我逃了二十分之十九的课

把MySQL学好,还是特别重要的,千万不能停留在会用的层面上,而是应该要了解一下原理,特别是对于要面试的同学,会问挺多原理,我每次被问到 MySQL 我都会信心大增,因为我虽然不大好写 SQL,但是,知道挺多原理,记得腾讯、shopee面试时,面完 MySQL,面试官好像对我刮目相看了。好了,不吹了,说这些也是强大 MySQL 的重要性。下面就说我学过的一些知识以及推荐的学习资料吧。

对于 MySQL,需要学的还挺多的,例如,

1、一条 sql 语句是如何执行的?进行更新时又是怎么处理的?

2、索引是如何实现的?多种引擎的实现区别?聚族索引,非聚族索引,二级索引,唯一索引、最左匹配原则等等(非常重要)

3、事务相关:例如事务的隔离是如何实现的?事务是如何保证原子性?不同的事务看到的数据怎么就不一样了?难道每个事务都拷贝一份视图?MVCC 的实现原理(重要)等等。

4、各种锁相关,例如表锁,行锁,间隙锁,共享锁,排他锁。这些锁的出现主要是用来解决哪些问题?(重要)

5、日志相关:redolog,binlog,undolog,这些日志的实现原理,为了解决怎么问题?日志也是非常重要的吧,面试也问的挺多。

6、数据库的主从备份、如何保证数据不丢失、如何保证高可用等等。

还有一些常用命令也要知道。

我觉得,只要你了解了以上的原理,那么对数据库调优的帮助是非常大的,上面除了第六点,其他五点,在应届生的面试中,极其高频。

推荐书籍:连 sql 都不会写的,推荐《SQL必知必会》,接着推荐《MySQL技术内幕:InnoDB存储引擎》。

这里我必须推荐下极客时间的一个专栏:《MySQL实战45讲》,讲的非常好,看完应付面试,我觉得够了,我每次面试 MySQL 几乎都加分,离不开这个专栏。如何你想要购买,可以在我的公众号回复『数据库』,我会给你发对应的购买链接(注意,这个可不是广告哈,大家买不买看自己)

四、数据结构与算法

数据结构与算法,我就不想多说了,看我文章的都知道,我写的文章 80% 是数据结构与算法相关的,重要性不用说。我秋招最大的优势估计就是数据结构与算法的掌握了。上面三门课程的学习,基本也都是离不开数据结构的,对于如何学习数据结构与算法,我觉得可以在写一篇文章了,所以数据结构与算法的学习,我这里不写了,可以关注我的文章,我明天会写一篇与算法相关的。

论面试,我觉得 操作系统+计算机网络+数据库  + 算法 这三个是问的最多的,所以我写的比较详细,对于学习计算机基础,不为了面试的话,我觉得下面的也及其重要。我分出来说,是为了那些要急着面试的人,可以重点学习下上面这四个。

五、汇编

我觉得,如何有时间,学习下汇编是必须的,学习了汇编,能够更好着帮助我们知道计算机是如何处理程序代码的,例如寄存器和内存是如何使用的?循环、函数调用、数组是如何实现的?地址是怎么一回事?等等。

很多二进制代码是可以反编译成汇编的,如何你会汇编,那么可以帮助我们更好着去理解一些东西。所以这里建议大家学习下汇编,并且要动手写一些程序。

对于汇编的资料,我可能没啥好推荐的,自己看的不多。看过两本书,对于入门的,我建议看 王爽的那本书《汇编语言(第三版)》,不过这本只适合入门,如果想继续,可以看《汇编程序设计》。

六、编译原理

说实话,编译原理还挺难,反正我觉得很难,不过有时间我觉得可以学学,学了这个你可以知道我们的编译器如何分析我们的代码的,例如词法分析,语法分析,语义分析等等。当然,你未来可能会自己写个特定分析代码的编译器也不一定,这个时候,就更加需要学了。

对于学习的资料,我觉得可以看视频 + 书。视频的话中国 mooc 大学搜索即可,书的话,说时候,我也看的不多,只看过学校指定的教材,所以这里给不了多少建议,自己当当自行搜索,哪本热门卖哪本勒。

总结

暂时先介绍这么多吧,说实话,学了这些,不单单是多学了一门知识,更重要的是可以提升你的罗辑思维,给你带来更多的 idea。在之后我的公众号里,我也是主要写计算机基础 + 算法。而这些,是值得每一个程序员去学习的,无论你是什么岗位。而且知识知识学了之后,你去学习其他知识,我相信可以上手的更快滴。

上面涉及到的书籍,我也去给你们搜索来了电子版的,由于这些书籍涉及到版权问题,百度云链接很容易失效,如果你想获取这些书籍,可以加我的微信号:iamshuaidi。或者扫码,并且备注:计算机基础。我会有空的时候集中给你们发滴。(之前加过我的,就别加这个号了,这个是我的另外一个号)

640?wx_fmt=jpeg

你可能会喜欢

640?wx_fmt=jpeg

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

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

相关文章

数据结构算法入门--一文了解什么是复杂度

图片来自 Pixabay,作者:TeroVesalainen2019 年第 74 篇文章,总第 98 篇文章本文大约 3000 字,阅读大约需要 10 分钟最近会开始更新一个数据结构算法的学习系列,同时不定期更新 leetcode 的刷题。这是第一篇文章&#x…

一文了解数组

2019 年第 75 篇文章,总第 99 篇文章”数据结构算法入门系列的第二篇,这次介绍下数组, 数组是一个最基础而且常见的数据结构,几乎每种编程语言都有。上一篇文章:数据结构算法入门--一文了解什么是复杂度今日推荐阅读…

Python3.8 了解的差不多了吧,Python3.9 新特性了解一下!

"Python学习开发",一个值得加星标的公众号。正文共:4946 字 1 图预计阅读时间:13 分钟作者:陈祥安原文有删改:https://docs.python.org/3.9/whatsnew/3.9.html本文将解释 Python 3.9 中的新特性,而不是 3.8。有关完整的…

首发:适合初学者入门人工智能的路线及资料下载

本文为AI入门提供了一个简易的学习路线,并提供了代码和数据集下载。(黄海广)一、前言AI以及机器学习入门,初学者遇到的问题非常多,但最大的问题就是:资料太多!!!看不完&a…

数据结构算法入门--链表

2019 年第 76 篇文章,总第 100 篇文章 本文大约 3200 字,阅读大约需要 10 分钟 数据结构算法系列: 数据结构算法入门系列第三篇--链表,链表也是非常常见的数据结构,面试过程中也会经常考到相关的题目。 本文首先介绍链…

react学习(3)----不能在该位置用setstate

this.setState({ pageIndex: 1, pageSize: 10, });

带你少走弯路:强烈推荐的Keras快速入门资料和翻译(可下载)

上次写了TensorFlow和PyTorch的快速入门资料,受到很多好评,读者强烈建议我再出一个keras的快速入门路线,经过翻译和搜索网上资源,我推荐4份入门资料,希望对大家有所帮助。备注:另外两个入门资料很负责任地说…

Mac 下安装配置 Python 开发环境

图片来源:Unsplash,作者 Markus Spiske 2019 年第 77 篇文章,总第 101 篇文章前言记录下 Mac 电脑的开发环境安装配置,主要包括:安装&使用Homebrew安装使用 git安装 anaconda,配置 python3 环境安装 ju…

react学习(5)----通过设置初始值控制页面render渲染

boothActivityCode: this.props.location.query.code || ,

【Android源代码下载】收集整理android界面UI效果源码

在Android开发中,Android界面UI效果设计一直都是很多童鞋关注的问题,今天给大家分享下大神收集整理的多个android界面UI效果,都是源码,都是干货,贡献给各位网友! 话不多说,直接上效果图&#xf…

一文了解类别型特征的编码方法

来源:Unsplash,作者:an Rizzari2019 年第 78 篇文章,总第 102 篇文章目录:问题描述数据准备标签编码自定义二分类one-hot 编码总结问题描述一般特征可以分为两类特征,连续型和离散型特征,而离散…

如何用栈实现浏览器的前进和后退?

2019 年第 79 篇文章,总第 103 篇文章数据结构与算法系列的第四篇文章,前三篇文章:前言浏览器的前进和后退功能怎么用栈来实现呢?这里先介绍一下栈的定义和实现,并介绍它的一些常用的应用,最后再简单实现一…

数据科学家令人惊叹的排序技巧

2019 年第 80 篇文章,总第 104 篇文章本文大约 7800 字,阅读大约需要20分钟原题 | Surprising Sorting Tips for Data Scientists作者 | Jeff Hale原文 | https://towardsdatascience.com/surprising-sorting-tips-for-data-scientists-9c360776d7e译者 …

几个有趣的python技巧

2019 年第 82 篇文章,总第 106 篇文章标题 | python-is-cool作者 | chiphuyen原文 | https://github.com/chiphuyen/python-is-cool译者 | kbsc13("算法猿的成长"公众号作者)声明 | 翻译是出于交流学习的目的,欢迎转载,但请保留本文…

20191215周学习总结

最近会打算每周总结一下学习的内容,主要内容可能是看过的书的一些学习笔记、论文阅读、学习的知识点以及推荐一些文章。这周的学习包括:推荐系统的知识点整理机器学习的技巧学习linux下两台机器的ssh免密登陆方式书籍阅读效率方法推荐系统因为工作方向的…

玩转12306之系统登录

【申明:本文所涉及的技术和分析的目的都是为了学习和交流,任何人使用文中所提的技术或成果做出的违法事情与我无关,大家购买火车票还是去12306官网上去购买。】 从今天起,我开始分析12306网站的Http请求,以及编写一个客…

Nginx快速搭建和基本使用

2019年第 83 篇文章,总第 107 篇文章最近在工作中项目需要上线,所以也了解到关于一些部署上线的知识内容,Nginx 就是其中一个知识点,主要是可以用它来进行负载均衡,本文的目录如下:简介安装配置基本使用简介…