第19章 大数据架构设计理论与实践


19.1 传统数据处理系统存在的问题

海量数据的,数据库过载,增加消息队列、甚至数据分区、读写分离、以及备份以及传统架构的性能的压榨式提升,都没有太明显的效果,帮助处理海量数据的新技术和新架构开发被提上日程。


19.2 大数据处理系统架构分析


19.2.1 大数据处理系统面临挑战

1.如何利用信息技术等手段处理非结构化和半结构化数据

结构化数据只占15??右,其余的85??是非结构化的数据,也许有90??数据来自开源数据,其余的 被存储在数据库中。

如果把通过数据挖掘提取“粗糙知识”的过程称为“一次挖掘”过程,那么将粗糙知识与被量化后主观知识,包括具体的经验、常识、本能、情境知识和用户偏好,相结合而产生“智能知识”过程就叫作“二次挖掘”。从“一次挖掘”到“二次挖掘”,就类似于事物由“量”到“质”的飞跃。
由于大数据所具有的半结构化和非结构化特点,基于大数据的数据挖掘所产生的结构化的“粗糙知识”(潜在模式)也伴有一些新的特征。这些结构化的粗糙知识可以被主观知识加工处理并转化,生成半结构化和非结构化的智能知识。寻求“智能知识”反映了大数据研究的核心价值。

2.如何探索大数据复杂性、不确定性特征描述的刻画方法及大数据的系统建模

这一问题的突破是实现大数据知识发现的前提和关键。大数据的复杂形式导致许多对“粗糙知识”的度量和评估相关的研究问题。已知的最优化、数据包络分析、期望理论、管理科学中的效用理论可以被应用到研究如何将主观知识融合到数据挖掘产生的粗糙知识的“二次挖掘”过程中。这里人机交互将起到至关重要的作用。

3.数据异构性与决策异构性的关系对大数据知识发现与管理决策的影响

"数据异构性” 和“决策异构性”。通过寻找“二次挖掘”产生的“智能知识”来作为数据异构性和决策异构性之间的桥梁是十分必要的。


19.2.2 大数据处理系统架构特征

1.鲁棒性和容错性(Robust and Fault-tolerant)

对于大规模的分布式系统来说,人和机器的错误每天都可能会发生,如何应对人和机器的错误,让系统能够从错误中快速恢复尤其重要。

2.低延迟读取和更新能力(Low Latency Reads and Updates)

许多应用程序要求数据系统拥有几毫秒到几百毫秒的低延迟读取和更新能力。有的应用程序允许几个小时的延迟更新,但是只要有低延迟读取与更新的需求,系统就应该在保证鲁棒性的前提下实现。

3.横向扩容(Scalable)

当数据量/负载增大时,可扩展性的系统通过增加更多的机器资源来维持性能。也就是常说的系统需要线性可扩展,通常采用scale out(通过增加机器的个数)而不是scale up(通过增强机器的性能)。

4.通用性(General)

系统需要支持绝大多数应用程序,包括金融领域、社交网络、电子商务数据分析等。

5.延展性(Extensible)

在新的功能需求出现时,系统需要能够将新功能添加到系统中。同时,系统的大规模迁移能力是设计者需要考虑的因素之一,这也是可延展性的体现。

6.即席查询能力(Allows Ad Hoc Queries)

用户在使用系统时,应当可以按照自己的要求进行即席查询(Ad Hoc)。这使用户可以通过系统多样化数据处理,产生更高的应用价值。

7.最少维护能力(Minimal Maintenance)

系统需要在大多数时间下保持平稳运行。使用机制简单的组件和算法让系统底层拥有低复杂度,是减少系统维护次数的重要途径。Marz认为大数据系统设计不能再基于传统架构的增量更新设计,要通过减少复杂性以减少发生错误的几率、避免繁重操作

8.可调试性(Debuggable)

系统在运行中产生的每一个值,需要有可用途径进行追踪,并且要能够明确这些值是如何产生的。


19.3 Lambda架构


