Flink 1.7.2 dataset transformation 示例

Flink 1.7.2 dataset transformation 示例

源码

  • https://github.com/opensourceteams/flink-maven-scala

概述

  • Flink transformation示例
  • map,flatMap,filter,reduce,groupBy,reduceGroup,combineGroup,Aggregate(sum,max,min)
  • distinct,join,join funtion,leftOuterJoin,rightOuterJoin,fullOuterJoin,union,first,coGroup,cross

transformation

map

  • 对集合元素,进行一一遍历处理
  • 示例功能:给集合中的每一一行,都拼接字符串
package com.opensourceteams.module.bigdata.flink.example.dataset.transformation.mapimport org.apache.flink.api.scala.ExecutionEnvironmentimport org.apache.flink.api.scala._object Run {def main(args: Array[String]): Unit = {val env = ExecutionEnvironment.getExecutionEnvironmentval dataSet = env.fromElements("c a b d a c","d c a b c d")val dataSet2 = dataSet.map(_.toUpperCase + "字符串连接")dataSet2.print()}}
  • 输出结果
C A B D A C字符串连接
D C A B C D字符串连接

flatMap

  • 对集合元素,进行一一遍历处理,并把子集合中的数据拉到一个集合中
  • 示例功能:把行进行拆分后,再把不同的行拆分之后的元素,汇总到一个集合中

package com.opensourceteams.module.bigdata.flink.example.dataset.transformation.flatmapimport org.apache.flink.api.scala.{ExecutionEnvironment, _}object Run {def main(args: Array[String]): Unit = {val env = ExecutionEnvironment.getExecutionEnvironmentval dataSet = env.fromElements("c a b d a c","d c a b c d")val dataSet2 = dataSet.flatMap(_.toUpperCase().split(" "))dataSet2.print()}}
  • 输出结果
C
A
B
D
A
C
D
C
A
B
C
D

filter

  • 对集合元素,进行一一遍历处理,只过滤满足条件的元素
  • 示例功能:过滤空格数据
package com.opensourceteams.module.bigdata.flink.example.dataset.transformation.filterimport org.apache.flink.api.scala.{ExecutionEnvironment, _}/*** filter 过滤器,对数据进行过滤处理*/
object Run {def main(args: Array[String]): Unit = {val env = ExecutionEnvironment.getExecutionEnvironmentval dataSet = env.fromElements("c a b d a    c","d c   a b c d")val dataSet2 = dataSet.flatMap(_.toUpperCase().split(" ")).filter(_.nonEmpty)dataSet2.print()}}
  • 输出结果
C
A
B
D
A
C
D
C
A
B
C
D

reduce

  • 对集合中所有元素,两两之间进行reduce函数表达式的计算
  • 示例功能:统计所有数据的和
package com.opensourceteams.module.bigdata.flink.example.dataset.transformation.mappackage com.opensourceteams.module.bigdata.flink.example.dataset.transformation.reduceimport org.apache.flink.api.scala.{ExecutionEnvironment, _}/*** 相当于进行所有元素的累加操作,求和操作*/
object Run {def main(args: Array[String]): Unit = {val env = ExecutionEnvironment.getExecutionEnvironmentval dataSet = env.fromElements(3,5,8,9)//  3 + 5 + 8 + 9val dataSet2 = dataSet.reduce((a,b) => {println(s"${a} + ${b} = ${a +b}")a + b})dataSet2.print()}}
  • 输出结果
3 + 5 = 8
8 + 8 = 16
16 + 9 = 25
25

reduce (先groupBy)

