软件开发中那些”易错”词汇

一、软件工程

透明

初学者可能在一些计算机相关的课程中,经常会听到“透明”这个词。实际上,计算机中的“透明”和我们现实生活中的“透明”不一样。现实生活中的“透明”是指我们能看见内部的结构,而在计算机中“透明”对于我们来说是看不见的意思。ps:和黑盒的意思很像~

同步

在软件开发中,经常会遇到“同步”这个词。但很多人在初学的时候,对这个词的理解可能会出现偏差。在实际生活中,我们对“同步”的理解是同时处理多件事情;但是在软件开发中,“同步”是指一件事处理完接着一件事处理,若处理时间很长要一直等待直到完成才能接着处理下一个。

异步

说完了“同步”,与之经常出现的还有“异步”。软件开发中的“同步”是一件事处理完后接着一件事处理,而“异步”则是一件事还未处理完接着处理下一件事,直到那件未处理完的事件经过“较长时间”的响应后,掉过头来对其结果进行处理。

线程

进程中的一段代码,一个进程中可以有多段代码。本身不拥有资源(共享所在进程的资源)。

进程

运行中的应用程序称为进程,拥有系统资源(CPU、内存)。

单线程

单线程,可以理解为某一时间只能运行一次某一段代码。有的人经常会把“同步”和“单线程”的概念搞混,认为是一样的。“同步”强调的是空间的承接,而“单线程”更多的是强调时间的承接。

初学者往往把多线程作为单线程的迭代,认为多线程这名字一听就比单线程效率高。实际上,要结合不同的场景。在单核CPU计算密集型中,单线程比多线程快。ps:JavaScript是一种单线程语言。

多线程

多线程,可以理解为某一时间能对某一段代码同时运行。

在网络IO密集型中,多线程比单线程快。ps:Java、GoLang、Python都是支持多线程的语言。

线程安全

单线程不存在线程安全问题。

多线程存在线程安全问题。在上述多线程的理解中,某一时间能对某一段代码同时运行,可能这段代码是在计算或IO,不同的线程同时对同一资源进行访问和修改,就会造成线程安全问题。

串行

指多个任务时,完成一个之后才能进行下一个 ,某时刻只能有一个任务被运行。ps:单线程就是串行

并发

多个线程在单个核心运行,同一时间一个线程运行,系统不停切换线程,看起来像同时运行,实际上是线程不停切换。

并发,一般也存在于服务器、程序的性能表现上。吞吐量、TPS、QPS、并发数、响应时间(RT)、吞吐率概念

并行

在多核的情况下,每个线程分配给独立的核心,线程同时运行。

阻塞

阻塞就是在调用结果返回之前,线程一直在等待结果。

注意:同步不一定就是阻塞的,例如在同步的过程中并没有发生等待情况,那么就是同步非阻塞。同步、异步、阻塞、非阻塞概念

非阻塞

非阻塞则是在不能立刻得到结果之前,线程不会一直等待结果。

注意:异步一定是非阻塞的(因为没有异步阻塞的场景-_-||,异步的目的就是为了不堵塞)。

死锁

两个或两个以上线程,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,互相等待,耗在那里,最后程序不得不终止。

分布式

分布式是一个业务分拆多个子业务,部署在不同的服务器上。分布式,重在资源共享与加快计算机计算速度,目的是为了分散压力。

微服务

微服务,重在解耦合,使每个模块都独立,可以部署在同一台或不同服务器上,目的是分散能力。

集群

同一个业务,部署在多个服务器上。

负载均衡

负载均衡的前提是集群,目的是把压力平均分给不同的服务器。

缓存

一般指对数据、文件资源的缓存。前端本地一般可以缓存数据、文件资源,后端一般缓存的是数据。常见的就是Redis缓存数据库。

消息队列

初学者,可能会把消息队列理解成即时通讯功能。实际上消息队列中的消息指的不止是用户通讯消息,而是指的是程序中产生的任何数据。具体就不展开了。为什么使用消息队列?

前端

初学者,可能会把用户前台当成前端,管理后台当成后端,别笑,我刚学的时候就这样以为的-_-||

