Controller 层编码规范

单细胞分析进阶:sctransform标准化在Seurat中的实战解析 本文深入解析了sctransform标准化方法在Seurat单细胞分析中的实战应用。通过对比传统对数标准化,sctransform能更有效地建模并剔除技术噪音,提升数据质量。文章提供了从环境配置、数据准备、核心参数解析到完整流程整合的详细指南,并针对常见问题给出解决方案,帮助研究者获得更清晰的细胞分群和更可靠的差异表达结果。 阅读详情

点击上方“芋道源码”,选择“设为星标”

管她前浪,还是后浪?

能浪的浪,才是好浪!

每天 10:33 更新文章,每天掉亿点点头发...

源码精品专栏

 

来源:blog.youkuaiyun.com/jiahao1186

7750b6c85051dacc9f6b395b21f2e933.jpeg


1、控制器层

controller 层在 MVC 设计属于控制层设计初衷:设计初衷:请求并响应请求;所以该层轻似接受,涉及业务的。

之前,使用下分开的开发设计模式,推荐使用@RestController注解它@ResponseBody + @Controller的组合。

  1. 如果只是将Controller中的内容解开,@RestController则将Controller中的内容解析器的视图的解法,或者将配置方法重新设置为返回使用HTML格式的方法,或者返回解析器返回常用的方法InternalResourceViewResolver,返回js的内容。

  2. 如果需要返回到指定的页面,则需要用@Controller视图来指定解析器InternalResourceViewResolver才行。mediaType``@ResponseBody

如,使用@Controller注释解,在的方法上,查看解析器可以解析返回的jsp,html页面,跳转到相应页面;若返回json等内容到页面,则需要加@ResponseBody注解

1)设置请求路径

使用注解@PostMapping("/page"),类命名和方法除掉都可以加。

注意按照不同业务划分使用,避免乱写乱用。

2)设置请求方式

常用的POST/GET。使用注解:@RequestMapping  和  @GetMapping @PostMapping。

4.3中的介绍@GetMapping、介绍@PostMapping、提高的方法、@PutMapping来帮助解决快速表达方式的HTTP和地@DeleteMapping``@PatchMapping

该注解HTTP Get方法将映射到特定的处理上

  • @GetMapping是一个注释解,它是一个组合@RequestMapping(method = RequestMethod.GET)的缩写

  • @PostMapping是一个注释解,它是一个组合@RequestMapping(method = RequestMethod.POST)的缩写

3)设置请求参数方式

①提交提交,直接使用vo类或具体参数名接收;

@Controller
public class LoginController {
 
    @RequestMapping(value = "login", method = RequestMethod.POST)
    public String login(UserVO user){
        System.out.println("POJO: " + user.getClass().getName() + 
                ", hash code: " + user.hashCode() + ", " + user.toString());
        return "redirect:/";
    }
 
}

②@RequestParam

@RequestParam(value="", required=true, defaultValue="")

@RequestParam有三个属性:

  • value: 请求参数名(必须配置)

  • required: 必须,默认为true 请求中必须包含该参数,如果包含没有,即抛出异常(可选配置)

  • defaultValue: 默认值,如果设置了该值,必填 将自动设为 false

@ApiOperation(value = "根据id查询") 
@PostMapping("/show")
public Responses show(@RequestParam(value="userId",defaultValue="-1") Long userId) {
    Record data = recordService.getOne(vo.getId());
    return Responses.success(data);
 
}

③n提交,使用注解@RequestBody

@RequestBody`主要接收接收端以POST方式传递给使用`@RequestBody`数据时(JSON字符串中的数据请求体中的数据的);GET方式无请求体,所以接收端不能使用GET方式提交数据,只是可以用同一个POST方式进行提交。可以在同一个接收方法中,`@RequestBody`最多可以有一个,并且有多个。`@RequestParam()``@RequestBody``@RequestParam()

注:一个请求,只有一个RequestBody请求,可以有多个RequestParam。

