高性能编程
前言
首先说一下我为什么要写这篇博客。因为面试有提到这个,我当时直接说不懂(一方面当时心态很差,另一方面面试官的询问方式令我很反感。所以直接refuse了。小伙伴们千万别学我)。

所以,打算谈一谈我对Java高性能编程方面的认识与总结。

首先,高性能编程不涉及架构层次。所以打算通过这篇文章,来了解架构提升系统性能的小伙伴要失望了。我将Java高性能编程主要分为编码与网络两个部分(说白了,只关注编码,不提其它)。

其次,我们需要了解何为高性能。性能往往与系统的吞吐量,响应时间,并发量等息息相关。只有了解到这点,我们才可以对症下药。

网络部分:BIO,NIO,Netty等,这部分在之前的《从BIO到Netty的演变》有所提及,这里不再赘述。

而编码部分,也是最多人关注的部分。我将它按层次分为:

数据结构(如String,StringBuffer,StringBuilder)
语言特性(如for循环的JIT优化,并行流等)
算法(如分治算法,贪心算法等)
设计模式(如原型模式)
多线程(包括线程池,锁等)
扩展-特定机制(其实就是一些成熟的方案)
并发容器被归类到多线程中,而Fork/Join框架被归类到特定机制(当然,也可以归类到算法,多线程等。取决于看待它的角度)。

由于这其中每个分支,拆分出来都是很大的一块内容。所以这篇文章的目标只是给个方向而已,不会写得非常深入。

一,数据结构
这里的数据结构指的是,类中属性的数据类型,可以是Java自带的数据类型,也可以是自定义的数据类型。

那么数据结构是如何影响性能的呢?这可以从我之前提到的高性能编码的六个层次去分析。这里不在展开,否则就是无限地递归分析了。

说得再多,不如举一些例子(好吧,其实这边的总结,我感觉不够好。划分的维度,我自己不满意而已)。

1.Integer与int:
比如Integer与int,在大量数据处理时,内部结构最好采用int类型,从而避免基本数据类型装箱拆箱带来的性能损耗。而这一点在《阿里开发手册》中也有提及,所以在不知道怎么做时,跟着规范走,也不失为一种选择。

PS:记得当时,我回答面试官高性能编程问题时,就是从《阿里开发手册》规范谈起。然后面试官打断说,我不是问你规范,我就问你怎么高性能编程。当时心态本来就不好,我想引经据典,都不让我说。所以我直接一句,我不懂。不过不推荐大家学我,该回答还是要回答滴。

2.String,StringBuffer,StringBuilder:
比如String,StringBuffer,StringBuilder(这三个应该鼎鼎有名了)。

其中最常用的时String,其底层实现是一种常量字符串(也就是不可变字符串)。其底层就是final修饰的,所谓的String更新,其实是返回了一个新的字符串。由于是常量,所以也就没有什么线程安全问题了,故线程安全。

其次就是我目前用得最多的,就是StringBuiilder,其内部是维持一个可变长度的char[]。字符串更新,也是采用底层的native方法,所以效率非常高,是三个字符串类型中效率最高的。但没有做线程安全处理,所以线程不安全。

最后就是在一些高并发框架,中间件底层中常看到的StringBuffer,其内部基本与StringBuilder类似。不过不同的是其中多数方法采用了Synchronized修饰,作为线程安全的处理,所以线程安全。

所以,就有了以下的使用场景:

String:针对于字符串几乎没有变动的操作,在字符串变动方面操作是三个中最慢的(除非两个产生扩容)。但固定字符串方面,确实是调用最快,占用空间最少的。
StringBuilder:在单线程下,存在字符串变动的情况下,速度最快。
StringBuffer:在多线程下,存在字符串变动的情况下,速度最快。
如果表示上面的记不住。那就这样记:微量使用,用String;单线程最快,是StringBuilder;多线程安全,是StringBuffer。

其实数据结构,还有NIO的ByteBuffer,Netty的ByteBuf等,可以聊。不过这里不再赘述。

二,语言特性:
这里的语言特点,指的是Java语言的一些高级特性(我也不知道算不算高级,不过确实有不少人不清楚,所以就这样写吧)。

那么语言特性是如何影响性能的呢?其实,其中涉及到语言的底层实现(这个实现,其实也可以按照六个层次分析)。

继续举例子。

