- 博客(94)
- 收藏
- 关注
原创 面试必备八股
本文系统整理了Java开发工程师面试的核心知识点,涵盖以下技术领域: Java基础(数据类型、集合、IO、多线程、JVM等) Spring框架(IOC/AOP、事务、SpringBoot原理) 数据库(MySQL索引、事务、锁机制、MyBatis) 中间件(Redis、RabbitMQ、Elasticsearch) 微服务(注册中心、配置中心、服务保护、网关) 分布式(分布式事务、分布式锁) 容器化(Docker)与性能优化 重点包括:集合底层原理、JVM内存模型、Spring循环依赖解决方案、MySQL索
2026-05-28 23:08:26
337
原创 线上日志排查
摘要:本文介绍了Linux中三个常用文本处理命令的用法。1. less命令:支持分页查看文件(-mNis参数组合),常用快捷键包括Ctrl+B/V翻页、j/k翻行、G/g跳转首尾行、/和?搜索、n/N重复搜索,支持多文件浏览(n/p切换);2. tail命令:实时监控文件末尾内容(-f参数),可指定显示行数(如-500f);3. grep命令:支持上下文显示匹配内容(-A/B/C参数组合)、高亮(--color)、精确匹配(-w)等,常用选项包括显示行号(-n)、忽略大小写(-i)和统计匹配行数(-c)。典
2026-05-28 23:06:14
189
原创 中州养老项目02-若依框架介绍
若依(RuoYi)是一个基于SpringBoot和Vue的企业级快速开发平台,提供前后端分离和单体架构两种版本。该框架采用模块化设计,集成权限管理、代码生成器、定时任务等核心功能,支持多数据源和分布式事务。技术栈包含SpringSecurity、MyBatis、JWT等后端组件,以及Vue、ElementUI等前端技术。若依具有完善的用户权限体系、在线代码生成能力和系统监控功能,可显著提升开发效率,适用于各类Web应用开发。官网地址:https://ruoyi.vip/
2026-05-22 23:27:43
150
原创 中州养老项目01-项目介绍
中州养老系统是为养老院定制的专业管理软件,包含管理后台和家属端两个应用。系统涵盖来访管理、入退管理、服务管理等全业务流程,采用Vue3+ElementPlus前端和基于若依框架的后端技术架构,集成Springboot、Mybatis等技术栈。数据存储使用MySQL和Redis,并采用nginx作为反向代理。系统还整合了阿里云IOT、OSS、微信登录、千帆大模型等多项技术,实现养老院全流程数字化管理。
2026-05-22 23:26:41
312
原创 项目-轻客管家2-开发规范
本文介绍了前后端分离开发模式下的关键实践规范。开发流程包括需求分析、接口设计、并行开发、测试和联调五个阶段。重点阐述了统一的接口响应规范,通过Result类封装状态码(code)、提示信息(msg)和响应数据(data),确保接口格式一致性。同时强调了RESTful API设计风格,通过HTTP动词(GET/POST/PUT/DELETE)和复数资源名(如users)来规范接口设计,提升系统的可维护性和开发效率。这些规范有助于团队协作和项目标准化管理。
2026-05-10 23:36:11
391
原创 项目-轻客管家1-环境准备
本文介绍了Maven多模块项目的设计与实现。针对单体项目存在的代码复用难、维护管理不便等问题,提出将项目按功能拆分为多个独立模块(如qk-common工具类模块、qk-entity实体类模块、qk-management核心业务模块)。通过创建父工程qk-parent(打包方式为pom)统一管理子模块,各子模块通过pom.xml继承父工程并相互引用。重点说明了模块创建步骤、依赖配置方法(公共依赖抽取到父工程、版本锁定机制)以及SpringBoot子模块的特殊处理方式。这种模块化设计提高了代码复用性,便于项目维
2026-05-10 23:00:24
569
原创 AI通识-大模型API
本文介绍了大模型API开发的核心概念和使用方法。主要内容包括:1. 大模型API遵循OpenAI规范,通过HTTP协议访问;2. API请求需要包含模型名称、消息数组等参数,其中消息需指定角色(system/user/assistant);3. 大模型本身无记忆功能,需在每次请求时传递完整对话历史;4. 演示了如何使用OpenAI SDK调用API,包括环境变量配置和Python代码示例;5. 介绍了开发环境准备步骤,包括uv工具安装和项目创建。文章强调查看官方API文档的重要性,并提供了DeepSeek等
2026-04-27 22:47:47
687
原创 学习LangChain-基础篇-认识LangChain
LangChain是一个由Harrison Chase于2022年10月创建的智能体开发平台,提供Python和TypeScript支持。该平台包含多个组件:LangChain(快速构建智能体)、LangGraph(底层控制)、DeepAgents(多步骤任务)和LangSmith(测试评估平台)。智能体(Agent)是通过大语言模型自主决策并调用工具完成任务的系统,相比传统LLM应用具有主动规划、执行复杂任务的能力。开发流程包括定义工具、创建智能体和调用执行,LangChain会封装工具信息供模型调用,实
2026-04-26 11:21:52
475
原创 AI通识-大模型的原理&应用
大模型智能的产生依赖于算法、数据和算力三大要素,其核心是通过神经网络模拟人类神经元,将语言转化为可计算的多维向量。训练过程通过海量数据不断调整模型参数(可达千亿级),使其逐步拟合人类语言系统。大模型展现出理解、推理等通用智能能力,这种因规模扩大而涌现的能力称为泛化。在实际应用中,大模型擅长自然语言处理,与传统程序结合可发挥各自优势:大模型负责"思考",传统程序确保准确性。当前主流大模型产品包括ChatGPT、Claude等,通常通过API接口实现交互。
2026-04-25 22:22:27
452
原创 一篇搞定git
Git使用指南摘要 本文全面介绍了Git版本控制系统的使用方法和操作流程。主要内容包括: Git基础概念:分布式版本控制工具,包含本地仓库和远程仓库,核心操作包括commit、push、pull等。 代码托管服务:详细介绍了GitHub、码云、GitLab等主流托管平台的使用方法,重点演示了码云平台的账号注册、仓库创建和成员管理流程。 Git核心命令:系统讲解了仓库初始化、文件状态管理、分支操作、标签管理等常用命令,包括git init、git add、git commit、git branch等。 IDE
2026-04-24 20:24:19
453
原创 AI通识-人工智能的发展&产生要素
人工智能发展经历了四个关键阶段:从20世纪50年代的符号主义规则系统,到80年代基于统计的机器学习,再到21世纪初深度学习的突破,最终在2020年代迎来大语言模型革命。现代AI智能源于三大支柱:神经网络算法模拟人脑结构,互联网提供的海量训练数据,以及GPU带来的超级算力支持。这三要素近年同时突破临界点,推动AI从专用感知智能发展为通用认知智能,使其智商水平从儿童快速提升至成人级别,并深度融入人类生产生活。
2026-04-23 22:08:37
517
原创 学习MySQL-基础篇-SQL
SQL语法基础与分类摘要 SQL语言分为DDL(数据定义)、DML(数据操作)、DQL(数据查询)和DCL(数据控制)四类。通用语法规则包括:语句以分号结尾、支持空格/缩进增强可读性、关键字不区分大小写(建议大写)。 DCL用于管理用户权限,包括创建/修改/删除用户以及授权/撤销权限操作。DDL负责数据库和表结构管理,支持创建/修改/删除数据库和表等操作。DML实现数据增删改功能,包含INSERT、UPDATE、DELETE语句。 基础操作示例: 用户管理:CREATE USER 'user'@'host'
2026-04-18 21:33:41
381
原创 JavaSE-基础篇-反射&注解
摘要:本文介绍了Java反射机制的核心概念与应用。反射允许在运行时动态获取类的属性和方法信息,并调用对象方法。文中展示了三种获取Class对象的方式(Class.forName、类名.class、对象.getClass),并通过示例演示了如何利用反射动态设置对象属性值(setProperty方法)。此外,还介绍了通过.properties文件加载配置并执行指定方法的实现方式,以及自定义注解@Test的创建与应用,实现基于注解的特定方法自动执行功能。这些技术展现了Java反射和注解在动态编程中的强大能力。
2026-04-15 21:25:16
55
原创 JVM学习-基础篇-标记清除算法&复制算法
Java垃圾回收算法主要分为标记清除和复制算法。标记清除通过可达性分析标记存活对象并清理未标记对象,实现简单但存在内存碎片问题;复制算法将内存分为两块,交替使用并复制存活对象,避免碎片但内存利用率较低。评价GC算法的三个标准是吞吐量、最大暂停时间和堆使用效率,三者不可兼得。不同算法各有优劣,适用于不同场景,需要根据应用需求进行选择。
2026-04-12 22:20:30
1002
原创 一篇搞定equals()、compareTo()、hashCode()方法
摘要: Java中equals()、compareTo()和hashCode()是对象操作的核心方法,功能各异: equals():判断对象逻辑相等(默认比较地址,需重写比较内容)。 compareTo():定义对象排序规则(实现Comparable接口,返回值遵循负数/零/正数规则)。 hashCode():为哈希表提供哈希值(需与equals()一致,确保哈希集合正确去重)。 规范与场景: 重写equals()必须同步重写hashCode(),否则HashMap/HashSet失效。 compareTo
2026-04-08 22:17:16
223
原创 JVM学习-基础篇-常见引用
摘要:本文详细介绍了Java中的四种引用类型:强引用、软引用、弱引用和虚引用。重点分析了软引用的特性及其应用场景,通过SoftReference类实现内存敏感缓存,在内存不足时自动回收对象。文章提供了软引用的具体实现示例,包括引用队列的使用方法和缓存案例。同时简要说明了弱引用与软引用的区别,以及虚引用和终结器引用的特殊用途。这些引用机制为Java内存管理提供了灵活的控制手段。
2026-04-08 15:23:00
406
原创 JVM学习-基础篇-垃圾回收
本文主要介绍了C/C++和Java中的垃圾回收机制。C/C++需要手动释放内存,否则会导致内存泄漏;而Java通过垃圾回收器(GC)自动回收不再使用的堆内存对象。文章分析了自动和手动垃圾回收的优缺点,并详细说明了Java中判断对象可回收的两种方法:引用计数法(存在循环引用问题)和可达性分析法(通过GC Root对象判断可达性)。最后解释了哪些对象会被视为GC Root对象,包括线程对象、类加载器加载的Class对象、监视器对象等。
2026-04-05 20:26:36
445
原创 JVM学习-基础篇-字符串常量池
摘要:本文介绍了Java字符串常量池的概念和使用。字符串常量池存储代码中的常量字符串,如"123"会被直接放入池中。通过示例说明通过变量引用和字符串拼接会创建不同对象,导致比较结果为false。而编译时优化的字符串连接会直接使用常量池中的对象,比较结果为true。文章还提到字符串常量池与运行时常量池的关系演变,从最初合并到后来的拆分设计。通过两个练习题展示了字符串常量池的不同使用场景及其比较结果差异。
2026-04-02 20:34:00
134
原创 JVM学习-基础篇-堆&方法区
本文介绍了Java内存管理中的堆和方法区。堆是存放对象实例的主要区域,通过引用变量访问,可使用-Xmx和-Xms参数调整堆大小。方法区存储类元信息、运行时常量池和静态变量等,在JDK7及之前位于永久代,JDK8改为元空间并存储在直接内存中。字符串常量池也属于方法区的一部分。静态变量从JDK8开始存储在堆区的Class对象内部。文章还说明了堆内存溢出的情况以及三个关键堆内存参数:used、total和max。
2026-04-01 20:04:43
401
原创 学习JVM-基础篇-Java虚拟机栈&本地方法栈
Java虚拟机栈是JVM为线程分配的私有内存区域,采用FILO原则存储方法调用的栈帧。每个栈帧包含局部变量表、操作数栈、帧数据等组件。局部变量表存储方法参数和变量,操作数栈用于字节码指令执行。动态链接实现符号引用转换,方法返回地址记录执行位置。当栈帧过多时会出现StackOverflowError,可通过-Xss参数调整栈大小。本地方法栈存储native方法调用,Hotspot中与Java虚拟机栈共享空间。
2026-03-31 17:46:30
311
原创 学习JVM-基础篇-程序计数器
Java虚拟机的运行时数据区包含程序计数器(PC寄存器),用于记录线程当前执行的字节码指令地址。程序计数器通过存储下一条指令的内存地址控制程序流程,支持分支、跳转等操作,并在多线程切换时保存执行位置。由于仅存储固定长度的地址且由JVM自动管理,程序计数器不会发生内存溢出问题,开发者无需干预其运行机制。
2026-03-30 20:41:16
54
原创 学习JVM-基础篇-类加载器&双亲委派机制
摘要:类加载器负责将.class文件加载到JVM内存并生成Class对象,主要包括启动类加载器(核心类库)、扩展类加载器(JRE扩展类)和应用类加载器(项目类)。双亲委派机制确保类加载安全性和避免重复加载,自定义类加载器可通过重写loadClass()方法打破该机制。类加载过程遵循自底向上查找、由顶向下加载的顺序,最终由应用类加载器完成自定义类的加载。
2026-03-29 15:12:54
87
原创 学习JVM-基础篇-类的生命周期
类的生命周期包含7个阶段:加载(读取字节码生成Class对象)、验证(校验字节码合法性)、准备(为静态变量分配内存并赋默认值)、解析(将符号引用转为直接引用)、初始化(执行静态变量赋值和静态代码块)、使用(正常工作阶段)、卸载(从内存销毁)。其中初始化阶段会执行<clinit>()方法,保证线程安全,且父类优先于子类初始化。主动引用(如new对象、访问静态变量等)会触发初始化,而被动引用(如访问父类静态字段)不会。static final常量在准备阶段直接赋值,其他静态变量则在初始化阶段赋值。
2026-03-28 20:44:15
251
原创 学习JVM-基础篇-初始JVM&字节码文件
JVM是运行Java字节码文件的程序,负责解释执行、内存管理和即时编译优化。Java源代码通过编译生成字节码文件,JVM加载并运行这些文件。JVM由类加载器、运行时数据区、执行引擎和本地接口组成。字节码文件包含基础信息、常量池、字段、方法和属性等部分。常用工具包括javap反编译工具、jclasslib查看字节码内容,以及Arthas线上诊断工具。主流JVM实现有HotSpot、GraalVM等。JVM实现了跨平台运行Java程序的核心功能。
2026-03-23 20:06:52
92
原创 Ollama安装与使用
Ollama是一款开源软件,用于简化大模型本地部署和运行。其特点包括一站式管理、热加载模型、丰富模型库、多平台支持、低资源占用等。安装后可通过命令行工具管理模型,如run运行模型、pull下载模型、list查看本地模型等。对话时支持基本指令(/bye退出)、多行输入、参数设置(/set)及模型切换(/load)。Ollama提供了便捷的本地大模型管理方案,适合开发者快速部署和使用AI模型。
2026-03-06 20:36:44
89
原创 图片加载优化(缩略图)
摘要:针对图片加载效率问题,本文提出缩略图优化方案。通过在上传时生成256x256px的缩略图,与图片压缩功能复用相同处理逻辑,使用腾讯云COS的图片处理接口实现。技术实现包括:1)数据库新增thumbnailUrl字段;2)完善数据模型;3)修改上传逻辑,通过COS的PicOperations设置缩略图规则;4)返回缩略图地址。该方案有效降低首页加载流量,提升用户体验。
2025-06-22 15:14:24
433
原创 文件上传优化(图片压缩)
【摘要】图片压缩是优化图库网站的关键,能显著降低带宽成本并提升加载速度。推荐使用Webp格式(比PNG小26%,比JPEG小25%-34%),它具备透明背景支持且浏览器兼容性好,优于新兴的AVIF格式。技术实现上,通过腾讯云COS结合数据万象服务,在上传时自动转换格式为Webp。代码层面,修改上传方法设置处理规则,获取压缩后的图片URL。最终测试显示该方法有效减小了文件体积。(150字)
2025-06-21 17:18:18
693
原创 首页实现多级缓存
本文介绍了图片列表数据缓存的设计与实现方案。采用多级缓存架构,结合Caffeine本地缓存和Redis分布式缓存,提升系统性能。缓存设计包括:1)使用MD5压缩查询条件作为Redis缓存key;2)缓存value存储为JSON格式;3)设置5-60分钟随机过期时间防止雪崩。实现时先查询本地缓存,未命中再查Redis,最后查询数据库,并将结果写入两级缓存。测试表明缓存显著提升访问速度。该方案兼顾了本地缓存的高性能和分布式缓存的一致性,同时具备良好的容错性。
2025-06-21 13:14:15
894
原创 对象存储的使用(COS)
本文介绍了在Java应用中集成腾讯云对象存储(COS)的完整流程。主要包括:1)创建腾讯云账号并获取AccessKey;2)添加COS SDK依赖;3)配置CosClientConfig类管理身份验证和区域信息;4)实现文件上传功能,包含图片校验、临时文件处理和上传结果封装;5)构建CosManager类封装COS的核心API操作。系统支持2M以内的JPEG/JPG/PNG/WEBP格式图片上传,并自动获取图片宽高、大小等元数据。整体方案采用HTTPS协议确保传输安全,同时通过临时文件清理机制优化资源管理。
2025-06-19 16:55:40
788
原创 redis 中的 String 数据结构
String类型在 redis 中最常见的数据类型,是二进制安全的,可以存放字符串、数值、json、图像数据,value最大数据量是 512M二进制安全:Redis 的 string 类型是二进制安全的。所谓二进制安全,是指无论输入的数据是什么字节序列,Redis 都能准确无误地存储和返回,不会因为数据中可能包含特殊字符、编码格式等问题而对数据进行错误处理。主要原因是SDS 的存储不像 C 字符串那样以 ' \0 ' 作为字符串结束的标识。
2025-04-20 12:02:50
980
原创 手撕 简易HashMap
删除 HashMap 里数据的方法,逻辑是,先通过 hashCode() 方法获取 key 的 hash值,然后通过( n - 1) & hash 来得到该键值对存储在数据上的位置。假如插入的位置没有数据,则直接插入,如果有数据,判断其key是否相同,如果相同就覆盖掉,如果不相同,就遍历这个“哈希桶”中的链表,将其 k-v 以链表的方式插入链表的尾部。假如为null,说明没有返回null,如果在数组上则直接删除,并将下一个节点放在数组位置上,若数组没有则需遍历链表寻找。扩容为原来数组的 2 倍。
2025-04-19 21:56:38
496
原创 初识SpringAI(接入硅基流动deepseek)
model: deepseek-ai/DeepSeek-V3 //大模型的名。base-url:我使用的是硅基流动的api。api-key:去硅基流动官网生成你的密钥。
2025-04-11 16:27:51
883
原创 HashMap为什么扩容为原来2倍呢?
由于newCap = oldCap << 1,newCap - 1 比 oldCap - 1 多一个高位1。核心原因:HashMap的所有设计都依赖于数组长度为2的幂次方这一前提。新索引 = e.hash & (newCap - 1)1则索引 = 原索引 + oldCap。
2025-04-10 21:58:15
593
原创 聚簇索引(聚集索引)、非聚簇索引、二级索引(辅助索引)、回表、联合索引(复合索引)、覆盖索引、hash索引、全文索引
在使用二级索引时,由于二级索引存储的是对应字段值和主键值,这时需要查询数据行其他数据,就必须通过主键再次查询获取完整的数据行。如果一个联合索引包含多个列,查询条件必须包含必须包含第一个列的条件,然后是第二个列,以此类推。非聚簇索引叶子节点存储的是对应的字段值和主键值,如果要访问数据行别的数据就得回表查询,一张表可以有多个非聚簇索引,适合快速查找特定列的值。聚簇索引叶子节点存储的是完整数据行,可以访问完整的数据行,每张表只能有一个聚簇索引,一般都是主键索引,适合范围查询和排序。设计,不支持范围查询。
2025-03-27 16:07:46
367
原创 MySQL中B+树索引
因此,三层 B+ 树大致能存储的数据总量为:1170 * 1170 * 16 = 21902400,一颗三层的 B+ 树在 MySQL 中可以存储大约 2000万条记录。B+树是一种自平衡树,每个叶子节点到根节点的路径长度相同,B+ 树在插入和删除节点时会进行分裂和并操作,以保证树的平衡,但它又会有一定的冗余节点。因为叶子节点通过链表链接,从根节点定位到叶子查找到范围的起点之后,只需要顺序扫描链表即可遍历后续的数据,非常高效。,确定数据落在哪个区间,从而确定分支,从上到下最终定位到叶子节点。
2025-03-27 09:48:43
505
原创 MySQL 事务隔离级别
例如,事务 A 查询所有年龄大于 20 岁的用户,得到 10 条数据,在事务 A 未结束时,事务 B 插入了一条年龄大于 20 岁的用户记录并提交,事务 A 再次执行相同的查询时,得到 11 条记录,就好像出现了“幻影”一样。比如,事务 A 第一次读取某条记录的金额为 100,在事务 A 未结束时,事务 B 将该记录的金额更新为 200 并提交,事务 A 再次读取该记录时,金额变为 200,与第一次读取的结果不同。,避免了脏读,但仍可能出现不可重复读和幻读问题。,避免了脏读、不可重复读和幻读问题。
2025-03-24 18:22:22
554
原创 MySQL事务
什么是事务事务是数据库管理系统(DBMS)执行过程中的一个逻辑单位(不可再分割),由一个有限的数据库操作序列构成(多个DML语句,select 语句不包含事务),要么全部成功,要么全部失败。一组有限个操作的集合,要么全部成功,要么全部失败。
2025-03-24 15:44:42
316
原创 苍穹外卖新增员工
总的来说,这段代码的目的是从HTTP请求头中获取一个JWT令牌,校验其有效性,并根据校验结果决定是否放行该请求。这个方法需要两个参数:一个是密钥(用于验证令牌的签名),另一个是待校验的令牌。如果令牌是有效的,并且签名匹配,该方法将返回一个。块,用于尝试执行可能会抛出异常的代码。首先,它记录一条日志,表明开始进行JWT(JSON Web Token)的校验,并打印出待校验的令牌。,具有线程隔离的效果,只有在线程内才能获取到对应的值,线程外则不能访问。对象,其中包含了令牌中的声明(例如,用户的ID、角色等)。
2024-08-29 14:25:23
1056
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