python - DataFrame查询数据操作

学习目标

  • 掌握获取df一列或多列数据的方法

  • 知道loc和iloc的区别以及使用方法

  • 知道df的query函数的使用方法

  • 知道isin函数的作用和使用方法

获取DataFrame子集的基本方法

1.1 从前从后获取多行数据

案例中用到的数据集在文章顶部   LJdata.csv

前景回顾 head() & tail()

import pandas as pd
​
# 加载csv数据集
df = pd.read_csv('LJdata.csv')
# 默认取前5行数据, 返回新的DataFrame
print(df.head())
# 取前10行数据
print(df.head(n=10))
​
# 默认取后5行数据, 返回新的DataFrame
print(df.tail())
# 取后10行数据
print(df.tail(n=10))

1.2 获取一列或多列数据

1.2.1 获取一列数据

获取一列数据, 通过df[列名]df.列名, 返回series对象

==注意:==如果列名字中间有空格, 只能通过df['列名']方式获取

print(df['户型'])
print(df.户型)
print(type(df['户型']))  # <class 'pandas.core.series.Series'>
1.2.2 获取多列数据

获取多列数据, 通过 df[[列名1, 列名2, ...]], 返回dataframe对象

==注意:==是两层[], 可以理解为df[列名的列表]

new_df = df[['区域', '地址']]
print(new_df)
print(type(new_df))  # <class 'pandas.core.frame.DataFrame'>

1.3 布尔值向量获取行数据

  • 布尔值向量:完全由布尔值组成的一维数据,布尔值向量形式为

    • 布尔值构成的列表

    • 布尔值构成的series

    • 布尔值构成的numpy.ndarray

  • df[[布尔值向量]] 其中布尔值向量的布尔值个数必须和df的行数(df.shape[0])相等

1.3.1 布尔值列表获取对应为True的行数据
df_head = df.head()
print(df_head)
print(df_head[[False, True, False, False, True]])
​
# 输出结果如下区域          地址    户型  面积  价格  朝向    更新时间  看房人数
0    燕莎租房        新源街  2室1厅    50  5800    南  2017.07.21        26
1    望京租房      澳洲康都  2室1厅    79  7800    东  2017.07.23        33
2  广安门租房      远见名苑  2室1厅    86  8000    东  2017.07.20        34
3  天通苑租房  天通苑北一区  2室1厅   103  5300  东南  2017.07.25        30
4  团结湖租房    团结湖北口  2室1厅    63  6400    南  2017.07.26        30区域        地址    户型  面积  价格 朝向    更新时间  看房人数
1    望京租房    澳洲康都  2室1厅    79  7800   东  2017.07.23        33
4  团结湖租房  团结湖北口  2室1厅    63  6400   南  2017.07.26        30
1.3.2 布尔值构成的Series获取对应为True的行数据
print(df_head['面积'] > 80)  # 返回布尔值构成的series对象
print(df_head[temp_df['面积'] > 80])
​
# 输出结果如下
0    False
1    False
2     True
3     True
4    False
Name: 面积, dtype: bool区域          地址    户型  面积  价格  朝向    更新时间  看房人数
2  广安门租房      远见名苑  2室1厅    86  8000    东  2017.07.20        34
3  天通苑租房  天通苑北一区  2室1厅   103  5300  东南  2017.07.25        30
1.3.3 布尔值构成的ndarray获取对应为True的行数据
import numpy as np
n1 = np.array([False, True, False, False, True])
print(n1)
print(df_head[n1])
​
# 输出结果如下
[False  True False False  True]区域        地址    户型  面积  价格 朝向    更新时间  看房人数
1    望京租房    澳洲康都  2室1厅    79  7800   东  2017.07.23        33
4  团结湖租房  团结湖北口  2室1厅    63  6400   南  2017.07.26        30

1.4 索引下标切片获取行数据

通过 df[起始行下标:结束行下标:步长], 获取多行数据

遵循==左闭右开==原则(包含起始行, 不包含结束行), 步长默认为1