@ApiOperation(value = "根据id查询") 
 @PostMapping("/get")
 public Responses getOne(@Validated @RequestBody IdVO vo){
     Record data = recordService.getOne(vo.getId());
     return Responses.success(data);
 }

④ath变量

@RestController
@RequestMapping("/")
public class ChineseDrugController {
 @ResponseBody
 @RequestMapping(value = "/{name}")
 public String showName(@PathVariable String name, @PathVariable(value = "name", required = false) String sex) {
  return "Hello " + name + sex;
 }

⑤@PathParam

url:http://127.0.0.1:8080/sexvalue/namevalue?name=唐&sex=男
@RestController
@RequestMapping(value = "/{sex}")
public class ChineseDrugController {
 @ResponseBody
 @RequestMapping(value = "/{name}")
 public String showName(@PathVariable(value = "name") String name, @PathParam(value = "sex") String sex) {
  return "Hello " + name + " " + sex;
 }
}

说明:示例代码的实用性更高,实际开发中使用了各种功能。

4)请求参数

参数参数

  • 使用注意解说@Validated,有特色的自动评测开始了,它是spring-contex中性的注释解说;

  • vo类中自定义标注,比如@NotNull下等,他是javaxvalidation-api中的注解这里不赘述;

  • 程序表示的验证。

示例方法如下

@ApiOperation(value = "应用类型和应用关系绑定")
@PostMapping("/applicationTypeBind")
public Boolean applicationTypeBind(@Validated @RequestBody ApplicationBindVO vo){
    applicationTypeService.applicationTypeBind(vo);
    return true;
}

VO 类示例

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
 
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Set;
 
@Data
@ApiModel(value = "ApplicationBindVO",description = "关系绑定vo")
public class ApplicationBindVO {
 
    @NotNull
    @ApiModelProperty("应用类型id")
    private Long typeId;
 
    @ApiModelProperty("应用id集合")
    private List<Long> applicationIdList;
}

5)入参出参设计

到期业务而定,格式轻松统一;

响应前端(APP/PC)的参数,一般重新处理,按顺序排列,方便统一

Responses.success(data);
import com.fasterxml.jackson.annotation.JsonView;
import com.myfutech.common.util.enums.ResponseCode;
import com.myfutech.common.util.vo.BaseView;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
 
@ApiModel(value = "Responses",description = "响应信息")
public class Responses<T> {
   
 @JsonView({BaseView.class})
    @ApiModelProperty("响应编码")
    private String code;
    
    @JsonView({BaseView.class})
    @ApiModelProperty("响应消息")
    private String msg;
    
    @JsonView({BaseView.class})
    @ApiModelProperty("响应体")
    private T result;
    
    public static <T> Responses<T> success() {
        return new Responses(ResponseCode.SUCCESS_CODE, "", (Object)null);
    }
 
    public static <T> Responses<T> success(T result) {
        return new Responses(ResponseCode.SUCCESS_CODE, "", result);
    }
 
    public static <T> Responses<T> success(String msg, T result) {
        return new Responses(ResponseCode.SUCCESS_CODE, msg, result);
    }
 
    public static <T> Responses<T> error(String msg) {
        return new Responses(ResponseCode.ERROR_CODE, msg, (Object)null);
    }
 
    public static <T> Responses<T> error(ResponseCode code) {
        return new Responses(code, code.getDefaultMsg(), (Object)null);
    }
 
    public static <T> Responses<T> error(ResponseCode code, String msg) {
        return new Responses(code, msg, (Object)null);
    }
 
    public Responses() {
    }
 
    private Responses(ResponseCode code, String msg, T result) {
        this.code = code.getCode();
        this.msg = msg;
        this.result = result;
    }
 
    public String getCode() {
        return this.code;
    }
 
    public boolean notSuccess() {
        return !ResponseCode.SUCCESS_CODE.getCode().equals(this.code);
    }
 
    public String getMsg() {
        return this.msg;
    }
 
