- 博客(136)
- 收藏
- 关注
原创 【Spark分布式内存计算框架——Structured Streaming】2. Structured Streaming 核心设计与编程模型
Structured Streaming最核心的思想就是将实时到达的数据看作是一个不断追加的unbound table无界表,到达流的每个数据项就像是表中的一个新行被附加到无边界的表中,用静态结构化数据的批处理查询方式进行流计算。第二部分:Query(查询),对 Input Table 的增量式查询,只要Input Table中有数据,立即(默认情况)执行查询分析操作,然后进行输出(类似SparkStreaming中微批处理);第五行、当有新的数据到达时,Spark会执行“增量"查询,并更新结果集;
2023-03-04 11:45:00 608 1
原创 【Spark分布式内存计算框架——Structured Streaming】3. Structured Streaming —— 入门案例:WordCount
其中可以设置不同输出模式(OutputMode),当设置为Complete时,结果表ResultTable中所有数据都输出;第二点、数据封装Dataset/DataFrame中,分析数据时,建议使用DSL编程,调用API,很少使用SQL方式。词频统计案例:从TCP Socket实消费流式数据,进行词频统计,将结果打印在控制台Console。参数二:truncate,如果某列值字符串太长是否截取,默认为true,截取字符串;参数一:numRows,打印多少条数据,默认为20条;
2023-03-04 11:45:00 630 1
原创 【Spark分布式内存计算框架——Spark Streaming】13. 偏移量管理(下)MySQL 存储偏移量
经过测试发现完全没有问题的,代码可以进一步优化,提高性能:由于每批次数据结果RDD输出以后,都需要向MySQL数据库表更新偏移量数据,频繁连接数据库,建议构建数据库连接池,每次从池子中获取连接。从Kafka Topic消费数据时,直接获取的DStream中每批次RDD都是KafkaRDD,可以获取数据偏移量范围信息OffsetRanges。
2023-03-03 11:45:00 349
原创 【Spark分布式内存计算框架——Structured Streaming】1. Structured Streaming 概述
Apache Spark在2016年的时候启动了Structured Streaming项目,一个基于Spark SQL的全新流计算引擎Structured Streaming,让用户像编写批处理程序一样简单地编写高性能的流处理程序。Structured Streaming并不是对Spark Streaming的简单改进,而是吸取了在开发Spark SQL和Spark Streaming过程中的经验教训,以及Spark社区和Databricks众多客户的反馈,重新开发的全新流式引擎,致力于为批处理和流处理
2023-03-03 11:45:00 652
原创 【Spark分布式内存计算框架——Spark Streaming】12. 偏移量管理(上)代码重构与Checkpoint 恢复
当我们再次运行Streaming Application时,只要从Checkpoint 检查点目录恢复,构建StreamingContext应用,就可以继续从上次消费偏移量消费数据。在实际生产项目中,常常使用第二种方式【手动管理偏移量】,将偏移量存储到MySQL、Redis或Zookeeper中,接下来讲解两种方式实现,都需要掌握。此时无法从检查点读取偏移量信息和转态信息,所以SparkStreaming中Checkpoint功能,属于鸡肋,食之无味,弃之可惜。方式一:Checkpoint 恢复。
2023-03-02 21:17:41 330
原创 【Spark分布式内存计算框架——Spark Streaming】11. 应用案例:百度搜索风云榜(下)实时窗口统计
窗口函数【window】声明如下,包含两个参数:窗口大小(WindowInterval,每次统计数据范围)和滑动大小(每隔多久统计一次),都必须是批处理时间间隔BatchInterval整数倍。针对用户百度搜索日志数据,实现【近期时间内热搜Top10】,统计最近一段时间范围(比如,最近半个小时或最近2个小时)内用户搜索词次数,获取Top10搜索词及次数。在实际生产项目中,常常使用第二种方式【手动管理偏移量】,将偏移量存储到MySQL、Redis或Zookeeper中,接下来讲解两种方式实现,都需要掌握。
2023-03-02 21:17:02 389
原创 【Spark分布式内存计算框架——Spark Streaming】9. 获取偏移量 & 应用案例:百度搜索风云榜(上)
百度搜索风云榜(http://top.baidu.com/)以数亿网民的单日搜索行为作为数据基础,以搜索关键词为统计对象建立权威全面的各类关键词排行榜,以榜单形式向用户呈现基于百度海量搜索数据的排行信息,线上覆盖十余个行业类别,一百多个榜单。当SparkStreaming集成Kafka时,无论是Old Consumer API中Direct方式还是New Consumer API方式获取的数据,每批次的数据封装在KafkaRDD中,其中包含每条数据的元数据信息。
2023-03-01 11:45:00 381
原创 【Spark分布式内存计算框架——Spark Streaming】10. 应用案例:百度搜索风云榜(中)实时数据ETL存储
Spark 1.6提供新的状态更新函数【mapWithState】,mapWithState函数也会统计全局的key的状态,但是如果没有数据输入,便不会返回之前的key的状态,只是关心那些已经发生的变化的key,对于没有数据输入,则不会返回那些没有变化的key的数据。这样的话,即使数据量很大,checkpoint也不会像updateStateByKey那样,占用太多的存储,效率比较高;运行程序可以发现,当Key(搜索单词)没有出现时,不会更新状态,仅仅更新当前批次中出现的Key的状态。
2023-03-01 11:45:00 492
原创 【Spark分布式内存计算框架——Spark Streaming】7. Kafka集成方式
Direct方式会定期地从Kafka的topic下对应的partition中查询最新的偏移量,再根据偏移量范围,在每个batch里面处理数据,Spark通过调用kafka简单的消费者API读取一定范围的数据。文档:http://spark.apache.org/docs/2.4.5/streaming-kafka-0-8-integration.html。文档:http://spark.apache.org/docs/2.4.5/streaming-kafka-integration.html。
2023-02-28 11:45:00 291
原创 【Spark分布式内存计算框架——Spark Streaming】8. Direct 方式集成底层原理 & 集成Kafka 0.10.x
文档:http://spark.apache.org/docs/2.2.0/streaming-kafka-0-10-integration.html。使用Kafka 0.10.+提供新版本Consumer API集成Streaming,实时消费Topic数据,进行处理。第一、简单的并行度(Simplified Parallelism)第一、类似 Old Consumer API中Direct方式。第二、高效(Efficiency)第二、简单并行度1:1。
2023-02-28 11:45:00 442
原创 【Spark分布式内存计算框架——Spark Streaming】5. DStream(上)
DStream中包含很多函数,大多数与RDD中函数类似,主要分为两种类型:其一:转换函数【Transformation函数】DStream中还有一些特殊函数,针对特定类型应用使用的函数,比如updateStateByKey状态函数、window窗口函数等,后续具体结合案例讲解。其二:输出函数【Output函数】DStream中每批次结果RDD输出使用foreachRDD函数,前面使用的print函数底层也是调用foreachRDD函数,截图如下所示:
2023-02-27 11:45:00 425
原创 【Spark分布式内存计算框架——Spark Streaming】6. DStream(下)流式应用状态 & Kafka
7)、Replica:副本,为实现备份的功能,保证集群中的某个节点发生故障时,该节点上的 Partition 数据不丢失,且 Kafka 仍然能够继续工作,Kafka 提供了副本机制,一个 Topic 的每个分区都有若干个副本,一个 Leader 和若干个 Follower;6)、Partition:为了实现扩展性,提高并发能力,一个非常大的 Topic 可以分布到多个 Broker (即服务器)上,一个 Topic 可以分为多个 Partition,每个 Partition 是一个 有序的队列;
2023-02-27 11:45:00 356
原创 【Spark分布式内存计算框架——Spark Streaming】3.入门案例(上)官方案例运行
文档:http://spark.apache.org/docs/2.2.0/streaming-programming-guide.html#initializing-streamingcontext。基于IDEA集成开发环境,编程实现:从TCP Socket实时读取流式数据,对每批次中数据进行词频统计WordCount。运行上述词频统计案例,登录到WEB UI监控页面:http://localhost:4040,查看相关监控信息。SparkStreaming实时处理数据性能如何(是否可以实时处理数据)?
2023-02-26 11:45:00 396
原创 【Spark分布式内存计算框架——Spark Streaming】4.入门案例(下)Streaming 工作原理
接收器将接收的数据划分为Block以后,按照设置的存储级别对Block进行存储,从TCP Socket中接收数据默认的存储级别为:MEMORY_AND_DISK_SER_2,先存储内存,不足再存储磁盘,存储2副本。当StreamingContext对象构建以后,启动接收器Receiver,专门从数据源端接收数据,此接收器作为Task任务运行在Executor中,一直运行(Long Runing),一直接收数据。每批次RDD数据中,有5个Block,每个Block就是RDD一个分区数据。
2023-02-26 11:45:00 463
原创 【Spark分布式内存计算框架——Spark Streaming】2. Streaming 概述(下)Streaming 计算模式、SparkStreaming 计算思想
流式处理任务是大数据处理中很重要的一个分支,关于流式计算的框架也有很多,如比较出名的Storm流式处理框架,是由Nathan Marz等人于 2010 年最先开发,之后将Storm开源,成为Apache 的顶级项目,Trident 对Storm进行了一个更高层次的抽象;对于目前版本的Spark Streaming而言,其最小的Batch Size的选取在0.5~5秒钟之间,所以Spark Streaming能够满足流式准实时计算场景,对实时性要求非常高的如高频实时交易场景则不太适合。
2023-02-25 20:37:48 254
原创 【Spark分布式内存计算框架——Spark Streaming】1. Streaming 概述(上)Streaming 应用场景、Lambda 架构
在很多实时数据处理的场景中,都需要用到流式处理(Stream Process)框架,Spark也包含了两个完整的流式处理框架Spark Streaming和Structured Streaming(Spark 2.0出现),先阐述流式处理框架,之后介绍Spark Streaming框架使用。在传统的数据处理过程中,我们往往先将数据存入数据库中,当需要的时候再去数据库中进行检索查询,将处理的结果返回给请求的用户;另外,MapReduce 这类大数据处理框架,更多应用在离线计算场景中。
2023-02-25 20:31:39 1015
原创 【Spark分布式内存计算框架——离线综合实战】6. 广告投放的地域分布
主要使用groupBy、agg、filter和withColumn API实现报表分析,与前面SQL分析性能完全一致,原因在于SparkSQL中Catalyst引擎,无论是SQL还是DSL,最终生成物理计划都是一样的。先依据需求编写SQL,三率指标(竞价成功率、广告点击率、媒体点击率)依赖于其他指标计算,所以使用SQL子查询方式,将SQL封装到特质:ReportSQLConstant中。上述SQL使用子查询方式,需要两次注册DataFrame为临时视图,编写SQL语句,可以使用With As语句优化。
2023-02-24 11:45:00 463
原创 【Spark分布式内存计算框架——离线综合实战】7.应用执行调度
当本地模式LocalMode应用提交运行没有问题时,启动YARN集群,使用spark-submit提交【ETL应用】和【Report应用】,以YARN Client和Cluaster不同部署模式运行,查看Hive Table和MySQL Table数据是否OK。在使用spark-submit提交应用【ETL应用】或【Report应用】运行时,需要使用【–jars】指定应用依赖的jar包,发送到Driver和Executor,以便Task运行时可以找到。2)、删除【MySQL Table报表数据】
2023-02-24 11:45:00 284
原创 【Spark分布式内存计算框架——离线综合实战】3. SparkSession 工具类、广告数据 ETL
解析IP地址为【省份、城市】,推荐使用【ip2region】第三方工具库, 准确率99.9%的离线IP地址定位库,0.0x毫秒级查询,ip2region.db数据库只有数MB,提供了java、php、c、python、nodejs、golang、c#等查询绑定和Binary、B树、内存三种查询算法。包含了全部的IP,生成的数据库文件ip2region.db只有几MB,最小的版本只有1.5MB,随着数据的详细度增加数据库的大小也慢慢增大,目前还没超过8MB。c. 分割字符串,获取省份和城市。
2023-02-23 11:45:00 319
原创 【Spark分布式内存计算框架——离线综合实战】4. IP 工具类
需要将IP地址代码封装到工具类中,方便后续使用,在包【cn.itcast.spark.utils】创建工具类:IpUtils.scala,定义方法【convertIpToRegion】,传递参数【ip地址和DbSearch对象】,返回Region对象:封装ip、province和city样例类。Spark如何操作Hive分区表,包括利用Spark DataFrame创建Hive的分区表和Spark向已经存在Hive分区表里插入数据,通常是在Hive中创建好表,保存DataFrame数据至Hive表。
2023-02-23 11:45:00 254
原创 【Spark分布式内存计算框架——离线综合实战】2. 业务需求
综上所述,需要一个配置文件工具类,来专门获取配置文件的内容。在使用IDEA开发应用时,建议从本地文件系统LocalFS加载数据和应用运行在本地模式LocalMode,开发完成以后测试时从HDFS加载数据和应用运行YARN集群,所以需要通过属性配置文件:【config.properties】,控制应用程序数据加载与运行模式。整个综合实战主要结合广告业务数据及简单报表需求,熟悉SparkCore和SparkSQL如何进行离线数据处理分析,整合其他大数据框架综合应用,需要准备大数据环境及应用开发环境。
2023-02-22 11:45:00 621
原创 【Spark分布式内存计算框架——离线综合实战】5. 业务报表分析
后面将报表结果数据保存MySQL表中时,采用的是自己编写代码,并不使用DataFrame自带format(“jdbc”)方式,不能满足需求:当某日报表统计程序运行多次时,插入数据到结果表中,采用Append最佳方式,主键冲突;采用OverWrite方式,将会将表删除,以前统计结果也都删除。编写【RegionStateReport.scala】类,创建【doReport】方法,接收DataFrame为参数,进行报表统计,并最终保存至MySQL表中,封装保存结果数据代码至saveToMySQL方法中。
2023-02-22 11:45:00 548
原创 【Spark分布式内存计算框架——Spark SQL】15. Catalyst 优化器
优化后的逻辑执行计划依然是逻辑的,需要将逻辑计划转化为Physical Plan。Spark SQL的核心是Catalyst优化器,它以一种新颖的方式利用高级编程语言功能(例如Scala的模式匹配和quasiquotes)来构建可扩展的查询优化器。在第四章【案例:电影评分数据分析】中,运行应用程序代码,通过WEB UI界面监控可以看出,无论使用DSL还是SQL,构建Job的DAG图一样的,性能是一样的,原因在于SparkSQL中引擎:Catalyst:将SQL和DSL转换为相同逻辑计划。
2023-02-21 11:45:00 690
原创 【Spark分布式内存计算框架——离线综合实战】1. 综合实战概述
数据管理平台(Data Management Platform,简称DMP),能够为广告投放提供人群标签进行受众精准定向,并通过投放数据建立用户画像,进行人群标签的管理以及再投放。各大互联网公司都有自己的DMP平台,用户广告精准投放营销,比如字节跳动产品今日头条、抖音短视频等主要是通过广告推广盈利,BAT公司DMP平台:1、百度DMP智选:http://dmp.baidu.com/static/index.html2、淘宝达摩盘(DMP营销平台):https://dmp.taobao.com/
2023-02-21 11:45:00 413
原创 【Spark分布式内存计算框架——Spark SQL】13. 自定义UDF函数
无论Hive还是SparkSQL分析处理数据时,往往需要使用函数,SparkSQL模块本身自带很多实现公共功能的函数,在org.apache.spark.sql.functions中。SparkSQL与Hive一样支持定义函数:UDF和UDAF,尤其是UDF函数在实际项目中使用最为广泛。回顾Hive中自定义函数有三种类型:第一种:UDF(User-Defined-Function) 函数一对一的关系,输入一个值经过函数以后输出一个值;
2023-02-20 11:45:00 413
原创 【Spark分布式内存计算框架——Spark SQL】14. 分布式SQL引擎
SparkSQL模块从Hive框架衍生发展而来,所以Hive提供的所有功能(数据分析交互式方式)都支持,文档:http://spark.apache.org/docs/2.4.5/sql-distributed-sql-engine.html。在实际大数据分析项目中,使用SparkSQL时,往往启动一个ThriftServer服务,分配较多资源(Executor数目和内存、CPU),不同的用户启动beeline客户端连接,编写SQL语句分析数据。方式一:交互式命令行(CLI)
2023-02-20 11:45:00 374
原创 【Spark分布式内存计算框架——Spark SQL】11. External DataSource(中)parquet 数据
实际项目中,有时处理数据以JSON格式存储的,尤其后续结构化流式模块:StructuredStreaming,从Kafka Topic消费数据很多时间是JSON个数据,封装到DataFrame中,需要解析提取字段的值。可以看出textFile方法底层还是调用text方法,先加载数据封装到DataFrame中,再使用as[String]方法将DataFrame转换为Dataset,实际项目中推荐使用textFile方法,从Spark 2.0开始提供。范例演示:分别使用text和textFile方法加载数据。
2023-02-19 11:45:00 599
原创 【Spark分布式内存计算框架——Spark SQL】12. External DataSource(下)rdbms 数据
Spark SQL模块从发展来说,从Apache Hive框架而来,发展历程:Hive(MapReduce)-> Shark (Hive on Spark) -> Spark SQL(SchemaRDD -> DataFrame -> Dataset),所以SparkSQL天然无缝集成Hive,可以加载Hive表数据进行分析。官方文档:http://spark.apache.org/docs/2.4.5/sql-data-sources-hive-tables.html。其二、直接编写SQL语句。
2023-02-19 11:45:00 396
原创 【Spark分布式内存计算框架——Spark SQL】10. External DataSource(上)数据源与格式
所以使用SpakrSQL分析数据时,从数据读取,到数据分析及数据保存,链式操作,更多就是ETL操作。SparkSQL提供一套通用外部数据源接口,方便用户从数据源加载和保存数据,例如从MySQL表中既可以加载读取数据:load/read,又可以保存写入数据:save/write。SparkSQL模块中可以从某个外部数据源读取数据,就能向某个外部数据源保存数据,提供相应接口,通过DataFrameWrite类将数据进行保存。第二种:Overwrite 覆写模式,当数据存在时,覆写以前数据,存储当前最新数据;
2023-02-18 08:17:35 512
原创 【Spark分布式内存计算框架——Spark SQL】9. Dataset(下)RDD、DF与DS转换与面试题
RDD、DataFrame和DataSet之间的转换如下,假设有个样例类:case class Emp(name: String),相互转换。范例演示:分别读取people.txt文件数据封装到RDD、DataFrame及Dataset,查看区别及相互转换。RDD转换到Dataset:rdd.map(x => Emp(x)).toDS。RDD转换到DataFrame:rdd.toDF(“name”)DataFrame转换到RDD:df.rdd。Dataset转换到RDD:ds.rdd。
2023-02-18 08:08:41 593
原创 【Spark分布式内存计算框架——Spark SQL】7. 数据处理分析案例
其中使用SparkSQL中自带函数库functions,在org.apache.spark.sql.functions中,包含常用函数,有些与Hive中函数库类似,但是名称不一样。对电影评分数据进行统计分析,获取Top10电影(电影评分平均值最高,并且每个电影被评分的次数大于2000)。将分析结果数据保存到外部存储系统中,比如保存到MySQL数据库表中或者CSV文件中。第二步、转换数据,指定Schema信息,封装到DataFrame。第一步、读取电影评分数据,从本地文件系统读取。
2023-02-17 12:00:00 715
原创 【Spark分布式内存计算框架——Spark SQL】8. Shuffle 分区数目、Dataset(上)
Dataset API是DataFrames的扩展,它提供了一种类型安全的,面向对象的编程接口。从Spark 2.0开始,DataFrame与Dataset合并,每个Dataset也有一个被称为一个DataFrame的类型化视图,这种DataFrame是Row类型的Dataset,即Dataset[Row]。Dataset是在Spark1.6中添加的新的接口,是DataFrame API的一个扩展,是Spark最新的数据抽象,结合了RDD和DataFrame的优点。
2023-02-17 11:45:00 558
原创 【Spark分布式内存计算框架——Spark SQL】5. DataFrame(下)
依据RDD中数据自定义Schema,类型为StructType,每个字段的约束使用StructField定义,具体步骤如下:第一步、RDD中数据类型为Row:RDD[Row];第二步、针对Row中数据定义Schema:StructType;第三步、使用SparkSession中方法将定义的Schema应用到RDD[Row]上;
2023-02-16 11:45:00 377
原创 【Spark分布式内存计算框架——Spark SQL】6. 数据处理分析
第一种:DSL(domain-specific language)编程,调用DataFrame/Dataset API(函数),类似RDD中函数;第二种:SQL 编程,将DataFrame/Dataset注册为临时视图或表,编写SQL语句,类似HiveQL;其中SQL语句类似Hive中SQL语句,查看Hive官方文档,SQL查询分析语句语法,上述函数在实际项目中经常使用,尤其数据分析处理的时候,其中要注意,调用函数时,通常。2、过滤函数filter/where:设置过滤条件,类似SQL中WHERE语句。
2023-02-16 11:45:00 450
原创 【Spark分布式内存计算框架——Spark SQL】3. SparkSQL 概述(下)、DataFrame
SparkSQL模块官方定义:针对结构化数据处理Spark Module模块。主要包含三层含义:第一、针对结构化数据处理,属于Spark框架一个部分结构化数据:一般指数据有固定的 Schema(约束),例如在用户表中,name 字段是 String 型,那么每一条数据的 name 字段值都可以当作 String 来使用;schema信息,包含字段的名称和字段的类型,比如:JSON、XML、CSV、TSV、MySQL Table、ORC、Parquet,ES、MongoDB等都是结构化数据;
2023-02-15 11:45:00 317
原创 【Spark分布式内存计算框架——Spark SQL】4. DataFrame(上)
而右侧的DataFrame却提供了详细的结构信息,使得Spark SQL可以清楚地知道该数据集中包含哪些列,每列的名称和类型各是什么。使得Spark SQL得以洞察更多的结构信息,从而对藏于DataFrame背后的数据源以及作用于DataFrame之上的变换进行针对性的优化,最终达到大幅提升运行时效率。在Spark中,DataFrame是一种以RDD为基础的分布式数据集,类似于传统数据库中的二维表格。1)、分布式的数据集,并且以列的方式组合的,相当于具有schema的RDD;第三步、读取雇员信息数据。
2023-02-15 11:45:00 304
原创 【Spark分布式内存计算框架——Spark SQL】2. SparkSQL 概述(上)
Spark SQL允许开发人员直接处理RDD,同时可以查询在Hive上存储的外部数据。Spark SQL的一个重要特点就是能够统一处理关系表和RDD,使得开发人员可以轻松的使用SQL命令进行外部查询,同时进行更加复杂的数据分析。
2023-02-14 08:09:56 321
原创 【Spark分布式内存计算框架——Spark SQL】1. 快速入门
DataFrame 数据结构相当于给RDD加上约束Schema,知道数据内部结构(字段名称、字段类型),提供两种方式分析处理数据:DataFrame API(DSL编程)和SQL(类似HiveQL编程),下面以WordCount程序为例编程实现,体验DataFrame使用。前面使用RDD封装数据,实现词频统计WordCount功能,从Spark 1.0开始,一直到Spark 2.0,建立在RDD之上的一种新的数据结构DataFrame/Dataset发展而来,更好的实现数据处理分析。
2023-02-14 08:05:30 226
原创 【Spark分布式内存计算框架——Spark Core】11. Spark 内核调度(下)
如果Task的数量多,能用的资源也多,那么并行度自然就好。如果Task的数据少,资源很多,有一定的浪费,但是也还好。如果core有多少Task就有多少,那么有些比较快的task执行完了,一些资源就会处于等待的状态。合理的并行度的设置,应该要设置的足够大,大到可以完全合理的利用你的集群资源。Task没有设置或者设置的很少,比如为100个task ,平均分配一下,每个executor 分配到2个task,每个executor 剩下的一个cpu core 就浪费掉了!
2023-02-13 12:00:00 467
原创 【Spark分布式内存计算框架——Spark Core】10. Spark 内核调度(中)
Spark在1.1以前的版本一直是采用Hash Shuffle的实现的方式,到1.1版本时参考Hadoop MapReduce的实现开始引入Sort Shuffle,在1.5版本时开始Tungsten钨丝计划,引入UnSafe Shuffle优化内存及CPU的使用,在1.6中将Tungsten统一到Sort Shuffle中,实现自我感知选择最佳Shuffle方式,到的2.0版本,Hash Shuffle已被删除,所有Shuffle方式全部统一到Sort Shuffle一个实现中。
2023-02-13 11:45:00 416
基于Java的雷电游戏的设计与实现
2023-02-17
基于Java的愤怒的小鸟游戏的设计与实现
2023-02-17
基于Java的飞机大战游戏的设计与实现
2023-02-17
基于java的超级玛丽游戏的设计与实现
2023-02-17
基于Java的qq截图工具的设计与实现
2023-02-17
基于Java的出租车计价系统的设计与实现
2023-02-17
基于java的博网即时通讯软件的设计与实现
2023-02-17
基于Java的俄罗斯方块游戏的设计与实现
2023-02-17
基于Java扫雷游戏的设计与实现
2023-02-17
基于Java网络聊天室系统的设计与实现
2023-02-17
基于JAVA的户籍管理系统的设计与实现
2023-02-17
基于JavaEE的土地档案管理关系系统的设计与实现
2023-02-17
基于JSP的电子政务网的设计与实现
2023-02-17
基于JSP的企业电子投票系统的设计与实现
2023-02-15
基于JAVA-JSP企业合同管理系统的设计与实现
2023-02-15
基于Java的CRM客户关系管理系统的实现与实现
2023-02-15
基于Java EE平台项目管理系统的设计与实现
2023-02-15
基于JSP物流信息网的设计与实现
2023-02-15
基于MVC的文章发布系统的设计与实现
2023-02-15
基于Java的网上招聘系统的设计与实现
2023-02-15
qt5.9.8升级gcc
2023-02-18
Verilog 计数器实现
2023-02-18
基于MVC的物资租赁系统的设计与实现
2023-02-18
基于java陶瓷工厂的进销存管理系统的设计与实现
2023-02-18
基于struts+hibernate的采购管理系统的分析与实现
2023-02-18
基于JSP企业财务管理系统的设计与实现
2023-02-18
基于java的进销存管理系统的设计与实现
2023-02-18
基于Web的仓库管理系统的设计与实现
2023-02-18
基于struts+hibernate的采购管理系统的分析与实现
2023-02-18
基于JavaEE的百货中心供应链管理系统
2023-02-18
基于Java的坦克大战游戏的设计与实现
2023-02-18
基于Java的推箱子游戏设计与实现
2023-02-18
基于Java的模拟写字板的设计与实现
2023-02-18
基于Java的连连看游戏设计与实现
2023-02-18
基于JAVAEE的停车场管理系统的设计与实现
2023-02-15
基于Java EE技术实现产品售后服务系统
2023-02-15
基于Java的企业员工信息管理系统设计与实现
2023-02-15
基于JSP的企业车辆管理系统的设计与实现
2023-02-15
基于JSP固定资产管理系统的设计与实现
2023-02-15
基于JSP企业快信系统的设计与实现-毕业设计
2023-02-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人