电商运营十大基础知识/云seo

电商运营十大基础知识,云seo,简单的网页设计论文,企健网网址目录 一、浅语二、三种数据处理方式比较2.1 RDD2.2 DataFrame2.3 Spark SQL 三、三种方法的创建方式3.1 创建RDD3.2 创建DataFrame3.2.1 创建sqlContext3.2.2 定义Schema3.2.3 创建DataFrame 3.3 创建SparkSQL3.3.1 登录临时表3.3.2 使用sparkSQL 四、三种方法显示部分字段4.1 …

目录

  • 一、浅语
  • 二、三种数据处理方式比较
    • 2.1 RDD
    • 2.2 DataFrame
    • 2.3 Spark SQL
  • 三、三种方法的创建方式
    • 3.1 创建RDD
    • 3.2 创建DataFrame
      • 3.2.1 创建sqlContext
      • 3.2.2 定义Schema
      • 3.2.3 创建DataFrame
    • 3.3 创建SparkSQL
      • 3.3.1 登录临时表
      • 3.3.2 使用sparkSQL
  • 四、三种方法显示部分字段
    • 4.1 使用RDD选取显示部分字段
    • 4.2 使用DataFrame选取显示字段
      • 4.2.1 select方法输入[字段名]
      • 4.2.2 select方法输入[dataframe名称].[字段名]
      • 4.2.3 select方法输入[dataframe别名].[字段名]
      • 4.2.4 通过dataframe中括号方式
    • 4.3 使用SparkSQL选取显示字段
  • 五、三种方法增加计算字段
    • 5.1 RDD增加计算字段
    • 5.2 DataFrame增加计算字段
    • 5.3 SparkSQL增加计算字段
  • 六、三种方法筛选数据
    • 6.1 RDD筛选数据
    • 6.2 DataFrame筛选数据
      • 6.2.1 使用多个filter
      • 6.2.2 使用单个filter
      • 6.2.3 使用[dataframe 名称].[字段名]指定条件
      • 6.2.4 使用[]指定筛选条件
    • 6.3 SparkSQL筛选数据
  • 七、三种方法按单个字段给数据排序
    • 7.1 RDD:takeOrdered方法
    • 7.2 DataFrame
    • 7.3 SQparkSQL
  • 八、三种方法按多个字段排序
    • 8.1 RDD
    • 8.2 DataFrame
    • 8.3 SparkSQL
  • 九、三种方法显示不重复的数据
    • 9.1 RDD
    • 9.2 DataFrame
    • 9.3 SparkSQL
  • 十、三种方法分组统计数据
    • 10.1 RDD:map/reduce
    • 10.2 DataFrame
      • 10.2.1 crosstab:长表变宽表
    • 10.3 SparkSQL
  • 参考资料


在这里插入图片描述

一、浅语

上一篇(《pyspark RDD相关常用函数使用案例》) 对pyspark的一些常用函数做了梳理,这篇主要是针对RDD、DataFrame、SparkSql三种实现同一功能需要的方式做一梳理,通过实际动手,体会不同方式在数据处理过程中的差异性、便利性。

import findspark
findspark.init() 
from pyspark.sql import SparkSession# 创建 Spark 会话
spark = SparkSession.builder \.appName("Test PySpark") \.master("local[*]") \.getOrCreate()
sc=spark.sparkContext
sc.master
'local[*]'

二、三种数据处理方式比较

2.1 RDD

  • rdd的数据</font color-“green”>只能使用位置来指定每一个字段。
  • rdd功能最强,能完成所有spark功能。

2.2 DataFrame

  • Spark DataFrame被创建时</font color=“green”>必须定义Schema,定义每个字段名和数据类型。
  • 定义了很多类似SQL的方法
  • 比起RDD更容易使用

2.3 Spark SQL

  • 有DataFrame派生出来,所以</font color=“green”>必须先创建DataFrame,进而转化使用。
  • 最简单

三、三种方法的创建方式