  • 对集合中所有元素,按指定的key分组,按组执行reduce
  • 示例功能:按key分组统计所有数据的和
package com.opensourceteams.module.bigdata.flink.example.dataset.transformation.reduceimport org.apache.flink.api.scala.{ExecutionEnvironment, _}/*** 相当于按key进行分组,然后对组内的元素进行的累加操作,求和操作*/
object ReduceGroupRun2 {def main(args: Array[String]): Unit = {val env = ExecutionEnvironment.getExecutionEnvironmentval dataSet = env.fromElements(("a",1),("b",1),("c",1),("a",1),("c",1),("d",1),("f",1),("g",1),("f",1))/*** (a,1)* (b,1)* (c,1)* (a,1)* (c,1)* (d,1)* (f,1)* (g,1)*/val dataSet2 = dataSet.groupBy(0).reduce((x,y) => {(x._1,x._2 + y._2)})dataSet2.print()}}
  • 输出结果
(d,1)
(a,2)
(f,2)
(b,1)
(c,2)
(g,1)

groupBy (class Fields)

  • 对集合中所有元素,按用例类中的属性,进行分组
  • 示例功能:按key分组统计所有数据的和
package com.opensourceteams.module.bigdata.flink.example.dataset.transformation.groupByClassFieldsimport org.apache.flink.api.scala.{ExecutionEnvironment, _}/*** 相当于按key进行分组,然后对组内的元素进行的累加操作,求和操作*/
object ReduceGroupRun {def main(args: Array[String]): Unit = {val env = ExecutionEnvironment.getExecutionEnvironmentval dataSet = env.fromElements("a","b","c","a","c","d","f","g","f")/*** (a,1)* (b,1)* (c,1)* (a,1)* (c,1)* (d,1)* (f,1)* (g,1)*/val dataSet2 = dataSet.map(WordCount(_,1)).groupBy("word").reduce((x,y) => WordCount(x.word, x.count + y.count))dataSet2.print()}case class WordCount(word:String,count:Int)}
  • 输出结果
WordCount(d,1)
WordCount(a,2)
WordCount(f,2)
WordCount(b,1)
WordCount(c,2)
WordCount(g,1)

groupBy (key Selector)

  • 对集合中所有元素,按key 选择器进行分组
  • 示例功能:按key分组统计所有数据的和
package com.opensourceteams.module.bigdata.flink.example.dataset.transformation.groupByKeySelectorimport org.apache.flink.api.scala.{ExecutionEnvironment, _}/*** 相当于按key进行分组,然后对组内的元素进行的累加操作,求和操作*/
object ReduceGroupRun {def main(args: Array[String]): Unit = {val env = ExecutionEnvironment.getExecutionEnvironmentval dataSet = env.fromElements("a","b","c","a","c","d","f","g","f")/*** (a,1)* (b,1)* (c,1)* (a,1)* (c,1)* (d,1)* (f,1)* (g,1)*/val dataSet2 = dataSet.map((_,1)).groupBy(_._1).reduce((x,y) => (x._1,x._2 +y._2))dataSet2.print()}}
  • 输出结果
WordCount(d,1)
WordCount(a,2)
WordCount(f,2)
WordCount(b,1)
WordCount(c,2)
WordCount(g,1)

reduceGroup

  • 对集合中所有元素,按指定的key分组,把相同key的元素,做为参数,调用reduceGroup()函数
  • 示例功能:按key分组统计所有数据的和

package com.opensourceteams.module.bigdata.flink.example.dataset.transformation.reduceGroupimport org.apache.flink.api.scala.{ExecutionEnvironment, _}
import org.apache.flink.util.Collector/*** 相同的key的元素,都一次做为参数传进来了*/
object ReduceGroupRun {def main(args: Array[String]): Unit = {val env = ExecutionEnvironment.getExecutionEnvironmentenv.setParallelism(1)val dataSet = env.fromElements("a","a","c","b","a")/*** 中间数据* (a,1)* (a,1)* (c,1)* (b,1)* (a,1)*/val result = dataSet.map((_,1)).groupBy(0).reduceGroup((in, out: Collector[(String,Int)]) =>{var count = 0 ;var word = "";while (in.hasNext){val next  = in.next()word = next._1count = count + next._2}out.collect((word,count))})result.print()}}
  • 输出结果
(a,3)
(b,1)
(c,1)

combineGroup

