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

python量化交易——金融数据管理最佳实践——使用qteasy大批量自动拉取金融数据

文章目录

  • 使用数据获取渠道自动填充数据
    • QTEASY数据拉取功能
    • 数据拉取接口`refill_data_source()`
    • 数据拉取API的功能特性
      • 多渠道拉取数据
      • 实现下载流量控制
      • 实现错误重试
      • 日志记录
      • 其他功能

qteasy是一个功能全面且易用的量化交易策略框架, Github地址在这里。使用它,能轻松地获取历史数据,创建交易策略并完成回测和优化,还能实盘运行。 项目文档在这里。

使用qteasy,您可以非常容易地在本地(本地电脑或者NAS服务器上)创建一个金融数据源,并自动从网上拉取大量金融数据保存在其中,以管理您的金融数据。这是一篇系列文章,前几篇文章的链接在这里:

  • 创建本地数据源
  • 管理本地数据源

这篇文章介绍如何自动从网络拉取金融数据。

使用数据获取渠道自动填充数据

前面介绍过DataSource对象的基本操作方法,但是在实际使用中,我们需要往DataSource对象中填充大量数据,如果使用前面章节介绍的DataSource.update_table_data()方法手动填充数据,这样的工作量是非常大的。

这里我们介绍如何使用数据获取渠道自动填充数据。

QTEASY数据拉取功能

QTEASY数据管理模块:

在这里插入图片描述

如上图所示,qteasy的数据功能分为三层,第一层包括多种数据下载接口,用于从网络数据提供商获取数据,这个过程称为DataFetching

数据拉取接口refill_data_source()

qteasy提供了一个自动化数据下载接口qteasy.refill_data_source(),可以从多个不同的网络数据提供商拉取多种金融数据,满足不同用户的使用习惯。qteasy提供的数据拉取API具备强大的多线程并行下载、数据分块下载、下载流量控制和错误延时重试功能,以适应不同数据供应商各种变态的流量限制,同时数据拉取API可以方便地定期自动运行完成数据批量下载任务,不用担心错过高频数据。

下面先用一个例子解释如何使用qteasy.refill_data_source()接口自动填充数据。我们先创建一个不含数据的DataSource对象,并向其中填充最基本的数据。