3.1 创建RDD

# 读取本地数据文件
mRDD = sc.textFile("test.txt")
print('查看数据的行数:',mRDD.count())
# 按照空格分隔数据字段
sRDD = mRDD.map(lambda x:x.split(' '))
print('查看分隔后的结果:',sRDD.collect())
查看数据的行数: 8
查看分隔后的结果: [['yellow', '1', 'F'], ['blue', '2', 'M'], ['yellow', '3', 'F'], ['black', '4', 'F'], ['red', '5', 'M'], ['red', '5', 'M'], ['blue', '3', 'M'], ['blue', '7', 'M']]

3.2 创建DataFrame

3.2.1 创建sqlContext

sqlContext = SparkSession.builder.getOrCreate()

3.2.2 定义Schema

from pyspark.sql import Row
sRows = sRDD.map(lambda x:Row(color=x[0],num = int(x[1]),sex = x[2]))
# 查看schema
sRows.collect()
[Row(color='yellow', num=1, sex='F'),Row(color='blue', num=2, sex='M'),Row(color='yellow', num=3, sex='F'),Row(color='black', num=4, sex='F'),Row(color='red', num=5, sex='M'),Row(color='red', num=5, sex='M'),Row(color='blue', num=3, sex='M'),Row(color='blue', num=7, sex='M')]

3.2.3 创建DataFrame

# 创建DataFrame¶
df = sqlContext.createDataFrame(sRows)
# 使用.printSchema()查看DataFrame的schema
df.printSchema()
root|-- color: string (nullable = true)|-- num: long (nullable = true)|-- sex: string (nullable = true)
# 查看数据
df.show()
+------+---+---+
| color|num|sex|
+------+---+---+
|yellow|  1|  F|
|  blue|  2|  M|
|yellow|  3|  F|
| black|  4|  F|
|   red|  5|  M|
|   red|  5|  M|
|  blue|  3|  M|
|  blue|  7|  M|
+------+---+---+
### 为DataFrame创建别名
dataf = df.alias('dataf')
dataf.show()
+------+---+---+
| color|num|sex|
+------+---+---+
|yellow|  1|  F|
|  blue|  2|  M|
|yellow|  3|  F|
| black|  4|  F|
|   red|  5|  M|
|   red|  5|  M|
|  blue|  3|  M|
|  blue|  7|  M|
+------+---+---+

3.3 创建SparkSQL

3.3.1 登录临时表

dataf.registerTempTable('temp_tb')
D:\bigdataenv\spark-3.5.0-bin-hadoop3\python\pyspark\sql\dataframe.py:329: FutureWarning: Deprecated in 2.0, use createOrReplaceTempView instead.warnings.warn("Deprecated in 2.0, use createOrReplaceTempView instead.", FutureWarning)

3.3.2 使用sparkSQL

查看数据使用show()方法,默认显示前20行数据

sqlContext.sql('select * from temp_tb').show()
+------+---+---+
| color|num|sex|
+------+---+---+
|yellow|  1|  F|
|  blue|  2|  M|
|yellow|  3|  F|
| black|  4|  F|
|   red|  5|  M|
|   red|  5|  M|
|  blue|  3|  M|
|  blue|  7|  M|
+------+---+---+

四、三种方法显示部分字段

4.1 使用RDD选取显示部分字段

rdd = sRDD.map(lambda x:(x[0],x[2],x[1]))
rdd.take(2)
[('yellow', 'F', '1'), ('blue', 'M', '2')]

4.2 使用DataFrame选取显示字段

下面四种方法显示的结果相同。

4.2.1 select方法输入[字段名]

df.select('color','sex').show()
+------+---+
| color|sex|
+------+---+
|yellow|  F|
|  blue|  M|
|yellow|  F|
| black|  F|
|   red|  M|
|   red|  M|
|  blue|  M|
|  blue|  M|
+------+---+

4.2.2 select方法输入[dataframe名称].[字段名]

