自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(72)
  • 收藏
  • 关注

原创 揭秘 2024 春晚刘谦魔术——代码还原

随着 2024 年春晚的落幕,刘谦的魔术表演再次成为了人们热议的焦点。从 2009 年到 2019 年,刘谦 10 年间 5 次亮相央视春晚舞台,一句“见证奇迹的时刻”成为刘谦的招牌台词。但从 2019 年在春晚表演《魔壶》之后,刘谦好像销声匿迹了,连续 5 年都与春晚无缘。2024 年 2 月 9 日晚,刘谦终于带着最新魔术节目《守岁共此时》再次亮相春晚,神乎其技的表现让观众直呼不可思议。今天,我将尝试从编程的角度来揭秘刘谦的魔术,通过代码实现来解析其背后的原理。

2024-02-15 15:51:26 6689 66

原创 Filter 实现过滤符合条件的请求并落库

Java过滤器(Filter)在Java Servlet API中是一个非常有用的组件,它允许你在请求到达Servlet或JSP之前或之后执行某些操作。当请求进入系统时进行拦截,如果符合拦截规则就将请求详情落库。SpringCloud 项目,注册中心是 Nacos。请求时间入库自动生成。

2024-02-08 08:30:00 2749 30

原创 三种方式模拟两个线程抢票【最全版】

在多线程编程中,资源竞争是一个常见的问题。资源竞争发生在多个线程试图同时访问或修改共享资源时,可能导致数据不一致或其他并发问题。在模拟两个线程抢票的场景中,我们需要考虑如何公平地分配票,并确保每个线程都有机会成功获取票。本篇文章将通过三种方式来模拟两个线程抢票的过程,以展示不同的并发控制策略。使用 Synchronized 来确保一次只有一个线程可以访问票资源。使用 ReentrantLock 来实现线程间的协调。使用 Semaphore 来限制同时访问票的线程数量。

2024-02-01 08:00:00 3041 33

原创 使用 LinkAi 打造自己的知识库和数字人

随着人工智能技术的不断发展,我们越来越需要一个高效、智能的方式来管理和利用我们的知识。LinkAi 提供的智能语音识别和文本分析技术,可以帮助我们轻松地打造自己的知识库和数字人。LinkAi官网Link.AI是LinkAi(连才)公司的官网,是一个专注于人工智能领域的科技平台。该平台提供了一系列人工智能相关的产品和服务,旨在帮助用户更高效地管理和利用知识,提高工作效率和创造力。Link.AI平台的核心功能包括智能语音识别、智能文本分析、智能推荐系统等。

2024-01-25 17:16:03 3673 39

原创 从 MySQL 的事务 到 锁机制 再到 MVCC

转眼又一年~~2023马上就要到尾声了,在最后的几天中,我想给大家分享一下 MySQL 的一些小知识。在MySQL InnoDB引擎层面,又有新的解决方案 (解决加锁后读写性能问题),叫做MVCC(Multi-Version Concurrency Control)多版本并发控制。在MVCC下,就可以做到读写不阻塞且避免了类似脏读这样的问题。那MVCC是怎么做的呢?MVCC通过生成数据快照 (Snapshot)并用这个快照来提供一定级别 (语句级或事务级)的一致性读取。

2024-01-01 09:30:00 4651 98

原创 【数据结构和算法】种花问题

这是力扣的 605 题,难度为简单,解题方案有很多种,本文讲解我认为最奇妙的一种。假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给你一个整数数组flowerbed表示花坛,由若干0和1组成,其中0表示没种植花,1表示种植了花。另有一个数n,能否在不打破种植规则的情况下种入n朵花?能则返回true,不能则返回false。

2024-01-18 10:49:53 2912 37

原创 【数据结构和算法】反转链表

这是力扣的 206 题,难度为简单,解题方案有很多种,本文讲解我认为最奇妙的一种。继续开始链表的模块了,这道题是一道非常好的队列的例题,很有代表性。给你单链表的头节点head,请你反转链表,并返回反转后的链表。

2024-01-17 10:02:17 1570 33

原创 【数据结构和算法】奇偶链表

这是力扣的 328 题,难度为中等,解题方案有很多种,本文讲解我认为最奇妙的一种。给定单链表的头节点head,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。第一个节点的索引被认为是奇数,第二个节点的索引为偶数,以此类推。请注意,偶数组和奇数组内部的相对顺序应该与输入时保持一致。你必须在O(1)的额外空间复杂度和O(n)的时间复杂度下解决这个问题。

