并发面试
⭐乐观锁与悲观锁乐观锁与悲观锁的区别? 悲观锁:共享资源每次只给一个线程使用,其他线程阻塞,用完之后再把资源让给其他资源。但是读写锁可以多个线程同时读。 乐观锁:共享资源每次可以给多个线程使用,只是再提交修改的时候去验证资源是否被其他线程所修改。 使用场景: 悲观锁:适合写多读少的情况。 乐观锁:适合读多写少的情况。 缺陷: 悲观锁:高并发下,激烈的锁竞争会造成线程阻塞,大量的线程会导致系统上下文切换频繁,增加系统的性能开销;还有可能导致死锁。 乐观锁:高并发下,相比悲观锁来所,不存在锁竞争造成线程阻塞,也不会有死锁问题,性能往往更好。但是再写冲突高的场景下可能会导致ABA问题,性能忽高忽低等 CAS了解吗?原理是什么?乐观锁一般会使用版本号机制或者CAS算法实现,CAS算法使用会多一些。值得一提的是,这里的版本号机制和CAS算法中的ABA问题的解决方案是同一个东西。 CAS算法的思想很简单,就是用一个预期值和要更新的变量值进行比较,两个值相等才会进行更新。这里的比较和修改两个步骤再CPU硬件层面是一条原子指令,是不可拆分的,这也是CAS算法的基础。 比如Concur...
Tika入门
Tika官网:https://tika.apache.org/3.3.1/examples.html 引入依赖123456789101112<dependency> <groupId>org.apache.tika</groupId> <artifactId>tika-core</artifactId> <version>3.2.3</version> <scope>compile</scope></dependency><dependency> <groupId>org.apache.tika</groupId> <artifactId>tika-parsers-standard-package</artifactId> <version>3.2.3</version> <scope>compile</scope...
pgSql入门
初识PostgreSQLpgsql相比mysql而言,更加的标准和强大。对sql标准的支持度很高,在mysql中偷懒的写法在这里会报错;其次是pgsql的功能丰富,有很多扩展是按需加载的。像是ai需要使用的向量数据库,有现成的pgvecotr扩展可以直接使用就。 认识pgsqlPGvector 是一个为 PostgreSQL 设计的开源扩展,支持存储和检索机器学习生成的嵌入向量。它提供多种功能,让用户既能进行精确最近邻搜索,也能进行近似最近邻搜索。该扩展旨在与 PostgreSQL 的其他特性(包括索引和查询)无缝协作。 集成springboot在项目中添加 PgVectorStore 启动器依赖: 123456<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-vector-store-pgvector</artifactId> <version>2.0.0-M7</...
Spring开发中的问题
Spring Boot Configuration Annotation Processor not configured引入依赖: 123456<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional></dependency> Required request body is missing使用接收参数的方式和前端不匹配,按下面的类型接收: POST + @RequestBody GET + @RequestParam HTTP 方法 POST GET 前端传参 JSON 请求体 {"businessId":1,"projectLevel":3} URL 参数 ...
RustFS入门
了解S3协议MinIO 中提到的 S3 协议,指的是 Amazon S3(Simple Storage Service,简单存储服务)的 API(应用程序编程接口)标准。可以把这个协议理解为一套通用的“命令”或“语言” S3的核心概念有两个: 存储桶 (Bucket): 就像是一个顶级的“存储空间”或“数据容器”。你可以为不同的项目或应用创建不同的存储桶,它们之间是相互隔离的。 对象 (Object): 指的是你存储在存储桶里的具体文件。每个对象都由一个唯一的键(Key,即文件名)来标识。 RustFS简介它是基于Rust语言开发的高性能分布式对象存储软件,定位和minio高度相似。根据官方同等硬件压测,RustFS 在小对象(4KB)场景下吞吐量约为 MinIO 的2.3 倍,大对象场景也高达1.8~2.2 倍 安装参考:https://docs.rustfs.cn/installation/ 运行成功后,访问 http://localhost:9001/ 进入管理后台。 用户名:rustfsadmin 密码:rustfsadmin 在管理后台可以: 创建和管理存储桶...
Java21 新特性
JEP 444: Virtual Threads(虚拟线程)虚拟线程是由 Java 21 版本中实现的一种轻量级线程。它由 JVM 进行创建以及管理。虚拟线程和传统线程(我们称之为平台线程)之间的主要区别在于,我们可以轻松地在一个 Java 程序中运行大量、甚至数百万个虚拟线程。 用一个比喻来讲,平台线程就像家里墙上的插座,虚拟线程就像是家里的插线板。 由于虚拟线程是 java.lang.Thread 的实现,并且遵守相同规则,因此开发人员无需学习新概念即可使用它们。 123456789// 平台线程Thread.ofPlatform().start(()->{System.out.println(Thread.currentThread());});// 虚拟线程Thread vt = Thread.ofVirtual().start(() -> { System.out.println(Thread.currentThread());});//等待虚拟线程打印完毕再退出主程序vt.join(); 适用场景 虚拟线程适...
RAG了解
RAG主要解决大模型知识受限的缺点,在时间和空间上。 RAG原理将数据全部向量化 向量模型在spring.ai.opendi.embedding.options.model: 配置向量模型,配置完后注入 OpenAiEmbeddingModel 就可以使用了。 1234567891011121314151617181920212223242526@Autowiredprivate OpenAiEmbeddingModel model;@Testpublic void testEmbedding() { // 1.测试数据 // 1.1.用来查询的文本,国际冲突 String query = "国际冲突"; // 1.2.用来做比较的文本 String[] texts = new String[]{ "哈马斯称加沙下阶段停火谈判仍在进行 以方尚未做出承诺", "土耳其、芬兰、瑞典与北约代表将继续就瑞典“入约”问题进行谈判", ...
SpringAI智能客服开发
逻辑设计开始->了解、分析用户->查询满足条件的商品->给用户推荐->新增订单->完成 加粗为大模型处理;其他两个是传统程序处理,将其定义为方法 prompt设计略 function 发送prompt,包含function定义(一个复杂的json) agent任务拆分,判断是否需要调用function 返回function名称和参数 执行函数,拼接结果到prompt,再次发送给大模型 要注意大模型是否支持function 定义function在后续版本中,function也叫做tools。首先定义tools模板: 1234567891011121314@Datapublic class XXXQuery{ @ToolParam(Required = false,description = "根据条件查询课程") private String type; @ToolParam(Required = false,description = "排序方式") private List<...
大模型理论
大语言模型在自然语言处理(Natural Language Processing,NLP)中,有一项关键技术叫Transformer,这是一种神经网络模型,是如今AI高速发展的主要原因。我们熟知的大模型(Large Language Models,LLM),列如GPT,DeepSeek底层都是采用的Transformer神经网络。 Generative:根据上文预测之后应该出现在哪个文本,从而形成连续的文本输出 Pre-trained:预训练,让大模型可以理解人类语言的语法、词性 Transformer:推理预测,深度学习的一种神经网络模型。多数的AIGC模型都依赖于此 文本向量化将文本相近的变成坐标点,文本语义相近的就距离较近。 将文本转成一组浮点数,放入一个数组,作为多为空间坐标(words–enbedding->vectors) 通过训练调整向量坐标,使其在不同的方向具备含义,让其相近的语义的词在空间中更加接近 两个向量的差,也就是一个向量到另外一个向量,可以表示两个点的不同点;比如man和woman 举例:E(中国)和E(美国)的饮食有什么差别,向量逻辑就是...
Spring AI 入门
Spring AI 入门 前置知识参考:Spring AI 中文网用于快速接入大模型 以下是 Spring AI、Spring Boot 与 JDK 的版本兼容性整理: Spring AI 版本 Spring Boot 版本 JDK 版本 1.0.x 3.1.x - 3.5.x Java 17 1.1.x 3.5.x Java 17 2.x 4.0.x 及以上 Java 21 大模型选型 自研大模型,AI算法岗(985,211) 云端大模型,阿里百炼 本地 ollama 部署开源大模型 github 大模型评分 调用大模型入门使用百炼大模型创建API-KEY导入maven: 12345678910111213141516171819202122232425262728293031<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId&...