df.select(df.color,df.sex).show()
+------+---+
| color|sex|
+------+---+
|yellow|  F|
|  blue|  M|
|yellow|  F|
| black|  F|
|   red|  M|
|   red|  M|
|  blue|  M|
|  blue|  M|
+------+---+

4.2.3 select方法输入[dataframe别名].[字段名]

dataf.select(dataf.color,dataf.sex).show()
+------+---+
| color|sex|
+------+---+
|yellow|  F|
|  blue|  M|
|yellow|  F|
| black|  F|
|   red|  M|
|   red|  M|
|  blue|  M|
|  blue|  M|
+------+---+

4.2.4 通过dataframe中括号方式

df[df['color'],df['sex']].show()
+------+---+
| color|sex|
+------+---+
|yellow|  F|
|  blue|  M|
|yellow|  F|
| black|  F|
|   red|  M|
|   red|  M|
|  blue|  M|
|  blue|  M|
+------+---+

4.3 使用SparkSQL选取显示字段

sqlContext.sql('select color,sex from temp_tb').show()
+------+---+
| color|sex|
+------+---+
|yellow|  F|
|  blue|  M|
|yellow|  F|
| black|  F|
|   red|  M|
|   red|  M|
|  blue|  M|
|  blue|  M|
+------+---+

五、三种方法增加计算字段

5.1 RDD增加计算字段

sRDD.map(lambda x:(x[0],x[1],x[2],10-int(x[1]))).collect()
[('yellow', '1', 'F', 9),('blue', '2', 'M', 8),('yellow', '3', 'F', 7),('black', '4', 'F', 6),('red', '5', 'M', 5),('red', '5', 'M', 5),('blue', '3', 'M', 7),('blue', '7', 'M', 3)]

5.2 DataFrame增加计算字段

df.select('color','num','sex',10-df['num']).show()
+------+---+---+----------+
| color|num|sex|(10 - num)|
+------+---+---+----------+
|yellow|  1|  F|         9|
|  blue|  2|  M|         8|
|yellow|  3|  F|         7|
| black|  4|  F|         6|
|   red|  5|  M|         5|
|   red|  5|  M|         5|
|  blue|  3|  M|         7|
|  blue|  7|  M|         3|
+------+---+---+----------+
# 为计算字段取一个别名
df.select('color','num','sex',(10-df['num']).alias('diff_num')).show()
+------+---+---+--------+
| color|num|sex|diff_num|
+------+---+---+--------+
|yellow|  1|  F|       9|
|  blue|  2|  M|       8|
|yellow|  3|  F|       7|
| black|  4|  F|       6|
|   red|  5|  M|       5|
|   red|  5|  M|       5|
|  blue|  3|  M|       7|
|  blue|  7|  M|       3|
+------+---+---+--------+

5.3 SparkSQL增加计算字段

sqlContext.sql('select color,num,sex,10-num as diff_num from temp_tb').show()
+------+---+---+--------+
| color|num|sex|diff_num|
+------+---+---+--------+
|yellow|  1|  F|       9|
|  blue|  2|  M|       8|
|yellow|  3|  F|       7|
| black|  4|  F|       6|
|   red|  5|  M|       5|
|   red|  5|  M|       5|
|  blue|  3|  M|       7|
|  blue|  7|  M|       3|
+------+---+---+--------+

六、三种方法筛选数据

6.1 RDD筛选数据

sRDD.filter(lambda x:int(x[1])>2).collect()
[['yellow', '3', 'F'],['black', '4', 'F'],['red', '5', 'M'],['red', '5', 'M'],['blue', '3', 'M'],['blue', '7', 'M']]

6.2 DataFrame筛选数据

四种筛选方式,执行结果相同。

6.2.1 使用多个filter

df.filter("color='blue'").filter('num=2').show()
+-----+---+---+
|color|num|sex|
+-----+---+---+
| blue|  2|  M|
+-----+---+---+

6.2.2 使用单个filter