19.3.1 Lambda架构对大数据处理系统的理解

Lambda架构由Storm的作者Nathan Marz提出,其设计目的在于提供一个能满足大数据系统关键特性的架构,包括高容错、低延迟、可扩展等。其整合离线计算与实时计算融合不可变性、读写分离和复杂性隔离等原则,可集成Hadoop、Kafka、Spark、Storm等各类大数据组件。
Lambda是用于同时处理离线和实时数据的,可容错的,可扩展的分布式系统
它具备强鲁棒性,提供低延迟和持续更新

19.3.2 Lambda架构应用场景

1.机器学习中的Lambda架构

在机器学习领域,数据量无疑是多多益善的。但是,对于机器学习应用算法、检测模式而言,它们需要以一种有意义的方式去接收数据。因此,机器学习可以受益于由Lambda架构构建的数据系统、所处理的各类数据。据此,机器学习算法可以提出各种问题,并逐渐对输入到系统中的数据进行模式识别。

2.物联网的Lambda架构

如果说机器学习利用的是Lambda架构的输出,那么物联网则更多地作为数据系统的输入。
设想一下,一个拥有数百万辆汽车的城市,每辆汽车都装有传感器,并能够发送有关天气、空气质量、交通状况、位置信息以及司机驾驶习惯等数据。这些海量数据流,会被实时馈入Lambda体系架构的批处理层和速度层,进行后续处理。可以说,物联网设备是适合作为大数据源的绝佳示例。

3.流处理和Lambda架构挑战

速度层也被称为“流处理层”。其目的是提供最新数据的低延迟实时视图。虽说,速度层仅关心自完成最后一组批处理视图以来导入的数据,但事实上它不会存储这些小部分的数据。这些数据在流入时就会被立即处理,且在完成后被立即丢弃。因此,我们可以认为这些数据是尚未被批处理视图所计入的数据。
Lambda体系架构在其原始理论中,提到了最终精度(eventual accuracy)的概念。它是指:
批处理层更关注精确计算,而速度层则关注近似计算。此类近似计算最终将由下一组视图所取
代,以便系统向“最终精度”迈进。
在实际应用中,由于实时处理流以毫秒为单位,持续产生用于更新视图的数据流,是一个非常复杂的过程。因此,将基于文档的数据库、索引以及查询系统配合在一起使用,是一种比较好的选择。


19.3.3 Lambda架构介绍

如图19-4所示,Lambda架构可分解为三层,即批处理层、加速层和服务层

 
  • (1)批处理层(Batch Layer):存储数据集,Batch Layer在数据集上预先计算查询函数,并构建查询所对应的View。Batch Layer可以很好地处理离线数据,但有很多场景数据是不断实时生成且需要实时查询处理,对于这种情况,Speed Layer更为适合。
  • (2)加速层(Speed Layer):Batch Layer处理的是全体数据集,而Speed Layer处理的是最近的增量数据流。Speed Layer为了效率,在接收到新的数据后会不断更新Real-time View,而Batch Layer是根据全体离线数据集直接得到Batch View。
  • (3)服务层(Serving Layer):Serving Layer用于合并Batch View和Real-time View中的结果数据集到最终数据集。

1.批处理层

该层负责管理主数据集。Batch Layer有两个核心功能:存储数据集和生成Batch View。Batch Layer可以很好地处理离线数据。

主数据集中的数据必须具有以下三个属性:
(1)数据是原始的。
(2)数据是不可变的。
(3)数据永远是真实的。
monoid(定义:一个类型,具有二元操作(满足结合律),具有一个单位元元素)。Monoid特性的函数应用非常广泛,其一个重要特性是满足结合律。
Monoid的结合律特性在分布式计算中极其重要,满足Monoid特性意味着我们可以将计算分解到多台机器并行运算,然后再结合各自的部分运算结果得到最终结果。同时也意味着部分运算结果可以储存下来被别的运算共享利用(如果该运算也包含相同的部分子运算),从而减少重复运算的工作量。图19-5展示了Monoid特性。

