当前位置: 首页 > news >正文

用户只需要知道「怎么办」,不需要知道「为什么炸了」

大家好,我是晓凡。

写在前面

一到月初或者月末(某些业务操作大规模爆发的时候),手机狂震,生产告警狂轰滥炸:xxx接口超时、用户中心 CPU 飙到 98%……

运维在群里疯狂 @ 你,你却只能回一句“我本地是好的”。

别问,问就是接口设计欠下的技术债。

下面,晓凡总结成 18 条可落地的接口设计“军规”。每条都配上“作死写法”与“保命写法”。


军规 1:路径必须永久不变

反面教材

@RestController
@RequestMapping("/getUserInfoByIdV2.3_beta")
public class UserController { ... }

产品说“V2.3_beta”只是临时版本,结果半年后,死活不敢下线。

正面写法

@RestController
@RequestMapping("/users")
public class UserController {@GetMapping("/{uid}")public UserDTO get(@PathVariable Long uid) { ... }
}

版本号放到 Header:Accept: application/vnd.myapp.v2+json
路由一旦上线,就是“墓碑”,永远不许动,哪怕老板喊重构。


军规 2:命名只准用名词,禁止动词

反面教材

@PostMapping("/createOrder")
@PostMapping("/addOrder")
@PostMapping("/insertOrder")

同一个业务三个入口,新人入职三天就开始迷路。

正面写法

@PostMapping("/orders")
public OrderDTO create(@RequestBody CreateOrderCommand cmd) { ... }

HTTP 动词已经表达“创建”语义,别再动词叠 buff。


军规 3:统一用复数

反面教材

@GetMapping("/order/{id}")
@GetMapping("/orders")

单复数混用,前端拼接 URL 得写 if/else,特别容易出错。

正面写法

@GetMapping("/orders/{id}")
@GetMapping("/orders")

集合与成员保持一致,前端直接模板字符串 ${host}/orders/${id},代码干净又整洁。


军规 4:分页参数必须“三件套”

反面教材

@GetMapping("/orders")
public List<Order> list(@RequestParam int offset,@RequestParam int limit) { ... }

参数名随心所欲,前端封装 不知道骂了你多少次。

正面写法

@GetMapping("/orders")
public PageResult<OrderDTO> list(@RequestParam(defaultValue = "1") @Min(1) int page,@RequestParam(defaultValue = "20") @Min(1) @Max(100) int perPage) {long total = orderMapper.count();List<OrderDTO> data = orderMapper.selectPage((page - 1) * perPage, perPage);return PageResult.<OrderDTO>builder().data(data).totalCount(total).hasNext(page * perPage < total).build();
}

返回统一包装:

@Data
@Builder
public class PageResult<T> {private List<T> data;private long totalCount;private boolean hasNext;
}

军规 5:字段命名一律小写加下划线

反面教材

{"userName":"Jack","userAge":18}

前端 axios 自动把下划线转小驼峰,结果文档对不上,联调 2 小时。

正面写法

@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
public class UserDTO {private String userName;private Integer userAge;
}

返回即:

{"user_name":"Jack","user_age":18}

前后端一人一把尺子,永远对得上。


军规 6:枚举值禁止用魔法数字

反面教材

if (order.getStatus() == 3) { ... }   // 3 代表啥?鬼知道

DB 改个值,线上直接 500。

正面写法

public enum OrderStatus {CREATED(10),PAID(20),SHIPPED(30),DONE(40);private final int code;OrderStatus(int code) { this.code = code; }public int getCode() { return code; }
}

实体与数据库均存 code:

@Converter(autoApply = true)
public class OrderStatusConverter implements AttributeConverter<OrderStatus, Integer> {public Integer convertToDatabaseColumn(OrderStatus s) { return s.getCode(); }public OrderStatus convertToEntityAttribute(Integer c) {return Arrays.stream(OrderStatus.values()).filter(e -> e.getCode() == c).findFirst().orElseThrow(() -> new IllegalArgumentException("unknown code " + c));}
}