  • 对集合中所有元素,按指定的key分组,把相同key的元素,做为参数,调用combineGroup()函数,会在本地进行合并
  • 示例功能:按key分组统计所有数据的和

package com.opensourceteams.module.bigdata.flink.example.dataset.transformation.combineGroupimport org.apache.flink.api.scala.{ExecutionEnvironment, _}
import org.apache.flink.util.Collector/*** 相同的key的元素,都一次做为参数传进来了*/
object Run {def main(args: Array[String]): Unit = {val env = ExecutionEnvironment.getExecutionEnvironmentenv.setParallelism(1)val dataSet = env.fromElements("a","a","c","b","a")/*** 中间数据* (a,1)* (a,1)* (c,1)* (b,1)* (a,1)*/val result = dataSet.map((_,1)).groupBy(0).combineGroup((in, out: Collector[(String,Int)]) =>{var count = 0 ;var word = "";while (in.hasNext){val next  = in.next()word = next._1count = count + next._2}out.collect((word,count))})result.print()}}
  • 输出结果
(a,3)
(b,1)
(c,1)

Aggregate sum

  • 按key分组 对Tuple2(String,Int) 中value进行求和操作
package com.opensourceteams.module.bigdata.flink.example.dataset.transformation.aggregate.sumimport org.apache.flink.api.scala.{ExecutionEnvironment, _}/*** 相当于按key进行分组,然后对组内的元素进行的累加操作,求和操作*/
object Run {def main(args: Array[String]): Unit = {val env = ExecutionEnvironment.getExecutionEnvironmentval dataSet = env.fromElements(("a",3),("b",1),("c",5),("a",1),("c",1),("d",1),("f",1),("g",1),("f",1))/*** (a,1)* (b,1)* (c,1)* (a,1)* (c,1)* (d,1)* (f,1)* (g,1)*/val dataSet2 = dataSet.sum(1)dataSet2.print()}}
  • 输出结果
(f,15)

Aggregate max

  • 按key分组 对Tuple2(String,Int) 中value进行求最大值操作

package com.opensourceteams.module.bigdata.flink.example.dataset.transformation.aggregate.maximport org.apache.flink.api.scala.{ExecutionEnvironment, _}/*** 相当于按key进行分组,然后对组内的元素进行的累加操作,求和操作*/
object Run {def main(args: Array[String]): Unit = {val env = ExecutionEnvironment.getExecutionEnvironmentval dataSet = env.fromElements(("a",3),("b",1),("c",5),("a",1),("c",1),("d",1),("f",1),("g",1),("f",1))/*** (a,1)* (b,1)* (c,1)* (a,1)* (c,1)* (d,1)* (f,1)* (g,1)*/val dataSet2 = dataSet.max(1)dataSet2.print()}}
  • 输出结果
(f,5)

Aggregate min

  • 按key分组 对Tuple2(String,Int) 中value进行求最小值操作

package com.opensourceteams.module.bigdata.flink.example.dataset.transformation.aggregate.minimport org.apache.flink.api.scala.{ExecutionEnvironment, _}/*** 相当于按key进行分组,然后对组内的元素进行的累加操作,求和操作*/
object Run {def main(args: Array[String]): Unit = {val env = ExecutionEnvironment.getExecutionEnvironmentval dataSet = env.fromElements(("a",3),("b",1),("c",5),("a",1),("c",1),("d",1),("f",1),("g",1),("f",1))/*** (a,1)* (b,1)* (c,1)* (a,1)* (c,1)* (d,1)* (f,1)* (g,1)*/val dataSet2 = dataSet.min(1)dataSet2.print()}}
  • 输出结果
(f,1)

Aggregate sum (groupBy)

