当前位置: 首页 > news >正文

建网站主要工具代运营套餐价格表

建网站主要工具,代运营套餐价格表,今天热点新闻,做网站原型的简单工具概述 Join:内连接 CoGroup#xff1a;内连接#xff0c;左连接#xff0c;右连接 Interval Join#xff1a;点对面 Join 1、Join 将有相同 Key 并且位于同一窗口中的两条流的元素进行关联。 2、Join 可以支持处理时间#xff08;processing time#xff09;和事件时…概述 Join:内连接 CoGroup内连接左连接右连接 Interval Join点对面 Join 1、Join 将有相同 Key 并且位于同一窗口中的两条流的元素进行关联。 2、Join 可以支持处理时间processing time和事件时间(event time)两种时间特征。 3、Join 通用用法如下stream.join(otherStream).where(KeySelector).equalTo(KeySelector).window(WindowAssigner).apply(JoinFunction) 滚动窗口 package com.bigdata.day07;import org.apache.commons.lang3.time.DateUtils; import org.apache.flink.api.common.eventtime.SerializableTimestampAssigner; import org.apache.flink.api.common.eventtime.WatermarkStrategy; import org.apache.flink.api.common.functions.JoinFunction; import org.apache.flink.api.common.functions.MapFunction; import org.apache.flink.api.java.functions.KeySelector; import org.apache.flink.api.java.tuple.Tuple3; import org.apache.flink.streaming.api.datastream.DataStream; import org.apache.flink.streaming.api.datastream.DataStreamSource; import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.streaming.api.windowing.assigners.TumblingEventTimeWindows; import org.apache.flink.streaming.api.windowing.time.Time;import java.text.ParseException; import java.time.Duration; import java.util.Date;/*** 内连接* 可以通过两个socket流将数据合并为一个三元组key,value1,value2*/ public class _01_双流join_join_内连接 {public static void main(String[] args) throws Exception {StreamExecutionEnvironment env StreamExecutionEnvironment.getExecutionEnvironment();env.setParallelism(1);// 绿色的流DataStreamSourceString source env.socketTextStream(localhost, 7777);SingleOutputStreamOperatorTuple3String, Integer, String greenSource source.map(new MapFunctionString, Tuple3String, Integer, String() {Overridepublic Tuple3String, Integer, String map(String line) throws Exception {String[] split line.split(,);return Tuple3.of(split[0], Integer.valueOf(split[1]), split[2]);}}).assignTimestampsAndWatermarks(WatermarkStrategy.Tuple3String, Integer, StringforBoundedOutOfOrderness(Duration.ofSeconds(3)).withTimestampAssigner(new SerializableTimestampAssignerTuple3String, Integer, String() {Overridepublic long extractTimestamp(Tuple3String, Integer, String tuple3, long recordTimestamp) {String timeStr tuple3.f2;try {Date date DateUtils.parseDate(timeStr, yyyy-MM-dd hh-mm-ss);return date.getTime();} catch (ParseException e) {throw new RuntimeException(e);}}}));// 红色的流DataStreamSourceString source2 env.socketTextStream(localhost, 7778);SingleOutputStreamOperatorTuple3String, Integer, String redSource source2.map(new MapFunctionString, Tuple3String, Integer, String() {Overridepublic Tuple3String, Integer, String map(String line) throws Exception {String[] split line.split(,);return Tuple3.of(split[0], Integer.valueOf(split[1]), split[2]);}}).assignTimestampsAndWatermarks(WatermarkStrategy.Tuple3String, Integer, StringforBoundedOutOfOrderness(Duration.ofSeconds(3)).withTimestampAssigner(new SerializableTimestampAssignerTuple3String, Integer, String() {Overridepublic long extractTimestamp(Tuple3String, Integer, String tuple3, long recordTimestamp) {String timeStr tuple3.f2;try {Date date DateUtils.parseDate(timeStr, yyyy-MM-dd hh-mm-ss);return date.getTime();} catch (ParseException e) {throw new RuntimeException(e);}}}));// 双流joinDataStreamTuple3String, Integer, Integer rsSource greenSource.join(redSource).where(new KeySelectorTuple3String, Integer, String, String() {Overridepublic String getKey(Tuple3String, Integer, String tuple3) throws Exception {return tuple3.f0;}}).equalTo(new KeySelectorTuple3String, Integer, String, String() {Overridepublic String getKey(Tuple3String, Integer, String tuple3) throws Exception {return tuple3.f0;}// 滚动窗口}).window(TumblingEventTimeWindows.of(Time.seconds(5))).apply(new JoinFunctionTuple3String, Integer, String, Tuple3String, Integer, String, Tuple3String, Integer, Integer() {Overridepublic Tuple3String, Integer, Integer join(Tuple3String, Integer, String first, Tuple3String, Integer, String second) throws Exception {return Tuple3.of(first.f0, first.f1, second.f1);}});redSource.print(红色的流);greenSource.print(绿色的流);rsSource.print(合并后的流);env.execute();} } 滑动窗口 package com.bigdata.day07;import org.apache.flink.api.common.RuntimeExecutionMode; import org.apache.flink.api.common.eventtime.SerializableTimestampAssigner; import org.apache.flink.api.common.eventtime.WatermarkStrategy; import org.apache.flink.api.common.functions.JoinFunction; import org.apache.flink.api.common.functions.MapFunction; import org.apache.flink.api.java.tuple.Tuple3; import org.apache.flink.streaming.api.datastream.DataStream; import org.apache.flink.streaming.api.datastream.DataStreamSource; import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.streaming.api.windowing.assigners.SlidingEventTimeWindows; import org.apache.flink.streaming.api.windowing.assigners.TumblingEventTimeWindows; import org.apache.flink.streaming.api.windowing.time.Time;import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.Duration; import java.util.Date;/*** 基本功能: 演示join的滑动窗口* program:FlinkDemo* author: 闫哥* create:2024-05-20 09:11:13**/ public class Demo02Join {public static void main(String[] args) throws Exception {//1. env-准备环境StreamExecutionEnvironment env StreamExecutionEnvironment.getExecutionEnvironment();env.setRuntimeMode(RuntimeExecutionMode.AUTOMATIC);// 将并行度设置为1,否则很难看到现象env.setParallelism(1);// 创建一个绿色的流DataStreamSourceString greenSource env.socketTextStream(localhost, 8899);// key,0,2021-03-26 12:09:00 将它变为三元组SingleOutputStreamOperatorTuple3String, Integer, String greenDataStream greenSource.map(new MapFunctionString, Tuple3String, Integer, String() {Overridepublic Tuple3String, Integer, String map(String value) throws Exception {String[] arr value.split(,);return new Tuple3(arr[0], Integer.valueOf(arr[1]), arr[2]);}}).assignTimestampsAndWatermarks(WatermarkStrategy.Tuple3String, Integer, StringforBoundedOutOfOrderness(Duration.ofSeconds(3))// 为什么这个地方的代码比之前要长原因是以前获取的数据都是long类型并且都是毫秒值.withTimestampAssigner(new SerializableTimestampAssignerTuple3String, Integer, String() {Overridepublic long extractTimestamp(Tuple3String, Integer, String element, long recordTimestamp) {// 指定你的数据中哪一个是时间戳并且时间戳必须是long类型必须是毫秒为单位的。String time element.f2; //2021-03-26 12:09:00SimpleDateFormat sdf new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);try {Date date sdf.parse(time);return date.getTime();} catch (ParseException e) {throw new RuntimeException(e);}}}));// 创建一个橘色的流DataStreamSourceString orangeSource env.socketTextStream(localhost, 9988);// key,0,2021-03-26 12:09:00 将它变为三元组SingleOutputStreamOperatorTuple3String, Integer, String orangeDataStream orangeSource.map(new MapFunctionString, Tuple3String, Integer, String() {Overridepublic Tuple3String, Integer, String map(String value) throws Exception {String[] arr value.split(,);return new Tuple3(arr[0], Integer.valueOf(arr[1]), arr[2]);}}).assignTimestampsAndWatermarks(WatermarkStrategy.Tuple3String, Integer, StringforBoundedOutOfOrderness(Duration.ofSeconds(3))// 为什么这个地方的代码比之前要长原因是以前获取的数据都是long类型并且都是毫秒值.withTimestampAssigner(new SerializableTimestampAssignerTuple3String, Integer, String() {Overridepublic long extractTimestamp(Tuple3String, Integer, String element, long recordTimestamp) {// 指定你的数据中哪一个是时间戳并且时间戳必须是long类型必须是毫秒为单位的。String time element.f2; //2021-03-26 12:09:00SimpleDateFormat sdf new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);try {Date date sdf.parse(time);return date.getTime();} catch (ParseException e) {throw new RuntimeException(e);}}}));//2. source-加载数据//3. transformation-数据处理转换DataStreamTuple3String, Integer, Integer resultStream greenDataStream.join(orangeDataStream).where(tuple3 - tuple3.f0).equalTo(tuple3 - tuple3.f0)// 滑动窗口.window(SlidingEventTimeWindows.of(Time.seconds(5),Time.seconds(1))).apply(new JoinFunctionTuple3String, Integer, String, Tuple3String, Integer, String, Tuple3String, Integer, Integer() {Overridepublic Tuple3String, Integer, Integer join(Tuple3String, Integer, String first, Tuple3String, Integer, String second) throws Exception {return Tuple3.of(first.f0, first.f1, second.f1);}});//4. sink-数据输出greenDataStream.print(绿色的流);orangeDataStream.print(橘色的流);resultStream.print(最终的结果);//5. execute-执行env.execute();} } CoGroup 1、优势可以实现内连接左连接右连接 2、劣势内存压力大 3、和上面的写法区别将join换成coGroupapply中实现的具体方法有区别 4、流程 stream.coGroup(otherStream).where(KeySelector).equalTo(KeySelector).window(WindowAssigner).apply(CoGroupFunction); 内连接 package com.bigdata.day07;import org.apache.commons.lang3.time.DateUtils; import org.apache.flink.api.common.eventtime.SerializableTimestampAssigner; import org.apache.flink.api.common.eventtime.WatermarkStrategy; import org.apache.flink.api.common.functions.CoGroupFunction; import org.apache.flink.api.common.functions.JoinFunction; import org.apache.flink.api.common.functions.MapFunction; import org.apache.flink.api.java.functions.KeySelector; import org.apache.flink.api.java.tuple.Tuple3; import org.apache.flink.streaming.api.datastream.DataStream; import org.apache.flink.streaming.api.datastream.DataStreamSource; import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.streaming.api.windowing.assigners.TumblingEventTimeWindows; import org.apache.flink.streaming.api.windowing.time.Time; import org.apache.flink.util.Collector;import java.text.ParseException; import java.time.Duration; import java.util.Date;/*** 内连接*/ public class _02_双流join_CoGroup_内连接 {public static void main(String[] args) throws Exception {StreamExecutionEnvironment env StreamExecutionEnvironment.getExecutionEnvironment();env.setParallelism(1);// 绿色的流DataStreamSourceString source env.socketTextStream(localhost, 7777);SingleOutputStreamOperatorTuple3String, Integer, String greenSource source.map(new MapFunctionString, Tuple3String, Integer, String() {Overridepublic Tuple3String, Integer, String map(String line) throws Exception {String[] split line.split(,);return Tuple3.of(split[0], Integer.valueOf(split[1]), split[2]);}}).assignTimestampsAndWatermarks(WatermarkStrategy.Tuple3String, Integer, StringforBoundedOutOfOrderness(Duration.ofSeconds(3)).withTimestampAssigner(new SerializableTimestampAssignerTuple3String, Integer, String() {Overridepublic long extractTimestamp(Tuple3String, Integer, String tuple3, long recordTimestamp) {String timeStr tuple3.f2;try {Date date DateUtils.parseDate(timeStr, yyyy-MM-dd hh-mm-ss);return date.getTime();} catch (ParseException e) {throw new RuntimeException(e);}}}));// 红色的流DataStreamSourceString source2 env.socketTextStream(localhost, 7778);SingleOutputStreamOperatorTuple3String, Integer, String redSource source2.map(new MapFunctionString, Tuple3String, Integer, String() {Overridepublic Tuple3String, Integer, String map(String line) throws Exception {String[] split line.split(,);return Tuple3.of(split[0], Integer.valueOf(split[1]), split[2]);}}).assignTimestampsAndWatermarks(WatermarkStrategy.Tuple3String, Integer, StringforBoundedOutOfOrderness(Duration.ofSeconds(3)).withTimestampAssigner(new SerializableTimestampAssignerTuple3String, Integer, String() {Overridepublic long extractTimestamp(Tuple3String, Integer, String tuple3, long recordTimestamp) {String timeStr tuple3.f2;try {Date date DateUtils.parseDate(timeStr, yyyy-MM-dd hh-mm-ss);return date.getTime();} catch (ParseException e) {throw new RuntimeException(e);}}}));// 连接DataStreamTuple3String, String, String rsSource greenSource.coGroup(redSource).where(new KeySelectorTuple3String, Integer, String, String() {Overridepublic String getKey(Tuple3String, Integer, String tuple3) throws Exception {return tuple3.f0;}}).equalTo(new KeySelectorTuple3String, Integer, String, String() {Overridepublic String getKey(Tuple3String, Integer, String tuple3) throws Exception {return tuple3.f0;}}).window(TumblingEventTimeWindows.of(Time.seconds(5))).apply(new CoGroupFunctionTuple3String, Integer, String, Tuple3String, Integer, String, Tuple3String, String, String() {Overridepublic void coGroup(IterableTuple3String, Integer, String first, IterableTuple3String, Integer, String second, CollectorTuple3String, String, String out) throws Exception {for (Tuple3String, Integer, String firesTuple3 : first) {for (Tuple3String, Integer, String secondTuple3 : second) {out.collect(Tuple3.of(firesTuple3.f0,greenfiresTuple3.f1,redsecondTuple3.f1));}}}});redSource.print(红色的流);greenSource.print(绿色的流);rsSource.print(合并后的流);env.execute();} } 外连接 package com.bigdata.day07;import org.apache.commons.lang3.time.DateUtils; import org.apache.flink.api.common.eventtime.SerializableTimestampAssigner; import org.apache.flink.api.common.eventtime.WatermarkStrategy; import org.apache.flink.api.common.functions.CoGroupFunction; import org.apache.flink.api.common.functions.MapFunction; import org.apache.flink.api.java.functions.KeySelector; import org.apache.flink.api.java.tuple.Tuple3; import org.apache.flink.streaming.api.datastream.DataStream; import org.apache.flink.streaming.api.datastream.DataStreamSource; import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.streaming.api.windowing.assigners.TumblingEventTimeWindows; import org.apache.flink.streaming.api.windowing.time.Time; import org.apache.flink.util.Collector;import java.text.ParseException; import java.time.Duration; import java.util.Date;/*** 外连接*/ public class _03_双流join_CoGroup_外连接 {public static void main(String[] args) throws Exception {StreamExecutionEnvironment env StreamExecutionEnvironment.getExecutionEnvironment();env.setParallelism(1);// 绿色的流DataStreamSourceString source env.socketTextStream(localhost, 7777);SingleOutputStreamOperatorTuple3String, Integer, String greenSource source.map(new MapFunctionString, Tuple3String, Integer, String() {Overridepublic Tuple3String, Integer, String map(String line) throws Exception {String[] split line.split(,);return Tuple3.of(split[0], Integer.valueOf(split[1]), split[2]);}}).assignTimestampsAndWatermarks(WatermarkStrategy.Tuple3String, Integer, StringforBoundedOutOfOrderness(Duration.ofSeconds(3)).withTimestampAssigner(new SerializableTimestampAssignerTuple3String, Integer, String() {Overridepublic long extractTimestamp(Tuple3String, Integer, String tuple3, long recordTimestamp) {String timeStr tuple3.f2;try {Date date DateUtils.parseDate(timeStr, yyyy-MM-dd hh-mm-ss);return date.getTime();} catch (ParseException e) {throw new RuntimeException(e);}}}));// 红色的流DataStreamSourceString source2 env.socketTextStream(localhost, 7778);SingleOutputStreamOperatorTuple3String, Integer, String redSource source2.map(new MapFunctionString, Tuple3String, Integer, String() {Overridepublic Tuple3String, Integer, String map(String line) throws Exception {String[] split line.split(,);return Tuple3.of(split[0], Integer.valueOf(split[1]), split[2]);}}).assignTimestampsAndWatermarks(WatermarkStrategy.Tuple3String, Integer, StringforBoundedOutOfOrderness(Duration.ofSeconds(3)).withTimestampAssigner(new SerializableTimestampAssignerTuple3String, Integer, String() {Overridepublic long extractTimestamp(Tuple3String, Integer, String tuple3, long recordTimestamp) {String timeStr tuple3.f2;try {Date date DateUtils.parseDate(timeStr, yyyy-MM-dd hh-mm-ss);return date.getTime();} catch (ParseException e) {throw new RuntimeException(e);}}}));DataStreamTuple3String, String, String rsSource greenSource.coGroup(redSource).where(new KeySelectorTuple3String, Integer, String, String() {Overridepublic String getKey(Tuple3String, Integer, String tuple3) throws Exception {return tuple3.f0;}}).equalTo(new KeySelectorTuple3String, Integer, String, String() {Overridepublic String getKey(Tuple3String, Integer, String tuple3) throws Exception {return tuple3.f0;}}).window(TumblingEventTimeWindows.of(Time.seconds(5))).apply(new CoGroupFunctionTuple3String, Integer, String, Tuple3String, Integer, String, Tuple3String, String, String() {Overridepublic void coGroup(IterableTuple3String, Integer, String first, IterableTuple3String, Integer, String second, CollectorTuple3String, String, String out) throws Exception {// 内连接左连接右连接的区别只在这里面存在两层循环for (Tuple3String, Integer, String firesTuple3 : first) {boolean isExist false;for (Tuple3String, Integer, String secondTuple3 : second) {isExist true;out.collect(Tuple3.of(firesTuple3.f0,greenfiresTuple3.f1,redsecondTuple3.f1));}if (!isExist){out.collect(Tuple3.of(firesTuple3.f0,greenfiresTuple3.f1,red null));}}}});redSource.print(红色的流);greenSource.print(绿色的流);rsSource.print(合并后的流);env.execute();} } Interval Join 1、Join以及CoGroup 原因是 Join和CoGroup是窗口Join必须给定窗口 2、Interval Join不需要给窗口。Interval Join 必须先分组才能使用。 3、先对数据源进行keyBy 4、 外流.intervalJoin内流.between(-2,2).processbetween 左不包右包 内部的流为下面的流取单个值 代码实现 package com.bigdata.day07;import org.apache.commons.lang3.time.DateUtils; import org.apache.flink.api.common.eventtime.SerializableTimestampAssigner; import org.apache.flink.api.common.eventtime.WatermarkStrategy; import org.apache.flink.api.common.functions.CoGroupFunction; import org.apache.flink.api.common.functions.MapFunction; import org.apache.flink.api.java.functions.KeySelector; import org.apache.flink.api.java.tuple.Tuple3; import org.apache.flink.streaming.api.datastream.DataStream; import org.apache.flink.streaming.api.datastream.DataStreamSource; import org.apache.flink.streaming.api.datastream.KeyedStream; import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.streaming.api.functions.co.ProcessJoinFunction; import org.apache.flink.streaming.api.windowing.assigners.TumblingEventTimeWindows; import org.apache.flink.streaming.api.windowing.time.Time; import org.apache.flink.util.Collector;import java.text.ParseException; import java.time.Duration; import java.util.Date;public class _04_双流join_Interval_Join {public static void main(String[] args) throws Exception {StreamExecutionEnvironment env StreamExecutionEnvironment.getExecutionEnvironment();env.setParallelism(1);//绿色的流DataStreamSourceString source env.socketTextStream(localhost, 7777);KeyedStreamTuple3String, Integer, String, String greenSource source.map(new MapFunctionString, Tuple3String, Integer, String() {Overridepublic Tuple3String, Integer, String map(String line) throws Exception {String[] split line.split(,);return Tuple3.of(split[0], Integer.valueOf(split[1]), split[2]);}// 水印}).assignTimestampsAndWatermarks(WatermarkStrategy.Tuple3String, Integer, StringforBoundedOutOfOrderness(Duration.ofSeconds(3)).withTimestampAssigner(new SerializableTimestampAssignerTuple3String, Integer, String() {Overridepublic long extractTimestamp(Tuple3String, Integer, String tuple3, long recordTimestamp) {String timeStr tuple3.f2;try {Date date DateUtils.parseDate(timeStr, yyyy-MM-dd hh-mm-ss);return date.getTime();} catch (ParseException e) {throw new RuntimeException(e);}}// keyBy})).keyBy(new KeySelectorTuple3String, Integer, String, String() {Overridepublic String getKey(Tuple3String, Integer, String tuple3) throws Exception {return tuple3.f0;}});// 红色的流DataStreamSourceString source2 env.socketTextStream(localhost, 7778);KeyedStreamTuple3String, Integer, String, String redSource source2.map(new MapFunctionString, Tuple3String, Integer, String() {Overridepublic Tuple3String, Integer, String map(String line) throws Exception {String[] split line.split(,);return Tuple3.of(split[0], Integer.valueOf(split[1]), split[2]);}// 水印}).assignTimestampsAndWatermarks(WatermarkStrategy.Tuple3String, Integer, StringforBoundedOutOfOrderness(Duration.ofSeconds(3)).withTimestampAssigner(new SerializableTimestampAssignerTuple3String, Integer, String() {Overridepublic long extractTimestamp(Tuple3String, Integer, String tuple3, long recordTimestamp) {String timeStr tuple3.f2;try {Date date DateUtils.parseDate(timeStr, yyyy-MM-dd hh-mm-ss);return date.getTime();} catch (ParseException e) {throw new RuntimeException(e);}}// 分组})).keyBy(new KeySelectorTuple3String, Integer, String, String() {Overridepublic String getKey(Tuple3String, Integer, String tuple3) throws Exception {return tuple3.f0;}});// 实现SingleOutputStreamOperatorString rsSource greenSource.intervalJoin(redSource).between(Time.seconds(-2), Time.seconds(2)).process(new ProcessJoinFunctionTuple3String, Integer, String, Tuple3String, Integer, String, String() {Overridepublic void processElement(Tuple3String, Integer, String left, Tuple3String, Integer, String right, ProcessJoinFunctionTuple3String, Integer, String, Tuple3String, Integer, String, String.Context ctx, CollectorString out) throws Exception {out.collect(left中的key:left.f0,valueleft.f1,timeleft.f2,right中的key:right.f0,valueright.f1,timeright.f2);}});redSource.print(红色的流);greenSource.print(绿色的流);rsSource.print(合并后的流);env.execute(); /*** 红色的为下面的流* 范围* 假如现在是10* 9 10 11 12*/} }
http://www.dnsts.com.cn/news/265651.html