2024-01-16 10:17:34 1515 19

原创 【数据结构和算法】删除链表的中间节点

这是力扣的1657题,难度为中等,解题方案有很多种,本文讲解我认为最奇妙的一种。慢慢开始链表的模块了,这道题是一道非常好的队列的例题,很有代表性。给你一个链表的头节点head。删除链表的中间节点,并返回修改后的链表的头节点head。长度为n链表的中间节点是从头数起第⌊n / 2⌋个节点(下标从0开始),其中⌊x⌋表示小于或等于x的最大整数。对于n=1、2、3、4和5的情况,中间节点的下标分别是0、1、1、2和2。

2024-01-15 10:25:31 1732 36

原创 【数据结构和算法】最近的请求次数

这是力扣的 933 题,难度为简单,解题方案有很多种,本文讲解我认为最奇妙的一种。慢慢开始队列的模块了,这道题是一道非常好的队列的例题,很有代表性。写一个RecentCounter类来计算特定时间范围内最近的请求。请你实现RecentCounter类:RecentCounter()初始化计数器,请求数为 0 。int ping(int t)在时间t添加一个新请求,其中t表示以毫秒为单位的某个时间,并返回过去3000毫秒内发生的所有请求数(包括新请求)

2024-01-12 11:13:46 1800 17

原创 Redis 给集合元素单独设置过期

Redis 是一个开源的、内存中的数据结构存储系统,它可以用作数据库、缓存和消息代理。在 Redis 中,集合(Set)是一种无序的数据类型,用于存储不重复的字符串元素。虽然 Redis 的集合本身不支持为每个元素单独设置过期时间,但你可以通过一些技巧和策略来实现类似的功能。通过合理的数据结构选择和巧妙的应用,我们成功地解决了为 List、Set 和 Hash 结构中的字段设置单独过期时间的问题。这个方案在实际项目中得到了验证,并取得了显著的效果。

2024-01-06 10:00:00 1962 18

原创 【数据结构和算法】字符串解码

这是力扣的 394 题,难度为中等,解题方案有很多种,本文讲解我认为最奇妙的一种。慢慢开始栈的模块了,这道题是一道非常好的栈的例题,很有代表性。给定一个经过编码的字符串,返回它解码后的字符串。编码规则为:k[encoded_string],表示其中方括号内部的encoded_string正好重复k次。注意k保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。

2024-01-05 11:15:04 1414 17

原创 【数据结构和算法】小行星碰撞

这是力扣的 735 题,难度为中等,解题方案有很多种,本文讲解我认为最奇妙的一种。慢慢开始栈的模块了,这道题是一道非常好的栈的例题,很有代表性。给定一个整数数组asteroids,表示在同一行的小行星。对于数组中的每一个元素,其绝对值表示小行星的大小,正负表示小行星的移动方向(正表示向右移动,负表示向左移动)。每一颗小行星以相同的速度移动。找出碰撞后剩下的所有小行星。碰撞规则:两个小行星相互碰撞,较小的小行星会爆炸。如果两颗小行星大小相同,则两颗小行星都会爆炸。两颗移动方向相同的小行星,永远不会发

2024-01-04 11:21:59 1376 20

原创 【数据结构和算法】从字符串中移除星号

这是力扣的 2390 题,难度为中等,解题方案有很多种,本文讲解我认为最奇妙的一种。慢慢开始栈的模块了,这道题是一道非常好的栈的例题,很有代表性。给你一个包含若干星号*的字符串s。在一步操作中,你可以:选中s中的一个星号。移除星号左侧最近的那个非星号字符,并移除该星号自身。返回移除所有星号之后的字符串。

2024-01-03 14:38:55 1248 28

原创 【数据结构和算法】 相等行列对

这是力扣的 2352 题,难度为中等,解题方案有很多种,本文讲解我认为最奇妙的一种。给你一个下标从0开始、大小为n x n的整数矩阵grid,返回满足Ri行和Cj列相等的行列对(Ri, Cj)的数目。如果行和列以相同的顺序包含相同的元素(即相等的数组),则认为二者是相等的。

2024-01-02 11:02:41 1079 6

原创 ECharts与Excel的火花

