目录

大橙子

VX:ZzzChChen
Phone:13403656751
Email:zxydczzs@gmail.com

Java 启动报错 JspTemplateAvailabilityProvider has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0 有更新!

Java 项目启动时提示以下错误,该错误大概意思为项目中被高版本的玩意儿编译了,需要最少 Java17 来启动,但是你现在的版本只有 1.8,所以启动不了,要么是你的 Java 版本不对,要么是你 SpringBoot 版本不对,SpringBoot 3.X 版本以上需要 Java17 来启动,从这两方面下手。 1. 首先我明确了本身的 Java 版本为 1.8,所以不存在是由于我 Java 版本高导致的,要是我本身就是 17,那么启动应该也不会报错,所以 Java 版本问题排除。 2. 其次开始排查 SpringBoot 版本,代码中全局搜索「spring-boot-starter-parent」,没搜到可能在父 pom 里,多找一下,最后发现版本是正常的。 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.2.RELEASE....

Cursor 下载安装(Mac) 有更新!

Cursor 简介 Cursor 是一款基于人工智能技术的代码编辑器,旨在为开发者提供更高效、更智能的编程体验。它结合了先进的自然语言处理(NLP)和代码生成技术,能够理解开发者的意图并提供实时的代码建议、错误修复和自动化处理。 Cursor 是一款基于 Visual Studio Code(VS Code)的现代化代码编辑器,它继承了 VS Code 的强大功能和扩展性,包括 extension 下载、Python 编译器配置 并在此基础上加入了 AI 辅助编程功能,旨在提升开发者的效率和代码质量。 Cursor 下载与安装 一、下载地址:https://www.cursor.com/cn,选择合适的版本进行下载,这里下载 MacOS 版本。 二、打开 Cursor,拖入 Applications。 三、使用邮箱注册并登录,可选则是否导入 VS Code 或跳过并继续使用。 四、下载汉化插件,打开后如下下图。 点击右上角图标展开左侧菜单栏,在插件中搜索 chinese,下载第一个即可。 下载完成后右下角会提示需要重新启动 Cursor,重启即可,重启后汉化成功。

Java 中强引用、软引用、弱引用、虚引用的区别 有更新!

在 Java 中,对象的引用类型决定了垃圾回收器(GC)如何处理该对象。强引用、软引用、弱引用、虚引用 的区别主要体现在 对象的生命周期管理 和 垃圾回收行为 上。以下是它们的核心区别和应用场景。 强引用 定义:默认的引用类型,例如: 1Object obj = new Object(); 特点 只要存在强引用指向对象,垃圾回收器永远不会回收该对象。 如果内存不足,JVM 会抛出 OutOfMemoryError,而不会回收强引用对象。 应用场景:日常开发中的普通对象引用。 软引用 定义:通过 SoftReference 类实现,例如: 1SoftReference<Object> softRef = new SoftReference<>(new Object()); 特点: 当内存不足时,GC 会回收软引用对象(在抛出 OutOfMemoryError 之前)。 适合实现内存敏感的缓存,例如缓存图片、临时数据等。 应用场景:缓存数据(如 Tomcat 的缓存机制)。 弱引用 定义:通过 WeakReference 类实现....

LRU、LFU 缓存淘汰算法 有更新!

一、基本概念 LRU(Least Recently Used)和 LFU(Least Frequently Used)是两种常见的缓存淘汰算法,用于在缓存空间有限的情况下选择合适的缓存对象进行淘汰,以提高缓存的利用效率。 LRU 算法基于 "最近最少使用" 的原则进行淘汰。它维护一个缓存的访问顺序链表,当有新的数据被访问时,如果数据已经在缓存中,则将其移到链表头部;如果数据不在缓存中,则将其添加到链表头部。当需要淘汰数据时,选择链表尾部的数据进行淘汰,因为维护的数据是最近最少被访问的数据。 LFU 算法基于 "最不经常使用" 的原则进行淘汰。它维护一个缓存对象的访问频次,对于每个访问到的对象,增加其访问频次。当需要淘汰数据时,选择访问频次最低的数据进行淘汰。 二、适用场景 LRU 和 LFU 算法都有各自的优势和适用场景 LRU 算法适用于访问具有时间局部性的数据,即最近被访问的数据可能在将来一段时间内仍然会被访问。LRU 算法相对较简单,容易实现,适用于大多数场景。但是,当存在 "热点数据"(被频繁访问的数据)时,LRU 算法可能无法有效的保证缓存的命中率。 LFU 算法适用于....

