通过 Python 爬虫提高股票选股胜率
此贴为Python爬虫技术学习贴
在股票中,即便有了选股规则,从5000多只股票中筛选出符合规则的股票也是十分困难的,于是想通过爬虫来实现自动化的快速选股。全文用GP代替股票
实现方案
1、指定两套规则,第一套弱约束,第二套强约束
2、每天3点收盘后,使用弱约束条件,筛一次全量的GP池,筛出的GP作为第二天的GP筛选池使用
3、集合竞价结束,9点25分,使用强约束,从前一天收盘后选出的GP池中进一步筛选,选出当日股票(通过不断优化强弱约束条件,此时选出的GP拥有高胜率)
我的约束(自己研究的规则,因人而异)
弱约束:收盘后,整体趋势向上,筹码集中度高
强约束:当天竞价完成后,竞价强势,交易量大,竞价涨跌幅大,等规则
爬虫实现
用到的是python中的akshare,ak中有很多数据接口,调用出来很方便,作为ak的补充,如果有些功能ak不具备,就需要手写请求,从东财、新浪财经等这些网站上抓取数据,手写请求一般会用到selenium,模拟通过浏览器访问(因为数据在这些网站上都是动态的,无法直接通过request请求到数据,使用selenium更方便)
运行环境
Python 3.10requests~=2.32.3
akshare~=1.15.83
pandas~=2.2.3
selenium~=4.28.1
bs4~=0.0.2
beautifulsoup4~=4.12.3
APScheduler~=3.11.0
实现代码(部分)
1、通过selenium配置浏览器
# 设置 Chrome 配置
chrome_options = Options()
chrome_options.add_argument("--headless") # 无头模式,不打开浏览器窗口
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")# 启动 Chrome 浏览器
service = Service(CHROME_DRIVER_URL) # 替换为 chromedriver 的路径
driver = webdriver.Chrome(service=service, options=chrome_options)
2、获取筹码集中度
# 取90%筹码集中度
def get_ChouMa_Jizhongdu(driver, code):url = 'https://quote.eastmoney.com/concept/' + exchange_detector(code) + code + '.html#chart-k-cyq'# 打开网页driver.get(url)# 获取整个页面的文本try:# 获取分钟竞价情况app_element = driver.find_element(By.ID, 'app')maincharts_ele = app_element.find_element(By.CLASS_NAME, 'maincharts').textmatch = re.search(r'90%成本:.*?集中度:\s*(\d+\.\d+)%', maincharts_ele, re.DOTALL)if match:concentration_value = match.group(1)return float(concentration_value)else:return -1except Exception as e:print(f"发生错误: {e}")return -1
3、获取某只GP所在行业
def get_hangye(code):try:# test = ak.stock_individual_info_em(symbol=code)hy = ak.stock_individual_info_em(symbol=code).value[6]return hyexcept Exception as e:print(f"发生错误: {e}")return "未获取"
4、获取均线,用于判断整体走势
def get_today_ma(stock_code="000001", ma_periods=[5, 10, 20, 60]):"""获取股票当日均线价格:param stock_code: 股票代码(默认示例代码为平安银行 "000001"):param ma_periods: 均线周期列表(默认计算 5、10、20、60 日均线):return: 当日均线值的字典(若当日无数据,返回前一个交易日均线)"""# 获取股票历史行情数据(调整为最近 120 个交易日,确保足够计算长期均线)df = ak.stock_zh_a_hist(symbol=stock_code, period="daily", adjust="qfq", timeout=(5, 10)).iloc[-120:]# 检查数据是否为空if df.empty:raise ValueError("未获取到股票数据,请检查代码或网络连接")# 计算均线for period in ma_periods:df[f'MA{period}'] = df['收盘'].rolling(window=period).mean()# 获取最新数据(当日或最近交易日)latest_data = df.iloc[-1]# 提取均线值ma_values = {f'MA{period}': round(latest_data[f'MA{period}'], 2)for period in ma_periods}return ma_values
5、获取某只GP今日开盘、昨日收盘情况
def get_today_open_and_yesterday_close(stock_code="000001"):"""获取股票今日开盘价和昨日收盘价:param stock_code: 股票代码(默认示例代码为平安银行 "000001"):return: 今日开盘价和昨日收盘价的字典"""# 获取历史行情数据(最近两个交易日)hist_data = ak.stock_zh_a_hist(symbol=stock_code, period="daily", adjust="qfq", timeout=(5, 10)).iloc[-2:]# 检查历史数据是否为空if hist_data.empty:raise ValueError(f"未找到股票代码为 {stock_code} 的历史数据")# 获取昨日收盘价yesterday_close = hist_data.iloc[0]["收盘"]today_open = hist_data.iloc[1]["开盘"]ratio = hist_data.iloc[1]["涨跌幅"]today_close = hist_data.iloc[1]["收盘"]return {"今开": today_open,"昨收": yesterday_close,"涨跌幅": ratio,"今收": today_close}
6、获取实时委差
def get_weicha(code, driver):symbol = codeurl = f'https://finance.sina.com.cn/realstock/company/{exchange_detector(symbol)}{symbol}/nc.shtml'# 打开网页driver.get(url)# 获取整个页面的文本try:# 获取竞价情况tabfive_element = driver.find_element(By.ID, 'fiveAmt')value = tabfive_element.textreturn int(value)except Exception as e:print(f"发生错误: {e}")return -1
7、获取9:25分的竞价量能
def get_ln(code, driver, today_date):symbol = codeurl = 'https://vip.stock.finance.sina.com.cn/quotes_service/view/vMS_tradedetail.php?symbol=' + exchange_detector(symbol) + symbol + '&date=' + today_date + '&page=' + str(get_page_num(symbol, today_date))# 打开网页driver.get(url)# 获取整个页面的文本try:# 获取竞价情况tbody_element = driver.find_element(By.CLASS_NAME, 'dataOuter').find_element(By.TAG_NAME, 'tbody')last_tr = tbody_element.find_elements(By.TAG_NAME, 'tr')[-1].get_attribute('innerHTML')print(last_tr)# 使用字符串的split方法分割数据parts = last_tr.split("<td>")# 获取第5个<td>中的数据(索引为4,因为索引从0开始)value = parts[4].split("</td>")[0]return int(value)except Exception as e:print(f"发生错误: {e}")return -1
8、获取实时GP涨跌幅排序
def get_page(url):try:response = requests.get(url)return response.textexcept requests.ConnectionError as e:print('', e.args)# 获取股票代码、名称、PE,最高价,最小价,市净率,市盈率
def get_stock_data(text):# .* ?"f9": (?P < pe >.+?) 匹配市盈率 .*?"f23":(?P<pb>.+?) 匹配市净率 ,注意需要按照f1,f2...这样的顺序com = re.compile('"f2":(?P<end>.+?),.*?"f6":(?P<volume>.+?),.*?"f9":(?P<pe>.+?),.*?"f12":(?P<number>.+?),.*?"f14":(?P<name>.+?)'',.*?"f15":(?P<max>.+?),.*?"f16":(?P<min>.+?),.*?"f17":(?P<start>.+?),.*?"f23":(?P<pb>.+?),.*?"f24":(?P<a>.+?)',re.S)ret = com.finditer(text)for i in ret:yield {'number': i.group('number'),'name': i.group('name'),'start': i.group('start'),'max': i.group('max'),'min': i.group('min'),'end': i.group('end'),'pe': i.group('pe'), # 解析获取市盈率'pb': i.group('pb'), # 解析市净率'a': i.group('a'),'volume': i.group('volume')}# 开始页码,和结束解码
def get_code_pe(start=1, end=1):# 将所有的股票代码放入列表中b = []for i in range(start, end + 1):url = 'http://60.push2.eastmoney.com/api/qt/clist/get?cb=jQuery112408744624686429123_1578798932591&pn=' \'%d&pz=20&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&fid=f3&fs=m:0+t:6,m:0+t:13,m:' \'0+t:80,m:1+t:2,m:1+t:23&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,' \'f23,f24,f25,f22,f11,f62,f128,f136,f115,f152&_=1586266306109' % icontent = get_page(url=url)data = get_stock_data(text=content)for j in data:# 定义获取股票代码,名字列表a = []number = j.get('number')# 加入股票代码a.append(number)name = j.get('name')# 加入股票名字a.append(name)start = j.get('start')max_price = j.get('max')min_price = j.get('min')end = j.get('end')volume = j.get('volume')pe = j.get('pe')# 加入市盈率a.append(pe)pb = j.get('pb')# 加入市盈率a.append(pb)if start == '"-"':start, max_price, min_price, end, volume, pe, pb = '0', '0', '0', '0', '0', '0', '0'b.append(a)print(len(b))return b# 返回:所有GP列表,列表按实时涨跌幅排序
def get_stock_codes(end):lt = get_code_pe(1, end)return lt
相关文章:
通过 Python 爬虫提高股票选股胜率
此贴为Python爬虫技术学习贴 在股票中,即便有了选股规则,从5000多只股票中筛选出符合规则的股票也是十分困难的,于是想通过爬虫来实现自动化的快速选股。全文用GP代替股票 实现方案 1、指定两套规则,第一套弱约束,第…...
InternVL:论文阅读 -- 多模态大模型(视觉语言模型)
更多内容:XiaoJ的知识星球 文章目录 InternVL: 扩展视觉基础模型与通用视觉语言任务对齐1.概述2.InternVL整体架构1)大型视觉编码器:InternViT-6B2)语言中间件:QLLaMA。3)训练策略(1)…...
代码随想录算法训练营第三十五天(20250303) |01背包问题 二维,01背包问题 一维,416. 分割等和子集 -[补卡20250316]
01背包问题 二维 链接 遍历物品没有大小顺序要求重点是模拟,推导出递推公式 #include <iostream> #include <vector>int main(){int m, n;std::cin>>m>>n;std::vector<int> weight(m,0),value(m,0);for(int i{0}; i<m; i){std:…...
RGV调度算法(三)--遗传算法
1、基于时间窗 https://wenku.baidu.com/view/470e9fd8b4360b4c2e3f5727a5e9856a57122693.html?_wkts_1741880736197&bdQuery%E7%8E%AF%E7%A9%BF%E8%B0%83%E5%BA%A6%E7%AE%97%E6%B3%95 2.2019年MathorCup高校数学建模挑战赛B题 2019-mathorcupB题-环形穿梭机调度模型&a…...
并发编程-
一、简述 线程:线程是cpu可执行的最小单位,而进程是操作系统可分配的最小资源单位。一个进程中可以有多个线程。 线程的五个状态: 新建(new Thread()) 就绪 (thread.start()) 运行(…...
Mac中nvm切换node版本失败,关闭终端再次打开还是之前的node
Mac中使用 nvm 管理 node 版本,在使用指令:nvm use XXX 切换版本之后。 关闭终端,再次打开,输入 node -v 还是得到之前的 node 版本。 原因: 在这里这个 default 中有个 node 的版本号,使用 nvm use 时&a…...
C语言(25)
一.数据在内存中的存储 1.整数在内存中的存储 整数在内存中以二进制的形式储存,分别为原码,补码,反码 有符号的整数,在上述三种形式都有符号位和数值位两个部分,符号位为0是正数,1是负数,最高…...
HTML、CSS
什么是HTML、CSS HTML结构标签及特点 CSS引入方式 CSS颜色表示形式: CSS引入方式、颜色表示、颜色属性 CSS选择器 超链接...
c#:主窗体与子控件之间的数据传递:基于事件和委托的实现
1. 概述 在WPF中,主窗体与子控件之间的数据传递通常通过以下两种方式实现: 事件(Event):主窗体触发事件,子控件订阅事件并接收数据。 委托(Delegate):通过委托将子控件…...
Dynamics 365 启用用户安全角色变更的审核功能
D365自身的审核功能这里就不说了,是一个很古老的功能,用过D365的人应该都知道,今天要说的是用户安全角色变更的审核记录。 很多人用系统的审核功能,更多的是用来追踪用户的登录记录,或者记录的修改记录。 而实际的项目…...
MyBatis注解
MyBatis 的注解(Annotations)提供了一种简洁的方式来配置 SQL 映射,而无需使用 XML 文件。通过在 Mapper 接口的方法上使用注解,可以直接在 Java 代码中定义 SQL 语句和相关映射。这种方式使得代码更加集中和易于维护,…...
1.Windows+vscode+cline+MCP配置
文章目录 1.简介与资源2.在windows中安装vscode及Cline插件1. 安装vscode2. 安装Cline插件3. 配置大语言模型3. 配置MCP步骤(windows) 1.简介与资源 MCP官方开源仓库 MCP合集网站 参考视频 2.在windows中安装vscode及Cline插件 1. 安装vscode 2. 安装Cline插件 Cline插件…...
94.HarmonyOS NEXT动画系统实现教程:深入理解FuncUtils
温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦! HarmonyOS NEXT动画系统实现教程:深入理解FuncUtils 文章目录 HarmonyOS NEXT动画系统实现教程:深入理解FuncUtils1. 动画系…...
Python----数据分析(Pandas一:pandas库介绍,pandas操作文件读取和保存)
一、Pandas库 1.1、概念 Pandas是一个开源的、用于数据处理和分析的Python库,特别适合处理表格类数 据。它建立在NumPy数组之上,提供了高效的数据结构和数据分析工具,使得数据操作变得更加简单、便捷和高效。 Pandas 的目标是成为 Python 数据…...
设计模式之原型模式:原理、实现与应用
引言 原型模式(Prototype Pattern)是一种创建型设计模式,它通过复制现有对象来创建新对象,而不是通过实例化类。原型模式特别适用于创建成本较高的对象,或者需要动态配置的对象。本文将深入探讨原型模式的原理、实现方…...
平方矩阵问题
Ⅰ 回字形二维数组 #include <iostream> #include <iomanip> using namespace std; int main(){int n;while(cin>>n,n){for(int i0; i<n;i){for(int j0; j<n; j){int upi, downn-i1, leftj, rightn-j1;cout<<min(min(up,down),min(left,right)…...
C语言之链表
文章目录 前言 一、链表基本概念 1、声明节点结构 2、创建节点变量 3、链表所有节点 4、遍历链表 二、add添加 三、insert插入 四、remove删除 五、查找 总结 前言 链表是一种重要的数据结构,用于存储和组织数据。它是由一系列节点组成的数据结构&#x…...
RabbitMQ延迟消息
文章目录 延迟消息死信交换机延迟消息延迟消息应用场景 延迟消息 生产者在发送消息的时候指定一个时间,消费者不会立即收到该消息,而是在指定时间之后才收到消息,这就是延迟消息。 比如说这么一个场景,用户下单后将商品库存进行…...
Unity中WolrdSpace下的UI展示在上层
一、问题描述 Unity 中 Canvas使用World Space布局的UI,想让它不被3d物体遮挡,始终显示在上层。 二、解决方案 使用shader解决 在 UI 的材质中禁用深度测试(ZTest),强制 UI 始终渲染在最上层。 Shader "Custo…...
【从零开始学习计算机科学】算法分析(一)算法、渐进分析、递归分析
【从零开始学习计算机科学】算法分析(一)算法、渐进分析、递归分析 算法算法分析正确性算法完成需要的时间使用的存储空间简单性渐进分析递归分析主方法求解递归式递归树求解代入法概率分析和随机算法顺序统计量算法 什么是算法?算法(Algorithm)是指解题方案的准确而完整…...
【菜鸟飞】Conda安装部署与vscode的结合使用
介绍 Conda 是一个跨平台的开源工具,用于管理软件包和环境。最初由 Anaconda 公司开发,它的设计目标是支持数据科学和机器学习领域,但其功能不仅局限于此。 以下是 Conda 的核心特点: 包管理:安装、更新、卸载各种库…...
LeetCode2593 标记所有元素后数组的分数
贪心算法实战:数组标记与分数计算(LeetCode 同类题解析) 一、问题描述 给定一个正整数数组 nums,按以下规则计算最终分数: 初始分数 score 0每次选择最小且未被标记的元素(值相同选下标最小)…...
【C++多线程】thread
C中的std::thread是C11引入的线程库的一部分,提供了创建和管理线程的能力。它封装了操作系统的线程接口,使得在C中更方便地进行多线程编程。 1. std::thread 的定义 std::thread 类位于<thread>头文件中,定义在std命名空间下ÿ…...
补充二分LIS
B3637 最长上升子序列 题目描述 这是一个简单的动规板子题。 给出一个由 n ( n ≤ 5000 ) n(n\le 5000) n(n≤5000) 个不超过 1 0 6 10^6 106 的正整数组成的序列。请输出这个序列的最长上升子序列的长度。 最长上升子序列是指,从原序列中按顺序取出一些数字排…...
airtest用法
安装python3.7.9 64 python3 -m pip install -U airtest 或者: git clone https://github.com/AirtestProject/Airtest.git pip install -e airtest 下载adb 可以开始无界面的airtest 下载AirtestIDE 安装与启动 - Airtest Project Docs Airtest Project...
30天学习Java第四天——设计模式
设计模式概述 设计模式是一套被广泛接受的、经过试验的、可反复使用的基于面向对象的软件设计经验总结,它是开发人员在软件设计时,对常见问题的解决方案的总结和抽象。 一句话就是,设计模式是针对软件开发中常见问题和模式的通用解决方案。 …...
MongoDB 和 Elasticsearch的区别、优缺点对比,以及选型建议
MongoDB 和 Elasticsearch 在存储和搜索方面各有特点,适用于不同的场景。以下是它们的区别、优缺点对比,以及选型建议。 1. 概述 MongoDB:分布式 NoSQL 文档数据库,基于 BSON(类似 JSON)的文档存储&#x…...
在Android中,子线程可以更新UI吗
目录 为什么子线程不能直接更新UI? 如何正确在子线程更新UI? 1. 使用runOnUiThread方法 2. 通过Handler发送消息到主线程 3. 使用View.post(Runnable)方法 4. 结合AsyncTask(已过时,仅作了解) 5. 使用Kotlin协程…...
unittest vs pytest区别
unittest vs pytest 对比 unittest 像“手动挡汽车”:操作步骤多,规则严格,适合老司机。pytest 像“自动挡汽车”:开起来轻松,功能强大,适合新手和高效开发。 区别点unittest(你学过的&…...
OpenAI与谷歌DeepMind新品同日竞技,谁能引领机器人现实任务新潮流?
2025年3月12日,科技巨头谷歌DeepMind与OpenAI均发布了与机器人执行现实任务相关的新产品:谷歌DeepMind的新AI模型、OpenAI的Agents工具集,二者在技术路径、应用场景、安全机制设计等方面存在明显差异,其发展态势备受行业关注。 …...
JVM并发编程AQSsync锁ReentrantLock线程池ThreadLocal
并发编程2 synchronized锁实现**AQS****ReentrantLock实现****JUC 常用类**池的概念 ThreadLocalThreadLocal原理内存泄露强引用:软引用弱引用虚引用ThreadLocal内存泄露 synchronized锁实现 synchronized是一个关键字,实现同步,还需要我们提供一个同步锁对象,记录锁状态,记录…...
特殊 IP 地址
文章目录 特殊IP地址概述受限广播地址(Limited Broadcast Address)直接广播地址(Directed Broadcast Address)多播地址(Multicast Address)环回地址(Loopback Address)本网络本主机&…...
SSL/TLS 1.2过程:Client端如何验证服务端证书?
快速回顾非对称加密和对称加密 首先快速说一下非对称加密和对称加密。非对称加密,就是有一个公钥和私钥(成对存在)。 公钥对一段文本A加密得到文本B,只有对应的私钥能对B解密得到A。 私钥对一段文本C加密得到文本D,只有对应的公钥能对D解密得…...
Android(java)高版本 DownloadManager 封装工具类,支持 APK 断点续传与自动安装
主要有以下优点 兼容高版本 Android:适配 Android 10 及以上版本的存储权限和安装权限。断点续传:支持从断点继续下载。下载进度监听:实时获取下载进度并回调。错误处理:处理下载失败、网络异常等情况。自动安装 APK:…...
基于three.js的虚拟人阴影渲染优化方案
作者:来自 vivo 互联网大前端团队- Su Ning 本文将探讨 three.js 中的阴影渲染机制,并分享一些针对性能和效果优化的实用技巧,帮助开发者在不同场景下做出最佳的权衡选择。 一、前言 在3D网页应用中,高质量的阴影渲染对于营造场…...
人工智能中神经网络是如何进行预测的
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 https://www.captainbed.cn/north 文章目录 引言神经网络的基本结构神经网络的前向传播前向传播的步骤激活函数 代码实现流程图详细解释…...
vue3 中使用 Recorder 实现录音并上传,并用Go语言调取讯飞识别录音(Go语言)
录音并识别 效果图一、开启游览器录音权限二、前端代码三、Go代码,上传到讯飞识别录音返回到前端 效果图 recorder-core插件可以在网页中进行录音。录音文件(blob)并可以自定义上传,可以下载录音文件到本地,本文录音过程中会显示可视化波形,插件兼容PC端…...
自探索大语言模型微调(一)
一、数据 1.1、失败案例 Hugging Face: 根据B站上搜索到的资料,datasets这个库可以直接下载丰富的数据集合和与训练模型,调用也非常的简单,唯一的缺点就是,需要外网(翻墙),用国内的…...
算法练习(链表)
链表 链表的分类 单向链表,双向链表带头链表,不带头链表循环的,非循环的 链表的结构 图中所示的为链表的一个节点,value是这个节点的所存储的数据值,next为下一节点的地址。 代码实现链表 1.创建节点类 节点由…...
在 Ubuntu 服务器上使用宝塔面板搭建博客
📌 介绍 在本教程中,我们将介绍如何在 Ubuntu 服务器 上安装 宝塔面板,并使用 Nginx PHP MySQL 搭建一个博客(如 WordPress)。 主要步骤包括: 安装宝塔面板配置 Nginx PHP MySQL绑定域名与 SSL 证书…...
K8S学习之基础二十八:k8s中的configMap
k8s中的configMap configMap是k8s的资源对象,简称cm,用于保存非机密性的配置,数据可以用key/value键值对形式保存,也可以通过文件形式保存 在部署服务的时候,每个服务都有自己的配置文件,如果一台服…...
EDID读取学习
简介 Video BIOS可以被认为是一个具有独立硬件抽象层的操作系统。它不会阻止或监视操作系统、应用程序或设备驱动程序对硬件的直接访问。虽然不推荐,但一些DOS应用程序确实可以改变基本的硬件设置,而根本不需要通过视频BIOS。大多数现代应用程序和操作系统都避免直接使用硬件…...
基于 SSE 和 WebSocket 的在线文本实时传输工具
简介 在线文本实时传输工具支持 SSE(Server-Sent Events) 和 WebSocket,可在不同设备间快速共享和同步文本,适用于跨设备协作、远程办公和即时通讯。 核心功能 实时同步:文本输入后,另一端用户可立即看到…...
大语言模型安全风险分析及相关解决方案
大语言模型的安全风险可以从多个维度进行分类。 从输入输出的角度来看,存在提示注入、不安全输出处理、恶意内容生成和幻觉错误等风险; 从数据层面来看,训练数据中毒、敏感信息泄露和模型反演攻击是主要威胁; 模型自身则面临拒绝服务和盗窃的风险; 供应链和插件的不安全引…...
4、linux c 进程
【三】进程 1. 进程与程序的区别 程序:存放在磁盘上的指令和数据的有序集合(文件),是静态的。 进程:执行一个程序所分配的资源的总称,是动态的。 2. 进程的组成部分 BSS段(bss)&…...
OpenFeign
OpenFeign 工作原理详解 1. 声明式接口 开发者通过定义一个接口,并使用特定的注解(如GetMapping, PostMapping等)来描述HTTP请求。OpenFeign会根据这些注解自动生成相应的HTTP请求。 注解支持: FeignClient:用于定…...
Centos离线安装perl
文章目录 Centos离线安装perl1. perl是什么?2. Perl下载地址3. perl的安装4. 安装结果验证 Centos离线安装perl 1. perl是什么? Perl 是一种 高级脚本语言,诞生于 1987 年,以强大的 文本处理能力 和灵活性著称,常用于…...
RabbitMQ可靠性进制
文章目录 1.生产者可靠性生产者重连生产者确认小结 2. MQ的可靠性数据持久化LazyQueue小结 3. 消费者的可靠性消费者确认机制消费者失败处理方案业务幂等性唯一消息ID业务判断 兜底方案业务判断 兜底方案 1.生产者可靠性 生产者重连 在某些场景下由于网络波动,可能…...
PHP优化技术
最近在学习php语言,打算用来提升开发小项目的效率。下面是php项目中常见的优化手段。 1、引起php性能问题的原因 (1)php语法使用不当 (2)使用php做了它不擅长的事 (3)用php连接的服务不给力 &…...
【Go类库分享】Go expr 通用表达式引擎
【Go类库分享】Go expr 通用表达式引擎 官方教程:https://expr-lang.org/docs/language-definition 官方Github:https://github.com/expr-lang/expr 文章所含代码地址:https://github.com/ziyifast/ziyifast-code_instruction/tree/main/go-d…...