1.for循环JIT优化:
这个部分,涉及JVM的JIT编译。简单说一下,JIT是一种即时编译手段。Java代码一般采用解释,但在遇到重复执行代码块等,会进行编译,从而提升速度。其中又涉及到无数人深恶痛绝的三大重排序(编译器,指令,内存)之一-JIT重排序。

扯远了,收回来。那么for循环中的循环体,当然属于重复执行的代码块喽。所以for循环会被JIT优化,提升运行速度。所以在有些场景下,别觉得for循环很low,觉得迭代器(了解迭代器模式,应该知道迭代器模式本身,不存在循环体这样的代码块),Stream看着高级。在所有场景下,for循环效率高于迭代器,在多数场景下,for循环效率高于Stream。

当然,由于性能并不是系统的唯一质量属性,所以站在扩展性等方面,我们也需要对iterator等正确看待。没有最好的技术,只有更合适的技术。

2.Stream:
Stream作为Java8新引入的特性,不少人对它了解甚少。看到别人处理集合的Stream代码,简直看得口水都下来了,想着自己什么时候才能写出这样优雅的代码。

遥想当初,我也是看着大佬处理订单集合的代码,流口水,果断去学习这个,然后。。。扯远了,拉回来。

前面已经提到了,在多数场景下for循环的效率高于Stream。只不过for采用的是外部迭代,而Stream采用的是内部迭代。但是Stream和迭代器一样,没有类似循环体的代码块,所以没有这方面的JIT优化。所以在正常应用场景下,两者存在一定的差距(数据量大了后,两者的差距也在10%之内)。

但是,Stream有一个方法-parallel()。这个方法就厉害了,它是一个并行流。说白了,就是多线程处理当前流,通过多线程方法,将当前流拆分为多个流,来并行处理。

是不是感觉追根揭底,还是能归类到之前提到的六个层次中。

既然并行流效率这么高,为什么还用for循环呢?

因为并行流有着诸多限制。首先它内部是采用了多线程的处理手段,所以多线程的约束它都有(如CPU核心数带来的限制等)。其次它对流的处理必须是可以并行的,如过滤,转变,提交等。但是如排序,findFirst这样需要整个流的操作,就无法实现(或者说无法获得正确结果),或者实现效率极低。

所以,在一些可以并行操作的情况下,并且数据量较大,那么推荐使用并行流处理。优雅而高效。

3.迭代器:
这里提一下迭代器,否则大家就抛弃这个了。

迭代器的好处:自定义迭代逻辑,无返回函数的集合处理等。

其实迭代器,我用得并不多,一方面是一开始看到有前辈这样写,所以学习了一下这种写法。不过后来大多用for,以及Stream了。另一方面,就是面试问到如何通过无返回方法,修改集合元素。我当时只想到了Java方法参数不是引用传递这个点,解决还整没想到。面试官后来告诉我,可以通过迭代器实现。囧

三,算法:
算法这部分内容就海了去了。而且以我现在的算法积累,感觉并不能很好地解释这个问题。所以简单举些例子吧,以后有机会,再深入阐述算法(等我深入学习后,计划在明后年深入)。

比如排序算法,这也算是算法实现比较多的。感兴趣的,可以看我在博客园C语言算法部分总结的八大排序算法。

1.红黑树:
面试集合必问的HashMap与ConcurrentHashMap按不同版本(Java8及Java8以前)可以分为四个。其中不同版本之间最大的区别就是Java8之后,两者底层增加了红黑树(再单个链表达到阈值后,就会树化)。

那为什么红黑树可以提高性能呢?

在原本的HashMap(以HashMap为代表)中,最初数据操作的时间复杂度平均为O(logn)。但是存在数据集中于数组特定位置的情况(HashMap底层数据结构是数组+链表,链表作为数组的元素),最糟糕情况就是数据集中在数组一个下标下,即所有元素在同一个链表。那么链表的数据操作的时间复杂度就变成了O(n)。

为了避免这一情况,新版本的HashMap增加了红黑树。在单个链表的数据量达到阈值后,则会将链表转为红黑树,从而确保在数据多的时候(即n较大时),时间复杂度依旧为O(logn)。

时间复杂度降低了,说明CPU占用时间降低了,即性能提升了。

2.分治算法:
分治算法作为一种及其重要的算法思想,可以说程序中很多地方都体现了这点。甚至有人总结分布式系统的高并发就是限流(非侠义的限流,保护下游服务)与分流(提高吞吐量),而分流也是分治思想的一种体现。