temp_df = df.head(10) # 取原df前10行数据作为df4,默认自增索引由0到9
print(temp_df[0:3]) # 取前3行
print(temp_df[:5:2]) # 取前5行,步长为2
print(temp_df[1::3]) # 取第2行到最后所有行,步长为3
print(temp_df[-3:])  # 获取最后三行
​
# 输出结果如下区域      地址    户型  面积  价格 朝向    更新时间  看房人数
0    燕莎租房    新源街  2室1厅    50  5800   南  2017.07.21        26
1    望京租房  澳洲康都  2室1厅    79  7800   东  2017.07.23        33
2  广安门租房  远见名苑  2室1厅    86  8000   东  2017.07.20        34区域        地址    户型  面积  价格 朝向    更新时间  看房人数
0    燕莎租房      新源街  2室1厅    50  5800   南  2017.07.21        26
2  广安门租房    远见名苑  2室1厅    86  8000   东  2017.07.20        34
4  团结湖租房  团结湖北口  2室1厅    63  6400   南  2017.07.26        30区域        地址    户型  面积  价格 朝向    更新时间  看房人数
1    望京租房    澳洲康都  2室1厅    79  7800   东  2017.07.23        33
4  团结湖租房  团结湖北口  2室1厅    63  6400   南  2017.07.26        30
7    马甸租房      月季园  2室1厅    53  6000   南  2017.07.16        26

loc通过行列名获取子集

df.loc[] 通过行名(行索引值、行索引名)、列名获取子集

2.1 行索引值获取1行数据

通过 df.loc[行索引值] 获取一行数据

# 获取行索引值为2的一行数据, 返回series
print(temp_df.loc[2]) 
​
# 输出结果如下
区域        广安门租房
地址          远见名苑
户型            2室1厅
面积                86
价格              8000
朝向                东
更新时间    2017.07.20
看房人数            34
Name: 2, dtype: object

2.2 行索引值获取多行数据

通过 df.loc[[行索引值1, 行索引值2, ...]] 获取多行数据

# 获取行索引值为0和2的两行数据, 返回dataframe
print(temp_df.loc[[0, 2]])
​
# 输出结果如下区域      地址    户型  面积  价格 朝向    更新时间  看房人数
0    燕莎租房    新源街  2室1厅    50  5800   南  2017.07.21        26
2  广安门租房  远见名苑  2室1厅    86  8000   东  2017.07.20        34

2.3 行索引值切片获取多行数据

通过 df.loc[起始行索引值:结束行索引值:步长] 获取多行数据

遵循==左闭右闭==原则(包含起始行, 包含结束行), 步长默认为1

==注意:==df.loc[起始行索引值:结束行索引值:步长] 不等同于 df[起始行下标:结束行下标:步长]

print(temp_df.loc[:3])  # 表示获取行索引值0到3的行数据
print(temp_df[:3])  # 表示获取行下标值0到2的行数据
​
# 输出结果如下区域          地址    户型  面积  价格  朝向    更新时间  看房人数
0    燕莎租房        新源街  2室1厅    50  5800    南  2017.07.21        26
1    望京租房      澳洲康都  2室1厅    79  7800    东  2017.07.23        33
2  广安门租房      远见名苑  2室1厅    86  8000    东  2017.07.20        34
3  天通苑租房  天通苑北一区  2室1厅   103  5300  东南  2017.07.25        30区域      地址    户型  面积  价格 朝向    更新时间  看房人数
0    燕莎租房    新源街  2室1厅    50  5800   南  2017.07.21        26
1    望京租房  澳洲康都  2室1厅    79  7800   东  2017.07.23        33
2  广安门租房  远见名苑  2室1厅    86  8000   东  2017.07.20        34

2.4 布尔值向量获取行数据

通过 df.loc[[布尔值向量]] 获取对应为True的行数据, 等同于 df[[布尔值向量]]

df_head = df.head()
n1 = np.array([False, True, False, False, True])
print(df_head.loc[n1])
​
# 输出结果如下区域        地址    户型  面积  价格 朝向    更新时间  看房人数
1    望京租房    澳洲康都  2室1厅    79  7800   东  2017.07.23        33
4  团结湖租房  团结湖北口  2室1厅    63  6400   南  2017.07.26        30

2.5 布尔值向量取行再配合列名取子集