如果预先在数据集上计算并保存查询函数的结果,查询的时候就可以直接返回结果(或通过简单的加工运算就可得到结果)而无需重新进行完整费时的计算了。 这里可以把Batch Layer看成是一个数据预处理的过程,如图19-6所示。我们把针对查询预先计算并保存的结果称为View,View是Lamba架构的一个核心概念,它是针对查询的优化,通过View即可以快速得到查询结果。
Batch Layer需要做的一件重要的工作就是根据业务的需求,考察可能需要的各种查询,根据查询定义其在数据集上对应的Views。
2.加速层
对加速层批处理视图建立索引,便于能快速进行即席查询(Ad Hoc Queries)。它存储实时视图并处理传入的数据流,以便更新这些视图。
Batch Layer可以很好地处理离线数据,但有很多场景数据不断实时生成,并且需要实时查询处理。Speed Layer正是用来处理增量的实时数据
Speed Layer和Batch Layer比较类似。如图19-7所示,Speed Layer对数据进行计算并生成 Realtime View,其主要区别在于:
(1)Speed Layer处理的数据是最近的增量数据流Batch Layer处理的全体数据集
(2)Speed Layer为了效率,接收到新数据时不断更新Realtime View,而Batch Layer根据全体离线数据集直接得到Batch View
Lambda架构将数据处理分解为Batch Layer和Speed Layer有如下优点:
●容错性。Speed Layer中处理的数据也不断写入Batch Layer,当Batch Layer中重新计算的数据集包含Speed Layer处理的数据集后,当前的Real-time View就可以丢弃,这也就意味着Speed Layer处理中引入的错误,在Batch Layer重新计算时都可以得到修正。这一点也可以看成是CAP理论中的最终一致性(Eventual Consistency)的体现。
●复杂性隔离。Batch Layer处理的是离线数据,可以很好地掌控。Speed Layer采用增量算法处理实时数据,复杂性比Batch Layer要高很多。通过分开Batch Layer和Speed Layer,把复杂性隔离到Speed Layer,可以很好地提高整个系统的鲁棒性和可靠性。
● Scalable(横向扩容):当数据量/负载增大时,可扩展性的系统通过增加更多的机器资源来维持性能。也就是常说的系统需要线性可扩展,通常采用scale out(通过增加机器的个数)而不是scaleup(通过增强机器的性能)。

CAP理论,指的是在一个分布式系统中,Consistency(一致性)、Availability(可用性)、Partition Tolerance(分区容错性),不能同时成立.

3.服务层
Lambda架构的Serving Layer用于响应用户的查询请求,合并Batch View和Real-time View中的结果数据集到最终的数据集。该层提供了主数据集上执行的计算结果的低延迟访问。读取速度可以通过数据附加的索引来加速。与加速层类似,该层也必须满足以下要求,例如随机读 取,批量写入,可伸缩性和容错能力。
这涉及数据如何合并的问题。前面我们讨论了查询函数的Monoid性质,如果查询函数满足Monoid性质,即满足结合率,只需要简单地合并Batch View和Real-time View中的结果数据集即可。否则,可以把查询函数转换成多个满足Monoid性质的查询函数的运算, 单独对每个满足Monoid性质的查询函数进行Batch View和Real-time View中的结果数据集合并,然后再计算得到最终的结果数据集。另外也可以根据业务自身的特性,运用业务自身的规则来对Batch View和Real-time View中的结果数据集合并,如图19-8所示。


19.3.4 Lambda架构的实现

如图19-9所示,在这种Lambda架构实现中,Hadoop(HDFS)用于存储主数据集,Spark(或Storm)可构成速度层(Speed Layer),HBase(或Cassandra)作为服务层,由Hive创建可查询的视图。
Hadoop是被设计成适合运行在通用硬件上的分布式文件系统(Distributed File System)。它和现有的分布式文件系统有很多共同点。但同时,它和其他分布式文件系统的区别也很明显。HDFS是一个具有高度容错性的系统,能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS放宽了一些约束,以达到流式读取文件系统数据的目的。
 