那为什么分治算法可以提高性能呢?其实分治算法也是一种空间换时间的体现。更深入的阐述,其实就是均衡。

这里简单阐述一下我对均衡的认识。早在架构相关的博客中,我就提到,架构设计就是一个权衡的过程。提高性能,可能就需要降低安全性。提高系统扩展性,可能就会带来系统复杂度的提升。这点可用于各个层次,包括设计模式也是这样的。以后有机会深入阐述这种思想。

举一个分治算法的体现例子。如Fork/Join框架,通过对现有任务的拆分,分开进行计算,最终汇总。其实本质所需要的算力并没有改变,但是可以充分利用多线程,或者CPU多核的特性(其实还涉及CPU资源的竞争,不再深入)。

再举一个分治算法的体现例子,正好也是我在阿里面试时遇到的一个问题,如何实现淘宝双十一交易额的实时统计(延迟不得高于1s)。我的实现思路,就是一方面利用Redis内存数据库的高速特性(单台Redis实例正常每秒都可以有几十万的读写)。另一方面就是利用分治算法,将统计任务进行拆分。

这里说一下我的思路吧。首先排除大数据,因为我不熟悉大数据,而且我面试的也不是大数据,最重要的是大数据底层也需要实现(不能面试时,就扔个名词)。其次通过redis来提供一个分布式系统的存储(分布式系统的存储无非缓存,数据库,文件系统,消息队列算半个吧)。这个时候,需要思考的是,虽然redsi可以提供足够的读写,但是在数据处理时,程序为了确保数据不被别的程序修改,一定需要加分布式锁。那么时间消耗就体现在了这里。参照ConcurrentHash分段锁,及其体现的分治算法。可以将交易额按照业务,地域,或者单纯的数字拆分为多个字段(如1000g个),然后分别计算,最后通过一个服务,按照交易额刷新时间进行统计(这里统计还可以使用fork/join框架)。当然,这并不是一个完整的程序,其中还有许多的细节,如动态管理等。但是这样的思路是可行的。

对算法感兴趣的,可以看看相关算法书籍,刷刷leetcode等。

四,设计模式
设计模式部分,就是利用设计模式的特点,来达成提高程序性能的目的。

其实设计模式本身是面向对象设计原则(单一职责原则,里氏替换原则,开闭原则,依赖倒置原则,接口隔离原则,组合复用原则,迪米特原则)的落实,而这七大原则并没有性能方面的要求。所以大部分设计模式并没有性能提升的能力。但是部分设计模式由于其特定机制,以及语言特性,有了性能方面的提升。

1.单例模式
单例模式,由于其构造方法私有,所以无法通过构造器新建。这点透出其本质,单例模式保证了一个类只有一个实例,该实例只需要创建一次,并不会销毁。

这里简单说一下,由于是单例,所以线程安全。另外Spring的bean默认是单例的。某些情况下,可能需要通过注解,实现多例,此时就需要注意线程安全问题了。

由于单例的延迟加载,以及实例只创建一次,不会销毁的特性。在某些对象重复使用的情况下,会带来性能的提升。甚至在某些情况下,可能需要建立容器单例(一个容器,管理多个单例,如Spring)。

2.原型模式
原型模式,就是指定目标对象类型,通过拷贝来生成对象,而不需要调用构造器。而通过对象拷贝生成对象的效率远高于构造器生成对象。

所以需要大量相同对象时,可以通过原型模式,来实现相同对象的高效生成。

但是,这里提醒一下,原型模式需要注意复杂对象的拷贝问题。复杂对象的拷贝容易产生问题,这其中设计浅拷贝与深拷贝问题。感兴趣的朋友,可以查阅相关资料。

3.享元模式
享元模式,通过减少对象数量,从而改善应用所需的对象结构。既然减少了对象的创建,那么也就减少了内存中对象数量,从而降低了系统内存占用与对象创建的资源消耗。

所以需要大量类似对象时,如缓存池等,可以采用享元模式,来提高系统性能。

享元模式,貌似在系统底层应用得比较多。

以上,通过三个设计模式,简单阐述了设计模式带来的编程性能。更多的应用,需要各位朋友自行探讨。

五,多线程
这个部分,应该是多数人在高性能编程时优先考虑到的点。也是诸多面试的重点,所以这里我就简单说一下。

多线程是如何提高编程性能的呢?这其中有多种原因。

