插入数据批量插入数据1Insert into tb_test values(1,'Tom'),(2,'Cat'),(3,'Jerry'); 手动控制事务12345start transaction;insert into tb_test values(1,'Tom'),(2,'Cat'),(3,'Jerry');insert into tb_test values(4,'Tom'),(5,'Cat'),(6,'Jerry');insert into tb_test values(7,'Tom'),(8,'Cat'),(9,'Jerry');commit; 主键顺序插入,性能要高于乱序插入12主键乱序插入 : 8 1 9 21 88 2 4 15 89 5 7 3主键顺序插入 : 1 2 3 4 5 7 8 9 15 21 88 89 大批量插入数据如 ...
前言文章由本人通过互联网自学、整理、总结的教程,仅作为学习笔记记录,并分享给有需要的同学。 索引概述在我理解看来,索引是具有高效查询的一种数据结构,也可以理解为满足特定查找算法的数据结构,这种数据结构以某种方式指向数据。 索引特点 索引结构MySQL的索引是在存储引擎层实现的,不同的存储引擎有不同的索引结构,主要包含以下几种: 上述是MySQL中所支持的所有的索引结构,接下来,我们再来看看不同的存储引擎对于索引结构的支持情况 注意: 我们平常所说的索引,如果没有特别指明,都是指B+树结构组织的索引。 B-TreeB-Tree,B树是一种多叉路衡查找树,相对于二叉树,B树每个节点可以有多个分支,即多叉。 以一颗最大度数(max-degree)为5(5阶)的b-tree为例,那这个B树每个节点最多存储4个key,5 个指针: 知识小贴士: 树的度数指的是一个节点的子节点个数。 我们可以通过一个数据结构可视化的网站来演示:https://www.cs.usfca.edu/~galles/visualization/BTree.html B+TreeB+Tree是B-Tree的 ...
前言在微服务项目中,假设项目在服务器部署上线了,此时该如何进行调式和排查问题呢? Jvm Debug在idea中配置Jvm Debug,注意这里Host写自己主机ip地址,Port默认5005即可,模块选择你需要调试的模块 在Jenkins中设置构建配置信息,配置好后重新启动docker服务, 1ssh root@192.168.150.101 "/usr/local/src/script/startup.sh -c tj-trade -n tj-trade -d tj-trade -p 8088 -a 5005" 可以看到启动之后也带上了5005端口 在启动idea的JvmDebug,此时可以看到我Idea中之启动了一个JvmDebug应用,其余服务都没有启动 并且当控制台打印transport: 'socket'说明,链接成功,正在进行通信了 测试此时,只需要在调用一次接口就可以查看是否已经可以实现远程调试的作用了
前言记录一下调试远程和本地代码的时候,下线Nacos远程服务报错问题 问题复现192.168.150.1是本地运行的服务, 101是服务器部署的服务,现在我需要让接口调用Nacos的时候走192.168.150.1有两种方法,一种是调整某个服务的 优先级,第二种方法是直接下线某个服务,这里我采用的是第二种,直接下线服务的方式,此时就出现了一下的问题 问题分析nacos 采用 raft选举算法计算 Leader,并记录上次启动的集群地址,服务器 IP 改变时(网络环境不稳定,如WIFI, IP 地址也经常变化)会导致 raft 记录的集群地址失效,导致选 Leader 出现问题。 解决方法Nacos在本地 删除Nacos根目录下data文件中的protocol文件夹,然后重启即可 Nacos在服务器中相关命令 123456docker exec -it nacos /bin/bash ## 进入nacos容器cd data/ ## 进入data文件夹rm -rf protocol/ ## 删除文件夹exit docker restart nacos # ...
后端技术
未读前言今天在B站大学学习并发编程的时候,老师引用了一个第三方的jar包(jol-core),maven坐标如下,来打印锁对象的Mark Word字节码,从而更直观察地多线程下加偏向锁的情况。 12345<dependency> <groupId>org.openjdk.jol</groupId> <artifactId>jol-core</artifactId> <version>0.17</version> </dependency> 这些都是挺常规的操作,接着老师的骚操作来了,扩展了jar包里面的方法。弹幕里面都是惊呼声,老师改了jar包,我们学习者没法复现了呀。 我这人就喜欢钻牛角尖,评论区翻遍了也没见得有这个Jar包修改方法的 好心人,那就只能自己动手咯。 视频地址 Jol-Core依赖加载失败 如果你没有这个问题可直接跳过 在加载Maven依赖的时候,Jol-Core这个Jar包就是拉不下来,因此我重新更新了一下Maven settings.xml中的 mi ...
闲谈技术
未读Monitor 概念回顾Java对象头以 32 位虚拟机为例 名词解释: Object Header (64 bits): 它包含了对象的元信息以及用于垃圾回收和同步的数据。 Mark Word (32 bits): 这个部分通常包含用于垃圾回收和同步的标记信息。标记字包含了对象的哈希码、锁定状态、垃圾回收标记等信息。 Klass Word (32 bits) : 这个部分包含指向对象的类元数据的指针,它描述了对象属于哪个类,包括类的方法、字段等信息。 普通对象12345|--------------------------------------------------------------| | Object Header (64 bits) | |------------------------------------|-------------------------| | Mark Word (32 bits) | Klass Word (32 bits) | ...
数据结构与算法
未读坚持就是胜利 LeetCode地址 引用站外地址 LeetCode 209 滑动窗口解题思路初始化变量和窗口 定义两个指针 left 和 right,分别表示窗口的左右边界,初始化为0。 定义一个变量 sum 用于存储窗口内元素的和,初始值为0。 定义一个变量 minlength 用于记录符合条件的最短子数组的长度,初始值为0。 移动右边界,扩大窗口 在一个 while 循环中,不断将 nums[right] 加到 sum 中,然后将右指针 right 向右移动,扩大窗口。移动左边界,缩小窗口 如果当前窗口的和大于等于目标值 target,则在另一个内部的 while 循环中,不断将 nums[left] 从 sum 中减去,并将左指针 left 向右移动,缩小窗口,直到窗口内的和小于目标值。 在这个过程中,不断更新 minlength,保持其为符合条件的最短子数组的长度。循环直 ...
软件与插件
未读前言最近在网上找到一批好的学习资料,想保存到网盘,奈何贫穷的我没有雄厚的财力无法支撑我去开网盘的VIP,不知道大家是否也有过这头疼的问题 因此给大家安利一波一个无需VIP,一键转存海量文件的工具,让你可以免费转存任意文件到百度网盘 百度开发者百度开放平台进行注册 注册之后点击控制台创建应用,然后你就会得到如下信息 进入到百度开放平台,找到接入授权下的授权码模式授权,当然你也可以不用进,因为接口在下方我以贴出来了 发起授权码Code请求发起授权码 Code 请求依赖于以下链接 12345678910GET http://openapi.baidu.com/oauth/2.0/authorize?response_type=code&client_id=您应用的AppKey&redirect_uri=您应用的授权回调地址&scope=basic,netdisk&device_id=您应用的AppID**注意**:这里的回调地址如果你没有就直接写`redirect_uri=oob`以上链接示例中参数仅给出了必选参数,其中device_id为硬件应 ...
学习笔记
未读什么是管程(Monitor)管程(Monitor)是一种并发编程的模型和技术,用于解决多线程之间的互斥访问和条件等待的问题。它是由荷兰计算机科学家 Edsger Dijkstra 在 1971 年提出的一种同步机制。 管程提供了一种方式让多个线程能够协调彼此的执行,确保在任意时刻只有一个线程可以访问共享资源,从而避免了线程间的竞争条件(Race Condition)和数据不一致的问题。 管程通常由以下几个要素组成: 互斥锁(Mutex):用于实现对共享资源的互斥访问,保证同一时刻只有一个线程可以进入管程进行操作。 条件变量(Condition Variable):用于实现线程间的条件等待和通知机制。线程可以在条件不满足的情况下等待,并在条件满足时被唤醒继续执行。 入口队列(Entry Queue):用于存放等待访问资源的线程队列。 管程内部方法:包括对资源的操作和对条件变量的操作等。 通过管程,可以将对共享资源的访问限制在管程的范围内,线程在进入管程之前需要获得管程的互斥锁,如果资源被占用,线程将进入入口队列等待;当某个线程完成对共享资源的操作后,会释放互斥锁并唤醒等待队列中的某个线程 ...
闲谈技术
未读创建和运行线程12345678// 创建线程对象Thread t = new Thread() { public void run() { // 要执行的任务 }};// 启动线程t.start(); 例如: 123456789// 构造方法的参数是给线程指定名字,推荐Thread t1 = new Thread("t1") { @Override // run 方法内实现了要执行的任务 public void run() { log.debug("hello"); }};t1.start(); 使用 Runnable 配合 ThreadRunnablen: 可以看作是一个需要执行的任务本体 把【线程】和【任务】(要执行的代码)分开 Thread 代表线程 Runnable 可运行的任务(线程要执行的代码) 123456789Runnable runnable = new Runnable() ...