自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

旷野历程

分享知识 传递快乐

  • 博客(434)
  • 资源 (1)
  • 收藏
  • 关注

原创 乐观锁与悲观锁如何实现?

在 MySQL中,悲观锁是需要依靠数据库提供的锁机制实现的,在 InnoDB 引擎中,使用悲观锁,就需要先关闭 MySQL 数据库的自动提交属性,然后通过 select ... for update 来进行加锁。乐观锁最大的好处就是通过 CAS 的方式做并发校验,这个过程不需要提前加锁,只需要在更新的那一刻加一个短暂的锁而已,而悲观锁的话,需要你先 select ...... for update,锁的时长要长得多。MySQL 中的乐观锁在对数据库进行处理的时候,乐观锁并不会使用数据库提供的锁机制。

2024-04-15 09:25:51 295

原创 MySQL中Update语句是悲观锁?还是乐观锁?

乐观锁是相对悲观锁而言的,乐观锁只有在数据进行提交更新的时候,才会对数据的冲突与否进行检测,如果发现冲突了,则让返回用户错误的信息,让用户决定如何去做。如果使用了悲观锁,通常需要在查询时显式地使用 for update 子句,这会将选定的行进行加锁,防止其他事务对其进行修改,直到当前事务结束。乐观并发控制相信事务之间的数据竞争的概率是比较小的,因此尽可能直接做下去,直到提交的时候才去锁定,所以不会产生任何锁和死锁。相对于悲观锁,在对数据库进行处理的时候,乐观锁并不会使用数据库提供的锁机制。

2024-04-15 09:24:46 245

原创 【MySQL】分析数据占用磁盘的大小

分析MySQL中的数据占用磁盘的大小

2024-04-03 15:18:41 161

原创 CountDownLatch、CyclicBarrier和Semaphore区别

CountDownLatch、CyclicBarrier、Semaphore都是Java并发库中的同步辅助类,它们都是可以用来协调多个线程之间的执行。它通常用来实现一个线程需要等待获取一个许可证才能访问共享资源,或者需要释放一个许可证才能完成操作。是一个同步屏障,它允许多个线程相互等待,直到到达某个公共屏障点,才能继续执行。是一个计数器,它允许一个或多个线程等待其他线程完成操作。它通常用来实现一个线程等待其他多个线程完成操作之后再继续执行的操作。

2024-04-02 11:48:09 140

原创 内存淘汰策略

当 Redis 作为缓存使用的时候,推荐使用 allkeys-lru 淘汰策略。Redis支持多种内存淘汰策略,可以通过配置文件中的 maxmemory-policy 参数来指定。redis.conf 配置文件中的 maxmemory 属性限定了 Redis 最大内存使用量,当占用内存大于 maxmemory 的配置值时会执行内存淘汰策略。内存淘汰机制由 redis.conf 配置文件中的 maxmemory-policy 属性设置,没有配置时默认为 no-eviction 模式。

2024-03-29 14:53:33 296

原创 集合的排序方式?

Java.util 包中的 List 接口继承了 Collection 接口,用来存放对象集合,当对这些对象进行排序的时候,要么让对象类自己实现同类对象的比较,要么借助比较器进行比较排序。

2024-03-19 10:12:03 406

原创 MySQL 用了哪种默认隔离级别,实现原理是什么?

2)假设当前 select 的 trx_id 为 102,read-view 中未提交的事务为 [101],则需要通过 DB_ROLL_PTR 获取上一版本的 trx_id 100,注意 trx_id 为 101 的事务是改变了另一张表的数据,所以 undo 日志里版本链指向的上一条数据 trx_id 为 100,还是会返回 zhangsan。每次 select 数据时生成 read view 列表,再配合 undo 日志中的版本链,让不同的事务读-写,写-读操作可以并发执行,进而实现 MVCC。

2024-03-01 13:57:36 1123 1

原创 RocketMQ消息积压如何处理

在高并发的场景下,由于消息产生速度超过消费速度,可能会导致消息积压的问题。本文将介绍 RocketMQ 消息积压的原因和如何处理积压问题。

2024-03-01 13:47:31 491

原创 RocketMQ如何做到消息不丢失?

前面写过关于 Kafka 消息不丢失的的文章,现在写一下 RocketMQ 是如何做到消息不丢失。在以上这三步中每一步都可能会出现丢失数据的情况, 那么 RocketMQ 到底在什么情况下才能保证消息不丢失呢?接下来我们来细说一下如何保证这三个阶段不出现问题。

2024-02-29 13:06:14 847

原创 高并发下如何保证数据的一致性