Apache Spark是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP lab所开源的类Hadoop Map Reduce的通用并行处理框架,Spark拥有Hadoop Map Reduce所具有的优点;但不同于Map Reduce的是——Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的Map Reduce算法。
HBase-Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。


19.3.5 Lambda架构优缺点

1.优点

(1)容错性好。Lambda架构为大数据系统提供了更友好的容错能力,一旦发生错误,我们可以修复算法或从头开始重新计算视图。
(2)查询灵活度高。批处理层允许针对任何数据进行临时查询。
(3)易伸缩。所有的批处理层、加速层和服务层都很容易扩展。因为它们都是完全分布式的系统,我们可以通过增加新机器来轻松地扩大规模。
(4)易扩展。添加视图是容易的,只是给主数据集添加几个新的函数。

2.缺点

(1)全场景覆盖带来的编码开销。
(2)针对具体场景重新离线训练一遍益处不大。
(3)重新部署和迁移成本很高。

19.3.6 Lambda与其他架构模式对比

Lambda架构的诞生离不开很多现有设计思想和架构的铺垫,如事件溯源(Event Sourcing)
架构和命令查询分离(Command Query Responsibility Segregation,CQRS)架构,Lambda架构
的设计思想和这两者有一定程度的相似。

1.事件溯源(Event Sourcing)与Lambda架构

Event Sourcing架构模式由Thought Works的首席科学家Martin Flower提出。Event Sourcing本质上是一种数据持久化的方式,其由三个核心观点构成:
  • (1)整个系统以事件为驱动,所有业务都由事件驱动来完成。
  • (2)事件是核心,系统的数据以事件为基础,事件要保存在某种存储上。
  • (3)业务数据只是一些由事件产生的视图,不一定要保存到数据库中。
Lambda架构中数据集的存储使用的概念与Event Sourcing中的思想完全一致,二者都是在使用统一的数据模型对数据处理事件本身进行定义。这样在发生错误的时候,能够通过模型找到错误发生的原因,对这一事件进行重新计算以丢弃错误信息,恢复到系统应该的正确状态,以此实现了系统的容错性。

2.CQRS与Lambda架构

CQRS架构分离了对于数据进行的读操作(查询)和写(修改)操作。其将能够改变数据模型状态的命令和对于模型状态的查询操作实现了分离。这是领域驱动设计(Domain-Driven Design,DDD)的一个架构模式,主要用来解决数据库报表的输出处理方式
Lambda架构中,数据的修改通过批处理和流处理实现,通过写操作将数据转换成查询时所对应的View。在Lambda架构中,对数据进行查询时,实际上是通过读取View直接得到结果, 读出所需的内容。这实际上是一种形式的读写分离
进行读写分离设计的原因是,读操作实际上比写操作要省时得多,如果将读和写操作放在一起,实际处理大量数据时会因为写操作的时长问题影响整体业务的处理效率。在大数据系统中经常处理海量数据,进行读写分离重要性不言而喻。

19.4 Kappa架构

19.4.1 Kappa架构下对大数据处理系统的理解

为了设计出能满足前述的大数据关键特性的系统,我们需要对数据系统有本质性的理解。
我们可将数据系统简单理解为: 数据系统=数据+查询
进而从数据和查询两方面来认识大数据系统的本质。

1.数据的特性

我们先从数据的特性谈起。数据是一个不可分割的单位,数据有两个关键的性质:When和What。
(1)When。
When是指数据是与时间相关的,数据一定是在某个时间点产生的。
数据的时间性质决定了数据的全局发生先后,也就决定了数据的结果。
(2)What。
hat是指数据的本身。由于数据跟某个时间点相关,所以数据的本身是不可变的(Immutable),过往的数据已经成为事实(Fact),你不可能回到过去的某个时间点去改变数据事实。这也就意味着对数据的操作其实只有两种:读取已存在的数据和添加更多的新数据。采用数据库的记法,CRUD就变成了CR,Update和Delete本质上其实是新产生的数据信息,用C来记录。

