Java 中 N+1 问题的集成测试 环球热推荐

来源:今日头条 2023-06-13 19:22:25

N+1问题:N+1问题是指在使用关系型数据库时,在获取一组对象及其关联对象时,产生额外的数据库查询的问题。其中N表示要获取的主对象的数量,而在获取每个主对象的关联对象时,会产生额外的1次查询。

N+1问题是很多项目中的通病。遗憾的是,直到数据量变得庞大时,我们才注意到它。不幸的是,当处理 N + 1 问题成为一项难以承受的任务时,代码可能会达到了一定规模。


【资料图】

在这篇文章中,我们将开始关注以下几点问题:

如何自动跟踪N+1问题?如何编写测试来检查查询计数是否超过预期值?N + 1 问题的一个例子

假设我们正在开发管理动物园的应用程序。在这种情况下,有两个核心实体:Zoo和Animal。请看下面的代码片段:

@Entity@Table(name = "zoo")public class Zoo {    @Id    @GeneratedValue(strategy = IDENTITY)    private Long id;    private String name;    @OneToMany(mappedBy = "zoo", cascade = PERSIST)    private List animals = new ArrayList<>();}@Entity@Table(name = "animal")public class Animal {    @Id    @GeneratedValue(strategy = IDENTITY)    private Long id;    @ManyToOne(fetch = LAZY)    @JoinColumn(name = "zoo_id")    private Zoo zoo;    private String name;}

现在我们想要检索所有现有的动物园及其动物。看看ZooService下面的代码。

@Service@RequiredArgsConstructorpublic class ZooService {    private final ZooRepository zooRepository;    @Transactional(readOnly = true)    public List findAllZoos() {        final var zoos = zooRepository.findAll();        return zoos.stream()                   .map(ZooResponse::new)                   .toList();    }}

此外,我们要检查一切是否顺利进行。简单的集成测试:

