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

戳蓝字“CSDN云计算”关注我们哦!

640?wx_fmt=jpeg
作者 | 帅地
责编 | 阿秃

我公众号的读者学生以及非科班的应该挺多的,所以我今天这篇文章就写一写,我学过的计算机基础知识,看过的书以及我学过的顺序
当然,以下是我个人的一些经验,并且学过的一些知识,仅供参考,也欢迎大家进行补充

一、计算机网络

在我们用的程序中,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 的,可能问的比较少)。对于操作系统,要学的也挺多,例如:
啥是进程,啥是线程,他们的本质区别?我们运行一个程序时,数据放在哪里?代码放在哪里?咋就还要分堆和栈?线程切换时是上下文是啥意思?
虚拟地址是什么鬼东西?线程需要那么多种状态干啥子?什么是乐观锁、悲观锁?死锁是怎么造成的?解决死锁的策略有哪些?等等
有人说学操作系统太他妈枯燥了,确实挺枯燥,不过说实话,我还是学的挺有意思的,感觉可以学到很多种策略,一种比一种好,每次看完都是:我去,咋我就想不到呢。我觉得,对于前期,我们需要多参考别人的策略,看多了,有了一定的基础,慢慢形成自己的策略,总之,看这些书,不单要掌握这些知识点,更重要的是一种思维逻辑的提升
对于操作系统,我总结了下面一些比较核心,面试相对容易被考到的。
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。在之后我的公众号里,我也是主要写计算机基础 + 算法。而这些,是值得每一个程序员去学习的,无论你是什么岗位。而且知识知识学了之后,你去学习其他知识,我相信可以上手的更快滴。
640?wx_fmt=png

640?wx_fmt=jpeg

福利
扫描添加小编微信,备注“ 姓名+公司职位 ”,入驻【程序员宅基地】,加入【 云计算学习交流群 】,和志同道合的朋友们共同打卡学习!

640?wx_fmt=jpeg

推荐阅读:
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/FL63Zv9Zou86950w/article/details/103017694

智能推荐

使用nginx解决浏览器跨域问题_nginx不停的xhr-程序员宅基地

