【最后203篇系列】016 Q201架构思考
前言
Q200已经达到了我既定的目标,在最近的3个月,我需要进一步完善,达到可以试产的程度。
在这个过程当中,许多知识和体会一直在变。
qtv200到目前,虽然通过习惯(每晚运行离线策略和比对)方式维持了注意力的集中,但是仍然有一种睡一觉就容易忘掉的感觉。而今天在思考队列作用时,突然意识到,etl的流应该通过kafka来执行,只有通用的核心能力才需要做微服务。
类似这样的灵感,然我觉得有必要在下一步实施之前重新约定整体的架构。
在谈架构之前先看看业务上的要求和设计。
1 利润目标:每月3%
3月算是q200开始实测的第一个月,因为行情原因,借了东风,感觉大概率达到了。最大的意义是在于还清了历史问题,进入重置状态了。而q200本身的基准策略,只剩下小金额测试,效果比较理想,但没法进行更好的测算。
例如在测试盘中,2月份30单,目前平均浮盈4.6%。但是问题是,目标追求的是整体,而我们很难保证每一分钱都恰好投进去了,所以这里要打折扣;另外,每个测试单未必能精准跟踪,所以这里又有差距。
当然,最重要的单子如果是打开状态的,那么不能够保证,都是敞口。
所以假设这个已经作为一种产品可被生产和销售的话,我们肯定需要考虑其稳定性,也要评估期望。就像生产芯片那样。
现在先不谈具体的数值,但是很显然,有一个问题是需要考虑的:如何计算当前的进展?
假如说,目标是3%,然后目前还在open的订单计算是floating profit ,浮动的;而已经close的订单则是fixed profit固定的。应该有类似的公式:
y' = a * x + b
其中a是折扣率,因为浮动的风险很高;而b是已经完结的部分,是固定的。所以在确保目标完成时,应该有一个策略是要控制a。
技术上,需要能够客观的统计这个,然后预测、跟踪这部分的变化,同时作出反馈。这将影响到全局的仓位控制。
2 行动辅助
因为是手动下单,所以一定会存在跟踪误差。
所以系统应该从事前、事中和事后给到辅助。
- 1 事前。由于信号具有滞后性,所以应当允许事先的,或者whatif 类型的分析,自动的将“可能发生”告诉用户。
- 2 事中。当信号已经确定,这时会需要根据实时数据帮助用户跟踪信号,甚至根据历史经验预测是否有更好的买点在短期会出现。
- 3 事后。当信号确定结束,此时需要清盘。是立即清盘,还是允许等一等,需要系统告知用户。当然,大多数时候应当立即清盘。
技术上,需要有实时的数据获取和消息通知(如邮件、app等);每个事件都具有完全的生命周期,整个过程应该比基准策略的时间范围更宽一些。
3 策略框架
基准策略之所以为基准策略,就是因为不完善,所以一定需要开发衍生策略框架。
如果完全按照基准策略,那么很难达到利润目标,而且有可能因为长时间的负利润而失去信心。
虽然总体上已经是明显盈利了,但是如果 要承受若干个月的损失,我估计大部分人都会放弃:基准策略是无法直接使用的。
那么怎么进行进一步增强?直观上削平波峰,然后摊到后面若干月上。
按照类似游戏的方式,可以做出一些有趣的设计,此处不展开,然后会有一些离散的行为出现:
- 1 试探性买入
- 2 保守的止盈
- 3 激进的止盈
- 4 伺机抄底
- 5 反复收割
对于这些衍生擦略,应当有一个可执行框架,初期仅考虑严格按照规则执行,未来将由算法自行探索。
技术上,需要对每一个主题有专门的存储,统计,来记录在各组参数下的效果,以及总体情况。
以上三部分,构成q200第一阶段业务上的基本要求。
接下来,分析技术上的要素
技术要素
一些离散的功能点:
- 1 要获取分钟级别的行情数据和舆情数据。 这个基础的功能性验证ok,明天我就可以开始获取分钟级别的舆情数据,虽然不多,但应该够了。
- 2 要存储数据。这个也没问题吗,这次特地准备了时间序列数据库。
- 3 要计算信号。最近一直在离线计算校验,明白了调整点,之后可以确保在线计算与离线计算一致。
- 4 要通知。短信不靠谱,app的通知已经准备好,邮件的通路没问题,但是展示方式我想用css稍微加强一下。
- 5 要能辅助分析。这个还没想好,想象中应该把这些要素可以抽取在一起,然后在页面上展示。数据抽取没问题,要怎么展示,特别是如何进行超链跳转可能要想想。
- 6 能够方便的吞吐对象缓存。这个没问题,我甚至用mongo做了这事。redis我怕掉了,懒得同步。
- 7 回测计算。这个已经做了一版,虽然慢了点。后续可能需要使用numba来加速,格式要改改。
- 8 表格计算和统计。这个可以用clickhouse,不怕大量数据,可以实时统计。
为什么要谈架构?
这些离散的功能点随便写写已经很多了,如果要全部落实细节会更多。然后到最后肯定又是失去控制,然后就没法维护和迭代了。我不想这样稀里糊涂的搞,然后做q300。
要考虑到,有些单点功能是非常复杂的,然后当你全力解决玩一个问题,又发现全局结构是模糊的… 效率会很低。
这次我想,至少能做到个部分功能是有组织,适度耦合的。
celery 执行, kafka流转
- 1 任务执行。一部分是IO任务,这个将交给apscheduler_celery框架。一部分是计算任务,暂时用传统方法,6月之后我会用类似rlib这种。
- apscheduler_celery的所有任务均为微服务任务,区别只有参数
- apscheduler_celery的异步任务结果都类似callback,会写入kafka
- 任务的执行都是固定的,按1秒,31秒两个时间点执行
- 队列按照主体,如数据获取的命名为 xxx_market_minute, xxx_market_daily, xxx_news_minute, xxx_news_daily
- 如果是处理,可以称为 xxx_etl_minute…
- 效果:我可以随时加上一个新的code,然后就会自动被分配执行。
line protocal 协议,mongo 存储
-
2 时间序列。最终所有的可决策数据都将存储时间序列数据库。如果说数据的获取是起点,那么事件就是终点
- 1 新闻事件
- 2 行情事件
- 3 策略事件
- 4 目标事件
-
3 前端可视。暂时还是采取比较保守的做法,flask + bootstrap + js。
- 1 总体交易数据
- 2 订单详情数据
- 3 辅助决策数据
mongo + clickhouse
- 4 数据存储。mongo存储原始数据,clickhouse存储分析的表数据。
几个核心的元数据:
- 1 celery在每个心跳执行的任务。会有一张表格,记录哪些任务是需要周期执行的,可以增、删、改。这个是一切的源头。
- 2 监控数据。包括了各队列的长度,在时序数据库中对数据的条数统计。这个可以推到kafka,然后送到clickhouse。
- 3 KPI数据。包括运行中的策略,结束的策略,整体的目标效果,波动等。这个应该会在clickhouse.(不需要kafka)
特别重要的对象:
-
1 通知对象。这个对象会挂在每个策略下面,按照规则进行事前、事中和事后的全跟踪。其行为通过kafka发送,日志持久化在mongo中,主数据也在mongo中。
-
5 微服务。将一些重要且复杂的处理步骤封装为微服务。
- 1 获取数据封装为微服务。我需要的数据不多,频次也很低,但最好还是通过微服务请求。
- 2 回测作为微服务。这部分容易丢掉,且要长期维护,所以发布为微服务。
- 3 基准策略的信号生成。同上。
这样,可以想象,如果我一次性做好之后,又去忙了很多别的东西,当我要迅速切入进行维护时:
- 1 我会找到celery的任务元数据,我知道我对那些标的执行了后续的计算
- 2 我会看到一个队列清单,知道他们在连接那些处理,有没有超时
- 3 我会看到监控分析,知道数据是否都按时,无遗漏的拿到了
- 4 我会看策略整体效果,确保策略是与目标一致的
- 5 我可以看策略之间的差异,进行分析
当我有新的想法时,我应该采用一个新的命名,按照类似的步骤做好前期的获取和处理,然后,我应该在时间序列中找到这个事件。这样就形成了一个以时间为轴的通用管理方式:我新的任务只是在时间维度上不断拓宽。当然,对应地,事件背后的数据无论是数值、文本还是向量,可以在对应的元数据中展示。所以在需要的时候,可以在一个时刻把所有的的特征数据全部对齐,产生聚集效应。
Next: 把异步任务框架和kafka连接搞好。并开始产生事件。
相关文章:
【最后203篇系列】016 Q201架构思考
前言 Q200已经达到了我既定的目标,在最近的3个月,我需要进一步完善,达到可以试产的程度。 在这个过程当中,许多知识和体会一直在变。 qtv200到目前,虽然通过习惯(每晚运行离线策略和比对)方式维持了注意力的集中&…...
小脑萎缩会致命吗?
小脑萎缩,顾名思义,是指小脑的体积减小或结构发生异常,进而影响其正常功能。小脑作为人体重要的协调和运动控制中心,负责维持身体平衡、调节肌肉张力和协调运动等关键功能。当小脑出现萎缩时,患者可能会出现步态不稳、…...
pip install和conda install的区别
这里写目录标题 一、什么是 Python 依赖(Python Dependencies)?1. 依赖的作用2. 如何管理 Python 依赖3. 依赖管理问题4. 依赖锁定总结 二、使用pip安装包venv隔离环境方法 1:使用 venv(推荐)创建虚拟环境激…...
這是我第一次寫關於aapenal服務器管理控制面板的文章
首先我們來認識一下服務器管理面板的所有功能 網站管理功能: 支持創建和管理多個網站。配置虛擬主機(Vhost)和域名綁定。自動安裝常用應用(如WordPress、Joomla等)。 文件管理功能: 文件上傳、…...
requests库的request和response对象的属性和方法
Python requests库 request 参数信息 response 参数信息...
8664蛋糕的美味值
8664蛋糕的美味值 ⭐️难度:中等 🌟考点:枚举 📖 📚 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in );int n sc.nextInt();int k s…...
【MySQL】数据库简要介绍和简单应用
目录 数据库简要介绍 SQL 的简单应用 需要注意的: 数据库简要介绍 数据库(database)是指长期存储在计算机内,有组织的、可共享的数据集合。它可视为一个电子化的文件柜,用来存储电子文件,用户可以对文件中的数据进行査询、新增、更新、删…...
yolo环境 pytorch环境配置 CUDA安装
我的成功案例:首先安装python 3.12.9的conda虚拟环境 (如果不安装3.12的会报错误ModuleNotFoundError:没有名为“numpy._core”的模块) 然后安装11.8cuda (其实我是可以最高安装12.6的cuda但我实测,太高版…...
camellia redis proxy v1.3.3对redis主从进行读写分离(非写死,自动识别故障转移)
1 概述 camellia-redis-proxy是一款高性能的redis代理(https://github.com/netease-im/camellia),使用netty4开发,主要特性如下: 支持代理到redis-standalone、redis-sentinel、redis-cluster。支持其他proxy作为后端…...
python相关语法的学习文档1
python相关语法的学习文档1 1、tqdm tqdm 是 Python 中一个非常流行的进度条库,可以实时显示循环或任务的进度。它简单易用,支持多种场景(如循环、文件处理、多线程/进程等)。以下是详细的使用讲解: 1.1 安装 pip install tqdm1.2 基本用法 from tqdm import tqdm impo…...
Web元件库 ElementUI元件库+后台模板页面(支持Axure9、10、11)
Axure是一款非常强大的原型设计工具,它允许设计师和开发者快速创建高保真原型,以展示应用或网站的设计和功能。通过引入各种元件库,如ElementUI元件库,可以极大地丰富Axure的原型设计能力,使其更加贴近实际开发中的UI组…...
Java 并发编程——BIO NIO AIO 概念
参考 Java 并发编程——BIO NIO AIO 概念 阻塞与非阻塞、同步与异步概念 系统调用、缓存、物理设备阻塞与非阻塞同步与异步 四种主要的 IO 模型 同步阻塞 IO同步非阻塞 IOIO 多路复用异步 IO select,poll,epoll 系统调用命令...
在微信小程序或前端开发中,picker 和 select 都是用户交互中用于选择的组件,但它们在功能、设计和使用场景上有一定的区别
在微信小程序或前端开发中,picker 和 select 都是用户交互中用于选择的组件,但它们在功能、设计和使用场景上有一定的区别。 1. picker 的特点 描述: picker 是微信小程序中的原生组件,通常用于选择单项或多项值,如时…...
笔记本 Win10 部署阿里通义千问 1.5-0.5B 大模型 mini 版
文章目录 1.环境准备1.1 硬件环境1.2 OS 环境1.3 Python 环境 2.环境安装2.1 CUDA 驱动下载安装2.2 torch 库下载安装2.3 transformers 库安装2.3 accelerate 库安装2.4 验证 CUDA 是否可用2.5 下载 Qwen1.5-0.5B 大模型 3.测试大模型3.1 加载大模型3.2 简单对话3.3 亲测体验感…...
SpringBoot事件驱动
1、概述 Spring事件驱动采用了观察者设计模式,主要作用就是实现对象之间的松耦合通信。它的核心思想是通过事件的发布和监听来实现不同组件之间的交互。(跟mq挺像) 基础概念: 事件(Event): 在Spring中&am…...
nginx中间件部署
普通权限账户安装NGINX中间件 1、拥有高级权限的账户安装必要的插件 sudo yum install -y gcc-c make pcre pcre-devel zlib zlib-devel openssl openssl-devel 2、普通账户进行NGINX的脚本式安装 vi nginx_intall.sh #!/bin/bash TAR_NAME"$1" TAR_NAME_DIRba…...
Qt程序基于共享内存读写CodeSys的变量
文章目录 1.背景2.结构体从CodeSys导出后导入到C2.1.将结构体从CodeSys中导出2.2.将结构体从m4文件提取翻译成c格式 3.添加RTTR注册信息4.读取PLC变量值5.更改PLC变量值 1.背景 在文章【基于RTTR在C中实现结构体数据的多层级动态读写】中,我们实现了通过字符串读写…...
vulnhub-Hackme-隧道建立、SQL注入、详细解题、思路清晰。
vulnhub-Hackme-隧道建立、SQL注入、详细解题、思路清晰。 一、信息收集 2025.3.14 PM 12:18 1、主机发现 arp-scan -l nmap -sn 192.168.66.0/24 2、端口扫描 1、nmap --min-rate 10000 -p- 192.168.66.182 -oA port 查看所有开放端口2、map -sS -sV 192.168.6…...
技术-NBIOT
是什么? 窄带物联网(Narrow Band Internet of Things, NB-IoT)成为万物互联网络的一个重要分支支持低功耗设备在广域网的蜂窝数据连接,也被叫作低功耗广域网(LPWAN)NB-IoT支持待机时间长、对网络连接要求较高设备的高效连接NB-Io…...
【论文阅读】AlexNet——深度学习奠基作之一
原文链接 Step 1 1. titleabstract 第一句:告诉我干了什么事情 我们训练了一个很大很深的卷积神经网络,用来对120w个图片作分类,这里面有1000个类 第二句:结果 在测试集上面,top-1 error37.5%,top-517.0…...
【云原生技术】编排与容器的技术演进之路
一、编排与容器的技术演进之路 1.1 DockerClient 此时 K8s 只是编排领域的一个选择,而 Docker 此时一家独大,所以 K8s 的客户端只 是作为 Docker 的客户端来调用 Docker 引擎来完成服务。 1.2 RUNC&Shim OCI催生 runcrunc,剥离 Docke…...
鸿蒙编译框架插件HvigorPlugin接口的用法介绍
鸿蒙系统中HvigorPlugin接口实现自定义编译插件,实现编译前后自定义功能。 在鸿蒙(HarmonyOS)开发中,HvigorPlugin 是用于扩展 Hvigor 构建工具功能的接口。通过实现此接口,开发者可以自定义构建任务、修改构建流程或…...
Springboot+mybatis实现增删改查操作
继续写一下删除操作,删除有些不一样,首先在controller里面,我们需要改一下路由,我们后面要写/{id}传入路径参数,用PathVariable注解绑定id,剩下的都一样,传入id,然后写service和mapp…...
Java中的I/O
1.I/O流 1.1I/O概述 1.2.基本用法 1.3.字节输出流写数据的细节 1.4.FileOutPutStream写数据的三种方式 明天再更~~~~,先混个流量券。...
前端组件封装艺术:设计原则与最佳实践指南
文章目录 一、组件封装的核心原则1.1 设计原则概览1.2 组件生命周期 二、组件设计准则2.1 单一职责原则2.2 高内聚低耦合 三、组件接口设计3.1 Props设计规范3.2 代码示例 四、组件状态管理4.1 状态设计原则4.2 代码示例 五、组件样式处理5.1 样式方案对比5.2 代码示例 六、组件…...
SpringMVC(五)拦截器
目录 拦截器基本概念 一 单个拦截器的执行 1 创建拦截器 2 SpringMVC配置,并指定拦截路径。 3 运行结果展示: 二 多个拦截器的执行顺序 三 拦截器与过滤器的区别 拦截器基本概念 SpringMVC内置拦截器机制,允许在请求被目标方法处理的…...
jupyter无法转换为PDF,HTMLnbconvert failed: Pandoc wasn‘t found.
无法转为PDF 手动下载工具 https://github.com/jgm/pandoc/releases/tag/3.6.3 似乎跟我想的不大一样,还有新的报错 https://nbconvert.readthedocs.io/en/latest/install.html#installing-tex 不知道下的啥玩意儿 sudo apt-get install texlive-xetex texlive-fon…...
【红黑树】—— 我与C++的不解之缘(二十五)
前言 学习了avl树,现在来学习红黑树。 一、什么是红黑树 红黑树是一颗平衡二叉搜索树,它每一个节点增加了一个存储位表示节点的颜色,可以是红色或者黑色。 相比较于AVL树,红黑树也是一个自平衡二叉搜索树,但是它与AVL树…...
机器学习 Day05 pandas库
1.pandas介绍和优点 Pandas 是 2008 年由 Wes McKinney 开发的开源 Python 库 。它专门用于数据挖掘和数据分析,具有以下特点: 数据结构独特:核心数据结构为 Series(一维)和 DataFrame(二维) …...
布达佩斯召开 | 2025年第五届能源与环境工程国际会议(CoEEE 2025)
会议简介 Brief Introduction 2025年第五届能源与环境工程国际会议(CoEEE 2025) 会议时间:2025年7月25日-27日 召开地点:匈牙利布达佩斯 大会官网:www.coeee.org CoEEE 2025将围绕“能源与环境工程”的最新研究领域而展开,为研究人…...
[C语言日寄] qsort函数的练习
【作者主页】siy2333 【专栏介绍】⌈c语言日寄⌋:这是一个专注于C语言刷题的专栏,精选题目,搭配详细题解、拓展算法。从基础语法到复杂算法,题目涉及的知识点全面覆盖,助力你系统提升。无论你是初学者,还是…...
单引号与双引号在不同编程语言中的使用与支持
在编程语言中,单引号和双引号是常见的符号,它们通常用来表示字符和字符串。然而,如何使用这两种符号在不同的编程语言中有所不同,甚至有一些语言并不区分单引号和双引号的用途。本文将详细介绍不同编程语言中单引号与双引号的支持…...
Next.js项目实战——MindAI
我的整个毕业论文,是基于Next.js搭建完成的。项目的搭建过程分为多个章节,循序渐进: 1.环境准备与项目初始化 Node.js和npm的安装配置创建Next.js 14项目TypeScript配置项目目录结构说明Git初始化和.gitignore配置 2.基础架构搭建 Tailwi…...
MindGYM:一个用于增强视觉-语言模型推理能力的合成数据集框架,通过生成自挑战问题来提升模型的多跳推理能力。
2025-03-13,由中山大学和阿里巴巴集团的研究团队提出了MindGYM框架,通过合成自挑战问题来增强视觉-语言模型(VLMs)的推理能力。MindGYM框架通过生成多跳推理问题和结构化课程训练,显著提升了模型在推理深度和广度上的表…...
WPS的Excel文档如何利用VB脚本批量替换超链接的内容
准备知识 关于WPS的Excel点击单元格打开别的文档的两种方法的探究【为单元格添加超链接】 https://blog.csdn.net/wenhao_ir/article/details/146212767 激活WPS的Excel文档中的VB编辑器功能 没有激活前的截图如下: 原因是我们的电脑中缺乏VBA插件,我们点击“开发工具”:…...
phpstudy+phpstorm+xdebug【学习笔记】
配置PHPStudy 配置PHPSTORM phpstorm选择PHP版本 配置DEBUG 设置服务器 编辑配置 学习参考链接::https://blog.csdn.net/m0_60571842/article/details/133246064...
(包清楚解疑)ES6中__dirname和__filename不见了吗?,到底怎么用
我们知道,在commonJs中,__dirname和__filename分别表示当前js文件所在目录路径和所在路径的绝对路径。可以直接使用,但是在ES6和Node v20.11.0之后,不能直接用了。 首先明确一下这两个变量为什么会用到: 当我们在使用…...
3.4 基于TSX的渲染函数类型安全实践
文章目录 1. TSX与类型安全的核心价值1.1 TSX的独特优势1.2 类型安全的核心收益2. 基础类型安全实践2.1 组件Props类型约束2.2 子元素类型校验2.3 事件类型系统3. 高级类型安全模式3.1 泛型组件设计3.2 高阶组件类型3.3 类型守卫应用4. 类型操作工具集4.1 实用类型工具4.2 类型…...
vue-draggable-plus实现某些子元素不被拖拽
在使用vue-draggable-plus时倘若只是节点里面所有元素都可以拖拽倒还好实现,但遇到某些子元素是作为其他作用不可拖拽或者可拖拽不可替换这些情况,则比较头疼了 解决: 1. 绑定移动事件 2. 处理移动世界并对对应情况返回false //移动事件 co…...
基于SpringBoot的Mybatis和纯MyBatis项目搭建的区别
【由于之前学习MyBatis的时候是跟着视频敲的纯MyBatis项目,以至于在突然看到别人在SpringBoot项目里搭建MyBatis方式的时候很懵比…特此文字形式记录一下区别(应该还有好多种其他方式是我不知道的,主要应该就是要知道关键的流程步骤ÿ…...
二进制数(十进制转二进制)
二进制数 #include<stdio.h> int main(){int n;while(scanf("%d",&n)!EOF){int a[10000];int i0;if(n0){printf("0\n");continue;}while(n){a[i]n%2;i;nn/2;}for(int ji-1;j>0;j--){printf("%d",a[j]);}printf("\n");}…...
一周学会Flask3 Python Web开发-SQLAlchemy添加数据操作-班级模块
锋哥原创的Flask3 Python Web开发 Flask3视频教程: 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili SQLAlchemy提供session.add()方法添加model实体数据,以及提供session.commit()提交事务。 首先list.html加一个添…...
【python】OpenCV—Hough Circle Transform
文章目录 1、功能描述2、代码实现3、效果展示4、完整代码5、涉及到的库函数6、参考 更多有趣的代码示例,可参考【Programming】 1、功能描述 2、代码实现 载入必要的库 import sys import cv2 as cv import numpy as np函数入口 if __name__ "__main__&qu…...
1216走迷宫
1216走迷宫 ⭐️难度:简单 🌟考点:bfs 📖 📚 import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner;public class Main {public static void main(String[] …...
Matlab实现RIME-CNN-LSTM-Multihead-Attention多变量多步时序预测
SCI一区级 | Matlab实现RIME-CNN-LSTM-Multihead-Attention多变量多步时序预测 目录 SCI一区级 | Matlab实现RIME-CNN-LSTM-Multihead-Attention多变量多步时序预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现RIME-CNN-LSTM-Multihead-Attention霜冰算法…...
医疗资源联动,广州长泰医院与海南德雅医院共筑地贫防治新篇章
为贯彻落实"健康中国"战略关于出生缺陷综合防治的部署要求,推动地中海贫血防治体系建设。2025年3月15日,广州长泰医院与海南德雅医院联合主办的“地中海贫血生殖遗传干预大型义诊暨合作签约仪式”在广州正式启动,活动以“爱与希…...
栈区、堆区、静态区
一、栈区(Stack) 1.栈区是什么 •栈区(Stack)是计算机内存中的一部分,用于存储程序运行时的临时数据。 2.栈区的有关性质 (1)存储临时数据 • 栈区主要用于存储局部变量(比如函…...
SpringBoot整合Swagger (Springfox 3.0.0)
Maven依赖 <dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version> </dependency> 配置文件设置 # 解决"Unable to infer base url"错误的关键配…...
ShenNiusModularity项目源码学习(16:ShenNius.Admin.Mvc项目分析-1)
ShenNius.Admin.Mvc项目是MVC模式的启动项目,包括了MVC模式下所需的所有的页面、控制器类、资源、js文件等数据,该项目仅依赖ShenNius.Admin.API项目,主要使用后者的ShenniusAdminApiModule模块类及一些依赖项目中定义的辅助类等。本文学习Sh…...
Flutter PopScope对于iOS设置canPop为false无效问题
这个问题应该出现很久了,之前的组件WillPopScope用的好好的,flutter做优化打算“软性”处理禁用返回手势,出了PopScope,这个组件也能处理在安卓设备上的左滑返回事件。但是iOS上面左滑返回手势禁用,一直无效。 当然之…...