在数据爆炸的时代,如何有效地呈现和解析数据变得至关重要。ECharts和Excel作为两种广泛使用的数据处理和可视化工具,各自拥有其独特的魅力和功能。本文将深入探讨这两者之间的火花碰撞,以及如何结合它们以实现更强大的数据可视化效果。ECharts与Excel的结合,不仅可以充分发挥两者的优势,还可以实现更强大的数据可视化效果。无论是从数据处理、图表创建还是故事叙述的角度,这种结合都能为数据分析师、业务人员和决策者提供更丰富、更直观的数据洞察。

2023-12-31 09:30:00 1853 10

原创 理解 AQS 和 ReentrantLock

在多线程编程中,同步机制是确保线程安全的关键。AQS(AbstractQueuedSynchronizer)和ReentrantLock是Java中两种常见的同步机制,它们各自具有不同的特性和适用场景。了解和掌握这两种机制对于编写高效、安全的并发程序至关重要。这篇文章将带你取了解和掌握这两种机制!另外值得一提的是:公平锁的实现与非公平锁是很像的,只不过在获取锁时不会直接尝试使用CAS来获取锁。只有当队列没节点并且state为0时才会去获取锁,不然都会把当前线程放到队列中。

2023-12-30 09:30:00 1163 9

原创 【数据结构和算法】独一无二的出现次数

这是力扣的 1207 题,难度为简单,解题方案有很多种,本文讲解我认为最奇妙的一种。给你一个整数数组arr,请你帮忙统计数组中每个数的出现次数。如果每个数的出现次数都是独一无二的,就返回true;否则返回false。

2023-12-29 10:35:39 1275 25

原创 【数据结构和算法】找出两数组的不同

这是力扣的 2215 题,难度为简单,解题方案有很多种,本文讲解我认为最奇妙的一种。给你两个下标从0开始的整数数组nums1和nums2,请你返回一个长度为2的列表answer,其中:answer[0]是nums1中所有不存在于nums2中的不同整数组成的列表。answer[1]是nums2中所有不存在于nums1中的不同整数组成的列表。注意:列表中的整数可以按任意顺序返回。

2023-12-28 11:32:14 1488 22

原创 【数据结构和算法】寻找数组的中心下标

给你一个整数数组nums,请计算数组的中心下标。数组中心下标是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。如果中心下标位于数组最左端,那么左侧数之和视为0,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。如果数组有多个中心下标,应该返回最靠近左边的那一个。如果数组不存在中心下标,返回-1。

2023-12-27 11:01:33 1351 32

原创 【数据结构和算法】找到最高海拔

