微服务项目开发规范

微服务设计规范总结 一、微服务设计原则 高内聚低耦合、职责单一:每个微服务模块职责单一独立,负责各自业务功能。微服务之间尽量减少调用,做到高内聚低耦合。 前后端分离:将前端和后端代码进行分离,包括开发分离,部署分离,代码存放分离。前端负责页面展示,后端负责业务数据处理。前端通过HTTP协议或者其他协议进行交互。 围绕业务拆分:微服务应该围绕业务进行拆分,每个微服务聚焦于一个特定的业务功能,在技术选型上比较灵活,不局限于某个固定的技术栈。 日志与监控:随着微服务系统不断升级演进,微服务数量剧增,系统出现故障的几率也在增大 阅读详情

 

1.项目命名:

xx-xx/xx-xx-xx

项目名-模块名/项目名-模块名-二级模块名

大小写:全部小写,单词间使用-连接

2项目划分

mes-base 共有基础模块,抽出共用实体,共用工具类等

mes-discovery-eureka 服务注册中心

mes-api-gateway 网关

mes-config 配置中心

mes-user 用户模块

mes-equipment 设备管理模块

等等,具体根据业务做具体划分

3包命名:

com.kaicom.mes.xx

xx:模块名

4目录结构:

1)src/main/java下

com.kaicom.mes.xx下有以下包

config/配置类  Xx

controller/接口

dao/mybatis映射接口类

enums/枚举类

model/数据库表对应实体类

model/vm/请求体实体类

model/dto/返回体实体类

service/业务代码

util/工具类

feign/调用其他模块接口的客户端和工厂类

XxXxApplication.java 启动类,XxXx为模块名和二级模块名

2)Src/main/Resource为静态资源目录

Resource下常用静态资源:

application.properties 公用配置文件

application-dev.properties 开发环境配置文件

application-test.properties 测试环境配置文件

application-prod.properties 正式环境配置文件