代码里只有枚举,没有魔法数字。


军规 7:接收参数必须 DTO,禁止 Map

反面教材

@PostMapping("/orders")
public OrderDTO create(@RequestBody Map<String,Object> map) {Integer skuId = (Integer) map.get("skuId");  // 强转爆炸
}

Map 一把梭,编译期 0 提示,运行时 ClassCastException 随机出现。

正面写法

@PostMapping("/orders")
public OrderDTO create(@RequestBody @Valid CreateOrderCommand cmd) { ... }@Data
public class CreateOrderCommand {@NotNullprivate Long skuId;@NotNull @Min(1)private Integer quantity;
}

校验失败自动 400,错误信息一目了然:

{"field":"quantity","message":"must be greater than or equal to 1"}

军规 8:统一返回包装,禁止裸奔

反面教材

@GetMapping("/orders/{id}")
public OrderDTO get(@PathVariable Long id) { ... }

成功返回对象,失败返回字符串,前端得写三行 if 判断类型。

正面写法

@RestControllerAdvice
public class CommonResponseAdvice implements ResponseBodyAdvice<Object> {public boolean supports(MethodParameter returnType, Class converterType) { return true; }public Object beforeBodyWrite(Object body, MethodParameter returnType,MediaType selectedContentType, Class selectedConverterType,ServerHttpRequest request, ServerHttpResponse response) {if (body instanceof CommonResult) return body;   // 避免二次包装return CommonResult.success(body);}
}public class CommonResult<T> {private int code;private String msg;private T data;public static <T> CommonResult<T> success(T data) {return new CommonResult<>(0, "ok", data);}
}

前端唯一判断 code === 0,其余按错误弹窗。


军规 9:错误码必须分段

反面教材

new RuntimeException("订单不存在");

日志里只有一行文字,定位靠天意。

正面写法

@Getter
@AllArgsConstructor
public enum ErrorEnum {ORDER_NOT_FOUND(20001, "订单不存在"),SKU_NOT_AVAILABLE(20002, "商品库存不足");private final int code;private final String message;
}

全局异常处理:

@RestControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(BizException.class)public CommonResult<Void> handle(BizException ex) {return CommonResult.fail(ex.getErrorEnum().getCode(),ex.getErrorEnum().getMessage());}
}

前端按码弹窗,20001 跳转“订单列表”,20002 跳转“商品详情”。


军规 10:接口必须幂等

反面教材

@PostMapping("/orders")
public OrderDTO create(@RequestBody CreateOrderCommand cmd) {return orderService.create(cmd);   // 每次调用都插新订单
}

用户狂点按钮,瞬间 5 单,客服哭晕。

正面写法

@PostMapping("/orders")
public OrderDTO create(@RequestBody @Valid CreateOrderCommand cmd,HttpServletRequest request) {String idempotencyKey = request.getHeader("Idempotency-Key");if (idempotencyKey == null) throw new BizException(ErrorEnum MISSING_KEY);return idempotencyService.execute(idempotencyKey, () -> orderService.create(cmd));
}

Redis 缓存 24h 唯一 KEY,重复请求直接返回第一次结果,0 重复订单。


军规 11:日期格式只准 ISO8601

反面教材

{"createTime":"06/18/2025 09:05:12"}

万一有国外项目,同事一脸懵:这是 6 月还是 18 月?

正面写法

@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ssXXX", timezone = "UTC")
private OffsetDateTime createTime;

返回即:

{"create_time":"2025-06-18T09:05:12+00:00"}

前端 new Date('2025-06-18T09:05:12+00:00') 直接解析,时区 0 歧义。


军规 12:Long 主键后端转 String

反面教材

{"orderId":9223372036854775807}

JS 最大安全整数 2^53-1,订单号精度丢失,用户 A 的订单跑到用户 B。