Mac 环境下 ollama 部署和体验 有更新!

一、下载并安装 Ollama 什么是 Ollama? Ollama 是一个开源项目,专注于在本地运行、创建和分享大型语言模型(LLMs)。它支持多种模型,包括 Llama 2、Code Llama 等,适用于文本生成、代码编写等任务。用户可以通过命令行与模型交互,并自定义模型。 下载并安装 Ollama,下载地址:https://ollama.com/download,根据操作系统选择对应版本。 二、下载并安装 Docker 什么是 Docker? Docker 是一个开源平台,用于开发、部署和运行应用程序。它通过容器化技术将应用及其依赖打包在一起,确保在不同环境中一致运行。 下载并安装 Docker,下载地址:https://www.docker.com/,根据操作系统选择对应版本。 Docker 汉化,插件地址:https://github.com/asxez/DockerDesktop-CN,下载对应系统版本插件包,从坊达 - 前往 - 前往文件夹中进入「/Applications/Docker.app/Contents/MacOS/Docker Desktop....

ComfyUI Mac 下载安装、简单使用 有更新!

一、ComfyUI 的下载与安装 ComfyUI 是什么? ComfyUI 是一种基于节点的用户界面设计工具,主要用于操作和管理 Stable Diffusion,通过图形化的工作流程来创建和优化 AI 艺术生成图像。它具有模块化和可定制的特点,允许用户自定义流程以实现更精确的工作。此外,ComfyUI 还支持一键加载其他创作者分享的工作流,提供高度的自由度和灵活性。 下载地址:https://www.comfy.org/download 下载完成后打开 dmg 文件,拖入 Applications,双击打开,设置好目录,一直下一步即可。 二、简单使用 在上图中缺少模型,点击下载模型。 下载完成后,点击正下方执行按钮,等待工作流任务完成,图片生成。

Navicat 链接数据库提示 2059 - Authentication plugin 'caching_sha2_password' cannot be loaded

一、报错原因 出现这个的原因是 mysql8 之前的版本中加密规则为 mysql_native_password,而在 mysql8 之后,加密规则是 caching_sha2_password,解决方案为修改 mysql 的密码加密规则。 二、操作流程 我得 mysql 服务是 docker 管理的,所以需要先进入容器,执行以下命令。 1docker exec -it mysql bash 登录 MySQL。 1mysql -u root -p123456 查看用户密码加密规则,可以看到现在的加密规则为 caching_sha2_password。 1show variables like 'default_authentication_plugin'; 2select host,user,plugin from mysql.user; 修改用户加密规则,修改完成再次查看加密规则。 1ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '[password]'; 2ALTER USER....

Linux搭建confluence企业级WIKI(破解) 有更新!

前言 从今天开始安装 confluence 的小伙伴一定要记得安装固定版本,因为在八月底 confluence 的某些版本有缺陷,经过身份验证的攻击者(在某些情况下未经身份验证的攻击者)通过构造恶意请求,造成 OGNL 注入,实现远程代码执行,所以官方给出了几个修复这个问题的版本,附截图和连接: https://confluence.atlassian.com/doc/confluence-security-advisory-2021-08-25-1077906215.html https://www.huaweicloud.com/notice/2021/20210826160403127.html 我这里安装的是 confluence v7.4.11 版本。 一、安装 mysql 1、去官网下载 rpm 包,建议下载好在传到服务器中。 https://downloads.mysql.com/archives/community/ 描述一下我们下载了那些 rpm 2、上传至/usr/local/src 目录下,如下图所示。 3、安装,需要联网,使用如下命令: 1yum inst....

MyBatis-Plus 自定义 COUNT 查询 有更新!

