最佳实践:路径路由匹配规则的设计与实现-全球速递
本文设计并实现了一种专用于路径路由匹配的规则,以一种简单而通用的方式描述一组路径的特征,来简化这种场
2023-05-10前言作者:哲思时间:2023.5.9邮箱:zhe__si@163.comGitHub:zhe-si (哲思) (github.com)
时间一晃研究生都过去大半年了,学了些东西,也做了些项目,借着博客总结一下。这次先聊一个简单的话题开个头。
开发中,常用形似 “a/b/c” 的描述方式来描述路径、定位资源,有着层次化和可读性高的特点,最经典的例子就是 URL(统一资源定位符),第二节会进行简要介绍。
(资料图片仅供参考)
将资源都路径化后,可以通过每一段路径精确的匹配来唯一的确定一个资源。但有时候,需要对具有相关特征的一组资源进行统一的描述或操作。比如,将所有获得用户信息的请求都路由到一个指定的处理程序上,请求的 URL 中包含不同用户 id 路径分段指向不同用户信息资源。再比如,界面中导航栏包含图片组(包含图1、2、3)和文本组(包含文本1、2、3),在访问图片组下不同图片时打开图片展示器而在访问文本组的文本时打开文本展示器。
基于上述场景的需求,需要一种简单而通用的路径路由匹配规则。最强大的方式是直接使用正则表达式来描述一组路径,但在描述一些复杂的路径场景时,正则表达式使用起来非常繁琐和困难。比如,匹配这样一组路径 "x1/a/x2/a",x1 表示任意长的最短匹配路径,x2表示任意长的最长匹配路径,大家可以尝试用正则表达式实现,并和本文设计的匹配规则的描述进行对比。
本文设计并实现了一种专用于路径路由匹配的规则,以一种简单而通用的方式描述一组路径的特征,来简化这种场景路由描述难度,让小白可以快速学习并上手。
什么是URL?什么是路径?首先,需要明确一下什么是资源?什么是路径?
上面提到的 URL(统一资源定位符)是 URI(统一资源标识符)的一种分类。
URI 的本质语义是标识一个资源,资源可以是一张图片、一个文档、一个服务、一个用户等具体或抽象的实体,官方(RFC2396)将其格式标准化为如下格式(就是 URL 的格式)
该格式的大致含义是某人(user:pass)用某种方式(protocol)访问某个主机端口(hostname:port)某个路径(pathName)的资源,同时可用 search 对该资源做筛选、排序等操作、用 hash 访问资源的片段(子资源)。
而标识一个资源,可以通过描述位置或名字的方式,所以 URI 包括 URL 和 URN(统一资源名称)。
描述位置:用资源所处的地址来描述该资源,该描述指定了在特定地址的资源而不特指某一个具体的资源,也就是说实际指向的资源可能会随时间发生变化,资源的位置描述也会随资源本身位置的变化而变化,如 URL。描述名字:用一个全局唯一的标识符持久的标记一个特定的资源,不会随着时间或位置变化而改变指向的资源,如 URN(例:urn:oasis:names:specification:docbook:dtd:xml:4.1.2),常用于 Map、Redis 中 KEY 的定义等场景。但不管是位置描述还是名字描述、不管具体的格式是什么,都可以把它们抽象为一种“路径”,只是路径的描述的含义不同、分隔符不同。
比如,URL 中,最核心的部分就是hostname:port/path这一部分,如下图蓝色区域,
蓝色区域已经完整描述了资源的位置,protocol 是补充描述了访问资源的方式,username:password 是附带的认证信息,search 和 hash 则描述的对某一个资源的进一步处理。而hostname:port/path就是一个路径,每个路径分段描述的是某个层级的位置节点。
比如,URN 中,路径的每个路径分段则描述不同命名空间及命名空间下的名字。
路径路由匹配规则的设计了解了什么是路径,接下来给出路径路由匹配规则的定义描述:
R 模式:正则模式,格式:R:正则表达式
该模式下,完全采用正则表达式格式进行匹配。
标准模式:标准路径路由描述表达式,格式形如:/**/xxx/*/xxx,由多个路径分段的分段列表组成,要求路径分段列表全匹配
具体语法:
分隔方法
默认使用 "/" 分隔符分隔多个路径分段
支持自定义路由分隔方法和路径分隔方法路径分段
每个具体的路径分段默认采用完全字符串匹配r 模式:路径分段正则模式,该路径分段采用正则表达式进行匹配,格式:r:正则表达式通配符 "?"
匹配任意一段或 0 段路径分段,在满足后续部分匹配的情况下优先不匹配
通配符 "*"
匹配任意一端路径,不可匹配空或不匹配
通配符 "**"
匹配任意多段路径分段,不保证尽可能满足的最短匹配原则,即在满足紧接的后续非通配符部分匹配的情况下尽可能少的匹配
通配符 "***"
匹配任意多段路径分段,保证尽可能满足的最长匹配原则,即在满足后续匹配的情况下尽可能多的匹配
举一些例子:
| 路由 | 匹配路径 | 不匹配路径 |
|---|---|---|
| a/?/c | a/b/c、a//c、a/c | a/c/d |
| a/*/c | a/b/c | a/c |
| a/b/* | a/b/c | a/b |
| **/b/c | a/b/c、b/c、a/a/b/b/c | b/c/b/c |
| a/***/c/* | a/c/c、a/c/b/c/d | a/b/c |
| a/**/c/* | a/c/c | a/c/b/c/d |
一组路径 "x1/a/x2/a",x1 表示任意长的最短匹配路径,x2表示任意长的最长匹配路径,使用标准路径路由描述表达式描述就是**/a/***/b。
其中,最常用的通配符是 "**",通过不保证尽可能匹配的方式最短匹配,确保匹配的是我们直观预期的路径。比如如下目录结构,
- common- A.java- B.java- a.conf- impl- common- Utils.java- AImpl.java- BImpl.java我们希望匹配接口 A 和 B 的 java 文件,而不匹配到 impl 里的实现类,可以采用如下匹配方式:**/common/r:.*\.java。
本文采用 kotlin 进行实现,重点位置已经进行注释说明,源代码可见仓库。
/** * **路由匹配** * - 若 "R:" 开头,则为正则模式,采用正则表达式直接匹配 * - 其他情况,采用标准路由模式[matchStdRoutePattern]进行匹配 * * @author lq * @version 1.0 */fun matchRoutePattern(routePattern: String, path: String): Boolean { return if (routePattern.startsWith("R:")) { Regex(routePattern.substring(2)).matches(path) } else { matchStdRoutePattern(routePattern, path) }}/** * **路由模式**:路由的特定描述表达式,形如 / ** /xxx/ * /xxx/ * * 语法: * - 以 "/"([PATH_DELIMITER]) 分隔的路径表达式,要求全匹配路径,首尾的分隔符可以省略 * - 每一段路径描述默认采用字符串完全匹配方式,也可通过 "r:" 开头标记该段采用正则表达式匹配 * - 使用通配符 "?" 可以匹配任意一段或 0 段路径,优先不匹配 * - 使用通配符 "*" 可以匹配任意一段路径 * - 使用通配符 "**" 可以匹配任意多段路径,最短匹配原则 * - 使用通配符 "***" 可以匹配任意多段路径,最长匹配原则 */fun matchStdRoutePattern(routePattern: String, path: String): Boolean { val routeSplit = splitRoute(routePattern) val pathSplit = splitPath(path) return matchRoutePatternSplit(routeSplit, 0, pathSplit, 0)}/** * 路由分隔方法 */val splitRoute: (String) -> List = ::splitPathSimple/** * 路径分隔方法 */val splitPath: (String) -> List = ::splitPathSimple/** * 简单解析路径为路径分段列表 */private fun splitPathSimple(routePattern: String): List { val pathDelimiter = "/" return routePattern.trim(pathDelimiter).split(pathDelimiter).filter { p -> p.isNotEmpty() }}private fun matchRoutePatternSplit(routeSplit: List, ri: Int, pathSplit: List, pi: Int): Boolean { if (ri >= routeSplit.size) { return pi >= pathSplit.size } if (pi >= pathSplit.size) { for (i in ri until routeSplit.size) { if (routeSplit[i] !in listOf("?", "**", "***")) return false } return true } when (routeSplit[ri].trim()) { "?" -> { if (matchRoutePatternSplit(routeSplit, ri + 1, pathSplit, pi)) return true return matchRoutePatternSplit(routeSplit, ri + 1, pathSplit, pi + 1) } "*" -> { return matchRoutePatternSplit(routeSplit, ri + 1, pathSplit, pi + 1) } "**" -> { for (i in 0 until pathSplit.size - pi) { val isShortMatch = matchRoutePatternShort(routeSplit, ri + 1, pathSplit, pi + i, false) if (isShortMatch.first) return true if (isShortMatch.second) return false } return matchRoutePatternSplit(routeSplit, ri + 1, pathSplit, pi + pathSplit.size - pi) } "***" -> { for (i in pathSplit.size - pi downTo 1) { if (matchRoutePatternSplit(routeSplit, pi + 1, pathSplit, pi + i)) return true } return matchRoutePatternSplit(routeSplit, ri + 1, pathSplit, pi) } else -> { if (!checkRouteSegPattern(routeSplit[ri], pathSplit[pi])) return false return matchRoutePatternSplit(routeSplit, ri + 1, pathSplit, pi + 1) } }}/** * 最短原则匹配,返回 (是否匹配, 是否已经最短匹配) */private fun matchRoutePatternShort(routeSplit: List, ri: Int, pathSplit: List, pi: Int, isShortMatch: Boolean): Pair { if (ri >= routeSplit.size) { return (pi >= pathSplit.size) to isShortMatch } if (pi >= pathSplit.size) { for (i in ri until routeSplit.size) { if (routeSplit[i] !in listOf("?", "**", "***")) return false to isShortMatch } return true to isShortMatch } when (routeSplit[ri].trim()) { "?" -> { val isMatch = matchRoutePatternShort(routeSplit, ri + 1, pathSplit, pi, isShortMatch) if (isMatch.first) return isMatch return matchRoutePatternShort(routeSplit, ri + 1, pathSplit, pi + 1, isShortMatch) } "*" -> { return matchRoutePatternShort(routeSplit, ri + 1, pathSplit, pi + 1, isShortMatch) } "**" -> { return matchRoutePatternSplit(routeSplit, ri, pathSplit, pi) to isShortMatch } "***" -> { return matchRoutePatternSplit(routeSplit, ri, pathSplit, pi) to isShortMatch } else -> { return if (checkRouteSegPattern(routeSplit[ri], pathSplit[pi])) { matchRoutePatternShort(routeSplit, ri + 1, pathSplit, pi + 1, true) } else { false to isShortMatch } } }}/** * 路径分段匹配检查 */private fun checkRouteSegPattern(routeSeg: String, pathSeg: String): Boolean { if (routeSeg.startsWith("r:")) { if (Regex(routeSeg.substring(2)).matches(pathSeg)) { return true } } else if (routeSeg == pathSeg) return true return false} 后记本次分享了在项目中的一个细节设计,后续会继续分享在工作、学习和生活中的点点滴滴,也欢迎大家在评论区共同讨论或与我邮件沟通。
标签:
本文设计并实现了一种专用于路径路由匹配的规则,以一种简单而通用的方式描述一组路径的特征,来简化这种场
2023-05-10
雷克萨斯,作为丰田旗下的豪华汽车品牌,它在我们国内汽车市场可以说是家喻户晓的存在,尽管不少车迷朋友们
2023-05-10
男篮热身赛一胜一负!周琦未登场状态未知,世界杯小组赛或三连败,中国男篮,中国篮球,美国篮球,男篮世界杯,
2023-05-10
公积金缴存基数和工资有关系吗公积金月缴存额怎么算接下来跟社保网小编一起来看看相关详情住房公积金是职工
2023-05-10
插上人文的翅膀,小米变暖了4月小米新品发布会上,张颂文出任“小米影像探索家”,联手小米共同开启人文...
2023-05-10
学习宣传贯彻党的二十大精神是七里河区当前和今后一个时期的首要政治任务,全区党员干部将保持昂扬的精神状
2023-05-10
东方证券发布研究报告称,寿险负债转型仍在推进,规模下滑幅度边际减弱,产能提升成效显著,该行认为应持续
2023-05-10
崩坏星穹铁道忘却之庭13层怎么打打法攻略,
2023-05-10
马龙:防布克这种出色球员时必须激怒他们波普今天做得很好,防布克,美国篮球,丹佛掘金队,德文·布克,网球...
2023-05-10
中国新能源汽车上市公司陆续披露一季度财务数据。根据光大证券的统计,今年一季度,A股新能源汽车板块合计
2023-05-10
市场聚焦美国通胀数据黄金逼近历史高点,黄金,金价,加息,美国,美联储,白银价格,通胀数据,美元指数
2023-05-10
1、王志飞的前妻(原配)叫李健也是北京人,他们还有一个儿子。2、也应该让王志飞常常被人抛弃的滋味吧
2023-05-10
亲戚太八卦没多余时间走动要花钱父母:孩子成家立业后会明白“亲”的可贵专家:今日之“断亲”青年,总...
2023-05-10
山河智能:我国首台套新能源无人驾驶矿卡正式发布并投入使用,日前,由山河智能与中科慧拓等多家科研单位联
2023-05-10
2023年5月8日中国太保联合国内知名护理服务企业在上海召开发布会正式宣布护工服务联盟成立作为联盟成员中国
2023-05-10
1、骗局倒不是骗局,只是最近很多人说被骗了,中脉的内衣价格比较高。2、如果你要加盟的话,首先考虑的是,
2023-05-10
人民银行5月10日公告称,为维护银行体系流动性合理充裕,2023年5月10日人民银行以利率招标方式开展了20亿元
2023-05-10
扎克伯格野心未死:元宇宙可为美国贡献5万亿GDP,占比2 4%,北京时间5月10日消息,脸书母公司Meta委托德勤进
2023-05-10
新湖南,主流新媒体,移动新门户。-分享自@新湖南
2023-05-10
白俄罗斯9日举行游行、献花、音乐会等各类活动,纪念卫国战争胜利78周年。白俄罗斯总统卢卡申科当天来到位
2023-05-10
近日,中信建投国家电投新能源REIT原始权益人及一致行动人接连宣布计划增持该基金份额;华夏基金也披露...
2023-05-10
不过,美国队长的落幕是真正的不可避免,其实美队在漫画版第一次内战中就已经死去,算是钢铁侠的责任;而
2023-05-10
“通过‘随手拍’将问题反映到网格后,很快就有人联系我们来处理了。”在福泉市送了一年外卖的王刚说。...
2023-05-10
今天来聊聊关于免运费英文,免运费的文章,现在就为大家来简单介绍下免运费英文,免运费,希望对各位小伙伴
2023-05-10
以前办理过异地就医现在拿到社会保障卡了需要重新申请异地就医吗?换发社会保障卡后异地就医申请不需要重新
2023-05-10
邻居装修在墙体中 "掏出 "一个鞋柜,导致墙体穿洞,修补后又出现了裂缝,双方为此对簿公堂。日前,南...
2023-05-09
雪域之光山海交响西藏唐卡、福建漆画两种历经千年传承的非遗项目跨界融合会碰撞出怎样的火花?5月8日福建发
2023-05-09
直播吧5月9日讯据队报报道,梅西团队与沙特方面达成加盟的口头协议,年薪5亿欧,加上各种福利总额达到6亿欧
2023-05-09
你们好,最近小活发现有诸多的小伙伴们对于自制豆腐乳夏天可以做吗,自制豆腐乳这个问题都颇为感兴趣的,今
2023-05-09新华社北京5月9日电天文学家利用詹姆斯·韦布空间望远镜观察太阳系外恒星“北落师门”周围尘埃,结果发...
2023-05-09
用户在婚纱城使用现金抵用券付款完成后,活动参与商家在售货单加盖店铺章,顾客凭此至A区服务台扫描特邀二
2023-05-09
现在汽车越来越普及,几乎家家户户都有车。这么多车,我们在使用的过程中肯定会遇到各种各样的问题。这个时
2023-05-09
大河网讯近日,漯河市开展检验检测机构2022年度“双随机、一公开”监督抽查工作,努力营造规范、公平、...
2023-05-09
金投黄金网5月9日讯,南昌黄金价格 南昌六福今日黄金价格是多少
2023-05-09
5月8日,河南省第八期“三个一批”项目建设活动启动,位于河南省鹤壁市城乡一体化示范区的主会场,机器...
2023-05-09
1、中国银行周六和周日是上班的。2、具体上班时间为:公司业务:周一到周五,9:00-11:30 13:30-16:30
2023-05-09
36氪获悉,阿尔特在业绩说明会上表示,中央计算平台+区域控制器的架构是汽车EEA发展的趋势,随着控制功能不
2023-05-09
新华财经北京5月9日电(王菁)近十余年以来,在监管政策的不断支持下,中国资管行业的发展突飞猛进,资产管
2023-05-09
瑞典央行会议纪要:委员们一致认为货币政策需要进一步收紧并保持紧缩,以便通胀回落并在合理的时间内稳定在
2023-05-09
5月8日,贵州电商云公司旗下的一码贵州同城和贵州电子商务职业技术学院共同打造的“贵州电商职院校园平...
2023-05-09
今天小编肥嘟来为大家解答以上的问题。八格牙路日文,八格牙路什么意思相信很多小伙伴还不知道,现在让我们
2023-05-09
每一个睿智的灵魂作者:毒哥&玉成来源:毒鸡汤(ID:Du-JiTang)01怪事年年有,但今天我们要讲的这件事情,
2023-05-09
记者从哈尔滨市松北区政府了解到,5月9日,哈尔滨市松北区利民学苑小区租户私拆承重墙事件发生后,哈尔滨市
2023-05-09
1、【答案】C【答案解析】试题分析:欧洲第一长河,被俄罗斯称为“母亲河”,这条河是伏尔加河,位于欧...
2023-05-09
大摩发布研究报告称,预计药明生物(02269)2022至2026年经调整净利润年均复合增长率为35%,而同期全球和内地生
2023-05-09
1 了解安康拼多多代运营的优势安康拼多多代运营是一种通过第三方公司帮助商家管理店铺的方式。其优势如下1
2023-05-09
探秘文昌航天发射场:他们为何在测试厂房里“徒手推火箭”
2023-05-09
点击上方蓝字 关注我们七里河区档案馆结合“三抓三促”行动,立足于档案服务人民群众本职,以学习理论...
2023-05-09
观众船中坐、船在湖中游、戏在身边演,云龙湖畔金山塔前,光影璀璨,云舟穿行。在大型湖岛实景演出《彭城风
2023-05-09
小鹏汽车的CTC(官方称之为CIB)技术发布最晚,充分吸取特斯拉、比亚迪、零跑经验教训的同时,一并改进了一
2023-05-09
哈姆:我们有足够的“锦囊妙计”来应对勇士摆出的任何首发阵容,勇士,库里,湖人,维金斯,美国足球,瑞典足...
2023-05-09
点击下载>>>关于拟录用9位同志为公务员的公示原标题:关于拟录用黄洁婷等9位同志为公务员的公示文章来源:http: w
2023-05-09
人流如织的古迹、景区内,衣袂飘飘的汉服爱好者结伴出游,卷起一波穿搭风潮的同时,也让汉服商家分得了流量
2023-05-09
▲正在配音的刘英杰。(受访者供图)互联网上,夸人长得好,常用这样一句话: "小说主角有了脸 "。刘...
2023-05-09
枣庄:“四个坚持”夯实自然灾害风险防范基础
2023-05-09
1、搞笑的群名如下:1 有福同享有难退群2 永瘦宫3 维密天使线下交流群4 丐帮5 当代恶臭少男的噩梦6 4A级风景
2023-05-09
1、美赞臣 MeadJohnson2、惠氏 WYETH3、雀巢 Nestle4、美素佳儿 Friso5、爱他美 Apta
2023-05-09
【CBA联赛】总决赛第一场|浙江稠州金租99-107不敌辽宁本钢,赖特,王奕博,刘泽一,程帅澎,浙江稠州,辽宁本钢,
2023-05-09
1、想你同时一程身向榆关那畔行这一路那一路默默的无闻。2、呃,省略号应该代表这一句还没有完成的失望,毕
2023-05-08
王者荣耀进入S31赛季已经有一段时间了,虽然有玩家吐槽上分难,其实只要使用一些版本强势英雄,拿到王者印
2023-05-08
前几天,香港新晋顶流姜涛过生日,活活把铜锣湾变成了姜涛湾。▲香港铜锣湾粉丝不仅包揽了街道大小公屏,放
2023-05-08
国乒长腿队花输球落泪!讲出被张本美和淘汰原因,亲承当晚失眠了,钱天一,世乒赛,大满贯,张本美和,伊藤美诚,
2023-05-08
欢迎观看本篇文章,小柴来为大家解答以上问题。关于汉字的资料50字,有关于汉字的资料有哪些50字很多人还不
2023-05-08
1、复读很辛苦压力也很大。2、你可以鼓励他。以上就是【高三复读学校一年学费多少,为我复读一年的男友】相
2023-05-08
视觉中国上线AI工具:实现版权图片再创作
2023-05-08
CFi CN讯:证券代码:833523证券简称:德瑞锂电公告编号:2023-033惠州市惠德瑞锂电科技股份有限公司2022
2023-05-08
伴随着由爱康红十字志愿服务队抗癌志愿者们带来的《爱我中华》非洲鼓表演,启动仪式拉开帷幕。便民服务贴心
2023-05-08
上交所2023年5月8日交易公开信息显示,金冠电气因属于日涨幅达到15%的前5只证券而登上龙虎榜。
2023-05-08
上学期因为疫情没去幼儿园,被幼儿园告知取消下学期的入园名额,幼儿园的规
2023-05-08
今年以来,A股市场走势较为分化,中欧基金行业精选组基金经理钱亚风云用复苏、创新、低估三个关键词来形容
2023-05-08
戳视频↑听中国工程院院士、航天科技集团五院、中国空间站系统总设计师杨宏讲述中国空间站建造过程中,中国
2023-05-08
参赛账户“自在悠闲”,自7月份参赛以来,资金曲线虽没有出现大幅回撤,但一直处于震荡状态,近期主要盈...
2023-05-08
中新网5月8日电(中新财经左雨晴)第七次全国人口普查数据显示,我国60岁及以上人口2 64亿,占18 7%;65岁及
2023-05-08
渭南日报记者张伯阳5月6日,记者从市行政审批服务局获悉,今年以来,市行政审批服务局以省市“三个年”...
2023-05-08
北京作为资源众多的一线城市,是无数人趋之若鹜的地方。在京务工的家长们更希望孩子能够在身边读书成长,但
2023-05-08
三年级下册第27课漏生字
2023-05-08
中新网海南新闻5月8日电印尼《千岛日报》、澳门《澳门日报》、菲律宾《世界日报》、泰国《星暹日报》、巴西
2023-05-08
福州海警局摄 5月4日22时许,福州海警局获悉在闽江港附近海域有船只趁着夜色开展捕捞作业,立即派遣执法
2023-05-08
4月26日,米哈游的新作《崩坏:星穹铁道》正式上线。这款新游有多火?在未上线之前,全球的预约量达到3000
2023-05-08
牛仔裤搭配这4种上衣,夏天穿太好看了!,衬衫,背心,上衣,t恤,高跟,牛仔裤,好身材
2023-05-08
西班牙后卫拉莫斯迎来了自己职业生涯的千场里程碑
2023-05-08
讯飞星火认知大模型正式发布,赋能汽车人机交互体验跃升5月6日,讯飞星火认知大模型成果发布会在安徽合肥举
2023-05-08
光谷科技创新大走廊将如何协同建设?湖北省科技创新办公室日前印发的《加快推进光谷科技创新大走廊协同创新
2023-05-08
广东省政府新闻办于近日举行珠三角与粤东粤西粤北经贸合作招商会新闻发布会。此次招商会将于5月11日在广州
2023-05-08
从硅谷银行到第一共和银行,美国银行股的连环雷响了,美国银行业也正在经历至暗时刻。相比之下,A股银行股
2023-05-08
5月7日,“网友自称曾霸凌刘亦菲”的词条突然登上热搜。该网友称,他曾在学校时“揍了几次刘天仙”,对...
2023-05-08
一女子乘坐高铁时,因制止熊孩子撞椅背遭到对方家长掌掴,并进行反击。5月7日,该女子在社交媒体发文称,其
2023-05-08
昨日,福州二十五中迎来60周年校庆。该校1963年由瀛滨小学加冠初中班初创,两年后正式命名为“福建省福...
2023-05-08
Shams:猛龙正在面试掘金助教大卫-阿德尔曼以担任球队主教练,自由球员,丹佛掘金队,多伦多猛龙队,大卫-阿德
2023-05-08
1、廖弟广场舞又见山里红的动作分解很多网站都有,不过建议你到56网站搜索,因为这个网址的广场舞视频很清
2023-05-08
曾在新冠疫情之初3个月内,股价翻了3倍的大牛股会畅通讯(行情300578,诊股)如今或将易主。5月7日,会畅通讯
2023-05-07
央视网消息:国家外汇管理局5月7日公布最新外汇储备情况,数据显示,中国外汇储备规模保持基本稳定。国家外
2023-05-07
罗威谈G4:激烈程度会是G3的10倍我们要让恩比德筋疲力尽,费城,疯狂,罗威,罗伯特,美国篮球,莫·威廉姆斯,乔
2023-05-07
越西县气象台2023年05月07日17时55分发布雷电黄色预警信号:拉吉镇、书古镇、竹阿觉镇、依洛地坝镇、贡莫镇
2023-05-07
中国桥牌协会消息,2023年全国桥牌俱乐部锦标赛7日开赛,来自全国的106支队伍汇聚北京世园公园展开角逐
2023-05-07
流行病学的统计显示,吃他汀类药物的人群患大肠癌的比例降低,这是有科学依据的吗?近日,上海交通大学医学
2023-05-07
俗话说,上天难,入地更难。这个五一,我国的“深地工程”取得重大突破,亚洲最深井在新疆塔里木盆地开...
2023-05-07
【 福建4名干部暴雨夜落水失联 】5月6日至7日,福建龙岩市新罗区遭遇特大暴雨袭击,当地龙川溪水位暴涨。7
2023-05-07
中新社北京5月7日电(记者马帅莎)据中国载人航天工程办公室消息,北京时间5月7日,天舟六号货运飞船与长征七
2023-05-07
央视新闻客户端讯电力数据是反映经济运行的“晴雨表”和“风向标”。今年以来,随着消费信心逐步回暖、...
2023-05-07Copyright © 2015-2022 西南水产网版权所有 备案号:皖ICP备2022009963号-8 联系邮箱:39 60 29 14 2@qq.com