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

2023-10-27

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • Android dumpsys使用

    目录 一 dumpsys命令介绍 1 命令介绍 2 服务查询和介绍 二 核心服务信息查询 1 package包信息查询 2 activity信息查询 3 window信息查询 三 实现自定义服务dumpsys信息查询 一 dumpsys命令
  • NodeJS - 回调函数

    什么是回调函数 回调函数是一个异步等价的函数 在给定任务完成时调用回调函数 NodeJS大量使用回调 NodeJS的所有API都是以支持回调的方式编写的 例如 读取文件的函数可能会开始读取文件后并立即将控件返回到执行环境 以便可以执行下一条
  • 区块链-区块链特点

    目录 https blog csdn net qq 40452317 article details 89646633 区块链 Blockchain 是一系列现有成熟技术的有机组合 它对账本进行分布式的有效记录 并且提供完善的脚本以支持不同
  • Qt 2D图形平面绘制

    Qt 2D图形平面绘制 一 图形视图框架 Graphics View Framework 二 实战 1 步骤 2 代码 三 参考 四 总结 一 图形视图框架 Graphics View Framework QGraphicsScene 场景
  • RocketMQ解析

    文章目录 1 单机版消息中心 2 分布式消息中心 2 1 问题与解决 2 1 1 消息丢失的问题 2 1 2 同步落盘怎么才能快 2 1 3 消息堆积的问题 2 1 4 定时消息的实现 2 1 5 顺序消息的实现 2 1 6 分布式消息的实
  • 软件测试进阶篇

    测试专栏 软件测试的基本概念 关于软件测试 作为一个测试人员 这些基础知识必不可少 关于测试用例 目录 一 按照测试对象来划分 1 界面 2 可靠性的测试 3 容错性 4 文档测试 5 兼容性测试 6 易用性测试 7 安装卸载测试 8 安全
  • Java string的基本用法

    Java string的基本用法 一 定义字符串与子串 定义 String e 空字符串 String E Hello 提取子串使用Substring方法 String E Hello String s E substring 0 4 s等
  • 《数字化转型》——企业持续有效增长的新引擎

    中国国民经济和社会发展第十四个五年规划和2035念远景目标纲要 明确指出 迎接数字时代 激活数据要素潜能 推动网络强国建设 加快建设数字经济 数字社会 数字政府 以数字化转型整体驱动生产方式 生活方式和治理方式变革 那么企业如何做 如何选型
  • Nginx通过/etc/init.d/nginx方式启动或停止服务

    Linux Nginx启动 停止 重启脚本 Nginx 启动 重启 停止脚本 第一步 先运行命令关闭nginx sudo kill cat usr local nginx logs nginx pid lt
  • Python时间序列预测大气二氧化碳浓度

    二氧化碳 CO2 和甲烷 CH4 等温室气体 GHG 会在大气中捕获热量 从而使我们的星球保持温暖 对生物物种友好 无论如何 燃烧化石燃料等人类活动会导致大量温室气体排放 从而过度提高地球的全球平均温度 因此 向可持续的全球经济转型势在必行
  • 极光笔记

    01 营销人 你是否饱受困扰 作为营销人的你 从996到007 每天从早忙到晚 但还是没办法把访客转化成客户 作为营销人的你 想通过APP通知 短信 邮件 公众号消息等方式 把所有能想到的营销方式 万箭齐发 结果却收效甚微 作为营销人的你
  • unity 设置animation不循环

    Unity中动画创建后 将会生成一个后缀名为 anim的文件 里面包含着动画内容 里面有一个属性 叫Loop Time 创建时它默认是勾选的 如果想去掉 可先找到你生成动画时创建的 anim文件 点击它 在右边Inspector栏里面找到L
  • MediaCodec、OpenGL、OpenSL/AudioTrack 实现一款简单的视频播放器

    概述 功能很简单 大致流程为 1 MediaCodec 解码视频文件得到 YUV PCM 数据 2 OpenGL 将 YUV 转为 RGB 并渲染到 Surface 上 3 OpenSL AudoTrack 获取 PCM 数据并播放 需要的
  • IDEA插件ASM Bytecode Outline

    IDEA插件ASM Bytecode Outline
  • Python之map()函数详解

    文章目录 一 map 函数简介 1 1 map 函数基本语法 1 2 map 函数 lambda表达式 1 3 map 函数输入多个可迭代对象iterable 1 4 查看返回的迭代器内容 二 map 函数示例 示例一 使用 map 函数操
  • CentOS 7.6镜像下载

    目前在国内使用最多的两个Linux发行版本一个是CentOS 另外一个是Ubuntu CentOS是一个可以重新分发的开源操作系统 也是企业Linux发行版的领头羊 官方目前发布的最新CentOS版本为CentOS 9 那么如何到下载旧版本
  • 一个数组有 N 个元素,求连续子数组的最大和。 例如:[-1,2,1],和最大的连续子数组为[2,1],其和为 3

    1 题目描述 一个数组有 N 个元素 求连续子数组的最大和 例如 1 2 1 和最大的连续子数组为 2 1 其和为 3 输入描述 输入为两行 第一行一个整数n 1 lt n lt 100000 表示一共有n个元素 第二行为n个数 即每个元素
  • 从利用Arthas排查线上Fastjson问题到Java动态字节码技术(中)

    上一篇文章 中通过对一次线上事故的复盘 引出了福报厂的Arthas 一个建立在Java动态字节码技术之上的Java诊断工具 关于Arthas的使用方式就不赘述了 查看官方文档可以很快上手 玩法也特别多 上一篇中也仅仅只介绍了一种使用场景 即
  • c++ 建立链表并实现合并

    创建两个链表并实现两个链表相加 include
  • 《大型网站技术架构》序

    推荐序一 1 传统企业应用于大型网站应用的区别 传统的企业应用系统主要面对的技术挑战是处理复杂凌乱 干变万化的所谓业务逻辑 而大型网站主要面对的技术挑战是处理超大量的用户访问和海量的数据处理 前者的挑战来自功能性需求 后者的挑战来自非功能性