前端是指构建出人看的见的,例如文字、颜色、布局、动画、交互动效、游戏画面的显示等等。

后端

后端是指人看不见的,是用来处理前端传来的数据,存储数据。像之前提到的分布式、微服务、消息队列等等都属于后端的内容。

Web

这里的Web,指的是人类对互联网的需求。

Web1.0,是指用户只能浏览一些文字、图片、视频等静态资源。

Web2.0,是指用户可以自己产生数据在互联网平台上,例如微信通信、发微博、点赞抖音等等。

Web3.0,其实还没有被准确定义的概念,初步理解为“去中心化”,用户产生的数据,不再属于某一个平台,而是属于用户本人。

Web端/应用

按照Web的定义,Web应该指的是互联网服务。但实际目前,国内对Web端/应用的定义约定俗成为基于浏览器的网页端。

PC端

PC端软件是一般是指电脑上的软件客户端。

移动端

移动端一般包括手机、平板、智能穿戴设备等。

IaaS

IaaS (Infrastructure as a Service) 基础设施即服务,服务商提供服务器、硬件等相关基础设施。

PaaS

PaaS (Platform as a Service) 平台即服务,服务商提供操作系统等平台服务,包括 数据库软件,Web服务器,负载均衡器等。

SaaS

SaaS (Software as a Service) 软件即服务,服务商提供软件等服务,买家付费使用软件,例如:office 365,云CRM等。

BaaS

BaaS (Backend as a Service) 后端即服务,服务商提供后端特定场景服务,如 身份验证服务,推送服务,数据存储,文件存储等,买家按需计费获得相应服务。

Faas

Faas (Function as a Service) 函数即服务,服务商提供运行平台,买家直接开发应用,部署在平台上,调用执行,按次计费。

云计算

云计算(Cloud Computing),可以理解为是全部“aaS”。

云原生

云原生(Cloud Native),实际上是云计算的一个扩充,云原生计算(Cloud Native Computing),其不同于传统云计算的特点是:DevOps、Serverless容器化等。

DevOps

Dev是软件开发人员,Ops是IT运维技术人员。在传统开发流程,Dev和Ops的联系不紧密,目的冲突大,非常容易出现扯皮的现象,尤其在单体架构中。

而在微服务、容器化架构中,DevOps实际上就是把开发责任细分、运维责任细分/难度降低。

Serverless

Serverless(即无服务器),并不是不用服务器了,开发者无需关心服务器的维护工作,而是交给云厂商。

二、计算机组成原理/操作系统

32位/64位

表示CPU一次最大能处理的位数(字长)。一般跟通用寄存器的大小相同,例如X86 64位CPU,通用寄存器大小为64位,也就是8个字节。

总线

总线包括地址总线、数据总线、控制总线。

地址总线

地址总线的数量决定了寻址的范围(内存的大小范围),例如8086有20条地址总线,决定了能找到的内存最大为1MB。

一个地址总线可以表示0和1      2^20=1,048,576 (个地址) 一个地址代表一个存储单元(1个字节)  1,048,576 Byte = 1MB

数据总线

数据总线(宽度),指的是 CPU与内存之间一次性能传输多少数据,例如16条数据总线,一次性能传输16位二进制数,也就是两个字节。

控制总线

控制总线表示CPU对系统中其他器件的控制能力。有多少根控制总线,就意味这CPU提供了对外部器件的多少种控制。

存储单元

存储单元是内存中存储数据的基本单元(存储元),一个存储单元最大可以存储8位二进制数,也就是一个字节。

物理地址

是硬件内存中真正的地址。

虚拟地址

由操作系统提供,并且负责映射到物理地址。负责将虚拟地址转换为物理地址的是硬件CPU中的 内存管理单元(MMU)。

注意:程序员能看到的地址都是虚拟地址。

除非注明,否则均为呆小猴博客原创文章,转载必须以链接形式标明本文链接!付费资源为虚拟物品,一经出售,概不退款!
呆小猴 » 软件开发中那些”易错”词汇

发表回复

呆小猴 · 专注安全学习与分享

关于作者 联系作者