@DataJpaTest@AutoConfigureTestDatabase(replace = NONE)@Transactional(propagation = NOT_SUPPORTED)@Testcontainers@Import(ZooService.classclass ZooServiceTest {    @Container    static final PostgreSQLContainer POSTGRES = new PostgreSQLContainer<>("postgres:13");    @DynamicPropertySource    static void setProperties(DynamicPropertyRegistry registry) {        registry.add("spring.datasource.url", POSTGRES::getJdbcUrl);        registry.add("spring.datasource.username", POSTGRES::getUsername);        registry.add("spring.datasource.password", POSTGRES::getPassword);    }    @Autowired    private ZooService zooService;    @Autowired    private ZooRepository zooRepository;    @Test    void shouldReturnAllZoos() {        /* data initialization... */        zooRepository.saveAll(List.of(zoo1, zoo2));        final var allZoos = assertQueryCount(            () -> zooService.findAllZoos(),            ofSelects(1)        );        /* assertions... */        assertThat(            ...        );    }}

测试成功通过。但是,如果记录 SQL 语句,会注意到以下几点:

-- selecting all zoosselect z1_0.id,z1_0.name from zoo z1_0-- selecting animals for the first zooselect a1_0.zoo_id,a1_0.id,a1_0.name from animal a1_0 where a1_0.zoo_id=?-- selecting animals for the second zooselect a1_0.zoo_id,a1_0.id,a1_0.name from animal a1_0 where a1_0.zoo_id=?

如所见,我们select对每个 present 都有一个单独的查询Zoo。查询总数等于所选动物园的数量+1。因此,这是N+1问题。

这可能会导致严重的性能损失。尤其是在大规模数据上。

自动跟踪 N+1 问题

当然,我们可以自行运行测试、查看日志和计算查询次数,以确定可行的性能问题。无论如何,这效率很低。。

有一个非常高效的库,叫做datasource-proxy。它提供了一个方便的 API 来javax.sql.DataSource使用包含特定逻辑的代理来包装接口。例如,我们可以注册在查询执行之前和之后调用的回调。该库还包含开箱即用的解决方案来计算已执行的查询。我们将对其进行一些改动以满足我们的需要。

查询计数服务

首先,将库添加到依赖项中:

implementation "net.ttddyy:datasource-proxy:1.8"

现在创建QueryCountService. 它是保存当前已执行查询计数并允许您清理它的单例。请看下面的代码片段。

@UtilityClasspublic class QueryCountService {    static final SingleQueryCountHolder QUERY_COUNT_HOLDER = new SingleQueryCountHolder();    public static void clear() {        final var map = QUERY_COUNT_HOLDER.getQueryCountMap();        map.putIfAbsent(keyName(map), new QueryCount());    }    public static QueryCount get() {        final var map = QUERY_COUNT_HOLDER.getQueryCountMap();        return ofNullable(map.get(keyName(map))).orElseThrow();    }    private static String keyName(Map map) {        if (map.size() == 1) {            return map.entrySet()                       .stream()                       .findFirst()                       .orElseThrow()                       .getKey();        }        throw new IllegalArgumentException("Query counts map should consists of one key: " + map);    }}

在那种情况下,我们假设_DataSource_我们的应用程序中有一个。这就是_keyName_函数否则会抛出异常的原因。但是,代码不会因使用多个数据源而有太大差异。

将SingleQueryCountHolder所有QueryCount对象存储在常规ConcurrentHashMap.

相反,_ThreadQueryCountHolder_将值存储在_ThreadLocal_对象中。但是_SingleQueryCountHolder_对于我们的情况来说已经足够了。

API 提供了两种方法。该get方法返回当前执行的查询数量,同时clear将计数设置为零。

BeanPostProccessor 和 DataSource 代理

现在我们需要注册QueryCountService以使其从 收集数据DataSource。在这种情况下,BeanPostProcessor 接口就派上用场了。请看下面的代码示例。

@TestComponentpublic class DatasourceProxyBeanPostProcessor implements BeanPostProcessor {    @Override    public Object postProcessAfterInitialization(Object bean, String beanName) {        if (bean instanceof DataSource dataSource) {            return ProxyDataSourceBuilder.create(dataSource)                       .countQuery(QUERY_COUNT_HOLDER)                       .build();        }        return bean;    }}

我用注释标记类_@TestComponent_并将其放入_src/test_目录,因为我不需要对测试范围之外的查询进行计数。

如您所见,这个想法很简单。如果一个 bean 是DataSource,则将其包裹起来ProxyDataSourceBuilder并将QUERY_COUNT_HOLDER值作为QueryCountStrategy.

最后,我们要断言特定方法的已执行查询量。看看下面的代码实现:

@UtilityClasspublic class QueryCountAssertions {    @SneakyThrows    public static  T assertQueryCount(Supplier supplier, Expectation expectation) {        QueryCountService.clear();        final var result = supplier.get();        final var queryCount = QueryCountService.get();        assertAll(            () -> {                if (expectation.selects >= 0) {                    assertEquals(expectation.selects, queryCount.getSelect(), "Unexpected selects count");                }            },            () -> {                if (expectation.inserts >= 0) {                    assertEquals(expectation.inserts, queryCount.getInsert(), "Unexpected inserts count");                }            },            () -> {                if (expectation.deletes >= 0) {                    assertEquals(expectation.deletes, queryCount.getDelete(), "Unexpected deletes count");                }            },            () -> {                if (expectation.updates >= 0) {                    assertEquals(expectation.updates, queryCount.getUpdate(), "Unexpected updates count");                }            }        );        return result;    }}

该代码很简单:

将当前查询计数设置为零。执行提供的 lambda。将查询计数给定的Expectation对象。如果一切顺利,返回执行结果。

此外,您还注意到了一个附加条件。如果提供的计数类型小于零,则跳过断言。不关心其他查询计数时,这很方便。

该类Expectation只是一个常规数据结构。看下面它的声明:

@With@AllArgsConstructor@NoArgsConstructorpublic static class Expectation {    private int selects = -1;    private int inserts = -1;    private int deletes = -1;    private int updates = -1;    public static Expectation ofSelects(int selects) {        return new Expectation().withSelects(selects);    }    public static Expectation ofInserts(int inserts) {        return new Expectation().withInserts(inserts);    }    public static Expectation ofDeletes(int deletes) {        return new Expectation().withDeletes(deletes);    }    public static Expectation ofUpdates(int updates) {        return new Expectation().withUpdates(updates);    }}
最后的例子

让我们看看它是如何工作的。首先,我在之前的 N+1 问题案例中添加了查询断言。看下面的代码块:

final var allZoos = assertQueryCount(    () -> zooService.findAllZoos(),    ofSelects(1));

不要忘记_DatasourceProxyBeanPostProcessor_在测试中作为 Spring bean 导入。

如果我们重新运行测试,我们将得到下面的输出。

Multiple Failures (1 failure)    org.opentest4j.AssertionFailedError: Unexpected selects count ==> expected: <1> but was: <3>Expected :1Actual   :3

所以,确实有效。我们设法自动跟踪 N+1 问题。是时候用 替换常规选择了JOIN FETCH。请看下面的代码片段。

public interface ZooRepository extends JpaRepository {    @Query("FROM Zoo z LEFT JOIN FETCH z.animals")    List findAllWithAnimalsJoined();}@Service@RequiredArgsConstructorpublic class ZooService {    private final ZooRepository zooRepository;    @Transactional(readOnly = true)    public List findAllZoos() {        final var zoos = zooRepository.findAllWithAnimalsJoined();        return zoos.stream()                   .map(ZooResponse::new)                   .toList();    }}

让我们再次运行测试并查看结果:

这意味着正确地跟踪了 N + 1 个问题。此外,如果查询数量等于预期数量,则它会成功通过。

结论

事实上,定期测试可以防止 N+1 问题。这是一个很好的机会,可以保护那些对性能至关重要的代码部分。

上一篇 : 崔永辉调研推进保障性住房工作 环球微动态

下一篇 : 最后一页

x 广告
高层声音

Java 中 N+1 问题的集成测试 环球热推荐

2023-06-13

崔永辉调研推进保障性住房工作 环球微动态

2023-06-13

最新消息:6月,你的工资卡或将多这三笔钱!

2023-06-13

印度实行小麦库存限制以遏制价格上涨

2023-06-13

茅台卖咖啡了,白酒味儿的,要来一杯吗?-世界快看点

2023-06-13

【环球报资讯】一女大学生怀疑同校男生尾拍后称认错人,杭州师范大学:我校发生一起学生争执事件,正在调查中

2023-06-13

世界滚动:客厅可以养的植物有哪些?

2023-06-13

世界球精选!逆回购降息率先落地!本月MLF利率和LPR有望下调

2023-06-13

绿地香港:前5月合约销售金额66.47亿元-焦点速讯

2023-06-13

复合集流体龙头金美新材料出席世界动力电池大会 扩产项目签约-焦点速读

2023-06-13

湖北省梁子湖区发布暴雨橙色预警

2023-06-13

为什么wifi延迟忽高忽低|世界头条

2023-06-13

全球人权治理高端论坛将在京举行|环球新消息

2023-06-13

焦点报道:当事公司回应高管在德国被带走: 目前正常参会

2023-06-13

天天最资讯丨第20届东博会筹办顺利 恢复东盟国家“魅力之城”展区

2023-06-13

中介费仍是3% 福州新政“降了个寂寞” 发布一日即撤回因“悖离上级精神”|世界信息

2023-06-13

加快油茶产业发展三年行动启动

2023-06-13

宁波汽车南站客服电话(宁波汽车南站) 今日最新

2023-06-13

甘肃:为72处岩画文物构建数字影像数据库-速讯

2023-06-13

【世界新要闻】全省光电产业链专题会议召开

2023-06-13

淘宝每日一猜6月13日答案|今热点

2023-06-13

深圳机场推出夜间“零点快线” 服务时间为00∶00-2∶00,30分钟一班|全球微资讯

2023-06-13

前BioWare编剧教你写剧情 当前快播

2023-06-13

苹果期货板块6月12日涨2.14%,安德利领涨,主力资金净流出6107万元

2023-06-13

今年以工代赈中央专项投资下达已超九成

2023-06-13

私服论坛99nets(bbs2 99nets me)

2023-06-13

月寒一梦_对于月寒一梦简单介绍-全球热闻

2023-06-13

当前观察:美股异动 | 金山云(KC.US)涨超13% 市值超13.6亿美元

2023-06-12

贵大哪些学院好最厉害的是个在西校区_环球微动态

2023-06-12

体坛3大GOAT齐聚!梅西德约却只能在两边,詹姆斯丢冠却是居中C位

2023-06-12

电视硬屏和软屏哪个会更好些_电视硬屏好还是软屏好

2023-06-12

正定机场到石家庄火车站的大巴时刻表_正定机场到石家庄火车站

2023-06-12

当前信息:江苏师范院校考编排名 全国有哪些好的二本师范学院?

2023-06-12

轨道交通城市建设与发展青年专家创新论坛举行 焦点快看

2023-06-12

简述弗兰克赫兹实验中能量转化过程_弗兰克赫兹实验的误差分析

2023-06-12

爱的谎言普法栏目剧在线观看大结局(爱的谎言普法栏目剧)-环球热推荐

2023-06-12

早稻田大学留学费用人民币_早稻田大学留学费用

2023-06-12

世界热文:win8开始菜单不见了怎么恢复(win8开始菜单)

2023-06-12

宁夏建材:截至目前公司与微软、AMD不存在合作关系

2023-06-12

好大儿什么意思_爸爸的好大儿是什么意思是骂人的吗

2023-06-12

关于起底江西“鼠头鸭脖”食堂承包商及起底江西“鼠头鸭脖”食堂承包商详情 每日播报

2023-06-12

世界热议:“黑科技”通往“绿未来” 千余种技术产品亮相碳博会

2023-06-12

快讯:养老金融路在何方?金融高管们这么说

2023-06-12

林志颖代言,能拯救小鹏吗?

2023-06-12

三四天去哪旅游合适呢女生_三四天去哪旅游合适呢

2023-06-12

1158万人!今年高校毕业生数量再创历史新高!找工作更难了..._环球聚焦

2023-06-12

【环球聚看点】跟队记者:米兰在强势追求小图拉姆,将与巴黎竞争免签这名前锋

2023-06-11

天天精选!贵州捉鸡麻将电脑版下载_贵州捉鸡麻将

2023-06-11

恭喜!香港知名女星宣布二胎产子,富豪丈夫抱着儿子像抱着孙子_今日关注

2023-06-11

严正化不敢看《车贞淑医生》首播,被夸后中断录影爆哭半小时

2023-06-11

展现“艺科融合”创作实践,清华美院本科生毕业作品展揭幕!|焦点资讯

2023-06-11

黑龙江12件涉黑涉恶案件集中公开宣判85人获刑

2023-06-11

【世界独家】雷电、暴雨、大风、冰雹!上海目前“一蓝三黄”预警高挂!全市启动防汛防台四级响应行动

2023-06-11

世界热点!邮差马龙外号由来(邮差马龙)

2023-06-11

环球快看:一个容积为2.5升的塑料壶用它装酒精最多能装多少千克(一个容积为2 5l的塑料瓶用它装水)

2023-06-11

引导行业健康发展 海南省混凝土协会正式成立|世界资讯

2023-06-11

发繁体 满江红(发繁体)|每日播报

2023-06-11

亚共析钢和过共析钢的区别_亚共析钢

2023-06-11

高考配置用笔漏墨:招标背后可有“猫腻”?_今日观点

2023-06-11

当前焦点!OpenAI首席执行官同韩总统会面:建议韩国增加系统芯片产能 放宽规制营造AI生态系统

2023-06-11

夏季饮食要注意ppt_夏季饮食 世界聚看点

2023-06-11

高考结束,多地景区宣布全国高考考生凭准考证可免费游览

2023-06-11

旱碱麦成“名片”迎来丰收 盐碱地特色农业开出“增收花”

2023-06-11

天天通讯!咖啡店评弹返场、多彩手工体验!社区刮起最炫非遗风!

2023-06-11

物料提升机型号s100(物料提升机型号)|焦点观察

2023-06-11

安娜唱的堆雪人歌词_雪人 歌词

2023-06-11

中国银行信用卡中心电话人工服务电话时间 今日视点

2023-06-11

要闻:《坏妈妈》大结局,李到晛&安恩真求婚合照超甜

2023-06-11

全球短讯!浙江一铁路旁工厂起火逼停列车 现场黑烟滚滚火光冲天!所幸无伤亡!

2023-06-11

广州将打造33个重点商圈 全球观察

2023-06-11

观速讯丨送餐途中救火 外卖小哥被评为天津见义勇为好人

2023-06-11

清远公用品牌IP形象亮相

2023-06-11

最受欢迎的萌宠排名_世界报道

2023-06-11

50多岁男人的性功能(50岁男人的性能力)

2023-06-11

直击2023中国经济传媒大会丨中国传媒大学新闻学院教授沈浩:GPT可服务于财经内容的标签化、情感化、个性化

2023-06-11

中国药品批准文号查询(国家药品批准文号查询)-环球关注

2023-06-11

俄媒:俄国防部公布乌军装甲车辆被摧毁视频,引用二战时期经典语录|每日热门

2023-06-11

焦点播报:发贴吧(发贴)

2023-06-11

彻查“鼠头鸭脖”事件!江西成立联合调查组|世界时快讯

2023-06-11

当前快看:热威电热首发过会,进入新能源汽车供应商体系进展遭问询

2023-06-10

昌都宝藏男孩,完成了5400公里的G318骑行 天天新资讯

2023-06-10

楼面价约4793元/㎡!赣州一地块被本土土豪拍得! 即时看

2023-06-10

快资讯丨思明区政务服务中心“政务智能办”专区启用

2023-06-10

视点!纯h文

2023-06-10

红酒和杏仁能同食吗?|每日讯息

2023-06-10

买二手房后发现房屋漏水怎么办(房屋漏水怎么办) 全球快播

2023-06-10

查水费户号怎么查询交交水费(交水费的户号查询)

2023-06-10

正骨水的功效与作用及禁忌(正骨水的功效与作用)

2023-06-10

曼城挖角拜仁后防全能神将,7球1助攻堪称带刀后卫,6大豪门都想买他

2023-06-10

恭喜发财三大生肖6月11日-6月19日 财运特吉,深得财神关照,正财偏财齐齐发 焦点热文

2023-06-10

今日关注:小屏旗舰即将回归 华硕Zenfone 10性能配置备受瞩目

2023-06-10

重点聚焦!中方驳斥:无中生有、信口雌黄、恶意诋毁!

2023-06-10

【世界独家】国宝画重点丨上天入海,到处“出差”!这件宝贝可不得了

2023-06-10

直击2023中国经济传媒大会丨中国经济体制改革会副会长樊纲:复苏正在进行中 我们需要耐心-世界今头条

2023-06-10

天天热讯:衢州患尿毒症的大爷吃了一袋桃子,差点酿成悲剧

2023-06-10

焦点讯息:AI前哨 | Open AI联合创始人Sam AItman:目前开源不是最佳路径

2023-06-10

夏心,凉于静好

2023-06-10

台州女子身体里取出了“花” 医生:喜欢吃高热量食物易“中招”

2023-06-10

安徽工业大学材料科学与工程学院院徽

2023-06-10

中国三人男篮明日出战2023FIBA3x3挑战赛槟城站 陆文博迎首秀

2023-06-09

日本人叉叉视频-天天时快讯

2023-06-09

乌镇汽车站附近旅店_附近旅店

2023-06-09

北京城建10亿元中票将兑付 利率3.66%

2023-06-09

播报:盐湖股份:从目前市场需求判断 对新能源行业发展十分看好

2023-06-09

异动快报:世纪华通(002602)6月9日11点25分触及涨停板

2023-06-09

碳14幽门螺旋杆菌正常值是多少_幽门螺旋杆菌200多严重吗

2023-06-09

广东省肇庆市2023-06-06 15:56发布暴雨黄色预警

2023-06-09

鲁西化工:公司的主业是化工产业和化工工程产业,公司目前已不生产尿素产品|今日播报

2023-06-09

天源迪科:6月7日公司高管谢晓宾减持公司股份合计80万股

2023-06-09

冰糖柑苗_冰糖柑苗

2023-06-09

华人健康(301408):6月8日北向资金减持3.83万股

2023-06-09

iphone6(a1586)_世界快资讯

2023-06-09

每日视讯:“双倍价值观”贯彻始终,长安欧尚Z6第10万台下线

2023-06-09

宁德时代与泰国Arun Plus达成CTP合作协议

2023-06-09

2023汽车金融公司贷款规模与发展前景

2023-06-09

世界播报:细胞免疫疗法即将临床使用 治疗癌症优势明显 是创新药领域研发的细分赛道

2023-06-09

今日最新!justin bieber 个人资料_justin bieber资料

2023-06-09

全球百事通!联想推出拯救者无线上网伴侣:50M 带宽速率,149 元

2023-06-09

全球简讯:鸡眼怎么去除最好方法_鸡眼要贴到什么程度

2023-06-09

江铜铜箔6月15日深交所首发上会 拟募资20亿元

2023-06-09

关于科研前线的一瞥|世界即时看

2023-06-08

哈尔滨6月演出汇总-当前消息

2023-06-08

三亚一考生家长在考点当志愿者:希望孩子们金榜题名

2023-06-08

【天天新视野】农发行海南省分行营业部全力支持自贸港重点园区海口江东新区建设

2023-06-08

【环球新要闻】班级游戏活动策划方案(班级游戏)

2023-06-08

中国星辰|中国人登月如何实现?

2023-06-08

陈亦博:6.8黄金今日能否反转,最新走势分析 要闻

2023-06-08

携程集团发布2023Q1财报:净营收92亿元 同比增长124%_环球关注

2023-06-08

网传被撞车辆为送考车?上海闵行辟谣:涉事四车均无乘客_环球观察

2023-06-08

长高电新(002452.SZ):正在开展衡阳产业园扩产征地等前期工作 快看点

2023-06-08

古代对女子的尊称一个字_卿是指男的还是女的 独家焦点

2023-06-08

借记卡是信用卡还是储存卡 借记卡是信用卡

2023-06-08

建工修复拟定增募不超2.25亿元 2021年上市募3.04亿元 今热点

2023-06-08

进退两难的选择_进退两难的意思

2023-06-08

男友演唱会上和保安亲嘴,霉霉再度分手?!网友:霉霉该好好和自己相处…-天天微速讯

2023-06-08

和胜股份:在项目研发前沿领域一直与宁德时代深度合作

2023-06-08

环球新资讯:理想汽车北京顺义工厂最早7月投产?官方回应:确实在积极准备中

2023-06-08

2023年房屋征收,拆迁补偿协商处理,这5点要注意 全球看点

2023-06-07

当前视点!塞尔达传说王国之泪完美结局攻略[多图]

2023-06-07

【期市盘面】甲醇跌超3%位居跌幅榜首!一品种主力资金流入近6亿

2023-06-07

即时:商务预报:5月29日至6月4日禽产品零售价格小幅下降

2023-06-07

社区关爱高考考生和候考家长_全球视讯

2023-06-07

耐心静待市场企稳 环球速递

2023-06-07

反侦察能力_反侦察 每日简讯

2023-06-07

端午节机票预订已进入高峰期_全球今日报

2023-06-07

华为李鹏:中国5G将向5.5G加速演进,实现步步领先|世界信息

2023-06-07

全球百事通!她曾是央视美女主持,2婚上《非诚勿扰》,登台1小时牵手富豪

2023-06-07

全球快报:面向太阳前面是东后面是西左面是仿写句子_面向太阳前面是东后面是西左面是

2023-06-07

天天观热点:1小时6.5元!共享单车悄然涨价,消费者还会买单吗?

2023-06-07

港股异动 | 理士国际(00842)涨超13% 近7个交易日大涨40%

2023-06-07

全球滚动:湖南江永创新“爱心菜园”新模式治理基层

2023-06-07

广东:培训机构不得违规发布、传播2023年高考真题原卷 天天即时

2023-06-07

【环球新要闻】开展12600余项减排项目 广东持续打好臭氧污染防治攻坚战

2023-06-07

日本汽油库存下降85000千升至165万千升 环球观速讯

2023-06-07

深圳到香港物流_深圳到香港

2023-06-07

环球即时:南京做试管结果较好的医院-生殖激素常规检查+血hcg是检查什么的

2023-06-07

安德烈·伊万诺维奇·别洛夫_世界观察

2023-06-07

峡谷之巅资格申请入口_峡谷之巅资格

2023-06-07

今年第3号台风“古超”生成!海南的天气是……

2023-06-07

完全竞争寡头垄断垄断性竞争_完全竞争 寡头垄断 世界讯息

2023-06-07

环球关注:金十期货6月6日讯,据欧盟委员会,截至6月4日,欧盟2022/23年软小麦出口量为2888万吨,而去年同期为2593万吨

2023-06-07

揭穿洋“哈利” 止损黄昏恋

2023-06-07

天天微资讯!惠安一幅地块将拍卖出让,位于......

2023-06-07

唐山制造!我国首列出口新能源轻轨列车在唐山下线-全球快资讯

2023-06-06

大专上到一半退学费吗(大专上了半学期退学会退学费吗)

2023-06-06

焦点!阿联酋5月PMI出炉:企业信心达2021年10月以来最高点

2023-06-06

全球信息:东四环奥特莱斯电话_东四环奥特莱斯

2023-06-06

万洲金业采用国际主流MT4交易软件 黄金交易稳定更省心 独家

2023-06-06

中诚信亚太:首次授予陕西泾河集团长期信用评级为BBBg

2023-06-06

禾盛新材拟定增募资不超过1.22亿元 股价跌2.84% 焦点

2023-06-06

每日快看:夸女生30个优点,哪些夸女的话有哪些 别太假 夸大 肉麻

2023-06-06

有游于子墨子之门者,谓子墨子曰先生以鬼神为明知

2023-06-06

福建省工艺美术协会漆艺专业委员会换届大会在福建会堂举行

2023-06-06

供过于求成本下降 醋酐价格震荡下跌-环球百事通

2023-06-06

教育部部署各地做好高考服务保障 提醒广大考生做好考前准备-环球即时

2023-06-06

你的名字最终结局_你的名字结局在一起_环球热资讯

2023-06-06

热门看点:宝新能源:6月5日获融资买入1333.97万元,占当日流入资金比例8.77%

2023-06-06

两向量相乘公式大全_关于 两向量相乘的几何意义 世界快看点

2023-06-06

我印象最深的是10年前去南京总统府,遇见了一个历史老师做讲解,那叫一个慷慨激昂

2023-06-06

电梯故障瞬间丈夫下意识护住妻儿|资讯

2023-06-06

海南警方悬赏万元抓人!|全球微动态

2023-06-06

头部券商集体大降薪?券商员工:底薪降幅超6000元、年终奖也缩水 不同业务条线降幅不同

2023-06-06

中国科幻产业报告发布:2022年科幻产业总营收超870亿元

2023-06-06

当前快报:数字化助力河南消费品创新升级

2023-06-06

剑三扶摇九天前置(剑三扶摇)_世界即时看

2023-06-06

进球网评15大“水货”引援:库鸟阿扎尔马奎前三,内马尔在列_资讯推荐

2023-06-06

我请你吃蒸羊羔报菜名(有一段相声 我请你吃 蒸羊羔 蒸熊掌 hellip)

2023-06-06

詹姆斯很快提出交易申请 希望联手欧文东契奇 湖人愿与独行侠谈判

2023-06-06

华商基金彭欣杨:创新医疗贵在创新 未来聚焦三大方向 速递

2023-06-06

邯郸主城区11宗住宅地块近期集中出让,合计780亩 世界观察

2023-06-06

2023年山西省高校毕业生就业服务专场招聘会将举行

2023-06-06

香港交易所公布21只双柜台证券:阿里巴巴、腾讯、小米、京东等在列 未来将会纳入更多证券_天天速看

2023-06-06

播报:一所大学需要什么样的精神榜样

2023-06-06

深圳又一旧改调规划:产业园变学校,新增宅地12万㎡-环球新动态

2023-06-05

组图|江苏泰州:爱护环境 从我做起-动态焦点

2023-06-05

天天头条:如何管教沉迷游戏的叛逆期孩子?

2023-06-05

当前头条:陈涛镇开展“绿书签护苗”活动|当前播报

2023-06-05

世界热点!合肥小程序开发价格

2023-06-05

天天快资讯丨齐风鲁韵耀港澳,山东对外开放再出发

2023-06-05

TheShy采访被打脸,粉丝重拳出击,山鸡无情单杀,Doinb预言成功|滚动

2023-06-05

返回顶部