通过 df.loc[布尔值向量, [列名1, 列名2, ...]] 获取子集

# print(temp_df['区域'] == '望京租房')  # 返回布尔值的series
​
# loc 有两个参数,参数1是布尔条件,参数2是选择查询的列
print(temp_df.loc[temp_df['区域'] == '望京租房', ['区域', '价格']])
​
# 输出结果如下区域  价格
1  望京租房  7800

2.6 行索引值取行再配合列名取子集

通过 df.loc[[行索引值1, 行索引值2, ...], [列名1, 列名2, ...]]

print(temp_df.loc[[1], ['区域', '价格']])
​
# 输出结果如下区域  价格
1  望京租房  7800
​
​
print(df.loc[4,'地址'])  # 得到的是字符串
​
# 输出结果如下团结湖北口  

2.7 行索引值切片取行再配合列名取子集

通过 df.loc[行索引值起始值:行索引值结束值:步长, [列名1, 列名2, ...]] 获取子集

遵循==左闭右闭==原则(包含起始行, 包含结束行), 步长默认为1

print(temp_df.loc[1:5:2, ['区域', '价格']])
print(temp_df.loc[:, ['区域', '价格']])
​
# 输出结果如下区域  价格
1    望京租房  7800
3  天通苑租房  5300
5  回龙观租房  4000区域  价格
0    燕莎租房  5800
1    望京租房  7800
2  广安门租房  8000
3  天通苑租房  5300
4  团结湖租房  6400
5  回龙观租房  4000
6    北苑租房  7500
7    马甸租房  6000
8  小西天租房  8500
9    北苑租房  5300

3 iloc通过行列下标获取子集

df.iloc[] 通过行下标(行索引下标、行序号)、列下标获取子集

3.1 行下标获取1行数据

通过 df.iloc[行下标] 获取一行数据

# 获取行索引下标为2的一行数据, 返回series
dict_data= {'歌手':['周杰伦','张国荣','罗大佑'],'歌曲':['七里香','沉默是金','童年']
}
df_star = pd.DataFrame(data=dict_data,index=[2004,1991,1982],columns=['歌手','歌曲'])
print(df_star)
​
print(df_star.iloc[0])  # 行索引是: 2004 1991 1982   # 行下标是 : 0 1 2 
​
# 输出结果
歌手    周杰伦
歌曲    七里香
Name: 2004, dtype: object

3.2 行下标获取多行数据

通过 df.iloc[[行下标1, 行下标2, ...]] 获取多行数据

# 获取行索引下标为0和2的两行数据, 返回dataframe
print(df_star.iloc[[0, 2]])
​
# 输出结果如下歌手   歌曲
2004  周杰伦  七里香
1982  罗大佑   童年

3.3 行下标切片获取多行数据

通过 df.iloc[起始行下标:结束行下标:步长] 获取多行数据

遵循==左闭右开==原则(包含起始行, 不包含结束行), 步长默认为1

==注意:==df.iloc[起始行下标:结束行下标:步长] 等同于 df[起始行下标:结束行下标:步长]

print(temp_df.iloc[:3])  # 表示获取行下标为0到2的行数据
print(temp_df[:3])  # 表示获取行下标为0到2的行数据
​
# 输出结果如下区域      地址    户型  面积  价格 朝向    更新时间  看房人数
0    燕莎租房    新源街  2室1厅    50  5800   南  2017.07.21        26
1    望京租房  澳洲康都  2室1厅    79  7800   东  2017.07.23        33
2  广安门租房  远见名苑  2室1厅    86  8000   东  2017.07.20        34区域      地址    户型  面积  价格 朝向    更新时间  看房人数
0    燕莎租房    新源街  2室1厅    50  5800   南  2017.07.21        26
1    望京租房  澳洲康都  2室1厅    79  7800   东  2017.07.23        33
2  广安门租房  远见名苑  2室1厅    86  8000   东  2017.07.20        34

3.4 行列下标切片取子集

通过 df.iloc[起始行下标:结束行下标:步长, 起始列下标:结束列下标:步长] 获取子集

遵循==左闭右开==原则(包含起始行/列, 不包含结束行/列), 步长默认为1