前言 在使用 MyBatis-Plus 的分页组件进行分页查询时, MyBatis-Plus 会自动帮我们返回总数、当前页、总页数等参数,总数是 MyBatis-Plus 自己使用我们的数据查询 SQL 外面套了一层查询来返回总数,虽然 MyBatis-Plus 官方也说明了这里有优化,但是需要根据标准走,若没有根据标准来或者 SQL 比较复杂等特殊情况,还是无法避免会被直接套在外面导致查询效率低下,我这里的情况是由于原分页查询的逻辑较复杂,原先为两个 OR,后改为两个 UNION ALL,COUNT 查询套在 UNION ALL 查询里,竟然比数据查询耗时都要长,所需需要特殊处理一下 COUNT 查询; 官方解释:https://baomidou.com/pages/97710a/#page 查询优化 本次优化的 COUNT 查询中,摒弃了 MyBatis-Plus 默认套的查询,采用自己写一个新 SQL 的方式来代替,在多次试验中,最终的 SQL 和原查询数据的 SQL 大致相同,还是两次 UNION ALL 来查询,但是字段只返回 COUNT 数量且无需 LEFT JOIN....

Hippo4j 动态线程池监控优化改造 有更新!

一、本次优化点 「线程池监控」查询范围由原先的 30 分钟改为 60 分钟且可配置化; 「线程池监控」增加时间选择器,可选范围 10 天; 「线程池监控」数据库数据持久化 10 天且可配置; 二、优化步骤 前端部分:增加时间选择器组件、设置默认时间、中英文转译、传递至后端 修改页面路径:/hippo4j-ui/src/views/hippo4j/monitor/index.vue,在 class 为「filter-container」的大块后面接着写 1 <div> 2 <el-date-picker v-model="listQuery.entTime" type="datetime" placeholder="请选择截止时间" :picker-options="pickerOptions"> 3 </el-date-picker> 4 </div> 选择地址及端口的选择器代码修改 1 <el-select v-model="listQuery.identify" :placeholder="$t('thread....

Hippo4j动态线程池监控接入 有更新!

简单了解 线程池痛点 原文摘录 线程池是一张基于池化思想管理线程的工具,使用线程池可以减少创建销毁线程的开销,避免线程过多导致系统资源耗尽。在高并发以及大批量的任务处理场景,线程池的使用是必不可少的。 如果有在项目中实际使用线程池,相信你可能会遇到一下痛点 线程池随便定义,线程资源过多,造成服务器高负载; 线程池参数不易评估,随着业务的并发提升,业务面临出现故障的风险; 线程池任务执行时间超过平均时间,开发人员无法感知; 线程池任务堆积,触发拒绝策略,影响既有业务正常运行; 当业务出现超时、熔断等问题时,因为没有监控,无法确定是不是线程池引起; 原生线程池不支持运行时变量的传递,比如 MDC 上下文遇到线程池就 GC。 无法执行优雅关闭,当项目关闭时,大量正在运行的线程池任务被丢弃; 线程池运行中,任务执行停止,怀疑发生死锁或执行耗时操作,但是无从下手; 如果同学们有以上的问题或者疑问,接着往下看。 什么是 Hippo4j 原文摘录 Hippo4j 通过对 JDK 线程池增强,以及扩展三方框架底层线程池等功能,为业务系统提高线上运行保障能力。 提供一下功能支持 全局管控 ....

日常开发之git小技巧-01(git stash系列)

前言 日常开发中,经常会有好几个需求状态不同但是同时在进行的情况,比如目前有一到两个提测的需求,一个开发中的需求,此时提测中的需求有 bug 需要现在处理,或者正在开发新需求的同时,线上出现问题需要切换分支,但是我们此时开发中的需求上的代码还没写完,有一些测试代码或者并不想提交到开发分支中,这是可以用到我们的 git stash 系列命令 功能介绍 官方解释:当您想记录工作目录和索引的当前状态,但又想返回一个干净的工作目录时,请使用 git stash。该命令将保存本地修改,并恢复工作目录以匹配头部提交。 stash 命令能够将还未 commit 的代码存起来,让你的工作目录变得干净。 大概就是把当前修改的代码暂存起来,暂存并不是 add 或者 commit,不会有提交记录,不会提交到本地仓库; 功能详解 git stash 保存当前的工作区与暂存区的状态,把当前的修改的保存到 git 栈,等以后需要的时候再恢复,git stash 这个命令可以多次使用,每次使用都会新加一个 stash@{num},num 是编号 git stash save '注释' 作⽤等同于 gi....