2.数据的存储

根据上述对数据本质特性的分析,Lamba架构中对数据的存储采用的方式是:数据不可变,存储所有数据。
通过采用不可变方式存储所有的数据,可以有如下好处:
(1)简单。
(2)应对人为和机器的错误。


19.4.2 Kappa架构介绍

Kappa架构由Jay Kreps提出,不同于Lambda同时计算流计算和批计算并合并视图,Kappa只会通过流计算一条的数据链路计算并产生视图。Kappa同样采用了重新处理事件的原则,对于历史数据分析类的需求,Kappa要求数据的长期存储能够以有序日志流的方式重新流入流计算引擎,重新产生历史数据的视图。本质上是通过改进Lambda架构中的Speed Layer,使它既能够进行实时数据处理,同时也有能力在业务逻辑更新的情况下重新处理以前处理过的历史数据。
Kappa架构的原理就是
在Lambda的基础上进行了优化,删除了Batch Layer的架构,将数据通道以消息队列进行替代。因此对于Kappa架构来说,依旧以流处理为主,但是数据却在数据湖层面进行了存储,当需要进行离线分析或者再次计算的时候,则将数据湖的数据再次经过消息队列重播一次则可。
Kappa数据处理架构如图19-10所示。
如图19-10所示,输入数据直接由实时层的实时数据处理引擎对源源不断的源数据进行处理,再由服务层的服务后端进一步处理以提供上层的业务查询。而中间结果的数据都是需要存储的,这些数据包括历史数据与结果数据,统一存储在存储介质中。
Kappa方案的优缺点:
Kappa方案通过精简链路解决了数据写入和计算逻辑复杂的问题,但它依然没有解决存储和展示的问题,特别是在存储上,使用类似Kafka的消息队列存储长期日志数据,数据无法压缩,存储成本很大,绕过方案是使用支持数据分层存储的消息系统(如Pulsar,支持将历史消 息存储到云上存储系统),但是分层存储的历史日志数据仅能用于Kappa backfil作业,数据的 利用率依然很低。
从使用场景上来看,Kappa架构与Lambda相比,主要有两点区别:
(1)Kappa不是Lambda的替代架构,而是其简化版本,Kappa放弃了对批处理的支持,更擅长业务本身为增量数据写入场景的分析需求,例如各种时序数据场景,天然存在时间窗口的概念,流式计算直接满足其实时计算和历史补偿任务需求;
(2)Lambda直接支持批处理,因此更适合对历史数据分析查询的场景,比如数据分析师需要按任意条件组合对历史数据进行探索性的分析,并且有一定的实时性需求,期望尽快得到分析结果,批处理可以更直接高效地满足这些需求。


19.4.3 Kappa架构的实现


19.4.4 Kappa架构的优缺点

Kappa架构的优点:
在于将实时和离线代码统一起来,方便维护而且统一了数据口径的问题,避免了Lambda架构中与离线数据合并的问题,查询历史数据的时候只需要重放存储的历史数据即可。
Kappa的缺点也很明显:
(1)消息中间件缓存的数据量和回溯数据有性能瓶颈。通常算法需要过去180天的数据,如果都存在消息中间件,无疑有非常大的压力。同时,一次性回溯订正180天级别的数据,对实时计算的资源消耗也非常大。
(2)在实时数据处理时,遇到大量不同的实时流进行关联时,非常依赖实时计算系统的能力,很可能因为数据流先后顺序问题,导致数据丢失。
(3)Kappa在抛弃了离线数据处理模块的时候,同时抛弃了离线计算更加稳定可靠的特点。
Lambda虽然保证了离线计算的稳定性,但双系统的维护成本高且两套代码带来后期运维困难。
补充:
对于以上Kappa框架存在的几个问题,目前也存在一些解决方案,对于消息队列缓存数据性能的问题,Kappa+框架提出使用HDFS来存储中间数据。针对Kappa框架展示层能力不足的问题,也有人提出了混合分析系统的解决方案。

19.4.5 常见Kappa架构变形