# 第1行到第5行,每2行选第1行;所有列,每2列取第1列
print(temp_df.iloc[0:5:2, ::2])
​
# 输出结果如下区域    户型  价格    更新时间
0    燕莎租房  2室1厅  5800  2017.07.21
2  广安门租房  2室1厅  8000  2017.07.20
4  团结湖租房  2室1厅  6400  2017.07.26

3.5 行下标切片和列下标取子集

通过 df.iloc[起始行下标:结束行下标:步长, [列下标1, 列下标2, ...]] 获取子集

遵循==左闭右开==原则(包含起始行, 不包含结束行), 步长默认为1

# 第1行到第5行,每2行选第1行;第1列和第3列
print(temp_df.iloc[0:5:2, [0, 2]])
​
# 输出结果如下区域    户型
0    燕莎租房  2室1厅
2  广安门租房  2室1厅
4  团结湖租房  2室1厅

3.6 行下标和列下标取子集

通过 df.iloc[[行下标1, 行下标2, ...], [列下标1, 列下标2, ...]]

# 第1行、第3行、第5行;第1列和第3列
print(temp_df.iloc[[0, 2, 4], [0, 2]])
​
# 输出结果如下区域    户型
0    燕莎租房  2室1厅
2  广安门租房  2室1厅
4  团结湖租房  2室1厅

3.7 行下标和列下标切片取子集

通过 df.iloc[[行下标1, 行下标2, ...], 起始列下标:结束列下标:步长] 获取子集

遵循==左闭右开==原则(包含起始列, 不包含结束列), 步长默认为1

# 第1行、第3行、第5行;所有列,每2列取第1列
print(temp_df.iloc[[0, 2, 4], ::2])
​
# 输出结果如下区域    户型  价格    更新时间
0    燕莎租房  2室1厅  5800  2017.07.21
2  广安门租房  2室1厅  8000  2017.07.20
4  团结湖租房  2室1厅  6400  2017.07.26

4 query函数获取子集

通过 df.query(判断表达式) 获取符合条件的df子集, 与 df[[布尔值向量]] 效果相同

==注意:==判断表达式为字符串格式

  • 示例

    print(temp_df.query("区域=='望京租房'"))  #  区域是列名  ,望京租房是值
    print(temp_df[temp_df['区域'] == '望京租房'])
    ​
    # 输出结果如下区域      地址    户型  面积  价格 朝向    更新时间  看房人数
    1  望京租房  澳洲康都  2室1厅    79  7800   东  2017.07.23        33

  • 查询租房区域为望京、天通苑、回龙观并且朝向为东、南的房源数据

    ​
    # .query().query()是链式编程, 第一个query查询之后,第二个query会在第一个的基础上再进行查询
    ​
    print(temp_df.query('区域 in ["望京租房", "天通苑租房", "回龙观租房"]').query('朝向 in ["东", "南"]'))
    ​
    print(temp_df.query('(区域 in ["望京租房", "天通苑租房", "回龙观租房"]) and (朝向 in ["东", "南"])'))
    ​
    # 作用同上
    print(temp_df.query('(区域 in ["望京租房", "天通苑租房", "回龙观租房"]) & (朝向 in ["东", "南"])'))
    ​
    ​
    # 输出结果如下区域      地址    户型  面积  价格 朝向    更新时间  看房人数
    1    望京租房  澳洲康都  2室1厅    79  7800   东  2017.07.23        33
    5  回龙观租房    龙华园  1室1厅    58  4000   南  2017.07.23        61

5 isin函数获取子集

通过 df.isin(values=[值1, 值2, ...]) 判断df中的数据值是否在values列表值中, 返回由布尔值构成的新df

原df中数据值在values列表中返回True, 否则返回False