Charles抓包App,数据迁移过程 有更新!

前言 博主从 2022 年 1 月 1 日开始使用 App Store 中的一个免费软件开始记账,就叫 A 记账软件吧,在前一段时间的某一天,发现 A 记账软件中的图片显示异常,还不觉得有什么,能记账就行了,直到 2023 年 1 月 9 日晚上下班到家后,照常打开记账软件,发现不仅图片不显示,记账功能还挂了,如下图所示 紧接着就去找这个软件有没有账单导出的功能,找了一圈后,很遗憾,并没有此功能,一想到自己辛辛苦苦记了一年的账,一天都没落下,又害怕昨天图片没了, 今天记不了账了,万一明天连查询功能都不行的话,那就真完蛋了,一年白记。 于是一拍大腿想了个办法,既然它没有导出的功能,那我自己爬出来不就行了,我自己爬我自己的数据总可以吧! 最开始先搜了一圈爬手机 APP 的软件和方法,后来干脆直接问公司的测试同事,同事说可以使用 Charles 爬取,还贴心的给了个 pdf 的教程,万分感谢! 也就有了下面的故事 前期准备 首先博主的电脑和手机都是苹果系统,windowns 的大家能从本文中用到的方法就用,用不到我也没办法哈 一、软件下载&安装 进入 Charles 官网下载软....

ElasticSearch 解除默认查询1w数据限制