正面写法

@JsonSerialize(using = ToStringSerializer.class)
private Long orderId;

返回即:

{"order_id":"9223372036854775807"}

前端字符串传,精度不丢失。


军规 13:批量接口必须限制数量

反面教材

@PostMapping("/orders/batch")
public List<OrderDTO> batch(@RequestBody List<Long> ids) { ... }

对方一次丢 10w 个 id,线程池直接拉满。

正面写法

@PostMapping("/orders/batch")
public List<OrderDTO> batch(@RequestBody @Size(max = 100) List<Long> ids) { ... }

超过 100 直接 400,爱用不用。


军规 14:文件上传必须预签名

反面教材

@PostMapping("/upload")
public String upload(MultipartFile file) { ... }

1G 视频直接把带宽打爆,Tomcat OOM

正面写法

@GetMapping("/upload/token")
public UploadTokenDTO token(@RequestParam String suffix) {String key = "private/" + UUID.randomUUID() + suffix;String uploadUrl = ossClient.generatePresignedUrl(key,  ExpirationEnum.TEN_MINUTES);return new UploadTokenDTO(uploadUrl, key);
}

前端拿到直传 OSS,服务端只存 key,流量 0 占用。


军规15:禁止把「内部错误码」直接抛给前端

反面教材

catch (Exception e) {log.error("RPC失败", e);return CommonResult.fail(999, e.getMessage());   // 999 是什么?只有我自己懂
}

结果:
前端拿到 {code:999, msg:"Read timed out executing POST http://stock-service/lock"},直接把超时堆栈展示给用户,页面弹出「Read timed out…」——用户一脸懵,黑客倒开心,内网地址全暴露。

正面写法

1.对外错误码只保留「用户可理解」枚举,统一收敛:

@AllArgsConstructor
public enum FrontEndErrorEnum {STOCK_UNAVAILABLE(5100, "商品库存不足"),SYSTEM_BUSY(5101, "系统繁忙,请稍后重试"),UNKNOWN_ERROR(5999, "网络走神了,稍后再试");final int code;final String message;
}

2.全局异常层做「内外翻译」——任何底层异常都不准穿透:

@RestControllerAdvice
public class ErrorTranslator {@ExceptionHandler(Exception.class)public CommonResult<Void> handle(Exception ex) {log.error("Fetal error", ex);          // 详细堆栈只写日志if (ex instanceof FeignException) {    // 下游超时return CommonResult.fail(FrontEndErrorEnum.SYSTEM_BUSY);}return CommonResult.fail(FrontEndErrorEnum.UNKNOWN_ERROR);}
}

3.前端拿到的是:

{"code":5100,"msg":"商品库存不足"}

既安全又友好,还方便做国际化——以后想换提示语,只改枚举即可

用户只需要知道「怎么办」,不需要知道「为什么炸了」。把堆栈留在日志,把尊严留给产品。


军规 16:对外暴露 Swagger,对内必须加注解

反面教材

@RestController
public class OrderController {@PostMapping("/orders")public OrderDTO create(CreateOrderCommand cmd) { ... }
}

文档靠口口相传,字段一旦改名,测试小姐姐提刀来找。

正面写法

@Tag(name = "订单模块")
@RestController
public class OrderController {@Operation(summary = "创建订单")@ApiResponse(responseCode = "200", description = "成功")@PostMapping("/orders")public OrderDTO create(@RequestBody @Valid CreateOrderCommand cmd) { ... }
}

启动后 http://localhost:8080/swagger-ui.html 实时可见,改字段即报错,0 沟通成本。


军规 17:关键接口必须打印入参出参

反面教材

@PostMapping("/orders")
public OrderDTO create(@RequestBody CreateOrderCommand cmd) {return orderService.create(cmd);
}

线上出错,日志只有一行“NullPointerException”,想复现?随缘。

正面写法

@PostMapping("/orders")
public OrderDTO create(@RequestBody CreateOrderCommand cmd) {log.info("create order req: {}", cmd);OrderDTO dto = orderService.create(cmd);log.info("create order rsp: {}", dto);return dto;
}

配合 Logback 异步 + 脱敏:

<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender"><queueSize>2048</queueSize><appender-ref ref="FILE"/>
</appender>

性能损耗 < 5%,问题排查速度大大提升。


军规 18:发版前必须做向后兼容扫描

反面教材

// V1
public class UserDTO { private String name; }// V2 直接把 name 改成 username
public class UserDTO { private String username; }

旧应用直接解析失败,用户体验非常不好

正面写法