temp_df = df.head(5)
# 拿到temp_df每行每列的值去和'天通苑租房'比较,如果比较成功,返回True,否则false
print(temp_df.isin(values=['天通苑租房']))
​
# 拿到temp_df每行每列的值去和'天通苑租房'或者'南'比较,如果比较成功,返回True,否则false
print(temp_df.isin(values=['天通苑租房', '南']))
​
print(temp_df[temp_df.isin(values=['天通苑租房', '南'])])
​
print(temp_df[((temp_df["区域"]=='望京租房') | (temp_df['区域']=='天通苑租房') | (temp_df['区域']=='回龙观租房')) & ((temp_df['朝向']=='东') | (temp_df['朝向']=='南'))])
​
​
​
# 输出结果如下区域   地址   户型   面积   价格   朝向  更新时间  看房人数
0  False  False  False  False  False  False     False     False
1  False  False  False  False  False  False     False     False
2  False  False  False  False  False  False     False     False
3   True  False  False  False  False  False     False     False
4  False  False  False  False  False  False     False     False区域   地址   户型   面积   价格   朝向  更新时间  看房人数
0  False  False  False  False  False   True     False     False
1  False  False  False  False  False  False     False     False
2  False  False  False  False  False  False     False     False
3   True  False  False  False  False  False     False     False
4  False  False  False  False  False   True     False     False区域 地址 户型  面积  价格 朝向 更新时间  看房人数
0         NaN  NaN  NaN   NaN   NaN   南      NaN       NaN
1         NaN  NaN  NaN   NaN   NaN  NaN      NaN       NaN
2         NaN  NaN  NaN   NaN   NaN  NaN      NaN       NaN
3  天通苑租房  NaN  NaN   NaN   NaN  NaN      NaN       NaN
4         NaN  NaN  NaN   NaN   NaN   南      NaN       NaN

Serires对象使用isin函数返回新的s对象,其他完全相同

print(temp_df['区域'].isin(values=['天通苑租房']))
print(temp_df['区域'].isin(values=['天通苑租房', '回龙观租房']))
print(temp_df[temp_df['区域'].isin(values=['天通苑租房', '回龙观租房'])])
​
​
# 输出结果如下
0    False
1    False
2    False
3     True
4    False
Name: 区域, dtype: bool
0    False
1    False
2    False
3     True
4    False
Name: 区域, dtype: bool区域          地址    户型  面积  价格  朝向    更新时间  看房人数
3  天通苑租房  天通苑北一区  2室1厅   103  5300  东南  2017.07.25        30

总结

请对下列API 有印象、能找到、能理解、能看懂

  • API清单

子集操作方法方法说明
df.head(n)获取前n行数据,默认5行
df.tail(n)获取最后n行数据,默认5行
df[列名] 或 df.列名获取一列数据
df[[列名1,列名2,...]]获取多列数据
df[[布尔值向量]]df[[True, False, ...]]取出对应为True的数据行
df[起始行下标:结束行下标:步长]行下标(索引下标)切片获取数据行
df.loc[行索引值]索引值(行名)获取1行数据
df.loc[[行索引值1, 行索引值2, ...]]索引值(行名)获取多行数据
df.loc[起始行索引值:结束行索引值:步长]索引值(行名)切片获取多行数据,注意与df[起始行下标:结束行下标:步长]不同
df.loc[[布尔值向量]]布尔值向量获取行数据,等同于df[[布尔值向量]]
df.loc[布尔值向量,[列名1, 列名2, ...]]布尔值向量取行再配合列名取子集
df.loc[[行索引值1, 行索引值2, ...], [列名1, 列名2, ...]]索引值取行再配合列名取子集
df.loc[行索引值起始值:行索引值结束值:步长, [列名1, 列名2, ...]]列名取子集
df.iloc[行下标]行下标取1行
df.iloc[[行下标1, 行下标2, ...]]行下标取多行
df.iloc[起始行下标:结束行下标:步长]行下标切片取多行
df.iloc[起始行下标:结束行下标:步长,起始列下标:结束列下标:步长]行列下标切片取子集
df.iloc[起始行下标:结束行下标:步长,[列下标1, 列下标2, ...]]行下标切片和列下标取子集
df.iloc[[行下标1, 行下标2, ...], [列下标1, 列下标2, ...]]行下标和列下标取子集
df.iloc[[行下标1, 行下标2, ...], 起始列下标:结束列下标:步长]行下标和列下标切片取子集
df.query('判断表达式字符串')df[[布尔值向量]]效果相同依据判断表达式返回符合条件的df子集
df.isin([值1, 值2, ...])判断是否存在某个值
  • loc和iloc的区别:

    • loc是根据行列名获取子集,行列名是肉眼看到的值

    • iloc是根据行列下标获取子集,行列下

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

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