默认查询 1GET seller_invoice_item_wide_data_test/_search 2{ 3 "size": 0 4} 查询结果 1{ 2 "took" : 1, 3 "timed_out" : false, 4 "_shards" : { 5 "total" : 1, 6 "successful" : 1, 7 "skipped" : 0, 8 "failed" : 0 9 }, 10 "hits" : { 11 "total" : { 12 "value" : 10000, 13 "relation" : "gte" 14 }, 15 "max_score" : null, 16 "hits" : [ ] 17 } 18} 19 解除默认 1w 限制 1GET seller_invoice_item_wide_data_test/_search 2{ 3 "size": 0, 4 "track_total_hits": true 5} 查询结果 1{ 2 "took" : 1, 3 "timed_out" : false, 4 ....

Mac下载安装ElasticSearch 有更新!

一、下载 ElasticSearch 官网下载对应版本(https://www.elastic.co/cn/downloads/past-releases#elasticsearch) 解压下载的压缩包 tar -zxvf elasticsearch-7.6.1-darwin-x86_64.tar.gz bin 目录下运行 elasticsearch 启动成功 访问 二、下载 Kibana 下载可视化工具 Kibana(https://www.elastic.co/cn/downloads/past-releases#kibana) 解压下载的压缩包 tar -zxvf kibana-7.6.1-darwin-x86_64.tar.gz 启动 Kibana,bin 目录下运行 Kibana 启动成功 访问 Kibana 中文设置,进入 config 目录,输入 vim kibana.yml ,将最后一行配置放开并且更改为 zh-CN,重启 Kibana 即可 三、下载 ElasticSearch....

CompletableFuture 有更新!

一、前言 Java 支持的多线程开启方式 根据 Oracle 官方出具的 Java 文档说明,创建线程的方式只有两种:继承 Thread 或者实现 Runnable 接口。但是这两种方法都存在一个缺陷,没有返回值,也就是说我们无法得知线程执行结果。虽然简单场景下已经满足,但是当我们需要返回值的时候怎么办呢?Java1.5 以后得 Callable 和 Future 接口就解决了这个问题,我们可以通过向线程池提交一个 Callable 来获取一个包含返回值的 Future 对象,从此,我们的程序逻辑就不再是同步顺序。 下面是 Java8 实战书籍的原文: 1Future接口在Java5中被引入,设计初衷是对将来某个时刻会产生的结果进行建模。它建模了一种异步运算,返回了一个执行结果的引用,当运算结束后,这个引用被返回给调用方。在Future中触发那些潜在耗时的操作完成,我们从最初的串行操作变成了并行,在异步的同时,我们还可以做其他事情来解决程序运行时间。 Future 接口的局限性 当我们得到包含结果的 Future 时,我们可以使用 get()方法等待线程完成并获取返回值,但是 Fut....

ParallelStream 并行流 有更新!

一、什么是流 Stream 是 Java8 中新增加的一个特性,统称为流,它不是数据结构也不存放任何数据,其主要用于集合的逻辑处理。 二、Stream 和 Iterator 的区别 Iterator 作为迭代器,其按照一定的顺序迭代遍历集合中的每一个元素,并且对每个元素进行指定的操作。而 Stream 在此基础上还可以将这种操作并行化,利用多核处理器的优势快速处理集合(集合的数据会分成多个段,有多个线程处理)。 三、Stream 的使用 Stream 完全依赖于接口化编程方式,以下举例了解下 Stream 的使用。 1 List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8); 2 numbers.stream().forEach(System.out::print); 3 // 输出12345678 由以上的例子可以看出,Stream 的遍历方式和结果与 Iterator 没什么差别,这是因为 Stream 的默认遍历和迭代器是相同的,保证以往使用迭代器的地方可以方便的改写为 Stream。 Stream....

Redis Redisson 发布/订阅模式 实现

一、Redis 的发布订阅模式 什么是发布订阅 任务队列:顾名思义,就是"传递消息的队列"。与任务队列进行交互的实体有两类,一类是生产者(producer),另一类则是消费者(consumer)。生产者将需要处理的任务放入任务队列中,而消费者则不断地从任务队列中读取任务信息并执行。 发布订阅模式 其实从 Pub/Sub 的机制来看,它更像是一个广播系统,多个订阅者(Subscribe)可以订阅多个频道(Channel),多个发布者(Publisher)可以往多个频道(Channel)中发布消息。 可以这么简单的理解 Subscribe:收音机,可以收到多个频道,并以队列方式显示; Publisher:电台,可以往不同的 FM 频道中发消息; Channel:不同频率的 FM 频道; 特点 发送者(发布者)不是计划发送消息给特定的接受者(订阅者),而是发布的消息分到不同的频道,不需要知道什么样的订阅者订阅; 订阅者对一个或多个频道感兴趣,只需接受感兴趣的消息,不需要知道什么样的发布者发布的; 业务场景 说一个目前已经遇到的场景,客户端通过 websocket 和服务器进行长连....

分享一个bug Unsatisfied dependency expressed through field || Injection of resource dependencies failed

一、事故发生时 项目中使用的腾讯云的 Apache Pulsar 消息中间件,对应的需求需要使用的延迟队列技术进行开发,所以创建了一个新的 topic 和 groupName,topicRef 和 groupName 都为 “commerce-red-apply-download”; 在开发完成后,构建项目时,报错上述标题错误,我们是分环境部署的,同样的代码,同样的 topicRef 和 groupName,在 dev 环境中可以构建启动成功,而在另一个环境则启动失败,报错上述标题错误,百思不得其解,说什么未满足依赖关系和注入资源依赖项失败; 最开始将问题定位到了 Bean 加载上面,想着既然这个类在加载的时候注入不进去其余的类,那我将这个类延迟加载,所以就把这个类加了个懒加载,行,这个类不报了,另外的类也开始报错这个,反复三四次之后,觉得不对劲,为什么之前都好好的类,现在都报这个错呢?这么无休止的加懒加载,也不太行,问题的根本就不在这个 Bean 的加载顺序上; 在面向百度编程了一会,依然没有得到想要的结果,就去仔细看报错日志,觉得是不是漏掉了什么?不看不知道,一看吓一跳,它隐藏的....

SpringBoot ContextLoaderListener、Servlet 有更新!

一、问题 SpringBoot v2.3.2 中使用 ContextLoaderListener.getCurrentWebApplicationContext() 获取 WebApplicationContext 为空 二、原因 要使用这个 API 我们首先得明确它是个什么玩意儿,ContextLoaderListener 实际上就是一个监听器,作用就是启动 Web 容器时,自动装配 ApplicationContext 的配置信息,它实现了 ServletContextListener(三大生命周期监听之一); 摘个图 Spring 实现了 Tomcat 提供的 ServletContextListener 接口,写了一个监听器来监听项目启动,一旦项目启动,会触发 ContextLoaderListener 中的特定方法 contextInitialized 也就是说 Tomcat 的 ServletContext 创建时,会调用 ContextLoaderListener 的 contextInitialized(),这个方法内部的 initWebApplicationCon....