【商城实战(2)】商城架构设计:从底层逻辑到技术实现
【商城实战】专栏重磅来袭!这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建,运用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用户、商品、订单等核心模块开发,再到性能优化、安全加固、多端适配,乃至运营推广策略,102 章内容层层递进。无论是想深入钻研技术细节,还是探寻商城运营之道,本专栏都能提供从 0 到 1 的系统讲解,助力你打造独具竞争力的电商平台,开启电商实战之旅。
目录
- 一、整体架构规划
- 1.1 绘制商城整体架构图
- 1.2 各模块功能解析
- 1.3 模块间关系梳理
- 二、前端架构设计
- 2.1 技术栈选择
- 2.2 SPA 实现原理
- 2.3 前端架构优势
- 三、后端架构设计
- 3.1 微服务架构应用
- 3.2 服务间通信方式
- 3.3 后端架构的可扩展性与维护性
一、整体架构规划
1.1 绘制商城整体架构图
为了构建一个高效、稳定且可扩展的商城系统,我们精心设计了如下的整体架构图,它清晰地展示了商城系统各个关键部分及其相互关系。

如图所示,商城系统主要由前端、后端、数据库、缓存和消息队列等部分构成。前端负责与用户进行交互,提供直观、友好的界面;后端则专注于处理各种复杂的业务逻辑;数据库用于存储系统运行所需的各类数据;缓存能够显著提升系统的响应速度;消息队列实现了系统各模块之间的异步通信。
1.2 各模块功能解析
- 前端:作为用户与商城系统交互的入口,前端的主要职责是呈现丰富多样的页面,包括商品展示页面、购物车页面、订单详情页面等,使用户能够方便地浏览商品、添加商品到购物车、下单购买以及查看订单状态等。同时,前端还负责处理用户的各种输入操作,如搜索商品、选择商品规格、填写收货地址等,并将这些操作请求及时发送给后端进行处理。
- 后端:后端是商城系统的核心,承担着处理业务逻辑的重任。它接收前端传来的请求,根据不同的业务场景进行相应的处理。例如,在用户注册登录时,验证用户的账号密码;在商品管理方面,实现商品的添加、修改、删除、查询等操作;在订单处理过程中,完成订单的创建、支付、发货、退款等流程。此外,后端还需要与数据库、缓存、消息队列等其他组件进行交互,以确保业务的正常运行。
- 数据库:数据库用于持久化存储商城系统的各类数据,包括用户信息(如账号、密码、姓名、联系方式等)、商品信息(如商品名称、价格、库存、描述等)、订单信息(如订单编号、订单状态、商品明细、支付金额等)以及其他相关数据。它为商城系统提供了数据的持久化保存和可靠的查询服务,确保数据的完整性和一致性。
- 缓存:缓存的主要作用是存储经常被访问的数据,如热门商品信息、用户登录状态等。当用户请求这些数据时,系统可以直接从缓存中获取,而无需频繁地访问数据库,从而大大提高了系统的响应速度,减轻了数据库的压力。常见的缓存技术有 Redis 等,它具有高性能、高并发的特点,非常适合用于商城系统的缓存场景。
- 消息队列:消息队列在商城系统中扮演着重要的角色,它实现了系统各模块之间的异步通信和解耦。例如,在用户下单后,订单系统可以将订单信息发送到消息队列中,然后由其他相关系统(如库存系统、物流系统)从消息队列中获取订单信息并进行相应的处理。这样,即使某个系统出现故障或暂时不可用,也不会影响整个下单流程的正常进行,提高了系统的可用性和稳定性。同时,消息队列还可以用于实现流量削峰,在高并发场景下,将大量的请求暂存到消息队列中,然后按照系统的处理能力逐步进行处理,避免系统因瞬间高流量而崩溃。
1.3 模块间关系梳理
- 前端与后端通信:前端通过 HTTP/HTTPS 协议向后端发送请求,后端接收到请求后进行处理,并将处理结果以 JSON 等格式返回给前端。这种通信方式简洁高效,能够满足商城系统中各种业务场景的需求。例如,前端用户在商品详情页面点击 “加入购物车” 按钮,会向后端发送一个包含商品 ID、购买数量等信息的请求,后端接收到请求后,将商品信息添加到用户的购物车中,并返回添加成功的响应给前端。
- 后端与数据库交互:后端在处理业务逻辑过程中,需要频繁地与数据库进行交互,进行数据的读取和写入操作。例如,在用户注册时,后端会将用户输入的注册信息写入数据库的用户表中;在查询商品列表时,后端会从数据库的商品表中读取商品数据,并返回给前端展示。为了提高数据访问效率,后端通常会使用数据库连接池来管理数据库连接,减少连接创建和销毁的开销。
- 缓存与后端、数据库的关系:缓存位于后端和数据库之间,当后端需要获取数据时,首先会检查缓存中是否存在该数据。如果缓存中存在,则直接从缓存中获取,避免了对数据库的访问;如果缓存中不存在,则从数据库中读取数据,并将数据存储到缓存中,以便下次访问时能够直接从缓存中获取。这样,缓存有效地减轻了数据库的压力,提高了系统的响应速度。例如,当用户频繁访问热门商品列表时,后端可以从缓存中快速获取商品数据,而无需每次都查询数据库。
- 消息队列与其他模块的关系:消息队列作为系统各模块之间的异步通信桥梁,实现了模块之间的解耦。当某个模块产生一个事件(如订单创建、商品库存更新等)时,它可以将相关的消息发送到消息队列中。其他对该事件感兴趣的模块可以从消息队列中订阅并获取这些消息,然后进行相应的处理。例如,订单系统在创建订单后,将订单消息发送到消息队列,库存系统订阅该消息,接收到订单消息后,根据订单中的商品数量更新商品库存。这种异步通信方式使得各模块之间的耦合度降低,提高了系统的可维护性和扩展性。
二、前端架构设计
2.1 技术栈选择
在前端开发中,我们选用了一系列先进且高效的技术,构建出一个功能强大、用户体验出色的商城前端架构。
uniapp 是我们前端开发的核心框架,它基于 Vue.js,具备强大的跨平台能力。通过 uniapp,我们只需编写一套代码,就能同时发布到多个平台,如 iOS、Android、Web 以及各种小程序等。这大大提高了开发效率,减少了开发成本,使得我们能够快速响应市场需求,覆盖更广泛的用户群体。例如,在开发商城的移动端应用时,使用 uniapp 可以轻松实现 iOS 和 Android 平台的兼容,避免了为不同平台分别开发带来的繁琐工作。
Element Plus 是基于 Vue 3 构建的桌面端组件库 ,它为我们提供了丰富多样的组件,如按钮、表单、对话框、表格等。这些组件不仅设计精美,而且具有良好的交互性和易用性。借助 Element Plus,我们可以快速搭建出美观、专业的商城界面,提升用户的视觉体验和操作感受。比如,在商品详情页面,我们使用 Element Plus 的卡片组件展示商品信息,使用按钮组件实现添加购物车、立即购买等操作,使页面简洁明了,操作便捷。
axios 作为一个基于 Promise 的 HTTP 客户端,负责前端与后端之间的数据请求通信。它具有简洁的 API,支持多种 HTTP 请求方法,如 GET、POST、PUT、DELETE 等,并且可以方便地进行请求拦截和响应处理。在商城中,无论是获取商品列表、查询用户订单,还是提交用户注册信息、处理支付请求,axios 都能高效地完成数据传输任务,确保前端与后端之间的数据交互稳定、可靠。例如,当用户在商城中搜索商品时,前端通过 axios 向后端发送 GET 请求,携带搜索关键词,后端接收到请求后进行数据查询,并将结果返回给前端,axios 负责处理请求和响应的过程,保证数据的准确传输。
2.2 SPA 实现原理
单页应用(SPA)是商城前端架构的重要模式,它通过路由机制实现页面无刷新切换,为用户带来流畅的浏览体验。
在 SPA 中,前端路由扮演着关键角色,以 Vue Router 为例,它通过定义 URL 与组件之间的映射关系,使得应用程序能够根据 URL 的变化动态地加载不同的组件。当用户在商城中进行页面切换时,比如从首页跳转到商品详情页,URL 会发生变化,Vue Router 监听到 URL 的变化后,会根据预先定义好的路由规则,找到对应的商品详情组件,并将其渲染到页面中,而无需重新加载整个页面。这个过程中,页面的其他部分保持不变,只有需要更新的组件区域进行了动态更新,大大提高了页面切换的速度和效率。
同时,SPA 还通过动态加载组件与数据来提升性能和用户体验。在传统的多页应用中,页面加载时会一次性加载所有的资源和数据,而 SPA 采用按需加载的方式,只有当用户访问某个路由时,才会加载对应的组件和数据。例如,在商城中,用户未点击商品详情链接时,商品详情组件及其相关数据不会被加载,只有当用户点击链接后,才会动态加载该商品的详情信息,这样减少了初始加载时间,提高了应用的响应速度。并且,在数据更新方面,SPA 通过与后端进行异步数据交互,当数据发生变化时,只更新页面中受影响的部分,而不是整个页面,进一步提升了用户体验。
2.3 前端架构优势
- 开发效率提升:uniapp 基于 Vue.js 的开发模式,使得开发者可以利用 Vue.js 丰富的生态系统和开发经验,快速上手并进行开发。同时,一套代码多端运行的特性,极大地减少了开发工作量,提高了开发效率。例如,在开发商城的不同端应用时,无需为每个端单独编写代码,节省了大量的时间和人力成本。
- 多端适配便捷:uniapp 的跨平台能力,能够轻松实现商城在 Web、移动端(iOS 和 Android)以及小程序等多个平台上的运行,满足用户在不同设备上的访问需求。无论是使用电脑浏览商城,还是通过手机 APP 或小程序购物,用户都能获得一致的体验。
- 用户体验优化:SPA 的无刷新页面切换机制,让用户在商城中进行页面导航时感受到更加流畅和自然的体验,减少了页面加载等待时间,提高了用户的购物效率和满意度。同时,Element Plus 提供的美观组件和良好交互设计,也进一步提升了用户对商城的好感度。比如,在购物车页面,用户可以方便地进行商品数量调整、删除商品等操作,界面响应迅速,操作流畅。
- 维护成本降低:由于前端代码的统一性和组件化开发模式,使得代码的维护和更新更加容易。当需要修改某个功能或修复某个 Bug 时,只需在一处进行修改,就能在所有平台生效,降低了维护成本和出错的概率。例如,更新商城的某个界面样式,只需修改对应的组件代码,所有端的该界面样式都会同步更新 。
三、后端架构设计
3.1 微服务架构应用
在后端架构设计中,我们采用 Spring Boot 作为基础框架,搭建了高效灵活的微服务架构。Spring Boot 具有快速开发、自动配置等诸多优势,能够极大地提高开发效率,降低项目的搭建成本和维护难度。
将商城业务进行细致拆分,划分为多个独立的微服务模块,每个模块专注于特定的业务领域,实现高内聚、低耦合的设计目标。其中,用户微服务负责管理用户相关的业务逻辑,如用户注册、登录、信息修改、密码找回等功能。它通过与数据库中的用户表进行交互,实现用户数据的持久化存储和查询操作。例如,在用户注册时,用户微服务接收前端传来的用户注册信息,对信息进行合法性验证后,将用户数据插入到数据库的用户表中,并返回注册成功的响应给前端。
商品微服务承担着商品信息的管理工作,包括商品的添加、编辑、删除、查询、上架、下架以及库存管理等操作。它与数据库中的商品表和库存表紧密关联,确保商品数据的准确性和完整性。当商家在商城后台添加新商品时,商品微服务接收商品的详细信息,如商品名称、描述、价格、库存等,并将这些信息存储到数据库中。同时,在用户浏览商品列表或商品详情时,商品微服务从数据库中读取商品数据,返回给前端展示。
订单微服务主要处理订单相关的业务流程,涵盖订单的创建、修改、查询、支付、发货、退款等操作。它与用户微服务、商品微服务以及支付系统等进行交互,协调完成整个订单生命周期的管理。例如,当用户在商城中选择商品并提交订单时,订单微服务首先创建订单记录,关联用户信息和商品信息,然后调用支付系统进行支付处理。在支付成功后,订单微服务更新订单状态,并通知库存微服务扣减相应商品的库存。
每个微服务都可以独立进行开发、测试、部署和扩展,互不干扰。当某个微服务需要进行功能升级或修复 Bug 时,只需对该微服务进行相应的操作,而不会影响到其他微服务的正常运行。这种独立的开发和部署方式,使得团队能够更加高效地进行协作开发,提高开发速度和质量。同时,当业务量增长导致某个微服务的负载过高时,可以方便地对该微服务进行水平扩展,通过增加服务器实例来提高其处理能力,确保系统的性能和稳定性。
3.2 服务间通信方式
- RESTful API 通信:各个微服务之间通过 RESTful API 进行通信,这种基于 HTTP 协议的通信方式具有简单、直观、易于理解和实现的特点。RESTful API 使用标准的 HTTP 方法(如 GET、POST、PUT、DELETE 等)来操作资源,每个微服务都对外暴露一组清晰的 API 接口,其他微服务可以通过发送 HTTP 请求来调用这些接口,获取数据或执行特定的业务操作。例如,商品微服务提供了获取商品列表的 API 接口,订单微服务在需要查询商品信息时,可以向商品微服务发送 GET 请求,携带必要的参数(如商品类别、页码、每页数量等),商品微服务接收到请求后,根据参数查询数据库,并将商品列表数据以 JSON 格式返回给订单微服务。
- 服务注册与发现:为了实现微服务之间的动态发现和通信,我们引入了服务注册中心 Eureka。每个微服务在启动时,会将自己的服务信息(包括服务名称、IP 地址、端口号、健康状态等)注册到 Eureka Server 上。Eureka Server 维护着一个服务注册表,记录了所有注册的微服务信息。当某个微服务需要调用其他微服务时,它首先从 Eureka Server 获取目标微服务的地址信息,然后根据这些信息进行通信。这样,即使微服务的地址发生变化(例如因为服务器迁移、扩容等原因),其他微服务也能够通过 Eureka Server 动态地获取到最新的地址,保证通信的正常进行。例如,用户微服务需要调用订单微服务的创建订单接口,它会先从 Eureka Server 查询订单微服务的地址,然后向该地址发送创建订单的 HTTP 请求。
- Feign 简化服务调用:Feign 是一个声明式的 Web 服务客户端,它基于 RESTful API,进一步简化了微服务之间的调用过程。通过 Feign,我们只需定义一个接口,并在接口上使用注解来声明需要调用的 API,Feign 会自动为我们实现接口的调用逻辑,包括构建 HTTP 请求、发送请求、处理响应等操作。这样,在代码中调用其他微服务的接口就像调用本地方法一样简单,提高了代码的可读性和维护性。例如,在用户微服务中,如果需要调用商品微服务获取商品详情,我们可以定义一个 Feign 接口,使用 @FeignClient 注解指定目标微服务的名称,然后在接口方法上使用 @RequestMapping 等注解定义 API 路径和请求方法。在使用时,只需注入该 Feign 接口,即可调用相应的方法获取商品详情,无需手动编写复杂的 HTTP 请求代码。
3.3 后端架构的可扩展性与维护性
- 灵活扩展:微服务架构的设计使得后端系统具有出色的可扩展性。当商城业务规模不断扩大,某个微服务的负载增加时,我们可以轻松地对该微服务进行水平扩展,通过增加服务器实例来提高其处理能力。例如,如果商品微服务在促销活动期间面临大量的商品查询请求,导致性能下降,我们可以在不影响其他微服务的情况下,快速启动多个商品微服务实例,并通过负载均衡器将请求分发到这些实例上,从而有效地应对高并发的业务场景。这种按需扩展的能力,使得系统能够根据业务需求灵活调整资源配置,避免了资源的浪费,同时保证了系统的高性能和稳定性。
- 独立维护:由于各个微服务之间相互独立,每个微服务都有自己独立的代码库、数据库和运行环境,因此在维护时可以针对单个微服务进行操作,降低了系统的维护复杂度。当某个微服务出现问题或需要进行功能升级时,开发人员可以专注于该微服务的代码和逻辑,而不会对其他微服务产生影响。例如,当订单微服务需要添加新的订单状态(如订单已取消)时,开发人员只需在订单微服务的代码中进行相应的修改和测试,然后重新部署该微服务即可,其他微服务(如用户微服务、商品微服务等)无需任何改动。这种独立维护的特性,使得系统的维护成本大大降低,同时提高了系统的可靠性和稳定性。
- 降低耦合度:微服务架构通过将商城业务拆分为多个独立的服务模块,每个模块只负责特定的业务功能,从而有效地降低了系统的耦合度。不同微服务之间通过定义明确的 API 进行通信,它们之间的依赖关系更加清晰和可控。这种低耦合的设计使得系统在进行功能扩展、修改和维护时更加灵活,减少了因模块之间的紧密耦合而带来的风险。例如,如果商城需要引入新的支付方式,只需要在支付微服务中进行相应的开发和配置,而不会影响到其他微服务的正常运行。同时,低耦合度也有利于团队的分工协作,不同的开发团队可以专注于不同的微服务模块,提高开发效率和质量。
相关文章:
【商城实战(2)】商城架构设计:从底层逻辑到技术实现
【商城实战】专栏重磅来袭!这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建,运用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用户、商品、订单等核心模块开发,再到性能优化、安全加固、多端适配…...
数据序列化协议 Protobuf 3 介绍(Go 语言)
Protobuf 3 入门 1. 什么是序列化? 1.1 概念 序列化(Serialization 或 Marshalling) 是指将数据结构或对象的状态转换成可存储或传输的格式。反向操作称为反序列化(Deserialization 或 Unmarshalling),它…...
从芯片到光网络:解密平面光波导技术(PLC)核心优势
关键词:PLC、OFDR、光链路检测 平面光波导技术(Planar Lightwave Circuit, PLC)是一种基于平面波导结构的光学器件制造技术。它通过在平面基底上制作光波导,实现光信号的传输、分路、耦合、调制等功能。PLC技术的核心在于利用光波…...
5分钟快速搭建一个 SpringBoot3 + MyBatis-Plus 工程项目
环境 idea 2023.3.5 jdk 17 mysql 8 创建SpringBoot工程 创建SpringBoot工程,这里有两种方式可选,一种是使用idea提供的Spring Initializr自动创建,一种是通过Maven Archetype手动创建 自动创建SpringBoot工程 使用Spring Initializr创建…...
如何判断https使用了哪个版本的TLS?
互联网各领域资料分享专区(不定期更新): Sheet 正文 一、使用浏览器开发者工具(适合普通用户) 1. Google Chrome 打开目标网站(如 https://example.com)。点击地址栏左侧的 锁形图标。选择 「连接是安全的」 → 「证书信息」。在证书详情中,查看 「技术详细信息」 或 「…...
如何在 NocoBase 中实现 CRM 的线索转化
1. 引言 本教程将一步一步地引导您如何在 NocoBase 中实现 CRM 的商机转化(Opportunity Conversion)功能。我们将介绍如何创建所需的 collections(数据表)、配置数据管理页面、设计转化流程以及设置关联管理,从而帮助…...
StarRocks-fe工程在Cursor中不能识别为Java项目
SR简介 StarRocks 是一款高性能分析型数据库,支持实时、多维度、高并发的数据分析。本指南旨在解决在使用 VSCode 或 Cursor 开发 StarRocks 后端项目时遇到的模块识别问题。 问题描述 使用 Cursor 或 VSCode 打开 StarRocks 的后端工程 fe 时,spark-…...
影刀RPA开发拓展--SQL常用语句全攻略
前言 SQL(结构化查询语言)是数据库管理和操作的核心工具,无论是初学者还是经验丰富的数据库管理员,掌握常用的 SQL 语句对于高效管理和查询数据都至关重要。本文将系统性地介绍最常用的 SQL 语句,并为每个语句提供详细…...
05类加载机制篇(D6_方法调用和方法执行)
目录 一、字节码指令集 二、基本数据类型 1. 加载和存储指令 2. const系列 3. push系列 4. ldc系列 5. load系列 load系列A load系列B 6. store系列 store系列A store系列B 7. pop系列 8. 栈顶元素数学操作及移位操作系列 9. 运算指令 10. 类型转换指令 11. 宽…...
视音频数据处理入门:颜色空间(二)---ffmpeg
目录 概述 流程 相关流程 初始化方法 初始化代码 转换方法 转换代码 释放方法 整体代码介绍 代码路径 概述 本篇简单说一下基于FFmpeg的libswscale的颜色空间转换;Libswscale里面实现了各种图像像素格式的转换,例如:YUV与RGB之间的…...
从零开始:H20服务器上DeepSeek R1 671B大模型部署与压力测试全攻略
前言 最近,我有幸在工作中接触到了DeepSeek R1 671B模型,这是目前中文开源领域参数量最大的高质量模型之一。DeepSeek团队在2024年推出的这款模型,以其惊人的6710亿参数量和出色的推理性能,引起了业界广泛关注。 作为一名AI基础…...
【FAQ】HarmonyOS SDK 闭源开放能力 —Map Kit(5)
1.问题描述: 提供两套标准方案,可根据体验需求选择: 1.地图Picker(地点详情) 用户体验:①展示地图 ②标记地点 ③用户选择已安装地图应用 接入文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guide…...
Leetcode 3469. Find Minimum Cost to Remove Array Elements
Leetcode 3469. Find Minimum Cost to Remove Array Elements 1. 解题思路2. 代码实现 题目链接:3469. Find Minimum Cost to Remove Array Elements 1. 解题思路 这一题我没啥特别好的思路,就只能动态规划了,倒是也能过,不过总…...
Excel的行高、列宽单位不统一?还是LaTeX靠谱
想要生成田字格、米字格、带拼音标准,方便小学生书法和练字。Word,Excel之类所见即所得是最容易相当的方式。但它们处理带田字格之类背景时,如果没有专用模板、奇奇怪怪的插件,使用起来会碰到各种问题。比如,Word里面用…...
(新版本onenet)stm32+esp8266/01s mqtt连接onenet上报温湿度和远程控制(含小程序)
物联网实践教程:微信小程序结合OneNET平台MQTT实现STM32单片机远程智能控制 远程上报和接收数据——汇总 前言 之前在学校获得了一个新玩意:ESP-01sWIFI模块,去搜了一下这个小东西很有玩点,远程控制LED啥的,然后我就想…...
告别GitHub连不上!一分钟快速访问方案
一、当GitHub抽风时,你是否也这样崩溃过? 😡 npm install卡在node-sass半小时不动😭 git clone到90%突然fatal: early EOF🤬 改了半天hosts文件,第二天又失效了... 根本原因:传统代理需要复杂…...
迷你世界脚本对象库接口:ObjectLib
对象库接口:ObjectLib 迷你世界 更新时间: 2023-04-26 20:21:09 具体函数名及描述如下: 序号 函数名 函数描述 1 getAreaData(...) 获取区域数据 2 getPositionData(...) 获取位置数据 3 getLivingData(...) 获取生物数据 4 getItemDat…...
数据库事务、乐观锁及悲观锁
参考:node支付宝支付及同步、异步通知、主动查询支付宝订单状态 以下容结合上述链接查看 1. 什么是数据库事务? 1.1. 连续执行数据库操作 在支付成功后,我们在自定义的paidSuccess里,依次更新了订单状态和用户信息。也就说这里…...
蓝桥王国--dij模板
#include <bits/stdc.h> // 万能头 using namespace std; typedef pair<long long ,int> PII; int n,m; long long d[300011]; struct edge///邻接表 {int v;long long w; }; int vis[300011]; vector<edge> mp[300011];///邻接表 void dij(int s)///dij单源…...
Java基础关键_017_集合(一)
目 录 一、概述 二、Collection 关系结构 1.概览 2.说明 三、Collection 接口 1.通用方法 (1)add(E e) (2)size() (3)addAll(Collection c) (4)contains(Object o) &#…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...
关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...
Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?
Pod IP 的本质与特性 Pod IP 的定位 纯端点地址:Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址(如 10.244.1.2)无特殊名称:在 Kubernetes 中,它通常被称为 “Pod IP” 或 “容器 IP”生命周期:与 Pod …...
Springboot 高校报修与互助平台小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,高校报修与互助平台小程序被用户普遍使用,为…...
PLC入门【4】基本指令2(SET RST)
04 基本指令2 PLC编程第四课基本指令(2) 1、运用上接课所学的基本指令完成个简单的实例编程。 2、学习SET--置位指令 3、RST--复位指令 打开软件(FX-TRN-BEG-C),从 文件 - 主画面,“B: 让我们学习基本的”- “B-3.控制优先程序”。 点击“梯形图编辑”…...
STL 2迭代器
文章目录 1.迭代器2.输入迭代器3.输出迭代器1.插入迭代器 4.前向迭代器5.双向迭代器6.随机访问迭代器7.不同容器返回的迭代器类型1.输入 / 输出迭代器2.前向迭代器3.双向迭代器4.随机访问迭代器5.特殊迭代器适配器6.为什么 unordered_set 只提供前向迭代器? 1.迭代器…...
