三菱m70 m80系统解密 三菱m80机床到期解锁
我们从操作系统的发展讲起,为什么要有线程这个概念出现。《Java多线程学习笔记(一) 初遇篇》讲Java平台下的线程,如何使用和创建,以及引入线程后所面临的问题,为了解决线程安全问题,Java引入的机制,这也是《Java多线程学习笔记(二) 相识篇》讨论的问题,《Java多线程学习笔记(三) 甚欢篇》是讲线程协作,即如何让线程之间协作去处理任务,《Java多线程学习笔记(五) 长乐无极篇》讲了CompletableFuture,这个强大的异步编排组件,《Java多线程学习笔记(六) 长乐未央篇》 讲ForkJoin模式,《Java多线程编程范式(一) 协作范式》 讲使用Java提供并发核心库来解决一些问题。但是在《Java多线程学习笔记(一) 初遇篇》我们的讨论相对还比较粗糙,当时我的想法是先基本搭建一个模型来快速的熟悉Java的并发编程,在实践中先用起来,我们没有直接讨论线程安全,什么是线程安全,这个问题在当时的我去看,没有找到一个很完美的定义,还有并发模型,并发是难以验证的,那我们该如何验证,我们将统一收拢,统一回答这些问题。
从指令集架构谈起
单看指令集架构来说,这是一个有些相对陌生的名词,让我们从生活中稍微常见的事物讲起,也就是苹果电脑Mac,很多程序员都喜欢Mac,Mac中现在比较热的一款是Mac m1、m2了,喜欢苹果的人,对m1和m2相当喜欢,这里说的m1和m2也就是CPU的代称,这两款CPU的指令集架构是ARM,那什么是指令集架构? 在回答这个问题的时候,我们还是要请出《程序是如何运行的(一)》这篇文章的图:
图片九.png
从这幅图我们可以看到指令集架构是硬件系统和软件的桥梁,连接了硬件和软件。那他是什么呢?
An Instruction Set Architecture (ISA) is part of the abstract model of a computer that defines how the CPU is controlled by the software. The ISA acts as an interface between the hardware and the software, specifying both what the processor is capable of doing as well as how it gets done.
指令集架构是计算机抽象模型的一部分定义了CPU如何被软件控制。指令集充当硬件和软件之间的接合点,规定了处理器能够做什么,以及如何完成。
The ISA provides the only way through which a user is able to interact with the hardware. It can be viewed as a programmer’s manual because it’s the portion of the machine that’s visible to the assembly language programmer, the compiler writer, and the application programmer.
指令集是用户和计算机之间进行交互的唯一途径。它可以被看做是程序员的手册,因为它是程序员(汇编语言程序员,编译器开发者、应用程序程序员) 可以看到的机器部分。
The ISA defines the supported data types, the registers, how the hardware manages main memory, key features (such as virtual memory), which instructions a microprocessor can execute, and the input/output model of multiple ISA implementations. The ISA can be extended by adding instructions or other capabilities, or by adding support for larger addresses and data values.
指令集架构定义了数据类型、寄存器、硬件如何管理主存,关键特性(如虚拟内存),微处理器可以执行哪些指令,输入输出模型。指令集架构可以通过增加指令、其他功能、增加对更大地址和数据值的支持来进行扩展。
–ARM官网
这里提到了数据类型,我想起学Java的时候,老师谈到数据类型的时候说,你家附近开了一家水果店,卖西瓜几乎不要钱,大家都拿东西去买,有的人拿大袋子,有的人拿小袋子,你会拿什么去装,因为我非常爱吃西瓜,所以我说的是我会开辆车去装,几乎不要钱嘛。其实老师讲这个例子,只是想引出数据类型是数据的容器。我又想起小的时候吃饭,饭量小的用小碗,饭量大的用大碗。
那设计一个编译器来说,一般的思路就是先引入对应的数据类型,那数据类型看来还是来自于指令集架构的支持,已知Java是跨平台的,这个平台我们可以理解为指令集架构,从Github上OpenJDK的源码可以看出:
iKCHLN.jpeg
那么Java一共支持了七种指令集架构:aarch64、arm、ppc、riscv、s390、x86、zero。 这里简单的介绍一下指令系统,随着技术的进步,计算机的形态产生了巨大的变化,从巨型机到小型机到个人电脑,再到智能手机,其基础元件从电子管到晶体管再到超大规模的集成电路。虽然计算机的形态和应用组合千变万化,但从用户感知的应用软件到最底层的物理载体,计算机系统均呈现出层次的结构。下图展示了这些层次:
iKCqmV.jpeg
从上到下,计算机系统可分为四个层次,分别为应用软件、基础软件、硬件电路和物理载体。软件以指令形式运行在CPU硬件上,而指令系统介于软件和硬件之间,是软硬件交互的接口(这里引用的是《计算机体系结构基础》原文用的是界面,我想是用错了词,应当理解为接口更为得体),有着非常关键的作用。软硬件本身更迭速度很快,而指令系统则可以保持很长时间的稳定。有了稳定不变的指令系统接口,软件与硬件得到有效的隔离,并行发展。遵循同一指令系统的硬件可以运行为该指令系统设计的各种软件,比如X86计算机既可以运行最新软件,也可以运行30年前的软件(这一句话也引用自《计算机体系结构基础》,但是我的理解倒是与此不一致,X86计算机可以运行30年前的软件,得益于两方面,一方面是指令系统的向前兼容,另一部分则源于操作系统的向前兼容)。依据指令长度的不同,指令系统可分为复杂指令系统(Complex Instruction Set Computer,简称为CISC) ,精简指令系统(Reduced Instruction Set Computer, 简称RISC) 和 超长指令字(Very Long Instruction Word, 简称VLIW) 指令集三种。早期的CPU都采用CISC结构,这与当时的时代特点有关,早期的处理设备昂贵且处理速度缓慢,设计者不得不加入越来越多的复杂指令来提高执行效率,部分复杂指令甚至可与高级语言中的操作直接对应。这种设计简化了软件和编译器的设计,但也显著提高了硬件的复杂性。
随着硬件的发展,CISC结构出现了一系列问题。大量复杂指令在实际中很少用到,典型程序所使用的的百分之八十指令只占到指令集总指数的百分之二十,消耗大量精力的复杂涉及只有很少的回报。针对CISC结构的缺点,RISC遵循简化的核心思路,RISC简化了指令功能。上面的ARM 指令集架构就是RISC架构,ARMv8-A引入了64位架构,我们称之为Aarch64,在目前来看它们都指同一事物,也就是公版64位ARMv8以后的所有64位ARM架构。那X86是RISC还是CISC,以前我认为是CISC架构,但是我在《计算机体系结构基础》中看到这么一句话:
X86处理器中将CISC指令译码为类RISC的内部操作,然后对这些内部操作使用诸如超流水、乱序执行,多发射等高效实现手段。
所以X86指令集架构这么一看,也不能完全算作CISC架构,CISC和RISC有点走向融合的感觉。PPC 是Power PC的缩写,基于RISC。RISC-V从名字就可以看出基于RISC。S390没查到资料,Zero没有指令系统(没有指令系统引自维基百科,对这个我也缺乏认知,),资料太少,不知道是怎么运作的。
那么不同的指令集支持的指令就是不同的,而JVM是一个跨平台的虚拟机,Java是一个跨平台的语言,也就意味着Java要保证在适配的平台上,行为一致。
CPU 内存模型
浅谈模型
CPU这个词我们认识,内存这个词我们也认识,那模型呢,当我们说起模型这个词的时候,我们到底在说什么? 当我说起模型这个词的时候,我想到的是预测,我想起的是预测,抽象出运行规律,根据运行规律来进行预测,这让我想起高中生物教材的K值曲线:
[iLo1Uy.jpeg]
这事实上是一种数学模型,那什么是数学模型? 一般地说,数学模型可以描述为,对于现实世界的特定对象,为了一个特定目的,根据特有的内在规律,作出一些必要的简化建设,运用适当的数学工具,得到的一个数学结构。其实结构这个词,如果对我文章有些熟悉的话,其实这个词已经讨论过很多遍了, 这里再讨论一下:
the arrangement of and relations between the parts or elements of something complex.
复杂事物的各个部分或要素之间的安排和联系。
上面的种群增长数学模型,描述的就是在资源和空间有限,天敌的制约等(即存在环境阻力)的情况下,时间与种群数量之间的关系。数学模型最终是为了得到一个关系,那内存模型呢? 数学模型和内存模型都是模型,那该怎么理解模型这个词呢?
模型是指对于某个实际问题或客观事物、规律进行抽象后的一种形式化表达方式。
那么CPU内存模型就是对某个实际的读写问题进行抽象后的一种形式化表达方式,那究竟是遇到了怎样的问题呢? 让我们从冯诺依曼计算机模型讲起,冯诺依曼计算机模型是一种将程序指令存储器和数据存储器并在一起的计算机设计概念结构。根据冯诺依曼结构设计出来的计算机我们称作冯诺依曼计算机,又称存储程序计算机。计算机在运行指令的时候,会从存储器中一条条将指令取出,通过译码(控制器),从存储器中取出数据,然后进行指定的运算和逻辑等操作,然后再按地址把运算结果返回内存中取。接下来,再取出下一条指令,在控制器模块中按照规定查找。依次进行下去。直至遇到停止指令。程序与数据一样存储,按照程序编排的顺序,一步一步地取出指令按规定操作,自动地完成指令规定的操作是计算机最基本的工作模型。下面这张图是Intel系统的硬件结构:
img
一般我们看CPU的性能,一般都是看主频,主频也被称之为时钟速度,那什么是时钟速度:
CPU 每秒要处理来自不同程序的众多指令(如算术等低级计算)。时钟速度则测量 CPU 每秒执行的周期数,以 GHz(千兆赫)为单位。从技术上讲,“周期”是由内部振荡器同步的脉冲,但就我们的目的而言,它们是帮助理解 CPU 速度的基本单位。在每个周期中,处理器内数十亿个晶体管会打开和关闭。 时钟速度为 3.2 GHz 的 CPU 每秒执行 32 亿个周期。(较早的 CPU 的速度以兆赫计算,或每秒几百万个周期。有时,多个指令可在一个时钟周期内完成;而在其他情况下,一条指令可能需要多个时钟周期来处理。由于不同的 CPU 设计处理指令的方式不同,所以最好比较同一品牌和同一代 CPU 的时钟速度。
例如,5 年前时钟速度更高的 CPU,其性能可能还不如时钟速度更低的新 CPU,因为新架构可以更高效地处理指令。英特尔® X 系列处理器的性能可能优于时钟速度更高的 K 系列处理器,因为它可以在更多的内核之间分配任务,并具有更大的 CPU 缓存。但是,在同一代 CPU 中,在许多应用方面,时钟速度较高的处理器通常优于时钟速度较低的处理器。因此,请务必对同一品牌和同一代系的处理器进行比较。
—Intel官网, 参看参考文档[13]
频率对比
我这里来补充介绍一下,时钟周期是计算机中最基本的、最小的时间单位,在一个时钟周期内,CPU仅完成一个最基本的操作。我笔记本的CPU主频为2.3GHZ,那么一秒之内,我的CPU就可以执行23亿基本操作。按照一般的推理来说,提高CPU的运算性能,我们在提升架构性能的同时,提升主频就可以了,也就是一边研究更高效的处理指令,一边研究怎么在高效的架构更加快速的提升时钟速度。但是遗憾的是,我们并不能主频不能无限制的被提升, 原因在于主频提高过了一个拐点之后,功耗会爆炸增长,提高主频这条路走不通,那就再加一个处理器,这也就是多核处理器。
多核处理器和并发任务的出现
引入了多核处理器之后,可以继续提升CPU的性能了,但是又引入了新的问题,这没办法,在计算机世界里面,没有银弹,能够应付一切情况。在多核CPU情况下,计算机的内存结构可以被下图表示:
iLLr1A.jpeg
数据从主内存一级一级的加载到CPU,完成指令之后,再将计算结果写入对应的内存地址,其实这里还漏了磁盘,我们姑且忽略。早期的计算机是独占式的,
图片一.png
像上面的图片一样,一个程序写好了放在纸带上,被读取执行,但是随着硬件的高度集成化发展,计算机变得可以同时执行多个进程,这某种程度是一种并发,比如我现在写文章用typora写,一边用浏览器打开b站听歌曲,浏览器和typora事实上是两个进程,但给我的感觉就是计算机同时在接收我敲击键盘的指令,一边在驱动我的音响播放音乐,这一切都源于CPU强大的计算速度,这对于用户来说是无感知的,想起我之前写的文章《当我们说起多线程与高并发时》:
计算机用户通常认为操作系统能够同时做很多事情是无比正常的事情,因为他们通常会在使用办公软件处理文字的时候,其他程序在下载文件,管理打印,处理音频。甚至是一个应用程序也是希望同时能够做不止一件事。例如,一个音频处理程序必须同时从网络上读取音频,然后解压缩,管理播放,更新进度(这是现在很稀松平常的事情,也就是在线听歌)。不管是文字处理软件有多忙,它也总是在时刻响应键盘和鼠标。能够同时做不止一件事情的软件,我们称之为并发软件。
上面的并发强调的是同时做不止一件事情,这是一种操作系统提供给程序的假象,事实上他们可能是交替执行的(并发),当然也可能是同时执行的(并行),这取决于当前计算机系统的基本配置和忙碌程度有关。假设当前计算机不是很忙碌,也就是说运行的程序并不多,又假设CPU很强大,进程的两个动作(现代操作系统来说一般是线程,现代操作系统调度的基本单位就是线程),就可能会被分配到这两个核心上同时执行。如果此时当前计算机系统相对来说处于一种比较忙碌的状态,那么他们就只能排队执行,交替执行。
我也想起我之前的某一位Java老师,认为没有多线程现在的操作系统只能顺序执行程序,计算机只能执行一个进程,这种看法是只站在一个Java这一种语言来考虑问题,存在一定的认知谬误,我想原因大概在于大概在于Java为人熟知最多的就是多线程API,这常常给人一种错觉。其实Java也提供了创建进程的API:
private static void createProcess() throws IOException {
Runtime runTime = Runtime.getRuntime();
// 在单独的进程中执行传入的命令
runTime.exec(“”);
ProcessBuilder processBuilder = new ProcessBuilder();
// 开启一个进程
processBuilder.start();
}
进程和线程都是操作系统提供的概念,操作系统引入进程,是为了并发的执行程序,引入线程则是为了为了更好的共享资源、节省资源。那么多核碰见并发执行程序就擦出了火花,当多个处理器的运算任务涉及同一块主内存区域时,将可能导致各自的缓存数据不一致的情况,为了解决这个问题,就需要制定规则,这也就是缓存一致性协议,这类的协议有MSI、MESI、MOSI等等。
MESI协议简介
当CPU写数据时,如果发现操作的变量是共享变量,即在其他COU也存在该变量的副本,会发出信号通知其他CPU将变量的缓存行设置为无效状态,因为当其他CPU需要读取这个变量时,发现自己缓存中缓存该变量的缓存行是无效的,那么它就会从内存中重新获取。缓存行的中具体的几种状态如下:
iLPvaZ.jpeg
我们现在举个例子来说明体会一下缓存一致性协议,为了讨论问题方便,我们现在的处理器只有两核心,也就是两个CPU, 现在主内存有一个变量x = 1,MESI的工作流程为:
假设CPU1需要读取x的值,此时CPU1从主内存中读取到缓存行后的状态为E,代表只有当前数据中独占数据,并利用CPU嗅探机制监听总线中是否有其他缓存读取x的操作。
此时如果CPU2也需要读取x的值到缓存行,则CPU2中缓存行的状态为S,表示多个缓存中共享,同时CPU1由于嗅探到CPU2也缓存了x,所以状态也变成了S。并且CPU1和CPU2会同时嗅探是否有令缓存失效获取独占的操作。
当CPU1有写入操作需要修改x的值时,CPU1中缓存行的状态就变成了M。
CPU2由于嗅探到了CPU1的修改操作,则会将CPU2中缓存的状态变为I无效状态。
此时CPU1中缓存行的状态重新变回独占E的状态,CPU2要想读取x的值的话需要重新从主内存中读取。
状态变化图如下:
iLTWzw.jpeg
写缓冲器与无效化队列
MESI协议解决了缓存一致性问题,但是其自身也存在一个性能弱点-处理器执行写内存操作时,必须等待其他所有处理器将其高速中相应副本数据删除接收到这些处理器所回复的消息之后,才能将数据写入高速缓存。为了规避和减少这种等待造成的写操作的延迟,硬件设计者引入了写缓冲器和无效化队列。写缓冲器是处理器内部的一个容量比高速缓存还小的部件,每个处理器都有其写缓冲器,一个处理器无法读取另外一个处理器上的写缓冲器中的内容。
相关文章:
三菱m70 m80系统解密 三菱m80机床到期解锁
我们从操作系统的发展讲起,为什么要有线程这个概念出现。《Java多线程学习笔记(一) 初遇篇》讲Java平台下的线程,如何使用和创建,以及引入线程后所面临的问题,为了解决线程安全问题,Java引入的机制,这也是《…...
InnoDB 磁盘结构之数据字典和双写缓冲区
数据字典(InnoDB Data Dictionary) MySQL中,数据字典包括了: 表结构、数据库名或表名、字段的数据类型、视图、索引、表字段信息、MySQL版本信息、存储过程、触发器等内容 InnoDB数据字典由内部系统表组成,这些表包含用于查找表…...
Django模型层part two - 多表关系创建和多表操作
前言 继续上面一篇文章的内容,本文介绍多表操作。使用django ORM可以创建多表关系,并且也支持多张表之间的操作,以创建表关系和查询两部分说明django ORM的多表操作。以作者、图书、出版社和作者信息几张表作为案例进行说明。 创建表关系 …...
智能优化算法:浣熊优化算法-附代码
智能优化算法:浣熊优化算法 文章目录 智能优化算法:浣熊优化算法1.浣熊优化算法1.1 初始化1.2 阶段一:狩猎和攻击(探索阶段) 2.实验结果3.参考文献4. Matlab 摘要:浣熊优化算法(Coati Optimizat…...
【51单片机】数码管显示(样例展示以及异常分析)
🎊专栏【51单片机】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【如愿】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰 ⭐数码管 比如要显示“6”,那么下面图片中,AFEDCG=1,B=0 对应到数码管上,就是 ⭐原理 🎊P22~P24控制LED1~...
Android InputChannel事件发送接收系统分析
本文基于Android12。 InputChannel表示其他进程通过文件描述符传递输入事件到View的通道,因为需要跨进程传输,实现了Parcelable序列化接口,所以也能够理解Java层的InputChannel后面为什么使用copyTo()方法初始化。 输入事件的接收方是View&…...
Java时间类(五)-- LocalDate()类
目录 引言: 1. LocalDate的概述: 2. LocalDate的常用方法: 引言: (1)Date存在的缺陷: 如果不格式化,打印出的日期可读性差://获取当前时间Date date = new Date();System.out.println("date = " + date); //date = Wed May 03 22:30:24 CST...
用手机号码归属地 API 开发的应用推荐
引言 手机号码归属地 API是一种提供手机号码归属地信息的接口,通过该接口,可以获取手机号码所属的省份、城市、运营商等信息。它可以帮助企业更好地了解客户,为个性化推荐和精准广告投放提供数据支持。作为一种数据服务,手机号码…...
测试从业第 3 年,我看到了终点......
先说明,今天的内容,是写给想成为高级测试开发、自动化测试专家的人看的,因为,它可能颠覆你的认知。 众所周知,如今无论是大厂还是中小厂,自动化测试基本是标配了,毕竟像双11、618 这种活动中庞…...
结巴分词原理分析
结巴分词器工作原理 结巴分词是一款python写成的开源中文分词器,分词过程大致如下: 首先,结巴使用正则表达式将输入文本切割成若干中文块,接着对每个中文块B做处理,将B转成有向无环图(DAG)。DAG是以{key:list[i,j...…...
JavaEE 第三-四周
计算机Z20-第3-4周作业 总分:100分 得分:74.2分 1 . 填空题 简单 5分 在web.xml文件中,<url-pattern>/xxxxServlet</url-pattern>中的第一个‘/’表示__________。 学生答案 当前web应用程序的根目录 2 . 填空题 简…...
Ububtu20.04 无法连接外屏(显卡驱动问题导致)
Ububtu20.04 无法显示第二个屏幕(显卡驱动问题) Ububtu20.04 无法显示第二个屏幕(显卡驱动问题) Ububtu20.04 无法显示第二个屏幕(显卡驱动问题) 1. 问题描述2. 解决方案 1. 问题描述 一开始我的ububt…...
配置JDK环境变量
文章目录 查看电脑系统下载及安装JavaSE配置系统环境变量测试环境变量配置是否成功。 查看电脑系统 运行输入框中输入:control 下载及安装JavaSE 这个从网上下载就行,jdk-8u141-windows-x64.exe,不提供下载方式了。 主要讲解安装过程&a…...
保护移动设备免受恶意软件侵害优秀方法
几天前,移动恶意软件攻击增加了500%显然,我们大多数人都不知道不能很好地保护我们的手机下面小编揭秘有效保护移动设备免受恶意软件侵害的最佳方法。 1、使用移动反恶意软件 恶意软件很容易感染智能手机和平板电脑,因此在设备上安装可靠的…...
一个人在家怎么赚钱?普通人如何通过网络实现在家就能赚钱
近年来,随着互联网的飞速发展,嗅觉敏锐的人只要使用互联网就可以快乐地赚钱。一般来说,网上赚钱的投资较少,有时有一台能上网的电脑或手机就够了,所以大家有时称其为“无成本或低成本网赚”。今天就分享一个人在家如何…...
ChatGPT诞生的新岗位:提示工程师(Prompt Engineer)
ChatGPT诞生的新岗位:提示工程师(Prompt Engineer) Prompt 工程师是什么? 是识别人工智能的错误和隐藏功能,以便开发者可以对这些发现进行处理。 如果你正在寻找科技领域最热门的工作,你可以尝试了解如何与AI聊天机…...
机器学习笔记 使用PPOCRLabel标注自己的OCR数据集
一、PPOCRLabel的安装 最简单的方式就是直接pip安装,如下命令。 pip install PPOCRLabel -i https://pypi.douban.com/simple/ 运行的时候,直接激活安装了PPOCRLabel的环境后,输入PPOCRLabel回车即可运行,不过PPOCRLabel依赖PyQt5,所以会要求安装PyQt5,按要求安装或者提前…...
【C++初阶】类和对象(二)
📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:C初阶 🎯长路漫漫浩浩,万事皆有期待 上一篇博客:【C初阶】…...
深入探讨Java、Spring和Dubbo的SPI机制
在Java开发领域中,SPI(Service Provider Interface)是一种用于实现框架扩展的机制。Java本身提供了SPI机制,Spring和Dubbo也都有自己的SPI机制。本文将介绍Java、Spring、Dubbo三者SPI机制的原理和区别。 一、Java SPI机制 Java…...
使用机器人为无线传感器网络提供服务(Matlab代码实现)
目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨💻4 Matlab代码 💥1 概述 无线传感器网络是一种无线网络,包括大量循环的、自定向的、微小的、低功耗的设备,称为传感器节点&…...
QT自制软键盘 最完美、最简单、跟自带虚拟键盘一样
QT自制软键盘 最完美、最简单、跟自带虚拟键盘一样 [1] QT自制软键盘 最完美、最简单、跟自带虚拟键盘一样一、本自制虚拟键盘特点二、windows打开系统自带软键盘三、让键盘界面保持在最上方、不改变底层界面焦点四、长按按键重复输入键盘内容五、模拟键盘点击事件完成虚拟键盘…...
优思学院|8D和DMAIC两种方法应如何选择?
在现代的商业环境中,客户投诉是一个非常常见的问题。当客户不满意产品或服务时,他们往往会向企业发出投诉。质量管理部门是一个负责处理这些投诉的重要部门,因为它们需要确保产品和服务的质量满足客户的期望。改善方法是质量管理部门用来解决…...
回归预测 | MATLAB实现MLR多元线性回归预测(多指标评价)
回归预测 | MATLAB实现MLR多元线性回归预测(多指标评价) 目录 回归预测 | MATLAB实现MLR多元线性回归预测(多指标评价)预测效果基本介绍模型描述程序设计参考资料预测效果 基本介绍 回归预测 | MATLAB实现MLR多元线性回归预测(多指标评价) 模型描述 多元线性回归(Multip…...
PHP 二维数组相关函数:二维数组指定key排序,二维数组转一维数组,两个二维数组取差集,对象转数组,判断元素是否在多维数组中
目录 一、二维数组转一维数组 二、对二维数组进行指定key排序 三、二维数组转一维数组 四、两个二维数组取差集 五、对象转数组 六、判断元素是否在多维数组中 PHP 二维数组相关函数:二维数组转一维数组,二维数组指定key排序,两个二维数…...
演出剧院门票售票预约小程序开发制作功能介绍
基于微信小程序的票务预约小程序,广泛适用于演出主办方、剧院、艺术中心、活动中心售票、景区门票售票、儿童游乐园售票、会务签到、展会售票签到、教育培训报名预约、健身预约功能。 多场景售票支持: 售票软件支持多种场景的售票,支持选座、…...
JUC之Java内置锁的核心原理
文章目录 JUC之Java内置锁的核心原理Java对象结构对象头对象体对齐字节 Mark Word的结构信息64位Mark Word的构成 偏向锁偏向锁的设置偏向锁的重偏向偏向锁的撤销偏向锁的膨胀 轻量级锁执行过程轻量级锁的分类普通自旋锁自适应自旋锁 重量级锁偏向锁、轻量级锁与重量级锁的对比…...
【项目经理】论项目经理的自我修养
项目经理的非职权领导力 文章目录 项目经理的非职权领导力一、权利的类型二、构成权利的三要素三、沟通是实施影响力的重要手段3.1 沟通的主要类型3.2 沟通的内容和形式3.3 沟通的主要困难 四、综合沟通协调的技巧4.1 常见的负面反馈4.2 沟通技巧 五、论项目经理的自我修养5.1 …...
知识图谱学习笔记03-知识图谱的作用
语义搜索 知识图谱在语义搜索方面扮演着非常重要的角色。传统的文本搜索引擎基本上是基于关键词匹配的方式进行搜索,这种方式容易受到搜索词语的表述方式和不同语言之间的差异的影响,而无法深入理解用户的意图和查询目的。而知识图谱则提供了一种更加精…...
刚进公司就负责项目,把老弟整蒙了!
刚进公司就负责项目,把老弟整蒙了! 大家好,我是鱼皮,先把封面图送给大家: 又快到周末了,今天分享一些轻松的编程经验~ 还记得我学编程的老弟小阿巴么?他目前大二,听说最近刚刚找到…...
【Python基础入门学习】Python高级变量你了解多少?
认识高级变量 1. 列表 list1.1 列表的定义1.2 列表常用操作关键字、函数和方法 1.3 循环遍历1.4 列表嵌套1.5 应用场景 2. 元组 tuple2.1 元组的定义2.2 元组常用操作2.3 应用场景 3. 字典 dictionary3.1 字典的含义3.2 字典常用操作3.3 应用场景 4. 字符串 string4.1 字符串的…...
wordpress如何添加首页图片/抖音黑科技引流推广神器
今天调试代码的过程中,F8失效 解决办法 关掉有道词典!...
青岛网站建设找/网站优化外包推荐
首先确保机器上安装了openssl和openssl-devel #yum install openssl #yum install openssl-devel 然后就是自己颁发证书给自己 #cd /usr/local/nginx/conf #openssl genrsa -des3 -out server.key 1024 #生成私钥,需要输入密码,记住就…...
郑州网站制作多少钱/网络推销
先放两篇整理内置对象较全的博客: https://segmentfault.com/a/1190000011467723 https://www.cnblogs.com/liuluteresa/p/6413988.html 再来一篇面试题 https://blog.csdn.net/mino_miao/article/details/81167867 对下述定时器面试题中同步异步问题的详解…...
网站的做用/网络销售挣钱吗
Android中对sqlite加密--SQLCipher 原文:Android中对sqlite加密--SQLCipherandroid中有些时候会将一些隐私数据存放在sqlite数据库中,在root过的手机中通过RE就能够轻松的打开并查看数据库所有内容,所以对隐私数据的保护就有两个方法:①将隐私…...
建设网站 翻译/网站seo关键词设置
最近负责的邮箱系统项目中有一个这样的需求:提供一个接口给业务层,可以通过邮箱查询到该用户的未读邮件个数。 之前的方案是通过查看用户目录下.INBOX/new目录中的文件个数,但是这个方法不准确,当有用户连接到邮箱服务器时&#x…...
一个新网站要怎么做seo/西部数码域名注册官网
jsp使用jdk8时,需要tomcat7以及以上版本,jsp在使用jdk7的时候,tomcat使用tomcat6即可...