    public T getResult() {
        return this.result;
    }
 
    public void setCode(String code) {
        this.code = code;
    }
 
    public void setMsg(String msg) {
        this.msg = msg;
    }
 
    public void setResult(T result) {
        this.result = result;
    }
    
    
}

6) 自动生成接口文档

使用SwaggerAPI,常用注解

//加载类名之上
@Api(tags = "日志相关接口", description="操作日志",
        consumes= MediaType.APPLICATION_JSON_UTF8_VALUE,
        produces=MediaType.APPLICATION_JSON_UTF8_VALUE)
 
 
//加在方法名之上
@ApiOperation(value = "查询分页列表")
 
//加载实体或VO类名之上
@Data
@ApiModel(value = "ApprovalRoleModifyVO",description = "审批角色修改信息")
public class ApprovalRoleModifyVO{

@Api: 作用在类上,标注该类具体实现内容。表示该类是swagger的资源。

参数:

  • 标签: 可以使用tags()允许您为操作设置多个标签的属性,而不是使用该属性。

  • description: 可描述描述该类的作用。

@ApiOperation: 用于方法,表示一个http请求的操作。

@ApiModel: 方法用于,更改字段数据,表示对模型属性的说明或操作

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://gitee.com/zhijiantianya/ruoyi-vue-pro

  • 视频教程:https://doc.iocoder.cn/video/

2、相对标准控制器类示例

package com.myfutech.employee.service.provider.ctrl;
 
import com.myfutech.common.util.Responses;
import com.myfutech.common.util.vo.IdVO;
import com.myfutech.common.util.vo.Page;
import com.myfutech.common.util.vo.Pageable;
import com.myfutech.employee.service.api.vo.response.record.RecordListVo;
import com.myfutech.employee.service.provider.model.Record;
import com.myfutech.employee.service.provider.service.RecordService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.MediaType;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
import javax.annotation.Resource;
 
/**
 *  相关接口
 */
@Api(tags = "日志相关接口", description="操作日志",
        consumes= MediaType.APPLICATION_JSON_UTF8_VALUE,
        produces=MediaType.APPLICATION_JSON_UTF8_VALUE)
@RestController
@RequestMapping("/record")
public class RecordCtrl {
 
 
    private static final Logger log = LoggerFactory.getLogger(RecordCtrl.class);
 
    @Resource(name="recordService") 
    private RecordService recordService;
 
