java八股文之JVM
1.什么是程序计数器
- 程序计数器是 JVM 管理线程执行的“定位器”,记录每个线程当前执行的指令位置,确保程序流程的连续性和线程切换的准确性。
- 线程私有的,每个线程一份,内部保存的字节码的行号。用于记录正在执行的字节码指令的地址。
2.介绍一下Java堆
- 线程共享的区域:主要用来保存对象实例,数组等,内存不够则抛出OutOfMemoryError异常。
- 组成:年轻代+老年代
– 年轻代被划分为三部分,Eden区和两个大小严格相同的Survivor区,一个对象在Eden区存活后就会放入Survivor区
– 老年代主要保存生命周期长的对象,一个对象在多次Survivor区存活后就会放入老年区 - Jdk1.7和1.8的区别
– 1.7中有有一个永久代,存储的是类信息、静态变量、常量、编译后的代码
– 1.8移除了永久代,把数据存储到了本地内存的元空间中,防止内存溢出
3.什么是虚拟机栈
- 每个线程运行时所需要的内存,称为虚拟机栈
- 每个栈由多个栈帧(frame)组成,对应着每次方法调用时所占用的内存
- 每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法
4. 垃圾回收是否涉及栈内存?
垃圾回收主要指就是堆内存,当栈帧弹栈以后,内存就会释放
5.栈内存分配越大越好吗?
未必,默认的栈内存通常为1024k,栈帧过大会导致线程数变少
6.方法内的局部变量是否线程安全?
分情况:
- 如果方法内局部变量没有逃离方法的作用范围,它是线程安全的
- 如果是局部变量引用了对象,并逃离方法的作用范围,需要考虑线程安全
7.什么情况下会导致栈内存溢出?
- 栈帧过多导致栈内存溢出,典型问题:递归调用
- 栈帧过大导致栈内存溢出
8.堆栈的区别是什么?
- 栈内存一般会用来存储局部变量和方法调用,但堆内存是用来存储Java对象和数组的的。
- 堆会GC垃圾回收,而栈不会。
- 栈内存是线程私有的,而堆内存是线程共有的。
- 两者异常错误不同,但如果栈内存或者堆内存不足都会抛出异常。
– 栈空间不足:java.lang.StackOverFlowError。
– 堆空间不足:java.lang.OutOfMemoryError。
9.解释一下方法区
- 方法区(MethodArea)是各个线程共享的内存区域
- 主要存储类的信息、运行时常量池
- 虚拟机启动的时候创建,关闭虚拟机时释放
- 如果方法区域中的内存无法满足分配请求,则会抛出OutOfMemoryError:Metaspace
10.介绍一下运行时常量池
- 常量池:可以看作是一张表,虚拟机指令根据这张常量表找到要执行的类名、方法名、参数类型、字面量等信息,里面的地址都是符号地址
- 当类被加载,它的常量池信息就会放入运行时常量池,并把里面的符号地址变为真实地址
11.说一说直接内存
- 并不属于JVM中的内存结构,不由VM进行管理。是虚拟机的系统专门划分出来的内存,java代码和系统都可以直接访问
- 常见于NIO操作时,用于数据缓冲区,分配回收成本较高,但读写性能高,不受JVM内存回收管理
12.说一说类加载器
- VM只会运行二进制文件,类加载器的作用就是将字节码文件加载到JVM中,从而让Java程序能够启动起来。
- 类加载器分四种
– 启动类加载器(BootStrap ClassLoader):加载JAVA_HOME/jre/lib目录下的库
– 扩展类加载器(ExtClassLoader):主要加载JAVA_HOME/jre/lib/ext目录中的类
– 应用类加载器(AppClassLoader):用于加载classPath下的类,就是我们自己写的类
– 自定义类加载器(CustomizeClassLoader):自定义类继承ClassLoader,实现自定义类加载规则。
13.说一说双亲委派模型
- 加载某一个类,先委托上一级的加载器进行加载,如果上级加载器也有上级,则会继续向上委托,如果该类委托上级没有被加载,子加载器尝试加载该类。例如我们自己写的应用类会到应用类加载器,应用会委托扩展类加载器,扩展类加载器会委托启动类加载器加载,但是启动类加载器里面没有这个类,于是会再次层层返回,直到应用类加载器加载对应的类
- 通过双亲委派机制可以避免某一个类被重复加载,当父类已经
加载后则无需重复加载,保证唯一性。 - 亲委派机制也可以更加安全,保证核心API库不会被修改
14.说一下类装载的执行过程
- 加载:将类的二进制数据(.class文件)加载到JVM内存中。
- 验证:确保类的字节流符合JVM规范,不会危害虚拟机。
- 准备:为类的静态变量分配内存并初始化默认值(如0、false、null)
- 解析:将类中的符号引用(如Person@#123)替换为直接引用(实际内存地址)
- 初始化:执行类的静态代码块和静态初始化器,完成静态变量的显式赋值。
- 使用:程序开始使用类的实例或静态成员。
- 卸载:当类不再被使用时,JVM会回收其占用的内存。
15.对象什么时候可以被垃圾回收
- 当对象不再被任何强引用变量直接或间接关联(即“不可达”)时,垃圾回收器会回收其占用的内存。
- 定位垃圾的方法:
– 引用计数法(已弃用)
– 可达性分析算法
16.JVM垃圾回收算法有哪些?
- 标记清除算法: 垃圾回收分为2个阶段,分别是标记和清除,效率虽然高,但是有磁盘碎片,内存不连续的缺点,现在不怎么用了
- 标记整理算法: 标记清除算法一样,将存活对象都向内存另一端移动,然后清理边界以外的垃圾,优点无碎片,但是因为对象需要移动,效率低,一般是老年代使用
- 复制算法: 将原有的内存空间一分为二,每次只用其中的一块,回收时将正在使用的对象复制到另一个内存空间中,然后将该内存空间清空,交换两个内存的角色,完成垃圾的回收;优点是无碎片,但是内存使用率低,一般是新生代使用
- 引用计数: 每个对象维护一个引用计数器,当引用增加时计数+1,引用消失时-1。计数为0的对象即为垃圾,直接回收。
- 分代算法: 将堆分为新生代(Young)和老年代(Old)。新生代的对象生命周期短,频繁回收,使用复制算法(如 Eden→Survivor);老年代的对象存活率高,低频回收,使用标记-清除/整理算法。
18.详细说一说分代回收
- 堆的区域划分
– 堆被分为了两份:新生代和老年代【1:2】
– 对于新生代,内部又被分为了三个区域。Eden区,幸存者区survivor(分成from和to)【8:1:1】 - 对象回收分代回收策略
- 新创建的对象,都会先分配到eden区
- 当伊甸园内存不足,标记伊甸园与from(现阶段没有)的存活对象
- 将存活对象采用复制算法复制到to中,复制完毕后,伊甸园和from内存都得到释放
- 经过一段时间后伊甸园的内存又出现不足,标记eden区域to区存活的对象,将其复制到from区
- 当幸存区对象熬过几次回收(最多15次),普升到老年代(幸存区内存不足或大对象会提前普升)
19.MinorGC、Mixed GC、FullGC的区别是什么
STW: 暂停所有线程等待垃圾回收完成
- MinorGC【young GC】发生在新生代的垃圾回收,暂停时间短(STW)
- Mixed GC新生代+老年代部分区域的垃圾回收,G1收集器特有
- FullGC:新生代+老年代完整垃圾回收,暂停时间长(STW),应尽力避免
20.JVM有哪些垃圾回收器
PS:回答三四个就行
- Serial(串行收集器): 单线程,简单高效,适合单核/小内存环境,但停顿时间长。
- Parallel(并行收集器): 多线程高吞吐,追求高效处理多核CPU下的大数据量。
- CMS(并发标记清除): 低停顿并发回收,但内存碎片化严重,可能触发Full GC。
- G1(Garbage-First): 分Region处理,平衡吞吐与低延迟,适合大堆内存(GB级)。
- ZGC(Z Garbage Collector): 亚毫秒级停顿,支持TB级堆内存,超低延迟且吞吐稳定。
- Shenandoah: 实时并发回收,消除内存碎片,低延迟且高效处理大内存。
- Parallel Old(并行老年代): 多线程标记整理,高吞吐的老年代回收,搭配Parallel使用。
- Serial Old(串行老年代): 单线程老年代回收,适合资源受限的小型应用。
- ParNew: 多线程新生代回收,专为与CMS搭配实现低延迟设计。
21.详细聊一下G1垃圾回收器
核心目标: 在停顿时间可控的前提下,最大化系统吞吐量,适合大内存和多核CPU环境。
核心特点
- 区域化内存布局
– 将堆内存划分为固定大小的Region(默认2048个,大小根据堆大小动态计算)。
– 每个Region可独立属于年轻代或老年代,动态调整区域功能(如年轻代Region可转为老年代)。
– Humongous区:专门存放大对象(超过Region半大小),避免内存碎片化。 - 分代收集
– 保留分代思想,但不再物理隔离年轻代/老年代,而是通过Region集合实现。
– 年轻代默认占堆的5%,最大可扩展到60%(通过参数-XX:G1NewSizePercent和-XX:G1MaxNewSizePercent控制)。 - 并发与并行
– 并发标记:与用户线程并行执行标记阶段,减少STW(Stop-The-World)时间。
– 并行回收:多线程处理垃圾回收,充分利用多核CPU。 - 垃圾优先策略(Garbage First)
– 根据用户设定的最大停顿时间(如-XX:MaxGCPauseMillis=200),优先回收“垃圾最多”的Region,最大化单位时间垃圾回收量。 - 空间整合
– 采用标记-整理算法,回收后内存连续,避免CMS的碎片化问题,支持大对象分配。 - 可预测的停顿时间
– 建立停顿时间模型,通过参数控制回收目标,软实时(尽力在指定时间内完成,但不保证绝对)。
工作流程
G1的回收过程分为四个阶段,结合并发和STW阶段,降低整体停顿:
- 初始标记(STW): 快速标记从GC Roots直接可达的对象,记录年轻代Roots。
- 并发标记: 与用户线程并行,遍历所有对象,标记存活对象。
- 最终标记(STW): 重新处理并发标记期间变化的对象,确保标记准确。
- 筛选回收(STW): 根据停顿时间目标,选择垃圾最多的Region进行回收,整理内存。
注意: 当老年代不足、晋升失败或Humongous区分配失败时,可能触发Full GC
22.强引用、软引用、弱引用、虚引用的区别?
- 强引用:只要所有GCRoots能找到,就不会被回收,new出来的都是强引用对象
- 软引用:需要配合SoftReference使用,当垃圾多次回收,内存依然不够的时候会回收软引用对象
- 弱引用:需要配合WeakReference使用,只要进行了垃圾回收,就会把弱引用对象回收
- 虚引用:必须配合引用队列使用,被引用对象回收时,会将虚引用入队,由ReferenceHandler线程调用虚引用相关方法释放直接内存
23.JVM调优的参数可以在哪里设置参数值
- war包部署在tomcat中设置
修改TOMCAT_HOME/bin/catalina.sh文件 - jar包部署在启动参数设置
java-Xms512m -Xmx1024m -jar xxxx.jar
24.常用的JVM调优的参数都有哪些?
- 设置堆空间大小
-Xms512m # 初始堆大小为512MB
-Xmx2g # 最大堆大小为2GB
- 虚拟机栈的设置
-Xss512k # 每个线程的栈大小为512KB
- 年轻代中Eden区和两个Survivor区的大小比例
-XX:NewRatio=3 # 老年代:新生代 = 3:1
-XX:SurvivorRatio=8 # Eden:Survivor = 8:1
- 年轻代晋升老年代國值
# 对象在Survivor区中最多经历10次GC后晋升到老年代,值的范围是[0,15],默认值15
-XX:MaxTenuringThreshold=10
- 设置垃圾回收收集器
-XX:+UseG1GC # 启用G1 GC
-XX:+UseParallelGC # 启用Parallel GC(年轻代)
-XX:+UseParallelOldGC # 启用Parallel Old GC(老年代)
-XX:+UseConcMarkSweepGC # 启用CMS GC
25.说一下常用的JVM调优工具
命令工具
- jps 进程状态信息
- jstack 查看java进程内线程的堆栈信息
- jmap 查看堆转信息
- jhat 堆转储快照分析工具
- jstat JVM统计监测工具
可视化工具
- jconsole 用于对jvm的内存,线程,类的监控
- VisualVM 能够监控线程,内存情况
26.java内存泄露的排查思路?
内存泄漏通常是指堆内存,通常是指一些大对象不被回收的情况
- 通过jmap或设置jvm参数获取堆内存快照dump
- 通过工具,VisualVM去分析dump文件,VisualVM可以加载离线的dump文件
- 通过查看堆信息的情况,可以大概定位内存谥出是哪行代码出了问题
- 找到对应的代码,通过阅读上下文的情况,进行修复即可
27.CPU飙高排查方案与思路?
- 使用top命令查看占用cpu的情况,查看是哪一个进程占用cpu较高
top
- 使用ps命令查看进程中的线程信息,查看哪个线程使用的CPU多,绩效对应tid
ps H -eo pid,tid,%cpu | grep 2266
- 将出问题的线程转换成十六进制,然后jstack命令查看进程中对应的线程,最终定位问题
jstack pid
相关文章:
java八股文之JVM
1.什么是程序计数器 程序计数器是 JVM 管理线程执行的“定位器”,记录每个线程当前执行的指令位置,确保程序流程的连续性和线程切换的准确性。线程私有的,每个线程一份,内部保存的字节码的行号。用于记录正在执行的字节码指令的地…...
学习爬虫的第二天——分页爬取并存入表中
阅读提示:我现在还在尝试爬静态页面 一、分页爬取模式 以豆瓣Top250为例: 基础url:豆瓣电影 Top 250https://movie.douban.com/top250 分页参数:?start0(第一页)、?start25(第二页)等 每页显示25条数…...
Ubuntu与Windows之间相互复制粘贴的方法
一、打开Ubuntu终端 二、卸载已有的工具 sudo apt-get autoremove open-vm-tools 三、安装工具 sudo apt-get install open-vm-tools-desktop 四、重启 直接输入reboot 注:有任何问题欢迎评论区交流讨论或者私信!...
docker安装hyperf环境,连接本机redis问题处理
错误信息显示“Connection refused”,这通常说明 Docker 容器内的 Hyperf 项目无法连接到你本机的 Redis 服务。 1. 容器内的 127.0.0.1 指向问题 在 Docker 容器中,127.0.0.1 指的是容器本身,而不是宿主机(你的 Mac)…...
第12章:优化并发_《C++性能优化指南》notes
优化并发 一、并发基础与优化核心知识点二、关键代码示例与测试三、关键优化策略总结四、性能测试方法论多选题设计题答案与详解多选题答案: 设计题答案示例 一、并发基础与优化核心知识点 线程 vs 异步任务 核心区别:std::thread直接管理线程…...
Linux操作系统7- 线程同步与互斥7(RingQueue环形队列生产者消费者模型改进)
上篇文章:Linux操作系统7- 线程同步与互斥6(POSIX信号量与环形队列生产者消费者模型)-CSDN博客 本篇代码仓库:myLerningCode/l36 橘子真甜/Linux操作系统与网络编程学习 - 码云 - 开源中国 (gitee.com) 目录 一. 单生产单消费单保…...
学有所记——初探向量数据库Weaviate
目标: 了解向量数据库的连接、建库、插入数据、查询数据等基本用法以及关于语义相似度的一些基本概念。 背景: 前段时间尝试在自己的电脑上搭建OllamaDify平台,体验并探索大模型的强大功能。在使用过程中,尤其是在搭建RAG知识库…...
Ardupilot开源无人机之Geek SDK进展2025Q2
Ardupilot开源无人机之Geek SDK进展2025Q2 1. 源由2. 内容汇总2.1 【jetson-fpv】“Caution - Hot surface. Dont touch.”2.2 【jetson-fpv】1080P/720P显示设备配置 3. 遗留问题3.1 高优先级3.1.1 【jetson-fpv】1080P60FPS AI分析视频卡顿,丢包3.1.2 【jetson-fp…...
深入理解K8s与Docker的关系:容器化技术的双雄
友情提示:本文内容由银河易创(https://ai.eaigx.com)AI创作平台gpt-4-turbo模型生成,仅供参考。 在现代云计算及微服务架构的发展中,Docker与Kubernetes(K8s)作为两大核心技术,被广泛…...
QT高效文件I/O编程--实用指南与最佳实践
概述 在软件开发过程中,文件输入输出(I/O)操作是数据持久化和交换的核心部分。无论是简单的日志记录还是复杂的数据集处理,高效的文件I/O操作对于应用的整体性能至关重要 最佳实践 一、选择合适的文件模式 正确选择文件打开模式是确保操作意图明确且安全的第一步。不同…...
QT记事本
记事本应用程序提供了基本的文本编辑功能,支持文件的新建、打开、保存和另存为操作,同时具备修改提示和关闭窗口时的保存确认功能。使用 UTF - 8 编码确保了对多语言文本的支持。 1. 项目整体结构 main.cpp:程序的入口点,负责初…...
【leetcode hot 100 84】柱状图中最大的矩形
解法一:单调栈 class Solution {public int largestRectangleArea(int[] heights) {int len heights.length;int area 0;// 先做一些特殊判断if(len0){return 0;}if(len1){return heights[0];}// 进入栈后发现后面更短,可以得到当前这个能勾勒的面积 …...
Spring----ioc
1.Spring 是什么? 通过前⾯的学习, 我们知道了Spring是⼀个开源框架, 他让我们的开发更加简单. 他⽀持⼴泛的应⽤场景, 有着活跃⽽庞⼤的社区, 这也是Spring能够⻓久不衰的原因. 但是这个概念相对来说, 还是⽐较抽象. 我们⽤⼀句更具体的话来概括Spring, 那就…...
C++——重载
目录 一、函数重载 基本概念 函数重载的条件 编程示例 代码讲解 函数重载的注意事项 二、运算符重载 什么是运算符重载? 运算符重载的实质是什么? 运算符重载函数的写法 运算符重载的基本语法 可重载的运算符列表 基本原则 编程示例 代码解…...
答疑解惑:EMC VMAX3 MMCS控制台不定期重启原因分析
今天有个朋友咨询他们有一台EMC的VMAX100k设备,其中MMCS2的管理控制台定期重启,但始终无法找到重启原因,稍微花了点时间,帮客户看了下。先说结论,MMCS2确实不定期发生重启,每次reboot都是一样的message信息…...
单例模式(Singleton Pattern)
单例模式(Singleton Pattern) 任务管理器可以作为一个全局的任务配置管理类,使用单例模式保证全局只有一个实例。这样你可以避免在应用程序中创建多个任务管理对象,保持配置参数的统一。 示例: class TaskManager { …...
树莓派超全系列文档--(8)RaspberryOS实用程序
RaspberryOS实用程序 实用程序kmsprintvclogvcgencmdvcosversionget_throttledmeasure_tempmeasure_clock [clock]measure_volts [block]otp_dumpget_config [configuration item|int|str]get_mem typecodec_enabled [type]mem_oommem_reloc_statsread_ring_osc 文章来源&#…...
Rust 与 FFmpeg 实现视频水印添加:技术解析与应用实践
引言 在短视频、直播、影视制作等领域,视频水印是一种常见的工具,用于保护版权、提升品牌辨识度或满足合规性要求。然而,开发者在实现水印添加时往往面临以下挑战: 手动处理效率低:使用图像编辑软件(如 P…...
绿联NAS安装内网穿透实现无公网IP也能用手机平板远程访问经验分享
文章目录 前言1. 开启ssh服务2. ssh连接3. 安装cpolar内网穿透4. 配置绿联NAS公网地址 前言 大家好,今天给大家带来一个超级炫酷的技能——如何在绿联NAS上快速安装cpolar内网穿透工具。想象一下,即使没有公网IP,你也能随时随地远程访问自己…...
如何在 React 项目中使用React.lazy和Suspense实现组件的懒加载?
大白话如何在 React 项目中使用React.lazy和Suspense实现组件的懒加载? 在 React 项目里,有时候组件功能多、体积大,要是一次性把所有组件都加载进来,网页加载速度就会变慢。而 React 提供了 React.lazy 和 Suspense 这两个好东西…...
虫洞数观系列一 | 豆瓣电影TOP250数据采集与MySQL存储实战
目录 系列文章 1. 引言 2 技术栈Request 2.1请求头headers 2.2查找定位信息 2.3处理网页html结构化数据 2.4每页url规律 2.5逐条查找所需信息 2.6完整代码 3 数据存储至mysql 3.1新建数据库 3.2编写数据库写入py文件 3.2.1构建1个执行sql语句的函数 3.2.2构造一个…...
模型 阿米巴模式
系列文章分享模型,了解更多👉 模型_思维模型目录。小团队独立经营,企业活力无限。 1 阿米巴模式的应用 1.1 日航重生(航空业成功案例) 应用领域 航空运输业破产重组与组织激活 案例名称 日本航空(JAL&…...
针对stm32F103C8t6芯片调节USB串口的经验
1、首先这是自己手搓的板子,对于之前一直没有了解过USB这方面,则这个针对USB部分没有设计上拉电阻,造成不管怎么调节PC端都没有反应。 图一 这个没有添加1.5K电阻 这个D+位置应该再接一个1.5KR的电阻如图2所示 图2 这样调节的话PC端就可以识别到USB串口,但是这是串口还是会…...
JVM详解(包括JVM内存模型与GC垃圾回收)
📖前言: 学会使用Java对于一个程序员是远远不够的。Java语法的掌握只是一部分,另一部分就是需要掌握Java内部的工作原理,从编译到运行,到底是谁在帮我们完成工作的? 接下来着重对Java虚拟机,也就…...
解锁DeepSeek潜能:Docker+Ollama打造本地大模型部署新范式
🐇明明跟你说过:个人主页 🏅个人专栏:《深度探秘:AI界的007》 🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、什么是Docker 2、什么是Ollama 二、准备工作 1、操…...
【Linux网络】——Socket网络编程
前言 在当今数字化的时代,网络通信已经成为计算机领域不可或缺的一部分。无论是日常的网页浏览、社交媒体交互,还是大规模的企业级数据传输,都离不开高效可靠的网络通信。而在Linux操作系统中,Socket网络编程是实现各种网络应用的…...
基于javaweb的SpringBoot雪具商城系统设计与实现(源码+文档+部署讲解)
技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…...
Android 简化图片加载与显示——使用Coil和Kotlin封装高效工具类
为了简化使用Coil加载网络图片和GIF的过程,我们可以封装一个工具类。这个工具类将包括初始化ImageLoader的方法、加载图片到ImageView的方法,以及可能的其他便捷方法,如加载圆形图片、设置占位图等。下面是一个示例: 首先&#x…...
Flink watermark的时间字段有空值,建表的时候,如何处理
在 Flink 中处理时间字段存在空值时,需通过 表定义阶段的特殊处理 和 Watermark 生成策略调整 来避免因空值导致的窗口计算异常或任务失败。以下是具体解决方案及实现方法: 1. 空值处理核心策略 1.1 查询时,过滤空值数据(推荐&am…...
关于matlab和python谁快的问题
关于matlab和python谁快的问题,python比matlab在乘法上快10倍,指数计算快4倍,加减运算持平,略慢于matlab。或许matlab只适合求解特征值。 import torch import timen 50000 # 矩阵规模 M torch.rand(n, 31)start_time time.t…...
【DevOps】DevOps and CI/CD Pipelines
DevOps 是一种将开发与运维实践相结合的模式,旨在缩短软件开发周期并交付高质量软件。 DevOps 是什么? 开发团队与运维团队之间的协作 • 持续集成与持续交付(CI/CD) • 流程自动化 • 基础设施即代码(IaC)…...
ROS--IMU数据包
IMU惯性测量单元 一:IMU二:ROS中三:IMU数据包三:总结 提示:以下是本篇文章正文内容,下面案例可供参考 一:IMU IMU(Inertial Measurement Unit,惯性测量单元)…...
【机器学习】手撕封装PCA——将高维数据映射到低维数据的过程
PCA将高维数据映射到低维数据的过程 一、摘要二、PCA的降维思路三、PCA代码实现降维过程3.1 PCA类的实现与封装3.2 PCA类的使用示例 四、PCA的恢复过程 一、摘要 本文详细介绍了主成分分析法(PCA)在高维数据降维中的应用。首先,阐述了PCA的基…...
LangChain开发(七)自定义输出格式(JSON/XML/YAML)
文章目录 JSON结构输出未使用PydanticPydantic流式处理 XML结构输出xml输出指定字段 YAML输出源码地址参考资料 JSON结构输出 虽然一些模型提供商支持内置的方法返回结构化输出,但并非所有都支持。我们可以使用输出解析器来帮助用户通过指示指定任意的JSON模型&…...
RustDesk部署到linux(自建服务器)
简介 RustDesk是一款开源的远程桌面软件,由中国开发者开发,使用Rust编程语言构建。它支持跨平台运行,可以在Windows、macOS、Linux、iOS、Android和Web等多个平台上使用。RustDesk的主要功能包括远程桌面访问、文件传输、文本聊天等&…...
分布式锁,redisson,redis
目录 什么是分布式锁分布式锁解决什么问题分布式锁的特点使用分布式锁的场景怎么使用分布式锁1. 添加依赖2. 配置 Redisson 客户端3. 使用 Redisson 实现分布式锁 什么是分布式锁 分布式锁是一种锁机制,用于在分布式环境下,解决多个线程并发访问同一共享…...
linux常用指令(9)
加油同志们,我们离胜利不远了,再有两天我们就可以了解完linux的一些基本常用指令了,到时我们便可以进入一些shell脚本语法了,那么话不多说,来看. 1.more指令 功能描述:more指令是一个基于vi编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容. 基本语法…...
深入解析 JVM 内存区域及核心概念
深入解析 JVM 内存区域及核心概念 Java 虚拟机(JVM)内部划分了多个内存区域,每个区域存储不同类型的数据并承担不同的职责。本文将详细介绍以下内容: 程序计数器:记录当前线程正在执行的字节码指令及其“行号”信息&a…...
字节跳动春招研发部笔试题解
字节跳动春招研发部笔试题 1.万万没想到之聪明的编辑 我叫王大锤,是一家出版社的编辑。我负责校对投稿来的英文稿件,这份工作非常烦人,因为每天都要去修正无数的拼写错误。但是,优秀的人总能在平凡的工作中发现真理。我发现一个发…...
java对象模型
java对象自身的存储模型JVM会给这个类创建一个instanceKlass,保存在方法区,用来在JVM层表示该Java类。 a类。当我们在Java代码中,使用new创建一个对象的时候,JVM会在栈中给对象赋值,会在堆中创建一个instanceOopDesc对…...
深入理解指针(3)(C语言版)
文章目录 前言 一、字符指针变量二、数组指针变量2.1 数组指针变量是什么2.2 数组指针变量怎么初始化2.2.1 静态初始化2.2.2 动态初始化 三、二维数组传参的本质四、函数指针变量4.1 函数指针变量的创建4.2 函数指针变量的使用4.3 typedef关键字4.4拓展 五、函数指针数组六、转…...
Linux内核 内存管理 物理内存初始化流程
1.ARM64页表初始化流程图 start_kernel()│▼ setup_arch() // 架构相关初始化│▼ early_fixmap_init() // 初始化Fixmap(临时映射设备树等)│▼ arm64_memblock_init() // 从设备树解析内存布局│▼ arm…...
Day23:和为s的数字
购物车内的商品价格按照升序记录于数组 price。请在购物车中找到两个商品的价格总和刚好是 target。若存在多种情况,返回任一结果即可。 示例 1: 输入:price [3, 9, 12, 15], target 18 输出:[3,15] 或者 [15,3]示例 2&#x…...
Transformer 通关秘籍2:利用 BERT 将文本 token 化
前面两节分别通过两个代码示例展示了模型将文本转换为 token 之后是什么样的,希望你可以对此有一个感性的认识。 本节来简要介绍一下将一个连续的文本转换为 token 序列的大致过程,这个过程被称为分词,也叫 tokenization。 在你没了解这方面…...
电脑干货:万能驱动--EasyDrv8
目录 万能驱动EasyDrv8 功能介绍 主程序界面 驱动解压与安装 PE环境支持 系统部署环境 桌面环境一键解决方案 万能驱动8电脑版是由IT天空出品的一款智能识别电脑硬件并自动安装驱动的工具,一般又称为it天空万能驱动,万能驱动vip版,简称…...
18502 字符串哈希匹配字符串
18502 字符串哈希匹配字符串 ⭐️难度:中等 🌟考点:字符串hash 📖 📚 import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner;public class Main {static int…...
openmmlab介绍 一下
OpenMMLab 是由商汤科技(SenseTime)发起并维护的开源深度学习项目,专注于计算机视觉领域。它提供了一系列模块化、可扩展的工具库,旨在帮助研究者和开发者高效地实现、复现和部署前沿的视觉算法。OpenMMLab 的设计强调模块化、…...
基于javaweb的SpringBoot线上网络文件管理系统设计与实现(源码+文档+部署讲解)
技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…...
【设计模式】工厂模式详解-----简单工厂模式、工厂方法模式、抽象工厂模式
工厂模式详解 一、概述 工厂模式(Factory Pattern) 是一种 创建型设计模式,用于 封装对象的创建逻辑,避免在代码中直接实例化对象,从而提高代码的 可维护性、扩展性和解耦性。 二、工厂模式分类 工厂模式包括 简单工…...
【雅思播客09】Turn Left here.
Hello everyone! And welcome to my channel! Im Reevs. Good morning! 大家好,欢迎来到懒人英语晨读栏目,我是Reevs,早上好呀。 I have a great lesson for you today. 今天我有一堂非常棒的课。 We have an elementary lesson, which is …...