有的是由于单个线程的操作存在资源阻塞的情况(如数据库请求,等待数据库响应)
有的是为了充分利用多核CPU的多核特性(如Nginx的worker默认是auto,也就是系统CPU核心数)
其实还有一种比较难以理解,是为了平滑CPU计算(如大当量的计算任务进行拆分等,具体后面会阐述)
这里还有一点,需要进行说明。那就是线程数量的增加,带来了局部程序的性能提升,但其实降低了系统整体性能。因为每个线程都有竞争CPU时间片的资格。在达到一定的总线数量后,某个程序的线程数增加,只是增加了其获得CPU时间片的时间。而整体CPU时间是固定的,也就是系统整体性能并没有带来提升,并且系统整体性能反而因为线程的上下文切换等原因,降低了性能。当然这个总线程数量的“一定”是不好把握的。并且在某些情况下,多个线程会带来一定的平滑效果。

为了更好的说明,下面举一些例子。

1.资源阻塞:
这个应该是一个比较好理解的例子。

正如之前提到的数据库的例子。单个服务所需总时间为1s,其中数据库资源访问花了0.9s,程序运行花费0.1s。如果是单线程,这个服务的吞吐量就只有1/s。那如果采用多个线程,并且线程数量设置为10,那么该服务的吞吐量就有10/s。甚至在数据库等条件允许的情况下,这个服务的吞吐量可以无限大,只要线程数量足够(当然实际是不可能的,总会有新的性能瓶颈出来的)。

这个应用,请大家牢牢记住,因为这是一个非常常用的应用。

2.CPU核心数
大家都知道,一个线程会竞争一个CPU。而如今很多服务器都是多核的。那么为了充分利用服务器的多核特性,面对计算密集型任务,我们往往将其线程数量设置为CPU核心数。

举个例子,八核服务器上有这么一个服务,需要进行挖矿计算(其采用POW算法,是非常消耗算力的)。如果单线程的话,那就是传说中的“一核有难,七核围观”(一个CPU核心疯狂工作,其余七个CPU核心基本空闲)。那么算力的产出就只有1。那么如果是多线程,并且设置线程数为8,那么服务器八个核心都会疯狂工作。算力的产出有8。如果采用多线程,并且线程数为9(大于8)。那么就是服务器八个核心疯狂工作,8个线程在执行,还有1个线程在疯狂插队。从而导致服务器八个CPU核心,是不是还得停下来,切换上下文,从而换一个线程执行。最终算力产出低于8。

这种情况下,一定要考虑上下文切换的资源消耗。另一方面,一定要清楚总体算力,算力有多少是真正应用到目标程序中,最终算力产出是多少。

3.平滑CPU计算
这个比较难以理解,也基本看不到人提及,实际应用价值也不大(一般用不到)。而且没有在实际应用中,真的应用,只能说从理论方面探寻。

之前提到的上下文切换,说白了就是CPU将数据从内存中读取到CPU中,再将之前线程的数据保存到内存中。

那么如果服务执行的数据量很大呢?

单线程情况下,一方面上下文切换时数据量较大(可以将上下文理解为程序快照),另一方面由于高速缓存无法承载如此大的数据量,就会频繁与内存发生数据交互(这涉及内存管理,这里不再赘述,详见软考-架构师系列博客)。

多线程情况下,一方面上下文切换时数据量较小(但是总体不变,甚至更大,但是合理的程序设计,有可能上下文切换占用内存更低),另一方面,避免了高速缓存无法承载过多数据的问题。

多线程提高性能的情况,多数可以归于上述三类(或者说前两类吧)。有不同看法,或者有无法归类上述类型的,欢迎提出,共同进步。

六,特定机制
特定机制,就类似于一些取巧的方法,大多是采用系统资源交换来实现(如空间换时间等)。

常见的有:

Fork/Join框架
CopyOnWriteArray
Netty的零拷贝

1.Fork/Join框架
这个框架已经在前面的算法部分提及,这里只是站在机制角度多说两句。

一方面,多数的机制,也都可以按照高性能六个层次来分,只不过成为了较为成熟的方案而已。另一方面,多数机制都是采用分治,资源交换等来实现的。

2.CopyOnWriteArry
这是JDK中的一个数组,用于针对读多写少的场景。

最早,解决数组数据的读写问题,我们都是单线程操作,除了效率低,没什么问题。

然后,为了提高性能,我们采用了多线程,而线程不安全的数组会给我们带来线程安全问题。

