有网友问道:“欣哥,你的知识框架中最基础的点是哪些?或者哪方面是比较重要的?”

我看到这个问题一下子愣了,是啊,很多人都深有体会,都觉得基础知识重要,但是具体来说,哪些点重要呢?

今天我就试图总结一下,也欢迎大家补充。

信息的表示和处理


计算机如何表示整数:有符号数和无符号数,尤其是如何用补码表示负数,数字的取值范围。

计算机如何表示浮点数,为什么小数的二进制表示法只能近似表示十进制小数。

数值的转换、移位

这几点非常重要,因为几乎所有的编程语言都有数据类型,而最基本数据类型必然包括整数和浮点数。

搞不清这些表示和运算,在编程中就会遇到一些稀奇古怪的问题。

从汇编层面理解程序的执行


顺序、分支、循环、函数调用、数组、结构体等在汇编层面是怎么实现的,寄存器和内存是怎么使用的。

理解了这些其实也就理解了冯诺依曼计算机体系结构,这是计算机学科一个基础性的东西。

知道程序在底层是怎么运转的, 对于学习各种虚拟机有很大的帮助,比如JVM,它要解析执行的是字节码,字节码本质上要表达的就是这些东西,只不过有所扩展。

理解了栈帧,就能理解函数调用的本质,递归,以及尾递归的实现。还有安全相关的概念,如缓冲区溢出这个臭名卓著的漏洞及其防范办法。

进程和线程


程序员必备的知识,不了解这个,简直是无法编程。

需要掌握进程的地址空间,代码在哪里,堆在哪里,栈在哪里。

要准确理解进程和线程之间的关系,为什么说进程是拥有资源的基本单位, 线程是CPU调度的基本单位?

进程切换和线程切换之间的区别和联系。

他们是如何创建,执行,有哪些状态,状态之间的转换。 由此会涉及到并发和并行,线程之间的竞争和合作。

锁的本质(硬件层面),乐观锁,悲观锁,死锁等问题。

线程的实现方式,用户级线程和内核级线程的对应方式。

在编程的过程中,有些知识点会直接使用,如多线程编程,锁。 还有一些概念能用到很多地方,例如CAS,不仅仅是编程语言的概念,还能在更新数据库时使用。再比如你理解了线程的实现方式,迅速就能掌握go语言中并发的手段:goroutine。

存储器的层次结构


Tomcat用了多线程执行请求,Redis用了单线程来处理请求,Node.js也用了单线程来,这是为什么?  秘密都在存储器的层次结构。

人类制造的计算机设备之间有着巨大的速度差异:

总之,CPU超级快,内存比较快,硬盘非常慢,网络更慢, 这个速度差异是IT行业的一个核心问题,人类想了很多办法试图去弥补这个差异:多线程,缓存,异步,多路复用,硬件层面的DMA

记着下面这张图,每当你遇到某个软件的特性的时候,想一想和它有什么关系:

数据结构和算法


它的重要性我罗嗦过很多次了,不用再重复了, 我就举个最简单的例子: 理解了B+ Tree才能理解MySQL的InnoDB的索引,理解了索引才能更好地优化查询,对吧?

计算机网络


现在的程序基本上都是网络程序, 所以这也是一个必备的基础知识,学习计算机网络的一大好处就是和工作直接相关,能直接使用,比较有动力。

HTTP协议肯定跑不掉,TCP,UDP也得会,尤其是TCP可靠传输的原理:如何在一个不可靠的网络中进行可靠的传输, 这是无数前辈总结的经验,一定得掌握。

要理解什么是通信协议,也许某一天你自己就需要定制一个协议来传输数据。

分组交换是什么意思? 协议分层的本质是什么? 什么叫无状态的协议?

Socket相关的编程更是重点,尤其是涉及到服务器端高并发的时候,如何维持和处理这些海量的socket, epoll等技术就得上场了。

还有非常重要的HTTPs的基本原理,也是网络安全的精华所在:对称加密,非对称加密,消息摘要,数字证书,中间人攻击。

数据库


不多说,关系模型、范式、SQL、索引、事务等知识都得掌握,尤其是要了解他们的实现方式。

分布式的基础知识


这些已经偏向应用层面了,但是现在很多系统都是分布式的了,分布式就变成了一种基础知识。

系统通信:RPC, 消息队列等

负载均衡的原理

CAP原理,BASE原理,幂等性,一致性模型(强一致性,最终一致性.....)和相关协议(两阶段提交,Raft,Paxos......)

数据分片:取模算法,一致性Hash,虚拟桶

基本的设计思想


下面这几种设计思想对我影响很大,需要大家特别注意。但是掌握起来却很不容易,需要在实践中不断地体会:

正交:各个概念之间可以独立变化

抽象:抛弃细节,找到本质和共性

《深入理解计算机系统》一书中提到:“指令集是对CPU的抽象, 文件是对输入/输出设备的抽象, 虚拟存储器是对程序存储的抽象, 进程是对一个正在运行的程序的抽象, 而虚拟机是对整个计算机(包括操作系统、处理器和程序)的抽象。 如果你对这句话透彻理解了,说明对计算机系统的认识已经很深刻了。

分层:我只想和我的邻居打交道, 如网络协议,Web应用开发。

分而治之:大事化小,小事化了,架构设计必备。

关键点来了,怎么学习呢?


我原来的方式是先看书,看了很多书,数据结构,操作系统,汇编,网络...... 这种办法的最大问题就是枯燥(嗯,那时候还没有码农翻身这样用故事讲解技术的文章)。

