数据结构-Map和Set
文章目录
- 1. 搜索树
- 2. Map
- 3. Set
- 4. 哈希表
- 4.1 哈希表的基本概念
- 4.2 哈希表的实现方法
- 4.3 Java中的哈希表实现
- 5. 哈希桶
- 哈希桶的实现方式
- 哈希桶的作用
- 哈希桶的应用
- 模拟实现
1. 搜索树
二叉搜索树(Binary Search Tree, BST)是一种特殊的二叉树,它具有以下性质:
-
节点性质:
- 每个节点最多有两个子节点,称为左子节点和右子节点。
- 每个节点的左子树上所有节点的值都小于该节点的值。
- 每个节点的右子树上所有节点的值都大于该节点的值。
-
递归性质:
- 每个子树也是一棵二叉搜索树。
-
操作:
- 插入:从根节点开始,与当前节点比较,若小则进入左子树,若大则进入右子树,直到找到合适的空位插入。
- 删除:分为三种情况:
- 删除叶子节点:直接删除。
- 删除只有一个子节点的节点:用子节点替代该节点。
- 删除有两个子节点的节点:找到该节点的中序后继(右子树中最小的节点)或中序前驱(左子树中最大的节点)替代该节点,然后删除中序后继或前驱。
- 搜索:从根节点开始,逐层比较,若小则进入左子树,若大则进入右子树,直到找到目标节点或搜索完成。
-
遍历:
- 中序遍历:左-根-右,输出的节点值是递增的。
- 前序遍历:根-左-右。
- 后序遍历:左-右-根。
-
应用:
- 二叉搜索树常用于实现动态集合和查找操作,适用于需要快速插入、删除和查找的场景。
-
优缺点:
- 优点:在理想情况下(平衡树),插入、删除和查找操作的时间复杂度为O(log n)。
- 缺点:在最坏情况下(退化为链表),操作的时间复杂度为O(n)。为此,平衡二叉搜索树(如AVL树和红黑树)被引入以保证操作的效率。
二叉搜索树是一种非常基础的数据结构,广泛用于各种算法和应用中。
模拟实现:
package myDataStructure.BinarySearchTree;import com.sun.source.tree.Tree;import javax.crypto.NullCipher;
import javax.naming.directory.SearchResult;
import javax.xml.crypto.KeySelector;/*** @Author: Author* @CreateTime: 2025-04-18* @Description:*/
public class BinarySearchTree {static class TreeNode{public int val;public TreeNode left;public TreeNode right;public TreeNode(int val){this.val=val;}}public TreeNode root =null;public TreeNode search(int key){return searchRec(root,key);}private TreeNode searchRec(TreeNode root,int key){if (root== null){return null;}if (root.val==key){return root;}if (key<root.val){return searchRec(root.left,key);}else{return searchRec(root.right,key);}}public void insert(int key){root=insertRec(root,key);}private TreeNode insertRec(TreeNode root,int key){if (root==null){root=new TreeNode(key);return root;}if (key< root.val){root.left=insertRec(root.left,key);}else {root.right=insertRec(root.right,key);}return root;}public void remove(int key){root=removeRec(root,key);}// 删除递归实现// 在递归过程中,每一层递归调用都会根据返回值来更新其子树的结构。通过返回更新后的子树根节点,递归可以逐层回溯并最终更新整棵树的结构。private TreeNode removeRec(TreeNode root, int key) {if (root == null) {return root;}// 找到要删除的节点if (key < root.val) {root.left = removeRec(root.left, key);} else if (key > root.val) {root.right = removeRec(root.right, key);} else {// 节点只有一个子节点或没有子节点if (root.left == null) {return root.right;} else if (root.right == null) {return root.left;}// 节点有两个子节点,找到中序后继(右子树的最小节点)root.val = minValue(root.right);// 删除中序后继root.right = removeRec(root.right, root.val);}return root;}// 找到最小值private int minValue(TreeNode root) {int minValue = root.val;while (root.left != null) {minValue = root.left.val;root = root.left;}return minValue;}
}
2. Map
Map
接口表示一个键值对的集合,其中每个键最多只能映射到一个值。它不允许重复的键,但可以有重复的值。常用的实现类包括 HashMap
、TreeMap
和 LinkedHashMap
。
常用实现类:
- HashMap:
- 基于哈希表实现,允许
null
键和null
值。 - 无序存储,不能保证顺序。
- 平均时间复杂度为 O(1)。
- 基于哈希表实现,允许
- TreeMap:
- 基于红黑树实现,键值对有序存储。
- 不允许
null
键,但允许null
值。 - 支持自然排序或自定义排序,时间复杂度为 O(log n)。
- LinkedHashMap:
- 继承自
HashMap
,维护了一个双向链表以记录插入顺序。 - 可以按照插入顺序或访问顺序迭代。
- 允许
null
键和null
值。
- 继承自
常用方法:
put(K key, V value)
:将指定的值与此映射中的指定键关联。get(Object key)
:返回指定键所映射的值。remove(Object key)
:删除键及其对应的值。containsKey(Object key)
:检查是否包含指定的键。containsValue(Object value)
:检查是否包含指定的值。keySet()
:返回所有键的集合。values()
:返回所有值的集合。entrySet()
:返回所有键值对的集合。
3. Set
Set
接口表示一个不包含重复元素的集合。它不保证元素的顺序。常用的实现类包括 HashSet
、TreeSet
和 LinkedHashSet
。
常用实现类:
- HashSet:
- 基于
HashMap
实现,使用哈希表存储元素。 - 不保证顺序,允许
null
元素。 - 平均时间复杂度为 O(1)。
- 基于
- TreeSet:
- 基于
TreeMap
实现,使用红黑树存储元素。 - 元素有序,支持自然排序或自定义排序。
- 不允许
null
元素,时间复杂度为 O(log n)。
- 基于
- LinkedHashSet:
- 继承自
HashSet
,维护了一个双向链表以记录插入顺序。 - 可以按照插入顺序迭代。
- 允许
null
元素。
- 继承自
常用方法:
add(E e)
:向集合中添加元素。remove(Object o)
:从集合中移除指定元素。contains(Object o)
:检查集合中是否包含指定元素。size()
:返回集合中的元素数量。isEmpty()
:检查集合是否为空。clear()
:清空集合中的所有元素。iterator()
:返回用于遍历集合的迭代器。
4. 哈希表
哈希表是一种数据结构,用于存储键值对(key-value pairs),它通过哈希函数将键映射到数组中的一个位置,以实现快速的数据存取。哈希表的主要特点是能够在平均情况下以常数时间复杂度 O(1) 进行插入、删除和查找操作。
4.1 哈希表的基本概念
-
哈希函数:
- 哈希函数用于将键转换为数组的索引。一个好的哈希函数能够均匀地分布键,减少冲突。
- 常见的哈希函数包括除法散列法、乘法散列法等。
-
哈希冲突:
- 当两个不同的键映射到同一个索引时,就发生了哈希冲突。
- 处理哈希冲突的常用方法有两种:链地址法(链表法)和开放定址法。
-
负载因子:
- 负载因子是哈希表中元素数量与表大小的比值,用于衡量哈希表的满度。
- 一般情况下,负载因子越高,哈希冲突越多,性能越差。因此,通常设定一个阈值,当负载因子超过此阈值时进行扩容。
4.2 哈希表的实现方法
-
链地址法(Separate Chaining):
- 使用链表存储每个索引处的所有元素。
- 当发生冲突时,将冲突的元素添加到链表的末尾。
- 优点是简单易实现,缺点是链表可能变得很长,影响性能。
-
开放定址法(Open Addressing):
- 所有元素都存储在数组中,解决冲突的方法是寻找下一个空闲位置。
- 常用的探查方法包括线性探查、二次探查和双重散列。
- 优点是节省空间,缺点是探查可能会增大查找时间。
4.3 Java中的哈希表实现
Java中常用的哈希表实现类是 HashMap
。HashMap
使用链地址法来处理冲突,并且在负载因子超过默认值(通常为0.75)时进行扩容。它允许 null
键和 null
值。
HashMap
的特点:
- 时间复杂度:平均情况下,插入、删除和查找操作的时间复杂度为 O(1)。
- 非线程安全:
HashMap
是非线程安全的,如果需要线程安全的哈希表,可以使用ConcurrentHashMap
。 - 支持动态扩容:当负载因子超过设定值时,
HashMap
会自动扩容,以减少冲突。
5. 哈希桶
哈希桶是哈希表中的一个重要概念,它是用来处理哈希冲突的机制之一。在哈希表中,哈希桶通常是指存储在特定哈希索引处的一个容器,用于存放所有映射到该索引的键值对。当多个键通过哈希函数映射到同一索引时,这些键值对就被存储在同一个哈希桶中。
哈希桶的实现方式
-
链地址法(Separate Chaining):
- 每个哈希桶是一个链表或其他数据结构(如平衡树)。
- 当发生哈希冲突时,新的键值对被添加到该链表中。
- 优点是简单易实现,且在负载因子较高时性能依然较好。
HashMap
在 Java 8 之后,当链表长度超过一定阈值时,会将链表转换为红黑树,以提高性能。
-
开放定址法(Open Addressing):
- 哈希桶实际上是一个单独的存储位置,冲突时通过探查其他位置解决。
- 不在同一个桶中存储多个元素,而是寻找下一个空闲桶。
- 常用的探查方法有线性探查、二次探查和双重散列。
哈希桶的作用
- 解决冲突:通过哈希桶,可以有效处理哈希冲突,使得多个键值对能够共存于同一个索引。
- 提高效率:在冲突发生时,哈希桶允许快速插入和查找操作,尤其是在链地址法中,链表的操作复杂度为 O(1)。
- 动态调整:在一些实现中(如 Java 的
HashMap
),当链表过长时,会自动转换为更高效的数据结构(如红黑树),从而提高性能。
哈希桶的应用
哈希桶在许多哈希表的实现中被广泛使用,尤其是在需要处理大量数据且存在高概率冲突的情况下。它们在数据库索引、缓存系统、符号表等领域中发挥着重要作用。通过合理的哈希函数与哈希桶的设计,可以显著提高哈希表的性能和效率。
模拟实现
package myDataStructure.HashBucket;/*** @Author: Author* @CreateTime: 2025-04-18* @Description:*/
public class HashBucket {static class Node{public int key;public int val;public Node next;public Node(int key,int val){this.key=key;this.val=val;}}public Node[] array;public int usedSize;public double loadFactor=0.75;public HashBucket(){array=new Node[10];}public void put(int key,int val){int index=key%array.length;Node cur=array[index];//1. 遍历当前链表,是否存在当前值while (cur!=null){if (cur.key==key){cur.val=val;return;}cur=cur.next;}//2. 说明没有当前值,此时进行头插Node node=new Node(key,val);node.next=array[index];array[index]=node;usedSize++;//3.if(loadFactorCount()>=loadFactor){// 扩容resize();}}private void resize(){Node[] newArray=new Node[array.length*2];for (int i=0;i<array.length;i++){Node cur=array[i];// 开始遍历链表while (cur!=null){int newIndex=cur.key%newArray.length;// 把数组存放在新的数组的 newIndex位置Node curN=cur.next;cur.next=newArray[newIndex];newArray[newIndex]=cur;cur=curN;}}array=newArray;}private double loadFactorCount(){return usedSize*1.0/array.length;}public int get(int key){int index=key%array.length;Node cur=array[index];//1. 遍历当前链表 是否存在当前值while(cur!=null){if (cur.key==key){return cur.val;}cur=cur.next;}return -1;}public static void main(String[] args) {HashBucket hashBucket = new HashBucket();// 测试 put 方法hashBucket.put(1, 100);hashBucket.put(2, 200);hashBucket.put(3, 300);hashBucket.put(11, 1100); // 这个键会导致哈希冲突// 测试 get 方法System.out.println("Value for key 1: " + hashBucket.get(1)); // 应该输出 100System.out.println("Value for key 2: " + hashBucket.get(2)); // 应该输出 200System.out.println("Value for key 3: " + hashBucket.get(3)); // 应该输出 300System.out.println("Value for key 11: " + hashBucket.get(11)); // 应该输出 1100// 测试更新值hashBucket.put(1, 101);System.out.println("Updated value for key 1: " + hashBucket.get(1)); // 应该输出 101// 测试不存在的键System.out.println("Value for non-existent key 4: " + hashBucket.get(4)); // 应该输出 -1// 测试负载因子和扩容for (int i = 0; i < 20; i++) {hashBucket.put(i, i * 10);}System.out.println("Value for key 19 after resizing: " + hashBucket.get(19)); // 应该输出 190}
}
相关文章:
数据结构-Map和Set
文章目录 1. 搜索树2. Map3. Set4. 哈希表4.1 哈希表的基本概念4.2 哈希表的实现方法4.3 Java中的哈希表实现 5. 哈希桶哈希桶的实现方式哈希桶的作用哈希桶的应用模拟实现 1. 搜索树 二叉搜索树(Binary Search Tree, BST)是一种特殊的二叉树࿰…...
cpolar 内网穿透 实现公网可以访问本机
1、登录网站,升级成专业版,测试的话建议选一个月付费,选择预留 2、保留的TCP地址增加一条记录,描述可以自己取 3、验证,生成一个Authtocken码 4、在安装目录下,打开CMD命令,复制上面的码运行aut…...
QT调用ffmpeg库实现视频录制
可以通过QProcess调用ffmpeg命令行,也可以直接调用ffmpeg库,方便。 调用库 安装ffmpeg ffmpeg -version 没装就装 sudo apt-get update sudo apt-get install ffmpeg sudo apt-get install ffmpeg libavdevice-dev .pro引入库路径,引入库 LIBS += -L/usr/lib/aarch64-l…...
AI专题(一)----NLP2SQL探索以及解决方案
前面写了很多编码、算法、底层计算机原理等相关的技术专题,由于工作方向调整的缘故,今天开始切入AI人工智能相关介绍。本来按照规划,应该先从大模型的原理开始介绍会比较合适,但是计划赶不上变化,前面通用大模型的工作…...
Redis 的指令执行方式:Pipeline、事务与 Lua 脚本的对比
Pipeline 客户端将多条命令打包发送,服务器顺序执行并一次性返回所有结果。可以减少网络往返延迟(RTT)以提升吞吐量。 需要注意的是,Pipeline 中的命令按顺序执行,但中间可能被其他客户端的命令打断。 典型场景&…...
群辉默认docker数据存储路径
做一下笔记 今天不小心路径规划错误,好不容易找到了数据,特此做个路径记录。 /var/packages/ContainerManager/var/docker/...
【C++】入门基础【上】
目录 一、C的发展历史二、C学习书籍推荐三、C的第一个程序1、命名空间namespace2、命名空间的使用3、头文件<iostream>是干什么的? 个人主页<—请点击 C专栏<—请点击 一、C的发展历史 C的起源可以追溯到1979年,当时Bjarne Stroustrup(本…...
Git LFS 学习笔记:原理、配置、实践与心路历程
最近在学习 Git LFS,把一些零散的笔记整理成一篇博文,记录我的学习思路与心路历程。以下内容均为个人理解总结,部分尚未在生产项目中验证,仅供回顾与参考。 🔍 Git LFS 是什么?原理是什么? 刚接…...
SpringBoot集成oshi 查询系统数据
实现功能: <!-- 获取系统信息 --><dependency><groupId>com.github.oshi</groupId><artifactId>oshi-core</artifactId><version>6.6.1</version></dependency><dependency><groupI…...
iOS Facebook 登录
iOS Facebook 登录 官方文档 SDK下载链接...
uniapp打包IOS私钥证书过期了,如何在非mac系统操作
在非Mac系统下解决uniapp打包iOS私钥证书过期的问题,需通过以下步骤实现: --- ### **一、重新生成iOS证书(非Mac环境操作)** 1. **生成私钥和CSR文件** 使用OpenSSL工具(需提前安装)生成私钥和证书签…...
Axios的使用
Axios 是一个基于 Promise 的现代化 HTTP 客户端库,专为浏览器和 Node.js 设计。在企业级应用中,它凭借以下核心优势成为首选方案: 一、Axios 的核心优势 特性说明Promise 支持天然支持异步编程,避免回调地狱拦截器机制可全局拦截…...
第八篇:系统分析师第三遍——3、4章
目录 一、目标二、计划三、完成情况四、意外之喜(最少2点)1.计划内的明确认知和思想的提升标志2.计划外的具体事情提升内容和标志 五、总结 一、目标 通过参加考试,训练学习能力,而非单纯以拿证为目的。 1.在复习过程中,训练快速阅读能力、掌…...
【2025-泛计算机类-保研/考研经验帖征集】
【2025-泛计算机类-保研/考研经验帖征集】 打扰您1分钟时间看下这里: 这是一个无偿为爱发电的项目,旨在收集湖南大学2025届毕业的计算机类学科同学的经验帖, 我将定期汇总链接,在校内推免群中宣传,为校内的学弟学妹们…...
Flink介绍——实时计算核心论文之Kafka论文详解
引入 我们通过S4和Storm论文的以下文章,已经对S4和Storm有了不错的认识: S4论文详解S4论文总结Storm论文详解Storm论文总结 不过,在讲解这两篇论文的时候,我们其实没有去搞清楚对应的流式数据是从哪里来的。虽然S4里有Keyless …...
细节:如何制作高质量的VR全景图
细节:如何制作高质量的VR全景图 VR全景图是通过虚拟现实和3D技术实现的全景展示方式,能够将实景以1:1的比例等比复刻,并还原到互联网上,使用户能够在线上游览世界,获得沉浸式的体验。制作高质量的VR全景图是一个复杂而…...
深度学习中的概念——元素积(哈达玛积)
元素积操作(哈达玛积) 🔢 基本定义 矩阵的哈达玛积 对于两个同维度的矩阵: A [ a i j ] , B [ b i j ] A [a_{ij}], \quad B [b_{ij}] A[aij],B[bij] 它们的哈达玛积定义为: C A ∘ B 其中 c i j a i j…...
探索 Flowable 后端表达式:简化流程自动化
什么是后端表达式? 在 Flowable 中,后端表达式是一种强大的工具,用于在流程、案例或决策表执行期间动态获取或设置变量。它还能实现自定义逻辑,或将复杂逻辑委托…… 后端表达式在 Flowable 的后端运行,无法访问前端…...
AI语音助手 React 组件使用js-audio-recorder实现,将获取到的语音转成base64发送给后端,后端接口返回文本内容
页面效果: js代码: import React, { useState, useRef, useEffect } from react; import { Layout, List, Input, Button, Avatar, Space, Typography, message } from antd; import { SendOutlined, UserOutlined, RobotOutlined, AudioOutlined, Stop…...
《软件设计师》复习笔记(11.6)——系统转换、系统维护、系统评价
目录 一、遗留系统(Legacy System) 定义: 特点: 演化策略(基于价值与技术评估): 高水平 - 低价值: 高水平 - 高价值: 低水平 - 低价值: 低水平 - 高价…...
学习threejs,使用EffectComposer后期处理组合器(采用RenderPass、GlitchPass渲染通道)
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.EffectComposer 后期…...
Yarn的定义?
YARN(Yet Another Resource Negotiator) 是 Apache Hadoop 的核心组件之一,负责集群的资源管理和任务调度。它的主要作用是将 Hadoop 的资源管理和作业调度/监控功能分离,形成一个通用的资源管理平台,可以支持多种计算…...
职坐标IT培训热门技术实战精讲
在数字化转型浪潮中,人工智能、大数据与云原生已成为驱动产业升级的核心引擎。职坐标IT培训课程以实战导向为基石,聚焦高薪岗位核心技术栈,通过拆解企业级项目案例,将复杂的技术理论转化为可落地的工程实践。课程模块涵盖从架构设…...
前端:uniapp框架中<scroll-view>r如何控制元素进行局部滚动
以下是使用 <scroll-view> 实现局部滚动的完整示例,包含动态内容、滚动控制和滚动位置监听: 一、基础局部滚动示例 <template><view class"container"><!-- 固定高度的滚动容器 --><scroll-view scroll-y :scroll…...
【KWDB 创作者计划】_算法篇---Stockwell变换
文章目录 前言一、Stockwell变换原理详解1.1 连续S变换定义1.2 离散S变换1.3简介 二、S变换的核心特点2.1频率自适应的时频分辨率2.1.1高频区域2.1.2低频区域 2.2无交叉项干扰2.3完全可逆2.4相位保持2.5与傅里叶谱的直接关系 三、应用领域3.1地震信号分析3.2生物医学信号处理3.…...
桌面级OTA测试解决方案:赋能智能网联汽车高效升级
一、前言 随着智能网联汽车的快速发展,OTA(Over-The-Air)技术已成为汽车软件更新和功能迭代的关键手段。为确保OTA升级的可靠性、安全性和效率,构建一套高效、便捷的桌面级OTA测试解决方案至关重要。 本方案基于Vector先进的软硬…...
京东物流基于Flink StarRocks的湖仓建设实践
摘要:本文整理自京东物流高级数据开发工程师梁宝彬先生在 Flink Forward Asia 2024 论坛中的分享。内容主要为以下四个部分: 1、实时湖仓探索与建设 2、实时湖仓应用 3、问题与思考 4、未来展望 今天,将分享的主题大纲包括:首先&a…...
【Test Test】灰度化和二值化处理图像
文章目录 1. 图像灰度化处理对比2. 代码示例3. 二值化处理 1. 图像灰度化处理对比 2. 代码示例 #include <opencv2/opencv.hpp> using namespace cv;int main() {Mat currentImage imread("path_to_image.jpg"); // 读取彩色图像Mat grayImage;// 将彩色图像…...
Docker快速入门
1 基本信息 1.1 基础概览 (1)容器与镜像 容器:轻量级的独立运行时环境,基于Linux的命名空间(namespace)和控制组(cgroup)技术实现资源隔离。容器通过镜像创建,每个容…...
AI 编程工具—如何在 Cursor 中集成使用 MCP工具
AI 编程工具—如何在 Cursor 中集成使用 MCP工具 这里我们给出了常用的MCP 聚合工具,也就是我们可以在这些网站找MCP服务 这是一个MCP Server共享平台,用户可以在上面发布和下载MCP Server配置。在这里可以选择你需要的MCP 服务。 如果你不知道你的mcp 对应的server 名称也不…...
航电系统通信与数据链技术分析
一、技术要点 1. 高带宽与低时延通信技术 航电系统需支持实时数据传输,如民航VDL2数据链采用D8PSK调制和Reed Solomon编码技术,传输速率达31.5Kb/s,并通过物理层优化减少码间串扰。新一代LDACS系统则利用L频段频谱,提供比传统VD…...
windwos脚本 | 基于scrcpy,只投声音、只投画面
安装scrcpy,scrcpy自带adb 写脚本命名为 .bat 结尾 注意这里的set "PATHD:\tools\scrcpy-win64-v3.2;%PATH%" 替换成scrcpy的安装目录 echo off :: 设置UTF-8编码 chcp 65001 > nul :: 设置标题 title 手机投屏工具:: 添加 scrcpy 路径到 PATH set &q…...
产品经理面试题与参考答案资料(2025年版)
一、技术背景与工具能力 问题1: 软件开发生命周期(SDLC)包括哪些阶段?作为产品经理,你如何参与每个阶段? 参考答案: 软件开发生命周期通常划分为需求分析、设计、开发、测试、部署和维护六个阶段。作为产品经理,你需要在...
HTML 初识
段落标签 <p><!-- 段落标签 -->Lorem ipsum dolor sit amet consectetur adipisicing elit. Fugiat, voluptate iure. Obcaecati explicabo sint ipsum impedit! Dolorum omnis voluptas sint unde sed, ipsa molestiae quo sapiente quos et ad reprehenderit.&l…...
CSS3笔记
文章目录 1.CSS的概念2.CSS的引入方式3.选择器3.1基础选择器3.1.1标签选择器3.1.2类选择器3.1.3id选择器3.1.4通配符选择器 4.画盒子5.文字控制属性5.1 字体大小-font-size5.2 字体粗细-font-weight5.3 字体倾斜-font-style5.4 行高-line-height5.5 字体族-font-family5.6 字体…...
yarn的定义
YARN是一个分布式资源管理平台,它通过分离资源管理和作业调度的功能,为Hadoop集群提供了一种高效、灵活且可扩展的方式来管理和分配计算资源。YARN的核心目标是将资源管理与作业调度/监控的功能分离,从而让Hadoop能够支持更多种类的计算框架&…...
CSS 美化页面(五)
一、position属性 属性值描述应用场景static默认定位方式,元素遵循文档流正常排列,top/right/bottom/left 属性无效。普通文档流布局,默认布局,无需特殊定位。relative相对定位,相对于元素原本位置进行偏…...
互联网大厂Java面试:微服务与分布式系统挑战
互联网大厂Java面试:微服务与分布式系统挑战 在互联网的大潮中,无数程序员怀揣着梦想,希望能在一线大厂找到自己的位置。今天的故事主角是马飞机,一位充满幽默感但技术略显水货的程序员。他来到了一家知名互联网公司参加Java开发…...
数据结构——顺序表(C语言实现)
1.顺序表的概述 1.1 顺序表的概念及结构 在了解顺序表之前,我们要先知道线性表的概念,线性表,顾名思义,就是一个线性的且具有n个相同类型的数据元素的有限序列,常见的线性表有顺序表、链表、栈、队列、字符串等等。线…...
FastGPT安装前,系统环境准备工作?
1.启用适用于 Linux 的 Windows 子系统 方法一:打开控制面板 -> 程序 -> 启用或关闭Windows功能->勾选 “适用于Linux的Vindows子系统” 方法二:以管理员身份打开 PowerShell(“开始”菜单 >“PowerShell” >单击右键 >“…...
【2】CICD持续集成-k8s集群中安装Jenkins
一、背景: Jenkins是一款开源 CI&CD 系统,用于自动化各种任务,包括构建、测试和部署。 Jenkins官方提供了镜像:https://hub.docker.com/r/jenkins/jenkins 使用Deployment来部署这个镜像,会暴露两个端口ÿ…...
相比其他缓存/内存数据库(如 Memcached, Ehcache 等),Redis 在微服务环境中的优势和劣势是什么?
我们来比较一下 Redis 与 Memcached、Hazelcast、Ehcache 等在微服务环境下的优势和劣势。 Redis 的优势 : 丰富的数据结构 (Rich Data Structures): 优势: 这是 Redis 最显著的优势之一。除了简单的 Key-Value (字符串) 外,Redis 还原生支持 Lists, Sets, Sorted …...
Day53 二叉树的层序遍历
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* T…...
mac上安装VMWare Fusion安装ubuntu系统问题
mac不能复制粘贴到虚拟机的ubuntu系统里,没有下载vmtools 在ubuntu系统执行命令 sudo apt update sudo apt install open-vm-tools open-vm-tools-desktop -y ubuntu 下载地址 https://cdimage.ubuntu.com/ubuntu/releases/20.04/release/...
JAVA Web_定义Servlet_处理POST请求【练习】
题目 有一个登录页面(login.html),其登录表单的HTML代码如下: </form action"doLogin" method "post"> 用户名:<input type"text" name"userName"><br>…...
FreeRTOS任务通知
一、什么是任务通知 FreeRTOS从版本V8.2.0开始提供通知这个功能,每个任务都有一个32位的通知值。按照官方说法,使用消息通知比通过二进制信号量方式解除阻塞任务快45%,且更加省内存(无需创建队列)。 (也就…...
NO.97十六届蓝桥杯备战|数论板块-最大公约数和最小公倍数|欧几里得算法|秦九韶算法|小红的gcd(C++)
约数和倍数 如果a 除以b 没有余数,那么a 就是b 的倍数,b 就是a 的约数,记作b ∣ a 。 约数,也称因数。 最⼤公约数和最⼩公倍数 最⼤公约数Greatest Common Divisor,常缩写为gcd。 ⼀组整数的公约数,是…...
ESP32之本地HTTP服务器OTA固件升级流程,基于VSCode环境下的ESP-IDF开发(附源码)
背景知识: 本实验利用编译链内Python内置的 HTTP 服务器,将升级包通过http发送给设备,实现OTA固件升级。 目录 背景知识: 1.创建工程 1.1 创建OTA基础工程 3.编写、修改代码 3.1 修改menuconfig配置文件 3.1.1 配置WiFi账…...
Jenkins的使用及Pipeline语法讲解
Jenkins简介 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成。 什么是持续集成(CI)? CI(…...
【MySQL】初识数据库
目录 一.什么是数据库 二.数据库和数据结构的关系 三. 数据库服务器、数据库与表之间的关系 四.关系型数据库 五. SQL介绍 SQL分类 六.MySQL架构(面试重点) 七. 库的基本操作 1.查看数据库 2.创建数据库 字符集编码和校验(排序&…...