紧接着,为了解决线程安全问题,最早采用简单的独占锁来解决这个问题。

后来,人们发现读的操作并不会带来线程安全问题(因为没有数据修改,等同于操作常量)。所以人们采用读写锁来解决线程安全问题(读写锁,即同时只能一个写操作,但可以有多个读操作。这里可以复习一下锁降级概念)。

最后,人们给出了更好的解决方案-CopyOnWriteArry。同时有两个数组,一个进行读操作,一个进行写操作。但是就像JVM运行时数据区中的Survive区一样,在一个写操作完成后,写数组与数组就进行切换(这个切换,只需要修改数组的指向Reference即可)。这样就保证了最高效的读操作。这和数据库的读写分离有着异曲同工之妙(只不过,一般不直接进行切换而已)。

通过,双倍的内存空间消耗,换来了读操作的大幅提升,即程序性能提升。

3.Netty的零拷贝:
Netty的零拷贝机制,来源于Netty的ByteBuf。而ByteBuf有着诸多优点,这里不再赘述,感兴趣的可以等待我的Netty源码分析的博客。

这里只简单说一下其中的零拷贝机制。

Netty的零拷贝机制,体现在两点。第一个是多个实际数据的虚拟逻辑组合。另一个是避免数据在内存中的用户空间与内核空间之间的拷贝。

前者就是通过CompositeByteBuf,将多个ByteBuf合并为一个** 逻辑** 上的ByteBuf,避免了各个ByteBuf之间的拷贝。举个栗子,现有数组A与数组B,你需要两个数组的合并数组C。正常就是生成一个新的数组,将两者copy过来。而零拷贝,则是数组C中包含数组A和数组B的指向。

后者则涉及内存的用户空间与内核空间的知识,这里不再解释两者,感兴趣的可以查看我早期Windows内核编程的相关部分。而ByteBuf的零拷贝用到了Java的FileChannel.transferTo方法,直接将文件缓冲区的数据,直接发送到目标Channel(网卡接口Buffer)。

ByteBuf对直接内存的使用,算是一种支撑。但是其独立出来,我认为并不能体现零拷贝特性。

当然,零拷贝的应用还有很多,包括Kafka等,也有相关应用。

七,总结
最终,我想说的是,高性能,其实也和架构设计一样,伴随着均衡,即有得有失。只不过有些东西,在系统的目标中权重并不高,或者说并没有那么高的要求而已。我们要做的是找到性能的瓶颈,去处理它。
峰创时代www.kinghill.cn