>>> import qteasy as qt
>>> ds = qt.DataSource()
# 检查数据源中是否有数据
>>> ds.overview()
Analyzing local data source tables... depending on size of tables, it may take a few minutes
[########################################]104/104-100.0%  A...zing completed!
Finished analyzing datasource: 
file://csv@qt_root/data/
3 table(s) out of 104 contain local data as summary below, to view complete list, print returned DataFrame
===============================tables with local data===============================Has_data Size_on_disk Record_count Record_start Record_end
table                                                                    
trade_calendar   True       1.8MB         70K          CFFEX        SZSE 
stock_basic      True       852KB          5K           None        None 
stock_daily      True      98.8MB        1.3M       20211112    20241231 

我们可以看到,DataSource对象中已经有了一些数据表,为了进行下面的测试,我们将首先删除trade_calendar以及stock_daily两张数据表中的数据,然后再使用数据拉取接口自动填充它们。

首先删除两张数据表,为了删除数据表,首先将数据源的allow_drop_table属性设置为True,然后再删除数据表。

>>> ds.allow_drop_table = True
>>> ds.drop_table_data('trade_calendar')
>>> ds.drop_table_data('stock_daily')
>>> ds.allow_drop_table = False
>>> overview = ds.overview()
Analyzing local data source tables... depending on size of tables, it may take a few minutes
[########################################]104/104-100.0%  A...zing completed!
Finished analyzing datasource: 
file://csv@qt_root/data/
1 table(s) out of 104 contain local data as summary below, to view complete list, print returned DataFrame
===============================tables with local data===============================Has_data Size_on_disk Record_count Record_start Record_end
table                                                                 
stock_basic   True       852KB         5K          None        None   

可以看到,trade_calendarstock_daily两张数据表中的数据已经被删除。

接下来,我们使用qteasy.refill_data_source()接口自动填充数据,代码很简单,只有一行,剩下的工作qteasy会自动完成。

>>> qt.refill_data_source(tables='stock_daily',  # 指定要填充的数据表:股票日K线数据channel='tushare',  # 指定数据下载渠道data_source=ds,  # 指定需要填充的数据源对象start_date='20210101',  # 指定数据下载的起始日期end_date='20211231',  # 指定数据下载的结束日期
)Filling data source file://csv@qt_root/data/ ...
into 2 table(s) (parallely): {'stock_daily', 'trade_calendar'}
[########################################]243/243-100.0%  <stock_daily> 2398764 wrtn in about 16 sec                 
[########################################]7/7-100.0%  <trade_calendar> 70054 wrtn in about 1 sec                     Data refill completed! 2468818 rows written into 2/2 table(s)!

拉取并填充数据后,可以检查数据已经下载成功了:

>>> ds.read_table_data('stock_daily', shares='000001.SZ, 000002.SZ', start='20211111', end='20211131')open   high    low  close  pre_close  change  pct_chg  \
ts_code   trade_date                                                           
000001.SZ 2021-11-11  17.35  18.43  17.32  18.35      17.40    0.95   5.4598   2021-11-12  18.31  18.63  18.11  18.27      18.35   -0.08  -0.4360   2021-11-15  18.35  18.63  18.20  18.43      18.27    0.16   0.8758   2021-11-16  18.36  18.54  18.17  18.22      18.43   -0.21  -1.1394   2021-11-17  18.15  18.30  17.98  18.11      18.22   -0.11  -0.6037   2021-11-18  18.09  18.12  17.73  17.80      18.11   -0.31  -1.7118   2021-11-19  17.80  18.24  17.70  18.15      17.80    0.35   1.9663   2021-11-22  18.03  18.25  17.90  18.12      18.15   -0.03  -0.1653   2021-11-23  18.11  18.35  17.68  17.88      18.12   -0.24  -1.3245   2021-11-24  17.77  17.95  17.66  17.87      17.88   -0.01  -0.0559   2021-11-25  17.74  17.79  17.63  17.68      17.87   -0.19  -1.0632   2021-11-26  17.62  17.67  17.52  17.58      17.68   -0.10  -0.5656   2021-11-29  17.41  17.57  17.36  17.51      17.58   -0.07  -0.3982   2021-11-30  17.54  17.68  17.35  17.44      17.51   -0.07  -0.3998   
000002.SZ 2021-11-11  18.95  20.84  18.89  20.79      18.98    1.81   9.5364   2021-11-12  20.50  20.50  19.41  19.76      20.79   -1.03  -4.9543   2021-11-15  19.56  19.59  19.12  19.40      19.76   -0.36  -1.8219   2021-11-16  19.29  19.57  19.21  19.24      19.40   -0.16  -0.8247   2021-11-17  19.23  19.53  19.09  19.46      19.24    0.22   1.1435   2021-11-18  19.35  19.40  18.98  19.09      19.46   -0.37  -1.9013   2021-11-19  19.01  20.28  18.92  19.90      19.09    0.81   4.2431   2021-11-22  19.90  19.95  19.19  19.22      19.90   -0.68  -3.4171   2021-11-23  19.19  19.44  19.10  19.24      19.22    0.02   0.1041   2021-11-24  19.12  19.38  19.00  19.30      19.24    0.06   0.3119   2021-11-25  19.22  19.35  19.07  19.22      19.30   -0.08  -0.4145   2021-11-26  19.15  19.15  18.95  18.99      19.22   -0.23  -1.1967   2021-11-29  18.75  18.87  18.35  18.46      18.99   -0.53  -2.7909   2021-11-30  18.44  18.66  18.16  18.26      18.46   -0.20  -1.0834   vol       amount  
ts_code   trade_date                           
000001.SZ 2021-11-11  2084729.00  3752413.858  2021-11-12   957546.46  1753072.716  2021-11-15   655089.99  1203764.095  2021-11-16   601110.48  1099113.409  2021-11-17   664640.38  1203859.180  2021-11-18   799843.77  1430058.311  2021-11-19   786371.56  1414506.380  2021-11-22   738617.80  1337768.172  2021-11-23  1235977.96  2213817.590  2021-11-24   741310.84  1316774.397  2021-11-25   603532.70  1068221.304  2021-11-26   694499.88  1219937.312  2021-11-29   512594.71   895105.981  2021-11-30   733616.06  1280384.552  
000002.SZ 2021-11-11  3151015.76  6352746.112  2021-11-12  2065924.12  4100076.111  2021-11-15   959331.52  1852352.374  2021-11-16   593989.40  1149085.955  2021-11-17   623749.71  1205064.294  2021-11-18   609995.75  1168010.581  2021-11-19  1308293.09  2570652.947  2021-11-22   877584.30  1697701.639  2021-11-23   563435.65  1083646.252  2021-11-24   827366.98  1587246.249  2021-11-25   518123.06   995473.890  2021-11-26   504023.33   959331.064  2021-11-29   718595.81  1334479.867  2021-11-30   713092.22  1305310.857

数据拉取API的功能特性

分析数据拉取的过程,我们可以看到,qteasy自动完成了下面的工作:

  • 自动查找依赖表 —— 虽然我们只指定了stock_daily数据表,但是qteasy自动检测到trade_calendar数据表也是空的,且stock_daily表依赖交易日历表,所以也自动填充了trade_calendar数据表。
  • 下载进度可视化 —— qteasy提供了下载进度可视化,可以看到每个数据分块的下载进度,以及总体下载进度,过程中可以显示剩余时间,方便用户查看数据下载的情况。
  • 大数据量自动分块 —— 上面的代码下载了2021年全年所有股票的日K线数据,这些数据量共有239万行,不管从任何数据渠道,这么大量的数据都不可能一次性下载下来,因此,qteasy自动将数据分块,每一块只有一天的数据,可以看到整年的数据被分成了243块,数据分块下载显著降低了每次网络申请的数据量,提高成功率且降低了被阻断的风险。
  • 多线程并行下载 —— 实行数据分块下载后,qteasy自动使用多线程并行下载,加快数据下载速度,243个数据分块并行下载总共耗时仅16秒。

有了上面这些特性,qteasy的数据拉取功能可以满足几乎所有用户的数据获取需求,不管是下载大量数据,还是下载高频数据,qteasy都能提供高效的数据下载服务。

当然,除了上面提到的这些特性之外,qteasy还提供了更多的功能特性,以针对下载过程中出现的各种状况,这些功能特性我们在后面会逐步介绍:

  • 多渠道下载 —— qteasy提供了多种数据下载渠道,很多数据表可以从多个不同的渠道下载,而且随着版本更新,数据拉取渠道也在不断增加。
  • 流量控制 —— 有些数据渠道对数据下载有流量限制,qteasy提供了流量控制功能,可以限制数据下载的速度,即下载一定分块数量的数据后,可以暂停一段时间,例如每下载300个分块的数据,就暂停一分钟,避免被数据渠道封禁。
  • 错误重试 —— 有些数据渠道下载数据时,可能会出现网络错误,qteasy提供了错误重试功能,可以在下载失败后,自动重试下载,如果重试不成功,会延长重试等待时间再试,直到下载成功或超过重试次数并报错。
  • 日志记录 —— qteasy提供了数据下载日志记录功能,可以记录每次数据下载的详细信息,包括下载的数据量、下载的时间、下载的速度等,方便用户查看数据下载的情况。

多渠道拉取数据

qteasy提供了多种数据下载渠道,很多数据表可以从多个不同的渠道下载,而且随着版本更新,数据拉取渠道也在不断增加。

refill_data_source()接口的channel参数可以指定数据下载渠道,如果不指定,qteasy会自动选择一个默认的数据下载渠道tushare,但是用户也可以手动指定数据下载渠道,例如 :

下面的代码尝试从eastmoney数据渠道下载stock_daily数据表从2025年最初两个月的日K线数据:

>>> qt.refill_data_source(tables='stock_daily', channel='eastmoney',   # 指定数据下载渠道为东方财经data_source=ds, start_date='20250101', end_date='20250301',
)Filling data source file://csv@qt_root/data/ ...
into 2 table(s) (parallely): {'stock_daily', 'stock_basic'}
[########################################]11078/11078-100.0%  <stock_daily> 131264304 wrtn in about 17 min           
[----------------------------------------]0/1-0.0%  <stock_basic> can't be fetched from channel:eastmoney!Data refill completed! 131264304 rows written into 1/2 table(s)!

验证一下数据是否下载成功:

>>> ds.read_table_data('stock_daily', shares='000001.SZ, 000002.SZ', start='20250101', end='20250103')open   high    low  close  pre_close  change  pct_chg  \
ts_code   trade_date                                                           
000001.SZ 2025-01-13  11.25  11.26  11.08  11.20      11.30   -0.10  -0.8850   2025-01-14  11.20  11.40  11.19  11.38      11.20    0.18   1.6071   2025-01-15  11.38  11.58  11.36  11.48      11.38    0.10   0.8787   2025-01-16  11.55  11.59  11.47  11.57      11.48    0.09   0.7840   2025-01-17  11.53  11.55  11.42  11.45      11.57   -0.12  -1.0372   2025-01-20  11.50  11.52  11.40  11.42      11.45   -0.03  -0.2620   2025-01-21  11.45  11.45  11.32  11.33      11.42   -0.09  -0.7881   2025-01-22  11.32  11.33  11.08  11.09      11.33   -0.24  -2.1183   2025-01-23  11.17  11.40  11.17  11.32      11.09    0.23   2.0739   2025-01-24  11.32  11.39  11.22  11.34      11.32    0.02   0.1767   2025-01-27  11.38  11.55  11.38  11.47      11.34    0.13   1.1464   
000002.SZ 2025-01-13   6.60   6.77   6.55   6.76       6.69    0.07   1.0463   2025-01-14   6.76   6.93   6.75   6.91       6.76    0.15   2.2189   2025-01-15   6.88   6.96   6.79   6.86       6.91   -0.05  -0.7236   2025-01-16   6.90   7.07   6.84   6.88       6.86    0.02   0.2915   2025-01-17   6.58   6.65   6.45   6.63       6.88   -0.25  -3.6337   2025-01-20   6.60   6.94   6.48   6.85       6.63    0.22   3.3183   2025-01-21   6.84   7.54   6.82   7.36       6.85    0.51   7.4453   2025-01-22   7.27   7.36   6.98   7.02       7.36   -0.34  -4.6196   2025-01-23   7.15   7.70   7.08   7.36       7.02    0.34   4.8433   2025-01-24   7.33   7.54   7.21   7.39       7.36    0.03   0.4076   2025-01-27   7.38   7.56   7.22   7.27       7.39   -0.12  -1.6238   vol       amount  
ts_code   trade_date                          
000001.SZ 2025-01-13   934966.0  1044904.416  2025-01-14   824629.0   934467.766  2025-01-15  1031631.0  1185403.653  2025-01-16   872964.0  1007689.274  2025-01-17   689765.0   791230.419  2025-01-20   832029.0   953092.179  2025-01-21   902069.0  1024879.174  2025-01-22  1347129.0  1504818.607  2025-01-23  1514920.0  1715172.472  2025-01-24   944944.0  1069899.088  2025-01-27  1151935.0  1324270.607  
000002.SZ 2025-01-13   911147.0   611005.036  2025-01-14  1116454.0   765177.082  2025-01-15   887294.0   608363.557  2025-01-16  1110545.0   771648.218  2025-01-17  3620283.0  2369977.993  2025-01-20  2988167.0  2009728.944  2025-01-21  5849397.0  4290640.172  2025-01-22  3448728.0  2457396.391  2025-01-23  4416581.0  3245710.622  2025-01-24  2555024.0  1885566.128  2025-01-27  2151753.0  1580357.769  

数据下载显然也是成功的。分析上面的下载过程,可以发现几个特点:

  • 不同渠道下载的数据格式是相同的,这是qteasy的设计原则,不同的数据下载渠道下载的数据会经历相同的清洗过程,这样用户可以方便地切换不同的数据下载渠道,而不用担心数据格式不同导致的数据处理问题。
  • 不同的渠道下载分块方式不同,导致下载速度不同,eastmoney数据渠道下载速度较慢,需要约17分钟才能下载完成。这是由于不同下载渠道的特殊限制决定的。
  • 不同渠道的下载可以下载的数据表也不同,有些数据表无法通过某些渠道下载,可能是因为权限限制或者其他因素导致的,如果某个数据表无法下载,qteasy会自动跳过这个数据表,不会影响其他数据表的下载。

因此,用户需要根据自身的情况选择不同的渠道拉取数据。

实现下载流量控制

qteasyrefill_data_source提供了流量控制功能,可以限制数据下载的速度,即下载一定分块数量的数据后,可以暂停一段时间,例如每下载300个分块的数据,就暂停一分钟,避免被数据渠道封禁。

这个功能通过refill_data_source()接口的download_batch_sizedownload_batch_interval两个参数实现:

  • download_batch_size参数指定每次下载的数据分块数量,如果设置为300,则在下载300个数据分块后,会暂停一段时间。
  • download_batch_interval参数指定每次下载数据分块后的暂停时间,默认为0,即不暂停。

下面的代码演示了如何使用download_batch_sizedownload_batch_interval参数实现下载流量控制:

>>> qt.refill_data_source(tables='stock_daily',channel='tushare',data_source=ds, start_date='20250101', end_date='20250301', download_batch_size=300,  # 每次下载300个数据分块download_batch_interval=60,  # 每次下载300个数据分块后暂停60秒
)

如果是用流量控制,当然下载时间会变长,但是对于某些数据渠道,这是必须的,否则可能会被封禁或报错导致下载失败。

实现错误重试

需要注意的是,数据下载过程中出错,qteasy会自动重试下载,重试机制如下:

  • 第一次下载失败后重试之前会等待一段时间,默认等待时间为1.0秒
  • 每次重试失败后,等待时间都会增加,默认等待时间增加为2倍,即第一次等待1.0秒,第二次等待2.0秒,第三次等待4.0秒,以此类推。
  • 重试超过最大限额后停止重试并报错,默认情况下最多重复7次。

以上三个错误重试参数都是通过qteasy的配置文件在设定的,用户可以通过qt.config()接口查看或修改这些参数,也可以在qteasy的初始配置文件中修改这些参数。

  • hist_dnld_retry_cnt - 最大重试次数,默认为7次
  • hist_dnld_retry_wait - 第一次重试等待时间,默认为1.0秒
  • hist_dnld_backoff - 重试等待时间增加倍数,默认为2.0

关于如何修改配置文件,或者使用qteasy的初始配置文件,请参考qteasy的配置文件章节。

日志记录

qteasy提供了数据下载日志记录功能,可以记录每次数据下载的详细信息,包括下载的数据量、下载的时间、下载的速度等,方便用户查看数据下载的情况。

其他功能

qteasyrefill_data_source()接口还提供了其他一些功能,例如:

  • 限制下载数据的范围,可以通过start_dateend_date参数限制下载数据的时间范围,通过shares参数限制下载数据的股票范围。
  • 设置是否并行下载,可以通过parallel参数设置是否并行下载,如果设置为False,则会串行下载,否则会并行下载。
  • 设置是否下载依赖表,可以通过download_dependent参数设置是否下载依赖表,如果设置为False,则不会下载依赖表,否则会下载依赖表。
  • 设置是否强制更新交易日历表。

其他更多关于该接口的解释,请参见qteasy的API文档。

相关文章:

python量化交易——金融数据管理最佳实践——使用qteasy大批量自动拉取金融数据

文章目录 使用数据获取渠道自动填充数据QTEASY数据拉取功能数据拉取接口refill_data_source()数据拉取API的功能特性多渠道拉取数据实现下载流量控制实现错误重试日志记录其他功能 qteasy是一个功能全面且易用的量化交易策略框架&#xff0c; Github地址在这里。使用它&#x…...

为AI聊天工具添加一个知识系统 之136 详细设计之77 通用编程语言 之7

问题 Q1492、针对前面您给出的“AI聊天工具知识系统设计文档”&#xff0c;请就您后面所述“智能进化&#xff1a;认知演进路由驱动知识库持续优化”进行更深入的实现讨论 Q1493、感觉不够完整。下面我们针对您前面给出的“知识系统三层架构详述”逐层给出详细地实现方案。 …...

【CSRF实践】DVWA靶场之CSRF实践

CSRF介绍 CSRF(Cross-site request forgery)&#xff0c;中文名叫做“跨站请求伪造”&#xff0c;也被称作“one click attack/session riding”&#xff0c;缩写为“CSRF/XSRF”。在场景中&#xff0c;攻击者会伪造一个请求&#xff08;通常是一个链接&#xff09;&#xff0…...

数据库设计方面如何进行PostgreSQL 17的性能调优?

在数据库设计方面&#xff0c;PostgreSQL 17 的性能调优可以从以下几个方面入手&#xff1a; 表结构设计 选择合适的数据类型&#xff1a;根据数据的实际范围和业务需求&#xff0c;选择占用空间小、查询效率高的数据类型。对于固定长度的字符串&#xff0c;如性别字段&#…...

[场景题]如何实现购物车

1. 基于Session的购物车&#xff08;适合小型单体应用&#xff09; 核心思路&#xff1a;将购物车数据存储在用户会话&#xff08;Session&#xff09;中&#xff0c;适用于无需持久化的临时购物车。 实现步骤&#xff1a; 数据结构&#xff1a;使用Map<商品ID, 商品数量&g…...

Rust 并发编程:Futures、Tasks 和 Threads 的结合使用

一、线程&#xff08;Threads&#xff09;与异步&#xff08;Async&#xff09;的对比 1.1. 线程的优势与限制 线程是一种广泛使用的并发模型&#xff0c;几乎所有现代操作系统都支持。Rust 的标准库提供了 std::thread API&#xff0c;使得线程编程变得直观。然而&#xff0…...

常见的网络协议介绍

一、什么是网络协议 指的是通信双方的数据发送和接收顺序&#xff0c;数据的封装规则。 通俗解释&#xff1a;描述双方发送和接收的每个字节是按照什么规则。 二、TCP/IP体系的常用协议 (一)应用层 HTTP&#xff1a;超文本协议&#xff1b;指的是用来传输文本网页的协议&#…...

一文读懂加载地址、链接地址和运行地址

我们在做嵌入式系统开发时&#xff0c;会经常遇到加载地址、链接地址和运行地址的概念&#xff0c;可能会感到很困惑&#xff0c;搞不清它们三者的关系。希望此文能帮助大家彻底理解三者的关系。 一.概念 1.1.加载地址 加载地址&#xff0c;即Load Memory Address&#xff08…...

Unity帧同步与状态同步混合架构开发指南

一、技术背景与适用场景 1. 技术定位差异 帧同步&#xff08;Lockstep&#xff09;&#xff1a;同步操作指令&#xff0c;强调确定性计算&#xff0c;适用于实时性要求高的场景&#xff08;如MOBA、RTS&#xff09;&#xff0c;但存在反作弊难题16。 状态同步&#xff08;Sta…...

后路式编程

今天遇到一个问题&#xff0c;反馈的时候&#xff0c;已经提审过了&#xff0c;不能重新出包了。只能依赖Lua热更解决。非常巧的是&#xff0c;C#那边的变量全是Public的&#xff0c;这算是救了一命。想想确实可笑&#xff0c;本来是封装的问题&#xff0c;没有封装的太好。结果…...

Rust语言入门与应用:未来发展趋势解析

一、Rust语言核心优势解析 1.1 内存安全革命 rust复制 // 所有权系统示例 fn main() { let s1 String::from("hello"); // s1获得所有权 let s2 s1; // 所有权转移至s2 // println!("{}", s1); // 编译错误&#xff01;s1已失效 println!("{}&quo…...

【2025小白版】计算复试/保研机试模板(个人总结非GPT生成)附代码

一、编程语言选择 很多高校在机试中对编程语言都有明确规定&#xff0c;像复旦大学计算机学院就说明可选择 C、C 或 Java 语言答题&#xff0c;还支持 C11&#xff08;gcc5.4&#xff09;&#xff0c;C14&#xff08;g5.4&#xff09;&#xff0c;Java (openjdk1.8&#xff09…...

android11使用gpio口控制led状态灯

目录 一、简介 二、解决方法 A、底层驱动 B、上层调用 C、验证 一、简介 1、需求&#xff1a;这里是用2个gpio口来控制LED灯&#xff0c;开机时默认亮蓝灯&#xff0c;按开机键&#xff0c;休眠亮红灯&#xff0c;唤醒亮蓝灯。 原理图&#xff1a; 这里由于主板上电阻R63…...

基于Asp.net的高校一卡通管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…...

C++蓝桥杯基础篇(七)

片头 嗨~小伙伴们&#xff0c;大家好&#xff01;今天我们来一起学习蓝桥杯基础篇&#xff08;七&#xff09;&#xff0c;学习相关字符串的知识&#xff0c;准备好了吗&#xff1f;咱们开始咯&#xff01; 一、字符与整数的联系——ASCII码 每个常用字符都对应一个-128~127的…...

8.路由原理专题

路由器数据转发原理&#xff0c;路由表、FIB、快速转发表的关系 路由的控制平面与转发平面 控制平面:负责路由计算,维护;路由协议运行在控制平面 转发平面:进行数据包的封装,报文转发,路由表,FIB表,快速转发表等 控制平面与转发平面相互独立又协同工作 路由器检查数据包的目…...

jQuery UI 简介

jQuery UI 简介 引言 随着互联网技术的飞速发展,前端开发已经成为网站和应用程序建设的重要组成部分。jQuery UI 是一个基于 jQuery 的用户界面库,它为开发者提供了丰富的交互组件和视觉效果,使得创建具有吸引力和互动性的网页变得更加简单。本文将为您详细介绍 jQuery UI…...

Web服务器配置

配置虚拟主机 通过虚拟主机&#xff0c;可以实现用自定义的域名来访问&#xff0c;并且可以为不同的域名指定不同的站点目录。 配置IP地址和域名的映射关系 申请真实的域名需要一定的费用&#xff0c;为了方便开发&#xff0c;可以通过修改hosts文件来实现将任意域名解析到本…...

LINUX网络基础 [一] - 初识网络,理解网络协议

目录 前言 一. 计算机网络背景 1.1 发展历程 1.1.1 独立模式 1.1.2 网络互联 1.1.3 局域网LAN 1.1.4 广域网WAN 1.2 总结 二. "协议" 2.1 什么是协议 2.2 网络协议的理解 2.3 网络协议的分层结构 三. OSI七层模型&#xff08;理论标准&#xff09; …...

定制化开发的WooCommerce独立站商城更安全

定制化开发的WooCommerce独立站商城在安全性、交易风险控制以及整体用户体验方面有显著优势。以下是定制化开发在这些方面的具体表现&#xff1a; 1. 安全性更高 定制化开发允许开发者从底层架构开始设计和优化&#xff0c;确保网站的安全性。以下是具体表现&#xff1a; (1…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接&#xff1a;3403. 从盒子中找出字典序最大的字符串 I 代码如下&#xff1a; class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...