对于计算机与coding的理解

# 本人2023届毕业,2022年需要迫切找到一份好的工作。

 最近系统性的针对计算机底层知识进行了学习,跟以前对于计算机的理解有了很大的改变,具体体现在“能够以一个整体的层次去思考问题了”。

下面列出一些感受:

  • 分层

如果你深入回忆一下,会发现计算机的整个体系都构建在分层之上的。

  • 构建在整个CS系统上,可以理解为 底层硬件---OS---应用软件,用户只需使用软件即可,屏蔽下层硬件;
  • CPU---CPU Cache---Memory---Disk也是一个层次结构,速度越来越慢,成本越来越低,容量越来越大;
  • Linux内核实现的网络协议栈TCP/IP,网络接口层---网络层---传输层---应用层;
  • 程序设计中常用的MVC模式,Model---View---Control。

当然还有很多,分层可以理解为多个层次结构,下层为上层提供相应的服务,但是层与层之间的耦合性却不那么高,那么对一个层的变动对另外层几乎可以无影响。

只需要按照约定提供给上层相应的接口即可。这种设计思想普遍存在于CS中。

  • 模块化

分层其实也算一种模块化思想,但是这里单独拎出来讲一下。

模块化即分解,将一个大任务分成多个小任务,即多个小模块,每个模块完成相应的功能。

  • OS的设计为典型的模块化设计;os用来管理所有底层硬件,cpu、内存、磁盘、IO设备等,Linux内核对所有硬件的管理都是分模块来实现的。
  • 某个软件系统的设计;前端为一个模块,后端为一个模块,后端又可以分多个模块。

模块化类似于算法中分治的思想,可以提高并行开发的程度,广泛应用与CS中。

  • 时空的矛盾性

学过CS的都知道,时间和空间是一对矛盾的东西。举几个例子:

  • 动态规划DP中,往往用数组去保存历史记录,降低时间复杂度,但空间复杂度也上去了。
  • CPU---CPU Cache---Memory---Disk,还是上面那个例子,速度越来越慢,成本越来越低,容量越来越大。时间与空间的矛盾显然。

这正印证了鱼与熊掌不可兼得的道理

因此,应该根据具体的场景,时间敏感还是空间敏感,选择相应的解决方案。

  • 抽象在程序设计中的地位

程序的可扩展性很重要,抽象是一项重要的设计思想,常说的抽象出接口。

  • 缓存的作用

CPU Cache缓存,redis缓存,OS页缓存等等,用户任务无非插入、删除、查询等,而程序通常具有局部性原理,将高频次访问、可能将要被访问的内容

缓存下来,能提高计算机效率,提高QoS。

  • 缓冲池/区的使用

每次都申请内存开销较大,STL中使用内存池;消息队列缓冲区,使用异步通信机制提高效率。

 

 

----------------------------------------------------------------------------------------

编程是一项吃时间的活儿,多敲键盘。

模仿是编写好程序的关键,多读大牛写的代码。

多多研究开源代码,学习模仿思考进步。

道阻且长,毕竟是吃敲键盘这碗饭的。

 

posted @ 2022-03-15 22:52  Ray-ss  阅读(50)  评论(0编辑  收藏  举报