REST或RESTful
API设计(代表性状态转移)旨在利用现有协议。尽管REST几乎可以在任何协议上使用,但是当用于Web
API时,通常会利用HTTP。这意味着开发人员无需安装库或其他软件即可利用REST
API设计。REST API设计由Roy
Fielding博士在其2000年的博士学位论文中定义。它以其令人难以置信的灵活性而著称。由于数据不依赖于方法和资源,因此REST能够处理多种类型的调用,返回不同的数据格式,甚至可以通过正确实施超媒体来进行结构更改。
REST
API设计固有的自由度和灵活性使您可以构建既能满足您的需求又能满足非常多样化的客户需求的API。与SOAP不同,REST并不限于XML,而是可以返回XML,JSON,YAML或任何其他格式,具体取决于客户端的请求。而且与RPC不同,不需要用户按特定顺序知道过程名称或特定参数。
但是,REST
API设计存在一些缺点。您可能会失去在REST中(例如在会话中)维护状态的能力,并且较新的开发人员更难以使用。在构建API之前,了解使REST
API成为RESTful的原因以及为什么存在这些约束也很重要。毕竟,如果您不了 ...
并发程序和顺序程序的执行有本质上的差异,为了能更好地描述程序的并发执行,实现操作系统的并发性和共享性,引入“进程”的概念。
定义:进程还是具有一定独立功能的程序在某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。
从操作系统角度开,可将进程分为系统进程和用户进程两类。系统进程执行操作系统程序,完成操作系统的某些功能。用户进程运行用户程序,直接为用户服务。系统进程的优先级通常高于一般用户进程的优先级。
1.进程与程序的联系和区别
进程和程序既有联系又有区别。
(1)进程和程序的联系
程序是构成进程的组成部分之一,一个进程的运行目标是执行它所对应的程序,如果没有程序,进程就失去了其存在的意义。从静态的角度看,进程是由程序、数据和进程控制块(PCB)三部分组成的。
(2)进程和程序的区别 程序是静态的,而进程是动态的。
进程是程序的一个执行过程。程序的存在是永久的(这里不讨论人为删除程序等行为)。而进程是为了程序的一次执行而暂时存在的。进程有生命周期,有诞生,亦有消亡。
一个进程可以包括若干程序的执行,而一个程序亦可以产生多个进程。比如,一个编译进程在运行时就要执行词法 ...
进程在从创建到终止的全过程中一直处于一个不断变化的过程。为了刻画进程的这个变化过程,所有操作系统都把进程分成若干种状态,约定各种状态间的转换条件。对进程状态的刻画也经历了一个不断精确化的过程。下面我们就讨论进程的状态模型。
1.三状态进程模型
运行中的进程可以处于以下三种状态之一:运行、就绪、等待。
运行状态(Running)
是指进程已获得处理器,并且在处理器上执行的状态。显然,在一个单处理器系统中,最多只有一个进程处于运行态。2.
就绪状态(Ready)
是指一个进程已经具备运行条件,但由于没有获得处理器而不能运行所处的状态。一旦把处理器分配给它,该进程就可运行。处于就绪状态的进程可以是多个。3.
等待状态(Waiting)
也称阻塞状态或封锁状态。是指进程因等待某种事件发生而暂时不能运行的状态。例如,当两个进程竞争使用同一个资源时,没有占用该资源的进程便处于等待状态,它必须等到该资源被释放后才可以去使用它。引起等待的原因一旦消失,进程便转为就绪状态,以便在适当的时候投入运行。系统中处于等待状态的进程可以有多个。
在任何时刻,任何进程都处于且仅处于三种状态之一。进程在运行过程 ...
树莓派基金会今天发布了树莓派计算模块 4 代「Raspberry Pi Compute
Module 4」。共有 32 个具体型号,售价从 25 美元起。最低配置 1GB
RAM/Lite/无无线版本,25 美元;最高配置 8GB RAM/32GB Flash/无线增强版,90
美元。对应着 4 种不同的内存、4 种闪存容量和是否有无线通讯功能。
计算模块核心
CM4 核心模块配置如下:
博通 BCM2711 SoC 1.5GHz 4 核心 64-bit ARM Cortex-A72 CPU
VideoCore VI 图形,支持 OpenGL ES 3.x
H.265 (HEVC) 4Kp60 视频硬解码
H.264 (AVC) 视频 1080p60 硬解码和 1080p30 硬编码
双 HDMI 接口分辨率高达 4K
单通道 PCI Express 2.0 接口
双 MIPI DSI 显示器和双 MIPI CSI-2 摄像头接口
1GB, 2GB, 4GB 或 8GB LPDDR4-3200 SDRAM
可选 8GB, 16GB 或 32GB eMMC Flash 存储
可选 2 ...
多线程和并发性并不是什么新内容,但是 Java
语言设计中的创新之一就是,它是第一个直接把跨平台线程模型和正规的内存模型集成到语言中的主流语言。核心类库包含一个
Thread 类,可以用它来构建、启动和操纵线程,Java
语言包括了跨线程传达并发性约束的构造 —— synchronized 和 volatile
。在简化与平台无关的并发类的开发的同时,它决没有使并发类的编写工作变得更繁琐,只是使它变得更容易了。
synchronized 快速回顾
把代码块声明为 synchronized,有两个重要后果,通常是指该代码具有
**原子性(atomicity)**和
可见性(visibility)。原子性意味着一个线程一次只能执行由一个指定监控对象(lock)保护的代码,从而防止多个线程在更新共享状态时相互冲突。可见性则更为微妙;它要对付内存缓存和编译器优化的各种反常行为。
一般来说,线程以某种不必让其他线程立即可以看到的方式(不管这些线程在寄存器中、在处理器特定的缓存中,还是通过指令重排或者其他编译器优化),不受缓存变量值的约束,但是如果开发人员使用了同步,如下面的代码所示,那么运行库将 ...
问题前景
了解线程安全的之前先来了解一下 Java
的内存模型,先搞清楚线程是怎么工作的。
Java 内存模型 - JMM
什么是 JMM
JMM(Java Memory
Model),是一种基于计算机内存模型(定义了共享内存系统中多线程程序读写操作行为的规范),屏蔽了各种硬件和操作系统的访问差异的,保证了Java程序在各种平台下对内存的访问都能保证效果一致的机制及规范。保证共享内存的原子性、可见性、有序性。
那么问题来了,线程工作内存怎么知道什么时候又是怎样将数据同步到主内存呢?
这里就轮到 JMM 出场了。 JMM
规定了何时以及如何做线程工作内存与主内存之间的数据同步。 对 JMM
有了初步的了解,简单总结一下原子性、可见性、有序性。
**原子性:**对共享内存的操作必须是要么全部执行直到执行结束,且中间过程不能被任何外部因素打断,要么就不执行。
**可见性:**多线程操作共享内存时,执行结果能够及时的同步到共享内存,确保其他线程对此结果及时可见。
**有序性:**程序的执行顺序按照代码顺序执行,在单线程环境下,程序的执行都是有序的,但是在多线程环境下,JMM
为了性能优化,编 ...
近年来各大公司对信息安全传输越来越重视,也逐步把网站升级到 HTTPS
了,那么大家知道 HTTPS
的原理是怎样的吗,到底是它是如何确保信息安全传输的?
HTTP 为什么不安全
HTTP 由于是明文传输,主要存在三大风险
窃听风险
中间人可以获取到通信内容,由于内容是明文,所以获取明文后有安全风险 3.
篡改风险 中间人可以篡改报文内容后再发送给对方,风险极大 5.
冒充风险 比如你以为是在和某宝通信,但实际上是在和一个钓鱼网站通信。
HTTPS 显然是为了解决这三大风险而存在的,接下来我们看看 HTTPS
到底解决了什么问题。
安全通信的四大原则
HTTPS
为了解决上述三个风险而生的,一般我们认为安全的通信需要包括以下四个原则:
机密性、完整性,身份认证和不可否认。
机密性:即对数据加密,解决了窃听风险,因为即使被中间人窃听,由于数据是加密的,他也拿不到明文
完整性:指数据在传输过程中没有被篡改,不多不少,保持原样,中途如果哪怕改了一个标点符号,接收方也能识别出来,从来判定接收报文不合法
身份认证:确认对方的真实身份,即证明「你妈是你妈」的问题,这样就解决了冒充风险,用户 ...
吞吐量是指系统在单位时间内处理请求的数量,TPS、QPS都是吞吐量的常用量化指标。
系统吞吐量要素
一个系统的吞吐量(承压能力)与request(请求)对cpu的消耗,外部接口,IO等等紧密关联。
单个request
对cpu消耗越高,外部系统接口,IO影响速度越慢,系统吞吐能力越低,反之越高。
重要参数 QPS(TPS),并发数,响应时间
QPS(TPS):每秒钟request/事务 数量
并发数:系统同时处理的request/事务数
响应时间:一般取平均响应时间
关系 QPS(TPS)=并发数/平均响应时间
一个系统吞吐量通常有QPS(TPS),并发数两个因素决定,每套系统这个两个值都有一个相对极限值,在应用场景访问压力下,只要某一项达到系统最高值,系统吞吐量就上不去了,如果压力继续增大,系统的吞吐量反而会下降,原因是系统超负荷工作,上下文切换,内存等等其他消耗导致系统性能下降。
首先,开发软件的目的是为了让用户使用,我们先站在用户的角度分析一下,用户需要关注哪些性能。
对于用户来说,当点击一个按钮、链接或发出一条指令开始,到系统把结果已用户感知的形式展现出来为止,这个过程所消耗的时间是用户对这个软件性能的直观印
象。也就是我们所说的响应时间,当相应时间较小时,用户体验是很好的,当然用户体验的响应时间包括个人主观因素和客观响应时间,在设计软件时,我们就需要
考虑到如何更好地结合这两部分达到用户最佳的体验。如:用户在大数据量查询时,我们可以将先提取出来的数据展示给用户,在用户看的过程中继续进行数据检
索,这时用户并不知道我们后台在做什么。 用户关注的是用户操作的相应时间。
其次,我们站在管理员的角度考虑需要关注的性能点。
1、 响应时间 2、 服务器资源使用情况是否合理 3、
应用服务器和数据库资源使用是否合理 4、 系统能否实现扩展 5、
系统最多支持多少用户访问、系统最大业务处理量是多少 6、
系统性能可能存在的瓶颈在哪里 7、 更换那些设备可以提高性能 8、
系统能否支持7×24小时的业务访问
再次,站在开发(设计)人员角度去考虑。
1、 架构设计是否合理 ...
MAU(Month Active
User):月活跃用户数量,指网站、app等去重后的月活跃用户数量。
系统吞吐量评估
我们在做系统设计的时候就需要考虑CPU运算,IO,外部系统响应因素造成的影响以及对系统性能的初步预估。
而通常情况下,我们面对需求,我们评估出来的出来QPS,并发数之外,还有另外一个维度:日pv。
通过观察系统的访问日志发现,在用户量很大的情况下,各个时间周期内的同一时间段的访问流量几乎一样。比如工作日的每天早上。只要能拿到日流量图和QPS我们就可以推算日流量。
通常的技术方法:
找出系统的最高TPS和日PV,这两个要素有相对比较稳定的关系(除了放假、季节性因素影响之外)
通过压力测试或者经验预估,得出最高TPS,然后跟进1的关系,计算出系统最高的日吞吐量。B2B中文和淘宝面对的客户群不一样,这两个客户群的网络行为不应用,他们之间的TPS和PV关系比例也不一样。