    @ApiOperation(value = "查询分页列表")
    @PostMapping("/page")
    public Page<RecordListVo> page( @RequestBody Pageable pageable){
        Page<RecordListVo> list = recordService.findConditionPage(pageable);
        return list;
    }
    @ApiOperation(value = "根据id查询") 
    @PostMapping("/get")
    public Responses getOne(@Validated @RequestBody IdVO vo){
        Record data = recordService.getOne(vo.getId());
        return Responses.success(data);
    }
    @ApiOperation(value = "新增") 
    @PostMapping("/add")
    public Responses add(@Validated(Record.Create.class) @RequestBody Record data){
        recordService.save(data);
        return Responses.success();
    }
    @ApiOperation(value = "更新") 
    @PostMapping("/update")
    public Responses update(@Validated(Record.Update.class) @RequestBody Record data){
        recordService.save(data);
        return Responses.success();
    }
    @ApiOperation(value = "删除") 
    @PostMapping("/delete")
    public Responses delete(@Validated @RequestBody IdVO vo){
        recordService.deleteById(vo.getId());
        return Responses.success();
    }
}


欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢:

91deeee4935a2e17d23ce9456aec1a70.png

已在知识星球更新源码解析如下:

5268493306dd633b0c39cc9a04575255.jpeg

20654fb11d64f06c8b2d55aa9e6ed9a9.jpeg

131046d2eae165e6a335ce4f70f1631d.jpeg

bd45a4dec7222920bc2e6a331e1d2c64.jpeg

最近更新《芋道 SpringBoot 2.X 入门》系列,已经 101 余篇,覆盖了 MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。

提供近 3W 行代码的 SpringBoot 示例,以及超 4W 行代码的电商微服务项目。

获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
保姆级教程:用U盘给浪潮服务器装系统(含RAID驱动加载技巧) 本文提供了一份详细的浪潮服务器U盘安装系统指南,重点介绍了RAID驱动加载技巧与实战步骤。从准备工作到系统安装全流程,涵盖RAID配置、驱动加载方法及常见问题排查,帮助用户高效完成服务器系统部署。特别强调RAID驱动与服务器型号的匹配性,确保安装过程顺利。 阅读详情

相关推荐

基于Super-Jacoco的精准测试实践之路

灵魂拷问这个版本的影响范围到底有多大?研发改动了代码,为什么不通知测试?测试用例真的全面覆盖了吗?测试同学的测试覆盖情况该怎么评估?什么是精准测试概念借助技术手段、通过辅助算法对软件测试过...

咻咻ing的专栏 5843

芋道源码快速入门【新手篇】

芋道项目练手!5分钟快速开发crud功能,附带代码解析,以及使用说明!

chayangtong5109的博客 8878

ESP32实战:破解校园网WPA2-Enterprise认证的完整指南

本文详细介绍了如何使用ESP32开发板破解校园网WPA2-Enterprise认证的完整指南。通过硬件准备、环境搭建、核心代码实现及常见问题排查,帮助开发者解决企业级WiFi连接难题,特别适用于校园网环境下的物联网设备开发。

weixin_29194817的博客 457

芋道源码 yudao-cloud:构建全功能后台管理系统的技术探索

芋道,以开发者为中心,打造中国第一流的快速开发平台,全部开源,个人与企业可 100% 免费使用。master分支为 JDK 8 + Spring Boot 2.7,分支为 JDK 17/21 + Spring Boot 3.2管理后台的电脑端:Vue3 提供 element-plus、vben(ant-design-vue) 两个版本,Vue2 提供 element-ui 版本管理后台的移动端:采用 uni-app 方案,一份代码多终端适配,同时支持 APP、小程序、H5!

chenchuang0128的博客 1万+

群晖NAS从入门到精通的所有帖子汇总,只要这一篇就够了

本站陆陆续续的转载、原创帖子也有十几二十篇了,从不同的角度对群晖NAS的各种骚操作都有深入的讲解,虽然很多文章都不是讲的很深入,但是针对小白入门已经是足够了,希望对小白来说是一个入门,群晖NAS的大佬们勿喷,哪里写的不对的,请随时留言西安SEO优化站长一定在第一时间纠正修改。

西安SEO优化网站资源 8万+

PLC期末速成——顺序功能图转梯形图

一、根据顺序功能图写出梯形图程序 顺序功能图: 梯形图: 1、程序段1,系统运行标志M0.0的启-保-停控制电路。 2、程序段2,PLC上电与逆行,初始化脉冲M1.0激活初始化步M2.0。 3、程序段3,当M2.0初始化步为活动步,并且M0.0系统运行标志位为1时,置位M2.1步,复位M2.0步。 4、当M2.1为活动步,并且I0.3中液位传感器为1时,置位M2.2步,复位M2.1步。 5、程序段5,当M2.2为活动步,并且I0.2高液位传感器为1时,置位M2.3步,复位M2.2步。 6、程序段

qq_52251819的博客 1万+

Controller层编码规范

1、Controller层 controller层在MVC设计中属于控制层;设计初衷:接受请求并响应请求;所以,该层尽量轻薄,避免编写涉及业务处理的代码。 前后端分离的开发设计模式下,推荐使用@RestController注解,它相当于@ResponseBody + @Controller的组合使用。 1) 如果只是使用@RestController注解Controller类,则Contro...

春风化雨 2万+

别再被骚扰了!手把手教你彻底卸载阿里云盾(安骑士)并封禁其IP段

