【Java】面试题 并发安全 (2)
文章目录
- 可重入锁(ReentrantLock)知识总结
- 1. 可重入锁概念与特点
- 2. 基本语法与使用注意事项
- 3. 底层实现原理
- 4. 面试回答要点
- synchronized与lock的区别
- 死锁相关面试题讲解
- 死锁产生的四个条件
- ConcurrentHashMap
- 2. JDK1.7的ConcurrentHashMap
- 结构
- 添加数据逻辑
- 存在问题
- 3. JDK1.8的ConcurrentHashMap
- 结构优化
- 保证线程安全方式
- 4. 对比总结
- 底层数据结构
- 锁的方式
- 导致并发程序出现问题的根本原因
可重入锁(ReentrantLock)知识总结
1. 可重入锁概念与特点
- 概念:ReentrantLock是可重入锁,同一线程可多次获取该锁。
- 特点
- 可中断:与synchronized不同,ReentrantLock可在获取锁过程中被中断。
- 可设置超时时间:获取锁时可设置超时时间,超时未获取到锁可放弃,避免无限等待。
- 支持公平锁和非公平锁:默认是非公平锁,也可通过构造函数设置为公平锁。公平锁按等待顺序获取锁,非公平锁允许插队,提高性能但可能导致某些线程长时间等待。
- 支持多个条件变量:类似synchronized中的wait/notify方法,可创建多个条件变量控制线程等待和唤醒,更灵活。
2. 基本语法与使用注意事项
- 语法
- 创建ReentrantLock对象。
- 在try块中调用lock方法获取锁。
- 在finally块中调用unlock方法释放锁,确保锁一定释放,避免死锁。
- 注意事项:必须在finally块中释放锁,防止异常导致锁未释放引发死锁。
3. 底层实现原理
- 基于AQS实现:ReentrantLock底层依赖AbstractQueuedSynchronizer(AQS)实现,AQS维护同步状态和线程等待队列。
- 构造函数与锁类型
- 无参构造函数默认创建非公平锁。
- 带参数构造函数可传入特定参数创建公平锁或非公平锁。
- 工作方式
- 非公平锁获取锁:线程先尝试通过CAS操作修改同步状态state,成功则获取锁并设置当前线程为持有锁线程;失败则进入等待队列,但进入队列前仍会再次尝试获取锁(插队行为),若此时锁可用可直接获取。
- 公平锁获取锁:线程先检查等待队列中是否有前驱节点,有则进入等待队列按先来先得顺序获取锁;无前驱节点则尝试通过CAS操作获取锁。
- 锁释放:释放锁时唤醒等待队列中的线程重新竞争锁。
4. 面试回答要点
- 强调ReentrantLock是可重入锁,同一线程可多次调用lock方法。
- 提及底层主要使用CAS和AQS实现,重点解释AQS工作原理。
- 说明ReentrantLock支持公平锁和非公平锁,无参构造函数默认是非公平锁,可传参设置公平锁。
文章目录
- 可重入锁(ReentrantLock)知识总结
- 1. 可重入锁概念与特点
- 2. 基本语法与使用注意事项
- 3. 底层实现原理
- 4. 面试回答要点
- synchronized与lock的区别
- 死锁相关面试题讲解
- 死锁产生的四个条件
- ConcurrentHashMap
- 2. JDK1.7的ConcurrentHashMap
- 结构
- 添加数据逻辑
- 存在问题
- 3. JDK1.8的ConcurrentHashMap
- 结构优化
- 保证线程安全方式
- 4. 对比总结
- 底层数据结构
- 锁的方式
- 导致并发程序出现问题的根本原因
synchronized与lock的区别
- 面试题引入
- 题目:synchronized与lock有什么区别。
- 回答思路:从语法、功能、性能三个层面回答,重点在功能层面。
- 语法层面区别
- 实现方式:synchronized是关键字,由JVM提供,C++语言实现;lock由JDK提供,用Java语言实现。
- 锁释放机制:使用synchronized时,退出同步块会自动释放锁;lock需调用unlock才能释放锁。
- 功能层面区别
- 相同点:都属于
悲观锁
,具备互斥同步
和锁重入
功能。 - 不同点:lock提供更多功能,如公平锁、可打断、可超时、多条件变量等。
- 公平锁:使用ReentrantLock时,可通过带条件的构造函数传true实现。
- 可打断锁
- 演示代码:创建t1线程,使用
lock.Interruptibly()
方法开启可打断锁,若被打断抛异常,否则正常进入锁并释放锁。
- 演示代码:创建t1线程,使用
- 可超时锁
- 演示代码:线程获取锁调用
tryLock
方法,成功返回true,失败返回false,可设置超时时间,超时后放弃获取锁或获取成功执行业务。
- 演示代码:线程获取锁调用
- 多条件变量
- 演示代码:创建锁后可多次调用
new Condition
声明多个条件变量,线程可按条件等待
- 演示代码:创建锁后可多次调用
- 相同点:都属于
- 适合不同场景的实现及读写锁(功能层面)
- ReentrantLock:与synchronized类似但功能更多。
- 读写锁(ReentrantReadWriteLock):能支撑更高并发量,读操作可不加锁,写操作需加锁,适用于大量读需求的场景。
- 性能层面区别
- 无竞争时:synchronized做了很多优化,如偏向锁、轻量级锁,性能还行。
- 竞争激烈时:lock往往提供更好性能。
死锁相关面试题讲解
- 死锁产生条件及示例演示
- 产生条件:一个线程同时获取多把锁时易发生死锁。
- 示例代码分析:代码中有
object a
和object b
两个对象,t1
线程先获取a
锁,在a
锁代码块中再获取b
锁;t2
线程先获取b
锁,在b
锁代码块中再获取a
锁,然后开启两个线程,程序会一直运行,出现死锁。
- JDK工具诊断死锁问题介绍
- 死锁情况:
t1
持有a
锁等待b
锁,t2
持有b
锁等待a
锁,形成死锁。 - 工具介绍:使用
jdk
提供的jps
和jstack
工具诊断死锁。jps
可输出当前运行的所有进程状态信息,jstack
可查看java
进程内线程的堆栈信息。 - 诊断步骤:先使用
jps
找到死锁代码的进程id
(如24380
),再使用jstack
加进程id
查看日志信息,日志最后会提示死锁,分析t1
、t2
线程等待和锁住的锁,以及可能出现问题的代码行数,根据提示打开代码分析多把锁导致的死锁问题并修改。
- 死锁情况:
- JDK可视化工具
jconsole
检查死锁- 工具介绍:
jdk
自带可视化工具jconsole
,可用于jvm
的内存、线程、类的监控。 - 检查步骤:打开
jconsole
,选择本地连接,找到要监控的进程(如24380
),选择不安全链接,点击线程选项卡中的检查死锁,可看到t2
、t1
线程发生死锁及相关日志,根据提示检查对应代码解决死锁问题。
- 工具介绍:
VisualVM
检查死锁及总结- 检查流程:找到
VisualVM
(安装目录与jconsole
相同),双击打开,在本地选择要检查的进程(如24380
),切换到进程权限,会提示检查到死锁,点击线程dump
获取更多信息,日志中可看到与jstack
类似的t1
、t2
线程等待和锁住锁的信息,根据提示的代码行号到附近查找问题。 - 总结:死锁产生条件是一个线程同时获得多把锁。诊断方法可先使用
jps
和jstack
,也可使用jconsole
或VisualVM
检查死锁问题,根据提示分析代码解决死锁。
- 检查流程:找到
死锁产生的四个条件
死锁是指在多道程序环境下,多个进程因竞争资源而造成的一种僵局,若无外力作用,这些进程都将无法向前推进。在操作系统中,死锁产生的条件有以下四个:
- 互斥条件:指进程对所分配到的资源进行排他性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其他进程请求该资源,则请求者只能等待,直至占有该资源的进程释放。
- 请求和保持条件:指进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。
- 不可剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。
- 环路等待条件:指在发生死锁时,必然存在一个进程-资源的环形链,即进程集合{P0,P1,P2,···,Pn}中的P0正在等待一个P1占用的资源;P1正在等待P2占用的资源,……,Pn正在等待已被P0占用的资源。
这四个条件是死锁产生的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。在实际操作系统中,为了避免死锁的发生,通常会采用一些策略来破坏这些条件,例如资源分配策略、死锁检测与恢复机制等。
ConcurrentHashMap
Java 8的 ConcurrentHashMap
是线程安全的哈希表,有如下关键特性:
- 数据结构:采用数组加链表加红黑树结构。初始为数组,链表长度达阈值(8)且桶数超64时,链表转红黑树,提升查找效率。
- 并发控制:摒弃Java 7的分段锁,改用更细粒度的锁机制。使用
CAS
操作更新部分内容,对单个桶用synchronized
同步,降低锁粒度,提升并发性能。 - 常用方法:
put
用于插入键值对;get
根据键取值;compute
对指定键计算并更新或插入值;forEach
遍历键值对。 - 适用场景:适用于高并发、读多写少场景,以及多线程环境下需线程安全哈希表的情况。
2. JDK1.7的ConcurrentHashMap
结构
- 整体结构:采用分段的数组加链表实现。
- Segment数组:不能扩容,每个下标对应另一个可扩容数组,该数组可挂链表或直接存储数据。
添加数据逻辑
- 计算
key
哈希值定位Segment
数组下标。 - 找到下标后用
ReentrantLock
锁住该位置。 - 再次通过哈希值定位哈希表数组位置存储数据。
存在问题
- 性能低:多个
key
定位到同一Segment
下标时,只有一个线程能操作。 - 数组不能扩容:
Segment
数组长度在创建时确定。
3. JDK1.8的ConcurrentHashMap
结构优化
- 放弃
Segment
数组,采用与HashMap
相同结构,即数组加链表加红黑树。
保证线程安全方式
- 添加新节点:通过
CAS
自旋操作保证数据安全。 - 已有链表或红黑树:用
synchronized
锁住首节点,锁力度更细,效率更高。
4. 对比总结
底层数据结构
- 1.7:分段的数组加链表。
- 1.8:数组加链表加红黑树。
锁的方式
- 1.7:
Segment
数组的分段锁(ReentrantLock
),锁住范围大。 - 1.8:添加新节点用
CAS
,对链表或红黑树用synchronized
锁首节点,性能更好。
导致并发程序出现问题的根本原因
- 并发编程三大特性
- 原子性
- 定义:线程在CPU中的操作不可暂停、中断,要么执行完成,要么不执行。
- 抢票代码示例:有10张票,多线程抢票可能出现超卖或一张票卖给多人,证明代码非原子操作。
- 解决方法:加锁(
synchronized
关键字、lock
锁)使代码具有原子性。
- 可见性
- 定义:一个线程对共享变量修改后,要让另一个线程可见。
- 代码示例:线程一循环取反共享变量
flag
,线程二将其改为true
,但线程一可能读不到该修改,循环不退出。 - 解决方法:加锁(性能不高)或在共享变量上使用
volatile
。
- 有序性
- 指令重排概念:处理器为提高效率可能打乱代码顺序执行,可能导致问题。
- 代码示例:对共享变量
x
和y
进行赋值和读取操作,若出现x = 1, y = 0
的情况,可能是指令重排序。 - 解决方法:在共享变量上添加
volatile
(最好在y
上添加)禁止指令重排序。
- 原子性
- 总结
- 回答导致并发程序出现问题的根本原因时,需提及并发编程的三大特性及解决方法。
- 原子性用
sync
或lock
锁解决;内存可见性推荐用volatile
,也可用锁;有序性通过在共享变量上加volatile
禁止指令重排序。
相关文章:
【Java】面试题 并发安全 (2)
文章目录 可重入锁(ReentrantLock)知识总结1. 可重入锁概念与特点2. 基本语法与使用注意事项3. 底层实现原理4. 面试回答要点 synchronized与lock的区别死锁相关面试题讲解死锁产生的四个条件ConcurrentHashMap2. JDK1.7的ConcurrentHashMap结构添加数据…...
面试场景题系列:设计URL短链
1.场景需求界定 1.缩短URL:提供一个长URL,返回一个短很多的URL。 2.重定向URL:提供一个缩短了的URL,重定向到原URL。 3.高可用、可扩展性和容错性考量。 •写操作:每天生成1亿个URL。 •每秒的写操作数:…...
C++模版
一.函数模版 1.定义:用来产生一组重组的函数,这些函数具有共同的逻辑和操作步骤,但其输入和输出的数据类型可以不一样 2.模版的语法形式 3.例子: template<typename T> T maximum(T value1, T value2, T value3) {T maxi…...
【zookeeper核心源码解析】第二课:俯瞰QuorumPeer启动核心流程,实现选举关键流程
系列文章目录 【zookeeper核心源码解析】第一课:zk启动类核心流程序列图 【zookeeper核心源码解析】第二课:俯瞰QuorumPeer启动核心流程,实现选举关键流程 【zookeeper核心源码解析】第三课:leader与follower何时开始同步&#…...
深度学习中的参数初始化
深度学习中的参数初始化主要是指初始化神经网络中的权重和偏置。权重和偏置通常分开初始化,偏置通常初始化为零或较小的常数值。 没有一种万能的初始化技术,因为最佳初始化可能因具体架构和要解决的问题而异。因此,尝试不同的初始化技术以了解…...
构建全志 T113 Tina SDK
1、环境配置: 准备一个 Ubuntu 系统,可以是 WSL,虚拟机等,建议版本是 20.04。 1.1、安装必要的软件 进入系统后,输入下方命令安装需要的工具 : sudo apt update -y sudo apt full-upgrade -y sudo apt i…...
yolov5 yolov6 yolov7 yolov8 yolov9目标检测、目标分类 目标切割 性能对比
文章目录 YOLOv1-YOLOv8之间的对比如下表所示:一、YOLO算法的核心思想1. YOLO系列算法的步骤2. Backbone、Neck和Head 二、YOLO系列的算法1.1 模型介绍1.2 网络结构1.3 实现细节1.4 性能表现 2. YOLOv2(2016)2.1 改进部分2.2 网络结构 3. YOL…...
经典问题——华测
1、没有 token 的情况下,接口的自动化测试可以通过哪些方式处理? 确认接口是否有其他认证机制: 如果使用的是 Basic Auth、Session ID 等传统方式,可以在请求中直接传递相关认证信息(如用户名和密码、Cookie 等&…...
【视觉惯性SLAM:十二、ORB-SLAM2:局部建图线程】
局部建图线程是ORB-SLAM2的核心模块之一,其主要任务是以局部关键帧为中心,维护和优化局部地图,并不断生成新的地图点,使得地图能够逐渐扩展和保持鲁棒性。以下将从具体的几个方面介绍ORB-SLAM2中的局部建图线程,包括处…...
Spring Boot对访问密钥加解密——HMAC-SHA256
HMAC-SHA256 简介 HMAC-SHA256 是一种基于 哈希函数 的消息认证码(Message Authentication Code, MAC),它结合了哈希算法(如 SHA-256)和一个密钥,用于验证消息的完整性和真实性。 HMAC 是 “Hash-based M…...
Linux高级--2.4.2 linux TCP 系列操作函数 -- 深层理解
一、操作函数简介 在 Linux 中,TCP(传输控制协议)操作涉及多种系统调用和函数,通常用来创建套接字、连接、发送/接收数据、关闭连接等。以下是一些常用的 TCP 操作函数和它们的简要说明: 1. socket() 函数原型: int…...
小程序租赁系统开发指南与实现策略
内容概要 在如今这个快节奏的时代,小程序租赁系统的开发正逐渐成为许多商家提升服务质量与效率的重要选择。在设计这样一个系统时,首先要明白它的核心目标:便捷、安全。用户希望在最短的时间内找到需要的物品,而商家则希望通过这…...
威胁建模助力企业“建防御 抓运营”
本文为安全知识图谱技术白皮书《践行安全知识图谱,携手迈进认知智能》精华解读系列第六篇——威胁建模技术,重点介绍基于知识图谱的威胁建模应用。 如何做好威胁建模 如今,随着技术的变化,攻防技术不对等和攻防双方关注面不同&a…...
soular使用教程
用 soular 配置你的组织,工作更高效!以下是快速上手的简单步骤:  1. 账号管理 可以对账号信息进行多方面管理,包括分配不同的部门、用户组等,从而确保账号权限和职责的清晰分配。  1.1 用…...
WPF编程excel表格操作
WPF编程excel表格操作 摘要NPOI安装封装代码测试代码 摘要 Excel操作几种方式 使用开源库NPOI(常用,操作丰富)使用Microsoft.Office.Interop.Excel COM组件(兼容性问题)使用OpenXml(效率高)使用OleDb(过时) NPOI安装 封装代码 using System; using System.IO; u…...
银河麒麟操作系统安装达梦数据库(超详细)
目录 引言1. 前期准备1.1 安装麒麟系统1.2 下载达梦数据库安装包(DM8)1.3 上传安装包到麒麟系统1.4 挂载安装包(iso)文件1.5 配置安装用户和组1.6 创建安装路径及修改权限1.7 设置临时安装目录 2. 安装达梦数据库(DM8&…...
SpringCloudAlibaba实战入门之路由网关Gateway初体验(十一)
Spring Cloud 原先整合 Zuul 作为网关组件,Zuul 由 Netflix 公司提供的,现在已经不维护了。后面 Netflix 公司又出来了一个 Zuul2.0 网关,但由于一直没有发布稳定版本,所以 Spring Cloud 等不及了就自己推出一个网关,已经不打算整合 zuul2.0 了。 一、什么是网关 1、顾明…...
struct sock
struct sock是套接口在网络层的表示,它包含了套接字在网络通信中的各种状态和参数。以下是对struct sock的详细解析: 定义与位置 struct sock通常在内核源代码的某个头文件中定义,例如include/net/sock.h。它是网络通信中非常重要的数据结构,用于在内核中表示一个套接字。…...
77、将adaface的mtcnn模型npy文件转成atlas310p模型,并进行推理
基本思想:将adaface的mtcnn模型npy文件转成atlas310p模型进行推理。同时比对结果 ubuntu@ubuntu:~$ git clone https://github.com/mk-minchul/AdaFace.git Cloning into AdaFace... remote: Enumerating objects: 236, done. remote: Counting objects: 100% (109/109), don…...
Docker应用-项目部署及DockerCompose
文章目录 Docker应用-项目部署1. 项目部署-后端1.1 修改配置1.2 项目打包1.3 编写Dockerfile1.4 创建镜像1.5 创建并运行容器1.6 测试 2. 项目部署-前端2.1 html前端静态目录2.2 nginx.config编写2.3 部署宿主机服务器2.4 创建容器并挂载2.5 测试 3. DockerCompose3.1 基本语法…...
Java重要面试名词整理(十一):网络编程
文章目录 概念网络协议计算机网络是什么?定义和分类计算机网络发展简史 计算机网络体系结构OSI七层模型TCP/IP模型TCP/IP协议族IP、TCP和UDPARPTCP/IP网络传输中的数据地址和端口号**端口号的确定** TCP特性TCP三次握手TCP四次挥手(分手) UDP…...
html + css 淘宝网实战
之前有小伙伴说,淘宝那么牛逼你会写代码,能帮我做一个一样的淘宝网站吗,好呀,看我接下来如何给你做一个淘宝首页。hahh,开个玩笑。。。学习而已。 在进行html css编写之前 先了解下网页的组成和网页元素的尺寸吧 1.网页的组成 …...
Linux打包压缩解压 --- 打包tar命令(归档)
一、tar命令打包(归档) 在 Linux 中,tar 是一种用于归档文件的工具。通过此命令可将多个文件或目录组合成单个档案文件,可以搭配gzip和bzip等压缩命令让文件体积更小,在配置服务器前备份服务器现有配置,会…...
流架构的读书笔记(2)
流架构的读书笔记(2) 一、建模工具之一沃德利地图 推测技术的发展,交流和辩论思想的最有力的方法是沃德利地图 沃德利地图的制作步骤 1确定范围和用户需求 2确定满足用户需求所需的组件 3在一条范围从全新到被人们接受的演进轴上评估这些组成 部分的演…...
Xshell远程连接提示“找不到匹配的host key算法“问题处理
1.问题描述 Xshell连接远程服务器node1,提示找不到匹配的host key算法;但是用同机房的其他服务器可以使用ssh连接到这个node1机器; 2.问题处理 问题处理尝试了很多方法,可能大家遇到的有所不同,可以尝试一下本文中的…...
Qt C++关于QSpinBox、QDoubleSpinBox的输入框内鼠标点击事件无法触发截取信号的解决办法
项目场景: 基于Qt C 开发鼠标点击spinbox的触发任务时,我基于QSpinBox继承开发了一个新类,用于弹出自定义键盘。 问题描述 在鼠标点击spinbox的边框以及上下键的时候,能够触发覆写的mousePressEvent,但是一旦鼠标点击…...
【ES6复习笔记】Symbol 类型及其应用(9)
一、Symbol 简介 Symbol 是 JavaScript 中的一种基本数据类型,它表示唯一的标识符。Symbol 的主要目的是防止属性名冲突,尤其是在多个代码库或模块中共享对象时。Symbol 值可以用作对象的属性名,这样可以确保属性名是唯一的,不会…...
深度学习笔记(4)——视频理解
视频理解 视频理解的问题:视频太大了 解决方案:在切片上训练,低FPS,低分辨率 测试的时候:在不同的clips上运行模型,取平均预测结果 视频由图片序列组成: 单帧CNN模型 训练普通的2D CNN模型,对每一帧进行分类,通常是视频分类的一个非常强的基线方法。 Late Fusio…...
Flink定时器
flink的定时器都是基于事件时间(event time)或事件处理时间(processing time)的变化来触发响应的。对一部分新手玩家来说,可能不清楚事件时间和事件处理时间的区别。我这里先说一下我的理解,防止下面懵逼。…...
springboot餐厅点餐系统丨源码+数据库+万字文档+PPT
作者简介: 作者:学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等 文末获取“源码数据库万字文档PPT”,支持远程部署调试、运行安装。 技术框架 开发语言:Java 框架:springbo…...
记一个itertools排列组合和列表随机排序的例子
朋友不知道哪里弄来了一长串单词列表,一定要搞个单词不重复的组合。那么这个时候我们就可以想到读书时所学的排列组合知识了,而这个在Python中可以怎么实现呢?我记录如下: 使用itertools模块实现排列组合 在 Python 中ÿ…...
Intent--组件通信
组件通信1 获取子活动的返回值 创建Activity时实现自动注册!【Activity必须要注册才能使用】 默认 LinearLayout 布局,注意 xml 中约束布局的使用; 若需要更改 线性布局 只需要将标签更改为 LinearLayout 即可,记得 设置线性布局…...
数据分析与应用:如何分析7日动销率和滞销率?
目录 0 需求描述 1 数据准备 1.1 订单明细表 1.2 商品信息表 2 SQL实现 3 问题分析与总结...
信息系统管理工程第8章思维导图
软考信管第8章的思维导图也实在是太长了,制作的耗时远超过之前的预计。给你看看思维导图的全貌如下,看看你能够在手机上滚动多少个屏幕 当你看到这段文字的时候,证明你把思维导图从上到下看完了,的确很长吧,第8章的教程…...
5-pandas常用操作2
前言 一、df.max() 计算每列最大值 二、df.apply() 1.可以传函数 代码如下(示例): # lambda 匿名函数自定义 f lambda x:x.max()-x.min() # x参数 冒号后是返回值 df.apply(f) # 默认axis0,所以这里是按列求最大值-最小值2.可以直…...
【HarmonyOS之旅】ArkTS语法(一)
目录 1 -> 基本UI描述 1.1 -> 基本概念 1.2 -> UI描述规范 1.2.1 -> 无参数构造配置 1.2.2 -> 必选参数构造配置 1.2.3 -> 属性配置 1.2.4 -> 事件配置 1.2.5 -> 子组件配置 2 -> 状态管理 2.1 -> 基本概念 2.2 -> 页面级变量的状…...
基于Spring Boot + Vue3实现的在线商品竞拍管理系统源码+文档
前言 基于Spring Boot Vue3实现的在线商品竞拍管理系统是一种现代化的前后端分离架构的应用程序,它结合了Java后端框架Spring Boot和JavaScript前端框架Vue.js的最新版本(Vue 3)。该系统允许用户在线参与商品竞拍,并提供管理后台…...
解决k8s部署dashboard时一直处于Pending状态的问题
直接用离线包就行 命令 [rootk8s-master ~]# docker load -i calico-image-v3.25.0.tar [rootk8s-master ~]# kubectl apply -f calico.yaml链接在https://download.csdn.net/download/weixin_42759398/90192045 [rootk8s-master ~]# docker load -i calico-image-v3.25.0.t…...
【新方法】通过清华镜像源加速 PyTorch GPU 2.5安装及 CUDA 版本选择指南
下面详细介绍所提到的两条命令,它们的作用及如何在你的 Python 环境中加速 PyTorch 等库的安装。 1. 设置清华镜像源 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple这条命令的作用是将 pip (Python 的包管理工具…...
Excel批量设置行高,Excel表格设置自动换行后打印显示不全,Excel表格设置最合适的行高后打印显示不全,完美解决方案!!!
文章目录 说个问题(很严重!!!)写个方案会Python看这里Python环境搭建不存在多行合并存在多行合并 不会Python看这里 说个问题(很严重!!!) 平时处理Excel表格…...
高阶数据结构之并查
并查集的概念 之前我们曾学过树,二叉树、二叉搜索树、红黑树、AVL树等,而并查集可以看做是这些树的集合,也就是森林,它也是一种树型结构,不过是顺序的树型结构,如果有学过堆的同学应该会很熟悉。 它的作用是…...
Pandas04
Pandas01 Pandas02 Pandas03 文章目录 内容回顾1 数据的合并和变形1.1 df.append (了解)1.2 pd.concat1.3 merge 连接 类似于SQL的join1.4 join (了解) 2 变形2.1 转置2.2 透视表 3 MatPlotLib数据可视化3.1 MatPlotLib API 套路 &为什么要可视化3.2 单变量可视化3.3 双变量…...
ECMAScript 标准解析及应用
摘要: 本文深入解析了 ECMAScript 标准,包括其发展历程、核心语法、数据类型、对象模型、函数特性等方面。详细阐述了如何在实际的 Web 开发和 JavaScript 编程中应用这些特性,通过具体的代码示例展示了 ECMAScript 标准在构建高效、健壮的应…...
2025最新版Java面试八股文大全
一、Java并发面试题 1、 ThreadLocal 1.1 谈谈你对ThreadLocal的理解? ThreadLocal的作用主要是做数据隔离,填充的数据只属于当前线程,变量的数据对别的线程而言是相对隔离的。它不是针对程序的全局变量,只是针对当前线程的全局…...
从零开始学AI,完成AI 企业知识库的AI问答搭建
1:本地安装一个ollama玩下,ollama下载模型默认路径为C盘,但该盘空间不足。 解决方案:添加系统环境变量OLLAMA_MODELS,设置其值为新的路径。 2:安装完成后,访问http://127.0.0.1:11434/ 查看服务…...
路过石岩浪心古村
周末常去的七彩城堡儿童乐园附近经常有老房子,没想到老房子最多的地方还是浪心古村。而且越看越有历史。 见到一座写着《序西书室》的房子,我最开始以为是一个古代的学校。但是查了百度更加不知道什么意思了哈。“序西书室”是指《文心雕龙》中的一个…...
【Leecode】Leecode刷题之路第93天之复原IP地址
题目出处 93-复原IP地址-题目描述 题目描述 个人解法 思路: todo代码示例:(Java) todo复杂度分析 todo官方解法 93-复原IP地址-官方解法 方法1:回溯 思路: 代码示例:(Java&…...
121. 买卖股票的最佳时机
题目链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/description/?envTypestudy-plan-v2&envIdtop-100-liked 算法思路: 虽然已经提示我们使用贪心算法了,但是我最开始的时候却不知道怎么使用,因为如果…...
Python Polars快速入门指南:LazyFrames
前文已经介绍了Polars的Dataframe, Contexts 和 Expressions,本文继续介绍Polars的惰性API。惰性API是该库最强大的功能之一,使用惰性API可以设定一系列操作,而无需立即运行它们。相反,这些操作被保存为计算图,只在必要…...
OpenCV-Python实战(10)——形态学
1、腐蚀 cv2.erode() 可以删除图像中的噪音点。 可以删除毛边。 分割图像(当图像连接的不够紧密时) 。 img cv2.erode(src*,kernel*,anchor*,iterations*,borderType*,borderValue*)img:目标图像。 src:原始图像。 kernel&…...