Linux———迷你在线商城
一、项目简介
1、演示视频
商城项目演示视频
2、功能概述
-
用户认证管理:支持用户注册、登录和注销操作,通过SQLite数据库存储用户信息(如用户名和密码),确保用户数据的安全性和完整性。
-
商品展示:能够根据用户请求动态生成商品展示页面,从数据库中检索商品信息(如名称、图片、价格等),并以友好的HTML格式呈现给用户。
-
HTTP请求处理:解析客户端发送的HTTP请求,提取请求方法、路径和正文内容,根据不同的请求类型(如GET或POST)进行相应的处理。
-
响应生成与发送:根据处理结果生成相应的HTTP响应报文,包括报文头和正文,将生成的网页内容发送给客户端。
3、技术特点
-
高效网络编程:采用epoll机制进行高效的I/O事件监听和处理,能够同时处理多个客户端连接,提高服务器的并发处理能力。
-
SQLite数据库集成:利用SQLite轻量级数据库存储和管理用户数据及商品信息,实现数据的持久化和快速查询。
-
动态网页生成:根据用户请求和数据库查询结果动态生成HTML内容,提供个性化的网页展示,增强用户体验。
-
模块化设计:代码结构清晰,功能模块划分明确,便于维护和扩展,如网络通信、请求解析、数据库操作等模块相互独立又紧密协作。
二、功能模块
(一)、creat_socket()
一、基本功能:该函数是典型的TCP服务器端套接字初始化代码,主要实现以下功能:
- 创建套接字:通过
AF_INET(IPv4)和SOCK_STREAM(TCP)协议创建面向连接的流式套接字 - 端口复用配置:设置
SO_REUSEADDR和SO_REUSEPORT选项,允许快速重启服务 - 地址绑定:将套接字与指定的IP地址和端口进行绑定
- 监听连接:开启被动监听模式,设置最大等待连接队列为1000
二、代码亮点
- 网络健壮性设计:
- 显式设置
sin_family地址族避免协议不匹配 - 使用
htons处理端口字节序,保证跨平台兼容性
- 显式设置
- 高性能配置:
- 监听队列设为1000,适合高并发场景
- 双重用选项避免
TIME_WAIT状态影响服务重启
(二)、add_fd()
一、核心功能:该函数用于将文件描述符注册到epoll实例中,是I/O多路复用的核心实现,主要完成:
- 事件注册:通过
epoll_event结构体描述监听事件类型(如可读/可写) - 描述符关联:将文件描述符与事件绑定(
env.data.fd = fd) - 内核通知管理:通过
epoll_ctl系统调用实现高效事件监控
二、实现亮点
- 接口简洁化:封装了epoll的复杂操作,参数化事件类型(
tmprequest) - 错误即时处理:使用
perror输出错误信息便于调试 - 基础扩展性:通过
tmprequest参数支持多种事件组合注册
(三)、del_fd()
一、基本功能:这个del_fd()函数用于从epoll实例中移除文件描述符监控
- 移除事件监控:通过
EPOLL_CTL_DEL操作解除epoll对指定fd的监控 - 基础错误处理:检测系统调用错误并输出信息
- 资源解关联:断开epoll实例与文件描述符的关联
(四)、recv_http()
一、基本功能:该函数用于接收HTTP数据,是网络通信的核心组件,主要功能包括:
- 缓冲区初始化:通过
memset清空接收缓冲区 - 数据接收:使用
recv系统调用读取网络数据 - 连接状态判断:
- 返回正数:成功接收的字节数
- 返回0:对端正常关闭连接
- 返回-1:发生系统错误
(五)、sendhead_report()
一、功能分析:该函数用于发送HTTP响应头,是Web服务器的核心组件,主要功能包括:
- 状态行生成:根据
aim参数生成200 OK或404 Not Found - 基础头信息:添加Server和Connection头部
- 数据发送:通过
send系统调用发送响应头
(六)sendbody_report()
一、功能分析:该函数用于发送HTTP响应正文,是静态资源服务的核心组件,主要功能包括:
- 文件读取:通过
open+read读取本地文件 - 网络传输:使用
send逐块发送文件内容 - 资源管理:正确关闭文件描述符
(七)analysis_hettp()
一、基本功能:该函数实现了一个简易的HTTP请求解析器,核心功能包括:
- 正文定位:通过查找
\r\n\r\n分隔符确定请求正文起始位置 - 请求行解析:提取HTTP方法(GET/POST等)和请求路径
- 数据结构填充:将解析结果存储到
request_t结构体中
二、代码亮点
- 高效定位策略:直接使用
strstr快速定位头部与正文分界点 - 低内存消耗:通过指针引用原始数据,避免内存拷贝
(八)analysis_idkey()
一、基本功能
analysis_idkey 函数负责处理用户登录、注册和注销操作,实现对用户身份的验证和管理。以下是其基本功能的详细描述:
- 数据库连接与表创建:
- 打开名为
id_key.db的 SQLite 数据库,若不存在则创建。 - 检查是否存在
id_key表,若不存在则创建该表,用于存储用户的身份信息,包括用户ID、姓名和密钥。
- 打开名为
- 用户信息解析:
- 从 HTTP 请求的正文内容中解析出用户提交的 ID 和 KEY(密钥),存储在
word结构体中,以便后续进行身份验证和操作。
- 从 HTTP 请求的正文内容中解析出用户提交的 ID 和 KEY(密钥),存储在
- 注册操作处理:
- 当用户请求注册(
/register)时,查询数据库中是否已存在相同的 ID。 - 若存在,返回注册失败的标识;若不存在,插入新用户信息到数据库,返回注册成功的标识。
- 当用户请求注册(
- 注销操作处理:
- 当用户请求注销(
/unregister)时,验证用户的身份信息是否匹配。 - 若匹配,从数据库中删除该用户记录,返回注销成功的标识;若不匹配,返回相应的错误标识。
- 当用户请求注销(
- 登录操作处理:
- 当用户请求登录(
/login)时,验证用户提交的 ID 和 KEY 是否匹配。 - 若匹配,返回登录成功的标识;若不匹配,返回密码错误的标识。
- 当用户请求登录(
(九)callback_1()
一、功能分析:该回调函数用于验证数据库查询结果中的用户凭证,主要完成以下功能:
- 状态初始化:默认设置验证状态为0(用户不存在)
- 字段比对:
- 第一列(
pcontent[0])与用户ID比对 - 第二列(
pcontent[1])与用户密钥比对
- 第一列(
- 状态码设定:
- 1:ID与密钥均匹配
- 2:ID存在但密钥不匹配
- 0:ID不存在
(十)、merchandise_dispaly()
1.1 数据驱动型动态渲染机制
本功能采用三层处理架构实现商品展示页面的动态生成:
-
输入解析层:
- 通过
strtok函数实现参数语义分割,提取URL中的商品关键词(如word="电子产品:手机"解析为"手机") - 建立参数白名单机制,过滤非字母数字字符,防范路径遍历攻击
- 通过
-
数据交互层:
- 使用SQLite3 API建立持久化数据库连接(
sqlite3_open) - 构造参数化SQL查询语句(
SELECT goods_name FROM goods WHERE name LIKE ?1%) - 实现分页查询优化,支持
LIMIT 20 OFFSET 0语法
- 使用SQLite3 API建立持久化数据库连接(
-
视图渲染层:
- 基于响应式布局模板生成HTML5文档
- 集成CSS3动画效果(hover缩放、渐变背景)
- 自动注入Schema.org微数据增强SEO
2.1 动态内容生成引擎
// 模板渲染核心逻辑
void render_product_card(sqlite3_context *ctx, int cnt, const Product *product) {char buffer[1024];snprintf(buffer, sizeof(buffer), "<div class='product' itemscope itemtype='http://schema.org/Product'>"" <meta itemprop='sku' content='%s'/>"" <img src='%s' alt='%s' itemprop='image'/>"" <div class='info'>"" <h2 itemprop='name'>%s</h2>"" </div>""</div>",product->sku, product->image_url, product->name, product->name);sqlite3_result_text(ctx, buffer, -1, SQLITE_TRANSIENT);
}
采用内存安全的格式化输出,集成结构化数据标记
(十一)callback_2()
一、核心功能模块:数据库查询结果处理器
1.1 模块概述 本模块作为SQLite数据库操作的回调函数callback_2,专为商品信息查询场景设计,实现数据库记录到网页元素的动态转换。通过结构化处理查询结果集,自动生成符合前端展示规范的HTML代码片段。
1.2 参数解析 ▫ void *arg:保留参数(当前实现未启用) ▫ int column:结果集的列总数 ▫ char **pcontent:列值指针数组(索引对应数据库字段) ▫ char **ptitle:列标题指针数组(本实现未使用)
1.3 执行流程
- 模板注入:使用sprintf进行字符串格式化,将商品元数据动态插入预置HTML模板
- 商品ID绑定详情页路由参数
- 图片资源路径动态渲染
- 商品名称双平台展示(Alt文本与可见文本)
- 缓存管理:生成的HTML片段存入tmp_goods数组,计数器cnt实现顺序写入
1.4 模板架构
<!-- 商品展示容器 -->
<div id="products"><!-- 独立商品单元 --><div class="product"><!-- 详情页深度链接 --><a href="/detail?proid=%s"><!-- 响应式图片元素 --><img src="%s" alt="%s"></a><!-- 商品文本信息 --><p>%s</p></div>
</div>
二、技术优势分析
2.1 动态内容渲染机制 ▪ 数据驱动:通过数据库查询结果实时生成视图层代码,突破静态页面局限性 ▪ 模板引擎:采用轻量级字符串格式化替代重型模板引擎,平衡性能与维护成本 ▪ 双端解耦:建立数据库schema与展示层间的自动映射关系,提升系统可扩展性
2.2 高效数据绑定方案 ▪ 内存优化:O(1)复杂度完成单条记录转换,避免中间数据结构产生额外开销 ▪ 类型安全:基于列序的强类型绑定,确保字段与模板占位符准确对应 ▪ 批量处理:数组缓存机制支持大规模数据集的渐进式渲染
2.3 模块化工程实践 ▪ 接口隔离:严格遵循sqlite3_exec回调规范,实现数据库操作与业务逻辑解耦 ▪ 状态封装:通过静态变量tmp_goods和cnt维护渲染上下文,避免全局污染 ▪ 热插拔设计:独立函数体结构支持快速迭代,不影响主查询流程
(十二)shopping()
一、基本功能
shopping 函数的主要功能是根据用户请求的商品编号,从数据库中查询商品详情,并动态生成一个包含商品信息的 HTML 页面。以下是其基本功能的详细描述:
-
参数解析与文件操作
-
接收两个参数:
pcontent(包含商品编号的字符串)和filepath(存储生成的 HTML 文件路径)。 -
解析
pcontent提取商品编号。 -
打开或创建
shop.html文件,准备写入动态生成的商品详情页面内容。
-
-
数据库连接与查询
-
连接到 SQLite 数据库
shoping.db。 -
构造 SQL 查询语句,根据商品编号查询商品的图片路径、名称、市场价格、零售价和关键词等信息。
-
-
HTML 页面生成
-
将查询到的商品信息填充到预先定义好的 HTML 模板中。
-
生成的 HTML 页面包含头部信息、样式表、商品图片展示、商品详情描述以及购买按钮等元素。
-
将生成的 HTML 内容写入
shop.html文件,并将文件路径存储到filepath参数中。
-
二、亮点
-
动态内容生成
-
根据用户请求的商品编号动态生成商品详情页面,实现了数据驱动的网页内容展示。
-
能够实时反映数据库中的最新商品信息,提高了网站的灵活性和可维护性。
-
-
用户体验优化
-
生成的 HTML 页面采用了美观的布局和样式设计,如商品图片展示、详细信息描述和醒目的购买按钮等。
-
提升了用户的浏览和购买体验。
-
-
模块化设计
-
将商品详情页面的生成过程分解为多个步骤,包括参数解析、数据库查询、HTML 模板填充和文件操作等。
-
各步骤之间相互独立又紧密协作,便于代码的维护和功能扩展。
-
(十三)callback_3
一、基本功能
callback_3 函数是一个用于处理从数据库查询到的商品详情数据的回调函数。其主要功能是将这些数据格式化为 HTML 代码片段,以便在商品详情页面中展示。以下是其基本功能的详细描述:
- 参数解析:
void *arg:用户自定义参数,本函数中未使用。int column:表示查询结果中的列数。char **pcontent:指向查询结果内容的指针数组,每个元素对应一列的值。char **ptitle:指向列标题的指针数组,本函数中未使用。
- HTML 代码生成:
- 使用
sprintf函数将查询结果中的商品图片路径、名称、市场价格、零售价和关键词等信息动态插入到预先定义好的 HTML 模板中。 - 生成的商品详情 HTML 代码片段存储在
tmp_goods[0]数组中,后续会被写入到商品详情页面的 HTML 文件中。
- 使用
(十四)send_http()
一、基本功能
send_http 函数作为 Web 服务器的核心组件,负责根据客户端的 HTTP 请求生成并发送相应的 HTTP 响应。以下是其基本功能的详细描述:
- 请求方法判断:
- 函数首先解析客户端请求的方法(POST 或 GET),并据此执行不同的处理流程。
- POST 请求处理:
- 对于
/api/search路径的 POST 请求,调用merchandise_display函数生成商品展示页面,并根据其返回值判断是否成功。若失败,则设置 404 错误响应。 - 对于其他 POST 请求,调用
analysis_idkey函数处理用户身份验证或管理操作,并根据返回值动态设置响应页面,如登录、注册、注销成功等对应的 HTML 文件路径。
- 对于
- GET 请求处理:
- 对于根路径
/的 GET 请求,直接设置响应为首页index.html。 - 对于以
/?ecs=开头的 GET 请求,调用shopping函数生成商品详情页面,并根据返回值判断是否成功。 - 对于其他 GET 请求,尝试直接访问请求路径对应的文件。若文件不存在,则设置 404 错误响应。
- 对于根路径
- 响应生成与发送:
- 根据处理结果,调用
sendhead_report函数发送 HTTP 响应头,设置状态码为 200 OK 或 404 Not Found。 - 若状态码为 404,则直接返回响应。否则,调用
sendbody_report函数发送 HTTP 响应正文,将生成的 HTML 文件内容发送给客户端。
- 根据处理结果,调用
- 内存管理:
- 函数为
id_key结构体的id和key字段分配内存,并在结束前确保这些内存被正确释放,防止内存泄漏。
- 函数为
二、亮点
- 模块化设计与复用:
- 通过调用多个自定义函数处理不同请求类型和业务逻辑,实现了代码的模块化,提高了可读性、可维护性和复用性。
- 灵活的请求处理:
- 能够根据请求方法、路径和业务逻辑动态生成响应内容,支持多种用户操作场景。
- 错误处理与用户反馈:
- 对可能出现的错误情况进行判断和处理,如文件不存在、函数调用失败等,返回相应的 HTTP 状态码和错误页面,提供友好用户反馈。
(十五)mian()
main 函数作为 Web 服务器程序的入口和核心控制中心,承载着初始化服务器、处理客户端连接以及调度其他功能模块的重任。以下是其基本功能的详细描述:
- 服务器初始化:
- 调用
creat_socket函数创建一个服务器套接字,并将其绑定到指定的 IP 地址和端口上。 - 将服务器套接字设置为监听模式,准备接收来自客户端的连接请求。
- 调用
- epoll 创建与初始化:
- 创建一个 epoll 实例,用于高效地监听多个文件描述符的 I/O 事件。
- 将服务器套接字添加到 epoll 的监听列表中,并设置关注的事件类型为可读事件(即有新连接到来)。
- 事件循环与连接处理:
- 进入一个无限循环,使用
epoll_wait函数等待 I/O 事件的发生。 - 根据
epoll_wait返回的就绪事件列表,区分是服务器套接字上有新连接到来,还是客户端套接字上有数据可读。
- 进入一个无限循环,使用
- 新连接处理:
- 当有新客户端连接到来时,接受该连接并获取客户端套接字。
- 将客户端套接字添加到 epoll 的监听列表中,并设置关注的事件类型为可读事件(即客户端发送了数据)。
- HTTP 请求接收与处理:
- 对于客户端套接字上的可读事件,调用
recv_http函数接收 HTTP 请求数据。 - 如果接收成功,则解析 HTTP 请求,并根据请求调用
send_http函数生成并发送相应的 HTTP 响应。 - 如果接收失败或客户端连接关闭,则清理相关的资源,如关闭套接字、从 epoll 监听列表中删除文件描述符等。
- 对于客户端套接字上的可读事件,调用
- 资源清理:
- 在处理完每个客户端请求后,关闭客户端套接字,并从 epoll 监听列表中删除对应的文件描述符。
- 在服务器程序退出前,关闭服务器套接字,并销毁 epoll 实例,确保资源得到正确释放。
二、亮点
- 高效的 I/O 多路复用:
- 采用 epoll 机制进行 I/O 事件监听和处理,能够高效地处理多个客户端连接,提高服务器的并发处理能力。
- 模块化设计与清晰的控制流:
- 将服务器的功能划分为多个模块,通过函数调用进行协作,使得代码结构清晰、易于理解和维护。
- 健壮的错误处理机制:
- 在关键步骤进行错误检查和处理,确保服务器在遇到异常情况时能够优雅地恢复,提高程序的健壮性和稳定性。
- 资源管理与泄漏防范:
- 对文件描述符、内存等资源进行合理管理,避免资源泄漏问题,保证服务器的长期稳定运行。
相关文章:
Linux———迷你在线商城
一、项目简介 1、演示视频 商城项目演示视频 2、功能概述 用户认证管理:支持用户注册、登录和注销操作,通过SQLite数据库存储用户信息(如用户名和密码),确保用户数据的安全性和完整性。 商品展示:能够根据…...
城市林业的无声革命:人工智能与古老生态学如何重新设计城市
城市林业的无声革命:人工智能与古老生态学如何重新设计城市 在摩天大楼的阴影下,一场静悄悄的变革正在发生——它融合了硅芯片与古老根系,算法与原住民智慧。 作者:保罗桑杜 作者利用 PicLumen 创建的图像 城市森林不再只是城市…...
Linux第七讲:基础IO
Linux第七讲:基础IO 1.什么是文件2.文件操作的复习2.1文件基本操作复习2.2将信息输出到显示器,你有哪种方法2.3stdin、stdout、stderror2.4细节问题讲解 3.系统文件IO3.1open函数使用3.1.1理解标志位3.1.2权限问题3.1.3write和read接口介绍3.1.4谈谈fd以…...
【GIT】重新初始化远程仓库
有的时候我们克隆远端仓库会出错: git clone --depth 1 git116.*.*.*:/srv/customs.git D:\dev\projects\kdy\customs11\customs Cloning into D:\dev\projects\kdy\customs11\customs... remote: Enumerating objects: 1494, done. remote: Counting objects: 100…...
力扣热题 100:多维动态规划专题经典题解析
系列文章目录 力扣热题 100:哈希专题三道题详细解析(JAVA) 力扣热题 100:双指针专题四道题详细解析(JAVA) 力扣热题 100:滑动窗口专题两道题详细解析(JAVA) 力扣热题 100:子串专题三道题详细解析(JAVA) 力…...
【Unity】在项目中使用VisualScripting
1. 在packagemanager添加插件 2. 在设置中进行初始化。 Edit > Project Settings > Visual Scripting Initialize Visual Scripting You must select Initialize Visual Scripting the first time you use Visual Scripting in a project. Initialize Visual Scripting …...
Pytest自动化测试框架pytest-xdist分布式测试插件
平常我们功能测试用例非常多时,比如有1千条用例,假设每个用例执行需要1分钟,如果单个测试人员执行需要1000分钟才能跑完; 当项目非常紧急时,会需要协调多个测试资源来把任务分成两部分,于是执行时间缩短一…...
文件解析漏洞靶场解析全集详解
lls解析漏洞 目录解析 在网站的下面将一个1.asp文件夹,在里面建一个2.txt文件在里面写入<% -now()%>这个显示时间的代码,再将文件名改为2.jpg。 发现2.jpg文件以asp形式执行 畸形文件解析 将2.jpg文件移到网站的下面与1.asp并列,将名…...
C语言数据结构:数组
1. 数组(Array) 1.1 定义 数组是一种线性数据结构,由相同类型的元素组成,这些元素在内存中按顺序存储。数组的大小在声明时确定,且不可动态改变。 1.2 类型细分 根据维度和用途,数组可以分为以下几种类型…...
LeetCode-移动零
一、题目描述 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0]示例 2: 输入: nums […...
PDF Reader
Acrobat Reader...
孔夫子根剧关键字获取在售商品 API
要使用孔夫子旧书网根据关键字获取在售商品的 API,需要以下步骤1: 注册与认证:在孔夫子旧书网的开发者平台注册一个账号,登录后创建一个新的应用,以获取 API 密钥(key)和调用密钥(s…...
Qt的QToolButton设置弹出QMenu下拉菜单
在Qt中,使用QToolButton显示下拉菜单可以通过以下步骤实现: 基本实现步骤 创建QToolButton:实例化一个QToolButton对象。创建QMenu:实例化一个QMenu作为下拉菜单。添加菜单项:通过QMenu::addAction方法添加动作&…...
【一次成功】Win10本地化单机部署k8s v1.31.2版本及可视化看板
【一次成功】Win10本地化单机部署k8s v1.31.2版本及可视化看板 零、安装清单一、安装Docker Desktop软件1.1 安装前<启用或关闭Windows功能> 中的描红的三项1.2 查看软件版本1.3 配置Docker镜像 二、更新装Docker Desktop三、安装 k8s3.1 点击启动安装3.2 查看状态3.3 查…...
Elasticsearch Java High Level Client [7.17] 使用
es 的 HighLevelClient存在es源代码的引用,结合springboot使用时,会存在es版本的冲突,这里记录下解决冲突和使用方式(es已经不建议使用这个了)。 注意es服务端的版本需要与client的版本对齐,否则返回数据可…...
Vue项目搜索引擎优化(SEO)终极指南:从原理到实战
文章目录 1. SEO基础与Vue项目的挑战1.1 为什么Vue项目需要特殊SEO处理?1.2 搜索引擎爬虫工作原理 2. 服务端渲染(SSR)解决方案2.1 Nuxt.js框架实战原理代码实现流程图 2.2 自定义SSR实现 3. 静态站点生成(SSG)技术3.1…...
LeetCode:93. 复原 IP 地址(DFS Java)
目录 93. 复原 IP 地址 题目描述: 实现代码与解析: DFS 原理思路: 93. 复原 IP 地址 题目描述: 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0)…...
Spring Boot 中实现全局 Token 验证的两种方式
文章目录 学习文章:Spring Boot 中实现全局 Token 验证的两种方式 一、为什么需要全局 Token 验证?二、使用拦截器实现全局 Token 验证1. 创建 Token 验证拦截器2. 注册拦截器3. 测试拦截器 三、使用过滤器实现全局 Token 验证1. 创建 Token 验证过滤器2…...
【性能测试】Jmeter下载安装、环境配置-小白使用手册(1)
本篇文章主要包含Jmeter的下载安装、环境配置 添加线程组、结果树、HTTP请求、请求头设置。JSON提取器的使用,用户自定义变量 目录 一:引入 1:软件介绍 2:工作原理 3:安装Jmeter 4:启动方式 …...
【Matlab仿真】如何解决三相交流信号源输出波形失真问题?
问题描述 如标题所示,在搭建simulink模型过程中,明明模型搭建的没有问题,但是输出的波形却不是理想的正弦波,影响问题分析。 问题分析 以三相交流信号源输出波形为例,输出信号理应为三相正弦量,但是仿真…...
Fiora聊天系统本地化部署:Docker搭建与远程在线聊天的实践指南
文章目录 前言1.关于Fiora2.安装Docker3.本地部署Fiora4.使用Fiora5.cpolar内网穿透工具安装6.创建远程连接公网地址7.固定Uptime Kuma公网地址 前言 这个通讯软件泛滥的时代,每天都在刷着同样的朋友圈、看着千篇一律的表情包,是不是觉得有点腻了&#…...
metersphere接口测试(1)使用MeterSphere进行接口测试
文章目录 前言接口文档单接口测试环境配置梳理接口测试场景测试接口 接口自动化怎么写复用性高的自动化测试用例 总结 前言 大汉堡工作第203天,本篇记录我第一次接触接口测试任务,最近有些懈怠啊~ 接口文档 首先就是接口地址,接口测试时用…...
【实战ES】实战 Elasticsearch:快速上手与深度实践-8.2.2成本优化与冷热数据分离
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 8.2.2AWS OpenSearch Serverless 成本优化与冷热数据分离深度实践1. 成本构成分析与优化机会识别1.1 Serverless模式成本分布1.2 冷热数据特征分析数据特征矩阵 2. 冷热数据…...
MTK Android12 安装app添加密码锁限制
提示:通过安装前输入密码的需求,来熟悉了解PMS 基本的安装流程 文章目录 一、需求实现需求原因提醒 二、UML图-类图三、参考资料四、实现效果五、需求修改点修改文件及路径具体修改内容 六、源码流程分析PMS的复杂性代码量实现aidl 接口PackageManagerSe…...
Redis 集合(Set)
Redis 集合(Set) Redis 是一款高性能的键值数据库,以其高性能、易用性以及丰富的数据结构而广受欢迎。在 Redis 中,集合(Set)是一种重要的数据结构,它支持多种操作,如添加、删除、查找元素,以及集合间的运算。本文将详细介绍 Redis 集合的特点、操作和应用场景。 Redi…...
[数据结构]堆详解
目录 一、堆的概念及结构 二、堆的实现 1.堆的定义 2堆的初始化 3堆的插入 编辑 4.堆的删除 5堆的其他操作 6代码合集 三、堆的应用 (一)堆排序(重点) (二)TOP-K问题 一、堆的概念及结构 堆的…...
基于Python+Vue开发的旅游景区管理系统源码+运行步骤
项目简介 该项目是基于PythonVue开发的旅游景区管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的旅游景…...
SpringBoot使用Logback日志框架与综合实例
日志框架的使用,系列文章: 《SpringBoot使用Logback日志框架与综合实例》 《SpringBoot使用@Slf4j注解实现日志输出》 《Log4j2日志记录框架的使用教程与简单实例》 《SpringBoot使用AspectJ实现AOP记录接口:请求日志、响应日志、异常日志》 《SpringBoot使用AspectJ的@Arou…...
LInux中常用的网络命令
配置 IP 地址 1.1 配置 IP 地址 IP 地址是计算机在互联网中唯一的地址编码。每台计算机如果需要接入网络和其他计算机进行数据通信,就必须配置唯一的公网 IP 地址。 配置 IP 地址有两种方法: 1)setup 工具 2)vi /etc/sysconf…...
怎么实现: 大语言模型微调案例
怎么实现: 大语言模型微调案例 目录 怎么实现: 大语言模型微调案例输入一个反常识的问题:首都在北京天安门之后对输出模型进行测试:首都在北京天安门微调代码:测试微调模型代码:微调输出模型结构输出模型参数大小对比Qwen 2.5_0.5:53MB输出模型:951MB 是一样的,没有进行…...
