云计算平台构建与实验设计

课程设计任务书一、作业目的  物联网的核心是应用,应用的核心是云计算。通过构建一个云计算平台,并利用这个平台设计云计算实验,将结果与普通的电脑计算比较两者的差别,感受云计算的优越性能,从而对物联网有更深刻的体验与认识。二、作业内容及要求    能够按照课程设计任务书按照相应的要求完成整个云计算平台的搭建,要完成这个任务,就要对云计算平台的架构和原理有一定的认识,对物联网的应用层有深入的学习,通…

大家好,又见面了,我是你们的朋友全栈君。

课程设计任务书

一、作业目的

    物联网的核心是应用,应用的核心是云计算。通过构建一个云计算平台,并利用这个平台设计云计算实验,将结果与普通的电脑计算比较两者的差别,感受云计算的优越性能,从而对物联网有更深刻的体验与认识。

二、作业内容及要求

    能够按照课程设计任务书按照相应的要求完成整个云计算平台的搭建,要完成这个任务,就要对云计算平台的架构和原理有一定的认识,对物联网的应用层有深入的学习,通过查阅书籍文献与网络资料去掌握相关知识,完成云平台的构建与实验的设计。

三、作业成果形式及提交要求

做出实验成果,并向验收老师展示其功能和实现原理,回答老师提出的相关问题;提交实验程序和报告。提交要求是实物验收必须得到老师的肯定,报告必须能清晰说明实验过程与原理,严谨有说服力。

四、参考文献

[1] Hadoop权威指南,清华大学出版社,2010-5-1

[2] NIST Cloud Computing Program,http://www.nist.gov/itl/cloud/

[3] Hadoop大数据处理,人民邮电出版社,2013-09-01

[4] 虚拟化与云计算,电子工业出版社,2009-10-1

[5] 走近云计算,人民邮电出版社,2009年

[6] Hadoop实战,人民邮电出版社,2011年10月

[7] Hadoop云计算实战,清华大学出版社,2012-10

目录

课程设计任务书

目录

摘要

1 绪论

  1.1 云计算概述

    1.1.1 云计算的五大核心特点

    1.1.2 云计算的三种服务模式

  1.2 Hadoop系统概述

  1.3 云计算平台搭建方法

  1.4 本次课设所用平台与搭建方法

2.云计算平台原理

  2.1 Hadoop系统原理

  2.2 ubuntu系统

3.云计算平台搭建过程 

  3.1 ubuntu系统的安装 

  3.2 Hadoop系统部署 

4.分布式云计算实验 

  4.1基于MapReduce的分布式云计算实验 

  4.2 普通PC机上的对比实验 

  4.3分布式云计算实验结果与总结 

5.课程设计总结

6.附录

摘要

物联网的核心是应用,应用的核心是云计算。从一开始学习物联网这门课开始就不断的听到云计算的介绍,并且随着学习的深入,越来越感受到云计算在物联网中的重要作用,没错,物联网的核心是应用,应用的核心是云计算。世界已经悄然进入到大数据时代,大数据的处理依靠传统手段已经捉襟见肘,随着云计算的出现,大数据的潜力才充分发掘出来,物联网也正是接着云计算的东风才能够发展到今天这种深刻改变人们生活方式的地步。

云计算是物联网的应用层,做云计算关键要学会怎么去运用物联网,为此需要查阅与云计算有关的书籍,网上牛人的笔记和国外网站的资料,亲手设计与实现分布式程序进行实验,从而直观的感受到云计算的强大与物联网的无处不在。

云计算的重要性不言而喻,物联网的发展离不开云计算,所以研究云计算的搭建与运用是具有极大的意义。

关键词:物联网  云计算 云计算平台搭建 分布式计算

1,绪论

1.1 云计算概述

在参考文献2里,NIST对云计算定义如下:云计算是一种能够通过网络以便利的、按需付费的方式获取计算资源(包括网络、服务器、存储、应用和服务等)并提高其可用性的模式,这些资源来自一个共享的、可配置的资源池,并能够以最省力和无人干预的方式获取和释放。这种模式具有5个关键功能,还包括3种服务模式和4种部署方式。