  1. 加新字段,不动旧字段:
public class UserDTO {private String name;        //  deprecatedprivate String username;    //  新字段
}
  1. 使用 @Deprecated 注解,Swagger 自动标灰。
  2. 配套单元测试:
@Test
void v1ClientShouldStillSeeNameField() throws Exception {mockMvc.perform(get("/users/1").header("Accept", "application/vnd.myapp.v1+json")).andExpect(jsonPath("$.name").exists()).andExpect(jsonPath("$.username").doesNotExist());
}
  1. 上线后观察 7 日,旧字段无调用再下线。

小结

接口设计不是炫技,而是写“半年后看了自己之前写的代码,还敢重构的代码勇气”。

这 18 条军规,一半来自我的踩坑,一半来自“别人踩过的坑”。
别嫌啰嗦,真正上线 0 告警的那天,你会来感谢我。

愿下次手机响起,只是外卖到了,不是 502。

我是晓凡,再小的帆也能远航

我们下期再见ヾ(•ω•`)o (●'◡'●)

相关文章:

用户只需要知道「怎么办」,不需要知道「为什么炸了」

大家好,我是晓凡。 写在前面 一到月初或者月末(某些业务操作大规模爆发的时候),手机狂震,生产告警狂轰滥炸:xxx接口超时、用户中心 CPU 飙到 98%…… 运维在群里疯狂 @ 你,你却只能回一句“我本地是好的”。 别问,问就是接口设计欠下的技术债。 下面,晓凡总结成 18 条…...

2025数学院士增选背后的争议:海外光环与本土贡献的考量

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 3546955410049087自从2025年中国科学院数学物理学部院士增选有效候选人名单公布以来,学术圈内外的讨论持续升温。一股不同寻常的舆论浪潮在网络…...

完整教程:建筑物裂缝、钢筋裸漏、建筑物墙面脱落图像数据集

完整教程:建筑物裂缝、钢筋裸漏、建筑物墙面脱落图像数据集pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New",…...

深入剖析布谷网剧短剧app系统软件源码之技术

随着短视频和网剧市场的迅猛发展,企业和内容创作者对专业、高效的短剧平台需求日益增长。山东布谷鸟网络科技有限公司凭借丰富的软件开发经验,推出了布谷短剧app源码、网剧系统源码及短剧软件搭建服务,致力于为客户打造一站式数字内容解决方案。 一、布谷短剧app源码简介 布…...

在AI技术快速实现功能的时代,挖掘电子书阅读器新需求成为关键突破点

随着AI技术让功能实现变得前所未有的简单,真正的挑战转向了如何发现和满足用户未被满足的需求。本文通过分析某知名跨平台电子书阅读器的用户反馈,揭示了阅读体验优化、格式兼容性、安全增强等关键需求领域。内容描述 该项目是一个极简主义的跨平台电子书阅读器,基于Tauri框…...

PHP 如何利用 Opcache 来实现保护源码

PHP 如何利用 Opcache 来实现保护源码感兴趣得可以试试看!!!要求不用 IonCube(或类似的)。不知道这是啥的话,就是加密 PHP 代码但还能运行的工具。问题是太贵了。😅 性能要好,PHP 原生支持。原文链接 PHP 如何利用 Opcache 来实现保护源码 后来想到,PHP 有个"op…...

给RAG打分:小白也能懂的AI系统评测全攻略

RAG系统评估听起来高深,其实跟我们生活中的尝鲜评测没啥两样!本文用轻松幽默的方式,带你从检索质量、生成质量到用户体验,全方位掌握如何科学评测RAG系统,避免踩坑,让你的AI应用又快又准。#RAG技术 #AI评估 #信息检索 #大模型 #数据科学你是不是经常被这些问题困扰: &qu…...

P8114 [Cnoi2021] 六边形战士

传送 非常好玩的题! 首先你大概率看过一些“无字证明”,其中很经典的是这个: 证明:用若干个边长为 \(1\),顶角为 \(60\) 度的菱形拼成一个边长为 \(n\) 的正六边形,三个方向的菱形个数一定相等。这是一个经典的无字证明,虽然前置的说明要费很大功夫,不过你不关心这个。…...

【GitHub每日速递 250918】开发者必藏!336k 星标项目告诉你:前端 / 后端 / AI 岗该怎么学才高效

原文:https://mp.weixin.qq.com/s/Oo5T6g68BNe9QUTL4bHrIg AI外语学习神器Enjoy上线!网页版、桌面版全攻略来袭 everyone-can-use-english 是一个帮助用户学习和使用英语的工具类应用。简单讲,它通过技术手段降低英语使用门槛,让每个人都能轻松练习和掌握英语。适用人群:英…...

css-4

定位布局...

【操作系统】从实模式到保护模式,

实模式...

Flutter CSV导入导出:大数据处理与用户体验优化

Flutter CSV导入导出:大数据处理与用户体验优化本文基于BeeCount(蜜蜂记账)项目的实际开发经验,深入探讨如何在Flutter应用中实现高效、用户友好的CSV数据导入导出功能。项目背景 BeeCount(蜜蜂记账)是一款开源、简洁、无广告的个人记账应用。所有财务数据完全由用户掌控,支…...

读人形机器人15未来城市

读人形机器人15未来城市1. 将机器人技术融入城市规划 1.1. 新一轮工业革命的曙光要求我们重新审视城市的设计与功能 1.2. 将机器人技术融入城市规划已不再是未来主义的概念,而是一种现实需要 1.3. 将机器人技术融入城市规划,能够将城市转变为充满活力的智能生态系统1.3.1. 通…...

解锁智能检索新境界:CriticGPT 赋能检索模型洞察人类偏好

随着大型语言模型技术的快速发展,检索增强生成 (RAG) 系统已成为连接海量知识与精准回答的关键桥梁。然而,传统 RAG 模型在理解和满足用户真实需求方面仍存在明显局限。2024 年 6 月 OpenAI 发布的 CriticGPT 技术,为突破这一瓶颈提供了全新思路。本文将深入剖析 Reward-RAG…...

NET 中 Async/Await 的演进:从状态机到运行时优化的 Continuation

NET 中 Async/Await 的演进:从状态机到运行时优化的 Continuation C# 的 `async/await` 长期以来是编写简洁、非阻塞代码的基石,但其传统实现——每个异步方法生成一个独立状态机——在高性能场景(如递归或链式异步调用)中暴露出显著局限性。2025 年的 .NET 9 和 .NET 10 …...

最长公共子序列

题目描述 给你一个序列X和另一个序列Z,当Z中的所有元素都在X中存在,并且在X中的下标顺序是严格递增的,那么就把Z叫做X的子序列。 例如:Z=是序列X=的一个子序列,Z中的元素在X中的下标序列为<1,2,4,6>。 现给你两个序列X和Y,请问它们的最长公共子序列的长度是多少? …...

使用 Ansible 管理服务器集群

Inventory Ansible 使用 /etc/ansible/hosts 管理受控服务器列表: --- ungrouped:hosts:node-1:ansible_host: 192.168.1.1ansible_user: johnnode-2:ansible_host: 192.168.1.2ansible_user: janenode-3:ansible_host: 192.168.1.3ansible_user: frank关于 inventory 文件的字…...

1现在处于非常破防的阶段,不知道为什么会打成这个样子。 ABC 过得很快。看到 D1 的第一眼就会了,发现转移只需要随便优化一下就能通过 D2,不太想写。E 看上去挺可做,F 看上去是板子题。于是开始写 F,不知道这种代码不长、没有任何思维难度的题怎么能写那么长时间,根本原因…...

Codeforces Round 1051 (Div. 2)

A. All Lengths Subtraction 题意:一个排列,对于每个\(k \in [1, n]\),你都要选择一个长度为\(k\)的子数组使得它们都减一,求有没有方案使得最终所有数都是\(0\)。 考虑\(k\)从大到小,发现做\(n\)的时候\(1\)变成\(0\),此时如果\(1\)不在两端,则\(k = n - 1\)时必然再把…...

再不学就晚了!RDT LeRobot与RDKS100部署详解

作者:SkyXZ CSDN:SkyXZ~-CSDN博客 博客园:SkyXZ - 博客园 机械臂:LeRobot-SO101 数采机:MacBook-Pro Python3.10 开发机:Ubuntu 22.04, Cuda12.4,8 NVIDIA A100-SXM4-40GB 开发板:RDK OS 4.0.2 Based on Ubuntu 22.04, Python 3.10.12, OpenExplore 3.2.0 相…...

编译Unity4.3.1f1

参考: 编译 Unity 4.3.1 引擎_unity-source-4.3.1f1-CSDN博客 Unity 4.3.1f1编译调试 - 知乎 Unity source 4.3.1f1 源代码分析-腾讯游戏学堂 附: 早期版本下载(4.x之前的版本)...

【R课堂-电机专栏】为什么提高电机的电压时,转速会随之上升?

本文探讨的问题是 “为什么提高电机的电压时,转速会随之上升?”具体而言,就是当给电机绕组施加的电压升高(增大)时,为什么其转速会随之上升。这一现象看似理所当然,但其背后的原理却涉及诸多物理公式。这个问题对于深入了解电机原理非常关键,下面将为大家详细阐述。●问…...

抽象 CF

一道题在 CF 上有三倍经验,我有个细节假了: \(n \le 10^5\),84 个点的那道在 #64 寄了。 \(n \le 2 \times 10^5\),88 个点的那道在 #88 寄了。 \(n \le 5 \times 10^5\),111 个点的那道直接 A 了。...

单元测试之Mockito使用

测试中为什么需要Mock 在实际的测试中,被测试的对象并不都是可以通过简单的new操作符就可以创建出来的! 实际的业务代码中,一个业务类往往要依赖很多其他的类才能完成一个完整的业务方法,这些依赖包括第三方的rpc,db的查询等等,具体的拓扑如下图我们想测试ClassA,但是Cl…...

Jetson有Jtop,Linux有Htop,RDK也有Dtop!

作者:SkyXZ CSDN:SkyXZ~-CSDN博客 博客园:SkyXZ - 博客园 本项目基于btop开源项目进行二次开发,旨在为RDK平台提供更强大的系统监控工具。 Linux系统下有Htop可以作为系统监控,英伟达的Jetson也有第三方的Jtop,咱们RDK虽然也提供了hrut_somstatus来查看BPU的使用…...

《原子习惯》-读书笔记4

2025.09.17 Day4 1、 养成习惯的过程可以分为四个简单的步骤:提示、渴求、反应和奖励。2、你的头脑在不断分析你的内外部环境,寻找奖励所在的线索。因为线索是我们已然接近奖励的第一个迹象,它自然会导致人们滋生渴求。3、提示的作用是让你注意到奖励的存在。渴求是想要得到…...

Java学习第二天

数据类型 Java、c++是一种强类型语言要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用,安全性高,速度较慢 弱类型语言:安全性低,速度较快 Java数据类型分为两大类:基本类型、引用类型位:计算机内部数据存储的最小单位,11001100是一个八位二进制数 字节:是…...

Java学习第三天

顺序结构 package Scanner;import java.util.Scanner;public class Demo05 {public static void main(String[] args) {//我们可以输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并非输出执行结果Scanner scanner=new Scanner(System.…...

Java学习第四天

break continue break在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句(break语句也在switch语句中使用) continue语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行…...

搜索百科(1):Lucene —— 打开现代搜索世界的第一扇门

大家好,我是 INFINI Labs 的石阳。 这是《搜索百科》专栏系列文章,每天 5 分钟,带你速览一款搜索相关的技术或产品,同时还会带你探索它们背后的技术原理、发展故事及上手体验等。 搜索技术看似专业,但它早已深度融入我们的日常生活。无论是电商搜索、知识检索,还是 AI 语…...

02020308 .NET Core核心基础组件08-结构化日志和集中日志服务

02020308 .NET Core核心基础组件08-结构化日志和集中日志服务...

zookeeper的配置

问题:1.1号和二号虚拟机可以成功启动三号报错 2025-09-17 17:57:46,219 [myid:] - INFO [main:QuorumPeerConfig@133] - Reading configuration from: /export/server/apache-zookeeper-3.5.6-bin/bin/../conf/zoo.cfg 2025-09-17 17:57:46,228 [myid:] - INFO [main:Quorum…...

02020307 .NET Core核心基础组件07-什么是Logging、NLog

02020307 .NET Core核心基础组件07-什么是Logging、NLog...

算法第一周博客

算法第一周博客任务一,搜索大公司内部编码规范,列出本学期编码需遵守的规范 1.程序块要采用缩进风格编写,缩进的空格数为4个,使得层次分明。 2.控制每行最大长度不超120个字符,超过时换行并适当缩进,并且一行通常一个语句。 3.命名标识符(包括变量,函数,结构体等)时,…...

nid修改dbid/dbname

Table of Contents1. 简述 2. 操作步骤说明 3. 操作命令1. 简述2. 操作步骤说明如果配置了DBconsole,需要删除DBconsole对象。之后完全关闭,再启动到mount状态。 nid 命令支持修改dbid 和 dbname两个值。具体操作见之后示例。 但是在操作之前,需要明确是只需要修改dbid 还是同…...

攻防世界-parallel-comparator-200 - xxx

下载后得到是一个c语言文件,用vs创建一个项目后复制代码发现无法打开<pthread.h>,去网上搜了一下发现windows平台配置有点麻烦 于是就去搜索了一下这个的作用,后面分析代码的时候再提。 先看main函数user_string就是用户需要输入一个长度为20的字符串,然后去看能够触…...

Manim实现脉冲闪烁特效

在数学可视化中,脉冲闪烁特效能像聚光灯一样引导观众注意力,突出关键公式、特殊点或重要结论。 本文将介绍如何一步步通过代码来实现这个特效,并通过参数精准控制视觉效果。 1. 实现原理 脉冲闪烁特效的核心是周期性改变发光体的半径和透明度,模拟能量波动的视觉效果。 这个…...

2025.9.17总结

今天主要内容就是在IDEA里编写代码,后端还是springboot,前端vue3,数据库用hbase。 其他的和之前编写的web项目流程都一样。 就是数据库的使用,和数据库的读写,操作不太一样。 还有hbase,创建表,表结构,读写和常规的mysql不一样。在ai帮助下完成创建表,表结构,读写数据…...

office2024安装包下载安装教程(2025最新整理)office2024专业增强版下载安装教程

在当今数字化办公的时代,一款功能强大且稳定的办公软件是提高工作效率的关键。Office 2024 专业增强版作为微软办公软件家族中的佼佼者,集成了多种实用的办公组件,能够满足各类用户在文档处理、数据管理、演示汇报等多方面的需求。本文将为大家详细介绍 Office 2024 专业增强…...

2025竞赛学习资料

2025竞赛学习资料链接1、竞赛资源链接集 2、CSP-J/S资源链接1 3、C++竞赛综合 4、2025年3月GESP认证C++5级判断题真题详解 5、GESP考试集...

C++ 模板参数推导问题小记(模板类的模板构造函数)

本篇主要是为了记录在编写一个模板类的模板构造函数中遇到的初始化问题,以及针对这个问题展开的相关知识整理,文章就以引发这个问题的代码为标题了。 问题代码 在编写一个代表空间点的模板类 point 时,我打算为它添加一个模板构造函数:代码template<typename T, std::si…...

axios两种写法

// 登录 export const login = (data) => {return request.post(/login, data) }// 权限管理列表 get请求需要写在url上面 export const authAdmin = (params) => {return request.get(/auth/admin, { params }) } ///////////////////////////////////////////////////…...

adobe illustrator中使用画笔工具切割图形

001、测试图形 002、选择画笔工具 3、绘制想要切合的形状,然后同时选中这跟线和图形 004、窗口 + 路径查找器 005、 点击分割 006、 点击取消编组 007、 实现图形分割 。...

2025年了,在 Django 之外,Python Web 框架还能怎么选?

前言 大家好,我是曦远~ 前段时间我写过一篇文章 《Django过时了吗?从ASGI到AI时代的思考》,聊到在 AI 时代下,传统全家桶式框架(比如 Django)该如何面对新趋势。 最近在翻新 DjangoStarter 项目的时候,我顺便做了一些调研,发现 Python Web 生态的变化比我想象得还要快。…...

AtCoder Beginner Contest 423

D - Long Waiting 三个优先队列 #include<bits/stdc++.h> using namespace std; #define endl \n #define yes cout << "YES" << endl #define no cout << "NO" << endl #define pii pair<int,int> #define ll long l…...

SRAM和DRAM的特点和区别

SRAM 静态随机存取存储器 基本结构和工作原理:核心单元:SRAM每个cell 由6 个晶体管 组成,形成一个双稳态触发器电路。 工作原理:这种电路结构由两个稳定的状态,分别代表逻辑“0”和逻辑“1”。只要保持通电,状态就会一直保持下去,不需要额外的操作。 读写过程:通过字线…...

xml基本语法

1. xml的基本结构 XML(可扩展标记语言,eXtensible Markup Language)是一种用于存储和传输结构化数据的标记语言,核心特点是自定义标签和严格的语法规则.一个合法的 XML 文档必须包含文档声明和唯一根元素<?xml version="1.0" encoding="UTF-8"?&g…...

Java25新特性

🛠️ 1. 语言特性与开发者体验实例主方法 (Instance Main Methods)​: 支持省略 public static修饰符的 void main()方法,使初学者更易编写第一个Java程序。// 无需显式类声明和public static修饰符 void main() {IO.println("Hello, JDK 25!"); // java.lang.IO …...

Day17多维数组

多维数组可以看成数组的数组,即在数组中在嵌套一个数组 例如二维数组是一个特殊的一维数组,他的每一个元素都是一个一维数组(1,2,3,4,5.......) 格式与一维数组相似:int [] [] a = new int [i] [j]; 举例的二维数组可以看为两行五列的数组 public class ArrayDemo5 {pub…...

C++ lambda 匿名函数

1、基本介绍 C++11 引入的 lambda 匿名函数(Lambda Expression)是一种轻量级的函数对象,可在需要函数的地方直接定义,无需单独声明,极大简化了代码编写(尤其是回调函数、算法谓词等场景)。 基本语法: [capture-list] (parameter-list) mutable noexcept(optional) ->…...