JVM的体系结构
1. 线程私有(无 GC,生命周期同线程)
程序计数器 (PC Register)
作用:当前线程所执行字节码的行号指示器,用于线程上下文切换时的现场恢复。
存储:执行 Java 方法时,存字节码指令地址;执行 Native 方法时,值为 Undefined。
特征:JVM 规范中唯一不抛出 OutOfMemoryError 的区域。
Java *虚拟机***栈 (**JVM Stack)
作用:Java 方法执行的内存模型。方法执行对应栈帧(Stack Frame)的入栈与出栈。
存储:栈帧(核心包含:局部变量****表、操作数栈、动态链接、方法出口)。
特征:请求深度超限抛 StackOverflowError;内存申请不足抛 OutOfMemoryError。
本地方法栈 (Native Method Stack)
作用:为 JVM 调用 Native(C/C++)方法服务,机制与 JVM 栈类似。
2. 线程共享(GC 主阵地,生命周期同 JVM 进程)
堆 (Heap)
作用:JVM 内存最大的一块,对象分配与垃圾收集(GC)的核心区 ...
面试常见智力题整理1. 100 个囚犯与灯泡
题目:100 个囚犯分别关在 100 间牢房里。牢房外有一个空房间,房里有一个由开关控制的灯泡,初始为关。看守每次随机带一名囚犯进入房间,但保证每个囚犯都会被选中无穷多次。如果有囚犯能在某一时刻断定“所有人都进过这个房间”,所有囚犯就会被释放。游戏开始前可以统一商量对策,此后唯一的交流工具只有灯泡。问应如何设计协议?
答案:指定一名囚犯为“计数者”。除计数者外的其他 99 人,每人一生只做一次操作:当自己第一次看到灯是亮的,并且自己从没关过灯时,就把灯关掉。计数者每次进屋时,如果发现灯灭了,就把灯打开,并把计数加 1。等计数者累计数到 99 次时,就能断定另外 99 人都至少进来过一次,因此 100 人都进过房间,可以宣布答案。
补充:平均所需时间大约是 10417 天。
2. 家里有两个孩子,其中一个是女孩,另一个也是女孩的概率是多少
题目:已知家里有两个孩子,其中至少有一个是女孩,问另一个也是女孩的概率是多少?
答案:1/3。
说明:等可能情形为 男男、男女、女男、女女。已知“至少一个是女孩”后,排除 男男,剩下 男女、女男、女女 ...
同步异步同步:就是实时接收,比如视频聊天
异步:就是延迟接收,比如微信打字
为什么要选择MQ1、便于拓展主业务只需要将消息发送到消息队列中就行,其他业务按照自己的业务消费,比如订单支付成功后,发送消息到消息队列,其他业务:更新订单状态、发送短信、增加积分等等都可以解耦
2、提高性能耗时:主业务+所有附加业务(更新订单状态、发送短信、增加积分等等)-> 主业务+发送消息
3、业务安全如果主业务因为附加业务失败而失败,并不合理,比如用户下单成功,因为短信通知失败而给用户退款吗,有点意思。
利用MQ主业务不会因为受到附加业务的影响,比如短信未发送成功,不会影响用户已下单的状态
各类MQ对比
特性/产品
RabbitMQ
Kafka
RocketMQ
ActiveMQ
Pulsar
开发语言
Erlang
Scala/Java
Java
Java
Java/C++
主要协议
AMQP
自定义协议
自定义协议
JMS, AMQP, STOMP
Pulsar API
吞吐量
万级/秒
十万~百万级/秒
十万级/秒
...
Java内存模型(JMM)详解Java内存模型(JMM) 是一套规范,定义了多线程环境下线程如何访问共享变量的规则,主要解决三大核心问题:可见性、原子性和有序性。
1. 可见性每个线程拥有自己的工作内存(缓存),存储主内存中共享变量的副本。当线程A修改了共享变量后,若不采取特殊措施,线程B可能无法立即看到这个修改,仍使用旧值。
解决方案:
volatile关键字:确保变量的修改立即同步到主内存,并使其他线程中该变量的缓存失效,强制重新从主内存读取最新值
synchronized/ReentrantLock:解锁前会将修改刷新至主内存
final关键字:保证final字段的初始化在构造函数完成后对其他线程可见
2. 原子性复合操作(如i++)包含”读取-修改-写入”三个步骤,多线程环境下可能导致操作交错,使结果不符合预期。
示例:当i=10时,两个线程同时执行i++,理想结果应为12,但实际可能只增加1次变为11,因为:
线程A读取i=10
线程B也读取i=10
线程A将i增加为11并写回
线程B将i增加为11(基于旧值10)并写回
解决方 ...
环境与模型准备首先需要在本地拉取所需的模型文件:
推理模型:拉取 DeepSeek R1 (1.5b版本)
1ollama pull deepseek-r1:1.5b
向量模型:拉取文本嵌入模型
1ollama pull nomic-embed-text
两种响应方式一、非流式响应适用于不需要实时打字机效果的场景,直接返回完整结果。
12345678910public Response<ChatResponse> generate(@RequestParam("model") String model, @RequestParam("message") String message, @RequestParam(value = "knowledgeBase", required = false) String knowledgeBase) { / ...