1.1.1云计算的五大核心特点:

按需自助服务(On Demand Self-Service):供应商的资源保持高可用和高就绪的状态,用户可以按需方便地自助地获得资源。

泛在的网络访问(Broad Network Access):可以通过各种网络渠道,以统一标准的机制(如浏览器,相同的API等)获取服务,但是客户端可以是多种多样的瘦客户端或富客户端(例如移动电话、笔记本电脑、PDA等)。

动态的资源池(Resource Pooling):供应商的计算资源可以被整合为一个动态资源池,以多租户模式服务所有客户,不同的物理和虚拟资源可根据客户需求动态分配。服务商需实现资源的位置无关性,客户一般不需要知道所使用的资源的确切地理位置,但在需要的时候客户可以指定资源位置(如哪个国家,哪个数据中心等)的要求。

快速弹性(Rapid Elasticity):可以迅速、弹性地提供服务,能快速扩展,也可以快速释放实现快速缩小。对客户来说,可以租用的资源看起来似乎是无限的,可在任何时间购买任何数量的资源。

可计量的服务(Measured Service):服务的收费可以是基于计量的一次一付,或基于广告的收费模式。系统以针对不同服务需求(例如,CPU时间、存储空间、带宽、甚至按用户账号的使用率高低)来计量资源的使用情况和定价,以提高资源的管控能力和促进优化利用。整个系统资源可以通过监控和报表的方式对服务提供者和使用者透明化。

1.1.2云计算的三种服务模式

云计算的三个服务模式(Delivery Models)是:SaaS、PaaS和IaaS。

SaaS:提供给客户的服务是运营商运行在云计算基础设施上的应用程序,用户可以在各种设备上通过瘦客户端界面访问,如浏览器。消费者不需要管理或控制任何云计算基础设施,包括网络、服务器、操作系统、存储,等等。

PaaS:提供给消费者的服务是把客户采用提供的开发语言和工具(例如Java、Python、.Net等)开发的或收购的应用程序部署到供应商的云计算基础设施上。客户不需要管理或控制底层的云基础设施,包括网络、服务器、操作系统、存储等,但客户能控制部署的应用程序,也可能控制运行应用程序的托管环境配置。

IaaS: 提供给消费者的服务是对所有设施的利用,包括处理、存储、网络和其他基本的计算资源,用户能够部署和运行任意软件,包括操作系统和应用程序。消费者不管理或控制任何云计算基础设施,但能控制操作系统的选择、储存空间、部署的应用,也有可能获得有限制的网络组件(例如,防火墙、负载均衡器等)的控制。

目前世界大多数互联网公司都开始布局云计算,Google,华为,BAT,亚马逊也都已经将云计算成熟运用与自己的生态系统,并产生巨大的效益。国内外关于云计算的研究都在火热的进行中。无论是收费的云计算服务还是开源云计算研究都趋于白热化,可见云计算在未来各个领域非同一般的潜力。

1.2 Hadoop系统概述

Hadoop是一个由Apache基金会所开发的分布式系统基础架构。 Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。

Hadoop的框架最核心的设计就是:HDFS和Map Reduce。HDFS为海量的数据提供了存储,则Map Reduce为海量的数据提供了计算。

 云计算平台构建与实验设计

图1-1 HDFS文件系统结构

 云计算平台构建与实验设计

图1-2 Map Reduce工作流程

Hadoop技术已经无处不在。不管是好是坏,Hadoop已经成为大数据的代名词。短短几年间,Hadoop从一种边缘技术成为事实上的标准,不仅现在Hadoop是企业大数据的标准,而且在未来,它的地位似乎一时难以动摇。

1.3 云计算平台搭建方法

目前开源的云计算平台的搭建都要依托Linux系统,因此我们有2种办法搭建云计算平台:安装Linux系统和在其他操作系统下安装Linux虚拟机后搭建云平台。目前主流的虚拟机有:

Virtual Box

Vmware

有了Linux系统环境后就能搭建云计算平台了,几大开源云平台系统有:

Hadoop系统

Open Stack

云计算平台的搭建=Linux系统+开源云平台+SSH框架。

1.4 本次课设所用平台与搭建方法

一开始本设计采用的是虚拟机+Hadoop系统+SSH框架搭建自己的云计算平台,发现在虚拟机下的Linux系统无法下载一些系统关键应用导致云平台无法搭建,前后实验多次后直接给在纯Linux系统部署云计算平台从而成功搭建好云平台,本次课程设计所采用的搭建办法是:

Ubuntu14.04系统+Hadoop系统+SSH框架。

2,云计算平台原理

2.1 Hadoop系统原理

Hadoop是一个开源的可运行于大规模集群上的分布式并行编程框架,其最核心的设计包括:Map Reduce和HDFS。基于 Hadoop,你可以轻松地编写可处理海量数据的分布式并行程序,并将其运行于由成百上千个结点组成的大规模计算机集群上。

简单的说:Map Reduce框架的核心步骤主要分两部分:Map和Reduce。当你向Map Reduce框架提交一个计算作业时,它会首先把计算作业拆分成若干个Map任务,然后分配到不同的节点上去执行,每一个Map任务处理输入数据中的一部分,当Map任务完成后,它会生成一些中间文件,这些中间文件将会作为Reduce任务的输入数据。Reduce对数据做进一步处理之后,输出最终结果。

Map Reduce是Hadoop的核心技术之一,为分布式计算的程序设计提供了良好的编程接口,并且屏蔽了底层通信原理,使得程序员只需关心业务逻辑本事,就可轻易的编写出基于集群的分布式并行程序。从它名字上来看,大致可以看出个两个动词Map和Reduce,“Map(展开)”就是将一个任务分解成为多个子任务并行的执行,“Reduce”就是将分解后多任务处理的结果汇总起来,得出最后的分析结果并输出。

适合用 Map Reduce来处理的数据集(或任务)有一个基本要求:待处理的数据集可以分解成许多小的数据集,而且每一个小数据集都可以完全并行地进行处理。

想要彻底了解Hadoop系统的原理是十分困难的,由于篇幅有限,知识水平也不高,我只能描写其大概面貌,本次课程设计的核心是学习搭建与运用云计算平台,没有足够的时间与精力去完全了解Hadoop的原理,在这里我们不妨就理解为:

Hadoop系统=HDFS分布式文件系统+Map Reduce运算机制。

这样就能很好的明白它们的大致关系,有助于对后面实验的理解。

 云计算平台构建与实验设计

图2-1 Hadoop系统架构

2.2 Ubuntu系统

本次课程设计所使用的Linux统是ubuntu14。

Ubuntu乌班图)是一个以桌面应用为主的Linux操作系统,其名称来自非洲南部祖鲁语或豪萨语的“Ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu基于Debian发行版和GNOME桌面环境,而从11.04版起,Ubuntu发行版放弃了Gnome桌面环境,改为Unity,与Debian的不同在于它每6个月会发布一个新版本。Ubuntu的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

LTS 是 Ubuntu 的长期支持版,因此 Ubuntu 14.04 支持周期长达 3-5 年。因此 Ubuntu 14.04 是追求稳定的用户和企业的最佳选择。所以本次课程设计选择ubuntu14.04LTS版本完全能够应付云平台搭建与相关实验的任务。

云计算平台构建与实验设计

图2-2 ubuntu14.04LTS系统

3,云计算平台搭建过程

3.1 Ubuntu系统的安装

去Ubuntu官网下载好对应版本的系统镜像,并用虚拟光驱软件加载镜像,选择安装Ubuntu系统,一路点击继续后大约10来分钟就可以安装好Ubuntu系统了。

3.2 Hadopp系统部署

修改机器名:

