【2.2】Java微服务:Hystrix的详解与使用
目录
分布式系统面临问题
Hystrix概念
Hystrix作用
降级
什么是降级
order服务导入Hystrix依赖(简单判断原则:谁调用远程谁加)
启动类添加注解
业务方法添加注解(冒号里填回调方法名,回调方法返回兜底数据)
添加回调方法(原则:回调方法与原方法的返回值和参数要一致)
示例:(回调方法:fallback)
熔断
什么是熔断
熔断具体执行过程
业务方法添加注解
示例
请求合并
什么是请求合并
使用背景
请求合并的缺点
参数介绍
设置需要被请求合并的方法
batch方法
测试
线程池隔离
什么是线程池隔离
为什么使用线程池隔离
优缺点
优点
缺点
线程池隔离参数
示例
配置线程池隔离
对应线程池隔离的方法添加注解
测试
分布式系统面临问题
多个微服务之间调用的时候,假如微服务A调用微服务B和微服务C,微服务B和微服务C又调用其他的微服务,这就是所谓的"扇出"。
如果扇出的链路上某个微服务的调用响应的时间过长或者不可用,对微服A的调用就会占用越来越多的系统资源,进而引起系统崩溃,即"雪崩效应"。
对于高流量的应用来说,单一的后端依赖可能会导致所有的服务器上的所有资源都在几秒钟内饱和。比失败更糟糕的是,这些应用程序还可能导致服务之间的延迟增加,备份队列,线程和其他系统资源紧张,导致整个系统发生更多的级联故障。这些都表示需要对故障和延迟进行隔离和管理,以便单个依赖关系的失败,不能取消整个应用程序或系统。
所以,通常当你发现一个模块下的某个实例失败后,这时候这个模块依然还会接收流量,然后这个有问题的模块还调用了其他的模块,这样就会发生级联故障,或者叫雪崩。
Hystrix概念
①Hystrix是一个开源库,专用于处理分布式系统中的延迟和容错问题。它提供了一种机制,确保当一个服务出现故障时,不会影响整个系统,从而提高分布式系统的弹性。
②作为“断路器”,Hystrix能够通过监控来检测服务的故障情况。一旦发现故障,它会打开断路器,并返回一个可以处理的响应结果,以避免服务调用线程被长时间占用,防止故障蔓延
Hystrix作用
(1)服务降级
服务出现故障时,给故障服务降级到事先准备好的故障处理结果,将此结果返回给服务消费者(2)服务熔断
熔断机制是应对服务雪崩的一种链路保护机制,当服务出现故障时,服务会进行降级,熔断该服务节点,迅速返回错误响应信息。当检测到服务访问正常时,恢复其链路节点。(3) 请求合并
请求合并是一种优化策略,通过将多个相同类型的请求合并为一个批量请求发送给后端服务,以减少网络开销和提高性能。
(4) 线程池隔离
通过线程池隔离,可以为每个服务或模块分配独立的线程池,使它们在各自的线程池中独立运行。这样可以实现资源隔离、错误隔离和阻塞隔离,提高系统的稳定性和性能。
降级
什么是降级
降级是指,当请求超时、资源不足等情况发生时进行服务降级处理,不调用真实服务
逻辑,而是使用快速失败(fallback) 方式直接返回一个兜底数据,保证服务链条的完整,
避免服务雪崩。|
(本文章示例代码继于1.2 eureka注册中心,完成服务注册)
order服务导入Hystrix依赖(简单判断原则:谁调用远程谁加)
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
启动类添加注解
@EnableCircuitBreaker
业务方法添加注解(冒号里填回调方法名,回调方法返回兜底数据)
@HystrixCommand(fallbackMethod = "")
添加回调方法(原则:回调方法与原方法的返回值和参数要一致)
示例:(回调方法:fallback)
@HystrixCommand(fallbackMethod = "fallback")
正常调用情况下,请求成功,返回正常数据
停止user服务,即让远程调用失败
再次发起请求
此时,远程服务调用失败了,资源不存在,触发降级 ,Hystrix返回兜底数据
熔断
什么是熔断
熔断是当一定时间内,异常请求比例(请求超时、网络故障、服务异常等)达到阀值时,启
动熔断器,熔断器旦启动, 则会停止调用具体服务逻辑,通过fallback快速返回托底数
据,保证服务链的完整。熔断可以看作是特定的降级。熔断有自动恢复机制,如:当熔断器启动后,每隔5秒,尝试将新的远程调用,如果服务可正常执行并返回结果,则关闭熔断器,服务恢复。如果仍旧调用失败,则继续返回托底数据,熔断器持续开启状态。
熔断可以看作是于电路的跳闸功能
熔断具体执行过程
(开启与关闭是指熔断的状态)
业务方法添加注解
@HystrixCommand(fallbackMethod = "", commandProperties = {})
熔断的注解是在降级的注解上增加,commandProperties = {} 里填熔断条件,如下示例图,具体熔断条件可点击HystrixPropertiesManager类查看
示例
以下熔断条件: 20秒内出现3个请求,失败率为30%,就会触发熔断,30秒内不再发送调用
@HystrixCommand(fallbackMethod = "fallback",commandProperties = {//20秒内出现3个请求,失败率为30%,就会触发熔断,30秒内不再发送调用// 条件一: 请求数量达到3个@HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_REQUEST_VOLUME_THRESHOLD, value = "3"),// 条件二: 每20秒一个判断单位@HystrixProperty(name = HystrixPropertiesManager.EXECUTION_ISOLATION_THREAD_INTERRUPT_ON_TIMEOUT,value = "20000"),// 条件三: 失败率30%@HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_ERROR_THRESHOLD_PERCENTAGE, value = "30"),// 结果: 熔断后, 30秒内不再请求远程服务@HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_SLEEP_WINDOW_IN_MILLISECONDS, value = "30000")})
结果:
三次远程调用都失败,返回兜底数据。第四次开始,不再远程调用,直接返回兜底数据,实现熔断
请求合并
什么是请求合并
请求合并是一种将多个独立的请求合并为一个或少数几个请求的机制。它的目的是减少网络延迟和提高系统性能效率。服务接收到请求不会立即执行,而是在一定时间内等待是否还有相同的请求到达。这个等待的时间称为合并窗口。当合并窗口结束时,服务端会执行合并后的请求。
使用背景
在微服务架构中,我们将一个项目拆分成很多 个独立的项目,这些独立的项目通过远程调用来互相配合工作。
但是,在高并发情况下,通信次数的增加会导致总的通信时间增加,同时,线程池的资源也是有限的,高并发环境会导致有大量的线程处于等待状态,进而导致响应延迟,为了解决这些问题,需要使用Hystrix的请求合并。
请求合并的缺点
设置请求合并之后,本来1个请求可能5ms就搞定了,但是现在必须再等10ms。看看还
有没有其他的请求一起的, 这样一个请求的耗时就从 5ms增加到15ms了,不过,如果要发起的命令本身就是一个高延迟的命令,那么这个时候就可以使用请求合并了,因为这个时候时间窗的时间消耗就显得微不足道了,另外高并发也是请求合并的一个非常重要的场景。
参数介绍
参数 | 作用 | 默认值 | 备注 |
---|---|---|---|
@HystrixCollapser | 被@HystrixCollapser标注的方法。返回类型必须为Future,使用异步方法,否则无法进行请求合井 | ||
batchMethod | 合并请求的方法 | 方法只能接受 个参数。如果你需要传递多个参数,那么请将它们封装成一一个类参数。 | |
scope | 请求方式 | REQUEST | 请求方式:分为REQUEST, GLOBA。 REQUEST范围只对一个request请求内的多次服务请求进行合并 GLOBAL是多单个应用中的所有线程的请求中的多次服务请求进行合并 |
timerDelayInMilliseconds | 请求时间间隔在10ms之内的请求会被合并为一个请求 | 10ms | 建议尽量设置的小一点.如果并发量不大的话.其实也没有必要使HystrixCollapser来处理 |
maxRequestsinBatch | 设置触发批处理执行之前,在批处理中允许的最大请求数量 | Integer.MAX. _VALUE |
设置需要被请求合并的方法
方法上添加注解
@HystrixCollapser(batchMethod = "batch", scope = com.netflix.hystrix.HystrixCollapser.Scope.GLOBAL,collapserProperties = {})
- batchMethod内添加请求合并后的执行方法
- scope一般都是使用GLOBAL方式
- collapserProperties内配置请求合并的参数,具体如下
- 这个方法的作用就是将请求参数合并,方法体不会执行,真正执行的方法是:batch
- 合并方法的返回值必须是Future类型
batch方法
batch方法上添加注解
@HystrixCommand
batch方法的的参数和返回值要和合并方法相同 ,batch方法是真正执行多个请求的方法,对应的参数需要改成例如参数,例如List
被调用的服务方法也要做出修改,将参数修改为List参数
测试
在请求接口中模拟并发操作,同时发出多次请求 ,打印返回值
在batch方法中打印合并后的参数
发送请求
查看控制台,打印出了合并后的请求,以及返回值
线程池隔离
什么是线程池隔离
为每个模块或组件分配独立的线程池,使它们在各自的线程池中独立运行
为什么使用线程池隔离
没有线程池隔离的时候可能因为某个接口的高并发导致其他接口也出现问题,当使用线程池隔离。不同接口有着自己独立的线程池
优缺点
优点
- 任何一个服务都会被隔离在自己的线程池内,即使自己的线程池资源填满也不会影响其他服务。
- 当依赖的服务重新恢复时,可通过清理线程池,瞬间恢复服务的调用。但是如
- 果是tomcat线程池被填满,再恢复就会很麻烦。
- 每个都是独立线程池。一定程度上解决了高并发问题。
- 由于线程池中线程个数是有限制,所以也解决了限流问题。
缺点
- 增加了CPU开销。因为不仅仅有Tomcat的线程池,还需要有Hystrix,线程池。
- 每个操作都是独立的线程,就有排队、调度和上下文切换等问题。
线程池隔离参数
参数 | 作用 | 默认值 | 备注 |
---|---|---|---|
groupKey | 服务名(相同服务用一个名称,如商品用户等等) | getClass0.getSimpleName0: | 在consumer里画为与个provider轻务,设置group标 读,一个oroup使用一个线程池 |
commandKey | 接口(服务下面的接口,如购 买商品) | 当前执行方法名 | consumer的接口名称 |
threadPoolKey | 线程池的名称﹔配置全局港一 标识线释池的名称,相同线翔 池名称的线程油是同一个。 | 新认是分组名groupKey. | 配孟全局唯一标识线程池的名称,相同线程池名称的 线程池是间一个. |
coreSize | 线程池大小:这是最大的并发执行数量。 | 10 | 设置标准: requests per second at peak whenhealthy x 99th percentiie latency. in seconds +some breathing room 每秒锻大支撑的请求数(99%平均迪应时间+一个缓冲值 |
maxQueueSize | 最大队列长度﹔设置 BtockingQueue的染大长度 | -1 | 默认值:-1如果使用正数,队列将从同步队列 (SynchronousQueue】改为阻塞队列 ( LinkedBlockingQueue ) |
queueSizeRejectionThreshold | 拒绝请求:设置拒绝请求的临界值 | 5 | 此属性不适用于maxQueuesize =-1时 没置设个值的索因是maxQueoeSze值运行时不能改 变,我们可以通过修改这个变量动态惨改允许排队的长度 |
keepAliveTimeMinutes | 线程存活时间:设量存活时间,单位分钟. | 1分钟 | 控制一个线程从实用完成到被释放的时间 |
示例
常规
添加两个service方法,分别打印当前线程
添加接口一次性调用这两个方法
发送请求,可以看到,两个请求走的同一个线程
配置线程池隔离
对应线程池隔离的方法添加注解
@HystrixCommand(groupKey = "t1" , commandKey = "thread1", threadPoolKey = "t1", threadPoolProperties= {// 最大的并发执行数量@HystrixProperty( name="coreSize",value="8"),// 最大队列长度@HystrixProperty(name="maxQueueSize" ,value="5"),// 拒绝请求的临界值@HystrixProperty( name= "keepAliveTimeMinutes", value="2"),// 线程存活时间@HystrixProperty(name="queueSizeRejectionThreshold" , value="5")})
commandKey一般为当前方法名,groupKey和threadPoolKey 一般使用相同名称
测试
重启服务,发送请求,可以看到两个请求处于不同线程,隔离了
本文章在持续更新中
参考文章
SpringCloud——Hystrix详解_springcloud hystrix_swttws.的博客-CSDN博客
相关文章:
![](https://img-blog.csdnimg.cn/13b9528ef63642f99c6eb70643315ad1.png)
【2.2】Java微服务:Hystrix的详解与使用
目录 分布式系统面临问题 Hystrix概念 Hystrix作用 降级 什么是降级 order服务导入Hystrix依赖(简单判断原则:谁调用远程谁加) 启动类添加注解 业务方法添加注解(冒号里填回调方法名,回调方法返回兜底数据&…...
![](https://www.ngui.cc/images/no-images.jpg)
【PYTHON】WebSocket服务端与客户端通信实现
目录 1 简介 2 WebSocket优点 3 前后端交互的方式 4 心跳机制和重连机制 5 后端代码 6 测试...
![](https://www.ngui.cc/images/no-images.jpg)
Runloop 的五种mode
1.runloop是一个事件驱动的循环,收到事件就去处理,没有事件就进入睡眠. 2.应用一启动主线程被创建后,主线程对应的runloop也被创建,runloop也保证了程序能够一直运行.之后创建的子线程默认是没有runloop的,只有当调用[NSRunLoop currentRunLoop]去获取的时候才被创建. 3.runloo…...
![](https://www.ngui.cc/images/no-images.jpg)
C++头文件使用精要
一、头文件包含顺序 根据《Google C 编程风格指南》,对于Foo.cpp,顺序推荐为: Foo.hC标准库C标准库其它库的头文件本工程的头文件 另外,在包含头文件时应该加上头文件所在工程的文件夹名,可区分重名文件。即假如你有…...
![](https://www.ngui.cc/images/no-images.jpg)
Flink之SideOutput(数据分流)
Flink在早期版本有一个split算子用来做数据分流使用的,但是在flink-1.12开始这个API就已经被删除了,在1.12版本以后我们是通过process算子来做数据分流的,这里就介绍一下如何使用prodess进行数据分流. 代码 import org.apache.flink.api.common.typeinfo.TypeInformation; im…...
![](https://img-blog.csdnimg.cn/b0d31364b7e740d9a61a1ad3866084c2.png)
Android Studio新版本logcat过滤说明
按包名过滤 //输入package:(输入一个p就会有提示的) ,后面加上包名 比如: package:com.xal.runcontrol package:包名可以完整或者输部分包名即可 package:包名需要输完整准确 package~:正则表达式过滤 不了解正则表达式的可以参考&#…...
![](https://www.ngui.cc/images/no-images.jpg)
carsim与matlab仿真
matlab2021a安装教程,亲测。 百度网盘: matlab2021a安装包 提取码:1223 CarSim2020安装教程, 亲测。 百度网盘: CarSim2020安装包 提取码:1223 ,破解可参考 b站视频...
![](https://www.ngui.cc/images/no-images.jpg)
rust里如何快速实现一个LRU 本地缓存?
LRU是Least Recently Used(最近最少使用)的缩写,是一种常见的缓存淘汰算法。LRU算法的基本思想是,当缓存空间已满时,优先淘汰最近最少使用的数据,以保留最常用的数据。 在计算机系统中,LRU算法…...
![](https://img-blog.csdnimg.cn/40ab896baebe454b9b3522b9ae19f0dd.png)
MQTT 订阅接收消息 mosquitto 方式
1 说明 采用 mosquitto 库,实现订阅主题,并接收消息。其中服务器有做限制,需要对应的 cilent id ,cafile 、certfile 、keyfile 等配置2 环境 采用ubuntu 直接编译调试 安装mosquitto 库 sudo apt install libmosquitto-dev su…...
![](https://img-blog.csdnimg.cn/f7007382116746d4b6674b2dca4b2163.png)
以mod_jk方式整合apache与tomcat(动静分离)
前言: 为什么要整合apache和tomcat apache对静态页面的处理能力强,而tomcat对静态页面的处理不如apache,整合后有以下好处 提升对静态文件的处理性能 利用 Web 服务器来做负载均衡以及容错 更完善地去升级应用程序 jk整合方式介绍&#…...
![](https://www.ngui.cc/images/no-images.jpg)
springboot动态数据源切换
1)、就是将多个数据源全部注入到bean中,根据需要实现多数据源之间的切换。 2)、使用baomidou的DS注解。见文章DS注解实现数据源动态切换 com.baomidou dynamic-datasource-spring-boot-starter 3.5.1 ##设置默认的数据源或者数据源组,默认值…...
![](https://www.ngui.cc/images/no-images.jpg)
代码随想录训练营day14
101. 对称二叉树 给你一个二叉树的根节点 root , 检查它是否轴对称。 func isSymmetric(root *TreeNode) bool {if root nil{ return true}return judge(root.Left,root.Right) }func judge(lf *TreeNode , ri *TreeNode)bool{if lf nil && ri nil{ retu…...
![](https://www.ngui.cc/images/no-images.jpg)
功能测试进阶自动化测试如何摸清学习方向,少走弯路呢?
目录 抛开疑问,只做学术探讨 小白在想什么? 盖楼之前先打好地基,首先需要学习一门语言 语言入门后,正式踏上开始自动化成神之路,入门篇Selenium 玩腻了Selenium 开始接触自动化框架unittest/testNG 不满足于单元…...
![](https://www.ngui.cc/images/no-images.jpg)
检测前端是否可以ping通后端返回的ip地址
检测前端是否可以ping通后端返回的ip地址 前端检测是否可ping通ip地址(PC端)前端检测是否可ping通ip地址(uniapp小程序端) 前端检测是否可ping通ip地址(PC端) // 前端检测是否可ping通ip地址 ping…...
![](https://img-blog.csdnimg.cn/77ae16fe4e9e4537b4c9772996bf5b6b.jpeg)
SMART司马他法则(目标管理)
S代表具体(Specific),指绩效考核要切中特定的工作指标,不能笼统; M代表可度量(Measurable),指绩效指标是数量化或者行为化的,验证这些绩效指标的数据或者信息是可以获得的; A代表可实现(Attainable)&…...
![](https://img-blog.csdnimg.cn/8af39143eaca471da142a9949367272d.png)
【LeetCode】删除并获得点数
删除并获得点数 题目描述算法分析编程代码空间优化 链接: 删除并获得点数 题目描述 算法分析 编程代码 class Solution { public:int deleteAndEarn(vector<int>& nums) {const int N 10001;int arr[N] {0};for(const auto& n : nums){arr[n]n;}vector<in…...
![](https://img-blog.csdnimg.cn/53a1c524cc7c42baaa6b443d5b0a8fd2.png)
SciencePub学术 | 传感器类重点SCIE征稿中
SciencePub学术 刊源推荐: 传感器类重点SCIE征稿中!信息如下,录满为止: 一、期刊概况: 传感器类重点SCIE 【期刊简介】IF:2.0-2.5,JCR3区,中科院4区; 【版面类型】正刊࿱…...
![](https://www.ngui.cc/images/no-images.jpg)
移动端开发基础总结
移动端学习总结 (适合于复习) 移动端基础 技术选型: 单独制作移动端页面(主流) 流式布局(百分比布局)flex弹性布局(强烈推荐)lessrem媒体查询布局混合布局 响应式页面兼容移动端(…...
![](https://www.ngui.cc/images/no-images.jpg)
小X学游泳(深搜)
第一题 题目描述 小X想要学游泳。 这天,小X来到了游泳池,发现游泳池可以用N行M列的格子来表示,每个格子的面积都是1,且格子内水深相同。 由于小X刚刚入门,他只能在水深相同的地方游泳。为此,他把整个游泳池…...
![](https://img-blog.csdnimg.cn/20fecc4f6c3b491eb411be0a7a225c02.png#pic_center)
分布式协议与算法——拜占庭将军问题
拜占庭将军问题 背景:以战国时期为背景 战国时期,齐、楚、燕、韩、赵、魏、秦七雄并立,后来秦国的势力不断强大起来,成了东方六国的共同威胁。于是,这六个国家决定联合,全力抗秦,免得被秦国各个…...
![](https://www.ngui.cc/images/no-images.jpg)
MySQL数据库管理的基本原则和技巧
MySQL数据库是一种常用的关系型数据库管理系统,用于存储和管理大量的数据。在进行MySQL数据库管理时,有一些基本原则和技巧可以帮助我们更有效地管理数据库。 数据库设计原则: 合理规划数据表结构: 根据数据之间的关系和业务需求…...
![](https://img-blog.csdnimg.cn/7323e8be94b54c2e9fb89c3b925256a6.png)
SQL-每日一题【1193. 每月交易 I】
题目 Table: Transactions 编写一个 sql 查询来查找每个月和每个国家/地区的事务数及其总金额、已批准的事务数及其总金额。 以 任意顺序 返回结果表。 查询结果格式如下所示。 示例 1: 解题思路 1.题目要求我们查找每个月和每个国家/地区的事务数及其总金额、已批准的事务数…...
![](https://img-blog.csdnimg.cn/img_convert/f5db83664dd9dbe87cdbdd0c3ed28c0e.jpeg#pic_center)
探析青少年口才训练在个人发展中的重要性与影响
论文题目:探析青少年口才训练在个人发展中的重要性与影响 摘要: 本论文旨在探讨青少年口才训练对个人发展的重要性和影响。通过对相关文献的综述和实证研究的分析,论文将阐述口才训练对青少年自信心、表达能力和思维能力的提升,以…...
![](https://img-blog.csdnimg.cn/49003d19702f43c9a233b53cf361faf0.png)
HTML 元素的 class 和 id 属性有何区别?
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 唯一性⭐ 选择器权重⭐ JS操作⭐ CSS和JavaScript引用⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏…...
![](https://www.ngui.cc/images/no-images.jpg)
关于GKPhoto点击放大没有图片只有缺省图
GKPhoto,点进去看看,人家可传递的不止有url,还有UiImage NSString *photo self.detailModel.teacherModel.teacher_picture; NSString *placeHoldStr "ing_morentouxiang"; NSMutableArray *photos [NSMutableArray new]; GKPhoto *phot…...
![](https://img-blog.csdnimg.cn/51eb7a77eda84f2094766104e440d2da.jpeg)
建议收藏!总结了 42 种前端常用布局方案
对 CSS 布局掌握程度决定你在Web开发中的开发页面速度。随着Web技术的不断革新,实现各种布局的方式已经多得数不胜数了。 本篇文章总结了四十二种CSS的常见布局,这四十二种布局可以细分为如下几类: 水平居中垂直居中水平垂直居中两列布局三…...
![](https://www.ngui.cc/images/no-images.jpg)
spring AOP两种动态代理
本文开始 1.什么是动态代理? 动态代理:本来是通过直接访问目标对象的,但是找个代理对象替你进行访问目标对象,这就是动态代理过程; 例如:买饭作为目标对象,自己不想亲自跑腿,就点个…...
![](https://www.ngui.cc/images/no-images.jpg)
英语——副词
副词是指在句子中表示行为或状态特征的词,常用来修饰动词、形容词、其他副词或者句子等,表示时间、地点、方式和程度等,在句子中作状语。 第一节 副词的基本形式 一、副词的构成 1.许多副词都是由形容词变化而来。 (1)大部分副词由相应形容词直接加-ly构成。quick→q…...
![](https://img-blog.csdnimg.cn/dfea9123c0ae457cb54a9c9ab968d62c.png)
Vue 本地应用 记事本 v-on v-model v-for使用
新增功能 vue当中如何生成列表结构?使用的指令是v-for,同时要有一个可以生成列表的数据,常用的是数组。记事本里面的内容并不复杂,所以这里使用字符串数组就行了。 获取用户输入的内容使用绑定v-model,双向数据绑定&a…...
![](https://img-blog.csdnimg.cn/98a4d7f49bb74ffca2032be9fc14b4b7.png)
智能质检技术的核心环节:语音识别和自然语言处理
随着呼叫中心行业的快速发展和客户服务需求的不断提高,越来越多的企业开始采用智能质检技术,以提高呼叫中心的质量和效率。而在智能质检技术中,语音识别和自然语言处理是其核心环节,对于提高质检的准确性和效率具有重要作用。 语音…...
![](/images/no-images.jpg)
最专业网站建设公司/网络推广员是什么工作
BQMail:向IRIS发送地震数据申请的Python脚本实现徐弥坚;郝识杰;吴本君【期刊名称】《中国科技论文》【年(卷),期】2016(011)003【摘要】BQMaildevelopedonPython,isanopensourcesoftwarepackageforrequestingdatafromIncorporatedResearchInsti-tutionsforSeismolog…...
![](/images/no-images.jpg)
官方查企业信息的网站/东莞网站推广优化网站
计算机入门及操作技能训练模拟试题.doc计算机入门及操作技能训练模拟试题 2 一、单选题一、单选题 (每空(每空 1 1 分,共分,共 3030 分)分) 1. 1. 下列描述中,正确的是( ) 。 A.1MB1000B B.1MB1000KB C.1MB1024B D.1MB1024KB 2. 2. 执行下列二…...
![](https://img-blog.csdnimg.cn/20200923085027923.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3RoaXN3YXlfZGl5,size_16,color_FFFFFF,t_70#pic_center)
北京专业网站建设网站推广/seo具体怎么优化
在线课堂:https://www.100ask.net/index(课程观看) 论 坛:http://bbs.100ask.net/(学术答疑) 开 发 板:https://100ask.taobao.com/ (淘宝) https://weid…...
![](/images/no-images.jpg)
医院网站建设解决方案/排名前50名免费的网站
// push 方法// 将新元素添加到一个数组结尾,并返回数组的新长度值。var arr4 new Array(tom);var arr4_len arr4.push(520,Hi);console.log(arr4_len); // 3console.log(arr4);// unshift 方法// 将指定的元素插入数组开始位置并返回该数组新长度。var arr4_new …...
![](/images/no-images.jpg)
wordpress页面图片如何排版/合肥网络推广
moment.js不依赖任何第三方库,支持字符串、Date、时间戳以及数组等格式,可以像PHP的date()函数一样,格式化日期时间,计算相对时间,获取特定时间后的日期时间等等,本文有如下举例。 格式化日期 当前时间&…...
![](/images/no-images.jpg)
做网站需要公司备案/关键词排名优化易下拉软件
今天晚上我迫不急待的打开电脑,一阵撕心裂肺的猫叫之后,我开始了网上的旅程。 没搞错,上不去我的网页,怎么搞的,我可是网页的版主哦,这就像因太晚没回家而被老婆关在门外的可怜人一样,只…...