df.filter("color='blue' and num=2 ").show()
+-----+---+---+
|color|num|sex|
+-----+---+---+
| blue|  2|  M|
+-----+---+---+

6.2.3 使用[dataframe 名称].[字段名]指定条件

注意:

  • 必须使用“&”,不能使用“and”
  • 必须使用“==”,不能使用“=”
df.filter((df.color=='blue') & (df.num==2)).show()
+-----+---+---+
|color|num|sex|
+-----+---+---+
| blue|  2|  M|
+-----+---+---+

6.2.4 使用[]指定筛选条件

df.filter((df['color']=='blue') & (df['num']==2)).show()
+-----+---+---+
|color|num|sex|
+-----+---+---+
| blue|  2|  M|
+-----+---+---+

6.3 SparkSQL筛选数据

sqlContext.sql("""select * from temp_tb where color='blue' and num=2    """).show()
+-----+---+---+
|color|num|sex|
+-----+---+---+
| blue|  2|  M|
+-----+---+---+

七、三种方法按单个字段给数据排序

7.1 RDD:takeOrdered方法

takeOrdered(num,key=None):

  • num:要显示的项数
  • key:使用lambda语句设置要排序的字段
# 升序示例
sRDD.takeOrdered(3,key=lambda x:int(x[1]))
[['yellow', '1', 'F'], ['blue', '2', 'M'], ['yellow', '3', 'F']]
# 降序示例
sRDD.takeOrdered(3,key=lambda x: -1 * int(x[1]))
[['blue', '7', 'M'], ['red', '5', 'M'], ['red', '5', 'M']]

7.2 DataFrame

# 升序
df.orderBy('num').show()
+------+---+---+
| color|num|sex|
+------+---+---+
|yellow|  1|  F|
|  blue|  2|  M|
|  blue|  3|  M|
|yellow|  3|  F|
| black|  4|  F|
|   red|  5|  M|
|   red|  5|  M|
|  blue|  7|  M|
+------+---+---+
# 降序
df.orderBy('num',ascending=0).show()
+------+---+---+
| color|num|sex|
+------+---+---+
|  blue|  7|  M|
|   red|  5|  M|
|   red|  5|  M|
| black|  4|  F|
|  blue|  3|  M|
|yellow|  3|  F|
|  blue|  2|  M|
|yellow|  1|  F|
+------+---+---+

7.3 SQparkSQL

# 升序
sqlContext.sql('select * from temp_tb order by num').show()
+------+---+---+
| color|num|sex|
+------+---+---+
|yellow|  1|  F|
|  blue|  2|  M|
|  blue|  3|  M|
|yellow|  3|  F|
| black|  4|  F|
|   red|  5|  M|
|   red|  5|  M|
|  blue|  7|  M|
+------+---+---+
# 降序sqlContext.sql('select * from temp_tb order by num desc').show()
+------+---+---+
| color|num|sex|
+------+---+---+
|  blue|  7|  M|
|   red|  5|  M|
|   red|  5|  M|
| black|  4|  F|
|  blue|  3|  M|
|yellow|  3|  F|
|  blue|  2|  M|
|yellow|  1|  F|
+------+---+---+

八、三种方法按多个字段排序

8.1 RDD

# 先num降序,color升序
sRDD.takeOrdered(3,key = lambda x: (-1*x[1],x[0]))
[['black', '4', 'F'], ['blue', '2', 'M'], ['blue', '3', 'M']]

8.2 DataFrame

df.orderBy(['num','color'],ascending=[0,1]).show()
+------+---+---+
| color|num|sex|
+------+---+---+
|  blue|  7|  M|
|   red|  5|  M|
|   red|  5|  M|
| black|  4|  F|
|  blue|  3|  M|
|yellow|  3|  F|
|  blue|  2|  M|
|yellow|  1|  F|
+------+---+---+
df.orderBy(df.num.desc(),df.color).show()
+------+---+---+
| color|num|sex|
+------+---+---+
|  blue|  7|  M|
|   red|  5|  M|
|   red|  5|  M|
| black|  4|  F|
|  blue|  3|  M|
|yellow|  3|  F|
|  blue|  2|  M|
|yellow|  1|  F|
+------+---+---+