  • 按key分组 对Tuple2(String,Int) 中的所有元素进行求和操作
  • 示例功能:按key分组统计所有数据的和
package com.opensourceteams.module.bigdata.flink.example.dataset.transformation.aggregate.sumimport org.apache.flink.api.scala.{ExecutionEnvironment, _}/*** 相当于按key进行分组,然后对组内的元素进行的累加操作,求和操作*/
object Run {def main(args: Array[String]): Unit = {val env = ExecutionEnvironment.getExecutionEnvironmentval dataSet = env.fromElements(("a",1),("b",1),("c",1),("a",1),("c",1),("d",1),("f",1),("g",1),("f",1))/*** (a,1)* (b,1)* (c,1)* (a,1)* (c,1)* (d,1)* (f,1)* (g,1)*/val dataSet2 = dataSet.groupBy(0).sum(1)dataSet2.print()}}
  • 输出结果
(d,1)
(a,2)
(f,2)
(b,1)
(c,2)
(g,1)

Aggregate max (groupBy) 等于 maxBy

  • 按key分组 对Tuple2(String,Int) 中value 进行求最大值
  • 示例功能:按key分组统计最大值
package com.opensourceteams.module.bigdata.flink.example.dataset.transformation.aggregate.maximport org.apache.flink.api.scala.{ExecutionEnvironment, _}/*** 相当于按key进行分组,然后对组内的元素进行的累加操作,求和操作*/
object Run {def main(args: Array[String]): Unit = {val env = ExecutionEnvironment.getExecutionEnvironmentval dataSet = env.fromElements(("a",2),("b",1),("c",4),("a",1),("c",1),("d",1),("f",1),("g",1),("f",1))/*** (a,1)* (b,1)* (c,1)* (a,1)* (c,1)* (d,1)* (f,1)* (g,1)*/val dataSet2 = dataSet.groupBy(0).max(1)dataSet2.print()}}
  • 输出结果
(d,1)
(a,2)
(f,1)
(b,1)
(c,4)
(g,1)

Aggregate min (groupBy) 等于minBy

  • 按key分组 对Tuple2(String,Int) 中value 进行求最小值
  • 示例功能:按key分组统计最小值
package com.opensourceteams.module.bigdata.flink.example.dataset.transformation.aggregate.maximport org.apache.flink.api.scala.{ExecutionEnvironment, _}/*** 相当于按key进行分组,然后对组内的元素进行的累加操作,求和操作*/
object Run {def main(args: Array[String]): Unit = {val env = ExecutionEnvironment.getExecutionEnvironmentval dataSet = env.fromElements(("a",2),("b",1),("c",4),("a",1),("c",1),("d",1),("f",1),("g",1),("f",1))/*** (a,1)* (b,1)* (c,1)* (a,1)* (c,1)* (d,1)* (f,1)* (g,1)*/val dataSet2 = dataSet.groupBy(0).min(1)dataSet2.print()}}
  • 输出结果
(d,1)
(a,1)
(f,1)
(b,1)
(c,1)
(g,1)

distinct 去重

  • 按指定的例,去重
package com.opensourceteams.module.bigdata.flink.example.dataset.transformation.aggregate.distinctimport org.apache.flink.api.scala.{ExecutionEnvironment, _}/*** 相当于按key进行分组,然后对组内的元素进行的累加操作,求和操作*/
object Run {def main(args: Array[String]): Unit = {val env = ExecutionEnvironment.getExecutionEnvironmentval dataSet = env.fromElements(("a",3),("b",1),("c",5),("a",1),("c",1),("d",1),("f",1),("g",1),("f",1))/*** (a,1)* (b,1)* (c,1)* (a,1)* (c,1)* (d,1)* (f,1)* (g,1)*/val dataSet2 = dataSet.distinct(1)dataSet2.print()}}
  • 输出结果

(a,3)
(b,1)
(c,5)

join

