计算机网络基础知识-大一计算机网络基础知识( 二 )


数值的转换、移位
这几点非常重要, 因为几乎所有的编程语言都有数据类型, 而最基本数据类型必然包括整数和浮点数 。
搞不清这些表示和运算, 在编程中就会遇到一些稀奇古怪的问题 。
从汇编层面理解程序的执行
顺序、分支、循环、函数调用、数组、结构体等在汇编层面是怎么实现的, 寄存器和内存是怎么使用的 。
理解了这些其实也就理解了冯诺依曼计算机体系结构, 这是计算机学科一个基础性的东西 。
知道程序在底层是怎么运转的, 对于学习各种虚拟机有很大的帮助, 比如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、索引、事务等知识都得掌握, 尤其是要了解他们的实现方式 。


特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。