mapper/*.xml mybatis数据库操作映射文件

 

其他配置xx.properties文件可自定义,可使用PropertySource进行使用,使用场景:其他自定义配置。尽量少用。

3)src/test/java

包名同src/main/java,同级目录建立测试类。Xx.java可以建立XxTest.java使用SpringBootTest进行测试

 

4)pom.xml

对应包名

 <groupId>com.kaicom.mes.xx</groupId>

项目名
<artifactId>mes-user</artifactId>

版本
<version>1.0-RELEASE</version>

统一引入springboot 2.0.1.RELEASE版本,springcloud Finchley.RELEASE版本
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.1.RELEASE</version>
</parent>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Finchley.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
</properties>

注释:springcloud Finchley.RELEASE官方文档 :

http://cloud.spring.io/spring-cloud-static/Finchley.RELEASE/single/spring-cloud.html#

各模块均需引入共有基础模块

<dependency>
    <groupId>com.kaicom.mes</groupId>
    <artifactId>mes-base</artifactId>
    <version>1.0-RELEASE</version>
</dependency>

使用内网maven库进行引入

5类命名规范

  1. 常量类

Constants.java

常量必须添加注释

2)配置类

XxConfig.java

配置类命名必须要与技术名称一致,如SwaggerConfig.java

自定义xx.properties使用类

XxProperties.java 类名与文件名一致

3)controller

XxController.java

严格避免业务代码侵入

4)dao

XxMapper.java Xx对应实体名称

5)enums

Xx.java 必须添加枚举类注解

6)model

vm/XxVm.java

根据数据库表名建立实体类Xx.java

7)service

XxService.java  方法必须注释

impl/XxServiceImpl.java 具体实现类

8)mapper/Xx.xml

使用mybatis-gengerator进行自动生成,生成必须包含根据主键进行增删改查的方法。

 

6接口说明(请求方式、注释、参数校验)

请求方式:

get查询 put修改 post添加 delete删除

restful路径命名规则参考:

http://www.ruanyifeng.com/blog/2014/05/restful_api.html

 

XxVm.java

属性值注释:@ApiModelProperty("用户名")

参数校验,message为错误提示信息
@NotNull(message = "用户名不能为空")
@Size(min = 5,max = 10,message = "用户名长度应在5-10位之间")

校验类型详情查看源码:javax.validation.constraints

XxController.java

接口类注释:
@Api(description = "用户")

具体接口方法注释:
    @ApiOperation("认证,返回token")
使用@Valid启用校验
    public RtData login(@Valid @RequestBody LoginVm loginVm, BindingResult bindingResult) {

 

//判断是否满足校验规则,否则返回封装的返回体
               if(bindingResult.hasErrors()){
            return ResponseBuilder.build(RtCode.ILLEGAL_REQUEST);
        }
  swagger接口文档:http://localhost:port/swagger-ui.html#/

 

 

7druid使用与sql优化

访问地址:http://localhost:8080/druid/login.html

用户名/密码: druid/druid         (在 application.properties进行配置)

点击sql监控可以查看查询比较慢的sql语句,对应优化

 

8返回实体解释

controller中统一使用RtData组装返回给客户端的具体内容

在mes-base中封装了返回体和返回代码,使用ResponseBuild生成RtData,

RtData包含code(返回代码)  msg(提示信息,如错误信息) data(具体返回实体),枚举类中已经列出常用的返回代码:

SUCCESS(200, "请求成功"),
ILLEGAL_REQUEST(400, "非法请求"),
NOT_AUTHORIZATION(401, "未授权"),
NOT_SUCCESS(402, "请求失败"),
ILLEGAL_PARAM(403, "参数异常"),
FALL_BACK(405, "断路返回"),
SERVER_ERROR(500, "服务器异常");

前端和消费者可以根据RtCode判断服务器返回状态。

9分页插件的使用

使用PageVm接收分页参数 pageNum(页数)和pageSize(数据条数),然后使用 PageHelper进行分页查询

PageHelper.startPage(page.getPageNum(),page.getPageSize());
Page<User> list = (Page<User>) userService.queryUsers();

实现原理:Mybatis拦截器对分页参数进行注入

 

10 不同模块服务调用

统一使用Feign进行服务调用,在feign下新建feign客户端如UserFegin.java,注解标明调用的服务名称和具体接口路径,使用UserFeignFactory.java进行断路器返回和日志统一处理。注意断路器中返回的 RtCode为FALL_BACK,避免误认为正常返回。详情参照mes-equipment项目中UserFegin.java和UserFeignFactory.java的具体实现。

11日志打印

统一使用:

private static final Logger logger = LoggerFactory.getLogger(xx.class);

info: 重要提示信息

warn:警示信息。

error: 错误信息。

对关键操作必须进行日志打印,如用户修改密码,赋予管理员权限等。

 

12其他待补充

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

微服务架构实战-1-项目开发规范 编码和命名规范 阅读详情

相关推荐

微服务开发规范

一. 项目说明 XXXX的所有微服务都基于springboot(1.5.7.RELEASE),提供dubbo的微服务基于dubbo(2.5.9)进行开发。为了保证这些第三方jar的版本统一,提供pom依赖,请不要直接引用springboot及dubbo的pom。 使用springboot的微服务,请配置pom的parent为如下: &lt;parent&gt;     &lt...

写个代码 扯个闲淡 6259

微服务实体类命名规范

配合 VO, 提供数据库的 CRUD 操作.为了项目能够更清晰的分层,我们将不同的对象按照其功能进行划分,也就出现了各种各样的对象类型,在Java中常用的有这些:PO、DO、TO、VO、DO、DTO、DAO、POJO。2、个人理解,DTO是可以存在于各层服务中(接口、服务、数据库等等)服务间的交互使用DTO来解耦。3、个人理解使用场景,在服务层服务中,由DTO转成BO然后进行业务处理后,转成DTO返回到接口层。3、个人理解使用场景,在数据库层中,获取的数据库数据存储到PO中,然后转为DTO返回到服务层中。

weixin_69402201的博客 1166

SpringCloud微服务完整架构指南

本文档详细介绍了基于SpringCloud的微服务架构项目结构,涵盖基础设施、业务服务和公共模块。采用Nacos作为注册/配置中心,SpringCloudGateway实现统一网关,Sentinel提供熔断保护。业务模块包括用户、商品、订单、支付和通知服务,通过Feign进行服务间调用。公共模块封装了工具类、API接口和DTO对象。部署方案支持Docker和Kubernetes,并提供了代码规范、数据库设计和API设计等开发规范。该架构具有服务自治、独立部署、故障隔离等技术优势,通过模块化设计实现高可用、易

weixin_51040479的博客 1484

5分钟上手Beer-Shop:微服务项目目录结构与开发规范详解

想要快速掌握微服务开发的核心要点吗?今天我们来深入解析一个基于Kratos框架的电商微服务演示项目——Beer-Shop。这个项目不仅展示了现代化的微服务架构设计,还提供了完整的开发规范和最佳实践。无论你是微服务新手还是经验丰富的开发者,都能在5分钟内快速理解这个项目的核心结构和开发规范。 ## 🏗️ 项目概览与核心架构 Beer-Shop是一个使用Go语言和Kratos框架搭建的在线啤酒商

gitblog_00959的博客 696

摄像头读取出现VIDIOC_STREAMON: No space left on device 错误

先说下原因,linux中为usb camera提供了一个标准的V4L2的驱动以方便使用,只要符合驱动规范就可以实现即插即用usb camera设备,即免驱动安装。 但市面上的USB 摄像头都是2.0的。usb bus的 bandwidth是有限的,而V4L2驱动采用的是贪心原则,即camera会要求获取最大带宽;因此将两个camera接入一路usb bus,打开第二个camera(尤其是采用YUV...

houge101的博客 9290

ETL数据集成案例

一个典型的ETL数据集成案例是将多个来源的数据合并成一个数据集。假设有一个公司,该公司使用一些不同的系统来存储不同部门的数据,例如销售数据存储在一个CRM系统中,财务数据存储在一个ERP系统中,人力资源数据存储在一个HR系统中。为了更好地进行报告和分析,该公司决定将所有这些数据集成到一个数据仓库中。以下是实现这一目标的ETL过程的步骤:提取(Extract):首先,需要从每个系统中提取所需的数据。每个系统可能有不同的数据格式和结构,因此需要编写不同的提取程序或查询来提取数据。

runqu的博客 948

【开发规范】go项目开发中的[流程,git,代码,目录,微服务仓库管理,静态检查]

【开发规范】go项目开发中的[流程,git,代码,目录,微服务仓库管理,静态检查(govet,golangci-lint)]

Jzin的博客 1564

深度学习PyTorch代码模板——模型训练框架、数据处理、绘图…

个人用深度学习代码模板:模型训练框架、数据处理、绘图等。待补充。

https://www.hyperplasma.top 1908

天机项目(使用Jenkins实现自动化部署,开发的一些规范,修改bug的流程,项目环境的搭建,git分支管理规范,享元模式)

答:我们公司有个运维,项目的部署、各种环境的搭建处理都是他负责的。因为不同的环境中相关的中间件都是独立部署的:即有开发环境的nacos、测试环境的nacos、预发环境nacos、生产nacos,都是独立的部署信息,因此我们多环境配置文件也主要是修改这些信息。细心的读者一定会发现,我们的判断逻辑是:!如果部署的微服务不在本地,我们可以采用Idea的远程调试功能(此功能一般仅dev环境才会开启,test-pre-prod会做端口禁用,禁止debug,因为一旦debug就会阻塞用户请求了,这点需要意识到)。

qq_1424674116的博客 2796

4G LTE 与 5G 无线网络规划对比:从 BBU/RRU 到 CU/DU/AAU 的架构演进解析

本文深度解析4G LTE与5G无线网络架构的演进差异,从BBU/RRU分立式架构到CU/DU/AAU三级重构,揭示移动通信代际跃迁的技术本质。重点对比了网络规划中的覆盖能力、容量规划、传输网络等九大维度,为通信工程师提供实用的技术对照手册,助力5G网络高效部署。

weixin_32821533的博客 288

STM32CubeIDE开发环境搭建与GPIO控制实战

嵌入式开发中,MCU开发环境构建是软硬件协同的起点,其核心在于工具链选型、外设抽象层级与调试可靠性。HAL库作为ST官方标准硬件抽象层,通过统一接口屏蔽芯片差异,显著提升工程可移植性;而STM32CubeIDE则以图形化配置+自动生成代码的方式,实现‘配置即代码’的确定性开发范式。该组合在教学验证、原型迭代和中小规模量产中具备高性价比技术价值,广泛应用于智能传感、工业HMI及IoT终端等场景。本文聚焦STM32CubeIDE 1.15.0环境部署、MyST账户与固件包管理、ST-LINK驱动校验,以及基于H

weixin_33531560的博客 81

接口开发规范及接口测试

一、接口开发规范 (一)Api请求及响应规范 为了严格按照接口进行开发,提高效率,对请求及响应格式进行规范化。 get 请求时,采用key/value格式请求,SpringMVC可采用基本类型的变量接收,也可以采用对象接收。 Post请求时,可以提交form表单数据(application/x-www-form-urlencoded)和Json数据(ContentType=applicatio...

麦客子 2491

C++笔记之emplace_back(),push_back()性能比较i++ 、 ++i

操作是否需要临时对象/拷贝性能需要(构造临时对象)较慢不需要(直接构造)较快i++需要(保存旧值)对于内置类型无影响,但对于自定义类型(如迭代器、大对象)会有拷贝开销++i不需要相对更快(尤其是自定义类型)都存在"是否需要额外的临时对象/拷贝"这一性能差异点和++i都是更高效的版本(避免临时对象/拷贝)和i++都可能产生额外的临时对象(前者构造临时对象,后者保存旧值)对于内置类型(如int),i++和++i性能几乎没有差异(编译器会优化);但对于自定义类型(尤其是迭代器等重量级对象),

小勇博客 98

微服务的学习小结

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34265814的博客 142

快速卷积结构FIR数字滤波器的设计与ARM平台实现

本文提出了一种基于快速卷积结构的FIR数字滤波器设计与实现方案。通过Matlab设计了满足特定指标的低通FIR滤波器,采用重叠-保存法和重叠-相加法两种快速卷积算法,将计算复杂度从O(N·M)降低到O(NlogN)。详细介绍了滤波器系数生成、性能验证流程,并提供了ARM平台C语言实现的关键技术,包括定点量化处理。实验结果表明,该方法能有效滤除混合信号中的高频干扰,保留目标1kHz正弦信号,验证了设计方案的有效性。

huanghm88的专栏 123

Coze 打通飞书多维表格,实现数据增删改查操作实战详解

基于Coze 打通飞书多维表实现数据录入系统实战详解

congge 5780

工作实战之代码规范

软件质量的好坏,不仅取决于团队成员的编程能力,更取决于整个项目的代码规范,代码规范包括java代码规范,数据库规范,设计规约等

zengliangxi的专栏 625

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Snowy-Cloud的代码结构与开发规范

Snowy-Cloud的代码结构与开发规范 【免费下载链接】Snowy-Cloud ????工作流业务领先????Snowy-Cloud是小诺团队下Snowy的微服务前后分离版,基础包含了所有日常使用的管理功能,企业版包括camunda引擎的工作流、多租户、多数据源、ureport报表;另外官网包含大屏数据可视化、数据中台、知识库、...

gitblog_00172的博客 1165

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

微服务项目笔记

基于springCloud的微服务项目

汪随安的博客 3089

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Java 项目开发规范 V1.0

Java 项目开发规范 V1.0 零、前言 由阿里向 Java 社区开源的 Java 开发手册其中包含许多优秀的规范,本文档为该手册的扩展内容,针对当前项目开发现状而编写,其中部分内容来自于该手册,由于是重点内容,所以在该文档中再次强调。 本文在提供最佳实践的前提下尽可能保持规范的灵活性,因此在可以使用多种开发方式的情况下,本文列出多种较好方式,但更推荐排在前面的方式,也希望读者能够灵活运用该规范。 一、准备工作 IDE 的选择 使用 IntelliJ IDEA 作为集成开发环境。 IDEA 插件 IDEA

aoheng的专栏 280

热门项目推荐:pig - 企业级快速开发平台的微服务实践标杆

热门项目推荐:pig - 企业级快速开发平台的微服务实践标杆 【免费下载链接】pig ↥ ↥ ↥ 点击关注更新,基于 Spring Cloud 2024 、Spring Boot 3.4、 OAuth2 的 RBAC 权限管理系统 ...

gitblog_01415的博客 809

我的第一个真项目总结

我的第一个真项目总结 学习java开发有一段时间了,出于 检验学习效果 了解自己目前的水平,和他人的差距 真实的项目开发是什么样的 这几点目的,和一群志同道合的小伙伴共同开发了一个小型的微服务项目。 1. 项目组织架构 项目共同分成了10个服务,前台portal和后台admin交给业务组,剩余8个服务都交由架构组完成。整个开发过程中,架构部分,主动承担了auth部分的搭建、开发;业务部分,负责前台portal信息展示和点赞功能的接口实现,以及win10环境下的ELK日志系统的搭建。 kkb-parent

qq_42829970的博客 164
上一篇: kafka环境搭建+spring-kafka-demo测试
下一篇: docker搭建redis
programmeryu
博客等级 码龄11年 23粉丝 67原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值