8.3 SparkSQL

sqlContext.sql("select * from temp_tb order by num desc , color ").show()
+------+---+---+
| color|num|sex|
+------+---+---+
|  blue|  7|  M|
|   red|  5|  M|
|   red|  5|  M|
| black|  4|  F|
|  blue|  3|  M|
|yellow|  3|  F|
|  blue|  2|  M|
|yellow|  1|  F|
+------+---+---+

九、三种方法显示不重复的数据

9.1 RDD

sRDD.map(lambda x:x[2]).distinct().collect()
['F', 'M']
sRDD.map(lambda x:(x[1],x[2])).distinct().collect()
[('3', 'F'),('4', 'F'),('5', 'M'),('3', 'M'),('7', 'M'),('1', 'F'),('2', 'M')]

9.2 DataFrame

df.select('sex').distinct().show()
+---+
|sex|
+---+
|  F|
|  M|
+---+
df.select('num','sex').distinct().show()
+---+---+
|num|sex|
+---+---+
|  2|  M|
|  3|  F|
|  4|  F|
|  1|  F|
|  5|  M|
|  3|  M|
|  7|  M|
+---+---+

9.3 SparkSQL

sqlContext.sql("select distinct sex from temp_tb").show()
+---+
|sex|
+---+
|  F|
|  M|
+---+
sqlContext.sql("select distinct num,sex from temp_tb").show()
+---+---+
|num|sex|
+---+---+
|  2|  M|
|  3|  F|
|  4|  F|
|  1|  F|
|  5|  M|
|  3|  M|
|  7|  M|
+---+---+

十、三种方法分组统计数据

10.1 RDD:map/reduce

在RDD中进行数据的分组统计,必须使用map/reduce

# 单字段:eg:按照sex分组统计
sRDD.map(lambda x:(x[2],int(x[1]))).reduceByKey(lambda x,y:x+y).collect()
[('F', 8), ('M', 22)]
# 多字段
sRDD.map(lambda x:((x[2],x[0]),int(x[1]))).reduceByKey(lambda x,y:x+y).collect()
[(('F', 'yellow'), 4),(('M', 'blue'), 12),(('F', 'black'), 4),(('M', 'red'), 10)]

10.2 DataFrame

df.select(['sex','num']).groupBy('sex').sum().show()
+---+--------+
|sex|sum(num)|
+---+--------+
|  F|       8|
|  M|      22|
+---+--------+
df.select(['sex','color','num']).groupBy(['sex','color']).sum().orderBy(['sex','color']).show()
+---+------+--------+
|sex| color|sum(num)|
+---+------+--------+
|  F| black|       4|
|  F|yellow|       4|
|  M|  blue|      12|
|  M|   red|      10|
+---+------+--------+

10.2.1 crosstab:长表变宽表

df.crosstab('color','sex').show()
+---------+---+---+
|color_sex|  F|  M|
+---------+---+---+
|   yellow|  2|  0|
|      red|  0|  2|
|    black|  1|  0|
|     blue|  0|  3|
+---------+---+---+

10.3 SparkSQL

sqlContext.sql('select sex,sum(num) from temp_tb group by sex').show()
+---+--------+
|sex|sum(num)|
+---+--------+
|  F|       8|
|  M|      22|
+---+--------+

参考资料

《Python+Spark 2.0+Hadoop机器学习与大数据实战》, 林大贵,清华大学出版社,2017-12,9787302490739

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

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

相关文章

文件解析漏洞靶机---- 练习通关攻略

1.安装靶机 点击 hackme.ova 文件&#xff0c;直接导入虚拟机&#xff0c;选择存储位置 2. 开启靶机 3. kali扫描同C段的ip&#xff0c;找到靶机ip nmap 192.168.182.1/24 经判断&#xff0c;靶机ip为&#xff1a;192.168.182.157 开启端口 http 80 、ssh 远程连接 22 4…