相关文章

实现树形结构几种方式

1&#xff0c;三级分类树形结构查询 /*** DDD(Domain-Driven Design): 领域驱动设计** 三级分类树形结构&#xff1b;* 支持无限层级&#xff1b;* 当前项目只有三级*/ Data public class CategoryTreeTo {private Long categoryId; //1private String categoryName;private …

操作系统入门系列-MIT6.828(操作系统工程)学习笔记(四)---- C语言与计算机架构(Programming xv6 in C)

系列文章目录 操作系统入门系列-MIT6.S081&#xff08;操作系统&#xff09;学习笔记&#xff08;一&#xff09;---- 操作系统介绍与接口示例 操作系统入门系列-MIT6.828&#xff08;操作系统工程&#xff09;学习笔记&#xff08;二&#xff09;----课程实验环境搭建&#x…

图像处理 -- 自适应色调映射(ATM)整理

自适应色调映射&#xff08;ATM&#xff09;技术文档 简介 自适应色调映射&#xff08;Adaptive Tone Mapping, ATM&#xff09;是一种用于调整图像或视频中亮度和对比度的技术&#xff0c;以适应不同的显示环境和设备&#xff0c;从而提供最佳的视觉体验。ATM的主要作用是改…

linux系统——route路由命令

route路由对linux内的ip路由表进行操作 计算机间的数据通信是通过网络来实现的&#xff0c;路由就是从源主机到目标主机的转发过程 路由分为静态路由与动态路由&#xff0c;linux中的均为静态路由&#xff0c;动态路由由交换机路由器自动分配规则而来

[word] word悬挂缩进怎么设置? #经验分享#职场发展#经验分享

word悬挂缩进怎么设置&#xff1f; 在编辑Word的时候上方会有个Word标尺&#xff0c;相信很多伙伴都没使用过。其实它隐藏着很多好用的功能&#xff0c;今天就给大家分享下利用这个word标尺的悬挂缩进怎么设置&#xff0c;一起来看看吧&#xff01; 1、悬挂缩进 选中全文&…

Linux Mint 默认禁用未经验证的 Flatpak 软件包

Linux Mint 默认禁用未经验证的 Flatpak 软件包 Linux Mint 新政策 Linux Mint 项目宣布了一项新政策&#xff0c;即默认禁用那些未经官方验证的 Flatpak 软件包&#xff0c;以增强用户的安全保障。 当用户选择启用未经验证的 Flatpak 软件包时&#xff0c;Linux Mint 的软…

JAVA开发的一套(智造制造领航者云MES系统成品源码)saas云MES制造执行系统源码,全套源码,支持二次开发

JAVA开发的一套&#xff08;智造制造领航者云MES系统成品源码&#xff09;saas云MES制造执行系统源码&#xff0c;全套源码&#xff0c;支持二次开发 1990年11月&#xff0c;美国先进制造研究中心AMR&#xff08;Advanced Manufacturing Research&#xff09;就提出了MES&#…

SP16139 CODCHESS - Naya Shatranj (New Chess) 题解

题目传送门 解题思路 这道题目其实不难&#xff0c;我们可以打表找规律。 当 n 1 n1 n1 时 A 赢。 当 n 2 n2 n2 时 B 赢。 当 n 3 n3 n3 时 A 赢。 当 n 4 n4 n4 时 B 赢。 …… 由此可见&#xff0c;当 n n n 为奇数时&#xff0c;A 赢&#xff0c;否则 B 赢…

Linux守护进程揭秘-无声无息运行在后台

在Linux系统中&#xff0c;有一些特殊的进程悄无声息地运行在后台&#xff0c;如同坚实的基石支撑着整个系统的运转。它们就是众所周知的守护进程(Daemon)。本文将为你揭开守护进程的神秘面纱&#xff0c;探讨它们的本质特征、创建过程&#xff0c;以及如何重定向它们的输入输出…