  • 连接
package com.opensourceteams.module.bigdata.flink.example.dataset.transformation.joinimport org.apache.flink.api.scala.{ExecutionEnvironment, _}object Run {def main(args: Array[String]): Unit = {val env = ExecutionEnvironment.getExecutionEnvironmentval dataSet = env.fromElements(("a",3),("b",1),("c",5),("a",1),("c",1),("d",1),("f",1),("g",1),("f",1))val dataSet2 = env.fromElements(("d",1),("f",1),("g",1),("f",1))//全外连接val dataSet3 = dataSet.join(dataSet2).where(0).equalTo(0)dataSet3.print()}}
  • 输出结果

((d,1),(d,1))
((f,1),(f,1))
((f,1),(f,1))
((f,1),(f,1))
((f,1),(f,1))
((g,1),(g,1))

join (Function)

  • 连接
package com.opensourceteams.module.bigdata.flink.example.dataset.transformation.joinFunctionimport org.apache.flink.api.scala.{ExecutionEnvironment, _}object Run {def main(args: Array[String]): Unit = {val env = ExecutionEnvironment.getExecutionEnvironmentval dataSet = env.fromElements(("a",3),("b",1),("c",5),("a",1),("c",1),("d",1),("f",2),("g",5))val dataSet2 = env.fromElements(("g",1),("f",1))//全外连接val dataSet3 = dataSet.join(dataSet2).where(0).equalTo(0){(x,y) => (x._1,x._2+ y._2)}dataSet3.print()}}
  • 输出结果

(f,3)
(g,6)

leftOuterJoin

  • 左外连接,左边的Dataset中的每一个元素,去连接右边的元素
package com.opensourceteams.module.bigdata.flink.example.dataset.transformation.leftOuterJoinimport org.apache.flink.api.scala.{ExecutionEnvironment, _}object Run {def main(args: Array[String]): Unit = {val env = ExecutionEnvironment.getExecutionEnvironmentval dataSet = env.fromElements(("a",3),("b",1),("c",5),("a",1),("c",1),("d",1),("f",2),("g",5))val dataSet2 = env.fromElements(("g",1),("f",1))//全外连接val dataSet3 = dataSet.leftOuterJoin(dataSet2).where(0).equalTo(0){(x,y) => {var count = 0;if(y != null ){count = y._2}(x._1,x._2+ count)}}dataSet3.print()}}
  • 输出结果

(d,1)
(a,3)
(a,1)
(f,3)
(b,1)
(c,5)
(c,1)
(g,6)

rightOuterJoin

  • 右外连接,左边的Dataset中的每一个元素,去连接左边的元素

package com.opensourceteams.module.bigdata.flink.example.dataset.transformation.rightOuterJoinimport org.apache.flink.api.scala.{ExecutionEnvironment, _}object Run {def main(args: Array[String]): Unit = {val env = ExecutionEnvironment.getExecutionEnvironmentval dataSet = env.fromElements(("a",3),("b",1),("c",5),("a",1),("c",1),("d",1),("f",2),("g",5))val dataSet2 = env.fromElements(("g",1),("f",1))//全外连接val dataSet3 = dataSet.rightOuterJoin(dataSet2).where(0).equalTo(0){(x,y) => {var count = 0;if(x != null ){count = x._2}(x._1,y._2 + count)}}dataSet3.print()}}
  • 输出结果

(f,2)
(g,2)

fullOuterJoin

  • 全外连接,左右两边的元素,全部连接

package com.opensourceteams.module.bigdata.flink.example.dataset.transformation.fullOuterJoinimport org.apache.flink.api.scala.{ExecutionEnvironment, _}object Run {def main(args: Array[String]): Unit = {val env = ExecutionEnvironment.getExecutionEnvironmentval dataSet = env.fromElements(("a",3),("b",1),("c",5),("a",1),("c",1),("d",1),("f",2),("g",5))val dataSet2 = env.fromElements(("g",1),("f",1))//全外连接val dataSet3 = dataSet.fullOuterJoin(dataSet2).where(0).equalTo(0){(x,y) => {var countY = 0;if(y != null ){countY = y._2}var countX = 0;if(x != null ){countX = x._2}(x._1,countX + countY)}}dataSet3.print()}}
  • 输出结果

(f,2)
(g,2)

union

  • 连接

package com.opensourceteams.module.bigdata.flink.example.dataset.transformation.unionimport org.apache.flink.api.scala.{ExecutionEnvironment, _}object Run {def main(args: Array[String]): Unit = {val env = ExecutionEnvironment.getExecutionEnvironmentval dataSet = env.fromElements(("a",1),("g",1),("f",1))val dataSet2 = env.fromElements(("d",1),("f",1),("g",1),("f",1))//全外连接val dataSet3 = dataSet.union(dataSet2)dataSet3.print()}}
  • 输出结果

(a,1)
(d,1)
(g,1)
(f,1)
(f,1)
(g,1)
(f,1)

first n

  • 前面几条数据

package com.opensourceteams.module.bigdata.flink.example.dataset.transformation.firstimport org.apache.flink.api.scala.{ExecutionEnvironment, _}object Run {def main(args: Array[String]): Unit = {val env = ExecutionEnvironment.getExecutionEnvironmentval dataSet = env.fromElements(("a",3),("b",1),("c",5),("a",1),("c",1),("d",1),("f",1),("g",1),("f",1))//全外连接val dataSet3 = dataSet.first(3)dataSet3.print()}}
  • 输出结果

(a,3)
(b,1)
(c,5)

coGroup

  • 相当于,取出两个数据集的所有去重的key,然后,再把第一个DataSet中的这个key的所有元素放到可迭代对象中,再把第二个DataSet中的这个key的所有元素放到可迭代对象中

package com.opensourceteams.module.bigdata.flink.example.dataset.transformation.cogroupimport java.langimport org.apache.flink.api.common.functions.CoGroupFunction
import org.apache.flink.api.scala.{ExecutionEnvironment, _}
import org.apache.flink.util.Collectorobject Run {def main(args: Array[String]): Unit = {val env = ExecutionEnvironment.getExecutionEnvironmentval dataSet = env.fromElements(("a",1),("g",1),("a",1))val dataSet2 = env.fromElements(("a",1),("f",1))//全外连接val dataSet3 = dataSet.coGroup(dataSet2).where(0).equalTo(0){new CoGroupFunction[(String,Int),(String,Int), Collector[(String,Int)]] {override def coGroup(first: lang.Iterable[(String, Int)], second: lang.Iterable[(String, Int)], out: Collector[Collector[(String, Int)]]): Unit = {println("==============开始")println("first")println(first)val iteratorFirst = first.iterator()while (iteratorFirst.hasNext()){println(iteratorFirst.next())}println("second")println(second)val iteratorSecond = second.iterator()while (iteratorSecond.hasNext()){println(iteratorSecond.next())}println("==============结束")}}}dataSet3.print()}}
  • 输出结果

==============开始
first
org.apache.flink.runtime.util.NonReusingKeyGroupedIterator$ValuesIterator@3500e7b0
(a,1)
(a,1)
second
org.apache.flink.runtime.util.NonReusingKeyGroupedIterator$ValuesIterator@41230ea2
(a,1)
==============结束
==============开始
first
org.apache.flink.runtime.util.NonReusingKeyGroupedIterator$ValuesIterator@14602d0a
(g,1)
second
[]
==============结束
==============开始
first
[]
second
org.apache.flink.runtime.util.NonReusingKeyGroupedIterator$ValuesIterator@2b0a15b5
(f,1)
==============结束Process finished with exit code 0

cross

  • 交叉连接
package com.opensourceteams.module.bigdata.flink.example.dataset.transformation.crossimport org.apache.flink.api.scala.{ExecutionEnvironment, _}object Run {def main(args: Array[String]): Unit = {val env = ExecutionEnvironment.getExecutionEnvironmentval dataSet = env.fromElements(("a",1),("g",1),("f",1))val dataSet2 = env.fromElements(("d",1),("f",1),("g",1),("f",1))//全外连接val dataSet3 = dataSet.cross(dataSet2)dataSet3.print()}}
  • 输出结果
((a,1),(d,1))
((a,1),(f,1))
((a,1),(g,1))
((a,1),(f,1))
((g,1),(d,1))
((g,1),(f,1))
((g,1),(g,1))
((g,1),(f,1))
((f,1),(d,1))
((f,1),(f,1))
((f,1),(g,1))
((f,1),(f,1))

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2020-4-5

题目一&#xff1a; <!DOCTYPE html> <html> <head> <meta charset" utf-8"> <script> window.onloadfunction(){let txtdocument.getElementById("txt");let stdocument.getElementById("st");let formdocumen…

肾脏的保养

饮食方面保养肾脏&#xff1a; 1、适量饮水不憋尿&#xff0c;每天需喝1500&#xff5e;2000ml的水&#xff0c;保持每天的尿量在1500ml左右。 2、饮食不要重口味&#xff0c;少吃不健康的腌制品或其他加工的食品。 不可纵欲&#xff1a; 纵欲会令肾脏受损害&#xff0c;…

sql 中 between 的边界问题 ---- between 边界:闭区间,not between 边界:开区间

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 BETWEEN 用以查询确定范围的值&#xff0c;这些值可以是数字&#xff0c;文本或日期 。BETWEEN 运算符是闭区间的&#xff1a;包括开始…

取代ZooKeeper!高并发下的分布式一致性开源组件StateSynchronizer

StateSynchronizer是开源分布式流存储平台Pravega的核心组件。StateSynchronizer组件以stream为基础&#xff0c;对外提供一致性状态共享服务。StateSynchronizer允许一组进程同时读写同一共享状态而不必担心一致性问题。本文将从共享状态和一致性的角度出发&#xff0c;详细描…

[51nod1773]A国的贸易

题目链接&#xff1a; 51nod1773 首先可以很简单的写出每一天的DP转移式&#xff1a; \(f[i][x]\sum f[i-1][x\ xor\ k](k0\ or\ k2^j,0\le j<n)\) 其中\(f[i][x]\)表示第\(i\)天\(x\)国货物数量\((0\le x<2^n)\)。 那么因为\(k\)有固定的取值&#xff0c;设数组\(A\)表示…

Linux基础学习导图

网上教程太多啦&#xff0c;先水一波导图&#xff0c;笔记日后慢慢上传~ 一款常用的软件很简单易用&#xff0c;推荐大家下载xmind vim学习相关的思维导图&#xff1a; 可以通过ubuntu自带的vim书学习&#xff08;终端输入vimtutor&#xff09;

一个学中医女生的保养身体法

首先是关于皮肤的外部保养法。1.关于头发 头发油是因为肝火太旺了&#xff0c;身体里内脏不能消化油脂&#xff0c;所以就把它排到脸上和头上了,办法是&#xff1a;每天晚上用滚烫的热水泡脚泡上半个小时&#xff0c;慢慢就会好了。注&#xff1a;水不会一直热&#xff0c;所以…

实现 SSH 无密码登录 、 ssh 常用命令

OpenSSH是互联网技术用户所依赖的SSH连接工具的免费版本。 telnet&#xff0c;rlogin 和 ftp 用户可能没有意识到他们的密码是通过互联网传输的&#xff0c;并且是未加密的。 但是 OpenSSH 加密所有流量&#xff08;包括密码&#xff09;以有效消除窃听&#xff0c;连接劫持和其…

团队项目冲刺第一天

今天&#xff0c;开了第一天的团队会议&#xff0c;我们把团队任务分配了一下&#xff0c;今天的任务是学习了一下Android开发的基础知识&#xff0c;看了哔哩哔哩上面的教学视频&#xff0c;对于一些转换页面&#xff0c;按钮&#xff0c;文本的配置有所了解&#xff0c;明天开…

简单的C语言五子棋(两种模式:移动光标输入坐标和移动光标按键)

五子棋&#xff1a; 需要的数据&#xff1a; 1、定义棋盘数组 2、定义变量用于记录棋子位置 3、定义角色变量 业务逻辑&#xff1a; 是否需要对数据进行初始化 for(;; ) { 1、清理屏幕&#xff0c;显示棋盘 2、落子 坐标要合法&#xff0c;原位置不能有棋子 3、检查是否形成五子…

nodejs-- vuex中mapActions

mapActions() 返回的是一个对象, 用了 ... 扩展符后&#xff0c;才可以放进一个对象里&#xff0c;和其他组件内定义的 method 在同一个 methods 对象。 { methods: mapActions() // 如果没有其它组件内的定义的方法,可以这样写}{ methods: { ...mapActions()&#xff0c;// 如…

怎样让手中的钱成为生财工具

大多数人之所以跟钱之间总有不可逾越的鸿沟&#xff0c;是因为他们不知道钱的活动能力。 钱&#xff0c;跟人一样是有生命的。每一块钱就是你的一个职员&#xff0c;你的目标是让你的职员勤奋工作&#xff0c;经过时间的沉淀&#xff0c;人员会日益壮大&#xff0c;工作效率会…

Android 开发知识集合目录

深入理解java的形参和实参&#xff1a; www.cnblogs.com/xuxinstyle/… sharepreference 与 数据库 区别&#xff1a; Android 各版特点&#xff1a; Android发展史&#xff08;Android各版本特性-知识篇&#xff09; blog.csdn.net/u012964796/…

mysql 查外键关联关系 (指定被引用表,查哪些表对其有外键引用)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 在一个业务功能中要求先清空一张基础表&#xff08;user表&#xff09;再插入一批新数据。 在删除过程中报错为其它表有外键引用&#…

Shell脚本语言基础总结

*** 一&#xff0c;shell教程 Shell 是一个用 C 语言编写的程序&#xff0c;它是用户使用 Linux 的桥梁。Shell 既是一种命令语言&#xff0c;又是一种程序设计语言 二&#xff0c;shell环境 跟 JavaScript、php 编程一样&#xff0c;只要有一个能编写代码的文本编辑器和一…

Error: Can't resolve 'babel-loader'

在控制台中运行命令“webpack”&#xff0c;出现错误&#xff1a;“ERROR in Entry module not found: Error: Cant resolve babel-loader in.........” 解决方法是在控制台输入命令“npm install babel-loader --save"。转载于:https://www.cnblogs.com/Niuxingyu/p/107…

docker 4 section

镜像和容器的关系&#xff1a; 镜像是容器的基础&#xff0c;每次执行 docker run 的时候都会指定哪个镜像作为容器运行的基础。我们可以使用的都是来自于 Docker Hub 的镜像。直接使用这些镜像是可以满足一定的需求&#xff0c;而当这些镜像无法直接满足需求时&#xff0c;我们…

日本专家给出的存钱高招(图)

专家认为&#xff0c;对自己钱包里装了多少钱没有数的人&#xff0c;是个有浪费趋向的人&#xff0c;如果改变这一习惯&#xff0c;一定会让你的存款增多不少。 人们常说&#xff0c;犹太人善于赚钱&#xff0c;美国人善于花钱&#xff0c;中国人和日本人善于存钱。在日本现代…

精读《V8 引擎 Lazy Parsing》

1. 引言 本周精读的文章是 V8 引擎 Lazy Parsing&#xff0c;看看 V8 引擎为了优化性能&#xff0c;做了怎样的尝试吧&#xff01; 这篇文章介绍的优化技术叫 preparser&#xff0c;是通过跳过不必要函数编译的方式优化性能。 2. 概述 & 精读 解析 Js 发生在网页运行的关键…

Git和SVN的区别,Git的使用方法大全

什么是Git: Git 是一个开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理任何或小或大的项目。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 Git 与常用的版本控制工具 CVS, Subversion 等不同&#xff0c;它采用了分布…