- 博客(80)
- 资源 (8)
- 问答 (3)
- 收藏
- 关注
原创 MySQL大厂面试题之——事务篇
在InnoDB中,一旦事务被提交,就会将修改操作写入磁盘,并且释放所有的锁。长事务会占用更多的内存,需要保留大量的撤销日志和未提交的数据。在项目开发过程中,应尽量避免长事务,合理设计事务、控制事务执行时间和分批提交等方式减少长事务带来的负面影响。在主从复制的环境中,长事务可能会导致主从复制的延迟,服务器需要等待主服务器上的长事务完成才能进行数据同步。在事务执行期间,如果其他事务修改了相同数据,长事务的提交可能会导致数据冲突或丢失。长事务在执行过程中,可能涉及多个数据的锁定,高并发下可能互相等待,形成。
2025-01-05 13:31:51
420
原创 索引基础知识
我们知道索引就是为了提高我们查询数据库的效率。就像我们在看一本书,如果我们想了解某个章节的内容,我们可以通过查询目录,找到对应的章节,而不用直接从书中一页一页的翻找。其实数据库的索引就类似于书本的“目录”。
2024-12-17 22:10:28
956
原创 图数据库(六):Neo4j中的查询操作
上一篇文章我们学习了Neo4j中的更新操作,今天我们学习一下Neo4j的查询。说到查询我们就不得不提到Match关键字。
2023-06-12 22:51:32
2692
1
原创 图数据库(五):Neo4j中的更新操作
学过Mysql的人都知道,对于数据库的操作大多数都是增删改查,同样对于Neo4j图数据库也一样,今天我们就学习一下Neo4j中的更新操作。
2023-06-11 15:36:29
2552
原创 图数据库(三):Neo4j中的Create和Merge
在上篇文章中,我们介绍了在项目中如何使用Java来操作Neo4j图数据库。今天我们就仔细的学习一下,Neo4j中如何创建节点,以及Create和Merge的区别使用。
2023-06-08 23:14:44
2721
原创 图数据库(二):Java操作图数据库
在上篇文章中,我们介绍了什么是Neo4j,什么是Cypher以及Neo4j的使用,今天我们学习一下如何使用Java操作Neo4j图数据库。
2023-06-06 22:53:01
821
2
原创 图数据库(一):Neo4j入门
我们可以看一下百度百科对其的定义:Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。节点:实体,可以表示一个单独存在的个体,一般包含多个属性关系:用于连接两个节点之间的边属性:写在节点里的,用于对节点的扩展标签:用于对节点的分类。
2023-06-05 18:59:18
890
原创 【OpenCV入门教程Java版之四】视频操作入门
需要注意的一点就是需要将OpenCV的build/bin文件夹下的opencv_videoio_ffmpeg460_64.dll文件拷贝到Windows/Systems32文件夹下。在生活中我们经常会用相机去捕捉我们看到的景物,OpenCV中也提供了一个非常简单的接口,可以实现该功能。在OpenCV中如果我们要操作视频,VideoCapture类是一个非常重要的接口类,它可以从文件或者摄像设备中读取视频。首先我们可以简单的实现一个功能,通过电脑的摄像头得到监测视频,每隔一秒截取视频的图像存储。
2022-10-18 20:51:57
918
原创 【OpenCV入门教程Java版之三】图像的几何变化
今天我们聊一聊图像的几何变化。所谓图像的几何变化,就是指在不改变图像像素的前提下,对图像的像素进行空间几何变化,比较常见的变化有距离变化、坐标映射、平移、镜像旋转、缩放等。
2022-10-16 13:57:39
1214
原创 【OpenCV入门教程Java版之二】图像的加载、显示与保存
随着OpenCV的发展,使用Mat类型进行存储图片数据,OpenCV的学习变得越发简单,有点趋向于Matlab编程,而今天我们学校的图像加载、显示和保存所用到的主要方法也越发像Matlab。话不多说,我们开始今天的图像入门。
2022-10-11 21:29:00
1966
原创 【OpenCV入门教程Java版之一】安装OpenCV:OpenCV4.6.0+IDEA开发环境配置
在读研期间的研究方向与图像处理有一点相关,后来由于工作可能会有需要,所以晚上回去也闭门研究了OpenCV和图像处理相关的知识。也准备写一个OpenCV系列的专栏作为自己的学习笔记,也分享给大家,如果有写错的地方也欢迎大家及时指出。好了这篇文章作为OpenCV系列的第一篇,我们先介绍一下OpenCV的开发环境。在学习OpenCV的过程中也搜集了网上的很多资料,发现多为C++、Python开发,很少使用Java,所以我打算使用Java来学习OpenCV。
2022-10-09 21:49:01
7406
1
原创 聊一聊Redis的RDB快照
前面我们学习了Redis的AOF日志,我们知道通过AOF在进行数据恢复时需要将操作日志全都执行一遍,如果操作很多,那么Redis就会恢复的很慢。那有没有一种既可靠有快速的方法呢,今天我们聊一聊Redis的RDB快照。顾名思义快照就是将内存中的数据全都记录到磁盘中,但是同样的如果给内存的全量数据做快照,把它们全部写入磁盘也会花费很多时间。Redis的单线程模型就意味着我们需要尽量避免所有阻塞主线程的操作,在Redis中提供了两个命令来生成RDB快照:有一个问题我们在创建快照的时候能修改数据吗,如果修改了那么
2022-06-23 20:17:58
354
原创 聊一聊Redis的AOF日志
日志是任何系统或者软件中必不可少的,同样在Redis中AOF日志也是Redis用来持久化的重要手段之一。我们比较熟悉的MySQL中redo log用到了WAL(Write-Ahead Logging)技术,它是先写日志,再写磁盘,相比较而言,在Redis中与其相反,是后写日志。在Redis中AOF日志的实现都是先写命令,再记录日志,为什么要先执行命令再记录日志呢,而不是像传统的数据库日志。后写日志的方式,就是先让系统执行命令,只有命令执行成功,才会被记录到日志中,否则直接向客户端报错,这样也就避免了日
2022-06-20 18:53:15
242
原创 Redis的单线程模型
我们在学习Redis的过程中都说Redis快,redis是单线程的,但是我们有没有想过单线程的Redis为什么会这么快呢?确实,Redis在6.0之前都是单线程模型,这主要指的是Redis的网络IO和键值对的读写都是由一个线程来完成的,这也是Redis提供键值存储服务的主要流程。但是相对于Redis中其他的功能,比如持久化、集群等确是由额外的线程执行的。相比较单线程,我们经常会听到一个说法,为了提高性能和效率,使用多线程可以增加系统吞吐率、增加系统的扩展性。的确在合理分配资源的情况下,可以增加系统中处理请
2022-06-19 14:58:48
195
原创 Elasticsearch中自定义扩展IK分词器字典
在Elasticsearch中我们常使用IK分词器进行语句分词,但是有时候一些生僻的词汇,IK分词器也无法分割,此时就需要我们进行自定义分词。在Elasticsearch中使用IK分词器还是比较简单的,上篇文章中我们说过docker中安装Elasticsearch,并将文件夹映射到本地文件夹中,所以此时我们仅需将IK分词器下载解压到本地Elasticsearch映射的文件夹下如图所示,直接将IK分词器解压到Elasticsearch的plugins 文件夹下就好。自定义扩展IK分词器字典需要修改
2022-05-03 17:55:16
566
原创 docker 中安装Elasticsearch、Kibana
为了学习方便我们使用腾讯云服务器(也可以使用阿里云),避免自己搭建Linux服务器。安装docker(具体安装方法可以查看docker官网)docker pull elasticsearch:7.4.2## docker启动在9200端口和9300端口(9300是集群端口),将docker容器的文件夹映射到本地磁盘对应的文件夹,便于操作docker run --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=singl
2022-05-01 20:08:32
1953
原创 聊一聊count的性能
在开发的过程中,我们经常有需求要计算一个表的行数,很多人都会想到可以直接使用select count(*) from table。但是随着系统记录不断变多,这条语句也会变慢,今天我么就聊一聊count(*)这个语句如何实现的。count(*)的实现在MySQL中count(*)由于引擎的不同,实现的方式也是不一样的。在MyISAM中有一一个表的总行数存在了磁盘中,使用count(*)可以直接返回在InnoDB引擎中,执行count(),会把数据一行一行从引擎中读出,然后累计**这也就造成了为什么
2022-04-07 20:36:39
447
原创 聊一聊唯一索引和普通索引
在我们学习MySQL的过程中,肯定了解了索引的一些基本概念,也了解了唯一索引和普通索引的区别,今天我们就简单讨论一下唯一索引和普通索引的使用场景。我们在开发业务需求时,建立用户信息表是不可避免的。比如维护一个员工信息系统,每个人都有一个身份证号,并且我们的用户代码也保证了不会写入重复的身份证号。在我们查询员工信息时,我们可以在身份证号(u_card)上建立索引。但是由于身份证号的字段比较大,我们不建议将身份证号码作为主键...
2022-04-02 18:45:10
1463
原创 一条SQL的执行过程
在我们学习MySQL时,我们会执行各种SQL语句,今天我们就讨论一下SQL语句的执行过程,聊一聊MySQL的基础架构,看一看MySQL有哪些组件构成,以及这些组件的作用。MySQL的基础架构图简单来说,MySQL可以分为服务层和存储引擎层。服务层中主要包括:连接器、查询缓存、接下、优化器、执行器等。很多跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图,内置函数等。存储引擎层主要负责数据的存储以及提取,支持多种存储引擎,比如常见的InnoDB、MyISAM、Memory等。其中InnoDB
2022-03-30 21:27:31
849
原创 int(2)中的2代表什么
今天有个朋友问我int(2)和int(10)有什么区别,难道是指字段的长度吗,答案肯定是否定的。我们知道在MySQL中int占4个字节,那么无符号的int,最大值就是2^32-1,但是具体int括号后的数字代表什么意思,我们测试来看。CREATE TABLE `zt` ( `id` int(2) unsigned NOT NULL, `value` varchar(255) COLLATE utf8_bin DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=
2022-02-20 11:43:47
3178
原创 ThreadLocal原理分析
ThreadLocal类提供线程局部变量,每一个访问这种变量的线程(通过get和set方法),都有独立初始化的变量副本。可以保证存储进去的数据,只被当前线程读取,各线程之间不会相互影响。 public T get() { Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t); if (map != null) { ThreadLocalMap.Entry e = map.g
2022-02-07 21:08:41
432
原创 Promise模式
Promise模式一种异步编程的模式,使得我们可以先开始一个任务的执行,并得到一个用于获取该任务执行结果的凭据对象,不用去等该任务执行完成可以执行其他操作,在生活中我们也经常会运用其中的思想,比如我们去一家小吃店点了一份鸭血粉丝和一份小笼包,会发一份凭据,鸭血粉丝比较快做好,我们可以不用等待小笼包做好,先吃鸭血粉丝,等到吃的差不多了,小笼包也可能出笼了,我们可以凭着发票换取小笼包。Promise模式介绍Promise模式主要是由4个部分构成:Promisor 负责对外暴露可以返回Promise对象
2021-11-04 20:05:52
427
原创 Guarded Suspension模式
Guarded Suspension模式顾名思义保护性暂停模式,可以大大降低多线程获取锁时锁冲突带来的性能开销,当线程访问某个数据时,发现无法请求到,此时就会要求线程在进行访问。暂时挂起,保证实例的安全性,等满足条件再去请求。比如我们如果要开发一个服务器,处理来自客户端的请求。为了不丢失请求,要维护一个缓冲区,将客户端的请求先储存至缓冲区,然后从缓冲区取出请求执行,如果缓冲区没有请求,就等待直到有新的请求过来。public class Request { private String name;
2021-11-03 18:27:34
109
原创 MySQL性能优化
我们在开发的过程中经常会遇到一个问题,有时数据库的查询速度很慢,那么为什么会造成这个问题呢。首先我们先了解一下,查询的整个生命周期,从客户端,到服务器,然后在服务器上进行解析,生成执行计划,执行,返回结果给客户端。执行是整个生命周期中最重要的阶段,包含了大量为了检索数据到存储引擎的调用以及调用后的数据处理。查询的过程中需要在很多地方消耗时间,包括网络、CPU计算,生成统计信息执行计划、锁等待等,尤其是向底层存储引擎检索数据的调用操作,根据存储引擎的不同还会产生大量的上下文切换以及系统调用。优化数据访问
2021-10-28 20:35:36
352
原创 创建高性能索引
MySQL索引索引是存储引擎用于快速找到记录的一种数据结构,如果没有索引,MySQL必须从第一行,遍历整个表进行查找,索引对于良好的性能非常关键,尤其是数据量越来越大时,索引对性能的影响越发重要。索引的类型索引有很多类型,可以根据不同的场景提供更好的性能,在MySQL中索引是在存储层而不是服务层实现的,所以没有统一的索引标准:不同存储引擎的索引的工作方式也是不一样的,不同的存储引擎支持的索引类型也都不是一样的。我们先来看一下MySQL支持的索引类型(只讨论常用的InnoDB、MyISAM存储引擎中的
2021-10-26 20:18:00
112
原创 缓存穿透、缓存击穿、缓存雪崩的解决方案
考虑比较完善的方案,分为事前,事中,事后三个方面去解决:事前:发生雪崩之前如何避免redis彻底挂掉redis本身的高可用性,复制,主从架构,操作主节点,读写,数据同步到从节点,一旦主节点挂掉,从节点跟上双机房部署,一套redis cluster,部分机器部署在一个机房,另一部分部署在另一个机房还有一种部署方式,两套redis cluster,两套redis cluster之间做一个数据同步,redis集群可以搭建成树状结构一旦单个机房除了故障,另一个机房还可以使用事中:redis clust
2021-07-10 19:48:14
132
原创 SpringBoot自动装配原理
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar
2021-03-30 20:48:00
87
4
在windows下neo4j的3.5.10版本
2023-06-04
socket.zip
2020-06-05
hibernate架包
2017-09-01
js如何通过stomp声明rabbitmq的队列
2021-09-14
谷歌浏览器如何用js遍历文件夹下的文件名?
2021-05-17
java如何实现将PPT的shape对象转化为图片?
2021-04-29
TA创建的收藏夹 TA关注的收藏夹
TA关注的人