chenmh12
发布了1 篇原创文章 · 获赞 48 · 访问量 5万+
私信关注
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 测试发布一个文章

    撤销:Ctrl/Command + Z 重做:Ctrl/Command + Y 加粗:Ctrl/Command + B 斜体:Ctrl/Command + I 标题:Ctrl/Command + Shift + H 无序列表:Ctrl/Command + Shift + U 有序列表:Ctrl/Command + Shift + O 检查列表:Ctrl/Command + Shift + C 插入代码:Ctrl/Command + Shi…...

    2024/3/19 8:53:40
  2. cocos creator实例--CocosCreator实现左右跳游戏

    1玩法说明游戏开始后,点击屏幕左右两侧,机器人朝左上方或右上方跳一步,如果下一步有石块,成功得1分,否则游戏结束。2模块介绍游戏场景分为2个:主页场景(home)、游戏场景(game)。主页场景(home)作为游戏入口,没有其他功能,单纯提供游戏入口。游戏场景(game)实现…...

    2024/3/26 16:04:44
  3. SpringCloud分布式微服务云架构 第八篇: 消息总线(Spring Cloud Bus)(Finchley版本)

    Spring Cloud Bus 将分布式的节点用轻量的消息代理连接起来。它可以用于广播配置文件的更改或者服务之间的通讯,也可以用于监控。本文要讲述的是用Spring Cloud Bus实现通知微服务架构的配置文件的更改。 一、准备工作 本文还是基于上一篇文章来实现。按照官方文档,我们只需要…...

    2024/3/25 15:54:32
  4. 嵌入式Linux系统:基础知识_虚拟内存与物理内存

    在很久以前,还没有虚拟内存概念的时候,程序寻址用的都是物理地址。程序能寻址的范围是有限的,这取决于CPU的地址线条数。比如在32位平台下,寻址的范围是2^32也就是4G。并且这是固定的,如果没有虚拟内存,且每次开启一个进程都给4G的物理内存,就可能会出现很多问题:物理内…...

    2024/3/19 8:53:34
  5. EMC测试不合格,应该这样整改

    EMC主要是通过测试产品在电磁方面的干扰大小和抗干扰能力的综合评定,是产品在质量安全认证重要的指标之一。很多产品在做产品安全认证时都会遇到产品测试不合格的情况,尤其是在电磁兼容测试(即EMC测试)出错频率更是普遍。当产品一旦测试不合格,那么随之而来的肯定是EMC整改…...

    2024/3/25 18:11:26
  6. 安装APK报错解决方法

    adb install xxx.apk 报错,安装APK报错:INSTALL_FAILED_SHARED_USER_INCOMPATIBLE、INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES 、INSTALL_FAILED_ALREADY_EXISTS1. 安装APK报错:Failure [INSTALL_FAILED_SHARED_USER_INCOMPATIBLE],表示APK需要没有签名或者签名不符合…...

    2024/3/22 15:06:45
  7. 关于Spring事物的面试题

    数据库事务和Spring事务是一般面试都会被提到,很多朋友写惯了代码,很少花时间去整理归纳这些东西,结果本来会的东西,居然吞吞吐吐答不上来。 下面是我收集到一些关于Spring事务的问题,希望能帮助大家过关。 事务是逻辑处理原子性的保证手段,通过使用事务控制,可以极大的…...

    2024/3/19 8:53:29
  8. 比postman 更好用的神器 ----- IntelliJ IDEA 自带的高能神器!

    接口调试是每个软件开发从业者必不可少的一项技能,一个项目的的完成,可能接口测试调试的时间比真正开发写代码的时间还要多,几乎是每个开发的日常工作项。所谓工欲善其事必先利其器,在没有尝到IDEA REST真香之前,postman(chrome的一款插件)确实是一个非常不错的选择,具…...

    2024/3/19 15:43:11
  9. js之大文件分段上传、断点续传

    文件夹上传:从前端到后端文件上传是 Web 开发肯定会碰到的问题,而文件夹上传则更加难缠。网上关于文件夹上传的资料多集中在前端,缺少对于后端的关注,然后讲某个后端框架文件上传的文章又不会涉及文件夹。今天研究了一下这个问题,在此记录。先说两个问题:是否所有后端框架…...

    2024/3/24 9:11:32
  10. ack

    参考点赞收藏分享文章举报扣剑书生发布了254 篇原创文章 获赞 8 访问量 2219私信关注...

    2024/3/19 8:53:22
  11. Mysql触发器

    Mysql中的触发器什么是触发器 简单的说,就是一张表发生了某件事(插入、删除、更新操作),然后自动触发了预先编写好的若干条SQL语句的执行; 特点及作用特点:触发事件的操作和触发器里的SQL语句是一个事务操作,具有原子性,要么全部执行,要么都不执行; 作用:保证数据的完…...

    2024/3/19 19:31:09
  12. oracle 查看被锁表以及解锁

    Oracle数据库操作中,我们有时会用到锁表查询以及解锁和kill进程等操作, 那么这些操作是怎么实现的呢?本文我们主要就介绍一下这部分内容。(1)锁表查询的代码有以下的形式: select count(*) from v$locked_object; select * from v$locked_object;(2)查看哪个表被锁 select …...

    2024/3/19 8:53:16
  13. LeetCode常用算法以及优化方法总结

    LeetCode算法常用算法优化方法cutrecordorderpattern欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定…...

    2024/3/27 8:47:00
  14. SQL语句大全

    一、基础 1、说明:创建数据库CREATE DATABASE database-name 2、说明:删除数据库drop database dbname3、说明:备份sql server— 创建 备份数据的 deviceUSE masterEXEC sp_addumpdevice ‘disk’, ‘testBack’, ‘c:mssql7backupMyNwind_1.dat’— 开始 备份BACKUP DATABA…...

    2024/3/24 9:42:01
  15. spring的IOC容器比New对象究竟好在哪

    作者:OneNoodle 链接:https://www.zhihu.com/question/23277575/answer/24259844 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 私以为以上各位都没有对spring ioc的精髓讲解到位。大多都在很模糊的说是什么,抽象化的表述或者含糊其辞…...

    2024/3/28 20:01:27
  16. 架构设计030 画图 实战五

    pass点赞收藏分享文章举报ailinyingai发布了296 篇原创文章 获赞 6 访问量 4万+他的留言板关注...

    2024/3/28 8:13:55
  17. Intent的用法(1)

    什么是Intent?Intent在Android中的核心作用就是“跳转”(Android中的跳转机制),同时可以携带必要的信息,将Intent作为一个信息桥梁。最熟悉的莫过于从一个活动跳转到另一个活动,然后返回到上一个活动。不过Intent的“跳转”作用不仅于此,Intent还可以在其他地方使用,比…...

    2024/3/19 8:53:10
  18. 全国路网数据SHP、全国矢量数据 行政区划边界(省市区县乡镇)、行政地名

    矢量数据、数据珍贵、谨慎下载同步视频教程:http://www.bigemap.com/video/play2018020621.html专题地图制作视频教程:http://www.bigemap.com/video/play201801172.html矢量测试数据下载: KML(KMZ)格式、DXF(DWG)格式、SHP格式:(请用BIGEMAP直接打开,可另存为SHP,DXF…...

    2024/3/27 16:23:13
  19. 单片机内部结构原理,让你豁然开朗

    一、单片机内部结构分析 我们来思考一个问题,当我们在编程器中把一条指令写进单片机内部,然后取下单片机,单片机就可以执行这条指令,那么这条指令一定保存在单片机的某个地方,并且这个地方在单片机掉电后依然可以保持这条指令不会丢失,这是个什么地方呢?这个地方就是单片…...

    2024/3/19 8:53:07
  20. 一文带你了解Spring Cloud的各个组件

    本文转载自:https://juejin.im/post/5de2553e5188256e885f4fa3写在前面的话马上要考试了!!!作为一个苦逼的在读大学生,又要面临半年一度的期末考试了,因为上课没听,我啥都不会,什么通信原理,单片机。。。饶了我吧!!!给你们看看我上课在干啥你就知道我为啥啥都不会了…...

    2024/3/28 17:49:45

