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

每日一题——字母异位词分组

字母异位词分组

    • 1. 问题描述
      • 示例
      • 提示
    • 2. 解题思路
      • 具体步骤
    • 3. 代码实现
    • 4. 代码解析
      • (1)排序法
      • (2)哈希表存储
      • (3)动态内存分配
      • (4)释放内存
      • 1. `HASH_FIND_STR` 的作用
      • 2. 宏的定义
      • 4. 详细解释
        • (1)`head` 参数
        • (2)`findstr` 参数
        • (3)`out` 参数
    • 5. 总结

1. 问题描述

字母异位词 是指通过重新排列源单词的所有字母得到的一个新单词。例如,“eat” 和 “tea” 是字母异位词。

题目要求:给定一个字符串数组,将字母异位词组合在一起,并以任意顺序返回结果列表。

示例

示例 1

  • 输入:strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
  • 输出:[["bat"], ["nat", "tan"], ["ate", "eat", "tea"]]

示例 2

  • 输入:strs = [""]
  • 输出:[[""]]

示例 3

  • 输入:strs = ["a"]
  • 输出:[["a"]]

提示

  • 1 <= strs.length <= 10^4
  • 0 <= strs[i].length <= 100
  • strs[i] 仅包含小写字母

2. 解题思路

解决这个问题的关键在于如何快速判断两个字符串是否是字母异位词。一种有效的方法是:

  1. 排序法:将每个字符串排序后,字母异位词的排序结果相同。
  2. 哈希表:使用哈希表存储排序后的字符串作为键,原始字符串作为值。

具体步骤

  1. 排序字符串:对每个字符串进行排序,得到其“标准形式”。
  2. 哈希表存储:将排序后的字符串作为键,原始字符串作为值存储到哈希表中。
  3. 分组:根据哈希表的键将字符串分组。
  4. 返回结果:将分组结果转换为所需的格式。

3. 代码实现