1.Kappa+架构

2.混合分析系统的Kappa架构


19.5 Lambda架构与Kappa架构的对比和设计选择


19.5.1 Lambda架构与Kappa架构的特性对比


19.5.2 Lambda架构与Kappa架构的设计选择

1.业务需求与技术要求
2.复杂度
3.开发维护成本
4.历史数据处理能力


19.6 大数据架构设计案例分析


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/729259.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

国产MCU芯片(2):东软MCU概览及触控MCU

前言: 国产芯片替代的一个主战场之一就是mcu,可以说很多国内芯片设计公司都打算或者已经在设计甚至有了一款或多款的量产产品了,这也是国际大背景决定的。过去的家电市场、过去的汽车电子市场,的确国产芯片的身影不是很常见,如今不同了,很多fabless投身这个行业,一种是…

性能测试并发量评估新思考:微服务压力测试并发估算

性能测试并发量评估新思考 相信很多人在第一次做压力测试的时候,对并发用户数的选择一直有很多的疑惑,那么行业内有一些比较通用的并发量的计算方法,但是这些方法在如今微服务的架构下多少会有一些不适合,下面的文章我们对这些问题…

从0开始C++(三):构造函数与析构函数详解

目录 构造函数 构造函数的基本使用 构造函数也支持函数重载 构造函数也支持函数参数默认值 构造初始化列表 拷贝构造函数 浅拷贝和深拷贝 析构函数 总结 练习一下ヽ( ̄▽ ̄)ノ 构造函数 构造函数的基本使用 构造函数是一种特殊的成…

不知道怎么下载原版系统,这几个原版系统下载网站可以帮你

电脑是我们日常办公生活中必备不可少的设备,无论是个人使用还是企业部署,拥有一个稳定、安全且纯净的操作系统对于保障数据安全和提升使用体验至关重要。然而,网络上充斥着各种二次打包的系统版本,这些版本往往携带了第三方软件或…

班古精准营养X朗格力:教你如何应对慢阻肺

#肺科营养#朗格力#班古营养#复合营养素#肺部营养#肺部健康# 肺是除皮肤外人体中唯一直接与外界联系的器官。一副好肺,能为身体供应充足的氧气,使生命动力更足,人体免疫力、自愈力更强。肺好,生命动力就足,保肺就是保命!但有不少人却没能拥有健康的肺,而是患上了慢阻肺。 专家指…

国外创意二维码活动:喜力Heineken助力爱尔兰濒临倒闭酒吧转型博物馆?

今天分享一个很有意思的国外二维码活动案例。爱尔兰酒馆拥有非常悠久的历史,闻名于世界。但是因为经营成本、税收等的不断增加,自2005年起,四分之一的爱尔兰酒吧相继关闭,这其中包括拥有1229年历史的世界上最古老的酒吧。 于是&a…

Hi3861 OpenHarmony嵌入式应用入门--点灯

本篇实现对gpio的控制,通过控制输出进行gpio的点灯操作。 硬件 我们来操作IO2,控制绿色的灯。 软件 GPIO API API名称 说明 hi_u32 hi_gpio_deinit(hi_void); GPIO模块初始化 hi_u32 hi_io_set_pull(hi_io_name id, hi_io_pull val); 设置某个IO…

用群辉NAS打造影视墙(Video Station篇)

目录 一、群辉套件Video Station 1、安装 2、进入系统 3、配置刮削器 4、获取TMDB网站API密钥 5、配置DNS (1)开启SSH (2)使用终端工具连接到NAS (3)修改hosts文件 (4)再次测试连接 6、设置目录 二、手机端APP设置 三、电视端APP 四、解决影视信息错误 N…

TikTok API接口——获取TikTok用户QRcode二维码

一、引言 在数字化时代,QRcode二维码已经成为连接线上线下的重要桥梁。在社交媒体领域,TikTok作为短视频领域的佼佼者,用户量庞大且活跃度高。为了满足用户之间更便捷的互动需求,我们特别开发了一款针对TikTok平台的接口&#xf…