最新文章

  1. 【虚幻引擎】DTWebSocketServer 蓝图创建WebSocket服务器插件使用说明

    本插件可以使用蓝图创建WebSocket服务器,并监听响应数据。 1. 节点说明 Create Web Socket Server – 创建WebSocket服务器对象并开启监听 创建一个WebSocket服务器对象,并监听相应端口,连接地址为 ws://IP:PORT, 比如ws://192.168.1.5:9001…...

    2024/3/28 23:22:16
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. ffmpeg重点之时间戳,PTS、DTS、time_base

    PTS和DTS和时间基time_base 首先我们知道PTS是一帧音频或视频显示的时间,DTS是解码时间戳 既然是时间,PST和DTS的单位是什么呢?秒还是毫秒,抑或是纳秒? 先说结论—都不是 先引入FFmpeg中时间基的概念,也就是time_bas…...

    2024/3/28 23:12:03
  4. 使用Qt自带windeployqt打包QML的exe

    1.在开始菜单输入CMD找到对应的Qt开发版本,我的是Qt5.15.2(MinGW 8.1.0 64-bit)。 2.在控制台输入如下字符串,格式为 windeployqt exe绝对路径 --qmldir 工程的绝对路径 如下是我的打包代码。 我需要打包的exe的绝对路径 D:\Prj\Code\Demo\QML\Ana…...

    2024/3/28 0:28:48
  5. 发车,易安联签约某新能源汽车领军品牌,为科技创新保驾护航

    近日,易安联成功签约某新能源汽车领军品牌,为其 数十万终端用户 建立一个全新的 安全、便捷、高效一体化的零信任终端安全办公平台。 随着新能源汽车行业的高速发展,战略布局的不断扩大,技术创新不断引领其市场价值走向高点&am…...

    2024/3/28 16:48:22
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/3/27 10:21:24
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/3/24 20:11:25
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/3/18 12:12:47
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/3/24 20:11:23
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/3/26 20:58:42
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/3/28 17:01:12
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/3/24 5:55:47
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/3/27 10:28:22
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/3/26 23:04:51
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/3/26 11:20:25
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/3/24 20:11:18
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/3/28 9:10:53
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/3/24 20:11:16
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/3/24 20:11:15
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/3/27 7:12:50
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/3/24 20:11:13
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/3/26 11:21:23
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/3/28 18:26:34
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/3/28 12:42:28
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/3/28 20:09:10
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57