Java面试黄金宝典11
1. 什么是 JMM 内存模型
- 定义
JMM(Java Memory Model)即 Java 内存模型,它并非真实的物理内存结构,而是一种抽象的概念。其主要作用是规范 Java 虚拟机与计算机主内存(Main Memory)之间的交互方式,目的是屏蔽不同硬件和操作系统在内存访问上的差异,确保 Java 程序在各种平台上都能获得一致的内存访问效果。
在 JMM 的体系中,线程之间的共享变量存于主内存之中。而每个线程都拥有自己的本地内存(Local Memory),这里的本地内存是一个抽象概念,它涵盖了缓存、写缓冲区、寄存器等区域。线程若要对共享变量进行操作,必须先将变量从主内存拷贝到本地内存,操作完成后再把结果刷新回主内存。
- 原理
JMM 是基于缓存一致性协议构建的,它通过定义一系列规则来保障多线程环境下的内存可见性和有序性。举例来说,当一个线程对共享变量的值进行修改后,它需要把修改后的值刷新回主内存;而其他线程在读取该变量时,就需要从主内存中重新获取最新的值,以此来保证各个线程看到的共享变量值是一致的。
- 要点
- 主内存:是所有线程共享的内存区域,用于存储共享变量。
- 本地内存:每个线程私有的内存区域,存储着该线程使用的共享变量的副本。
- 线程通信:线程之间的通信是通过主内存来完成的,线程不能直接访问其他线程的本地内存。
- 应用
JMM 与硬件内存架构紧密相关,它在一定程度上模拟了硬件的内存访问模式。同时,JMM 为 Java 中的并发编程奠定了基础,像 volatile
、synchronized
等关键字的语义都依赖于 JMM 来实现。例如,volatile
关键字通过保证变量的可见性,确保一个线程对 volatile
变量的修改能立即被其他线程看到,这背后就是 JMM 的规则在起作用。
2. JMM 中的 happens - before 原则
- 定义
happens - before 原则是 JMM 中用于判断数据是否存在竞争、线程是否安全的重要规则。如果操作 A happens - before
操作 B,那么操作 A 的执行结果对操作 B 是可见的,并且操作 A 的执行顺序在操作 B 之前。不过需要注意的是,这里的 “顺序” 并非严格的时间先后顺序,而是强调操作结果的可见性。
- 原理
happens - before 原则的核心在于保障多线程环境下的有序性和可见性。它并不要求前一个操作在时间上一定先于后一个操作执行,而是着重于前一个操作的结果对后一个操作是可见的。例如,在多线程环境中,可能会存在指令重排序的情况,但只要满足 happens - before 原则,就不会影响程序的正确性。
- 要点
- 程序顺序规则:在一个线程内部,每个操作
happens - before
该线程中任意后续操作。这保证了单线程程序的执行顺序符合代码的编写顺序。 - 监视器锁规则:对一个锁的解锁操作
happens - before
随后对这个锁的加锁操作。这确保了在同一时刻只有一个线程能够访问被锁保护的代码块,并且线程在释放锁后,其他线程能够看到该线程对共享变量所做的修改。 volatile
变量规则:对一个volatile
域的写操作happens - before
任意后续对这个volatile
域的读操作。这保证了volatile
变量的可见性,使得一个线程对volatile
变量的修改能够立即被其他线程感知。- 传递性:如果
A happens - before B
,且B happens - before C
,那么A happens - before C
。通过传递性,可以将多个操作之间的 happens - before 关系进行扩展。
- 应用
happens - before 原则是 JMM 的核心内容,它为 Java 程序员提供了一种简单的方式来推理多线程程序的正确性。在编写并发程序时,遵循 happens - before 原则可以有效避免数据竞争和内存可见性问题。例如,在使用线程池时,线程池的任务提交和任务执行之间就存在 happens - before 关系,开发者可以利用这一原则来确保任务执行的正确性。
3. 什么是堆中的永久代
- 定义
在 Java 8 之前,Java 堆内存被划分为新生代、老年代和永久代。永久代主要用于存储类的元数据信息,如类的结构、方法、字段、常量池等。永久代虽然和堆内存一起进行管理,但它的垃圾回收机制与堆的其他部分有所不同。
- 原理
永久代的设计初衷是为了存储类的元数据,因为这些数据在程序运行期间通常是固定不变的。JVM 在类加载时会将类的元数据信息存储在永久代中,直到类被卸载。由于类的元数据相对稳定,所以永久代的垃圾回收频率较低。
- 要点
- 存储内容:永久代存储的是类的元数据,而不是对象实例。
- 大小限制:永久代有固定的大小限制,当存储的元数据超过这个限制时,就容易出现
OutOfMemoryError: PermGen space
错误。 - 版本变化:从 Java 8 开始,永久代被元空间(Metaspace)取代。
- 应用
元空间与永久代的主要区别在于,元空间使用本地内存(Native Memory),而不是 JVM 堆内存。这使得元空间的大小不再受 JVM 堆大小的限制,减少了 OutOfMemoryError: PermGen space
错误的发生。例如,在一些大型的 Java 应用中,可能会加载大量的类,使用永久代时容易出现空间不足的问题,而使用元空间则可以更好地应对这种情况。
4. 什么样的对象需要回收
- 定义
在 Java 中,当一个对象不再被任何引用指向时,该对象就成为了垃圾对象,需要被回收。判断一个对象是否为垃圾对象通常有两种方法:引用计数法和可达性分析法。
- 原理
- 引用计数法:为每个对象维护一个引用计数器,当有一个新的引用指向该对象时,计数器加 1;当一个引用不再指向该对象时,计数器减 1。当计数器的值为 0 时,表明该对象没有任何引用指向它,就被认为是垃圾对象。
- 可达性分析法:从一组被称为 GC Roots 的对象开始,通过引用关系向下搜索,能够被搜索到的对象称为可达对象,这些对象是存活的;而不能被搜索到的对象则被认为是垃圾对象。
- 要点
- 垃圾对象定义:不再被引用的对象即为垃圾对象。
- 方法优缺点:引用计数法实现简单,但存在循环引用的问题,即两个对象相互引用,导致它们的引用计数器永远不为 0,从而无法被回收;可达性分析法是目前主流的垃圾对象判断方法,能够有效解决循环引用的问题。
- 应用
在 Java 中,对象的引用分为强引用、软引用、弱引用和虚引用。不同类型的引用对对象的存活时间有不同的影响。例如,强引用是最常见的引用类型,只要强引用存在,对象就不会被回收;软引用在系统内存不足时才会被回收,常用于实现缓存;弱引用在垃圾回收时会被直接回收;虚引用主要用于跟踪对象被垃圾回收的状态。
5. 什么可作为 GC Roots 的对象
- 定义
GC Roots 是可达性分析法中作为起始点的对象集合,以下几种对象可以作为 GC Roots:
- 虚拟机栈(栈帧中的本地变量表)中引用的对象:当一个方法被调用时,会在虚拟机栈中创建一个栈帧,栈帧中的本地变量表可能会引用一些对象,这些对象可以作为 GC Roots。
- 方法区中类静态属性引用的对象:类的静态属性是属于类的,而不是属于某个对象的,因此这些静态属性引用的对象可以作为 GC Roots。
- 方法区中常量引用的对象:常量在程序运行期间是固定不变的,常量引用的对象也可以作为 GC Roots。
- 本地方法栈中 JNI(即一般说的 Native 方法)引用的对象:当 Java 程序调用 Native 方法时,会在本地方法栈中创建栈帧,栈帧中引用的对象可以作为 GC Roots。
- 原理
从 GC Roots 开始进行可达性分析,可以确定哪些对象是可达的,哪些对象是不可达的。GC Roots 是程序中正在使用的对象,它们引用的对象也被认为是有用的,不能被回收。通过这种方式,可以确保在垃圾回收过程中,不会误回收那些还在被使用的对象。
- 要点
- 起始点作用:GC Roots 是垃圾回收的起始点,通过它可以构建出对象的引用关系图。
- 多种类型:不同类型的 GC Roots 代表了不同的程序上下文,涵盖了虚拟机栈、方法区和本地方法栈等。
- 应用
在某些情况下,临时对象也可能成为 GC Roots,例如在垃圾回收过程中,正在被使用的对象可能会被标记为 GC Roots,以确保在回收过程中这些对象不会被错误地回收。此外,在 Java 中,类加载器也可以作为一种特殊的 GC Roots,因为类加载器会引用类的元数据和类的实例对象。
6. 有哪些 GC 算法
常见的 GC 算法有以下几种:
- 标记 - 清除算法(Mark - Sweep):该算法分为两个阶段,首先标记出所有需要回收的对象,然后在标记完成后统一回收所有被标记的对象。
- 标记 - 整理算法(Mark - Compact):同样先标记出需要回收的对象,然后将存活的对象向一端移动,最后清理掉端边界以外的内存。
- 复制算法(Copying):将可用内存按容量划分为大小相等的两块,每次只使用其中一块。当这一块内存用完了,就将还存活着的对象复制到另外一块上面,然后再把已使用过的内存空间一次清理掉。
- 分代收集算法(Generational Collection):根据对象的存活周期将内存划分为不同的区域,一般分为新生代和老年代。新生代使用复制算法,老年代使用标记 - 清除或标记 - 整理算法。
- 原理
不同的 GC 算法基于不同的内存使用场景和对象存活特性设计。例如,复制算法适用于对象存活率较低的场景,因为它只需要复制存活的对象,而不需要标记和清除操作;标记 - 整理算法适用于对象存活率较高的场景,因为它可以避免内存碎片的产生。
- 要点
- 标记 - 清除算法:简单直接,但会产生内存碎片,随着时间的推移,可能会导致无法分配连续的大内存空间。
- 复制算法:实现简单,回收效率高,但需要额外的内存空间,且当对象存活率较高时,复制操作的开销会比较大。
- 标记 - 整理算法:可以避免内存碎片,但移动对象的操作会带来一定的性能开销。
- 分代收集算法:结合了不同算法的优点,根据对象的存活周期进行分区管理,是目前主流的垃圾回收算法。
- 应用
不同的垃圾回收器采用了不同的 GC 算法组合,例如,Serial 收集器在新生代采用复制算法,在老年代采用标记 - 整理算法;CMS 收集器在老年代采用标记 - 清除算法。开发者可以根据应用程序的特点和性能需求选择合适的垃圾回收器和 GC 算法。
7. 什么是 Minor GC, Full GC
- Minor GC:也称为新生代 GC,指的是发生在新生代的垃圾回收动作。由于新生代中的对象大多生命周期较短,所以 Minor GC 非常频繁,一般回收速度也比较快。
- Full GC:也称为全局 GC,指的是发生在整个堆(包括新生代、老年代、永久代 / 元空间)的垃圾回收动作。Full GC 通常会导致应用程序出现较长时间的停顿,因为它需要回收整个堆的内存。
- 原理
Minor GC 主要是为了回收新生代中不再使用的对象,当新生代的内存空间不足时,就会触发 Minor GC。Full GC 通常是在老年代空间不足、永久代 / 元空间不足或者调用 System.gc()
方法时触发。
- 要点
- 回收区域:Minor GC 只回收新生代的内存;Full GC 回收整个堆的内存,包括新生代、老年代和永久代 / 元空间。
- 停顿时间:Full GC 的停顿时间比 Minor GC 长,因为它涉及的回收范围更广,操作更复杂。
- 应用
频繁的 Full GC 会影响应用程序的性能,因此在开发过程中需要尽量避免 Full GC 的发生。可以通过调整堆内存的大小、优化对象的生命周期等方式来减少 Full GC 的频率。例如,合理设置新生代和老年代的比例,避免创建过多的大对象,及时释放不再使用的对象等。
8. 什么是 YGC
- 定义
YGC 是 Young Generation Garbage Collection 的缩写,即新生代垃圾回收,与 Minor GC 是同一个概念。它主要负责回收新生代中的垃圾对象,由于新生代中的对象大多是朝生夕灭的,所以 YGC 发生的频率比较高。
- 原理
当新生代中的 Eden 区或 Survivor 区内存不足时,就会触发 YGC。YGC 通常采用复制算法,将存活的对象复制到另一个 Survivor 区或老年代。
- 要点
- 回收范围:YGC 只针对新生代进行垃圾回收。
- 性能特点:YGC 的回收速度相对较快,停顿时间较短,因为新生代中的对象存活率较低,复制操作的开销较小。
- 应用
在监控 Java 应用程序的性能时,YGC 的频率和耗时是重要的指标。过高的 YGC 频率可能意味着新生代内存分配不合理,需要调整堆内存的大小或对象的生命周期。例如,如果 YGC 过于频繁,可以适当增大新生代的内存空间,减少对象进入老年代的概率。
9. 什么是 FGC
- 定义
FGC 是 Full Garbage Collection 的缩写,即全局垃圾回收,与 Full GC 是同一个概念。它会对整个堆(包括新生代、老年代、永久代 / 元空间)进行垃圾回收,通常会导致应用程序出现较长时间的停顿。
- 原理
FGC 通常在以下几种情况下触发:老年代空间不足、永久代 / 元空间不足、调用 System.gc()
方法、堆中产生了大对象等。FGC 会采用标记 - 清除或标记 - 整理算法来回收内存。
- 要点
- 回收范围:FGC 会回收整个堆的内存,涉及的范围广,操作复杂。
- 性能影响:FGC 的停顿时间较长,会对应用程序的性能产生较大影响,因为在回收过程中,应用程序需要暂停执行。
- 应用
为了减少 FGC 的发生,可以采取以下措施:合理调整堆内存的大小、避免创建大对象、及时释放不再使用的对象等。例如,在设计数据结构时,尽量避免使用过大的数组或集合,以减少大对象的产生。
10. 什么是 CMS
- 定义
CMS(Concurrent Mark Sweep)是一种以获取最短回收停顿时间为目标的垃圾回收器,它基于标记 - 清除算法实现,主要针对老年代进行垃圾回收。CMS 收集器在 JDK 1.5 时期被引入,适用于对响应时间要求较高的应用程序。
- 原理
CMS 收集器的工作过程分为四个阶段:
- 初始标记(Initial Mark):标记出所有直接与 GC Roots 关联的对象,这个阶段会导致应用程序出现短暂的停顿。
- 并发标记(Concurrent Mark):从初始标记阶段标记的对象开始,并发地遍历整个老年代,标记出所有需要回收的对象,这个阶段不会导致应用程序停顿。
- 重新标记(Remark):修正并发标记阶段因用户程序继续运行而导致标记产生变动的那一部分对象的标记记录,这个阶段会导致应用程序出现短暂的停顿。
- 并发清除(Concurrent Sweep):并发地清除所有被标记的对象,这个阶段不会导致应用程序停顿。
- 要点
- 目标优势:CMS 收集器的主要优点是停顿时间短,适合对响应时间要求较高的应用程序,如 Web 应用。
- 算法缺陷:CMS 收集器基于标记 - 清除算法,会产生内存碎片,随着时间的推移,可能会导致无法分配连续的大内存空间。
- 资源占用:CMS 收集器在并发标记和并发清除阶段会占用一部分 CPU 资源,可能会影响应用程序的性能,尤其是在 CPU 资源紧张的情况下。
- 应用
由于 CMS 收集器存在内存碎片和占用 CPU 资源等问题,从 JDK 9 开始,CMS 收集器被标记为废弃,推荐使用 G1 收集器。G1 收集器结合了标记 - 整理和复制算法,避免了内存碎片的产生,并且可以更好地控制停顿时间,能够在不同的场景下提供更稳定的性能。
友情提示:本文已经整理成文档,可以到如下链接免积分下载阅读
https://download.csdn.net/download/ylfhpy/90523338
相关文章:
Java面试黄金宝典11
1. 什么是 JMM 内存模型 定义 JMM(Java Memory Model)即 Java 内存模型,它并非真实的物理内存结构,而是一种抽象的概念。其主要作用是规范 Java 虚拟机与计算机主内存(Main Memory)之间的交互方式&#x…...
华为p10 plus 鸿蒙2.0降级emui9.1.0.228
需要用到的工具 HiSuite Proxy V3 华为手机助手11.0.0.530_ove或者11.0.0.630_ove应该都可以。 官方的通道已关闭,所以要用代理,127.0.0.1端口7777 https://www.firmfinder.ml/ https://professorjtj.github.io/v2/ https://hisubway.online/articl…...
高速开源镜像站网址列表2503
高速开源镜像站网址列表 以下是国内常用的高速开源镜像站网址列表,涵盖企业和教育机构的主要站点,适用于快速下载开源软件和系统镜像: 一、企业镜像站 阿里云镜像站 地址:https://mirrors.aliyun.com/ 特点:覆盖广泛…...
Python----计算机视觉处理(Opencv:绘制图像轮廓:寻找轮廓,findContours()函数)
一、轮廓 轮廓是图像中目标物体或区域的外部边界线或边界区域,由一系列相连的像素构成封闭形状,代表了物体的基本外形。与边缘不同,轮廓是连续的,而边缘则不一定是连续的。 轮廓与边缘的区别: 轮廓是一组连续的点或线…...
python --face_recognition(人脸识别,检测,特征提取,绘制鼻子,眼睛,嘴巴,眉毛)/活体检测
dlib 安装方法 之前博文 https://blog.csdn.net/weixin_44634704/article/details/141332644 环境: python==3.8 opencv-python==4.11.0.86 face_recognition==1.3.0 dlib==19.24.6人脸检测 import cv2 import face_recognition# 读取人脸图片 img = cv2.imread(r"C:\U…...
【测试工具】如何使用 burp pro 自定义一个拦截器插件
在 Burp Suite 中,你可以使用 Burp Extender 编写自定义拦截器插件,以拦截并修改 HTTP 请求或响应。Burp Suite 支持 Java 和 Python (Jython) 作为扩展开发语言。以下是一个完整的流程,介绍如何创建一个 Burp 插件来拦截请求并进行自定义处理…...
51单片机和STM32 入门分析
51单片机和STM32是嵌入式开发中两种主流的微控制器,它们在架构、性能、应用场景等方面存在显著差异。以下是两者的对比分析及选择建议: 1. 51单片机与STM32的定义与特点 51单片机 定义:基于Intel 8051内核的8位微控制器,结构简单…...
python暴力破解html表单
import requests import time# 目标URL url "http://192.168.3.101/pikachu/vul/burteforce/bf_form.php" # 请替换为实际的目标URL# 已知的用户名 username "admin"# 密码字典文件路径 password_file "passwords.txt"# 伪造请求头ÿ…...
DeepSeek+RAG局域网部署
已经有很多平台集成RAG模式,dify,cherrystudio等,这里通过AI辅助,用DS的API实现一个简单的RAG部署。框架主要技术栈是Chroma,langchain,streamlit,答案流式输出,并且对答案加上索引。支持doc,docx,pdf,txt。…...
流影---开源网络流量分析平台(一)(小白超详细)
目录 流影介绍 一、技术架构与核心技术 二、核心功能与特性 流影部署 流影介绍 一、技术架构与核心技术 模块化引擎设计 流影采用四层模块化架构:流量探针(数据采集)、网络行为分析引擎(特征提取)、威胁检测引擎&…...
在IDEA中快速注释所有console.log
在IDEA中快速注释所有console.log 在前端IDEA中,快速注释所有console.log语句可以通过以下步骤实现2: 打开要修改的文件。使用快捷键CtrlF打开搜索框。点击打开使用正则搜索的开关或者通过AltR快捷键来打开。在搜索框输入[]*console.log[]*,…...
python全栈-前端
python全栈-前端 文章目录 HTML标签段落p、换行br、水平线hr图片img路径src超文本链接a超链接之锚点href#id文本有序列表ol无序列表ul自定义列表表格table表格属性单元格合并 表单Forminput标签HTML5新增type属性HTML5新增常用属性 实体字符块元素与行内元素/内联元素容器元素d…...
基于PySide6与pycatia的CATIA绘图文本批量处理工具开发实践
引言 在CAD软件二次开发领域,CATIA的自动化处理一直存在开发门槛高、接口复杂等痛点。本文基于Python生态,结合PySide6 GUI框架与pycatia接口库,实现了一套高效的绘图文本批量处理工具。该工具支持背景视图文本批量处理和交互式文本选择处理…...
Jenkins 集成 SonarQube 代码静态检查使用说明
环境准备 Jenkins 服务器 确保 Jenkins 已安装并运行(推荐 LTS 版本)。安装插件: SonarQube Scanner for Jenkins(用于集成 SonarQube 扫描)NodeJS Plugin(可选,用于 JavaScript 项目࿰…...
pytorch构建线性回归模型
仅仅用于自己记录pytorch学习记录 线性回归模型 (1)准备数据集 数据:三个数据x[x1,x2,x3] y[y1,y2,y3] import torch #线性回归,我们使用三组数据,分别是(1,2),(2,4&a…...
本地部署 LangManus
本地部署 LangManus 0. 引言1. 部署 LangManus2. 部署 LangManus Web UI 0. 引言 LangManus 是一个社区驱动的 AI 自动化框架,它建立在开源社区的卓越工作基础之上。我们的目标是将语言模型与专业工具(如网络搜索、爬虫和 Python 代码执行)相…...
skynet网络包库(lua-netpack.c)的作用解析
目录 网络包库(lua-netpack.c)的作用解析1. 数据包的分片与重组2. 网络事件处理3. 内存管理4. 数据打包与解包 动态库(.so)在 Lua 中的使用1. 编译为动态库2. Lua 中加载与调用(1) 加载模块(2) 核心方法(3) 使用示例 3. 注意事项 …...
XXL-Job 二次分片是怎么做的?有什么问题?怎么去优化的?
XXL-JOB二次分片机制及优化策略 二次分片实现原理 XXL-JOB的二次分片是在分片广播策略的基础上,由开发者自行实现的更细粒度数据拆分。核心流程如下: 初次分片:调度中心根据执行器实例数量(总分片数n)分配分片索引i&…...
零基础本地部署 ComfyUI+Flux.1 模型!5 分钟搭建远程 AI 绘图服务器(保姆级教程)
文章目录 前言1. 本地部署ComfyUI2. 下载 Flux.1 模型3. 下载CLIP模型4. 下载 VAE 模型5. 演示文生图6. 公网使用 Flux.1 大模型6.1 创建远程连接公网地址 7. 固定远程访问公网地址 前言 在如今这 AI 技术一路火花带闪电、疯狂往前冲的时代,图像生成模型那可不再是…...
ABC398题解
A 算法标签: 模拟 #include <iostream> #include <algorithm> #include <cstring>using namespace std;const int N 110;int main() {ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int n;cin >> n;string res;if (n % 2) {int mid n / 2;f…...
数据通信——计算机基础
通信系统的组成 通信系统是指从一个地方向另外一个地方传递和交换信息,实现信息传递所需的一切技术设备和传输媒体的总和。通信系统一般由信源、发送设备、信道、接收设备、信宿以及噪声源组成,以下是各部分的具体介绍: 信源 信源是产生各…...
量子计算与人工智能的融合:下一代算力革命
1. 引言:算力需求的飞速增长与量子计算的潜力 在信息技术飞速发展的今天,人工智能(AI)已经渗透到我们生活的方方面面,从智能助手到自动驾驶,再到医疗诊断,AI 的应用场景日益广泛。然而…...
神经网络解决非线性二分类
这份 Python 代码实现了一个简单的神经网络,用于解决复杂的非线性二分类问题。具体步骤包含生成数据集、定义神经网络模型、训练模型、测试模型以及可视化决策边界。 依赖库说明 python import numpy as np import matplotlib.pyplot as plt from sklearn.datase…...
nuxt3网站文章分享微信 ,QQ功能
1.安装 npm install qrcode --save-dev 2.组件使用 <div class"share"><div style"line-height: 69px; color: #fff;width: 100px;"><p style"text-align: center;">分享:</p></div><div click"shareToMi…...
深入理解Spring框架:核心概念与组成剖析
引言 在Java企业级开发领域,Spring框架无疑是当之无愧的王者。自2003年首次发布以来,Spring凭借其强大的功能、高度的灵活性和卓越的扩展性,已成为构建大型企业应用程序的首选框架。本文将深入探讨Spring框架的核心概念与多样组成部分&#…...
Ubuntu22.04美化MacOS主题
安装Tweaks 参考Ubuntu 22.04 桌面美化成Mac风格这篇更好点 sudo apt install gnome-tweaks gnome-shell-extensions -y安装macos主题 git clone https://github.com/vinceliuice/WhiteSur-gtk-theme.git # 进到文件目录 ./install.sh -t all -N glassy sudo ./tweaks.sh -g…...
MySQL: 创建两个关联的表,用联表sql创建一个新表
MySQL: 创建两个关联的表 建表思路 USERS 表:包含用户的基本信息,像 ID、NAME、EMAIL 等。v_card 表:存有虚拟卡的相关信息,如 type 和 amount。关联字段:USERS 表的 V_CARD 字段和 v_card 表的 v_card 字段用于建立…...
JavaScript 中for...in和for...of循环的原理区别,在遍历对象和数组时分别如何使用
大白话JavaScript 中for…in和for…of循环的原理区别,在遍历对象和数组时分别如何使用 嘿,朋友!咱来唠唠 JavaScript 里 for...in 和 for...of 这两种循环的事儿。它们就像是两个不同的小帮手,能帮你在对象和数组里溜达溜达&…...
图解AUTOSAR_SWS_WatchdogInterface
AUTOSAR Watchdog Interface (WdgIf) 详解 AUTOSAR经典平台看门狗接口模块技术详解 目录 1. 概述 1.1 WdgIf模块的作用1.2 WdgIf在AUTOSAR中的位置2. 架构设计 2.1 WdgIf架构概览2.2 接口设计2.3 序列设计3. 配置详解 3.1 配置参数3.2 配置结构3.3 配置类型4. 总结 4.1 主要特点…...
快速搭建yolo测试环境,超简明的神经网络训练说明书
1 快速搭建yolo测试环境 相对于更早的版本,v5是比较舒服的,直接把仓库拉下来就行,不用单独搞测试脚本和权重文件 $ git clone https://github.com/ultralytics/yolov5.git然后就是切到目录下安装依赖的第三方库: $ cd yolov5 $…...
如何在IDEA中借助深度思考模型 QwQ 提高编码效率?
通义灵码上新模型选择功能,不仅引入了 DeepSeek 满血版 V3 和 R1 这两大 “新星”,Qwen2.5-Max 和 QWQ 也强势登场,正式加入通义灵码的 “豪华阵容”。开发者只需在通义灵码智能问答窗口的输入框中,单击模型选择的下拉菜单&#x…...
探索 Ollama:开源大语言模型平台的无限可能
在人工智能的快速发展进程中,大语言模型扮演着至关重要的角色。Ollama 作为一个开源的大语言模型平台,正逐渐崭露头角,为广大开发者和爱好者带来了全新的体验。它允许用户在本地环境中轻松地运行、创建和共享大型语言模型,极大地降…...
clickhouse多条件查询
安装包 infi.clickhouse-orm 2.1.3建表 create table test.test (name String,age UInt32,birthday Date32,sex UInt8 ) engineMergeTree() order by (name,sex)insert into test.testvalues (aa,34,1991-01-19,1), (cc,30,1994-01-19,0), (haha,31,1994-02-19,0);多条件查询…...
信息的度量
系列文章目录 文章目录 系列文章目录一、离散消息的信息量1.自信息的引入2.自信息定义 二、离散信源的平均信息量---信息熵1.信息熵定义 一、离散消息的信息量 1.自信息的引入 通信的本质是传递信息,为了定量表征信息的度量,引入自信息量的概念。事件包…...
ffmpeg+QOpenGLWidget显示视频
一个基于 FFmpeg 4.x 和 QOpenGLWidget的简单视频播放器代码示例,实现视频解码和渲染到 Qt 窗口的功能。 1)ffmpeg库界面,视频解码支持软解和硬解方式。 硬解后,硬件解码完成需要将数据从GPU复制到CPU。优先采用av_hwf…...
从零开始实现 C++ TinyWebServer 项目总览
文章目录 引言Web Server 概念如何实现高性能 WebServer?基础网络通信I/O 多路复用技术并发处理事件处理模式其他优化策略(未实现) 主要功能模块BufferLogSqlConnectPoolHttpRequestHttpResponseHttpConnectHeapTimerWebServer 引言 TinyWeb…...
opencv无法读取的图像,利用pil和numpy进行修复
代码总结 这段代码的功能是遍历指定文件夹下的所有图像文件,并修复可能存在的格式问题,然后覆盖原图像。 代码解析 设置输入文件夹路径(input_folder)。遍历文件夹中的所有文件,筛选出 .jpg、.jpeg、.png、.webp 格式…...
Redis分布式寻址算法
分布式寻址算法是分布式系统中用于确定数据应该存储在哪个节点的算法。这些算法对于实现高效的数据存取、负载均衡和系统扩展性至关重要。以下是几种常见的分布式寻址算法的解释: 1. Hash 算法 原理:通过哈希函数将数据的键(Key)…...
CUDA 学习(1)——GPU 架构
典型 CPU 架构与 GPU 架构对比: 上图中绿色部分是计算单元,GPU 有更多的计算核心,计算能力更强。黄色部分是控制单元,CPU 中有大量的控制单元,现代 CPU 的晶体管越来越复杂,除了计算,还要实现乱…...
5个视角、5等级及10档次:《数字化转型领域 参考架构》国家标准正式出台
近日,国家标准GB/T 45341-2025《数字化转型管理 参考架构》正式出台。这是我国研制的首个数字化转型领域基础架构类国家标准,对数字化转型领域标准化建设具有重大意义。 关注WeChat Subscription Account【智慧城市指北】,回复关键字“20250…...
2.4 隐函数及由参数方程确定的函数求导
1.隐函数求导 1.1 例题 2. 参数方程确定的函数求导...
PROE 与 STL 格式转换:开启 3D 打印及多元应用的大门
在 3D 设计与制造的复杂生态中,将 PROE 格式转换为 STL 格式绝非无端之举,而是有着深厚且多元的现实需求作为支撑。 一、文件格式介绍 (一)PROE 格式 PROE 作为一款参数化设计软件,采用基于特征的参数化建模技术…...
【Bug记录】node-sass安装失败解决方案
【Bug记录】node-sass 安装失败解决办法 前言 很多小伙伴在安装 node-sass 的时候都失败了,主要的原因是 node 版本和项目依赖的 node-sass 版本不匹配。 解决方案 解决方案:把项目中的 node-sass 替换为 sass,其实 node-sass 已被官方弃…...
三、Python高级特性
Python中的高级数据结构:队列、栈、双端队列、堆与优先队列 在Python编程中,高级数据结构为我们提供了强大而灵活的工具来处理各种复杂的数据存储和操作需求。本文将详细介绍队列、栈、双端队列、堆与优先队列这几种常见的高级数据结构及其在Python中的…...
使用 OpenCV 拼接进行图像处理对比:以形态学操作为例
图像处理在计算机视觉中起着至关重要的作用,而 OpenCV 作为一个强大的图像处理库,提供了丰富的函数来实现各类图像处理任务。形态学操作(Morphological Operations)是其中常用的技术,尤其适用于二值图像的处理。常见的…...
OPENCV数字识别(非手写数字/采用模板匹配)
这篇文章的重点在于 模板匹配 的使用。模板匹配是计算机视觉中的一项基本技术,它通过比对输入图像与模板图像的相似度,来进行目标识别。对于数字识别,特别是标准数字的识别,模板匹配非常有效。 请看效果: 文章结构 …...
【STM32】知识点介绍一:硬件知识
文章目录 一、电源引脚简介二、电平信号三、电路分析 一、电源引脚简介 VCC、GND、VDD和VSS是电子电路中常见的术语,代表着不同的电源引脚或电压。 VCC(Voltage at the Common Collector):VCC是指集电极(Collector&am…...
基于SpringBoot的电影售票系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...
记录我的ICME2025论文之旅:困顿与收获
人生第一次中B会,还是在课业繁重的大三上(有点说法~) “在最黑暗的时刻,总有一束光为你指引前行。” ——记录这段难忘的历程 今年的ICME投稿量创下新高,录取率却跌至20多%,并且首次加入了rebuttal…...
FreeRTOS学习(九):中断管理
FreeRTOS学习(九):中断管理 文章目录 FreeRTOS学习(九):中断管理前言一、中断优先级分组设置特点中断优先级分组设置 二、FreeRTOS中断优先级配置PendSV和SysTick中断优先级配置 三、中断相关寄存器PRIMASK…...