随机推荐

  • 树-广度优先和深度优先搜索算法

    广度优先和深度优先搜索算法 本章主要讲述广度优先搜索算法BFS Breadth First Search 和深度优先算法DFS Depth First Search 广度优先 从起点开始由近及远进行广泛搜索 一般使用队列实现 深度优先 从起
  • Django表单系统

    目录 使用Form对象定义表单 Form对象的特性 表单字段的基类Field 常用的表单字段类型 基于Model定制的表单 ModelForm定义方式 表单中的常用方法 在Web站点中与后端服务进行交互 通常使用表单提交的方式 表单提交数据
  • 辐射神经场算法——NeRF算法详解

    辐射神经场算法 NeRF算法详解 辐射神经场算法 NeRF算法详解 1 Volume Rendering方法 2 NeRF中的积分公式推导 3 NeRF中应用的技巧 3 1 Positional Encoding 3 2 Hierarchi
  • (一)Wireshark 抓包解析出视频流ts

    这里简单介绍下Wireshark WS 解析出视频流的方法 其他过滤方法可以百度搜到更具体的 打开一个网络封包 一般是 pcap 或者 cap 抓包方式多样 若在嵌入式设备上面抓包 可以用工具TCPDUMP这个工具 若是android手机抓
  • settimeout、promise、async的执行顺序

    用一段代码来说明 async function async1 console log async1 start await async2 console log async1 end async function async2 consol
  • 生产制造业ERP管理系统

    什么是生产制造业ERP管理系 生产制造业ERP管理系统的建设本身作为企业在发展过程当中重要的战略布局建设 涉及到各个不同的企业部门 涵盖了研发 生产 物流 财务等等 需要对这些团队进行一把手的领导 而且在企业整体发展过程当中 可以做好综合性
  • MongoDB以及MongoVUE的安装和使用

    环境安装 MongoDB的安装 下载mongoDB MongoDB官网地址 个人百度云盘地址 版本为 mongodb win32 x86 64 2008plus ssl v3 0 latest signed msi 安装 到这里mongod
  • Spring源码------IoC源码分析详解

    Spring源码 IoC源码分析详解 目录 Spring源码 IoC源码分析详解 1 控制反转 IoC 2 Spring IoC 源码时序图 详细版 3 源码追踪 3 1详细版链接 3 2 个人总结浓缩版 方便记忆 4 总结 1 控制反转
  • Oracle练习

    一 找到员工表中工资最高的前三名 降序排序 select from emp order by sal desc rownum 伪列 系统自动生成的一列 用来表示行号 rownum是Oracle中特有的用来表示行号的 默认值 起始值是 1 在
  • 打包神器webpack的一键式操作

    创建基本的webpack4 x项目 运行npm init y 快速初始化项目 在项目根目录创建src源代码目录和dist产品目录 在 src 目录下创建 index html 使用 cnpm 安装 webpack 运行cnpm i webp
  • ifconfig报错:SIOCSIFFLAGS: Operation not permitted

    insmod mt7601Usta ko rtusb init rt2870 gt usbcore registered new interface driver rt2870 iwconfiglo no wireless extensio
  • 深度学习实战29-AIGC项目:利用GPT-2(CPU环境)进行文本续写与生成歌词任务

    大家好 我是微学AI 今天给大家介绍一下深度学习实战29 AIGC项目 利用GPT 2 CPU环境 进行文本续写与生成歌词任务 在大家没有GPU算力的情况 大模型可能玩不动 推理速度慢 那么我们怎么才能跑去生成式的模型呢 我们可以试一下GP
  • AWS SAA-C03 #99

    A company is implementing a shared storage solution for a gaming application that is hosted in an on premises data cente
  • 宝塔部署前后端分离项目(Vue+SpringBoot)

    目录 后端部分 配置Redis 前端部分 后端部分 1 先修改自己的speingboot配置文件 我的是yml文件 保证宝塔上建的数据库和自己代码里 就是配置文件中所建的数据库的名字是一致的密码也要保持一致 Redis也一样 如果有的话 2
  • JavaAgent的那点秘密

    JavaAgent的那点秘密 前言 大家都知道Java文件编译成Class文件之后才能在Jvm中运行的 而Class文件自有一套规范 不必一定是Java文件经由javac编译产生 其它编程语言也可以直接生成Class文件交由Jvm运行 既然
  • android+多次开启服务,关于Android中的四大组件(Service的开启与封锁)

    关于Android中的四大组件 Service的开启与关闭 前言 服务 Service 是Android系统中的四大组件之一 服务主要用于两个目的 后台运行和跨进程访问 通过启动 一个服务 可以在不显示界面的前提下在后台运行指定的任务 这样
  • 2023 VScode安装教程【超详细】看这一篇就够了

    一 VScode下载 1 进入VScode官网 官网地址 https code visualstudio com 点击 Download 进入下载 不要点击 Download for Windows Stable Build 否则它会自动帮
  • Jboss历史漏洞利用 - JMX Console 未授权访问漏洞

    文章目录 环境搭建 漏洞简介 漏洞发现 漏洞利用 远程部署war包 GET SHELL 防护建议 环境搭建 docker搭建操作指南 docker search testjboss docker pull testjboss jboss d
  • 虚幻4 使用脚本编译自己的工程

    工程文件 Engine Source Programs AutomationTool AutomationTool Mono sln public static void Build BuildCommand Command Project
  • 【吐血整理】那些让你起飞的计算机基础知识:学什么,怎么学?

    作者 帅地 来源公众号 苦逼的码农 我公众号里的文章 写的大部分都是与计算机基础知识相关的 这些基础知识 就像我们的内功 如果在未来想要走的更远 这些内功是必须要修炼的 框架千变万化 而这些通用的底层知识 却是几乎不变的 了解了这些知识 可