打开/etc/hostname文件,将/etc/hostname文件中的Ubuntu改为你想取的机器名。这里我取“s15“。重启系统后才会生效。

安装ssh服务:

在terminal窗口中输入:Sudoa apt-get install open ssh-server

建立ssh无密码登录本机

在terminal口中输入:

ssh-keygen -t dsa -P ” -f ~/.ssh/id_dsa   

 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

得到如下图说明操作正确:

 云计算平台构建与实验设计

图3-1 建立ssh无密码登录本机

登录local host

在terminal口中输入:bin/start-all.sh

安装Hadoop :

下载Hadoop 安装包并解压,打开Hadoop/conf/Hadoop.sh文件,配置conf/Hadoop.sh找到#export JAVA_HOME=…一行,去掉#,然后加上本机JDK的路径。

打开conf/core-site.XML文件,加入如下代码:

<configuration>  

<property>    

  <name>fs.default.name</name>    

  <value>hdfs://localhost:9000</value>     

 </property>    

</configuration>  

打开conf/map red-site.XML文件,编辑如下:

<configuration>    

     <property>     

      <name>mapred.job.tracker</name>    

      <value>localhost:9001</value>     

     </property>    

    </configuration>    

打开conf/masters文件和conf/slaves件,添加secondary的主机名,作为单机版环境,这里只需填写local host就Ok了。

到这里Hadoop系统就部署完毕了。调用bin/start-all.sh 命令即可以启动Hadoop,用JSP命令查看系统状态,出现如下信息说明系统部署成功:

 云计算平台构建与实验设计

图3-2 用jsp命令查看系统状态

4,分布式云计算实验

 云平台已经搭建完毕,那么这只是第一步,关键还得学会怎么用它,为了能够体现云计算与普通PC机计算能力的差异我特意为本次课设设计了一个专门用于对比的实验程序。

云计算的能力在于飞速处理大数据,为了模拟大数据,在一个TXT文本中循环写入了七百多万单词,为了便于写入这么多单词,在TXT文本中填充了7094304个“for”来模拟大数据。

接下来分别设计一个用于分布式计算的Map Reduce程序和在普通PC机上运行的JAVA程序,该程序的功能是统计一个文本中的单词数量,并输出整个程序运行耗费时间。对比两个程序在两个环境中的运算耗费时间即可比较出二者的差异。

4.1 基于Map Reduce的分布式云计算实验

用于分布式计算的程序核心设计如下:

[cpp] 
view plain  
copy

  1. public static void main(String[] Argus) throws Conception {  
  2.            Date d = new Date();  
  3.       long begintime = d.getTime();  
  4. JobConf conf = new JobConf(WordCount.class);  
  5. conf.setJobName(“wordcount”);  
  6.    conf.setNumMapTasks(3);  
  7. conf.setNumReduceTasks(2);        
  8.       conf.outspokenness(Text.class);  
  9. conf.outclass(Inequitable.class);  
  10.     conf.setMapperClass(Map.class);  
  11. conf.setCombinerClass(Reduce.class);  
  12. conf.setReducerClass(Reduce.class);  
  13. conf.setInputFormat(TextInputFormat.class);  
  14. conf.setOutputFormat(TextOutputFormat.class);   JobClient.runJob(conf);  
  15.                 Date d2 = new Date();  
  16.             long endtime = d2.getTime();  
  17.          System.out.println(“用时:”);  
  18.          System.out.print(endtime-begintime);  
  19.                  System.out.println(” 毫秒”); }  


其中 Date d1d2用于捕获程序运行开始和结束的时间其时间差即为程序运算所耗费的时间;conf.setNumMapTasks(3)设置分布式运算时所以的map数量为3个,conf.setNumReduceTasks(2);设置运算中所以的reduce数量为2个,其他的设置为配置Map Reduce的其他必要参数,在这里对本实验无影响就不解析了。

想要利用云平台来为我们做计算服务还要把写好的Map Reduce程序进行编译,打包成库文件,然后将模拟大数据的TXT文档提交到HDFS间,执行以下命令就能启动云计算了:

bin/Hadoop as -put input/ input 把文件提交到HDFS空间

bin/hadoop jar WordCount.jar WordCount input output 启动云计算

得到的结果如下:

 云计算平台构建与实验设计

图4-1 云计算实验结果

可以看到输出结果为单词”for”7094304个,耗时49882毫秒。

4.2 普通PC机上的对比实验

在普通PC机上运行的对比实验程序十分简单,就是对一个文本进行读取,然后逐行识别出单词进行统计,其实现过程与Map Reduce程序中统计单词部分所实现的功能一样,详情参见附录。

该程序在非分布式云计算环境中的实验结果如下:

 云计算平台构建与实验设计

图4-2 普通PC机实验结果

可以看到输出结果为单词”for”也是7094304个,耗时259973毫秒。

4.3 分布式云计算实验结果与总结

从两个对比实验中我们非常清楚的看到同样都是统计7094304个单词的运算普通PC机程序耗费了259973毫秒,而分布式云计算只用了49882毫秒,分布式云计算比普通的计算快了足足5倍有余,并且由于计算速度受服务器好坏的影响,这个数据也只是在我的破电脑上的结果,如果在更强大的服务器上运行那就会有更大的差距。

本设计做的这个对比实验虽然简陋,但是麻雀虽小,五脏齐全,同样能够很好的对比出两种运算的优劣。除此之外,在相关的文献查看过程中发现云计算在数据越大优越性越能体现出来。事实上真正搭建好的集群式云计算平台对于上GB的大数据都是秒内完成的,这就是云计算的强大!

经过这次实验可以看出,云计算有足够的能力处理物联网中庞大的数据,在万物互联中产生的无数的数据就可以用云计算技术加以综合分析从而来更好的服务于物联网。

 5, 课程设计总结

本次课程设计总的来说进行的还是很顺利的,一开始在本设计中采用主流的虚拟机加开源云平台的方法进行云平台搭建,但是在反复试了多种办法后都失败了,之后选择直接安装Ubuntu系统来搭建云平台,后来回想起来这果然是个聪明的决定,因为在纯Linux系统下部署云平台的所有操作都进行的十分顺利没有出现任何意外。

部署云平台进行的十分顺利从而有了更多的时间来学习和设计对比实验。本以为这个对比实验不就是写一个普通的统计单词的JAVA程序嘛,后来才知道提交到云计算平台的程序结构是有一定语法结构的,并且需要在程序代码中手动设置Map Reduce的各项参数,如果不学一学Map Reduce程序的相关知识根本没法写出一个简单的Map Reduce程序,于是借阅了《Hadoop大数据处理》和《Hadoop权威指南》等书籍,学习了几天后才出步了解Map Reduce程序的基本结构和语法,设计的对比实验程序也就顺利出炉了。

普通的PC机计算能力统计了七百多万个单词整整耗费了约4分钟的时间,当用云计算来做这个运算时真正的被它的处理速度震撼到了,它竟然只用了不到50秒!第一次真正直观体验到到云计算的强大就在这一刻开始了!

后来又做了更多的实验,发现数据越大,两种处理方法的对比也就越明显,怪不得现在主流的互联网公司都要部署云计算,没有这么强大的计算能力,世界与日俱增的大数据怎么处理的过来呢!

6,附录


Map Reduce程序:

[cpp] 
view plain  
copy

  1. import java.util.*;  
  2. import java.io.IOException;  
  3. import java.util.Iterator;  
  4. import java.util.StringTokenizer;  
  5.   
  6. import org.apache.hadoop.fs.Path;  
  7. import org.apache.hadoop.io.IntWritable;  
  8. import org.apache.hadoop.io.LongWritable;  
  9. import org.apache.hadoop.io.Text;  
  10. import org.apache.hadoop.mapred.FileInputFormat;  
  11. import org.apache.hadoop.mapred.FileOutputFormat;  
  12. import org.apache.hadoop.mapred.JobClient;  
  13. import org.apache.hadoop.mapred.JobConf;  
  14. import org.apache.hadoop.mapred.MapReduceBase;  
  15. import org.apache.hadoop.mapred.Mapper;  
  16. import org.apache.hadoop.mapred.OutputCollector;  
  17. import org.apache.hadoop.mapred.Reducer;  
  18. import org.apache.hadoop.mapred.Reporter;  
  19. import org.apache.hadoop.mapred.TextInputFormat;  
  20. import org.apache.hadoop.mapred.TextOutputFormat;  
  21. import java.text.SimpleDateFormat;  
  22. public class WordCount {  
  23.   
  24.     public static class Map extends MapReduceBase implements //map  
  25.             Mapper<LongWritable, Text, Text, IntWritable> {  
  26.         private final static IntWritable one = new IntWritable(1);    
  27.         private final Text word = new Text();  
  28.         @Override  
  29.         public void map(LongWritable key, Text value,  
  30.                 OutputCollector<Text, IntWritable> output, Reporter reporter)  
  31.                 throws IOException {  
  32.             String line = value.toString();  
  33.             StringTokenizer tokenizer = new StringTokenizer(line);  //读取文本内容  
  34.             while (tokenizer.hasMoreTokens()) {      //对每个MAP开始各自计数  
  35.                 word.set(tokenizer.nextToken());  
  36.                 output.collect(word, one);  
  37.             }  
  38.         }  
  39.     }  
  40.   
  41.     public static class Reduce extends MapReduceBase implements  //Reduce  
  42.             Reducer<Text, IntWritable, Text, IntWritable> {  
  43.         @Override  
  44.         public void reduce(Text key, Iterator<IntWritable> values,  
  45.                 OutputCollector<Text, IntWritable> output, Reporter reporter)  
  46.                 throws IOException {  
  47.             int sum = 0;  
  48.             while (values.hasNext()) {  
  49.                 sum += values.next().get();   //将所有MAP记得数相加  
  50.             }  
  51.             output.collect(key, new IntWritable(sum));  //汇总  
  52.         }  
  53.     }  
  54.     public static void main(String[] args) throws IOException {  
  55.         // TODO Auto-generated method stub  
  56.               Date d = new Date();  
  57.          long begintime = d.getTime();    
  58.         JobConf conf = new JobConf(WordCount.class);  
  59.         conf.setJobName(“wordcount”);  
  60.           
  61.         //设定MAP数      
  62.         conf.setNumMapTasks(3);  
  63.         //设定REDUCE数  
  64.         conf.setNumReduceTasks(2);  
  65.         // 设定输出的key和value类型  
  66.         conf.setOutputKeyClass(Text.class);  
  67.         conf.setOutputValueClass(IntWritable.class);  
  68.         // 设定各个作业的类  
  69.         conf.setMapperClass(Map.class);  
  70.         conf.setCombinerClass(Reduce.class);  
  71.         conf.setReducerClass(Reduce.class);  
  72.         // 设定输入输出的格式  
  73.         conf.setInputFormat(TextInputFormat.class);  
  74.         conf.setOutputFormat(TextOutputFormat.class);  
  75.         FileInputFormat.setInputPaths(conf, new Path(args[0]));  
  76.         FileOutputFormat.setOutputPath(conf, new Path(args[1]));  
  77.         JobClient.runJob(conf);  
  78.                 Date d2 = new Date();  
  79.             long endtime = d2.getTime();      
  80.              System.out.println(“用时:”);  
  81.              System.out.print(endtime-begintime);  
  82.                  System.out.println(” 毫秒”);  

用于对比的统计单词程序:import java.io.File;

[cpp] 
view plain  
copy

  1. import java.io.FileNotFoundException;  
  2. import java.util.Scanner;  
  3.  import java.util.*;  
  4. import java.text.SimpleDateFormat;  
  5. public class Readtxt {  
  6.     public static void main(String[] args) {  
  7.         Date d = new Date();  
  8.     long begintime = d.getTime();     
  9.     int count = 0;  
  10.         try {  
  11.             Scanner in = new Scanner(new File(“testtxt.txt”));  
  12.     
  13.             while (in.hasNext()) {  
  14.                 String str = in.next();  
  15.                 splitt(str);  
  16.                 count++;     
  17.             }  
  18.         } catch (FileNotFoundException e) {  
  19.             e.printStackTrace();  
  20.         }  
  21.         System.out.println(“这个文本内单词的个数是:”+count);  
  22.         Date d2 = new Date();  
  23.         long endtime = d2.getTime();      
  24.         System.out.println(“用时:”);  
  25.         System.out.print(endtime-begintime);  
  26.         System.out.println(” 毫秒”);  
  27.     }  
  28.     public static void splitt(String str){  
  29.         String strr = str.trim();  
  30.         String[] abc = strr.split(“[\\p{Space}]+”);  
  31.         for(int i=0;i<abc.length;i++)  
  32.     {  
  33.     System.out.println(abc[i]);  
  34.         }  
  35.     }  
  36.        
  37. }  
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/125821.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月6日 下午2:00
下一篇 2022年4月6日 下午2:00


相关推荐

  • 在线数据库设计工具-toolfk程序员在线工具网

    在线数据库设计工具-toolfk程序员在线工具网本文要推荐的[ToolFk]是一款程序员经常使用的线上免费测试工具箱,ToolFk特色是专注于程序员日常的开发工具,不用安装任何软件,只要把内容贴上按一个执行按钮,就能获取到想要的内容结果。ToolFk还支持BarCode条形码在线生成、QueryList采集器、PHP代码在线运行、PHP混淆、加密、解密、Python代码在线运行、JavaScript在线运行、YAML格式化…

    2022年7月11日
    88
  • 微信 报错{“errcode“:41002,“errmsg“:“appid missing hint: [JwuG70489e575]“}

    微信 报错{“errcode“:41002,“errmsg“:“appid missing hint: [JwuG70489e575]“}errcode 41002 解决 41002 是微信没有收到正确的 appid 所以 你需要检测下 url https api weixin com sns oauth2 access token appid APPID amp secret SECRET amp code CODE amp grant type authorizatio codeleturl String

    2026年3月18日
    2
  • decltype用法_指针声明符

    decltype用法_指针声明符decltype操作符

    2025年10月16日
    4
  • 决策树原理解析_解析的原理

    决策树原理解析_解析的原理决策树原理解析1.决策树算法以及基本流程决策树是基于树结构进行决策的,其机制就是通过判定每个属性分类的纯度来进行自上而下决策分类决策树包含根结点,内部结点,叶结点;根结点和内部结点对应与分类的属性(也就是分类的基准),叶结点对应决策结果(也就是纯度很高且不需要继续分裂的类别);从根结点到某一个叶结点的路径便是当前叶结点对应类的整个决策过程,下面来看决策树的算法流程:可以看到决…

    2025年10月6日
    5
  • python数组初始化_python怎么初始化数组

    python数组初始化_python怎么初始化数组因为画图中 x 轴与 y 轴的数据通常为数组格式的数据 所以先总结一下如何初始化数组 1 list 得到数组 通过 array 函数传递 list 对象 L 1 2 3 4 5 6 a np array L 若传递的是多层嵌套的 list 将创建多维数组 b np array 1 2 3 4 5 6 7 8 9 10 11 12 可以通过 dtype

    2026年3月26日
    2
  • Java高新技术——大数操作(BigInteger、BigDecimal)

    Java高新技术——大数操作(BigInteger、BigDecimal)本篇博客主要介绍 Java 常用类库之大数操作 主要是 BigInteger 和 BigDecimal 的 API 学习 之后介绍华为的一道历年真题 十六进制转换成十进制 我们可以看到题目中给我们设置的陷阱 以及如何解决它

    2026年3月16日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号