本文详细指导如何彻底卸载阿里云盾(安骑士)并封禁其IP段,帮助用户夺回服务器控制权。从识别监控组件到执行官方卸载脚本,再到手动清理残留文件和配置iptables规则,确保完全阻断云盾通信。适用于追求极致性能或需要完全自主控制的环境。

weixin_42525551的博客 456

规范说明:Controller 层编码规范

Controller 只负责:接收参数 → 基础校验 → 调用 Service → 返回统一成功结构。不编写业务逻辑、不处理异常、不做数据计算。禁止在 Controller 使用try-catch,所有异常直接抛出,由全局异常处理器统一处理。参数非法、数据异常立即抛出异常,不继续执行后续逻辑。命名、注释、日志、结构、返回格式在项目内保持完全一致。不打印敏感信息(密码、密钥、身份证、手机号等)。

BillKu的博客 413

Agent驱动电商运营:从选品到售后的全链路革新

在当今竞争激烈的电商市场中,传统的电商运营模式面临着诸多挑战。从选品到售后,每个环节都需要大量的人力投入和专业知识。选品需要深入了解市场趋势和消费者需求,营销需要精准定位目标用户,客服需要24小时响应用户咨询。这些工作不仅耗时耗力,而且容易受到人为因素的影响,导致效率低下和成本高企。AI Agent是一种能够感知环境、做出决策并采取行动的智能系统。感知能力:能够获取和处理环境信息。决策能力:能够根据感知到的信息做出决策。行动能力:能够执行决策,对环境产生影响。学习能力。

AI 领航者的博客 356

一台NAS两个系统:飞牛nas上完美运行群晖DSM?(飞牛nas+群晖nas套娃安装实操)

想在飞牛NAS上体验群晖DSM系统?💡 本文详细记录了飞牛nas上部署群晖的完整过程,从镜像转换到系统安装,每一步都有详细说明 🖥️,让你在不增加硬件成本的情况下,轻松实现一套硬件、多种系统的灵活部署 ✅

XiaoqiangClub的博客 2393

Controller 层编码规范 !

来源:blog.youkuaiyun.com/jiahao11861、控制器层1)设置请求路径2)设置请求方式3)设置请求参数方式4)请求参数5)入参出参设计6) 自动生成接口文档2、相对标准控制器类示例1、控制器层controller 层在 MVC 设计属于控制层设计初衷:设计初衷:请求并响应请求;所以该层轻似接受,涉及业务的。之前,使用下分开的开发设计模式,推荐使用@RestController注解它@R...

weixin_45727359的博客 404

TC3XX - MCAL知识点(九):PWM EB-tresos配置说明及代码浅析

脉冲宽度调制(PWM)驱动器负责提供与AUTOSAR指定的PWM信号生成相关的标准服务。PWM通道的底层定时器驱动是GTM (TOM或ATOM片)或CCU6 (T12或T13片)定时器通道。软硬件匹配关系如下:PWM直接引用的是GTM与CCU6模块,然后GTM与CCU6再关联到Port的,根据软硬件匹配关系,也能调用中断来使用,本例子没使用中断。CCU6是一个高分辨率的16位捕获和比较单元,具有特定的应用模式,主要用于交流驱动控制。特殊的工作模式支持控制无刷直流电机使用霍尔传感器或反电动势检测。

梦想技术家 2889

个人编码规范

【强制】在controller层API中,禁止使用Map类型作为入参类型,建议使用实体类型或简单类型; 使用Map类型容易造成以下问题: 前端人员无法准确获知应该传递哪些有效参数; service层很难获知传递了哪些参数; 参数名没有强限制,容易造成参数命名混乱和错误; 若涉及到多种不同类型参数,则泛型必须为Object,导致无法对参数类型进行强制要求,如果不对每个参数都进行繁复的类型检查...

程序员劝退中心 480

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Java初级程序员编码规范——Controller