信号处理抽取多项滤波的数学推导与仿真

昨天的《信号处理之插值、抽取与多项滤波》&#xff0c;已经介绍了插值抽取的多项滤率&#xff0c;今天详细介绍多项滤波的数学推导&#xff0c;并附上实战仿真代码。 一、数学变换推导 1. 多相分解的核心思想 将FIR滤波器的系数 h ( n ) h(n) h(n)按相位分组&#xff0c;每…

【大模型基础_毛玉仁】2.3 基于 Encoder-only 架构的大语言模型

更多内容&#xff1a;XiaoJ的知识星球 目录 2.3 基于Encoder-only 架构的大语言模型2.3.1 Encoder-only 架构2.3.2 BERT 语言模型1&#xff09;BERT 模型结构2&#xff09;BERT 预训练方式3&#xff09;BERT 下游任务 2.3.3 BERT 衍生语言模型1&#xff09;RoBERTa 语言模型2&a…

20250310:OpenCV mat对象与base64互转

代码: https://github.com/ReneNyffenegger/cpp-base64 指南:https://renenyffenegger.ch/notes/development/Base64/Encoding-and-decoding-base-64-with-cpp/ 实操:

概率论的基本知识

逆概率还不懂&#xff0c;改天再想想。 联合概率 联合概率&#xff08;Joint Probability&#xff09; 是概率论中的一个重要概念&#xff0c;用于描述多个随机变量同时取某些值的概率。联合概率可以帮助我们理解多个变量之间的关系。

pytest数据库测试文章推荐

参考链接&#xff1a; 第一部分&#xff1a;http://alextechrants.blogspot.fi/2013/08/unit-testing-sqlalchemy-apps.html第二部分&#xff1a;http://alextechrants.blogspot.fi/2014/01/unit-testing-sqlalchemy-apps-part-2.html

如何自己做奶茶,从此告别奶茶店

自制大白兔奶茶&#xff0c;奶香与茶香激情碰撞&#xff0c;每一口都是香浓与甜蜜的双重诱惑&#xff0c;好喝到跺脚&#xff01;丝滑口感在舌尖舞动&#xff0c;仿佛味蕾在开派对。 简单几步就能复刻&#xff0c;成本超低&#xff0c;轻松在家享受奶茶自由。 材料:大白兔奶糖&…

文件和异常

从文件中读取数据 读取整个文件 读取整个文件 要读取文件&#xff0c;需要一个包含几行文本的文件。下面首先创建一个文件&#xff0c;它包含精确 到小数点后30位的圆周率值&#xff0c;且在小数点后每10位处换行&#xff1a; pi_digits.txt 3.14159265358979323846264338…

2025最新版Windows通过GoLand远程连接Linux构建Go项目保姆级教学

以Ubuntu24.04和GoLand2024.1.6为例子&#xff0c;演示如何在Windows上通过GoLand远程连接Linux进行Go编程。 通过go version指令可以发现当前Ubuntu系统没有安装go。 go version 通过指令安装go&#xff0c;其他系统可以通过wget安装&#xff0c;要指定安装的具体go版本&…

Linux笔记---文件系统硬件部分

1. 文件系统 文件系统是操作系统用于明确存储设备&#xff08;常见的是磁盘&#xff0c;也有基于NAND Flash的固态硬盘&#xff09;或分区上的文件的方法和数据结构&#xff0c;即在存储设备上组织文件的方法。 1.1 基本组成 索引节点&#xff08;inode&#xff09;&#xff…

网络安全防护架构有哪些 网络安全防护措施包括

网络安全预防措施 网安措施 计算机网络安全措施主要包括保护网络安全、保护应用服务安全和保护系统安全三个方面&#xff0c;各个方面都要结合考虑安全防护的物理安全、防火墙、信息安全、Web安全、媒体安全等等。 (一)保护网络安全。 网络安全是为保护商务各方网络端系统之…