MATLAB神经网络---lstmLayer(LSTM 长短期记忆神经网络)

前言 描述LSTM就要先描述一下循环神经网络 循环神经网络 循环神经网络通过使用带自反馈的神经元,使得网络的输出不仅和当前的输入有关,还和上一时刻的输出相关,于是在处理任意长度的时序数据时,就具有短期记忆能力。 如下是一个…

内存优化技巧:让数据处理更高效

Pandas无疑是我们数据分析时一个不可或缺的工具,它以其强大的数据处理能力、灵活的数据结构以及易于上手的API赢得了广大数据分析师和机器学习工程师的喜爱。 然而,随着数据量的不断增长,如何高效、合理地管理内存,确保Pandas Da…

【贪心算法初级训练】在花坛上是否能种下n朵花、碰撞后剩余的行星

1、在花坛上是否能种下n多花 一个很长的花坛,一部分地已经种植了花,另一部分却没有,花不能种植在相邻的地块上否则它们会争夺水源,两者都会死去。给你一个整数数组表示花坛,由若干个0和1组成,0表示没种植花…

课程设计:班级通讯录管理系统(Java+MySQL)

本项目旨在开发一个基于Java的班级通讯录管理系统,使用MySQL作为数据库,采用Swing进行UI设计。系统主要功能包括管理员登录认证、班级信息管理、学生信息管理。每个班级拥有独立窗口,同时注重窗口复用和代码精简,实现自适应布局&a…

性价比高的洗地机推荐,测评员精选四款热门洗地机分享

家庭清洁新升级,家用洗地机可以让家里打扫变得轻松高效。面对众多品牌和型号,朋友们常犯难:到底应该怎么选家用洗地机?别急,我这回的普及知识可不含糊,亲测超十款热门洗地机,从中精挑细选了四款…

手机天线都去哪里了?

在手机的演变历程中,天线的设计和位置一直是工程师们不断探索和创新的领域。你是否好奇,现在的手机为什么看不到那些曾经显眼的天线了呢? 让我们一起揭开这个谜题。 首先,让我们从基础开始:手机是如何发出电磁波的&…

摄像头劫持——保护自己免受窥探

今天为您带来当今科技界的最新趋势及探索方法。本周,我们将为您提供五个防止黑客在您不知情的情况下访问您的网络摄像头的建议。 网络摄像头 一、摄像头劫持 你是否曾经怀疑过,即使你没有主动使用网络摄像头,也可能有人正在通过它窥视你&am…

【码银送书第二十一期】《大数据智能风控:模型、平台与业务实践》

人行印发的《金融科技(FinTech)发展规划(2022一2025年)》明确指出金融科技成为防范化解金融风险的利器,运用大数据、人工智能等技术建立金融风控模型,有效甄别高风险交易,智能感知异常交易&…

关于创建虚拟机时kdump服务的简介

kdump 是一种先进的基于 kexec 的内核崩溃转储机制。 当系统崩溃时,kdump 使用 kexec 启动到第二个内核,这个内核通常被称为捕获内核。它以较小的内存启动,用于捕获转储镜像。 第一个内核会保留一部分内存给第二个内核启动使用。由于 kdump 利…

掌握JavaScript ES6精髓:探索函数和对象的高级扩展与实用技巧

序言 JavaScript,作为前端开发中不可或缺的语言,已经发展到了ECMAScript 2015(简称ES6)以及后续的版本。ES6带来了诸多语法上的改进和创新,使得代码更加简洁、优雅,同时也提供了更多的编程模式和实用技巧。…

MySQL客户端与服务端建立连接抓包分析

文章目录 MySQL客户端与服务端建立连接流程抓包分析1.连接建立流程2.各类数据包介绍2.1挑战数据包2.2认证数据包2.3切换认证插件请求数据包2.4切换认证插件响应数据包2.5成功数据包2.6失败数据包3.注意点4.测试代码MySQL客户端与服务端建立连接流程抓包分析 抓包工具采用的是W…