在并发量高的情况下推荐使用悲观锁的方式,如果并发量不高可以考虑使用乐观锁,但是要注意幂等性,推荐使用版本号方式。同时乐观锁场景要注意 aba 的问题。

2024-02-25 17:38:56 777

原创 Session 和 Token 区别

众所周知,HTTP协议它是无状态的协议,浏览器多次请求服务器,服务器它无法感知是不是同一用户的请求,于是就有了Session机制。Session机制是一种在Web开发中用于跟踪用户状态的机制。它的基本工作流程是,当用户第一次请求Web服务器时,服务器会生成一个唯一的Session,并将其存储在服务器端(通常可以持久化到数据库中)。然后,服务器通过响应头的方式将该Session的标识符(SessionID)返回给浏览器,并存储在浏览器的Cookie中。

2024-02-23 16:50:32 835

原创 != 和 equals 的优先级

在 Long 类中,equals 方法被重写,用于比较两个 Long 对象的值是否相等。a.equals(b) 返回 false,表示这两个对象的值是相等的。在你的例子中,a 和 b 都是 Long 类型的对象,而不是基本类型 long。= 操作符时,它会比较两个对象的引用,而不是它们的值。即使它们的值相等,但它们是不同的对象,所以 a!= 操作符比 equals 方法的优先级高。= 操作时,会先进行对象引用的比较,而不是值的比较。注意:在比较对象时,推荐使用 equals 方法进行值比较,而不是!

2024-02-04 15:31:21 356

原创 Nginx反向代理WebSocket

在配置 Nginx 前先了熟悉一下配置文件的说明,方便更好的理解。

2024-02-04 10:19:24 790

原创 Linux下安装Nginx及配置SSL证书

如果是初次安装需要执行 make install,非初次安装切记不要执行 make install,否则会重新安装nginx。上述操作执行完成以后,你的目录下会出现 objs 文件夹,文件夹内存在 nginx 文件,如图:接下来使用新的 nginx 文件替换掉之前安装目录 sbin 下的 nginx,注意这里的替换的时候可以先将之前的文件备份下,停掉nginx服务成功之后,进入到 nginx 安装目录下,查看 ssl 是否成功。说明已经开启。

2024-01-24 20:44:44 758

原创 多级树形结构查询 - 递归

【代码】多级树形结构查询 - 递归。

2024-01-18 09:57:49 417

原创 CompletableFuture原理与用法

在Java中CompletableFuture用于异步编程,异步通常意味着非阻塞,运行任务单独的线程,与主线程隔离。并且通过回调可以在主线程中得到异步任务的执行状态,是否完成和异常等信息。通过这种方式,主线程不会被阻塞,不需要一直等到子线程完成。主线程可以并行的执行其他任务。使用这种并行方式,可以极大的提高程序的性能。CompletableFuture 可以从全局的 ForkJoinPool.commonPool() 获得一个线程中执行这些任务。

2024-01-15 14:48:54 1076

原创 SQL执行时间过长如何优化

这个问题,其实跟慢 SQl 排查解决有点像。

2024-01-12 13:27:58 1088

原创 慢 SQL 的优化思路

如何定位慢 SQL 呢?可以通过 slow log 来查看慢SQL,默认的情况下,MySQL 数据库是不开启慢查询日志(slow query log)。所以我们需要手动把它打开。可以通过慢查询日志,定位那些执行效率较低的 SQL 语句,重点关注分析。

2024-01-12 11:45:19 958

原创 如何解决海量数据的问题

近年来,高并发、分布式以及大数据成了后端开发者绕不开的话题,招聘软件上几呼都写着有高并发、大数据等项目经历优先时。很多人实际项目往往都是 CRUD,也没机会接触到这些场景啊。但是,有位伟人曾经说过:没有条件,要创造条件。既然工作中接触不到高并发和大数据,我们可以弯道超车——平时在学习的时候多关注类似的场景。本文讲述了解决大数据问题的常用手段,以及一些经典的大数据场景和解决方式。看完以后,相信咱们下次在项目上或者面试中遇到这些大数据相关的问题时,都能驾轻就熟。

2024-01-08 11:21:43 934

原创 MySQL事务与隔离

RU,读未提交解决了脏写问题,但可能出现脏读;RC,读已提交解决了脏读问题,但可能出现不可重复读;RR,可重复读解决了不可重复读的问题,但可能出现幻读;Serializable,串行化解决了幻读的问题,但性能很低。MySQL 是怎么实现事务隔离性的呢?答案是加锁。事务级别越高,解决的并发事务问题越多,同时也意味着加的锁就越多。RU-读未提交 < RC-读已提交 < RR-可重复读 < Serializable-串行化。

2024-01-02 17:25:00 875

原创 什么是分布式锁