以下是使用C语言实现的完整代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <uthash.h>// 定义每组最多字符串数和每个字符串的最大长度
#define MAX_CNT 10000
#define MAX_LEN 101// 比较函数,用于 qsort 对字符数组进行排序
int cmp(const void *a, const void *b) {char *aa = (char *)a;char *bb = (char *)b;return (*aa - *bb);  // 按字典序比较字符
}// 哈希表结构体
typedef struct HashMap {char *key;  // 排序后的字符串作为键,用字符串作为键。char array[MAX_CNT][MAX_LEN];  // 存储属于同一组的原始字符串int num;  // 当前组的字符串数量UT_hash_handle hh;  // 哈希表句柄,用于管理哈希表
} HashMap;HashMap *hashTable = NULL;  // 哈希表指针
int g_groupSize = 0;  // 分组数量// 向哈希表中添加分组
void AddGroup(char *key, char *member) {HashMap *hashNode = NULL;HASH_FIND_STR(hashTable, key, hashNode);  // 在哈希表中查找键为 key 的节点if (hashNode == NULL) {// 如果键不存在,说明找到个新的字符串组,则创建新的哈希表节点hashNode = (HashMap *)calloc(1, sizeof(HashMap));hashNode->key = (char *)calloc(strlen(key) + 1, sizeof(char));  // 分配内存存储键strcpy(hashNode->key, key);  // 复制键值hashNode->num = 1;  // 初始化当前组的字符串数量为 1strcpy(hashNode->array[0], member);  // 将第一个字符串存储到数组中HASH_ADD_STR(hashTable, key, hashNode);  // 将新节点添加到哈希表中g_groupSize++;  // 分组数量加 1} else {// 如果键已存在,则将新字符串添加到当前组中strcpy(hashNode->array[hashNode->num], member);  // 复制字符串到数组hashNode->num += 1;  // 当前组的字符串数量加 1}
}// 释放哈希表内存
void FreeHashTable() {HashMap *hashNode, *tempNode;HASH_ITER(hh, hashTable, hashNode, tempNode) {  // 遍历哈希表free(hashNode->key);  // 释放键的内存HASH_DEL(hashTable, hashNode);  // 从哈希表中删除节点}
}// 主函数:分组字母异位词
char ***groupAnagrams(char **strs, int strsSize, int *returnSize, int **returnColumnSizes) {hashTable = NULL;  // 初始化哈希表为空g_groupSize = 0;  // 初始化分组数量为 0// 遍历字符串数组,实现分组for (int i = 0; i < strsSize; i++) {char *curStr = strs[i];  // 当前处理的字符串char *sortStr = (char *)calloc(strlen(curStr) + 1, sizeof(char));  // 分配内存存储排序后的字符串strcpy(sortStr, curStr);  // 复制当前字符串到 sortStrqsort(sortStr, strlen(sortStr), sizeof(char), cmp);  // 对 sortStr 进行排序AddGroup(sortStr, curStr);  // 将排序后的字符串作为键,将当前字符串归类到对应的分组中free(sortStr);  // 释放 sortStr 的内存}// 分组后填写结果*returnSize = g_groupSize;  // 设置返回的分组数量*returnColumnSizes = (int *)calloc(g_groupSize, sizeof(int));  // 分配返回的列大小数组char ***ret = (char ***)calloc(g_groupSize, sizeof(char **));  // 分配返回的二维数组int index = 0;  // 用于记录当前处理的分组索引HashMap *cur, *temp;HASH_ITER(hh, hashTable, cur, temp) {  // 遍历哈希表(*returnColumnSizes)[index] = cur->num;  // 设置当前分组的列大小ret[index] = (char **)calloc(cur->num, sizeof(char *));  // 分配当前分组的二维数组for (int i = 0; i < cur->num; i++) {ret[index][i] = (char *)calloc(strlen(cur->key) + 1, sizeof(char));  // 分配每个字符串的内存strcpy(ret[index][i], cur->array[i]);  // 复制字符串到结果数组中}index++;  // 处理下一个分组}FreeHashTable();  // 释放哈希表内存return ret;  // 返回结果
}// 测试函数
int main() {char *strs[] = {"eat", "tea", "tan", "ate", "nat", "bat"};  // 输入字符串数组int strsSize = sizeof(strs) / sizeof(strs[0]);  // 字符串数组的大小int returnSize = 0;  // 返回的分组数量int *returnColumnSizes;  // 每个分组的大小数组char ***result = groupAnagrams(strs, strsSize, &returnSize, &returnColumnSizes);  // 调用函数// 打印结果for (int i = 0; i < returnSize; i++) {for (int j = 0; j < returnColumnSizes[i]; j++) {printf("%s ", result[i][j]);  // 打印每个分组的字符串}printf("\n");  // 换行}return 0;  // 程序结束
}
// 作者:yeyeLatte
// 链接:https://leetcode.cn/problems/group-anagrams/solutions/2979357/zi-mu-yi-wei-ci-fen-zu-cyu-yan-utha-xi-b-1i0m/
// 来源:力扣(LeetCode)
// 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

4. 代码解析

(1)排序法

通过将字符串排序,将字母异位词转换为相同的“标准形式”。例如:

  • "eat" 排序后为 "aet"
  • "tea" 排序后也为 "aet"

(2)哈希表存储

使用UT_hash库管理哈希表,以排序后的字符串作为键,原始字符串作为值存储。这样可以快速查找和分组字母异位词。

(3)动态内存分配

为了支持任意长度的输入,代码中使用了动态内存分配:

  • 每个分组的字符串存储在二维数组中。
  • 分组数量和每个分组的大小动态分配。

(4)释放内存

在函数结束时,释放所有动态分配的内存,避免内存泄漏。
HASH_FIND_STRUTHash 库中用于在哈希表中查找特定键的宏。UTHash 是一个轻量级的哈希表库,广泛用于 C 语言项目中,用于实现哈希表功能。

1. HASH_FIND_STR 的作用

HASH_FIND_STR 用于在哈希表中查找是否存在某个键(key),并返回对应的哈希表节点(hashNode)。如果找到匹配的键,则将节点的指针存储到 hashNode 中;如果没有找到,则 hashNodeNULL

2. 宏的定义

HASH_FIND_STR(head, findstr, out)
  • head:指向哈希表的头指针(通常是全局变量或局部变量)。
  • findstr:要查找的键(key),类型为 const char*
  • out:输出参数,用于存储找到的哈希表节点的指针。如果未找到,则为 NULL

4. 详细解释

(1)head 参数

head 是指向哈希表头的指针。在 UTHash 中,哈希表的头指针用于管理整个哈希表。例如:

HashNode *hashTable = NULL;  // 初始化为空
(2)findstr 参数

findstr 是要查找的键,类型为 const char*。例如:

const char *key = "exampleKey";
HASH_FIND_STR(hashTable, key, hashNode);
(3)out 参数

out 是输出参数,用于存储找到的哈希表节点的指针。如果找到匹配的键,则 out 指向对应的节点;否则,outNULL。例如:

5. 总结

本题的关键在于如何快速判断两个字符串是否是字母异位词。通过排序法和哈希表,可以高效地实现分组功能。这种方法的时间复杂度为O(n * k * log k),其中n是字符串数量,k是字符串的最大长度。
这题确实挺难的,反正让我写肯定写不出来,尤其是C语言的。建议先写C++版本的,容易理解很多,先理解整体思路。要知道这个整体上只是用一个字符串当作一个键,用一个字符串数组代替值。相当于上升一个维度。难度提升很大。

相关文章:

每日一题——字母异位词分组

字母异位词分组 1. 问题描述示例提示 2. 解题思路具体步骤 3. 代码实现4. 代码解析&#xff08;1&#xff09;排序法&#xff08;2&#xff09;哈希表存储&#xff08;3&#xff09;动态内存分配&#xff08;4&#xff09;释放内存1. HASH_FIND_STR 的作用2. 宏的定义4. 详细解…...

力扣 807. 保持城市天际线(Java实现)

题目分析 给定一个二维数组&#xff0c;行列长度相等&#xff0c;要保持四个方向仍一观察高度不变的情况下&#xff0c;适当添加建筑高度&#xff0c;问最大高度增量和。所谓四个方向高度不变的增量&#xff0c;其实就是arr[i][j]与同i行最大值同j列最大值之间的最小值的差&…...

【视频2 - 4】初识操作系统,Linux,虚拟机

&#x1f4dd;前言说明&#xff1a; ●本专栏主要记录本人的基础算法学习以及LeetCode刷题记录&#xff0c;主要跟随B站博主灵茶山的视频进行学习&#xff0c;专栏中的每一篇文章对应B站博主灵茶山的一个视频 ●题目主要为B站视频内涉及的题目以及B站视频中提到的“课后作业”。…...

重启securecmd失败

重启securecmd失败 问题描述&#xff1a;KES集群部署工具中&#xff0c;节点管理里新增节点下一步报错无法检查securecmd端口进程情况&#xff0c;安装依赖包后再次下一步提示如下报错&#xff1a; 解决办法&#xff1a; [rootlocalhost cluster]# cd /home/kingbase/cluster…...

python学习四

python运算符与表达式 表达式: Python中的表达式是一种计算结果的代码片段。它可以包 含变量、运算符、常数和函数调用,用于执行各种数学、逻辑 和功能操作 算术运算符: 比较(关系)运算符: 赋值运算符: 逻辑运算符: 位运算符: 成员运算符: 身份运算符 <...

LeetCode 236.二叉树的最近公共祖先

题目&#xff1a; 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08;一个节…...

react 中,使用antd layout布局中的sider 做sider的展开和收起功能

一 话不多说&#xff0c;先展示效果&#xff1a; 展开时&#xff1a; 收起时&#xff1a; 二、实现代码如下 react 文件 import React, {useState} from react; import {Layout} from antd; import styles from "./index.module.less"; // 这个是样式文件&#…...

2025-02-26 学习记录--C/C++-C语言 整数格式说明符

合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; C语言 整数格式说明符 【例如 】&#x1f380; &#xff1a;在 C 语言中&#xff0c;%ld 是 printf 或 scanf 等格式化输入输出函…...

绕过过滤order by

一、常见绕过技术 1、注释符截断 利用注释符&#xff08;如 --、#&#xff09;截断后续查询&#xff0c;消除过滤逻辑的影响。 ORDER BY 1-- 若原查询为 SELECT * FROM table ORDER BY 用户输入&#xff0c;注入后可能忽略后续过滤逻辑。 2、大小写混淆/编码绕过 若过滤是大…...

NLP09-加强1-对比SVM

支持向量机&#xff08;SVM&#xff09; &#xff08;一&#xff09;导入 SVM 相关库 &#xff08;二&#xff09; 修改模型初始化 &#xff08;三&#xff09; 比较 朴素贝叶斯分类器 SVM分类器 支持向量机&#xff08;SVM&#xff09; 代码修改基于NLP09-朴素贝叶斯问句…...

STM32——HAL库开发笔记22(定时器3—呼吸灯实验)(参考来源:b站铁头山羊)

本文利用前几节所学知识来实现一个呼吸灯实验&#xff1a;两颗led灯交替呼吸。 一、STM32CubeMX配置 step1&#xff1a;配置调试接口 step2&#xff1a;配置定时器 定时器1位于APB2总线上&#xff0c;如上图所示。 step3&#xff1a;配置时基单元 按照下图配置 时钟来源配置…...

Vue3+TypeScript 封装一个好用的防抖节流自定义指令

一、前言&#xff1a;为什么需要防抖节流&#xff1f; 在前端开发中&#xff0c;高频触发的事件&#xff08;如滚动、输入、点击等&#xff09;容易导致性能问题。防抖&#xff08;debounce&#xff09; 和 节流&#xff08;throttle&#xff09; 是两种常用的优化手段&#x…...

2025年中国最新安防行业数字安全现状与未来趋势:内生安全成核心共识,从零基础到精通,收藏这篇就够了!

本次&#xff0c;我将为大家剖析由**安奇信发布的《中国安防行业数字安全建设与发展情况白皮书**》。该报告共_37_页&#xff0c;涵盖了众多重要信息和核心论点。若您希望深入了解&#xff0c;请参阅原报告&#xff0c;获取方法已在文档的最后部分提供。 报告核心内容 随着数字…...

项目管理的新理念主要有哪些

随着时代的发展和市场需求的变化&#xff0c;项目管理的理念也在不断地创新和演变。项目管理的新理念包括敏捷管理、精益管理、知识管理、变革管理、协作式管理和项目生命周期管理等。这些新理念不仅能够提高项目的管理效率&#xff0c;还能帮助团队在复杂的环境中更好地应对挑…...

Spring如何解决循环依赖?

一、Spring的三级缓存 关键就是提前暴露未完全创建完毕的Bean。 三级缓存来解决循环依赖&#xff1a; 一级缓存&#xff1a;用于存储完全初始化完成的单例Bean。 二级缓存&#xff1a;用于存储尚未完全初始化&#xff0c;但已实例化的Bean&#xff0c;用于提前暴露对象&#x…...

vscode java环境中文乱码的问题

先说我的结论&#xff1a; 由于我的系统是windows的&#xff0c;所以vscode使用的是默认gbk的编码进行的。 但是我的目的是全部都使用utf-8&#xff0c;因为我的程序始终是要去linux上去运行的&#xff0c;总不能在本地是好的&#xff0c;然后到服务器上就不行了吧&#xff0c;…...

十、大数据资源平台功能架构

一、大数据资源平台的功能架构图总体结构 大数据资源平台功能架构图 关键组件&#xff1a; 1.用户&#xff08;顶行&#xff09; 此部分标识与平台交互的各种利益相关者。 其中包括&#xff1a; 市领导 各部门分析师 区政府 外部组织 公民 开发人员 运营经理 2.功能模…...

OpenEuler学习笔记(三十五):搭建代码托管服务器

以下是主流的代码托管软件分类及推荐&#xff0c;涵盖自托管和云端方案&#xff0c;您可根据团队规模、功能需求及资源情况选择&#xff1a; 一、自托管代码托管平台&#xff08;可私有部署&#xff09; 1. GitLab 简介: 功能全面的 DevOps 平台&#xff0c;支持代码托管、C…...

使用Spring AI调用Ollama的DeepSeek模型实现结构化输出

在 Docker 环境中部署 Ollama 并使用 Spring AI 框架实现结构化输出&#xff0c;你可以按照以下步骤进行操作&#xff1a; 1. 部署 Ollama 模型 首先&#xff0c;需要在 Docker 中部署 Ollama 并下载 deepseek-r1:1.5b 模型。 1.1 准备部署文件 version: 3.8services:ollam…...

微信小程序调用火山方舟(字节跳动火山引擎)中的DeepSeek大模型

微信小程序的轻量化特性与DeepSeek大模型的AI能力结合&#xff0c;可快速构建智能问答、内容生成等场景化服务。通过火山方舟平台提供的标准化接口&#xff0c;开发者无需深入算法细节即可调用模型能力。 一、注册火山引擎账号&#xff0c;创建API Key和model&#xff08;接入…...

threejs:射线拾取封装

射线拾取封装代码&#xff1a; import * as THREE from three; // 点击事件// 1.坐标转化(鼠标单击的屏幕坐标转标准设备坐标)// 2.射线计算(通过鼠标单击位置相机参数计算射线值)// 3.射线交叉计算// ObjectsArr是用来做射线拾取的对象数组&#xff0c;一个二维数组 export f…...

2024年国赛高教杯数学建模D题反潜航空深弹命中概率问题解题全过程文档及程序

2024年国赛高教杯数学建模 D题 反潜航空深弹命中概率问题 原题再现 应用深水炸弹&#xff08;简称深弹&#xff09;反潜&#xff0c;曾是二战时期反潜的重要手段&#xff0c;而随着现代军事技术的发展&#xff0c;鱼雷已成为现代反潜作战的主要武器。但是&#xff0c;在海峡或…...

爬虫框架与库

爬虫框架与库是用于网络数据抓取的核心工具&#xff0c;帮助开发者高效地从网页中提取结构化数据。 Requests&#xff1a;用于发送HTTP请求。 BeautifulSoup&#xff1a;用于解析HTML和XML。 Scrapy&#xff1a;强大的爬虫框架&#xff0c;适合大规模爬取。 Selenium&#…...

从电子管到量子计算:计算机技术的未来趋势

计算机发展的历史 自古以来人类就在不断地发明和改进计算工具,从结绳计数到算盘,计算尺,手摇计算机,直到1946年第一台电子计算机诞生,虽然电子计算机至今虽然只有短短的半个多世纪,但取得了惊人的发展吗,已经经历了五代的变革。计算机的发展和电子技术的发展密切相关,…...

LeetCode 15.三数之和

15.三数之和 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的三元组…...

c#笔记-基础知识

目录 整数 浮点 decimal bool 引用 object string 值 枚举 关键字 enum 类型转换 隐式转换 ​编辑 显式转换 装箱&#xff0c;拆箱 常量 表达式 ​编辑 字符串的使用 比较字符串 字符格式化 ​编辑 截取字符串 字符串的分割 插入字符串 删除字符串 …...

el-table fixed滚动条被遮挡导致滚动条无法拖动

/* 设置默认高度-滚动条高度 */ .el-table__fixed { height: calc(100% - 16px) !important; } .el-table__fixed:before { height: 0px; }...

如何在个人电脑本地部署Deepseek大模型?Windows10 + Ollama+Deepseek+ChatBox

第一阶段&#xff1a;下载并安装Ollama 1&#xff0c;打开浏览器&#xff0c;进入 Ollama 官方网站 2&#xff0c;点击“Download”&#xff0c;在新页面选择“Windows”&#xff0c;再点击“Download for Windows”。 3&#xff0c;下载完成后&#xff0c;在文件名&#xff0…...

链表题()

1、环形列表 141 方法一、 卡节点数量&#xff0c;或者值范围的bug 方法二、 快慢指针&#xff08;最实用&#xff09;寻找环 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NUL…...

ZIP64扩展和普通ZIP文件有什么区别?

ZIP64扩展是ZIP文件格式的一个扩展&#xff0c;旨在解决传统ZIP格式的限制&#xff0c;尤其是文件大小和数量的限制。以下是ZIP64扩展与普通ZIP文件的主要区别&#xff1a; 1. 文件大小限制 普通ZIP文件&#xff1a; 单个文件大小限制为 4GB&#xff08;2^32字节&#xff09;。…...

smolagents学习笔记系列(五)Tools-in-depth-guide

这篇文章锁定官网教程中的 Tools-in-depth-guide 章节&#xff0c;主要介绍了如何详细构造自己的Tools&#xff0c;在之前的博文 smolagents学习笔记系列&#xff08;二&#xff09;Agents - Guided tour 中我初步介绍了下如何将一个函数或一个类声明成 smolagents 的工具&…...

使用 Apache Dubbo 释放 DeepSeek R1 的全部潜力

作者&#xff1a;陈子康&#xff0c;Apache Dubbo Contributor 2025年1月20日&#xff0c;国产大模型公司深度求索&#xff08;DeepSeek&#xff09;正式发布了大语言模型 DeepSeek-R1&#xff0c;并同步开源其模型权重。通过大规模强化学习技术&#xff0c;DeepSeek-R1 显著提…...

【星云 Orbit-F4 开发板】03b. 按键玩法二:独立按键双击双击触发

【星云 Orbit-F4 开发板】03b. 按键玩法二&#xff1a;独立按键双击触发 引言 在嵌入式系统中&#xff0c;按键是常用的输入设备。通过检测按键的状态变化&#xff0c;可以实现多种功能&#xff0c;例如单击、双击、长按等。本文将详细介绍如何使用STM32F103的GPIO引脚检测独…...

ave-form.vue 组件中 如何将产品名称发送给后端 ?

如何将产品名称发送给后端。 在这段代码中&#xff0c;产品名称&#xff08;productName&#xff09;的处理和发送主要发生在 save() 方法中。让我逐步分析&#xff1a; 产品ID的选择&#xff1a; <w-form-selectv-model"form.productId"label"涉及产品&q…...

2025年电气工程与智能系统国际学术会议(IC2EIS 2025)

重要信息 官网&#xff1a;www.ic2eis.org(点击了解参会投稿等) 时间&#xff1a;2025年3月14-16日 地点&#xff1a;中国河南省郑州市 简介 2025年电气工程与智能系统国际学术会议&#xff08;IC2EIS 2025&#xff09;将于2025年3月14-16日在中国郑州举行。会议旨在为电气…...

Android TextView 使用.9图片文字不展示

参考文章 Android的TextView设置padding无效。 实现如上图效果的时候,选择框使用了.9,代码如下: LinearLayout.LayoutParams layoutParams=new LinearLayout.LayoutParams(0,...

【PyTorch][chapter-33][transformer-5] MHA MQA GQA, KV-Cache

主要翻译外网&#xff1a; 解剖Deep Seek 系列&#xff0c;详细见参考部分。 目录&#xff1a; Multi-Head Attention &#xff08;MHA) KV-Cache KV-Cache 公式 Multi-Query Attention&#xff08;MQA) Grouped-Query Attention(GQA) Multi-Head Latent Attention …...

MS SQL 2008 技术内幕:T-SQL 语言基础

《MS SQL 2008 技术内幕&#xff1a;T-SQL 语言基础》是一部全面介绍 Microsoft SQL Server 2008 中 T-SQL&#xff08;Transact-SQL&#xff09;语言的书籍。T-SQL 是 SQL Server 的扩展版本&#xff0c;增加了编程功能和数据库管理功能&#xff0c;使得开发者和数据库管理员能…...

seacmsv9注入管理员账号密码+orderby+limit

seacmsv9注入管理员账号密码 安装海洋CMS&#xff08;seacms&#xff09; 将upload文件夹里的文件全部上传至网页服务器后&#xff0c;执行以下操作: 请运行http://域名/install/index.php进行程序安装 SQL语句尝试注入 http://127.0.0.1/upload/comment/api/index.php?g…...

智能生活综合平台需求规格说明书

一、引言 1.1 编写目的 本需求规格说明书旨在明确智能生活综合平台的功能、性能、用户界面等方面的需求&#xff0c;为平台的开发、测试和部署提供详细的指导&#xff0c;确保平台能够满足用户在社交、购物、教育、医疗、政务等多个领域的智能生活需求&#xff0c;提升用户的…...

应用的负载均衡

概述 负载均衡&#xff08;Load Balancing&#xff09; 调度后方的多台机器&#xff0c;以统一的接口对外提供服务&#xff0c;承担此职责的技术组件被称为“负载均衡”。 负载均衡器将传入的请求分发到应用服务器和数据库等计算资源。负载均衡是计算机网络中一种用于优化资源利…...

TDengine 中的数据类型

简介 数据类型是数据库产品中一个非常重要的概念&#xff0c;它决定着能处理不同类型数据的范围。 TDengine 支持了所有通用的数据类型&#xff0c;同时还支持了一些特色数据类型&#xff0c;如地理坐标&#xff0c;未来准备支持 decimal 数据类型&#xff0c;方便银行等场景中…...

网络运维学习笔记(DeepSeek优化版)005网工初级(HCIA-Datacom与CCNA-EI)链路层发现协议与VLAN技术

文章目录 一、链路层发现协议1.1 思科CDP协议1.2 华为LLDP协议 二、VLAN&#xff08;Virtual Local Area Network&#xff0c;虚拟局域网&#xff09;技术详解2.1 基本概念2.2 技术特性2.3 接口工作原理2.3.1 Access模式2.3.2 Trunk模式 2.4 厂商配置对比思科配置华为配置 2.5 …...

51 哈希表的实现

目录 一、哈希介绍 &#xff08;一&#xff09;直接定值法 &#xff08;二&#xff09;哈希冲突 &#xff08;三&#xff09;负载因子 &#xff08;四&#xff09;将关键字转为整数 &#xff08;五&#xff09;哈希函数 1、除法散列法 / 除留余数法 2、乘法散列法&#…...

使用Python实现机器学习小案例:构建房价预测模型

背景 在日常生活中,很多人都希望了解某个区域的房价,特别是在购房时。如果我们能够根据一些已知的房屋特征(如面积、卧室数量、距离市中心的距离等)来预测房价,那将大大提高购房决策的效率。在本文中,我们将通过Python实现一个简单的房价预测模型,并帮助你理解机器学习…...

Layui页面粘贴的方法

一: 在Controller层 注解的注意点 : 1.先写一个大的 RequestMapping () () 里面的的是 : (这些你写的那个实体类的方法,在这取名是什么 比如 用户类 user) 2. 在Controller层 需要写一个 Controller的注解 3. Autowired 就相当与 之前new的 全局的serviceImpl 的方法 4.在…...

js:根据后端返回的数组取出每一个数组的keyword字段然后拼接成一个逗号分隔的字符串

问&#xff1a; 现在有一个el-select&#xff0c; 后端接口返回数据为keyword:xxx,referenceNum:1,tagId:132sf32fasdfaf组成的数组&#xff0c; 现在select是多选&#xff0c; 但是但我选择多个下拉框选项后&#xff0c;后端需要前端返回的数据tagIds字段需要时一个字符串…...

ES 客户端 API 二次封装思想

ES 客户端 API 二次封装思想 网页端 &#xff1a; ip5601 索引创建 数据新增 数据查询 数据删除 因为json串会出现在代码中&#xff0c;为了让用户更容易去添加数据所以去封装它。 思想&#xff1a;为了让json串变得更加容易添加&#xff0c;封装最主要是为了简化正文的…...

《Kettle保姆级教学-日志写入数据库(通过修改kettle.properties一劳永逸)》

目录 一、配置转换属性二、修改kettle.properties文件 一、配置转换属性 双击空白处&#xff0c;进入配置页面 执行转换 可以看到日志已写入数据库 二、修改kettle.properties文件 第一步的方式只能对某个转换/作业生效&#xff0c;怎么做到所有的转换/作业都可以生效呢&…...

SQL注入练习

目录 一、如何绕过 information schema 字段过滤注入 二、如何绕过 order by 语句过滤注入 三、seacmsv9 实现报错注入数据 一、如何绕过 information schema 字段过滤注入 1、使用其他系统表&#xff0c;不同数据库有各自的系统表&#xff0c;可替代information_schema。 …...