这是力扣的 1732 题,难度为简单,解题方案有很多种,本文讲解我认为最奇妙的一种。这是一道非常经典的前缀和问题,虽然看似简单,但它却能让你深入理解前缀和的特点。有一个自行车手打算进行一场公路骑行,这条路线总共由n + 1个不同海拔的点组成。自行车手从海拔为0的点0开始骑行。给你一个长度为n的整数数组gain,其中gain[i]是点i和点i + 1的净海拔高度差(0

2023-12-26 10:18:31 1556 42

原创 【数据结构和算法】删掉一个元素以后全为 1 的最长子数组

这是力扣的 1493 题,难度为中等,解题方案有很多种,本文讲解我认为最奇妙的一种。又又又是一道滑动窗口的典型例题,可以帮助我们巩固滑动窗口算法。这道题很活灵活现,需要加深对题意的变相理解。给你一个二进制数组nums,你需要从中删掉一个元素。请你在删掉元素的结果数组中,返回最长的且只包含 1 的非空子数组的长度。如果不存在这样的子数组,请返回 0 。

2023-12-25 11:03:50 1276 23

原创 【设计模式】RBAC 模型详解

随着软件系统的复杂性和规模的不断增长,权限管理成为了一个至关重要的问题。在大型多人协作的系统中,如何有效地管理不同用户的访问权限,确保系统的安全性和稳定性,是每一个开发者都需要面对的挑战。为了解决这一问题,业界提出了一种被广泛应用的权限管理模型——基于角色的访问控制(Role-Based Access Control,简称RBAC)。希望通过本篇博客的学习,您能够深入了解RBAC模型的核心思想和实现原理,掌握如何在实际项目中应用RBAC模型来提高系统的安全性和可维护性。

2023-12-24 09:30:00 1731 31

原创 【设计模式】命令模式

欢迎来到【设计模式】系列博客,今天我们将探讨其中一种重要的设计模式——命令模式。设计模式是软件开发中解决常见问题的最佳实践,而命令模式则是其中一种非常实用的设计模式,它可以帮助我们更好地组织和管理请求或命令。在本篇博客中,我们将详细介绍命令模式的定义、特点、使用场景以及实现方式。通过具体的案例和实践,我们将深入了解命令模式在实际项目中的应用和优势。同时,我们还将分享一些注意事项和最佳实践,以帮助您更好地理解和应用命令模式。

2023-12-23 09:30:00 1669 12

原创 【数据结构和算法】最大连续1的个数 III

这是力扣的 1004 题,难度为中等,解题方案有很多种,本文讲解我认为最奇妙的一种。又是一道滑动窗口的典型例题,可以帮助我们巩固滑动窗口算法。这道题很活灵活现,需要加深对题意的变相理解。给定一个二进制数组nums和一个整数k,如果可以翻转最多k个0,则返回数组中连续1的最大个数。

2023-12-22 15:26:45 2640 43

原创 阿里推荐 LongAdder ,不推荐 AtomicLong !

在分布式系统中,计数器是一个常见的需求。为了实现高并发、高可用的计数器,我们需要选择一个合适的实现方式。在 Java 中,有两种常见的计数器实现方式:AtomicLong 和 LongAdder。最近,阿里巴巴在一份技术报告中推荐使用 LongAdder ,而不是 AtomicLong。本文将介绍这两种计数器的原理和优缺点,并分析为什么阿里巴巴推荐使用 LongAdder。

2023-12-21 11:24:15 1330 21

原创 【数据结构和算法】定长子串中元音的最大数目

这是力扣的 1456 题,难度为中等,解题方案有很多种,本文讲解我认为最奇妙的一种。又是一道滑动窗口的典型例题,可以帮助我们巩固滑动窗口算法。给你字符串s和整数k。请返回字符串s中长度为k的单个子字符串中可能包含的最大元音字母数。英文中的元音字母为(a,e,i,o,u)。

2023-12-21 10:45:34 2319 7

原创 复杂 SQL 实现分组分情况分页查询

在处理数据库查询时,分页是一个常见的需求。尤其是在处理大量数据时,一次性返回所有结果可能会导致性能问题。因此,我们需要使用分页查询来限制返回的结果数量。同时,根据特定的条件筛选数据也是非常常见的需求。在本博客中,我们将探讨如何根据 camp_status 字段分为 6 种情况进行分页查询,并根据 camp_type 字段区分活动类型,返回不同的字段。我们将使用 SQL 变量来实现这一功能,并通过示例进行详细解释。

2023-12-20 15:54:35 2125 23

原创 【数据结构和算法】子数组最大平均数 I

​原题链接:力扣 643 题 子数组最大平均数 I给你一个由n个元素组成的整数数组nums和一个整数k。请你找出平均数最大且长度为k的连续子数组,并输出该最大平均数。任何误差小于10-5的答案都将被视为正确答案。​

2023-12-20 14:52:46 1236 17

原创 【设计模式】策略模式在数据接收和发送场景的应用

在数据接收和发送场景打算使用了if else进行判断。ASystem.sync("向A同步数据");BSystem.sync("向B同步数据");...非常麻烦,需求多了很臃肿!策略模式(Strategy Pattern)定义了一组同类型的算法,在不同的类中封装起来,每种算法可以根据当前场景相互替换,从而使算法的变化独立于使用它们的客户端(即算法的调用者)。// 创建两个策略对象// 创建上下文对象,并传入策略对象。

2023-12-19 10:47:36 1388 25

原创 【数据结构和算法】 K 和数对的最大数目

给你一个整数数组nums和一个整数k。每一步操作中,你需要从数组中选出和为k的两个整数,并将它们移出数组。返回你可以对数组执行的最大操作数。

2023-12-19 10:36:43 1048 16

原创 Java 多线程的基本概念!

在当今的计算机世界中,多线程编程已经成为了一种重要的技术,它能够充分利用多核处理器和多线程硬件的优点,提高程序的执行效率。Java作为一种流行的编程语言,也提供了丰富的多线程编程支持。在Java中,多线程编程涉及到多个概念和机制,包括线程的创建、线程的状态、同步、并发和死锁等。这些概念和机制的学习和理解对于掌握Java多线程编程至关重要。在接下来的文章中,我们将详细介绍Java多线程编程的基本概念和机制,并通过示例代码和案例分析帮助你更好地理解和掌握这些知识。

2023-12-18 10:36:36 1194 19

原创 【数据结构和算法】盛最多水的容器

给定一个长度为n的整数数组height。有n条垂线,第i条线的两个端点是(i, 0)和(i, height[i])。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。说明:你不能倾斜容器。

2023-12-18 10:18:26 1312 4

原创 多线程到底用不用在业务代码上???

在当今的软件开发中,多线程技术是一种常见的优化方式,可以显著提高程序的性能和响应能力。然而,对于业务代码是否应该使用多线程,不同的开发者和专家可能会有不同的看法和经验。在这篇文章中,我们将探讨多线程在业务代码中的应用,并分析其利弊。综上所述,是否在业务代码中使用多线程需要根据具体情况来决定。如果业务系统需要同时处理多个任务,并且每个任务都可以独立地执行,那么使用多线程可以提高系统的性能和响应能力。然而,如果业务逻辑比较简单,或者系统的设计不允许使用多线程,那么使用单线程可能更加简单和安全。

2023-12-17 09:00:00 1045 15

原创 JedisCluster 通过 Pipeline 实现两套数据轮换更新

本文实现了通过定时任务来调用接口,使两套数据轮换更新。因为要区分两套数据,所以 key 要设置前缀。例如:一天数据一换,今天查的 A 开头的 key ,明天查 B 开头的 key ,后天又查 A 开头的 key。今天查完后,明天更新 B 开头的 key ,但是 A 开头的 key 暂时不动,后天再查的时候,A开头的 key 要进行更新,先删再更新。

2023-12-16 09:00:00 1274 15

原创 Java 反射:探索运行时行为的强大工具

在Java编程中,反射是一种强大的工具,它允许我们在运行时检查和修改对象的行为。通过反射,我们可以动态地创建对象,调用方法,访问和修改字段,以及获取类的信息。尽管反射的能力强大,但是它也会带来一些潜在的问题,比如性能问题和对代码安全性的影响。因此,在使用反射时需要谨慎考虑。JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

2023-12-15 11:14:57 1254 14

原创 【数据结构和算法】判断子序列

给定字符串s和t,判断s是否为t的子序列。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。进阶:如果有大量输入的 S,称作 S1, S2, ... , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。在这种情况下,你会怎样改变代码?

2023-12-15 10:58:29 1083 3

原创 如何排查线上问题的?

在当今的互联网时代,线上问题对企业的业务连续性和用户体验产生的影响越来越大。无论是网站崩溃、应用性能下降,还是服务中断,这些问题都可能对企业的声誉和用户满意度造成严重影响。因此,快速、准确地排查并解决线上问题变得至关重要。本文将介绍一些高效的线上问题排查方法,帮助您在面对线上问题时,迅速定位并解决问题。我们将在接下来的内容中详细讨论如何利用日志分析、监控系统、代码审查等手段,以及如何制定有效的应急预案。通过这些策略的实施,您将能够提高线上问题的解决速度,减少对业务的影响,并提高用户满意度。

2023-12-14 11:23:13 1060 4

原创 【数据结构和算法】移动零

给定一个数组nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。请注意,必须在不复制数组的情况下原地对数组进行操作。进阶:你能尽量减少完成的操作次数吗?

2023-12-14 11:00:29 1013 4

原创 慢SQL的治理经验

在当今的数字化时代,数据库已经成为企业不可或缺的核心组件。然而,随着数据量的不断增加和查询的复杂性提高,慢查询成为了数据库性能的瓶颈之一。慢SQL不仅会影响系统的响应速度,还可能导致数据丢失或损坏,给企业带来巨大的损失。因此,慢SQL的治理成为了数据库管理的重要任务之一。本文将分享一些慢SQL的治理经验,包括如何识别、分析和优化慢查询。通过了解慢查询的原因和解决方法,我们可以提高数据库的性能和稳定性,为企业的业务发展提供更好的支持。

2023-12-13 10:58:07 1053 10

空空如也

空空如也

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

TA关注的人

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