• [问题求助] 请问在北向iot javademo中的这个参数需要改吗
    我看文档上面要改成RESTfulWS接口,那我画红框的地方要修改吗?另外我的测试回调地址 一直是失败的 有大佬指点我一下吗?
  • [Java] 测试麒麟服务器上JAVA环境构建
    #化鲲为鹏,我有话说# > 题外话:很高兴能够申请成功鲲鹏的公测,收到消息,第一时间申请了鲲鹏服务器,打算好好利用这段时间对鲲鹏服务器在企业应用可用性上进行测试,毕竟ARM和X86还是有很大差别的,很多企业级应用能否在鲲鹏上稳定运行,是否能够保证性能,是否可以适应技术架构及其中间件环境,是选择鲲鹏的一个重要的考量。本次我就先对java及其相关环境进行测试。这是我的第一帖,后续我还会持续对鲲鹏的测试反馈发帖交流。 首先,对于鲲鹏[官网介绍](https://www.huaweicloud.com/kunpeng/software/openjdk.html)其是支持OpenJDK环境的,但是在企业中,很少直接使用OpenJDK,而是使用oracle官方版本更多一些。那我就先在鲲鹏服务中先搭建jdk环境,本次测试使用的jdk8,分别安装OpenJDK和Oracle官方jdk环境。 ## 0. 试验环境 服务器规格: 鲲鹏通用计算增强型 | kc1.15xlarge.2 操作系统 : Ubuntu 18.04 64bit with ARM ## 1.OpenJDK 服务器初始系统中已经安装了OpenJDK,安装版本如下: ```bash openjdk version "1.8.0_212" OpenJDK Runtime Environment (build 1.8.0_212-8u212-b03-0ubuntu1.18.04.1-b03) OpenJDK 64-Bit Server VM (build 25.212-b03, mixed mode) ``` 如果你使用其他系统,可以参考[鲲鹏官方的安装说明](https://www.huaweicloud.com/kunpeng/software/openjdk.html) ## 2. Oracle官方版本 - 首先需要卸载鲲鹏上自带的openjdk ```bash apt-get autoremove openjdk-8-jdk ``` - 然后下载oracle官方jdk,这里时[下载地址](https://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8u211-later-5573849.html),这里需要注意,一定要下载RAM版本的jdk,否则无法运行。 - 加压并安装jdk ```bash tar -vzxf jdk-8u212-linux-arm64-vfp-hflt.tar.gz mv jdk1.8.0_212/ jdk vi /etc/profile # 在文件最后加上下面内容 export JAVA_HOME=/opt/jdk export PATH=$PATH:$JAVA_HOME/bin ``` - 验证是否安装成功 ```bash java -version # 看到以下内容说明已经安装完成 java version "1.8.0_212" Java(TM) SE Runtime Environment (build 1.8.0_212-b10) Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode) ``` ## 3.总结 可以看到,基于鲲鹏的JAVA环境安装过程和基于X86的安装过程并没有什么区别,而且无论从开源社区还是oracke官方都是支持ARM框架的JAVA环境。而JAVA是基于跨平台的,只要能够正常运行JAVA环境,那么基于JAVA的企业级应用,都可以很容易的迁移到麒麟服务器上。
  • [Java] Java基础入门
    化鲲为鹏,我有话说Java基础入门分为四步Java开发环境搭建Java初级之基础语法学习Java中级编程Java中级运用编程等基础语法掌握了就可以继续后面框架的学习了 努力会及格 拼命会优秀
  • [分享交流] 使用maven工程构建java 的hadoop客户端
    使用maven工程构建java 的hadoop客户端项目说明通过java操作hadoop中的hdfs分布式文件系统,首先我们要建新一个maven的java工程,然后在pom.xml导入hadoop的如果的依赖java包。再编写一个java的测试类去连接hadoop的集群环境。注意hadoop集群版本与导入hadoop-client的版本要一致,避免产生其它的问题。工程目录导入Maven的依赖包   <dependencies>        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>            <version>4.11</version>            <scope>test</scope>        </dependency>        <dependency>            <groupId>org.apache.hadoop</groupId>            <artifactId>hadoop-client</artifactId>            <version>3.0.0</version>        </dependency>    </dependencies>编写Java处理hadoop集群的测试类package net.togogo.hdfs; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.LocatedFileStatus; import org.apache.hadoop.fs.Path; import org.apache.hadoop.fs.RemoteIterator; import org.junit.Before; import org.junit.Test; import java.io.IOException; import java.net.URI; /** * 构建HdfsClient来操作hadoop集群 */ public class HdfsClient {    private FileSystem fs = null;    /**     * 构建分布式文件系统的操作对象FileSystem     */    @Before    public void init() {        System.out.println(" init methon start ....");        try {            Configuration conf = new Configuration();            //连接集群的地址            URI uri = new URI("hdfs://192.168.20.32:9000");            fs = FileSystem.get(uri, conf, "hd");            System.out.println("FileSystem---->" + fs);        } catch (Exception e) {            e.printStackTrace();        }        System.out.println(" init methon end ....");    }    /**     * 命令 hadoop fs -ls /     */    @Test    public void listRoot() {        try {            System.out.println("listRoot method ....");            //访问 hadoop fs -ls /            RemoteIterator it = fs.listFiles(new Path("/"), true);            //循环            while (it.hasNext()) {                LocatedFileStatus lf = it.next();                System.out.println(lf.getPath().getName());            }            fs.close();        } catch (Exception e) {            e.printStackTrace();        }    }    /**     * 命令 hadoop fs -mkdir /test0831     */    @Test    public void mkdir() {        try {            Path path = new Path("/test0831");            fs.mkdirs(path);            fs.close();        } catch (IOException e) {            e.printStackTrace();        }    }    /**     * 命令 hadoop fs -put F:/hello.log   /     */    @Test    public void upload() {        try {            Path src = new Path("F:/hello.log");            Path dst = new Path("/");            fs.copyFromLocalFile(src, dst);        } catch (IOException e) {            e.printStackTrace();        }    }    /**     * 命令 hadoop fs -get /hello.log  F:/dsthello.log     */    @Test    public void download() {        try {            Path src = new Path("/hello.log");            Path dst = new Path("F:/dsthello.log");            fs.copyToLocalFile(src, dst);        } catch (IOException e) {            e.printStackTrace();        }    } }腾科IT教育
  • [分享交流] 【Java TCP/IP Socket】TCP Socket
    TCP的Java支持     协议相当于相互通信的程序间达成的一种约定,它规定了分组报文的结构、交换方式、包含的意义以及怎样对报文所包含的信息进行解析,TCP/IP协议族有IP协议、TCP协议和UDP协议。现在TCP/IP协议族中的主要socket类型为流套接字(使用TCP协议)和数据报套接字(使用UDP协议)。    TCP协议提供面向连接的服务,通过它建立的是可靠地连接。Java为TCP协议提供了两个类:Socket类和ServerSocket类。一个Socket实例代表了TCP连接的一个客户端,而一个ServerSocket实例代表了TCP连接的一个服务器端,一般在TCP Socket编程中,客户端有多个,而服务器端只有一个,客户端TCP向服务器端TCP发送连接请求,服务器端的ServerSocket实例则**来自客户端的TCP连接请求,并为每个请求创建新的Socket实例,由于服务端在调用accept()等待客户端的连接请求时会阻塞,直到收到客户端发送的连接请求才会继续往下执行代码,因此要为每个Socket连接开启一个线程。服务器端要同时处理ServerSocket实例和Socket实例,而客户端只需要使用Socket实例。另外,每个Socket实例会关联一个InputStream和OutputStream对象,我们通过将字节写入套接字的OutputStream来发送数据,并通过从InputStream来接收数据。 TCP连接的建立步骤  客户端向服务器端发送连接请求后,就被动地等待服务器的响应。典型的TCP客户端要经过下面三步操作:     1、创建一个Socket实例:构造函数向指定的远程主机和端口建立一个TCP连接;   2.通过套接字的I/O流与服务端通信;   3、使用Socket类的close方法关闭连接。   服务端的工作是建立一个通信终端,并被动地等待客户端的连接。典型的TCP服务端执行如下两步操作:     1、创建一个ServerSocket实例并指定本地端口,用来**客户端在该端口发送的TCP连接请求;     2、重复执行:           1)调用ServerSocket的accept()方法以获取客户端连接,并通过其返回值创建一个Socket实例;           2)为返回的Socket实例开启新的线程,并使用返回的Socket实例的I/O流与客户端通信;           3)通信完成后,使用Socket类的close()方法关闭该客户端的套接字连接。 TCP Socket Demo     下面给出一个客户端服务端TCP通信的Demo,该客户端在20006端口请求与服务端建立TCP连接,客户端不断接收键盘输入,并将其发送到服务端,服务端在接收到的数据前面加上“echo”字符串,并将组合后的字符串发回给客户端,如此循环,直到客户端接收到键盘输入“bye”为止。     客户端代码如下:  package zyb.org.client; import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintStream;import java.net.Socket;import java.net.SocketTimeoutException; public class Client1 {        public static void main(String[] args) throws IOException {               //客户端请求与本机在20006端口建立TCP连接               Socket client = new Socket("127.0.0.1", 20006);               client.setSoTimeout(10000);               //获取键盘输入               BufferedReader input = new BufferedReader(new InputStreamReader(System.in));               //获取Socket的输出流,用来发送数据到服务端               PrintStream out = new PrintStream(client.getOutputStream());               //获取Socket的输入流,用来接收从服务端发送过来的数据               BufferedReader buf =  new BufferedReader(new InputStreamReader(client.getInputStream()));               boolean flag = true;               while(flag){                       System.out.print("输入信息:");                       String str = input.readLine();                       //发送数据到服务端                       out.println(str);                       if("bye".equals(str)){                               flag = false;                       }else{                               try{                                      //从服务器端接收数据有个时间限制(系统自设,也可以自己设置),超过了这个时间,便会抛出该异常                                      String echo = buf.readLine();                                      System.out.println(echo);                               }catch(SocketTimeoutException e){                                      System.out.println("Time out, No response");                               }                       }               }               input.close();               if(client != null){                //如果构造函数建立起了连接,则关闭套接字,如果没有建立起连接,自然不用关闭                       client.close(); //只关闭socket,其关联的输入输出流也会被关闭               }        }}     服务端需要用到多线程,这里单独写了一个多线程类,代码如下: package zyb.org.server; import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.PrintStream;import java.net.Socket; /** * 该类为多线程类,用于服务端 */public class ServerThread implements Runnable {         private Socket client = null;        public ServerThread(Socket client){               this.client = client;        }                @Override        public void run() {               try{                       //获取Socket的输出流,用来向客户端发送数据                       PrintStream out = new PrintStream(client.getOutputStream());                       //获取Socket的输入流,用来接收从客户端发送过来的数据                       BufferedReader buf = new BufferedReader(new InputStreamReader(client.getInputStream()));                       boolean flag =true;                       while(flag){                               //接收从客户端发送过来的数据                               String str =  buf.readLine();                               if(str == null || "".equals(str)){                                       flag = false;                               }else{                                      if("bye".equals(str)){                                              flag = false;                                      }else{                                              //将接收到的字符串前面加上echo,发送到对应的客户端                                              out.println("echo:" + str);                                      }                               }                       }                       out.close();                       client.close();               }catch(Exception e){                       e.printStackTrace();               }        } }    服务端处理TCP连接请求的代码如下:package zyb.org.server; import java.net.ServerSocket;import java.net.Socket; public class Server1 {        public static void main(String[] args) throws Exception{               //服务端在20006端口**客户端请求的TCP连接               ServerSocket server = new ServerSocket(20006);               Socket client = null;               boolean f = true;               while(f){                       //等待客户端的连接,如果没有获取连接                       client = server.accept();                       System.out.println("与客户端连接成功!");                       //为每个客户端连接开启一个线程                       new Thread(new ServerThread(client)).start();               }               server.close();        }}     执行结果截图如下:(转载自http://3ms.huawei.com/km/blogs/details/6038177)
  • [产品体验官] 华为云 GES 图引擎服务体验及评测by陈晓—成都—java开发
    测评报告在附件中,有什么思想的碰撞欢迎留言奥!
  • [技术干货] 北向JAVA应用调试(对接电信平台失败)——取消证书校验
    关于JAVA 北向这块打算分两个帖子来说明一下最近遇到的问题:1、Demo工程无法对接电信平台(证书问题)2、JAVA SDK无法在android中使用。这个帖子我们先只讨论第一个问题:将Demo工程中平台IP改成电信平台的IP,运行出错,问题现象: executeHttpRequest failed.Exception in thread "main" java.lang.NullPointerExceptionat com.huawei.utils.StreamClosedHttpResponse.<init>(StreamClosedHttpResponse.java:36)at com.huawei.utils.HttpsUtil.executeHttpRequest(HttpsUtil.java:361)at com.huawei.utils.HttpsUtil.doPostFormUrlEncodedGetStatusLine(HttpsUtil.java:223)at com.huawei.service.appAccessSecurity.Authentication.main(Authentication.java:31)原因: 电信在2019-3月之后,将平台的证书做了更换,所以在SSL校验的时候,证书校验不通过,导致了如上问题:解决方法有两种:    1、将ca.jks文件替换成电信平台的,可以从电信平台的java sdk中获取。    2、取消证书校验。方法如下:  打开HttpsUtil.java文件,在HttpsUtil 类中添加如下代码:   private  TrustManager truseAllManager = new X509TrustManager() {     public java.security.cert.X509Certificate[] getAcceptedIssuers()     {         return null;     }     @Override     public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType)             throws java.security.cert.CertificateException     {     }     @Override     public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType)             throws java.security.cert.CertificateException     {     } };将  sc.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);替换为:sc.init(kmf.getKeyManagers(), new TrustManager[] { truseAllManager }, null);如此,便可取消对服务器证书的校验,我们在调试阶段,避免频繁更换证书而影响后续的工作。
  • [问题求助] JAVA 北向sdk在android app中使用提示找不到证书
    1、从官网下载的JAVA SDK,使用调测证书的方式,把demo跑通了。SDK的jar包反编译后可以看到根下有调试证书文件。2、android studio新建app工程,把SDK加入工程,参照demo的用法,使用默认的ssl配置,实现了鉴权接口,但是调试的时候,app一直报错:NorthApiException [error_code=1006, error_desc=Ssl config error, please check the certificate path, httpStatusCode=-1, httpReasonPhase=, httpMessage=sunx509 KeyManagerFactory not available]从日志上看好像是证书路径不对,但是证书明明在jar包里面呀。而且这个jar包在电脑上可以运行,请问这是什么原因呢?3、后来我又尝试把证书文件放到assets目录下,显式地指定了证书路径,但还是不行,报告找不到文件
  • [技术干货] 求解答: java.lang.NoClassDefFoundError: Could not initialize class com.obs.services.internal.Constants
    为什么上传文件再Linux服务器总是报这个异常,在开发环境Windows环境又不会。求解答。java.lang.NoClassDefFoundError: Could not initialize class com.obs.services.internal.Constants
  • [产品体验官] 华为云EI基础平台ModelArts体验任务B测评报告 by 陈晓—成都—java开发
    测评报告上传到附件中,欢迎小伙伴们指导奥!
  • [热门活动] Maven构建java工程操作hdfs实例
    Maven构建java工程操作hdfs实例腾科教育以为理论+实操为主的教学,带你进入大数据开发基础。每一步都带着你,让你一步一步实现自已的大数据开发梦想。构建maven工程 导入maven类包 <dependencies>     <dependency>       <groupId>junit</groupId>       <artifactId>junit</artifactId>       <version>4.11</version>       <scope>test</scope>     </dependency>     <dependency>       <groupId>org.apache.hadoop</groupId>       <artifactId>hadoop-client</artifactId>       <version>2.8.1</version>     </dependency>   </dependencies>编写Junit单元测试类package net.togogo.hdfsproject;   import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.*; import org.junit.Before; import org.junit.Test;   import java.io.FileNotFoundException; import java.io.IOException; import java.net.URI;   public class HdfsClientTest {     FileSystem fs = null;       @Before     public void init() throws Exception {           // 构造一个配置参数对象,设置一个参数:我们要访问的hdfs的URI         // 从而FileSystem.get()方法就知道应该是去构造一个访问hdfs文件系统的客户端,以及hdfs的访问地址         // new Configuration();的时候,它就会去加载jar包中的hdfs-default.xml         // 然后再加载classpath下的hdfs-site.xml         Configuration conf = new Configuration();         conf.set("fs.defaultFS", "hdfs://192.168.75.129:9000");         /**          * 参数优先级: 1、客户端代码中设置的值 2、classpath下的用户自定义配置文件 3、然后是服务器的默认配置          */         conf.set("dfs.replication", "3");           // 获取一个hdfs的访问客户端,根据参数,这个实例应该是DistributedFileSystem的实例         // fs = FileSystem.get(conf);           // 如果这样去获取,那conf里面就可以不要配"fs.defaultFS"参数,而且,这个客户端的身份标识已经是hadoop用户         fs = FileSystem.get(new URI("hdfs://192.168.75.129:9000"), conf, "hadoop");       }       @Test     public void testAddFileToHdfs(){         // 要上传的文件所在的本地路径         Path src = new Path("D:\\stone\\HCNA-AI\\images\\idcard.jpg");         // 要上传到hdfs的目标路径         Path dst = new Path("/togogo/idcard.jpg");         try {             fs.copyFromLocalFile(src,dst);             System.out.println("文件上传成功...");         } catch (IOException e) {             e.printStackTrace();         }     }       @Test     public void testDelFileFromHdfs(){         // 要上传到hdfs的目标路径         Path dst = new Path("/togogo/work");         try {            fs.delete(dst,true);             System.out.println("文件删除成功...");         } catch (IOException e) {             e.printStackTrace();         }     }       /**      * 查看目录信息,只显示文件      *      * @throws IOException      * @throws IllegalArgumentException      * @throws FileNotFoundException      */     @Test     public void testListFiles() throws FileNotFoundException, IllegalArgumentException, IOException {           // 思考:为什么返回迭代器,而不是List之类的容器         RemoteIterator           while (listFiles.hasNext()) {             LocatedFileStatus fileStatus = listFiles.next();             System.out.println(fileStatus.getPath().getName());             System.out.println(fileStatus.getBlockSize());             System.out.println(fileStatus.getPermission());             System.out.println(fileStatus.getLen());             BlockLocation[] blockLocations = fileStatus.getBlockLocations();             for (BlockLocation bl : blockLocations) {                 System.out.println("block-length:" + bl.getLength() + "--" + "block-offset:" + bl.getOffset());                 String[] hosts = bl.getHosts();                 for (String host : hosts) {                     System.out.println(host);                 }             }             System.out.println("--------------为angelababy打印的分割线--------------");         }     }       /**      * 查看文件及文件夹信息      *      * @throws IOException      * @throws IllegalArgumentException      * @throws FileNotFoundException      */     @Test     public void testListAll() throws FileNotFoundException, IllegalArgumentException, IOException {           FileStatus[] listStatus = fs.listStatus(new Path("/"));           String flag = "d--             ";         for (FileStatus fstatus : listStatus) {             if (fstatus.isFile())  flag = "f--         ";             System.out.println(flag + fstatus.getPath().getName());         }     } }
  • [管理与监控] 【华为云鲲鹏云服务最佳实践】【工具篇】第009期 logstash 7.2 安装配置指南
    1、简介      Logstash是一个开源的日志收集管理工具,是一个具有实时管道功能的开源数据收集引擎,Logstash可以动态地将来自不同数据源的数据统一起来,并将数据规范化为自己选择的目的地,清理和大众化所有数据,用于各种高级下游分析和可视化用例。      官方链接:http://www.elastic.co/cn/products/logstash       类别:数据采集2、基础环境类别子项版本获取地址(方法)华为云虚拟机RC3(916)--OSCentOS7.5 Kernel4.14 软件包Java1.8.0 Logstash7.2.0 3、依赖安装要使用Logstash,需要Java7以后的环境,所以首先需要下载对应的JDK环境。查看java版本,运行下面的命令:java -version如果环境已经正常安装java,会出现如下的输出结果:openjdk version "1.8.0_212"OpenJDK Runtime Environment (build 1.8.0_212-b04)OpenJDK 64-Bit Server VM (build 25.212-b04, mixed mode) 4、组件编译安装   下载并安装公钥rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch   在/etc/yum.repos.d/目录下创建文件logstash.repo,添加下面配置[logstash-7.x]name=Elastic repository for 7.x packagesbaseurl=https://artifacts.elastic.co/packages/7.x/yumgpgcheck=1gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearchenabled=1autorefresh=1type=rpm-md   接下来安装使用,使用下面的命令来进行安装sudo yum install logstash   版本检查。如果编译成功,会正确显示版本。rpm -qa|grep logstash5、系统配置无6、测试使用如下命令启动服务并查看服务状态。如果为active状态,则表示服务启动成功。systemctl start logstash.servicesystemctl status logstash.service 7、参考信息官方文档指导:https://www.elastic.co/guide/en/logstash/current/installing-logstash.html#package-repositories 8、FAQ无
  • [中间件] 【华为云鲲鹏云服务最佳实践】【Web篇】第001期 Tomcat 9.0.21 安装配置指南
    1、简介      Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。目前最新版本是9.0。      Tomcat服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。。      官方链接:http://tomcat.apache.org/      类别:Web服务2、基础环境类别子项版本获取地址(方法)华为云虚拟机RC3(916)--OSCentOS7.5 Kernel4.14 软件包Jdk1.8.0 Tomcat9.0.21 3、依赖安装参考《华为云鲲鹏云服务最佳实践-JDK-1.8.0 安装配置指南》4、组件编译安装下载tomcatwget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.21/bin/apache-tomcat-9.0.21.tar.gz解压tar -xvzf apache-tomcat-9.0.21.tar.gz5、系统配置无6、测试  测试内容:tomcat服务是否正常启动  测试结果:服务正常启动7、参考信息官方文档:http://tomcat.apache.org/tomcat-9.0-doc/index.html8、FAQA:tomcat的默认端口号为8080,如果有其他软件占用了此端口,则会导致tomcat不能启动Q:用FPort等软件查看端口使用情况,然后结束占用端口的进程或配置其改用其它端口
  • [Java] 【华为云鲲鹏云服务最佳实践】【语言篇】第004期 OpenJDK-11.0.3 安装配置指南
    1、简介     JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。     类别:工具包2、基础环境类别子项版本获取地址(方法)华为云虚拟机RC3(916)--OSCentOS7.5  Kernel4.14 软件包Jdk11.0.3 3、依赖安装无4、组件编译安装   在yum源中查找jdk列表yum list | grep jdk查出结果:在yum源中进行安装yum install java-11-openjdk.aarch645、系统配置无6、测试测试内容:JDK安装是否成功java -version测试结果:7、参考信息无8、FAQLinux在同时拥有两个jdk的情况下,可以进行两个jdk之间的切换alternatives --config java 输入所需要的jdk版本所属号,即可进行切换
  • [产品体验官] 华为云SQL Server产品体验及评测 by 陈晓—成都—java开发
    测评文件为PDF版,详情查看附件奥!欢迎小伙伴们点评
总条数:2301 到第 页
上滑加载中