在分布式系统中,分布式锁是一种机制,用于协调多个节点上的并发访问共享资源。这个共享资源可以是数据库、文件、缓存或任何需要互斥访问的数据或资源。分布式锁确保了在任何给定时刻只有一个节点能够对资源进行操作,从而保持了数据的一致性和可靠性。

2024-01-02 17:21:51 1086

原创 谈谈 Redis 除了作缓存之外还能干什么

Redis 是一种内存键值数据库,它支持多种数据结构,如 String、Hash、List、Set、SortedSet。

2023-12-29 16:55:23 793

原创 分布式、CAP 和 BASE 理论

首先,让我们来谈谈分布式系统。你可以将分布式系统想象成一个庞大的计算机网络,由多个计算机或服务器节点组成,它们可能分布在不同的地理位置上。如图所示,应用层的三个节点都发布在不同的城市。这些节点之间可以相互通信和协作,共同完成复杂的任务。想象一下,你是一名团队领导,有一项任务需要完成。如果你独自一人完成,可能需要花费很长时间。但如果你将任务分解成几个子任务,分派给你的团队成员,他们可以并行工作,更快地完成任务。这就是分布式系统的核心思想。

2023-12-29 16:47:12 814

原创 MySQL 执行过程

MySQL 的执行流程也确实是一个复杂的过程,它涉及多个组件的协同工作,故而在面试或者工作的过程中很容易陷入迷惑和误区。

2023-12-29 16:43:13 1562 1

原创 分布式事务常见的解决分案

在选择分布式事务解决方案时,需要根据业务需求、系统复杂度、性能要求等因素进行权衡。例如,对于业务场景要求数据的一致性非常高,且可以接受一定程度的性能损失时,2PC 或者 3PC 是很好的选择。对于复杂业务流程中的分布式事务,需要在业务层进行更细粒度控制时,TCC 是一个好的选择。比如,用户在电商平台下单购买商品,涉及到库存、账户余额、积分等多个服务的数据变更。而对于可容忍短时间内数据不一致的业务,则可以考虑最终一致性相关的解决方案,如:本地消息表、消息事务及最大努力通知方案等等。

2023-12-29 11:31:26 830

原创 Redis如何选择数据结构

Redis 常用的数据结构一共有五种:string、hash、list、set、zset(sorted set)。大多数场景下使用 string 都可以去解决问题。但是,这并不一定是最优的选择。

2023-12-19 11:20:52 488

原创 Shell在循环中使用i++

在这个例子中,((i++)) 用于自增变量 i 的值,每次循环迭代时 i 的值增加 1。你也可以使用 let "i++" 来达到同样的效果。在 Shell 脚本中,可以使用 (( i++ )) 或者 let "i++" 来增加变量 i 的值。这用于在循环中自增变量 i。这种自增的方式也可以在 for 循环中使用。在这个例子中,((i++)) 在 for 循环中用于自增循环变量 i。

2023-12-08 10:02:28 520

原创 Shell脚本中[]和[[]]区别

总的来说,[[]] 提供了更多的功能,而且在某些情况下更容易使用和阅读,但是它是 Bash 的扩展,可能在其他 Shell 中不被支持。如果你在编写 Bash 脚本,[[]] 是一个更强大和灵活的选项。在 Shell 脚本中,[] 和 [[]] 是用于条件测试的不同语法结构。它们有一些区别,主要体现在对字符串处理和表达式的支持上。[[]] 是 Bash 的扩展,提供了更多的功能,包括高级字符串比较、正则表达式匹配等。[] 也被称为 test 命令,它支持基本的条件测试。

2023-12-08 10:01:50 199

原创 Shell函数传递值

在这个例子中,my_function 函数定义了两个本地变量 arg1 和 arg2,它们分别代表两个参数。在函数体内,通过 $1 和 $2 来获取传递给函数的两个参数的值。当你在函数内部使用 local 声明变量时,该变量的作用域仅限于该函数,而不会影响全局作用域。有助于防止在函数内部和外部发生命名冲突,同时提高代码的可读性和维护性。调用函数时,传递了两个字符串参数:"Hello" 和 "World",函数会输出这两个参数的值。还可以根据需要在函数中使用更多的参数,只需相应地调整函数定义和调用即可。

2023-12-08 10:00:50 83

原创 Shell脚本中if [[-f ]]什么意思

是一个条件语句,用于检查指定路径是否是一个文件。这个条件语句中的关键部分是 -f,它是一个文件测试运算符,用于检查文件是否存在且是一个常规文件(而不是目录或其他类型的文件)。在shell脚本中,

2023-12-08 09:59:54 1776

原创 查看MySQL指定数据库连接的服务地址