目录 1. Controller层的编码规范    1.1  包括在上一篇博文(接口编码规范)提到的规范内容    1.2 所有函数返回统一的ResultBean格式    1.3  ResultBean是Controller专用的,是不允许往后传    1.4 Controller做参数格式化的转换,不允许把json,map这类对象传到service去,也不允许services返回js...

xzp_12345的博客 1483

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

编码规范(待完善)

一、命名规范 1、项目名全部小写 2、包名全部小写 在新建一个包项目时可能会涉及到多层设计,每层的包名要遵循包名全部小写的规范,如图在一个功能的逐层上级的包名全部是小写和字符组成 3、类名的命名要遵循首字母大写原则,类的名字必须由大写字母开头而单词中的其他字母均为小写;如果一个类名称是由多个单词组成,则每个单词的首字母均应为大写例如ModelWhAction;如果类名称中包含单词缩...

s13353955305的博客 778

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

controller 层可以调用controller层吗_你知道吗,优秀的代码都是这样分层的

1、背景说起应用分层,大部分人都会认为这个不是很简单嘛 就 Controller,Service, Mapper 三层。看起来简单,很多人其实并没有把他们职责划分开,在很多代码中,Controller 做的逻辑比 Service 还多,Service 往往当成透传了,这其实是很多人开发代码都没有注意到的地方,反正功能也能用,至于放哪无所谓呗。这样往往造成后面代码无法复用,层级关系混乱,对后续代码的...

weixin_33305287的博客 2443

Controller层代码这么写,同事们都模仿起来了

它的定位,我认为是「不可或缺的配角」,说它不可或缺是因为无论是传统的三层架构还是现在的COLA架构,Controller 层依旧有一席之地,说明它的必要性;做好了这一切改动后,可以发现 Controller 的代码变得非常简洁,可以很清楚地知道每一个参数、每一个 DTO 的校验规则,可以很明确地看到每一个 Controller 方法返回的是什么数据,也可以方便每一个异常应该如何进行反馈。是对其的二次封装,常用于 SpringMVC 的参数自动校验,参数校验的代码就不需要再与业务逻辑代码进行耦合了。

hello world! 154

编程规范

领域层–编码规范 2018年4月4日14:10:38 Controller层编写规范 controller层只是负责从service层获得数据,对外暴露API接口,核心业务逻辑在service层。不要在controller类的方法中编写业务相关代码。 @RestController @RequestMapping("/domain/领域名称(enc)/版本(v1)") public...

Lambda 478

群友总结的一点Controller规范

你知道的越多,不知道的就越多,业余的像一棵小草!成功路上并不拥挤,因为坚持的人不多。编辑:业余草imooc.com/article/27664推荐:https://www.xttblog....

xmt1139057136的专栏 818

PHP框架Yii编码规范

PHP框架Yii编码规范 文件方法命名   文件名即类名 类名称: 驼峰式 首字母大字 class PointController class PointRatioController 公共成员方法: 驼峰式 首字母小写 public function getPointById() 私有成员方法: 驼峰式 首字母小写 private function _getPointB

一夜长风的专栏 934

程序员应该养成的代码习惯

 1.不引用的包要去除,用ctrl+shift+o   2.List&lt;Dishes&gt; list=new ArrayList&lt;Dishes&gt;();  赋值分割 应该如下面这样: List&lt;Dishes&gt; list = new ArrayList&lt;Dishes&gt;();   3.利用ctrl+shift+f格式化代码,但尽量保持一句代码一...

molvhongchen的博客 211

编码规范

编码规范 class 大写 url 小写加下划线 index 列表页 new 新建页 edit 编辑页 create 无页面 update 无页面 delelte 无页面 show 详情页 =======补充01======= 一个数据库表一个controller、减少service层; 新建页面和编辑页面最好是一个页面;  ...

weixin_33836223的博客 68
上一篇: 一次简单的 JVM 调优,拿去写到简历里
下一篇: 2022科技公司薪酬排行榜,来了!
公众号-芋道源码
博客等级 码龄10年 1636粉丝 377原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值