Java-数据结构-(HashMap HashSet)
一、Tree和Hash的区别
在上一篇文章中,我们讲到了"TreeMap"和"TreeSet",但当我们刷题的时候却会发现,实际应用Map和Set时,却常常都只会用"HashMap"和"HashSet",这是为什么呢?
① 效率不同
📚"TreeMap"和"TreeSet":
都是基于"红黑树"实现的,这种方法的实现就导致了无法直接查询到存储进去的数据,而是需要进去不断的查找,即便已经有了非常好的优化,树的遍历效率也只能达到O(logn)。
📚"HashMap"和"HashSet":
是基于哈希表实现的,一般使用HashMap和HashSet进行存入和查找时,时间复杂度都能达到O(1)。
而这种效率是远远高于O(logn)的,并且平时刷题时测试用例中都有大量难缠的数据,所以平时"Hash"的应用场景是多于"Tree"的。
② 适用场景不同
📚 "TreeMap"和"TreeSet":
这种数据结构会对存入的数据自动进行排序,适用于数据规模不太大,或者需要有序数据或范围查询时,使用TreeMap是一个很好的选择。
这里使用HashMap是没办法使用该方法的,因为HashMap并不会对数据进行排序。
📚"HashMap"和"HashSet":
相对的,哈希表能做到快速存入和查询,肯定也有对应的缺点,那就是"不会对存入的数据进行自动排序"
但是实际中,对Map和Set的使用还是以"存入和查询"居多,所以"HashMap"和"HashSet"的使用还是会更多的。
二、哈希表
① 什么是哈希表?
通过上面我们能了解到,哈希表的存入和查询速率都是O(1)。
O(1)是什么概念?就是比较的次数非常少,甚至有时候可以忽略不计。
那么让我们回顾一下,之前学习的"排序算法"中,就有这么一种比较次数非常少的排序—"桶排序"
在哈希表的实现中,也使用了类似"桶排序"中的一种思想—"分桶的核心思想"
📕 分桶:哈希表通过某种规则将数据分散到多个容器(桶)中。
📕 映射规则:哈希表通过哈希函数映射键到桶。
哈希表除了使用了这种类似桶排序的分桶思想,剩下的操作比较类似于"计数排序"
📕 插入元素:根据待插入元素的关键码,计算出元素的存储位置。
📕 搜索元素:同样对关键码进行运算,并查找该位置,若关键码相同则搜索成功。
而其中对关键码进行操作就是通过"哈希函数"来进行转换的。
比如此时我们将哈希函数设置为:int index = key % elem.length;
那么对于元素的处理就会像这样:
在这个存储过程中我们可以发现,并没有元素进行比较。这就是一种最理想的状态。但让我们再想想,如果再往表中插入14呢?24呢?34、44呢?
② 哈希冲突的概念
上面我们提到,如果在表中继续插入元素,如"14","24","34"等。它们经过哈希函数后,得到的对应位置与先前存入的"4"是一样的。
而这也就是"不理想的情况",因为遇到这种情况,我们的哈希表就需要进行"元素之间的比较"了,这种情况也被称为"哈希冲突"。
③ 哈希冲突的避免
我们要知道,使用哈希表进行数据的存储时,造成"哈希冲突"是必然的。
因为理想状态下我们通过哈希函数,计算每个数据的对应键值并将数据存入哈希表中,但这也就意味着肯定会有些数据会计算出相同的键值,并且哈希表的空间也是有限的(未扩容之前),当存入的数据达到一定的限度,则会出现"经常发生哈希冲突"的情况。
而为了避免这种情况发生,我们能做到的就是:尽量设计一个合理的哈希函数。
哈希函数设计原则:
📕 哈希函数的定义域必须包括需要存储的全部关键码,如果表中允许有n个地址,则哈希函数的值域必须在0到n-1之间
📕 哈希函数计算的值最好能均匀分布在整个空间中
④ 常见的哈希函数
📚 直接定制法:Hash(Key) = A * Key + B
优点:简单、均匀
缺点:需要事先知道关键字的分布情况使用场景
📚 除留余数法:Hash(key) = key % p(p<=m)
⑤ 负载因子调节
上面我们提到过:
哈希表的空间也是有限的(未扩容之前),当存入的数据达到一定的限度,则会出现"经常发生哈希冲突"的情况。
这种情况会大大降低我们的哈希表的存取效率,而为了避免这种情况发生,我们就需要在每次存入数据时,计算一下此时哈希表的负载因子,如果此时的负载因子超过了我们希望的限定值,那么此时我们将对哈希表进行扩容。
1. 负载因子的定义
负载因子:表示哈希表中已存储元素数量与当前总容量的比值
如:此时哈希表容量为 10 ,已存入 7 个元素,则此时的负载因子为 0.7 。
2. 负载因子的作用
📕 衡量哈希表填充程度:
负载因子越高,哈希表填充越满,发生哈希冲突的概率越大。
📕 触发扩容的阈值:
当负载因子超过预设值(java中默认为0.75,后续我们模拟实现哈希表也会采取这个阈值)时,哈希表自动扩容,以降低冲突概率。
📕 平衡时间与空间开销:
低负载因子:冲突少,操作效率高,但内存利用率低。
高负载因子:内存利用率高,但冲突频繁,操作效率下降。
⑥ 冲突的解决方案(开放寻址法)
1. 线性探测
📕 规则:
若当前的桶已经被占用,则顺序查询下一个桶(如 index = (index + 1) % size),直到找到空桶。
📕 优点:实现简单,空间利用率高,缓存性能好(连续存储)。
📕 缺点:产生聚集现象(大量连续占用桶),导致查找效率下降。
📕 适用场景:负载因子较低时。
2. 二次探测
📕 规则:
使用第二个哈希函数计算下一个空位置(如:index1 = (index0 + i ^ 2) % m)
📕 优点:冲突分布更均匀,减少聚集。
📕 缺点:装载因子不能太大,否则性能会急剧下降,容易发生二次聚集。
📕 适用场景:对性能要求高的场景。
⑦ 冲突的解决方案(链地址法)
又叫做"开散列法",我们需要对传进的数据关键码通过散列函数计算出散列地址,将具有相同地址的关键码放入同一个子集合中,每一个子集合都是一个桶,每个桶中的元素都通过一个单链表进行连接,然后将每个链表的结点都存储在哈希表中。
三、哈希表的模拟实现
① 基本框架
在这里我们采用"开散列法"
所以我们需要用到链表结构,因此我们需要在基本框架中实现一个结点类
同时,我们还需要设定一个触发扩容的阈值(负载因子),上面我们提到java中默认为0.75,所以我们这里也使用0.75作为触发扩容的阈值。
📖 代码示例:
public class HashBucket {public 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[] elem = new Node[10];public int usedSize;//负载因子public static final double LOAD_FACTOR = 0.75;
}
② 插入元素
实现插入元素,我们需要考虑很多种情况,比如:如何避免哈希冲突,将结点插入链表的何处,在何时计算负载因子,如何进行扩容等。
这里我们一个个的进行讲解:
📕 如何避免哈希冲突:
我们采用"开散列法",首先通过哈希函数寻找对应链表的index:
int index = key % elem.length;
然后判断当前index指向的链表中是否含有key,如果存在key,则修改结点的值为新的val。
📕 将结点插入链表何处:
如果不存在key,则将新节点插入链表(尾插和头插都可以,这里我们采取头插法)
📕 在何时计算负载因子:
当新元素加入后,计算此时的负载因子,如果超过阈值则扩容
📖 代码示例:
//新增元素public void put(int key,int val){//1.通过哈希函数,找到对应链表的indexint index = key % elem.length;//2.判断当前的链表是否有keyNode cur = elem[index];while(cur != null){//3.找到key,修改改结点的valif(cur.key == key){cur.val = val;return;}cur = cur.next;}//4.如果没有key,则将新结点插入链表(这里采取头插法)Node newCur = new Node(key,val);newCur.next = elem[index];elem[index] = newCur;usedSize++;//5.计算当前的负载因子,如果超过则扩容if(getLoadFactor() >= LOAD_FACTOR){upsize();}}//计算当前负载因子public double getLoadFactor(){return usedSize * 1.0 / elem.length;}
③ 哈希表扩容
当为哈希表进行扩容时,并不是简单的将数组大小扩大一倍即可,因为可能会发生如下情况:
当扩容之后,其实14应该放在新的空间14内,而不是还处在4的位置,所以哈希表的扩容其实是一个(再次哈希)的过程,这个过程的时间复杂度是O(n)的,需要我们遍历所有元素,重新创建一个哈希表:
📖 代码示例:
//哈希表扩容(再次哈希)public void upsize(){//1.创建新的哈希表Node[] newElem = new Node[elem.length * 2];for(int i = 0;i < elem.length;i++){Node cur = elem[i];while(cur != null){Node curN = cur.next;int index = cur.key % newElem.length;cur.next = newElem[index];newElem[index] = cur;cur = curN;}}elem = newElem;}
④ 获取元素
这个就很简单了,经过之前我们对各种数据结构的学习,对于大家来说肯定也是不必多说,只需要计算出对应链表的index并遍历链表求目标元素即可。
📖 代码示例:
//通过key获取元素public int get(int key) {//找到key的对应下标int index = key % elem.length;Node cur = elem[index];//查找链表while (cur != null) {if (cur.key == key) {return cur.val;}cur = cur.next;}return -1;}
⑤ 测试
我们设定初始大小为10,扩容阈值为0.75,此时我们向哈希表中存入八个元素:
当存储到14时,14存在index = 4的链表中:
当存入第八个元素,也就是19的时候,就会触发扩容,此时我们的14应该从index = 4的链表,移动到新的index = 14的位置上:
四、自定义类使用哈希表
📖 People:
class People {public int id;public String name;public People(int id,String name) {this.id = id;this.name = name;}
}
有些时候,我们希望对自定义的一些类也是使用哈希表进行存储,但是有时会发生这样的情况:
明明姓名和id都相同,但却找不到对应的人,这是为什么呢?
这就取决于java内部哈希函数如何计算了:
📕 与 equals() 的一致性:若两个对象相等,则它们的哈希值必须相同。
📕 基于内存地址:默认返回对象内部地址的整数表示
📕 问题:不同对象即使内容相同,哈希值也不同
是的,所以找不到对应的对象是因为地址不同,那么如果想查找到对应的对象,我们就需要在自定义类中重写 hashCode() 和 equals() 方法
那么这篇关于哈希表(HashMap,HashSet)的文章到这里就结束啦,作者能力有限,如果有哪里说的不够清楚或者不够准确,还请各位在评论区多多指出,我也会虚心学习的,我们下次再见啦
相关文章:
Java-数据结构-(HashMap HashSet)
一、Tree和Hash的区别 在上一篇文章中,我们讲到了"TreeMap"和"TreeSet",但当我们刷题的时候却会发现,实际应用Map和Set时,却常常都只会用"HashMap"和"HashSet",这是为什么呢…...
【Prometheus】prometheus结合pushgateway实现脚本运行状态监控
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…...
python爬虫系列课程3:解决爬虫过程中遇到的编码问题
python爬虫系列课程3:解决爬虫过程中遇到的乱码问题 在爬取某些网站时,以4399小游戏网站为例,正常编写爬虫代码并执行之后会出现乱码,代码如下: import requestsheaders = {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko…...
ocr智能票据识别系统|自动化票据识别集成方案
在企业日常运营中,对大量票据实现数字化管理是一项耗时且容易出错的任务。随着技术的进步,OCR(光学字符识别)智能票据识别系统的出现为企业提供了一个高效、准确的解决方案,不仅简化了财务流程,还大幅提升了…...
Go入门之map
map类型是引用类型,必须初始化才能使用,为key-value形式 var userinfo make(map[string]string)userinfo["username"] "zhangsan"var user map[string]string{"username": "张三","age": &qu…...
SpringBoot 中封装 Cors 自动配置
在现代 Web 开发中,跨域资源共享(CORS)是一个常见的问题。Spring Boot 提供了灵活的方式来处理 CORS 配置。本文将介绍如何通过自动配置的方式,在 Spring Boot 应用程序中全局配置 CORS。 背景 当浏览器从一个域名的网页去请求另…...
Github很慢/无法访问:简单两步搞定
第一步:获取github当前的DNS列表 第二步:把它们复制到自己本地的hosts文件中,保存 比大象装冰箱还少一步!( 下面具体说怎么操作 ~) 获取github当前的DNS列表 http://raw.hellogithub.com/hosts 把这个地址粘贴到浏…...
反射机制的简单示例
一个使用反射机制的简单示例,这个示例将展示如何使用反射来实现一个通用的数据导出功能。 首先,让我们创建必要的项目结构和文件: 首先修改 pom.xml 添加依赖: <?xml version"1.0" encoding"UTF-8"?&…...
DeepSeek在学术读写翻译中的独特优势
上下文理解能力 DeepSeek的核心优势之一在于其卓越的上下文理解能力。它能够根据前文内容准确理解和回应用户的提问或指令,确保对话的连贯性和相关性。这一能力在处理长篇对话和复杂文本时尤为重要,能够帮助用户更好地把握整体逻辑和细节。 2. 翻译专业…...
rust笔记4-属性derive
在 Rust 中,#[derive] 是一种属性(attribute),用于自动为类型实现某些 Trait。通过 #[derive],编译器可以自动生成这些 Trait 的默认实现,从而减少手动编写重复代码的工作量。 #[derive] 通常用于实现一些常见的 Trait,例如: Debug:为类型生成格式化输出的代码。Clon…...
前端(AJAX)学习笔记(CLASS 2):图书管理案例以及图片上传
* BootStrap弹框 功能:不离开当前页面,显示单独内容,供用户操作 步骤: 1、引入bootstrap.css和bootstrap.js 2、准备弹框标签,确认结构 3、通过自定义属性,控制弹框的显示和隐藏 其中的bootstrap.css…...
跟李沐学AI:InstructGPT论文精读(SFT、RLHF)
原论文:[2203.02155] Training language models to follow instructions with human feedback 原视频:InstructGPT 论文精读【论文精读48】_哔哩哔哩_bilibili 简介 1. RLHF 的基本概念 RLHF 是一种结合强化学习和人类反馈的训练方法,旨在…...
RedisTemplate存储含有特殊字符解决
ERROR信息: 案发时间: 2025-02-18 01:01 案发现场: UserServiceImpl.java 嫌疑人: stringRedisTemplate.opsForValue().set(SystemConstants.LOGIN_CODE_PREFIX phone, code, Duration.ofMinutes(3L)); // 3分钟过期作案动机: stringRedisTemplate继承了Redistemplate 使用的…...
燧光 XimmerseMR SDK接入Unity
官网SDK文档连接: RhinoX Unity XR SDK 一:下载SDK 下载链接:RhinoX Unity XR SDK 二:打开Unity项目,添加Package 1、先添加XR Core Utilties包和XR Interaction Toolkit包 2、导 2、再导入下载好的燧光SDK 三&…...
Mycat中间件
一、概述 Mycat是开源的,活跃的、基于java语言编写的MySQL数据库中间件。可以像使用MySQL一样使用mycat,对于开发人员来说根本感觉不到mycat的存在; 二、安装 Mycat是采用java语言开发的开源数据库中间件,支持windows和linux运行环…...
【HBase】HBaseJMX 接口监控信息实现钉钉告警
目录 一、JMX 简介 二、JMX监控信息钉钉告警实现 一、JMX 简介 官网:Apache HBase ™ Reference Guide JMX (Java管理扩展)提供了内置的工具,使您能够监视和管理Java VM。要启用远程系统的监视和管理,需要在启动Java…...
OpenLayers总结3
一、 静态测距 1.原理 静态测距主要是针对地图上已有的矢量要素(如线要素),利用 OpenLayers 提供的几何计算函数来获取其长度。在实际操作中,先加载包含几何要素的 GeoJSON 数据到矢量图层,当鼠标指针移动到要素上时…...
【OpenCV】在Liunx中配置OpenCV环境变量
将 /usr/local/include/opencv4 加入到环境变量中,可以帮助编译器找到 OpenCV 的头文件。这可以通过设置 CPLUS_INCLUDE_PATH 和 C_INCLUDE_PATH 环境变量来实现。以下是具体步骤: 方法一:临时设置环境变量 如果您希望临时设置这些环境变量…...
游戏引擎学习第109天
回顾目前进展 在这一期中,讨论了游戏开发中的一个重要问题——如何处理Z轴值的表示,尤其是在一个3D游戏中,如何更好地表示和存储这些值。上次的进展中,已经解决了透视投影的问题,意味着渲染部分的Z轴代码基本上已经完…...
npm、yarn、pnpm 的异同及为何推荐 pnpm
文章目录 一、引言二、npm 介绍(一)工作原理和特点(二)优势与不足 三、yarn 介绍(一)诞生背景和特性(二)与 npm 的主要区别 四、pnpm 介绍(一)核心优势和创新…...
基于遗传算法排课系统
一、遗传算法介绍: 遗传算法核心的任务是要通过编码体系,给出解决方案的染色体表现规则,首先需要随机初始化一定数量的种群(population),而种群则由一定数目的个体(individual)构成。每个个体实际上是染色体…...
Windows 图形显示驱动开发-GpuMmu 示例方案
本文介绍常见使用方案以及实现这些方案所需的操作顺序。 更新进程的页表条目 下面是更新页表条目以将属于进程 (P) 的分配映射到物理内存的操作序列。 假定页表分配已驻留在图形处理单元中GPU)内存段。 视频内存管理器在分页进程上下文中为进程 P 的根页表分配分配虚拟地址范…...
【Linux AnolisOS】关于Docker的一系列问题。尤其是拉取东西时的网络问题,镜像源问题。
AnolisOS 8中使用Docker部署(全)_anolis安装docker-CSDN博客 从在虚拟机安装龙蜥到安装docker上面这篇文章写的很清晰了,我重点讲述我解决文章里面问题一些的方法。 问题1: docker: Get https://registry-1.docker.io/v2/: net/h…...
策略+适配器模式详解
文章目录 1.策略模式1.目录结构2.Strategy.java 策略接口3.StrategyA.java 策略A4.StrategyB.java 策略B5.StrategyC.java 策略C6.Context.java 策略上下文7.Client.java 客户端8.小结 2.适配器模式1.目录结构2.CustomPaymentProcessor.java 自己的支付接口3.PayPalPaymentServ…...
Vue中事件名的命名规范
Vue中事件名的命名规范 起因: 本人之前不太写vue的项目,最近接触了vue的代码,在学习的过程中同时也会伴随着一点疑惑。比如一以下面的父子组件的事件传递为例: 父组件: 显然,父组件有个自定义事件refre…...
云计算架构学习之Ansible-playbook实战、Ansible-流程控制、Ansible-字典循环-roles角色
一、Ansible-playbook实战 1.Ansible-playbook安装软件 bash #编写yml [rootansible ansible]# cat wget.yml - hosts: backup tasks: - name: Install wget yum: name: wget state: present #检查playbook的语法 [rootansible ansible]…...
背包dp与数位dp
背包dp 介绍 动态规划实际上就是将复杂问题分解成若干个子问题,并通过子问题的解逐步发展成整体问题的解的算法思想。(我感觉这个解释就跟递归的思想一样) 背包问题分为01背包(物体只能使用一次),完全背包(物体可以使用无数次)&…...
【linux】更换ollama的deepseek模型默认安装路径
【linux】更换ollama的deepseek模型默认安装路径 文章目录 【linux】更换ollama的deepseek模型默认安装路径Ollama 默认安装路径及模型存储路径迁移ollama模型到新的路径1.创建新的模型存储目录2.停止ollama3.迁移现有模型4.修改 Ollama 服务配置5.重启ollama6.验证迁移是否成功…...
【紫光同创国产FPGA教程】——FPGA开发工具使用
本原创文章由深圳市小眼睛科技有限公司创作,版权归本公司所有,如需转载,需授权并注明出处(www.meyesemi.com) 一:实验简介 实验目的:了解PDS软件的使用,在线Debugger工具的使用请看第八章uart实…...
面试技术分享:MySQL死锁与事务等待超时的临时解决方案
📝 面试技术分享:MySQL死锁与事务等待超时的临时解决方案 1. 问题背景 某电商系统在促销高峰期出现库存更新失败,日志报错: Lock wait timeout exceeded; try restarting transaction (errno 1213)现象:多个事务因争…...
6.3 k8s的事件event和kube-scheduler中的事件广播器
什么是k8s的events k8s的events是向您展示集群内部发生的事情的对象 例如调度程序做出了哪些决定或者为什么某些 Pod 从节点中被逐出 哪些组件可以产生events 所有核心组件和扩展(操作符)都可以通过 API Server 创建事件k8s 多个组件均会产生 event …...
OAI 平台 4G(LTE)基站 、终端、核心网 端到端部署实践(一)
本系列文章,基于OAI LTE代码搭建端到端运行环境,包含 eNB,EPC,UE三个网元。本小节先介绍系统总体架构,硬件平台及驱动安装方法。 1. Overview 系统总体架构如下图所示。 2 Machine setup 2.1 Machine specs Distributor ID: Ubuntu Description: Ubuntu 18.04.5 LTS…...
t113修改串口
1 sys_config.fex [uart_para] uart_debug_port 0 uart_debug_tx port:PE02<6><1><default><default> uart_debug_rx port:PE03<6><1><default><default> 2 uboot修改启动参数 3 修改env.cfg启动地址和传输 #ear…...
「软件设计模式」桥接模式(Bridge Pattern)
深入解析桥接模式:解耦抽象与实现的艺术 一、模式思想:正交维度的优雅解耦 桥接模式(Bridge Pattern)通过分离抽象(Abstraction)与实现(Implementation),使二者可以独立…...
“地质环境体检”辅助智慧地质,服务工程建设、城市用地规划
随着社会经济的高速发展,各类工程建设也在加快筹建中。在工程项目的快速推进中,如何保障工作安全和工程建设的质量,是国家和社会普遍关注的一个问题。地质环境条件是影响工程建设、城市用地规划的重要因素,加强地质风险系统性研究…...
TMS320F28335二次bootloader在线IAP升级
F28335总共ABCDEFGH个区域,每个32K*16bits,即64K字节。 bootloader代码占用A区,地址0x338000~0x33FF7F,cmd文件中SECTIONS部分,需要添加Flash28_API相关信息,具体下载Flash28335_API_V210的demo࿰…...
java:用Guava的TypeToken优雅处理通配符类型(WildcardType): ? extends Number
在日常开发中我们经常会遇到泛型和通配符类型(WildcardType),比如当我们需要处理List<? extends Number>这样的类型时,如何优雅地创建这样的类型表示?本文将重点介绍如何通过Guava的TypeToken来实现通配符类型的…...
ROS-相机话题-获取图像-颜色目标识别与定位-目标跟随-人脸检测
文章目录 相机话题获取图像颜色目标识别与定位目标跟随人脸检测 相机话题 启动仿真 roslaunch wpr_simulation wpb_stage_robocup.launch rostopic hz /kinect2/qhd/image_color_rect/camera/image_raw:原始的、未经处理的图像数据。 /camera/image_rectÿ…...
Zabbix——Rocky9安装zabbix相关步骤记录
安装Zabbix 安装MariaDB 这里用MariaDB演示 https://mariadb.org/download/?trepo-config&dRedHatEnterpriseLinux9&v10.11&r_mneusoft 通过这个网址获得连接 选择对应的repo 根据系统版本和要安装的版本选择对应的repo 安装 新建一个repo文件,例…...
三轴云台之姿态测量篇
一、姿态测量的基本原理 三轴云台通过内置的传感器实时感知其姿态变化。这些传感器主要包括陀螺仪、加速度计和磁力计(在某些高级系统中)。 陀螺仪:用于检测云台的角速度变化,即绕三个轴的旋转速度。陀螺仪提供的数据是姿态测量的…...
Kotlin 2.1.0 入门教程(二十三)泛型、泛型约束、协变、逆变、不变
out(协变) out 关键字用于实现泛型的协变。协变意味着如果 B 是 A 的子类型,那么 Producer<B> 可以被视为 Producer<A> 的子类型。这里的 Producer 是一个使用泛型类型参数的类或接口,并且该泛型类型参数被标记为 ou…...
VSCode 中使用 Snippets 设置常用代码块
背景 在开发中,有很多代码片段是重复的,例如:vue文件中的模版,react 中的模版,打印的 log 等等,很多很多。对于这些重复性的工作,vscode 官方提供了解决方案-Snippets in Visual Studio Code&a…...
在conda虚拟环境中安装jupyter lab-----deepseek问答记录
在 Conda 虚拟环境中安装 Jupyter Lab 的步骤如下: 1. 创建并激活 Conda 虚拟环境 如果你还没有创建虚拟环境,可以使用以下命令创建一个新的虚拟环境并激活它: conda create -n myenv python3.x # 将 myenv 替换为你的环境名称࿰…...
单元测试整理
在国外软件开发中,单元测试必不可少,但是国内并不太重视这一块,一个好的单元测试可以提前发现很多问题,也减去和测试battle的时间 Spring单元测试 JUnit4 RunWith 指明单元测试框架 e.g. RunWith(SpringJUnit4ClassRunner.cla…...
计算机毕业设计hadoop+spark旅游景点推荐 旅游推荐系统 旅游可视化 旅游爬虫 景区客流量预测 旅游大数据 大数据毕业设计
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
Java虚拟机面试题:内存管理(下)
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...
【贝克街迷宫疑云:用侦探思维破解Java迷宫算法】
贝克街迷宫疑云:用侦探思维破解Java迷宫算法 "华生,把煤气灯调亮些。"福尔摩斯用放大镜仔细端详着桌上的羊皮纸,“这个案子比表面上看起来要复杂得多——它是个三维的思维迷宫。” 第一幕:离奇委托 1895年秋的伦敦笼…...
网络安全示意图 网络安全路线图
其实网络安全本身的知识点并不算难,但需要学的东西比较多,如果想要从事网络安全领域,肯定是需要系统、全面地掌握清楚需要用到的技能的。 自学的方式基本是通过看视频或者相关的书籍,不论是什么方法,都是很难的&#…...
ubuntu22.04离线安装K8S
1. 准备离线安装包 参考教程离线包准备教程 2. 准备环境 2.1. 准备主机 主机名ip系统k8s-master192.168.38.128ubuntu22.04k8s-node192.168.38.131ubuntu22.04 2.2. 设置host 修改 /etc/hosts 文件,添加master和node节点,需要和主机名保持一致 2…...
985本硕,网络安全方向,走算法还是走开发?
今天给大家分享的是一位粉丝的提问,985本硕,网络安全方向,走算法还是走开发? 接下来把粉丝的具体提问和我的回复分享给大家,希望也能给一些类似情况的小伙伴一些启发和帮助。 同学提问: 985本硕ÿ…...