理论多,实践少,很多知识点体会不深, 等到参与的项目多了,Coding多了,这些知识点才慢慢地鲜活起来。

一种更加有效的办法是从工作中用到的知识点出发,从这个知识点向外扩展,由点到线,由线到面,然后让各个层次都连接起来,形成一个立体的网络。

切记,学习是一个螺旋上升的过程,想要上升就得深度思考,多问几个为什么

比如工作中用到了Redis,你在学习过程中发现这个Redis用了单线程来处理读写请求,为什么要这么做? 对于成千上万的请求它是如何处理的? 然后再联想一下别的软件:Tomcat为什么不这么干? 想回答这些问题,需要发掘很多基础知识。

这样做的次数多了,积累到一定程度,量变就会引起质变,整个系统就被你看透了,你的知识又扩大了一圈,更多的疑问出现了......

那些让你起飞的计算机基础知识相关推荐

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

    这些基础知识,就像我们的内功,如果在未来想要走的更远,这些内功是必须要修炼的.框架千变万化,而这些通用的底层知识,却是几乎不变的,了解了这些知识,可以帮助我们更快着学习一门知识,更加懂得计算机的运行机 ...

  2. (C语言网)那些让你起飞的计算机基础知识:学什么,怎么学?

    写的大部分都是与计算机基础知识相关的,这些基础知识,就像我们的内功,如果在未来想要走的更远,这些内功是必须要修炼的.框架千变万化,而这些通用的底层知识,却是几乎不变的,了解了这些知识,可以帮助我们更快 ...

  3. 那些让你起飞的计算机基础知识!

    第一本是程序员必知的硬核基础知识,这是一本非常入门的经典 PDF,看完能让你对计算机有一个基础的了解和入门,是培养你 内核 的基础,我们看下目录大纲 基本上涵盖了计算机所有基础知识,从 CPU 到内存 ...

  4. 【超全汇总】学习数据结构与算法,计算机基础知识,看这篇就够了【ZT帅地】2020-3-7

    https://blog.csdn.net/m0_37907797/article/details/104029002 由于文章有点多,并且发的文章也不是一个系列一个系列发的,不过我的文章大部分都是围 ...

  5. 计算机基础知识掌握欠缺,《计算机基础知识》实验教学改革探讨.pdf

    <计算机基础知识>实验教学改革探讨.pdf Science& TechnologyVision 科 技 视 界 科技 探·索·争鸣 计<算机基础知识>实验教学改革探讨 ...

  6. 计算机wrod初级考试题及答案,计算机基础知识+Word基础知识+Excel基础知识试题答案解析.doc...

    文档介绍: 计算机基础知识+ Word基础知识+ Excel基础知识 第一部分 一.单项选择题 1.世界上第一台电子数字计算机取名为(    ). A.UNIVAC    B.EDSAC    C.E ...

  7. java 前端基础知识_【计算机·知识】关于前端的计算机基础知识

    原标题:[计算机·知识]关于前端的计算机基础知识 作为一个刚刚入门的程序猿,你是否对专业知识有足够的了解?今天新闻君带你走进前端的世界. 前端的语言接触起来相对于后端的语言要容易不少,但前端的语言也有 ...

  8. 第一代电子计算机诞生的国家是( ),计算机基础知识习题.doc

    计算机基础知识习题.doc (2页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 积分 计算机基础知识题计算机的诞生:第一台电子计算机是1946 ...

  9. 华南理工计算机基础知识题,华南理工_计算机应用基础_随堂练习答案(2017年)

    华南理工_计算机应用基础_随堂练习答案(2017年) (18页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.9 积分 . . . .华南理工-计算 ...

最新文章

  1. 在Sun Enterprise Server上配置SCSI磁带机
  2. 爱情是一出未经排练的戏
  3. c语言文件指针ab命令,C语言试题,~库(完整版~).doc
  4. AFTER触发器与INSTEAD OF触发器的区别
  5. ERROR:The requested URL could not be retrieved解决方法
  6. 系统软件设计和性能的几个要点
  7. oracle触发器 菜鸟教程,PostgreSQL 触发器
  8. 【预测模型】基于天牛须算法优化ELman神经网络实现数据预测matlab代码
  9. HRCAD2008 无法加载问题
  10. nodejs 之创建文件
  11. Python开发 之 Python3打包(windows/linux)详解
  12. Execl操作基础——自动填充空白单元格
  13. ubuntu如何设置默认程序打开方式
  14. 计算机的低配置的cpu,CF最低电脑配置要求是什么
  15. spring-IOC-三更的扩展版
  16. 我命由我不由天:程序员保命4招 + 求生10法则
  17. C语言程序代码的125个建议
  18. Phenotypic Characterization of Retinoic Acid Differentiated SH-SY5Y Cells by Transcriptional Profili
  19. 这台计算机现在在博物馆吗英语翻译,2018年12月英语六级翻译真题及答案:博物馆...
  20. 话说Delphi XE7编写安卓APP还是不错的,一周写一个APP系统

热门文章

  1. 盘点智能语音行业:Nuance没落 BAT围绕核心业务
  2. hive整合phoenix
  3. JavaScript事件使用指南
  4. 避免重蹈欧美“超级电厂”覆辙 瑞星全力保障国内电力行业信息安全
  5. 【智能驾驶】车道线检测中的新IPM(逆透视变换)算法实验效果
  6. websocket规范 RFC6455 中文版
  7. 北斗部标808协议解析说明示例
  8. rtp h264打包和解包
  9. Shell脚本大量示例
  10. linux下shell编程print与printf的区别