文章浏览阅读1k次。通过使用ajax方法跨域请求是浏览器所不允许的,浏览器出于安全考虑是禁止的。警告信息如下:不过jQuery对跨域问题也有解决方案,使用jsonp的方式解决,方法如下:$.ajax({ async:false, url: 'http://www.mysite.com/demo.do', // 跨域URL ty..._nginx不停的xhr

在 Oracle 中配置 extproc 以访问 ST_Geometry-程序员宅基地

文章浏览阅读2k次。关于在 Oracle 中配置 extproc 以访问 ST_Geometry,也就是我们所说的 使用空间SQL 的方法,官方文档链接如下。http://desktop.arcgis.com/zh-cn/arcmap/latest/manage-data/gdbs-in-oracle/configure-oracle-extproc.htm其实简单总结一下,主要就分为以下几个步骤。..._extproc

Linux C++ gbk转为utf-8_linux c++ gbk->utf8-程序员宅基地

文章浏览阅读1.5w次。linux下没有上面的两个函数,需要使用函数 mbstowcs和wcstombsmbstowcs将多字节编码转换为宽字节编码wcstombs将宽字节编码转换为多字节编码这两个函数,转换过程中受到系统编码类型的影响,需要通过设置来设定转换前和转换后的编码类型。通过函数setlocale进行系统编码的设置。linux下输入命名locale -a查看系统支持的编码_linux c++ gbk->utf8

IMP-00009: 导出文件异常结束-程序员宅基地

文章浏览阅读750次。今天准备从生产库向测试库进行数据导入,结果在imp导入的时候遇到“ IMP-00009:导出文件异常结束” 错误,google一下,发现可能有如下原因导致imp的数据太大,没有写buffer和commit两个数据库字符集不同从低版本exp的dmp文件,向高版本imp导出的dmp文件出错传输dmp文件时,文件损坏解决办法:imp时指定..._imp-00009导出文件异常结束

python程序员需要深入掌握的技能_Python用数据说明程序员需要掌握的技能-程序员宅基地

文章浏览阅读143次。当下是一个大数据的时代,各个行业都离不开数据的支持。因此,网络爬虫就应运而生。网络爬虫当下最为火热的是Python,Python开发爬虫相对简单,而且功能库相当完善,力压众多开发语言。本次教程我们爬取前程无忧的招聘信息来分析Python程序员需要掌握那些编程技术。首先在谷歌浏览器打开前程无忧的首页,按F12打开浏览器的开发者工具。浏览器开发者工具是用于捕捉网站的请求信息,通过分析请求信息可以了解请..._初级python程序员能力要求

Spring @Service生成bean名称的规则(当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致)_@service beanname-程序员宅基地

文章浏览阅读7.6k次,点赞2次,收藏6次。@Service标注的bean,类名:ABDemoService查看源码后发现,原来是经过一个特殊处理:当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致public class AnnotationBeanNameGenerator implements BeanNameGenerator { private static final String C..._@service beanname

随便推点

二叉树的各种创建方法_二叉树的建立-程序员宅基地

文章浏览阅读6.9w次,点赞73次,收藏463次。1.前序创建#include<stdio.h>#include<string.h>#include<stdlib.h>#include<malloc.h>#include<iostream>#include<stack>#include<queue>using namespace std;typed_二叉树的建立

解决asp.net导出excel时中文文件名乱码_asp.net utf8 导出中文字符乱码-程序员宅基地

文章浏览阅读7.1k次。在Asp.net上使用Excel导出功能,如果文件名出现中文,便会以乱码视之。 解决方法: fileName = HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);_asp.net utf8 导出中文字符乱码

笔记-编译原理-实验一-词法分析器设计_对pl/0作以下修改扩充。增加单词-程序员宅基地

文章浏览阅读2.1k次,点赞4次,收藏23次。第一次实验 词法分析实验报告设计思想词法分析的主要任务是根据文法的词汇表以及对应约定的编码进行一定的识别,找出文件中所有的合法的单词,并给出一定的信息作为最后的结果,用于后续语法分析程序的使用;本实验针对 PL/0 语言 的文法、词汇表编写一个词法分析程序,对于每个单词根据词汇表输出: (单词种类, 单词的值) 二元对。词汇表:种别编码单词符号助记符0beginb..._对pl/0作以下修改扩充。增加单词

android adb shell 权限,android adb shell权限被拒绝-程序员宅基地

文章浏览阅读773次。我在使用adb.exe时遇到了麻烦.我想使用与bash相同的adb.exe shell提示符,所以我决定更改默认的bash二进制文件(当然二进制文件是交叉编译的,一切都很完美)更改bash二进制文件遵循以下顺序> adb remount> adb push bash / system / bin /> adb shell> cd / system / bin> chm..._adb shell mv 权限

投影仪-相机标定_相机-投影仪标定-程序员宅基地

文章浏览阅读6.8k次,点赞12次,收藏125次。1. 单目相机标定引言相机标定已经研究多年,标定的算法可以分为基于摄影测量的标定和自标定。其中,应用最为广泛的还是张正友标定法。这是一种简单灵活、高鲁棒性、低成本的相机标定算法。仅需要一台相机和一块平面标定板构建相机标定系统,在标定过程中,相机拍摄多个角度下(至少两个角度,推荐10~20个角度)的标定板图像(相机和标定板都可以移动),即可对相机的内外参数进行标定。下面介绍张氏标定法(以下也这么称呼)的原理。原理相机模型和单应矩阵相机标定,就是对相机的内外参数进行计算的过程,从而得到物体到图像的投影_相机-投影仪标定

Wayland架构、渲染、硬件支持-程序员宅基地

文章浏览阅读2.2k次。文章目录Wayland 架构Wayland 渲染Wayland的 硬件支持简 述: 翻译一篇关于和 wayland 有关的技术文章, 其英文标题为Wayland Architecture .Wayland 架构若是想要更好的理解 Wayland 架构及其与 X (X11 or X Window System) 结构;一种很好的方法是将事件从输入设备就开始跟踪, 查看期间所有的屏幕上出现的变化。这就是我们现在对 X 的理解。 内核是从一个输入设备中获取一个事件,并通过 evdev 输入_wayland

推荐文章

热门文章

相关标签