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

印度尼西亚股票数据API对接实现

环境准备

首先安装必要的依赖包:

pip install requests websocket-client pandas numpy

基础配置

import requests
import json
import websocket
import threading
import time
from datetime import datetime# API配置
API_KEY = "YOUR_API_KEY"  # 替换为您的实际API密钥
BASE_URL = "https://api.stocktv.top"
WS_URL = "wss://ws-api.stocktv.top/connect"# 印尼股票代码映射(示例)
IDX_SYMBOLS = {"BBCA": "Bank Central Asia","BBRI": "Bank Rakyat Indonesia","TLKM": "Telkom Indonesia","ASII": "Astra International","UNVR": "Unilever Indonesia"
}

REST API实现

1. 获取印尼股票列表

def get_indonesia_stocks(page=1, page_size=100):"""获取印尼交易所股票列表"""url = f"{BASE_URL}/stock/stocks"params = {"countryId": 42,      # 印尼国家ID"exchangeId": 62,     # IDX交易所ID"pageSize": page_size,"page": page,"key": API_KEY}try:response = requests.get(url, params=params)if response.status_code == 200:data = response.json()if data.get("code") == 200:return data["data"]["records"]else:print(f"API Error: {data.get('message')}")else:print(f"Request failed with status: {response.status_code}")except Exception as e:print(f"Error fetching stock list: {str(e)}")return []# 示例:获取第一页股票列表
stocks = get_indonesia_stocks()
for stock in stocks:print(f"{stock['symbol']}: {stock['name']} - {stock['last']}")

2. 查询特定股票详情

def get_stock_detail(symbol_or_id):"""获取股票详细信息"""url = f"{BASE_URL}/stock/queryStocks"# 判断是symbol还是idif isinstance(symbol_or_id, str) and symbol_or_id.isdigit():params = {"id": symbol_or_id, "key": API_KEY}else:params = {"symbol": symbol_or_id, "key": API_KEY}try:response = requests.get(url, params=params)if response.status_code == 200:data = response.json()if data.get("code") == 200 and data["data"]:return data["data"][0]else:print(f"API Error: {data.get('message')}")else:print(f"Request failed with status: {response.status_code}")except Exception as e:print(f"Error fetching stock detail: {str(e)}")return None# 示例:获取BBCA股票详情
bbca_detail = get_stock_detail("BBCA")
if bbca_detail:print(f"BBCA当前价格: {bbca_detail['last']}")print(f"涨跌幅: {bbca_detail['chgPct']}%")

3. 获取指数数据

def get_indonesia_indices():"""获取印尼主要指数"""url = f"{BASE_URL}/stock/indices"params = {"countryId": 42,  # 印尼国家ID"key": API_KEY}try:response = requests.get(url, params=params)if response.status_code == 200:data = response.json()if data.get("code") == 200:return data["data"]else:print(f"API Error: {data.get('message')}")else:print(f"Request failed with status: {response.status_code}")except Exception as e:print(f"Error fetching indices: {str(e)}")return []# 示例:获取印尼指数
indices = get_indonesia_indices()
for index in indices:print(f"{index['symbol']}: {index['last']} ({index['chgPct']}%)")

4. 获取K线数据

def get_kline_data(pid, interval="PT15M"):"""获取股票K线数据"""url = f"{BASE_URL}/stock/kline"params = {"pid": pid,"interval": interval,"key": API_KEY}try:response = requests.get(url, params=params)if response.status_code == 200:data = response.json()if data.get("code") == 200:return data["data"]else:print(f"API Error: {data.get('message')}")else:print(f"Request failed with status: {response.status_code}")except Exception as e:print(f"Error fetching kline data: {str(e)}")return []# 示例:获取BBCA的15分钟K线数据
bbca_kline = get_kline_data(41602, "PT15M")
for kline in bbca_kline[:5]:  # 显示前5条dt = datetime.fromtimestamp(kline["time"] / 1000)print(f"{dt}: O:{kline['open']} H:{kline['high']} L:{kline['low']} C:{kline['close']}")

5. 获取涨跌排行榜

def get_top_gainers():"""获取涨幅榜"""url = f"{BASE_URL}/stock/updownList"params = {"countryId": 42,  # 印尼国家ID"type": 1,         # 1=涨幅榜, 2=跌幅榜"key": API_KEY}try:response = requests.get(url, params=params)if response.status_code == 200:data = response.json()if data.get("code") == 200:return data["data"]else:print(f"API Error: {data.get('message')}")else:print(f"Request failed with status: {response.status_code}")except Exception as e:print(f"Error fetching top gainers: {str(e)}")return []# 示例:获取印尼涨幅榜
gainers = get_top_gainers()
for stock in gainers[:10]:  # 显示前10名print(f"{stock['symbol']}: {stock['last']} (+{stock['chgPct']}%)")

WebSocket实时数据

WebSocket客户端实现

class IDXWebSocketClient:def __init__(self, api_key):self.api_key = api_keyself.ws = Noneself.connected = Falseself.subscriptions = set()# 启动连接self.connect()# 启动心跳线程threading.Thread(target=self.heartbeat, daemon=True).start()def connect(self):"""连接WebSocket服务器"""ws_url = f"{WS_URL}?key={self.api_key}"self.ws = websocket.WebSocketApp(ws_url,on_open=self.on_open,on_message=self.on_message,on_error=self.on_error,on_close=self.on_close)# 启动WebSocket线程threading.Thread(target=self.ws.run_forever).start()time.sleep(1)  # 等待连接建立def on_open(self, ws):"""连接建立回调"""print("已连接到印尼股票实时数据服务")self.connected = True# 重新订阅之前订阅的股票if self.subscriptions:self.subscribe(list(self.subscriptions))def on_message(self, ws, message):"""接收消息回调"""try:data = json.loads(message)# 处理实时行情数据if "pid" in data:symbol = data.get("symbol", "Unknown")price = data.get("last_numeric", 0)change = data.get("pc", 0)change_pct = data.get("pcp", 0)print(f"实时行情 [{symbol}]: {price} ({change} / {change_pct}%)")# 处理心跳响应elif data.get("action") == "pong":passexcept Exception as e:print(f"处理实时数据时出错: {str(e)}")def on_error(self, ws, error):"""错误处理回调"""print(f"WebSocket错误: {str(error)}")def on_close(self, ws, close_status_code, close_msg):"""连接关闭回调"""print("WebSocket连接已关闭")self.connected = False# 尝试重新连接print("尝试重新连接...")time.sleep(3)self.connect()def subscribe(self, pids):"""订阅股票"""if not self.connected:print("未连接,无法订阅")return False# 添加到订阅列表self.subscriptions.update(pids)# 构造订阅消息message = json.dumps({"action": "subscribe","pids": list(pids)})# 发送订阅请求self.ws.send(message)print(f"已订阅: {', '.join(map(str, pids))}")return Truedef unsubscribe(self, pids):"""取消订阅股票"""if not self.connected:print("未连接,无法取消订阅")return False# 从订阅列表中移除for pid in pids:self.subscriptions.discard(pid)# 构造取消订阅消息message = json.dumps({"action": "unsubscribe","pids": list(pids)})# 发送取消订阅请求self.ws.send(message)print(f"已取消订阅: {', '.join(map(str, pids))}")return Truedef heartbeat(self):"""心跳维护"""while True:if self.connected:try:# 每30秒发送一次心跳self.ws.send(json.dumps({"action": "ping"}))except Exception as e:print(f"发送心跳失败: {str(e)}")time.sleep(30)# 使用示例
if __name__ == "__main__":# 创建WebSocket客户端ws_client = IDXWebSocketClient(API_KEY)# 订阅股票(需要先获取股票ID)time.sleep(2)  # 等待连接建立ws_client.subscribe([41602, 41605])  # 订阅BBCA和BRIS# 保持主线程运行try:while True:time.sleep(1)except KeyboardInterrupt:print("程序已终止")

高级功能实现

1. 数据缓存策略

from cachetools import TTLCacheclass IDXDataCache:def __init__(self, maxsize=100, ttl=60):"""初始化数据缓存"""self.cache = TTLCache(maxsize=maxsize, ttl=ttl)def get_stock_data(self, symbol_or_id):"""获取股票数据(带缓存)"""# 检查缓存if symbol_or_id in self.cache:return self.cache[symbol_or_id]# 从API获取data = get_stock_detail(symbol_or_id)# 更新缓存if data:self.cache[symbol_or_id] = datareturn data# 使用示例
cache = IDXDataCache()
bbca_data = cache.get_stock_data("BBCA")

2. 实时数据处理器

class RealTimeDataProcessor:def __init__(self):self.data_buffer = {}self.batch_size = 10self.last_process_time = time.time()def add_data(self, symbol, data):"""添加实时数据到缓冲区"""if symbol not in self.data_buffer:self.data_buffer[symbol] = []self.data_buffer[symbol].append(data)# 检查是否达到批处理条件current_time = time.time()if (len(self.data_buffer[symbol]) >= self.batch_size or current_time - self.last_process_time >= 1.0):self.process_data(symbol)self.last_process_time = current_timedef process_data(self, symbol):"""处理缓冲区的数据"""if symbol not in self.data_buffer or not self.data_buffer[symbol]:returndata_points = self.data_buffer[symbol]# 计算统计指标prices = [d["last_numeric"] for d in data_points]volumes = [d.get("turnover_numeric", 0) for d in data_points]avg_price = sum(prices) / len(prices)max_price = max(prices)min_price = min(prices)total_volume = sum(volumes)print(f"\n{symbol} 实时数据统计 (最近 {len(data_points)} 个更新):")print(f"平均价格: {avg_price:.2f}, 最高: {max_price:.2f}, 最低: {min_price:.2f}")print(f"总成交量: {total_volume}")# 清空缓冲区self.data_buffer[symbol] = []# 在WebSocket客户端的on_message方法中使用
processor = RealTimeDataProcessor()def on_message(self, ws, message):try:data = json.loads(message)if "pid" in data:symbol = data.get("symbol", "Unknown")processor.add_data(symbol, data)except Exception as e:print(f"处理实时数据时出错: {str(e)}")

3. 错误处理与重试机制

def api_request_with_retry(url, params, max_retries=3):"""带重试机制的API请求"""for attempt in range(max_retries):try:response = requests.get(url, params=params, timeout=10)if response.status_code == 200:data = response.json()if data.get("code") == 200:return dataelif data.get("code") == 429:  # 请求过多retry_after = int(data.get("retryAfter", 30))print(f"请求过于频繁,等待 {retry_after} 秒后重试...")time.sleep(retry_after)else:print(f"API返回错误: {data.get('message')}")else:print(f"请求失败,状态码: {response.status_code}")except Exception as e:print(f"请求异常: {str(e)}")# 指数退避等待wait_time = 2 ** attemptprint(f"等待 {wait_time} 秒后重试 (尝试 {attempt+1}/{max_retries})")time.sleep(wait_time)print(f"请求失败,已达最大重试次数 {max_retries}")return None

完整示例应用

class IDXStockMonitor:def __init__(self, api_key):self.api_key = api_keyself.ws_client = Noneself.data_cache = IDXDataCache()self.monitored_stocks = set()def start_monitoring(self, symbols):"""开始监控指定股票"""print("开始监控印尼股票...")# 获取股票IDstock_ids = []for symbol in symbols:stock_data = self.data_cache.get_stock_data(symbol)if stock_data:stock_ids.append(stock_data["id"])self.monitored_stocks.add(symbol)print(f"已添加监控: {symbol} (ID: {stock_data['id']})")else:print(f"无法获取股票信息: {symbol}")# 启动WebSocket连接if stock_ids:self.ws_client = IDXWebSocketClient(self.api_key)time.sleep(2)  # 等待连接建立self.ws_client.subscribe(stock_ids)# 启动定期数据更新self.start_periodic_updates()def start_periodic_updates(self):"""启动定期数据更新"""def update_loop():while True:# 每5分钟更新一次指数数据self.update_indices()# 每10分钟更新一次股票列表if len(self.monitored_stocks) < 10:  # 只更新少量股票self.update_stock_list()time.sleep(300)  # 5分钟threading.Thread(target=update_loop, daemon=True).start()def update_indices(self):"""更新指数数据"""print("\n更新印尼指数数据...")indices = get_indonesia_indices()for index in indices:print(f"{index['symbol']}: {index['last']} ({index['chgPct']}%)")def update_stock_list(self):"""更新股票列表"""print("\n更新印尼股票列表...")stocks = get_indonesia_stocks(page_size=50)for stock in stocks[:10]:  # 只显示前10只print(f"{stock['symbol']}: {stock['name']} - {stock['last']}")def run(self):"""运行监控"""try:# 监控主要印尼股票symbols_to_monitor = ["BBCA", "BBRI", "TLKM", "ASII", "UNVR"]self.start_monitoring(symbols_to_monitor)# 保持主线程运行while True:time.sleep(1)except KeyboardInterrupt:print("\n监控已停止")except Exception as e:print(f"监控出错: {str(e)}")# 启动监控
if __name__ == "__main__":monitor = IDXStockMonitor(API_KEY)monitor.run()

部署建议

  1. API密钥管理:不要将API密钥硬编码在代码中,使用环境变量或配置文件
  2. 错误处理:增加更完善的错误处理和日志记录
  3. 速率限制:遵守API的速率限制,避免频繁请求
  4. 数据存储:考虑将重要数据存储到数据库中以供后续分析
  5. 监控告警:设置价格波动告警机制
# 从环境变量获取API密钥
import os
API_KEY = os.getenv("STOCKTV_API_KEY", "YOUR_API_KEY")

以上是一个完整的印尼股票数据API对接实现方案。您可以根据实际需求进行调整和扩展。如果您需要更多特定功能或有任何问题,请随时告诉我。

相关文章:

印度尼西亚股票数据API对接实现

环境准备 首先安装必要的依赖包: pip install requests websocket-client pandas numpy基础配置 import requests import json import websocket import threading import time from datetime import datetime# API配置 API_KEY = "YOUR_API_KEY" # 替换为您的实际…...

OpenBMB 发布无分词器 TTS VoxCPM;儿童口语硬件 Dex 融资 480 万美元:拍摄真实物体,对话学习外语丨日报

开发者朋友们大家好:这里是 「RTE 开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的技术」、「有亮点的产品」、「有思考的文章」、「有态度的观点」、「有看点的活动」,但内容仅代表编辑的个人观点…...

一天一款实用的AI工具,第1期,AI标题生成工具

本期介绍的是一款专业的标题生成工具,它能帮你产出高质量标题,让点击率提升,让内容被看见。现实问题 在内容创作的世界里,有句话特别扎心: 好的标题=成功的一半。 很多创作者都遇到过这样的困境: 花了一下午写好一篇文章,结果标题平平无奇,点击量惨淡。 明明内容不错,…...

重组蛋白表达避坑指南

重组蛋白表达避坑指南重组蛋白表达是分子生物学、生物技术以及生物医学研究中非常基础却经常“出问题”的环节。一个合适的蛋白表达方案,不仅要能产生足够的产量,还要确保蛋白正确折叠、具有功能、具有良好的纯度与稳定性。一、选择表达系统与宿主:第一个关键决策常见问题不…...

易被忽略的vim中视图模式

常见的都是vim三种模式,但视图模式也不可忽略,主要进行批量操作在 Vim 中,可视模式(Visual Mode)是一种强大的文本选择和编辑模式,允许你高亮选中一段文本,然后对其进行操作(如复制、删除、替换、注释等)。 一:三种可视模式1.字符可视模式 用途: 精确选择字符或单词…...

电商核心业务 - 指南

电商核心业务 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-size: 14p…...

一言

一些日常的感想,为了节约时间,为了不暴露太多东西,为了不挑起矛盾,内容会很简洁,在合适的时候公布详情。9.17 说好的向阳而生呢?冷静啊,兄弟。 9.18 你们不相信我,我必将证明我,夺回属于我的荣耀。...

ai

https://qsqs.life/login?redirect=/system/dashboard本文来自博客园,作者:zjxgdq,转载请注明原文链接:https://www.cnblogs.com/zjxzhj/p/19098509...

LlamaIndex 项目深度技术分析 - 详解

LlamaIndex 项目深度技术分析 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important;…...

深入解析:css消除图片下的白边

深入解析:css消除图片下的白边pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font…...

linux增加网卡ip地址

linux增加网卡ip地址example ip addr add 192.168.5.124/24 dev eth0 label eth0:5 ifconfig eth0:5 up ip addr del 192.168.1.100/24 dev eth0 example ip addr add 192.168.10.199/24 dev eth0 label eth0:10 route add default gw 192.168.10.254reference: https://blog.c…...

Python 包与环境管理简史:从混乱到优雅

自动包管理工具的先驱:easy_install 在一切规范化工具出现之前,Python 的包管理是相当原始的。开发者们需要把第三方库的源码下载下来,手动放到项目目录里。 为了解决自动安装包的问题,easy_install 应运而生。 2004年:easy_install——从 0 到 1 的突破 easy_install 是 …...

qoj853 Flat Organization

SOLUTION FROM WUMIN4 题意 给出一个 \(n\) 个点的带权竞赛图(定向完全图),你可以进行任意次操作,每次操作反转一条边,代价为边权,求使得图强连通的最小代价和与方案,或输出无解。 \(n\le 2000\)。 思路 我们先考虑算出这张图的所有 SCC 并进行缩点,容易发现缩点后图是…...

shell命令中循环执行操作的命令

shell命令中循环执行操作的命令reference: for i in $(seq 1 10000); do echo "Iteration $i" && echo "Iteration $i"; done for i in $(seq 1 10000); do cat /sys/class/net/eth0/carrier && sleep 1; done for i in $(seq 1 999999); …...

2025年9月中国数据库排行榜:达梦挺进榜眼位,崖山首入前十强

9月墨天轮排行榜解读已出炉!本月前十变动较大,老将突围、新秀崛起,达梦凭借强劲势头跃升至第二位、TiDB排名上升、崖山首次闯入前十,此外还有一些产品表现亮眼!本月墨天轮社区的中国数据库排行榜再起波澜。达梦凭借强劲势头跃升至第二位,崖山则首次闯入前十,既展现了“老…...

基于QEMU模拟器搭建Builtroot下的QT开发环境

基于QEMU模拟器搭建Builtroot下的QT开发环境https://www.cnblogs.com/arnoldlu/p/17250728.html...

vlan

vlanhttps://zhuanlan.zhihu.com/p/385949949...

OpenSSH漏洞修复

前期准备 (先使用Telnet远程连接工具,连接服务器,确保Telnet连接正常,SSH连接后进行漏洞修复升级(防止修复失败,导致远程连接无法连接时,可以通过另一个远程工具连接进行恢复) telnet安装与开启:https://www.cnblogs.com/aerfazhe/p/19098482 准备离线升级安装包 Open…...

windosw 配置arp绑定

windosw 配置arp绑定配置静态arp绑定 netsh interface ipv4 add neighbors "以太网" "192.168.98.233" "aa-bb-cc-dd-ee-01" store=active...

2024年最受欢迎的渗透测试工具盘点

本文详细介绍了2024年最受欢迎的渗透测试工具,包括Certipy、BloodHound、Impacket等社区工具和CloudFox、Broken Hill等Bishop Fox自研工具,涵盖网络、云环境、API和LLM安全测试领域。我们最喜爱的渗透测试工具:2024版 又到了黑客工具盘点时间!我们征集了专家团队的意见,为…...

Unity学习 5.6 FBX

FBX保存了模型和纹理,没有贴图,贴图作为静态资源单独存在 FBX的使用 演示:选择*.fbx文件,直接拖到层级窗口 观察节点图标 选中节点,观察Inspector中的操作按钮select可以focus资源路径贴图路径有的模型需要贴图文件 贴图文件路径是约定好的与fbx相同目录,或者同级Texture…...

SEERC 2022 题面简要翻译

A. Append / 附件 你有两个字符串 \(s,t\),同时你还有一个字符串数组,这个数组中的第 \(i\) 个字符串是由 \(i\) 个 \(s\) 拼接而成,现在问最小的 \(p\) 使得 \(t\) 是这个字符串数组的第 \(p\) 个字符串。 \(1 \le |s|,|t| \le 5 \times 10^5\)。 时间限制:\(1\text{s}\)。…...

【稳定检索、线上线下参会、马理工主办】第十一届建筑、土木与水利工程国际学术会议(ICACHE 2025)

快速见刊,检索稳定! 第十一届建筑、土木与水利工程国际学术会议(ICACHE 2025) 2025 11th International Conference on Architectural, Civil and Hydraulic Engineering (ICACHE 2025) 在这里看会议官网详情 大会时间:2025年10月17-19日 大会地点:马来西亚 新山 截稿时…...

telnet安装与开启

在 CentOS 中,Telnet 是一种远程登录协议,默认情况下是关闭的。以下是开启 Telnet 服务的步骤。 # 首先检查是否已安装相关软件包 rpm -qa | grep telnet rpm -qa | grep xinetd # 以下命令安装: yum install -y telnet-server xinetd # 启用并启动服务 # 设置 Telnet 和 xi…...

20250917NOIP#21

20250917NOIP#21 T2 题意: 给定一个 \(n\) 个点的树,点上有一个非负整数点权 \(a_i\),表示这个点需要在操作序列中正好被经过 \(a_i\) 次,一次操作为选择两个顶点 \(u,v\) ,从 \(u\) 经过简单路径走到 \(v\) ,求最小操作数。 思路: 见到这个题第一眼想到贪心,可以具象化…...

又一个新项目完结,炸裂!

这是一套以 AI 开发实战 + 后端架构设计 为核心的项目教程。大家好,我是程序员鱼皮。又经过了一段时间的爆肝,我在编程导航的保姆级新项目教程 —— AI 零代码应用生成平台,完结啦! 这是一套以 AI 开发实战 + 后端架构设计 为核心的项目教程,基于 Spring Boot 3 + LangCha…...

阿里云防刷神器ESA搞活动免费领取

最近使用阿里云的边缘安全加速ESA,防刷、访攻击。 所有套餐支持一键防刷、安全事件分析、频次控制等。 最近搞活动,可以不限次数领取基础版代金券,免费领取链接:http://s.tb.cn/e6.0Fu67m测速效果...

报错TypeError: Unknown file extension .ts - broky

当出现这个TypeError: Unknown file extension ".ts"这个报错的时候,可以看看package.json里没有是不是有"type": "module"这个字段,有的话需要去掉...

抗 IgE 单克隆抗体联合变应原免疫治疗(AIT):过敏性疾病治疗的协同新策略

过敏性疾病(如哮喘、慢性荨麻疹、过敏性鼻炎)的发病率在全球范围内持续攀升,传统治疗手段(如抗组胺药、糖皮质激素)虽能缓解症状,却难以从根本上改变机体的过敏状态。变应原免疫治疗(AIT)作为唯一能 “重塑免疫耐受” 的病因治疗方法,通过逐渐增加变应原暴露剂量,诱导…...

php怎么关闭数据库连接

在PHP中,关闭数据库连接是一个很重要的步骤,它可以释放资源并防止不必要的连接浪费。下面是一些关闭数据库连接的常见方法:1. 使用mysqli_close()函数关闭连接:“`$conn = mysqli_connect($servername, $username, $password, $dbname);// 执行完数据库操作后,关闭连接mys…...

代码分析之污点分析 - 教程

代码分析之污点分析 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-siz…...

设计模式 7章

软件设计7大原则 开闭原则:是原则,在设计软件时保持扩展的开放性和修改的封闭性 里式替换原则:要求在继承时不要破坏父类的实现 单一职责原则:要求类的功能要单一 接口隔离原则:要求接口的设计要精简 依赖倒置原则:要求面向抽象编程,即面向接口编程 迪米特原则:提供一种…...

磁盘存储简介-轮子

https://blog.csdn.net/user2025/article/details/142364353...

洛谷 P1967 [NOIP 2013 提高组] 货车运输 题解

洛谷 P1967 [NOIP 2013 提高组] 货车运输 题解原题链接:货车运输 kruskal重构树+LCA做法,树剖不想写 很容易发现原图跑最短路可以解,但是复杂度难以承受,所以考虑如何简化该图。 发现原图边权维护的应该是(u,v)的最小值,并且最优选择是这个最小值最大,所以如果有多条(…...

cherry-pick 合并曾今某一次提交

确认当前分支 git checkout test 找到要合并提交的哈希值 git log --oneline 太长的话点击q 退出 切换到我们要合并的分支 git checkout dev 使用 cherry-pick 应用指定提交 git cherry-pick <提交哈希1> 推送到远程分支 git push origin dev...

向量数据库 FAISS、LanceDB 和 Milvus

FAISS (Facebook AI Similarity Search)本质:一个库 (Library),而不是一个数据库。定位:由 Meta (Facebook) AI 研发的、专注于高效相似性搜索的 C++/Python 库。它的核心使命只有一件事:在海量向量中快速找到最相似的 K 个向量。特点:它提供了极其丰富和灵活的索引算法(…...

ruoyi-vue自动生成代码

我看到这个ruoyi-vue有自动生成代码的功能,这里我们可以体验一下改如何实现。 还是首先在 ruoyi-admin 下面的文件夹target里面执行 java -jar ruoyi-admin.jar ,然后再 ruoyi-ui 下面执行 npm run dev 好,项目启动起来了,然后登录到后台里面去,点击系统工具里面的代码…...

拥抱新一代 Web 3D 引擎,Three.js 项目快速升级 Galacean 指南

本文从多个维度对比 Galacean 和 Three.js 两款Web3D 引擎的差异,并介绍拟我形象项目从Three.js 切换到 Galacean 以后带来的提升以及项目迁移的心得,为其他 Three.js 项目升级到 Galacean 提供参考。作者: vivo 互联网前端团队- Su Ning 本文从多个维度对比 Galacean 和 Th…...

Fast IO 模板

放在 using namespace std; 后面即可。 namespace fast_IO { #define FASTIO #define IOSIZE 100000char ibuf[IOSIZE], obuf[IOSIZE];char *p1 = ibuf, *p2 = ibuf, *p3 = obuf; #ifdef ONLINE_JUDGE #define getchar() ((p1==p2)and(p2=(p1=ibuf)+fread(ibuf,1,IOSIZE,stdin)…...

kylin V11安装mysql8.4.5(glibc.2.28版本)

环境:OS:kylin V11mysql:8.4.5 glibc2.28(建议不要安装glibc.2.17版本) 查看系统glibc版本[root@localhost soft]# ldd --versionldd (GNU libc) 2.38Copyright (C) 2023 Free Software Foundation, Inc.This is free software; see the source for copying conditions. There…...

iOS 上架 App 流程全解析 苹果应用发布步骤、App Store 审核流程、ipa 文件上传与 uni-app 打包实战经验

本文系统解析 iOS 上架 app 流程,涵盖苹果应用从开发者账号注册、证书准备、uni-app 打包、ipa 上传、TestFlight 测试,到 App Store 审核与发布的完整步骤,结合多工具协作,总结高效实用的上架经验。对开发者来说,应用上线的最后一道门槛就是 iOS 上架 app 流程。 相比 An…...

P6801 花式围栏

题目传送门数学、计数类。题意 在 \(n\) 个同一底线上宽 \(w\),高 \(h\),给定的相邻矩形中,数出在方格上的任意形状的小矩形的个数。 \(1\leq n\leq 10^5,1\leq w,h \leq 10^9\) 题解 我们规定竖直方向上为高,水平方向上为的宽。 要研究 \(n\) 个,就要先研究一个。 我们考…...

ms sql dml 操作

ms sql dml 操作 --建表 select * into tablenew from tableold...

黑白染色方法

主要有 \(3\) 种方法:DFS / BFS / DSUDFS直接遍历整张图染色,判断是否产生冲突 init(){for(int i=1;i<=n;i++) col[i]=-1; } bool dfs(int u,int c){col[u]=c;for(auto v:e[u]){if(col[v]==-1) return dfs(v,c^1);else if(col[v]==c) return false;}return true; } ... bo…...

Windows 数字签名获取与验证详解

在 Windows 的安全体系中,数字签名扮演着“软件身份证”的角色。它可以证明一个程序确实来自某个发布者,并且在分发的过程中没有被篡改。 当下载一个系统更新、驱动程序,或者安装第三方应用时,操作系统往往会验证数字签名,确保软件来源合法、安全。那么,作为开发者或安全…...

转化率提升300%,火山引擎Data Agent以“一客一策”突破企业营销增长瓶颈

火山引擎近日分享了其企业级数据智能体Data Agent如何通过AI技术,解决企业营销增长中的核心问题。根据过去半年的客户实践,Data Agent在智能营销领域展现出显著成效,通过自然语言交互大幅降低工具使用门槛,并能深度整合企业内外部数据,实现从洞察到行动的闭环决策。面对企…...

矩阵模板

struct mat{int m[N][N];//将A.m[i][j] 改成 A[i][j] 这种格式int* operator [] (size_t i) {return m[i];}const int* operator [] (size_t i) const {return m[i];}mat() {memset(m,0,sizeof m);}//初始化矩阵mat operator * (const mat& b) const {//矩阵乘法mat res;fo…...

快读模板

int read(){int x=0,f=1;char c=getchar();while(c<48||c>57){if(c==-) f=-1;c=getchar();}while(c>47&&c<58) x=x*10+(c^48),c=getchar();return x*f; }本文来自博客园,作者:_AzureSky,转载请注明原文链接:https://www.cnblogs.com/-AzureSky-/p/1909…...

ipadװwindowsϵͳshell

如何在iPad上安装Windows系统Shell:详解与实践指南 随着科技的不断进步,用户对于设备功能的需求也在不断增加。iPad作为一款便携式的智能平板电脑,其强大的硬件性能和优秀的生态系统赢得了广大用户的喜爱。然而,对于一些专业用户或技术爱好者来说,仅使用iOS系统可能无法满…...

cpu的各种寄存器及其功能

cpu的功能 指令控制 完成取指令,分析指令,执行指令的操作 操作控制 产生完成一条指令所需要的操作信号,从而控制这些部件按指令的要求正确执行 时间控制 严格控制各种操作信号出现的时间,持续时间以及出现的时间顺序 数据加工 对数据进行逻辑和算数运算 中断处理 对计算机运…...