AI初识--LLM、ollama、llama都是些个啥?

LLM全称&#xff08;large language model&#xff09;也就是大语言模型 什么是Ollama&#xff0c;它与Llama是什么关系&#xff1f; Ollama是一个开源的 LLM&#xff08;大型语言模型&#xff09;服务工具&#xff0c;用于简化在本地运行大语言模型&#xff0c;降低使用大语…

赶紧收藏!2024 年最常见 20道分布式、微服务面试题(二)

上一篇地址&#xff1a;赶紧收藏&#xff01;2024 年最常见 20道分布式、微服务面试题&#xff08;一&#xff09;-CSDN博客 三、请解释CAP定理&#xff0c;并讨论其在实际应用中的意义。 CAP定理是分布式系统理论中的一个重要概念&#xff0c;由计算机科学家Eric Brewer在200…

国产主流软硬件厂商生态分析

国产领域主流厂商汇总 信创&#xff0c;即信息技术应用创新&#xff0c;由“信息技术应用创新工作委员会”于2016年3月4日发起&#xff0c;是专注于软硬件关键技术研发、应用与服务的非营利性组织。作为科技自强的关键力量&#xff0c;信创在我国信息化建设中占据核心地位&…

外部mysql导入

利用这个命令&#xff1a; mysql -u username -p database_name < file.sql 然后就这样。成功导入。

定个小目标之每天刷LeetCode热题(12)

这是一道简单题&#xff0c;使用位运算中的异或运算即可&#xff0c;异或运算有以下性质&#xff1a; 1、任何数异或 0 结果仍然是原来的数&#xff0c;即 a⊕0a 2、任何数和其自身做异或运算&#xff0c;结果是 0 所以我们只需要让数组里的所有元素进行异或运算得到的结果就…

springboot防止表单重复提交

第一种方法&#xff1a;单个防止 在Spring Boot应用中使用Redis来防止表单的重复提交&#xff0c;可以通过以下几个步骤来实现&#xff1a; 步骤 1: 添加依赖 确保你的项目中添加了Spring Boot Starter Data Redis和Spring Boot Starter Web依赖。在pom.xml文件中添加以下依…

探索风电机组:关键软件工具全解析

探索风电机组&#xff1a;关键软件工具全解析 随着可再生能源市场的迅猛发展&#xff0c;风电作为一种重要的可再生能源&#xff0c;其相关技术和工具也越来越受到重视。风电机组的设计、仿真、优化及运维等方面&#xff0c;都需要依靠一系列专业软件工具来实现。这些软件涵盖…

Netty中的ByteBuf使用介绍

ByteBuf有三类&#xff1a; 堆缓存区&#xff1a;JVM堆内存分配直接缓冲区&#xff1a;有计算机内存分配&#xff0c;JVM只是保留分配内存的地址信息&#xff0c;相对于堆内存方式较为昂贵&#xff1b;复合缓冲区&#xff1a;复合缓冲区CompositeByteBuf&#xff0c;它为多个B…

VS2019创建c++动态链接库dll与调用方法

VS2019创建c动态链接库dll与调用方法 1.点击文件-》新建-》项目&#xff0c;输入dll,选择具有导出项的(DLL)动态链接库 2.输入一个文件名&#xff1a;dll2 头文件.h 3.添加加减法函数&#xff1a; // 下列 ifdef 块是创建使从 DLL 导出更简单的 // 宏的标准方法。此 DLL 中的…

题解web

1.[LitCTF 2023]Follow me and hack me 1&#xff09;进入题目环境&#xff0c;提示get传参&#xff0c;post传参 2&#xff09;看看源码&#xff0c;也没啥 3&#xff09;直接用hackbar&#xff0c;传入对应参数即可得到FLAG 3&#xff09;但是扫描出来它后端还有东西&#x…

linux-磁盘空间显示指令

在Linux中&#xff0c;要查看磁盘空间并输出详细报告&#xff0c;你可以使用df&#xff08;disk filesystem&#xff09;命令。通过添加不同的选项&#xff0c;你可以定制df命令的输出&#xff0c;以获取更详细的信息。 以下是一些常用的df命令选项&#xff0c;以及它们如何帮…