我们平时编写代码时,很少有人为了刻意迎合软件设计原则而编写。其实,有时候是你用到了其中的某个或多个设计原则,而不自知而已。也有可能是有的人压根就不知道设计原则是什么。 不过,没关系,为了搞明白既抽象又玄幻的六大准则,我总结了一句话来概括每一种设计原则所体现的主要思想。 里氏替换原则是指继承时不要破坏父类原有的功能;依赖倒置原则是指要面向接口编程;开闭原则是指对扩展是开放的,对修改是关闭的;职责单一...

一、栈帧结构 在讲栈帧结构之前需要明确栈帧结构是针对程序设计中的一个过程,过程是对一段指定参数和一个可选的返回值代码的抽象,它提供了一种封装代码的方式,过程的形式在代码的实现过程中具体表现为:函数(function)、方法(method)、子例程(subroutine)、处理函数(handle)等。 当x86-64过程需要的存储空间超出寄存器能够存放的大小时,就会在栈上分配空间,这部分空间称为过程...

注册GitHub:1 安装配置git:2 连接GitHub:3 同步项目到本地:4 在VScode更新项目:5 在项目组增加其他成员:6   1、注册GitHub   (1)填写信息 名称只能是别人没有使用过的、只能包含字母数字单个连接符 Username may only contain alphanumeric characters or single hyphens, a...

计算机基础

计算机基础

  

2020-01-23 01:44:50

计算机基础 好多人觉得计算机基础只是很容有,想直接敲代码,就不怎么用心去学.我认为计算机基础很重要,就像一栋楼房一样,计算机基础就是夯实的地基** 计算机系统分为三大块:硬件,操作系统和应用程序.想要学习软件知识,硬件知识或多或少都要了解一下,现在我们来谈谈计算机硬件. 一.计算机硬件介绍 CPU CPU的简介与介绍 CPU全称Central Processing Unit,他是你的电脑中最硬核的...

计算机网络

计算机基础

  

2020-02-03 21:14:23

一、概述 网络的网络 网络把主机连接起来,而互联网是把多种不同的网络连接起来,因此互联网是网络的网络。 ISP        互联网服务提供商 ISP 可以从互联网管理机构获得许多 IP 地址,同时拥有通信线路以及路由器等联网设备,个人或机构向 ISP 缴纳一定的费用就可以接入互联网。           &...

现代CPU一般使用缓存(Cache)来解决CPU读写主存慢的问题;使用多核来并行计算以加速程序运行。并行计算一般需要多线程技术,如何操作多线程对编程人员提出了挑战。 计算机软硬件体系结构 之前的文章 PP鲁:计算机基础系列:源代码如何被计算机执行​zhuanlan.zhihu.com 已经提到,对于一段源代码,计算机主要依靠编译器将源代码转化为CPU可以执行的程序。那么,CPU到底是如何工作的呢?...

堆和栈的区别

计算机基础

  

2020-02-16 19:56:35

堆栈是计算机中很常见的一个概念,而数据结构中的堆栈和内存分配中的堆栈又存在着一些区别,下面将分别介绍数据结构中的堆栈和内存分配中的堆栈。 1. 数据结构中的堆栈 在数据结构中我们常说的堆栈其实指的是栈(Stack),而堆(Heap)和栈(Stack)都是一种数据项按序排列的数据结构。 1.1 数据结构中的堆(Heap) 在数据结构中,堆是一种经过排序的树形数据结构,每个结点都有一个值。如我们常说的...

最近压测tcp服务时发现会出现cannot assign requested address的错误,网上查了一下   原因如下: client端频繁建立连接,而端口释放较慢,导致建立新连接时无可用端口。 通过netstat可以看到许多TIME_WAIT状态的连接        服务器在存在大量短连接的情况下,Linux的TCP栈一般都会生成大量的 ...

vector是c++编程中的最常见的容器之一,可以帮助用户自动管理存储空间,需要分配存储空间的场景,可以取代原生数组. vector在实践的过程中,提升性能的要点就是尽量使用reserve,运行期能确定个数,应该用reserve,不建议用传递大小的数组构造函数或者调用resize 为什么不建议使用resize? reserve和resize函数都能分配足够容纳下指定个数对象的空间.不同的是resi...

查看交换机mac地址表 为了验证交换机具有分隔不同网段的作用,我们通常借用Cisco Packet Tracer(下面简称CPT)来模拟网络环境。 1. 搭建网络环境 在CPT主界面右下角添加6台计算机设备 在该界面添加一个集线器Hub 添加一个交换机 使用线将设备连起来,如下图所示 2. 配置IP地址 为了方便调试,我们分别为每台计算机设置静态ip 单击计算机设备,选择Desktop,选择IP ...

上一篇我们完成了Jack的编译器,这就意味着我们可以随心所欲地在Hack上编写Jack程序了。但是以Jack目前的能力,即使是想完成一些简单的操作也要编写非常复杂的代码,例如我们想要在屏幕上输出“Hello Workd!”,就必须在屏幕上特定位置绘制上几百个像素点。所以我们需要实现一个简单的操作系统来让事情变得更简单一些。 操作系统就是用来衔接计算机的硬件系统和软件系统的,...

经过了前面10章漫长的旅程,我们终于要达成我们的目标了:在一个完全由自己实现的计算机平台上运行一个小游戏。这个小游戏要经过编写、编译、转换虚拟机字节码、汇编、生成机器代码等步骤,最终运行在自己搭建的虚拟计算机上。在游戏的运行过程中,每一条指令都是我们亲手编写,每一个细节我们都了如指掌,是我们完完全全地创造了它(虽然需要基于一个硬件虚拟机),这确实是一件非常有意思的事情。 骑手快跑 我这里编写了一个...

开篇的话 在比较老的编译器里,如果没有对变量取地址的操作,那么有些局部变量是通过寄存器保存的,不占栈上内存,根本不存在内存中如何排列的问题,比如TurboC 2.0这种。 在一些较新的编译器里,局部变量排列顺序并不是从上到下一次排列,有些是根据使用频率来排列的,这样可以降低cache的miss率,所以怎么排列完全根据使用频率。 大部分主流编译器的局部变量地址确实是从下到上,但也有反过来的。从下到上...