2023全国大学生软件测试大赛开发者测试练习题满分答案(PairingHeap2023)
2023全国大学生软件测试大赛开发者测试练习题满分答案(PairingHeap2023)
- 题目详情
- 题解代码(直接全部复制到test类中即可)
提示:该题只需要分支覆盖得分即可,不需要变异得分
题目详情


题解代码(直接全部复制到test类中即可)
package net.mooctest;import static org.junit.Assert.*;import java.lang.reflect.Method;import java.lang.reflect.InvocationTargetException;import org.junit.Before;import org.junit.Test;public class Heap_ItemTest {@Testpublic void test() {Heap_Item<String> heap_Item0 = new Heap_Item<String>(",");Heap_Item<String> heap_Item1 = new Heap_Item<String>(",");heap_Item1.setLeftSon(heap_Item0);heap_Item0.setLeftSon(heap_Item1);heap_Item0.setRightSon(heap_Item1);heap_Item1.replaceChild("$", heap_Item0);heap_Item0.getSonByData(",");heap_Item0.getSonByData("");assertTrue(heap_Item0.hasLeftSon());}@Testpublic void test1() {Heap_Item<String> heap_Item0 = new Heap_Item<String>(",");Heap_Item<String> heap_Item1 = new Heap_Item<String>(",");heap_Item1.setLeftSon(heap_Item0);heap_Item0.setLeftSon(heap_Item1);heap_Item0.setRightSon(heap_Item1);heap_Item1.replaceChild(",", heap_Item0);heap_Item0.getSonByData(",");heap_Item0.getSonByData("");assertTrue(heap_Item0.hasLeftSon());}@Testpublic void test2() {Heap_Item<String> heap_Itema=new Heap_Item<String>("a");Heap_Item<String> heap_Itemb=new Heap_Item<String>("b");Heap_Item<String> heap_Itemc=new Heap_Item<String>("c");Heap_Item<String> heap_Itemd=new Heap_Item<String>("d");Heap_Item<String> heap_Iteme=new Heap_Item<String>("e");Heap_Item<String> heap_Itemk=new Heap_Item<String>("k");Heap_Item<String> heap_Itemp=new Heap_Item<String>("p");Heap_Item<String> heap_Itemq=new Heap_Item<String>("q");heap_Itema.setLeftSon(heap_Itemb);heap_Itema.setRightSon(heap_Itemc);heap_Itemb.setRightSon(heap_Itemd);heap_Itemb.setLeftSon(heap_Iteme);heap_Itemb.replaceChild("e", heap_Itemk);heap_Itemb.replaceChild("d", heap_Itemk);heap_Itemb.itIsLeftSon(heap_Itemk);heap_Iteme.setLeftSon(heap_Itemp);heap_Itemq.setLeftSon(heap_Itemq);heap_Iteme.removeLeftSon();heap_Iteme.removeRightSon();heap_Itemb.removeChild("k");heap_Itemb.removeChild("k");heap_Itemb.removeChild("a");Heap_Item <String> heap_Itema1= heap_Itema.getLeftSon();assertSame(heap_Itema1,heap_Itemb);heap_Itemb.setAncestor(heap_Itema);Heap_Item <String> heap_Itemn= heap_Itemb.getAncestor();assertSame(heap_Itema,heap_Itemb.getAncestor());assertEquals(heap_Itema,heap_Itemn);//设置节点c的祖先为aheap_Itemc.setAncestor(heap_Itema);//节点a无祖先,于是返回nullHeap_Item <String> heap_Itemanull=heap_Itema.getMultiWayAncestor();assertNull(heap_Itemanull);//节点b有祖先a,同时又是它的左孩子,于是返回他的祖先aHeap_Item <String> heap_Itembnull=heap_Itemb.getMultiWayAncestor();assertNotNull(heap_Itembnull);assertSame(heap_Itema,heap_Itembnull);}@Testpublic void testMul() {Heap_Item<String> heap_Itema=new Heap_Item<String>("a");Heap_Item<String> heap_Itemb=new Heap_Item<String>("b");Heap_Item<String> heap_Itemc=new Heap_Item<String>("c");Heap_Item<String> heap_Itemd=new Heap_Item<String>("d");Heap_Item<String> heap_Iteme=new Heap_Item<String>("e");Heap_Item<String> heap_Itemk=new Heap_Item<String>("k");Heap_Item<String> heap_Itemp=new Heap_Item<String>("p");Heap_Item<String> heap_Itemq=new Heap_Item<String>("q");heap_Itema.setLeftSon(heap_Itemb);heap_Itema.setRightSon(heap_Itemc);heap_Itemb.setRightSon(heap_Itemd);heap_Itemb.setLeftSon(heap_Iteme);heap_Itemb.replaceChild("e", heap_Itemk);heap_Itemb.replaceChild("d", heap_Itemk);heap_Itemb.itIsLeftSon(heap_Itemk);heap_Iteme.setLeftSon(heap_Itemp);heap_Itemq.setLeftSon(heap_Itemq);heap_Iteme.removeLeftSon();heap_Iteme.removeRightSon();heap_Itemb.removeChild("k");heap_Itemb.removeChild("k");heap_Itemb.removeChild("a");Heap_Item <String> heap_Itema1= heap_Itema.getLeftSon();assertSame(heap_Itema1,heap_Itemb);heap_Itemb.setAncestor(heap_Itema);Heap_Item <String> heap_Itemn= heap_Itemb.getAncestor();assertSame(heap_Itema,heap_Itemb.getAncestor());assertEquals(heap_Itema,heap_Itemn);//设置节点c的祖先为aheap_Itemc.setAncestor(heap_Itema);//节点a无祖先,于是返回nullHeap_Item <String> heap_Itemanull=heap_Itema.getMultiWayAncestor();assertNull(heap_Itemanull);//节点b有祖先a,同时又是它的左孩子,于是返回他的祖先aHeap_Item <String> heap_Itembnull=heap_Itemb.getMultiWayAncestor();assertNotNull(heap_Itembnull);assertSame(heap_Itema,heap_Itembnull);//先给a设置右祖先Heap_Item <String> heap_Items1 = new Heap_Item<String>("s1");heap_Itema.setAncestor(heap_Items1);heap_Items1.setLeftSon(heap_Itema);//检查a的祖先是否为s1assertSame(heap_Items1,heap_Itema.getAncestor());//检查c的祖先是否为aassertSame(heap_Itema,heap_Itemc.getAncestor());//给s1复制左孩子为s2Heap_Item <String> heap_Items2 = new Heap_Item<String>("s2");heap_Items2.setAncestor(heap_Items1);heap_Items1.setRightSon(heap_Items2);//节点c有祖先a,但是a的右孩子,于是返回a的最近的以a作为左子孙的祖先,即s1Heap_Item <String> heap_Itemcnull=heap_Itemc.getMultiWayAncestor();assertSame(heap_Itemcnull,heap_Items1);}@Testpublic void testpair() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException{Class<Pairing_Heap> c = Pairing_Heap.class;Heap_Item<String> a1=new Heap_Item<>("a1");Heap_Item<String> a2=new Heap_Item<>("a2");Heap_Item<String> b1=new Heap_Item<>("b1");a1.setLeftSon(b1);b1.setAncestor(a1);Pairing_Heap<String> p1=new Pairing_Heap<>(a1);Pairing_Heap<String> p2=new Pairing_Heap<>(a2);Method pair = c.getDeclaredMethod("pair", Pairing_Heap.class, Pairing_Heap.class);pair.setAccessible(true);//情况3Pairing_Heap<String> k=new Pairing_Heap<>();Object invoke = pair.invoke(k, p1, p2);//情况1Pairing_Heap<String> null1=new Pairing_Heap<>();Object invoke1= pair.invoke(k, null1,p2);//情况2pair.invoke(k, p1,null1);//情况4Heap_Item<String> d1=new Heap_Item<>("d1");Heap_Item<String> d2=new Heap_Item<>("d2");Pairing_Heap<String> pd1=new Pairing_Heap<>(d1);Pairing_Heap<String> pd2=new Pairing_Heap<>(d2);pair.invoke(k, pd1,pd2);//情况5Heap_Item<String> e1=new Heap_Item<>("e1");Heap_Item<String> e2=new Heap_Item<>("e2");Heap_Item<String> be1=new Heap_Item<>("be1");e1.setLeftSon(be1);be1.setAncestor(e1);Pairing_Heap<String> pe1=new Pairing_Heap<>(e2);Pairing_Heap<String> pe2=new Pairing_Heap<>(e1);pair.invoke(k, pe1,pe2);//情况6Heap_Item<String> f1=new Heap_Item<>("e1");Heap_Item<String> f2=new Heap_Item<>("e2");Pairing_Heap<String> pf1=new Pairing_Heap<>(f2);Pairing_Heap<String> pf2=new Pairing_Heap<>(f1);pair.invoke(k, pf1,pf2);}@Testpublic void testpop_heap_item() throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {Class<Pairing_Heap> fun = Pairing_Heap.class;//情况1Pairing_Heap<String> null1=new Pairing_Heap<>();Method pair =fun.getDeclaredMethod("pop_heap_item");pair.setAccessible(true);pair.invoke(null1);//情况2Heap_Item<String> b=new Heap_Item<>("b");Pairing_Heap<String> pb=new Pairing_Heap<>(b);pair.invoke(pb);//情况3Heap_Item<String> c=new Heap_Item<>("c");Heap_Item<String> cb=new Heap_Item<>("cb");c.setLeftSon(cb);cb.setAncestor(c);Pairing_Heap<String> pc=new Pairing_Heap<>(c);pair.invoke(pc);//情况四Heap_Item<String> d=new Heap_Item<>("d");Heap_Item<String> db=new Heap_Item<>("db");Heap_Item<String> dbc=new Heap_Item<>("dbc");Heap_Item<String> dbc0=new Heap_Item<>("dbc0");d.setLeftSon(db);db.setAncestor(d);db.setRightSon(dbc);db.setLeftSon(dbc0);dbc0.setAncestor(db);dbc.setAncestor(dbc);Pairing_Heap<String> pd=new Pairing_Heap<>(d);pair.invoke(pd);}@Testpublic void testpush() {//根为空的情况Pairing_Heap<String> null1=new Pairing_Heap<>();Heap_Item<String> d=new Heap_Item<>("d");null1.push(d);//根不为空的情况Heap_Item<String> c=new Heap_Item<>("c");Pairing_Heap<String> pc=new Pairing_Heap<>(c);Heap_Item k=pc.push(d);}@Testpublic void testcheckPriority1_2() {//情况1,2Heap_Item<String> a=new Heap_Item<>("a");Heap_Item<String> b=new Heap_Item<>("b");Heap_Item<String> c=new Heap_Item<>("c");Heap_Item<String> k=new Heap_Item<>("k");Pairing_Heap<String> p=new Pairing_Heap<>();c.setLeftSon(a);a.setAncestor(c);a.setRightSon(b);b.setAncestor(a);b.setRightSon(k);k.setAncestor(b);p.checkPriority(b);}@Testpublic void testcheckPriority3() {//情况3Heap_Item<String> k=new Heap_Item<>("k");Heap_Item<String> b1=new Heap_Item<>("b1");Heap_Item<String> b2=new Heap_Item<>("b2");Pairing_Heap<String> p=new Pairing_Heap<>();k.setLeftSon(b1);k.setRightSon(b2);b1.setAncestor(k);b2.setAncestor(k);p.checkPriority(k);}@Testpublic void testcheckPriority4() {//情况4Heap_Item<String> a=new Heap_Item<>("a");Heap_Item<String> k=new Heap_Item<>("k");Heap_Item<String> b1=new Heap_Item<>("b1");Heap_Item<String> b2=new Heap_Item<>("b2");Pairing_Heap<String> p=new Pairing_Heap<>();a.setLeftSon(k);k.setAncestor(a);k.setLeftSon(b1);k.setRightSon(b2);b1.setAncestor(k);b2.setAncestor(k);p.checkPriority(k);}@Testpublic void testcheckPriority5() {//情况5Heap_Item<String> k=new Heap_Item<>("k");Heap_Item<String> z=new Heap_Item<>("z");k.setLeftSon(z);z.setAncestor(k);Pairing_Heap<String> p=new Pairing_Heap<>();p.checkPriority(k);}@Testpublic void testcheckPriority6() {//情况6Heap_Item<String> k=new Heap_Item<>("k");Heap_Item<String> z=new Heap_Item<>("z");z.setLeftSon(k);k.setAncestor(z);Pairing_Heap<String> p=new Pairing_Heap<>();p.checkPriority(k);}@Testpublic void testcheckPriority7() {//情况7Heap_Item<String> k=new Heap_Item<>("k");Heap_Item<String> z=new Heap_Item<>("z");k.setLeftSon(z);z.setAncestor(k);Pairing_Heap<String> p=new Pairing_Heap<>();p.checkPriority(z);}@Testpublic void testcheckPriority8() {//情况8Heap_Item<String> a=new Heap_Item<>("a");Heap_Item<String> z=new Heap_Item<>("z");Heap_Item<String> b=new Heap_Item<>("b");a.setLeftSon(z);z.setAncestor(a);z.setLeftSon(b);b.setAncestor(z);Pairing_Heap<String> p=new Pairing_Heap<>();p.checkPriority(z);}@Testpublic void testcheckPriority9() {//情况9Heap_Item<String> a=new Heap_Item<>("a");Heap_Item<String> b=new Heap_Item<>("b");Heap_Item<String> c=new Heap_Item<>("c");Heap_Item<String> d=new Heap_Item<>("d");a.setLeftSon(b);b.setAncestor(a);b.setLeftSon(c);c.setAncestor(b);c.setRightSon(d);d.setAncestor(c);Pairing_Heap<String> p=new Pairing_Heap<>();p.checkPriority(b);}@Testpublic void testgetData() {Heap_Item<String> null2=new Heap_Item<>();null2.getData();}@Testpublic void testgetSonByData() {Heap_Item<String> k=new Heap_Item<>("k");Heap_Item<String> z=new Heap_Item<>("z");Heap_Item<String> z2=new Heap_Item<>("z2");Heap_Item<String> z1=new Heap_Item<>("z1");k.setLeftSon(z);k.setRightSon(z2);z2.setAncestor(k);z.setAncestor(k);k.removeChild("z1");}@Testpublic void testgetSonByData1() {Heap_Item<String> k=new Heap_Item<>("k");k.getSonByData(null);Heap_Item<String> z2=new Heap_Item<>("z2");k.setRightSon(z2);z2.setAncestor(k);k.getSonByData("z2");}@Testpublic void testreplaceChild1() {Heap_Item<String> k=new Heap_Item<>("k");Heap_Item<String> z2=new Heap_Item<>("z2");k.setRightSon(z2);z2.setAncestor(k);k.replaceChild("z1", z2);}@Testpublic void testgetMultiWayAncestor2() {Heap_Item<String> k=new Heap_Item<>("k");Heap_Item<String> c=new Heap_Item<>("c");Heap_Item<String> a=new Heap_Item<>("a");Heap_Item<String> b=new Heap_Item<>("b");c.setLeftSon(k);k.setAncestor(c);k.setRightSon(a);a.setAncestor(k);a.setRightSon(b);b.setAncestor(a);b.getMultiWayAncestor();}@Testpublic void testpop() {Heap_Item<String> k=new Heap_Item<>("k");Heap_Item<String> z=new Heap_Item<>("z");k.setLeftSon(z);z.setAncestor(k);Pairing_Heap<String> p=new Pairing_Heap<>();Pairing_Heap<String> p1=new Pairing_Heap<>(k);p.pop();p1.pop();}
}
相关文章:
2023全国大学生软件测试大赛开发者测试练习题满分答案(PairingHeap2023)
2023全国大学生软件测试大赛开发者测试练习题满分答案(PairingHeap2023) 题目详情题解代码(直接全部复制到test类中即可) 提示:该题只需要分支覆盖得分即可,不需要变异得分 题目详情 题解代码(…...
介绍一下tokens
“Tokens” 是一个计算机科学和自然语言处理领域常用的术语,通常用于表示文本中的最小单位。在这个上下文中,我将解释一下 “tokens” 的含义以及它们在不同领域中的用途: 自然语言处理 (NLP): 在自然语言处理中,“token” 是指文…...
机器学习、深度学习相关的项目集合【自行选择即可】
【基于YOLOv5的瓷砖瑕疵检测系统】 YOLOv5是一种目标检测算法,它是YOLO(You Only Look Once)系列模型的进化版本。YOLOv5是由Ultralytics开发的,基于一阶段目标检测的概念。其目标是在保持高准确率的同时提高目标检测的速度和效率…...
百面机器学习书刊纠错
百面机器学习书刊纠错 P243 LSTM内部结构图 2023-10-7 输入门的输出 和 candidate的输出 进行按元素乘积之后 要和 遗忘门*上一层的cell state之积进行相加。...
vue2安装cesium并使用
一、安装 1.安装cesium npm install cesium1.95.0 -S 2.安装所需 npm install copy-webpack-plugin10.2.4 -D 二、配置 1.配置vue.config.js vue 中引入cesium 需要用copy-webpack-plugin 把一些文件拷贝到打包目录 // vue.config.js const CopyWebpackPlugin require…...
基于Docker来部署Nacos的注册中心
基于Docker来部署Nacos的注册中心 准备MySQL数据库表nacos.sql,用来存储Nacos的数据。 最终表结构如下: 在本地nacos/custom.env文件中,有一个MYSQL_SERVICE_HOST也就是mysql地址,需要修改为你自己的虚拟机IP地址: …...
黑马JVM总结(三十一)
(1)类加载器-概述 启动类加载器-扩展类类加载器-应用程序类加载器 双亲委派模式: 类加载器,加载类的顺序是先依次请问父级有没有加载,没有加载自己才加载,扩展类加载器在getParent的时候为null 以为Boots…...
【C++】list基本接口+手撕 list(详解迭代器)
父母就像迭代器,封装了他们的脆弱...... 手撕list目录: 一、list的常用接口及其使用 1.1list 构造函数与增删查改 1.2list 特殊接口 1.3list 排序性能分析 二、list 迭代器实现(重点难点) 关于迭代器的引入知识:…...
PowerShell pnpm : 无法加载文件 C:\Users\lenovo\AppData\Roaming\npm\pnpm.ps1
1、右键点击【开始】,打开Windows PowerShell(管理员) 2、运行命令set-ExecutionPolicy RemoteSigned 3、根据提示,输入A,回车 此时管理员权限已经可以运行pnpm 如果vsCode还报该错误 继续输入 4、右键点击【开始】,打…...
mysql面试题33:Blob和text有什么区别
该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Blob和text有什么区别 Blob和text是数据库中存储大文本数据的两种数据类型&#…...
docker版jxTMS使用指南:4.6版升级内容
4.6版jxTMS已经发布,升级了多个重大能力,本系列文章将逐一进行讲解。 docker版本的使用,请查看:docker版jxTMS使用指南 4.0版jxTMS的说明,请查看:4.0版升级内容 4.2版jxTMS的说明,请查看&…...
java最优建树算法
建树算法 树的数据结构 {"code": "1111","name": "","parentcode": "0000","children": null }, {"code": "2222","name": "","parentcode": &q…...
mysql面试题30:什么是数据库连接池、应用程序和数据库建立连接的过程、为什么需要数据库连接池、你知道哪些数据库连接池
该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:什么是数据库连接池? 数据库连接池是一种用于管理和复用数据库连接的技术。它是在应用程序和数据库之间建立一组数据库连接,并以池的形式存储起…...
【Vue】vscode格式刷插件Prettier以及配置项~~保姆级教程
文章目录 前言一、下载插件二、在项目内创建配置文件1.在根目录创建,src同级2.写入配置3.每个字段含义 总结 前言 vscode格式刷,有太多插件了,但是每个的使用,换行都不一样。 这里我推荐一个很多人都推荐了的Prettier 一、下载插…...
.NET 8 中的调试增强功能
作者:James Newton-King 排版:Alan Wang 开发人员喜欢 .NET 强大且用户友好的调试体验。您可以在您选择的 IDE 中设置断点,启动已经附加上调试器的程序,逐步执行代码并查看 .NET 应用程序的状态。 在 .NET 8 中,我们致…...
1310. 数三角形
知识点:(a, b)与(c, d)两点连线上点的个数为:gcd(x, y) 1(包括端点) (设横坐标差的绝对值为x, 纵坐标差的绝对值为y ) 思路:先算出选三个点的所有情况,再减去三点共线的情况 共线的斜率为0时特判 当共线…...
数据库基础(一)
数据库面试基础 注,本文章内容主要来自于JAVAGUIDE,只是结合网上资料和自己的知识缺陷进行一点补充,需要准备面试的请访问官方网址。 一、范式 参考链接 函数依赖:一张表中,确定X则必定能确定Y,则X->…...
Factory-Method
Factory-Method 动机 在软件系统中,经常面临着创建对象的工作;由于需求的变化,需要创建的对象的具体类型经常变化。如何应对这种变化?如何绕过常规的对象创建方法(new),提供一种“封装机制”来避免客户程序和这种“具…...
【C++】神奇字符串(力扣481)
神奇字符串的规律: 神奇字符串 s 仅由 ‘1’ 和 ‘2’ 组成,并需要遵守下面的规则: 神奇字符串 s 的神奇之处在于,串联字符串中 1 和 2 的连续出现次数可以生成该字符串。 s 的前几个元素是 s “1221121221221121122……” 。如果…...
elasticsearch索引的数据类型以及别名的使用
在上篇文章写了关于elasticsearch索引的数据类型,这里就详细说下索引的增删改查以及其他的一些操作吧。 1、索引的增、删、改、查 先新建一个索引结构,代码如下 PUT test-3-2-1 {"mappings": {"properties": {"id": {&…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
