对于计算机与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中使用内存池;消息队列缓冲区,使用异步通信机制提高效率。
----------------------------------------------------------------------------------------
编程是一项吃时间的活儿,多敲键盘。
模仿是编写好程序的关键,多读大牛写的代码。
多多研究开源代码,学习模仿思考进步。
道阻且长,毕竟是吃敲键盘这碗饭的。
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现