2025-12-2315:22:15
HashMap底层揭秘:数组、链表、红黑树的"合租"故事 说起HashMap,不少小伙伴第一反应是"能存键值对的容器",但它底层可不是单一结构在"单打独斗",而是数组、链表、红黑树组成的"合租天团"。今天就扒一扒这个天团是怎么分工协作,把数据存得又快又稳的——毕竟好的合租关系,核心就是"不挤、不吵、找东西快"。
画个重点:HashMap的底层逻辑,本质是"先按地址分房,人少凑活住,人多就规范排序"。对应的就是:数组负责划分基础区域(分房),链表负责解决区
2025-12-1810:37:48
Vue3组件通信“不刷新”问题 小伙伴们在写Vue3项目时,是不是常遇到这种情况:组件之间传数据,数据明明改了,页面却纹丝不动?明明控制台打印数据是新的,界面就是不跟更,简直让人挠头!其实呀,这不是bug,大概率是咱们没摸透Vue3的“响应式套路”,今天就用唠嗑的方式把这事讲明白~
先搞懂:为啥数据变了页面不刷新?
Vue3靠“响应式系统”驱动页面更新,简单说就是:只有被Vue“盯紧”的数据,改了才会通知页面刷新。要是数据没被“
2025-12-1717:56:39
Spring Bean的生命周期 Spring Bean生命周期:从诞生到消亡的那些事儿
两年前做电商项目时,我曾栽过一个特别"隐蔽"的坑:订单服务里的支付回调处理器,偶尔会出现数据库连接为空的情况。排查了三天,日志翻了无数遍,最后才发现是Bean的初始化顺序出了问题——数据源Bean还没创建完成,支付回调处理器的初始化方法就已经执行了,导致依赖注入失败。那是我第一次真切感受到:不搞懂Spring Bean的生命周期,写Sprin
2025-12-1716:32:54
SpringBoot参数配置:从入门到踩坑复盘
三年前刚接手公司老项目时,我曾因为一个参数配置问题加班到凌晨三点。当时线上环境突然报数据库连接超时,排查了代码、检查了数据库服务都没问题,最后才发现是SpringBoot的配置文件里,生产环境的数据库连接池参数被人误改成了开发环境的测试值。从那以后我就深刻意识到,看似简单的参数配置,实则是SpringBoot开发的"地基"——配置对了顺风顺水,配错了能让你在排查问题时走尽弯路。
今天就结合我这
2025-08-1315:20:29
Docker 部署 RocketMQ 5.3.2 拉取镜像
1docker pull apache/rocketmq:5.3.2
创建容器共享网络
RocketMQ 中有多个服务,需要创建多个容器,创建 docker 网络便于容器间相互通信。
1docker network create rocketmq
启动NameServer
12345# 启动 NameServer
docker run -d --name rmqnamesrv -p
2025-08-0711:20:58
Spring Ai 集成 MCP MCP是什么
MCP 是一个开放协议,它为应用程序向 LLM 提供上下文的方式进行了标准化。你可以将 MCP 想象成 AI 应用程序的 USB-C 接口。就像 USB-C 为设备连接各种外设和配件提供了标准化的方式一样,MCP 为 AI 模型连接各种数据源和工具提供了标准化的接口。
Spring AI已经支持MCP服务和客户端。引入对应的依赖,就可以开发自己的MCP服务
Spring AI文档
2025-07-0311:57:34
Mybatis新增/更新并返回结果 场景:
子表新增一条数据,主表某字段要+1,要获取该字段的值(例:新增一条文章评论,文章表的评论数字段要+1,并返回最新的评论数)
dao层
必须传对象,返回的结果在字段中
1int updateCommentCount(Article info);
xml
123456<update id="updateCommentCount">
<selectKey resu
2025-05-1915:36:14
使用acme.sh自动签发ssl证书 创建阿里云子账户用来管理域名解析
创建用户
在权限管理新增这两个权限
AliyunDomainFullAccess - 管理域名服务的权限
AliyunDNSFullAccess - 管理云解析(DNS)的权限
安装acme.sh
下载acme.sh
直接执行脚本安装不了就去github把acme.sh文件下载下来
中国大陆境内安装acme.sh
给执行权限
1chmod 744 acm
2024-11-1911:29:10
tail命令 12345tail -f xxx.log ----实时刷新最新日志
tail -100f xxx.log --------实时刷新最新的100行日志
tail -100f xxx.log | grep [关键字] -------查找最新的一百行中与关键字匹配的行
tail -100f xxx.log | grep '2019-10-29 16:4[0-9]
2024-11-0615:27:13
Docker镜像制作 新建Dockerfile文件
123456789101112131415161718192021222324252627#基于centos镜像
FROM centos:7
RUN mkdir -p /home/v-kun
#工作目录
WORKDIR /home/v-kun
#维护人的信息
MAINTAINER v-kun.com
#install jdk and jar包(需要确保你的ce
2024-11-0615:22:44
Linux开机运行脚本 新建脚本autuStart
1234#!/bin/sh
#chkconfig: 2345 80 90
#description:auto_run
#执行命令
复制到init.d目录并添加执行权限
12cp autuStart /etc/init.d/
chmod 744 autuStart
添加到开机启动
123chkconfig --add tomcat #添加到开机启动
chkconfi
2024-09-2315:59:24
测试摘要 代偿申请优化
1234567891011public static void fixedThreadPool() { public static void fixedThreadPool() {public static void fixedThreadPool() {
// 创建线程池
ExecutorService threadPool = Executors.newFixed
2024-09-2017:24:25
test
2022-12-0116:09:32
Java 线程池 在 Java 语言中,并发编程都是通过创建线程池来实现的,而线程池的创建方式也有很多种,每种线程池的创建方式都对应了不同的使用场景,总体来说线程池的创建可以分为以下两类:
线程池创建方式
通过 ThreadPoolExecutor 手动创建线程池
通过 Executors 执行器自动创建线程池。
而以上两类创建线程池的方式,又有 7 种具体实现方法,这 7 种实现方法分别是:
Executo
2022-11-2913:45:29
MySQL索引 前言
数据库中存储的数据比作字典的话,索引就相当于是字典中的目录。如果没有索引,查找一个数据就需要从第一页开始全局检索直至找到需要的诗句,有了索引可以先在目录中根据拼音查找到该数据所在的页数,因此通过索引可以大大减少了查询时间
索引类型
Mysql中根据 索引中是否存在数据,将索引分为了两种类型的索引:聚簇索引和非聚簇索引。
聚簇索引
聚簇索引是在索引树的叶子节点中保存了完整的数据信息,则
2022-11-2216:09:33
IDEA用Docker一键部署 Docker开启外网访问
修改docker.service文件,添加监听端口 -H tcp://0.0.0.0:2375
vi /usr/lib/systemd/system/docker.service
找到 ExecStart,在最后面添加 -H tcp://0.0.0.0:2375,如下图所示
重启docker
systemctl daemon-reload
systemctl star
2022-10-2515:58:13
SQL优化 因为字符不一致导致join查询不走索引
<h2><a id="join_0"></a>因为字符不一致导致join查询不走索引</h2>
<p><img src="https://v-kun-file.oss-cn-beijing.aliyuncs.com/blog/2022-10-25/ddbfae4e9c724d149fa2a9
2022-09-1512:01:26
MinIo 介绍
官网
高性能
MinIO 是全球领先的对象存储先锋,目前在全世界有数百万的用户. 在标准硬件上,读/写速度上高达183 GB / 秒 和 171 GB / 秒。
对象存储可以充当主存储层,以处理Spark、Presto、TensorFlow、H2O.ai等各种复杂工作负载以及成为Hadoop HDFS的替代品。
MinIO用作云原生应用程序的主要存储,与传统对象存储相比,云原生应用程序需要更
2022-08-1818:05:21
Java Java
2022-06-0611:49:36
CURL命令详解及@&特殊字符处理 前言
在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具。
语法: # curl [option] [url]
本文主要跟大家分享了Linux命令行cURL的10种常见用法,分享出来供大家参考学习,下面来一起看看详细的介绍:
获取页面内容
当我们不加任何选项cu
2022-05-0920:16:59
Springboot集成sharding-jdbc实现分表
日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表。这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询的情况,性能会更加糟糕。分表和表分区的目的就是减少数据库的负担,提高数据库的效率,通常点来讲就是提高表的增删改查效率。
什么是分表?
分表是将一个大表按照一定的规则分解成多张具有独立存储空间的实体表,我们可以称为子表,每个表都对应
2022-04-2209:23:44
tar 打包压缩命令 压缩文件
tar -zcvf test.tar.gz ./*
该命令表示压缩当前文件夹下的文件夹test,压缩后缀名为test.tar.gz
如果不需要压缩成gz,只需要后缀为tar格式的,那么输入如下命令:
tar -cvf test.tar ./test/
解压
命令
tar -zxvf test.tar.gz
该命令表示把后缀为.tar.gz的文件解压到当前文件夹下。
如果压缩文件的后
2022-04-0216:47:02
使用frp进行内网穿透 为什么需要内网穿透功能
从公网中访问自己的私有设备向来是一件难事儿。
自己的主力台式机、NAS等等设备,它们可能处于路由器后,或者运营商因为IP地址短缺不给你分配公网IP地址。如果我们想直接访问到这些设备(远程桌面,远程文件,SSH等等),一般来说要通过一些转发或者P2P组网软件的帮助。
试了一下几种方法:
远程桌面使用TeamViewer。可用,但需要访问端也拥有TeamViewer软件,不是
2022-03-1617:19:21
Linux系统查看CPU使用率、内存使用率、磁盘使用率 查看CPU使用率
top 命令
[root@192 ~]# top
top - 16:52:41 up 316 days, 8:37, 1 user, load average: 0.51, 0.73, 0.81
Tasks: 519 total, 2 running, 517 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.6 us, 1.
2022-03-0711:54:42
TorntoistGit 操作远程仓库报错 在(小乌龟)向github远程推送文件的时候会报错nosupportedauthenticationmethodsavaiable解决方法:因为git(小乌龟)和Git的冲突我们需要把乌龟git设置改正如下。找到TortoiseGit》Settings(设置)》Network(网络)将SSHclient指向E:\git\Git\usr\bin\ssh.ee(我的Git工具安装E盘)这里更改ssh路
2022-03-0309:27:06
MyBatis 一对多 多对多 一对多
实体类
12345 /**
* 关联用户
*/
@TableField(exist = false)
private List<McuInfoUser> infoUsers;
xml
这种方式分页有问题,不分页时可以用
1234567891011121314151617181920212223242526272829303132333
2022-01-1103:08:55
Sentinel dashboard Sentinel官网下载地址
https://github.com/alibaba/Sentinel/releases
版本一致性:
Spring Cloud Alibaba Version:2.2.5.RELEASE or 2.1.4.RELEASE or 2.0.4.RELEASE
Sentinel Version:1.8.0
Nacos Version:1.4.1
RocketMQ Vers
2021-09-2820:56:53
Maven Maven 翻译为"专家"、"内行",是 Apache 下的一个纯 Java 开发的开源项目。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤,Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。
2021-09-2322:51:58
ElasticSearch 使用教程之_score(评分)介绍 前言
使用ES时,对于查询出的文档无疑会有文档相似度之别。而理想的排序是和查询条件相关性越高排序越靠前,而这个排序的依据就是_score。本文就是详解_score有关的信息,希望能对排序评分的理解有所帮助。
正文
一个文档对于搜索的评分一定是有据可依的,而接下来就要介绍根据哪些参数查找匹配的文档以及评分的标准。
词频/逆向文档频率(TF/IDF)
当匹配到一组文档后,需要根据相关度排序这些文档,
2021-09-1502:40:50
JavaScript 的 async/await async 和 await 在干什么
任意一个名称都是有意义的,先从字面意思来理解。async 是“异步”的简写,而 await 可以认为是 async wait 的简写。所以应该很好理解 async 用于申明一个 function 是异步的,而 await 用于等待一个异步方法执行完成。
另外还有一个很有意思的语法规定,await 只能出现在 async 函数中。然后细心的朋友会产生一个疑问,如
2021-09-0220:48:20
Linux缓存buffer/cache 什么是buffer/cache
buffer和cache是两个在计算机技术中被用滥的名词,放在不通语境下会有不同的意义。在Linux的内存管理中,这里的buffer指Linux内存的:Buffer cache。这里的cache指Linux内存中的:Page cache。翻译成中文可以叫做缓冲区缓存和页面缓存。在历史上,它们一个(buffer)被用来当成对io设备写的缓存,而另一个(cache)被用
2021-09-0206:23:07
Elasticsearch搭建集群 修改配置
1vi /etc/sysctl.conf
在最后一行新增
1vm.max_map_count=262144
立即生效
1/sbin/sysctl -p
修改es节点配置
第一个节点
123456789101112131415161718192021222324252627282930313233343536373839#集群名称
cluster.name: my-es
#当前该节点
2021-09-0206:22:53
IDEA远程debug Tomcat开启调试模式
在Tomcat的安装目录bin目录下编辑catalina.sh文件,添加JVM参数
1CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8089"
8089就是远程调试的端口,配置添加之后,重启tomcat即可生效
IEDA启动远程调试
打开Inteliij
2021-09-0206:22:25
Elasticsearch--Java中QueryBuilders构建搜索Query 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210
2021-09-0206:21:53
Linux命令 文件
12345678910111213141516# 搜索文件名包含backup的文件
find ./ -name *backup*
# 查找10天前的文件 +10表示10天前 -10表示10天内
find ./ -mtime +10
# 查找10分钟前的文件 +10表示10分钟前 -10表示10分钟内
find ./ -mmin +10
# 列出所有文件时排除某个目录
ls ./ |grep
2021-09-0206:21:03
Oracle 创建用户
1create user gzsly_quality identified by "gzsly_quality";
授权
123grant create session to gzsly_quality;
grant create table to gzsly_quality;
grant create view to gzsly_quality;
创建表空间
1234creat
2021-09-0206:20:02
SpringBoot集成Druid 介绍
Druid是阿里开源的连接池组件。
内置监控页面
常见问题
基本配置参数
配置
缺省值
说明
name
配置这个属性的意义在于,如果存在多个数据源,监控的时候可以通过名字来区分开来。 如果没有配置,将会生成一个名字,格式是:“DataSource-” + System.identityHashCode(this)
jdbcUrl
连接数据库的url,不同数据库不一样
2021-09-0206:18:47
IDEA快捷键+配置 常用快捷键
调试
Ctrl + D:调试运行
F8:跳到下一步
F7:进入方法内部
Shift + F8:跳到下一个断点或者跳出方法
重构
⌘ + Shift + V:访问历史粘贴板
⌘ + Shift + .:折叠指定方法、代码块
⌘ + Shift + -:折叠所有方法
⌘ + Shift + +:展开所有折叠
⌘ + Option + L:格式化代码
Ctrl + Option + O
2021-09-0206:17:35
RocketMQ 官方文档
Apache RocketMQ
Linux安装
点击下载安装包
进入解压后目录
1cd rocketmq-all-4.8.0
修改bin/runbroker.sh配置
这是以前配置JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"改成:
1JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx2
2021-09-0206:14:57
Elasticsearch搜索引擎 简介
Elaticsearch,简称为es, es是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别(大数据时代)的数据。es也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。
与关系型数据库对比
2021-09-0206:14:07
Docker 安装
12345678#安装命令
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
#启动docker
systemctl start docker
#设置开机启动
systemctl enable docker
配置docker默认存储位置
1234567891011121314151617181920
2021-09-0206:13:09
备份MySQL数据库 本机备份脚本
123456789101112131415161718192021222324#设置本机数据库登录信息
database='v_kun_dev'
date_time=`date +%Y-%m-%d-%H-%M`
#保存目录中的文件个数
count=20
#备份路径
path=/home/dataBack/
#备份数据库sql文件并指定目录
# 本地
mysqldump $datab
2021-09-0206:11:29
mysql 安装
采用docker安装方式
下载镜像
1docker pull mysql:5.7.33
建立映射目录
1mkdir /home/mysql
运行mysql
1docker run -p 3306:3306 --name mysql -v /home/mysql/conf:/etc/mysql -v /home/mysql/logs:/var/log/mysql -v /hom
2021-09-0204:40:50
CORS跨域服务器设置 什么是跨域
出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protoc
2021-09-0204:38:07
kafka docker安装kafka
拉取镜像
12docker pull wurstmeister/zookeeper
docker pull wurstmeister/kafka
启动Zookeeper
123456789docker run -d --name zookeeper -p 2181:2181 -t wurstmeister/zookeeper
## 查看zookeeper端口:
su
2021-09-0204:36:04
Linux安装Nginx及常见问题 安装
安装依赖
1yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
下载nginx
官网
放到/home目录下
创建安装目录
12ce home
mkdir nginx
解压
1tar -zxvf nginx-1.18.0.tar.gz
进入目录
1cd /home/nginx-1.18.0
配置(两个二