information_schema.PROCESSLIST 是 MySQL 中的一个系统表,用于提供有关当前执行的 MySQL 进程的信息,包括连接的相关信息、正在执行的查询、连接状态等。在 MySQL 中,要查看指定数据库连接的服务地址,可以查询 information_schema.PROCESSLIST 表来获取有关当前 MySQL 进程的信息,包括连接的服务地址。注意:information_schema.PROCESSLIST 表提供的信息是瞬时的,可能会随时间而变化。

2023-12-07 10:37:19 327

原创 MySQL和Java通用加密解密方式

加密方式使用 AES 加密,再转成 Base64。

2023-12-07 10:01:24 216

原创 基本数据类型转字符串类型对比

i + ""底层使用了 StringBuilder 实现,先用 append() 方法拼接,再用 toString() 方法获取字符串。String.valueOf() 方法底层调用了 Integer.toHexString() 方法,但是会在调用前做空判断。Integer.toString() 方法就不说了,直接调用。执行结果会根据自身硬件性能会有差别。

2023-12-06 10:08:23 94

原创 Linux结束程序运行的命令

通过进程 ID(PID)结束一个程序的运行。kill 1234。

2023-12-04 14:43:35 189

原创 线程池大小设置多少比较合适?

旨在用公式描述在并行计算中,多核处理器理论上能够提高多少倍速度。它代表了处理器并行运算之后效率提升的能力。公式如下:S(N):是加速比(Speedup)P:是并行化部分占总程序执行时间的比例N:是并行化部分的处理器数目P 为并行计算所占比例,N 为并行节点处理个数。当 1 - P = 0 时,没有串行,只有并行,最大加速比 S(N) = N;当 P = 0 时,只有串行,没有并行,最小加速比 S(N) = 1;

2023-12-04 08:04:35 851

原创 Java拆分集合

在对数据进行批量操作的时候,由于数据量太大,需要对数据进行拆分操作,分成N个小集合。执行平均时间:≈15ms。

2023-12-01 17:05:00 191

原创 spring-boot-maven-plugin插件 —— 保留依赖

使用这种部署的方式,每次的迭代更新,不用每次都上传一个很大的 jar 包,从而节省部署时间。但这种方式也有一个弊端就是增加了 jar 包的管理成本,多人协调开发,构建的时候,还需要专门去关注是否有人更新依赖。在做开发时,除了会引用第三方依赖,也会依赖自己公司的其它模块。这种依赖可能会经常变动,所以不宜打到外部的 lib,不然就会需要经常上传更新。有排除依赖,必然也有保留依赖。前边写完排除依赖,这次写一下保留依赖。为了解决这种问题只需在插件中把需要打进 jar 的填写进去就可以了。

2023-11-20 08:26:26 107

原创 spring-boot-maven-plugin插件 —— 打包时减小jar包的大小方法

使用这种部署的方式,每次的迭代更新,不用每次都上传一个很大的 jar 包,从而节省部署时间。但这种方式也有一个弊端就是增加了 jar 包的管理成本,多人协调开发,构建的时候,还需要专门去关注是否有人更新依赖。但每次修改代码,都需要重新把他们构建 jar 中去,往服务器上传、发布,生成大量的资源、带宽、时间的浪费。Maven 在打包时会将所依赖的 jar 包全部打包进去,包含了所有的依赖和资源文件,就会导致打出来的包比较大。这种依赖可能会经常变动,所以不宜打到外部的 lib,不然就会需要经常上传更新。

2023-11-20 08:26:04 339

原创 spring-boot-maven-plugin插件 —— 排除依赖

默认情况下,repackage 和 run 目标会包含任何定义在项目中的 provided 依赖。Spring Boot 项目会认为 provided 依赖是运行应用的容器所需的依赖。其中一些依赖项可能根本不需要,应该从可执行 jar 中排除。为了保持一致性,它们在运行应用程序时也不应该出现。

2023-11-20 08:25:47 691

原创 spring-boot-maven-plugin插件 —— 重新打包分类

如果使用的是 spring-boot-starter-parent,则 repackage 目标将在 ID 为 repackage 的执行中自动执行。上面配置示例会在 target 目录中创建 2 个 jar 文件,一个是原始 jar,另一个是后缀带 exec 表示为可执行的 jar。默认情况下,repackage 目标将用重新打包的包替换原始包。如果需要保留原始包,并有可执行 jar 包,请按如下所示配置插件。

2023-11-20 08:20:24 113

Dhtmlx日程-图表-甘特图实例

这里Dhtmlx日程实例,图表实例,甘特图实例,并结合了数据库进行交互,希望参帮助更多的菜鸟

2016-08-23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除