物理笔记 | 拓扑相变的物理图像

1. 一般相变 对于一般的相变是朗道理论预言的由对称性自发破缺导致的。 比如在一维横场Ising模型中的量子相变 H − J ∑ j σ j z σ j 1 z − h ∑ j σ j x H -J \sum_{j} \sigma_j^z \sigma_{j1}^z - h \sum_{j} \sigma_j^x H−Jj∑​σjz​σj1z​−hj∑​σjx​ 其相…

红黑树介绍

1 问题引入 为什么有AVL树&#xff0c;还要引入红黑树&#xff1f; 在进行多次的插入和删除时&#xff1a; 1&#xff09;AVL树会存在大量的旋转操作&#xff0c;追求的是严格平衡&#xff1b; 2&#xff09;红黑树通过为节点增加颜色来换取增删节点时旋转次数…

大模型架构记录5-向量数据库

一 倒排索引、KNN、PQ 1.1 基础版本 query -> requery 对问题做处理&#xff0c;处理上下文 对query 做 refined query 1.2 向量数据库 二 搜索逻辑 2.1 knn 2.2 近似KNN 先和N个空间的均值比较再和空间内部的所有点比较&#xff0c;计算最近值。 优化一&#xff1a; …

考研数学非数竞赛复习之Stolz定理求解数列极限

在非数类大学生数学竞赛中&#xff0c;Stolz定理作为一种强大的工具&#xff0c;经常被用来解决和式数列极限的问题&#xff0c;也被誉为离散版的’洛必达’方法&#xff0c;它提供了一种简洁而有效的方法&#xff0c;使得原本复杂繁琐的极限计算过程变得直观明了。本文&#x…

ACL初级总结

ACL–访问控制列表 1.访问控制 在路由器流量流入或者流出的接口上,匹配流量,然后执行相应动作 permit允许 deny拒绝 2.抓取感兴趣流 3.ACL匹配规则 自上而下逐一匹配,若匹配到了则按照对应规则执行动作,而不再向下继续匹配 思科:ACL列表末尾隐含一条拒绝所有的规则 华为:AC…

【微知】plantuml在泳道图中如何将多个泳道框起来分组并且设置颜色?(box “浏览器“ #LightGreen endbox)

泳道分组并且着色 分组用 box和endbox &#xff0c;颜色用#xxx&#xff0c;标注用"xxx" box "浏览器" #LightGreen participant "浏览器1" as Browser participant "浏览器2" as Browser2 endboxparticipant "服务端" as …

C语言:计算并输出三个整数的最大值 并对三个数排序

这是《C语言程序设计》73页的思考题。下面分享自己的思路和代码 思路&#xff1a; 代码&#xff1a; #include <stdio.h> int main() {int a,b,c,max,min,mid ; //设置大中小的数分别为max&#xff0c;mid&#xff0c;min&#xff0c;abc为输入的三个数printf("ple…

蓝桥备赛(18)- 红黑树和 set 与 map(上)

对于二叉搜索树 &#xff0c; 平衡二叉树 &#xff0c; 以及红黑树 &#xff0c; 目前只需要了解背后的原理 &#xff0c; 不做代码实现的要求 &#xff0c; 重要的就是了解各种操作的时间复杂度即可 &#xff0c; 为set 与 map 做铺垫 一、二叉搜索树 1.1 基本概念 相较与于堆…

【蓝桥杯—单片机】第十五届省赛真题代码题解析 | 思路整理

第十五届省赛真题代码题解析 前言赛题代码思路笔记竞赛板配置建立模板明确基本要求显示功能部分频率界面正常显示高位熄灭 参数界面基础写法&#xff1a;两个界面分开来写优化写法&#xff1a;两个界面合一起写 时间界面回显界面校准校准过程校准错误显示 DAC输出部分按键功能部…