相关文章:

  • 建湖网站建设西安网站制作定制
  • wordpress的网站好用吗windows优化大师值得买吗
  • 做花茶网站解说海尔的网络营销模式
  • 好一点的网站建设北京最近出什么大事了
  • 网站推广含义wordpress数据库排序规则
  • 什么网站可以看女人唔易做深圳 公司网站设计
  • 网站制作的基础给企业建设网站的流程图
  • 做a视频网站有哪些ui网页设计师
  • 有服务器怎么做网站教程网线制作实验步骤
  • 湖南基础建设投资集团网站珠海网站建设网络有限公司
  • 上海 网站开发 兼职北京的做网站的公司
  • 建筑网站知识大全美客多电商平台入驻条件
  • 网站被墙怎么做跳转成都彭州网站建设
  • 在地区做网站怎么赚钱网站建设人员要与客户谈什么
  • 邳州网站开发阿里云 wordpress 教程
  • 公司门户网站建设特点wordpress迁移500
  • 邢台专业网站建设源码深圳品牌网站建设公司哪家好
  • c 网站开发需要什么找人建网站
  • 织梦移动端网站怎么做免费开源建站教学网站
  • 域名备案进度查询兰州网络seo公司
  • 静态网站开发试验报告十大搜索引擎地址
  • 营销网站解决方案php做网站不兼容ie8
  • 北京丰台区做网站公司做网站专题的软件
  • 网站监测浏览器类型阿里云做网站选择服务器
  • 站长交易网北京海淀区的科技有限公司
  • 手机网站禁止缩放电子商务具体是干什么的
  • 同ip网站做网站价格ihanshi
  • 烟台网站建设技术支持计算机培训短期速成班
  • 大连网站制作优选ls15227国外设计素材网站免费
  • 苏州网站建设及推广青岛市区网络制作公司