别再学习框架了,看看这些让你起飞的计算机基础知识

这些基础知识 , 就像我们的内功 , 如果在未来想要走的更远 , 这些内功是必须要修炼的 。 框架千变万化 , 而这些通用的底层知识 , 却是几乎不变的 , 了解了这些知识 , 可以帮助我们更快着学习一门知识 , 更加懂得计算机的运行机制 。
当然 , 在面试中也经常会被问到 , 特别是对于应届生 。 也有读者经常问的计算机基础知识究竟是指啥?学习顺序?推荐书籍?
所以我今天这篇文章就写一写 , 我学过的计算机基础知识 , 看过的书以及我学过的顺序 。
当然 , 以下是我个人的一些经验 , 并且学过的一些知识 , 仅供参考 , 也欢迎大家进行补充 。
一、计算机网络 在我学习这门课之前 , 我就特别好奇 , 一台电脑是怎么把消息发给另外一台电脑的呢?例如:
1、两台电脑啥线路也没有相连 , 怎么就能把消息发送给他呢?
2、世界上的电脑那么多 , 咋就能找到那台特点的电脑呢?有人说我们可以MAC或者IP来唯一标识啊 , 可是 , 我就有点疑惑了 , 世界那么大 , 电脑那么多 , 有了这个标识 , 我们该怎么找到他呢?遍历所有电脑?
3、多个程序同时发消息给一台电脑 , 电脑是如何准确把这些消息拿给这些不同程序的呢?
4、发送的消息丢失了怎么办?
总之 , 一大堆疑问 , 看了计算机网络之后 , 才豁然开朗 。 自己也写了一篇评价不错的文章:一文读懂一台计算机是如何把数据发送给另一台计算机的
所以这里 , 我是强烈建议大家学一下的 , 在面试中 , 计算机网络也是高频考点 , 这里我大致总结一下一些必学协议以及面试高频考点:
1、http协议 , 包括:封装格式 , 常见响应码 , 不同版本的区别 , 常见请求方法 , 存在哪些安全隐患 , 啥是无状态协议等 。
2、https协议:http是明文传输 , https是加密安全的 , 需要知道https是如何加密的、数字证书如何形成 , 啥的对称加密、非对称加密 。
3、TCP协议:三次握手、四次挥手、如何保证可靠传输、流量控制、拥塞控制 。
4、UDP:这个大致了解即可 , 好像内容比较少
5、DNS、ICMP、ARP、DHCP(我就不一个一个写了)
上面写的这些协议 , 我觉得是比较重要的 , 特别是在面试中 。
对于新手推荐视频:可以看韩老师讲的视频 , 在哔哩哔哩搜索韩老师就可以找到 , 韩老师讲搞笑《计算机网络原理》 。
推荐书籍:《计算机网络:自顶向下》、《图解http》
二、操作系统 啥是进程 , 啥是线程 , 他们的本质区别?我们运行一个程序时 , 数据放在哪里?代码放在哪里?咋就还要分堆和栈?线程切换时是上下文是啥意思?
虚拟地址是什么鬼东西?线程需要那么多种状态干啥子?什么是乐观锁、悲观锁?死锁是怎么造成的?解决死锁的策略有哪些?等等
有人说学操作系统太他妈枯燥了 , 确实挺枯燥 , 不过说实话 , 我还是学的挺有意思的 , 感觉可以学到很多种策略 , 一种比一种好 , 每次看完都是:我去 , 咋我就想不到呢 。 我觉得 , 对于前期 , 我们需要多参考别人的策略 , 看多了 , 有了一定的基础 , 慢慢形成自己的策略 , 总之 , 看这些书 , 不单要掌握这些知识点 , 更重要的是一种思维逻辑的提升
对于操作系统 , 我总结了下面一些比较核心 , 面试相对容易被考到的 。
1、进程的通信方式(我写过一篇很不错的文章:记一次面试:进程之间究竟有哪些通信方式?----告别死记硬背)
2、进程、线程究竟是由什么组成的?有哪些数据?
3、内存管理 , 包括:虚拟内存(重点)、分页、分段、分页系统地址映射、内存置换算法(重点) 。
4、死锁的处理策略(死锁预防、死锁检测与恢复、死锁避免)
5、进程调度算法
6、磁盘寻道算法
上面说的这些 , 我认为是比较重要的 , 如果你没学过 , 我相信学了之后 , 你可以学到很多东西 , 知识点只是其中之一 。
推荐视频:这个我没看过视频 , 所以想学的 , 我推荐去中国mooc大学找各大高校的课 , 也可以去国外找对应的课 。
推荐书籍:我看过的书籍是《操作系统—精髓与设计原理(第八版)》 , 不过大佬们都推荐《深入理解计算机操作系统(原书第三版)》 , 我看过目录 , 感觉还不错 , 这里也推荐这一本 。 不过对于零基础的 , 我建议可以先看一本专门给小白看的书:《程序是如何跑起来的》 。
操作系统的学习 , 还是挺枯燥的 , 不过 , 只有把最难的啃过去 , 才能变的更加强大 。
三、数据库(这里我用MySQL) 把MySQL学好 , 还是特别重要的 , 千万不能停留在会用的层面上 , 而是应该要了解一下原理 , 特别是对于要面试的同学 , 会问挺多原理 , 我每次被问到MySQL我都会信心大增 , 因为我虽然不大好写SQL , 但是 , 知道挺多原理 , 记得腾讯、shopee面试时 , 面完MySQL , 面试官好像对我刮目相看了 。 好了 , 不吹了 , 说这些也是强大MySQL的重要性 。 下面就说我学过的一些知识以及推荐的学习资料吧 。
对于MySQL , 需要学的还挺多的 , 例如 ,
1、一条sql语句是如何执行的?进行更新时又是怎么处理的?
2、索引是如何实现的?多种引擎的实现区别?聚族索引 , 非聚族索引 , 二级索引 , 唯一索引、最左匹配原则等等(非常重要)
3、事务相关:例如事务的隔离是如何实现的?事务是如何保证原子性?不同的事务看到的数据怎么就不一样了?难道每个事务都拷贝一份视图?MVCC的实现原理(重要)等等 。
4、各种锁相关 , 例如表锁 , 行锁 , 间隙锁 , 共享锁 , 排他锁 。 这些锁的出现主要是用来解决哪些问题?(重要)
5、日志相关:redolog , binlog , undolog , 这些日志的实现原理 , 为了解决怎么问题?日志也是非常重要的吧 , 面试也问的挺多 。
6、数据库的主从备份、如何保证数据不丢失、如何保证高可用等等 。
还有一些常用命令也要知道 。
我觉得 , 只要你了解了以上的原理 , 那么对数据库调优的帮助是非常大的 , 上面除了第六点 , 其他五点 , 在应届生的面试中 , 极其高频 。
推荐书籍:连sql都不会写的 , 推荐《SQL必知必会》 , 接着推荐《MySQL技术内幕:InnoDB存储引擎》 。
四、数据结构与算法数据结构与算法 , 我就不想多说了 , 看我文章的都知道 , 我写的文章80%是数据结构与算法相关的 , 重要性不用说 。 我秋招最大的优势估计就是数据结构与算法的掌握了 。 上面三门课程的学习 , 基本也都是离不开数据结构的 , 对于如何学习数据结构与算法 , 我觉得可以在写一篇文章了 , 所以数据结构与算法的学习 , 我这里不写了 , 可以关注我的文章 , 我明天会写一篇与算法相关的 。
论面试 , 我觉得操作系统+计算机网络+数据库+算法这三个是问的最多的 , 所以我写的比较详细 , 对于学习计算机基础 , 不为了面试的话 , 我觉得下面的也及其重要 。 我分出来说 , 是为了那些要急着面试的人 , 可以重点学习上面这四个 。
五、汇编我觉得 , 如何有时间 , 学习下汇编是必须的 , 学习了汇编 , 能够更好着帮助我们知道计算机是如何处理程序代码的 , 例如寄存器和内存是如何使用的?循环、函数调用、数组是如何实现的?地址是怎么一回事?等等 。
很多二进制代码是可以反编译成汇编的 , 如何你会汇编 , 那么可以帮助我们更好着去理解一些东西 。 所以这里建议大家学习下汇编 , 并且要动手写一些程序 。
对于汇编的资料 , 我可能没啥好推荐的 , 自己看的不多 。 看过两本书 , 对于入门的 , 我建议看王爽的那本书《汇编语言(第三版)》 , 不过这本只适合入门 , 如果想继续 , 可以看《汇编程序设计》 。
总结暂时先介绍这么多吧 , 说实话 , 学了这些 , 不单单是多学了一门知识 , 更重要的是可以提升你的罗辑思维 , 给你带来更多的idea 。
这些 , 是值得每一个程序员去学习的 , 无论你是什么岗位 。 而且知识知识学了之后 , 你去学习其他知识 , 我相信可以上手的更快 。


    推荐阅读