Java基础合集
文章平均质量分 95
Java基础合集,各种Java知识分享
绿皮龟
曾获得阿里云专家博主,阿里云乘风问答官,华为云云享专家,CSDN全栈领域新星创作者,支付宝开发者社区优秀创作博主,国家金融比赛二等奖获奖者,省物流比赛二等奖获得者,省电商赛二等奖获得者。
展开
-
揭秘 2024 春晚刘谦魔术——代码还原
随着 2024 年春晚的落幕,刘谦的魔术表演再次成为了人们热议的焦点。从 2009 年到 2019 年,刘谦 10 年间 5 次亮相央视春晚舞台,一句“见证奇迹的时刻”成为刘谦的招牌台词。但从 2019 年在春晚表演《魔壶》之后,刘谦好像销声匿迹了,连续 5 年都与春晚无缘。2024 年 2 月 9 日晚,刘谦终于带着最新魔术节目《守岁共此时》再次亮相春晚,神乎其技的表现让观众直呼不可思议。今天,我将尝试从编程的角度来揭秘刘谦的魔术,通过代码实现来解析其背后的原理。原创 2024-02-15 15:51:26 · 6841 阅读 · 66 评论 -
Filter 实现过滤符合条件的请求并落库
Java过滤器(Filter)在Java Servlet API中是一个非常有用的组件,它允许你在请求到达Servlet或JSP之前或之后执行某些操作。当请求进入系统时进行拦截,如果符合拦截规则就将请求详情落库。SpringCloud 项目,注册中心是 Nacos。请求时间入库自动生成。原创 2024-02-08 08:30:00 · 2827 阅读 · 30 评论 -
三种方式模拟两个线程抢票【最全版】
在多线程编程中,资源竞争是一个常见的问题。资源竞争发生在多个线程试图同时访问或修改共享资源时,可能导致数据不一致或其他并发问题。在模拟两个线程抢票的场景中,我们需要考虑如何公平地分配票,并确保每个线程都有机会成功获取票。本篇文章将通过三种方式来模拟两个线程抢票的过程,以展示不同的并发控制策略。使用 Synchronized 来确保一次只有一个线程可以访问票资源。使用 ReentrantLock 来实现线程间的协调。使用 Semaphore 来限制同时访问票的线程数量。原创 2024-02-01 08:00:00 · 3218 阅读 · 33 评论 -
使用 LinkAi 打造自己的知识库和数字人
随着人工智能技术的不断发展,我们越来越需要一个高效、智能的方式来管理和利用我们的知识。LinkAi 提供的智能语音识别和文本分析技术,可以帮助我们轻松地打造自己的知识库和数字人。LinkAi官网Link.AI是LinkAi(连才)公司的官网,是一个专注于人工智能领域的科技平台。该平台提供了一系列人工智能相关的产品和服务,旨在帮助用户更高效地管理和利用知识,提高工作效率和创造力。Link.AI平台的核心功能包括智能语音识别、智能文本分析、智能推荐系统等。原创 2024-01-25 17:16:03 · 3945 阅读 · 39 评论 -
Redis 给集合元素单独设置过期
Redis 是一个开源的、内存中的数据结构存储系统,它可以用作数据库、缓存和消息代理。在 Redis 中,集合(Set)是一种无序的数据类型,用于存储不重复的字符串元素。虽然 Redis 的集合本身不支持为每个元素单独设置过期时间,但你可以通过一些技巧和策略来实现类似的功能。通过合理的数据结构选择和巧妙的应用,我们成功地解决了为 List、Set 和 Hash 结构中的字段设置单独过期时间的问题。这个方案在实际项目中得到了验证,并取得了显著的效果。原创 2024-01-06 10:00:00 · 2203 阅读 · 18 评论 -
从 MySQL 的事务 到 锁机制 再到 MVCC
转眼又一年~~2023马上就要到尾声了,在最后的几天中,我想给大家分享一下 MySQL 的一些小知识。在MySQL InnoDB引擎层面,又有新的解决方案 (解决加锁后读写性能问题),叫做MVCC(Multi-Version Concurrency Control)多版本并发控制。在MVCC下,就可以做到读写不阻塞且避免了类似脏读这样的问题。那MVCC是怎么做的呢?MVCC通过生成数据快照 (Snapshot)并用这个快照来提供一定级别 (语句级或事务级)的一致性读取。原创 2024-01-01 09:30:00 · 4795 阅读 · 98 评论 -
ECharts与Excel的火花
在数据爆炸的时代,如何有效地呈现和解析数据变得至关重要。ECharts和Excel作为两种广泛使用的数据处理和可视化工具,各自拥有其独特的魅力和功能。本文将深入探讨这两者之间的火花碰撞,以及如何结合它们以实现更强大的数据可视化效果。ECharts与Excel的结合,不仅可以充分发挥两者的优势,还可以实现更强大的数据可视化效果。无论是从数据处理、图表创建还是故事叙述的角度,这种结合都能为数据分析师、业务人员和决策者提供更丰富、更直观的数据洞察。原创 2023-12-31 09:30:00 · 2025 阅读 · 10 评论 -
理解 AQS 和 ReentrantLock
在多线程编程中,同步机制是确保线程安全的关键。AQS(AbstractQueuedSynchronizer)和ReentrantLock是Java中两种常见的同步机制,它们各自具有不同的特性和适用场景。了解和掌握这两种机制对于编写高效、安全的并发程序至关重要。这篇文章将带你取了解和掌握这两种机制!另外值得一提的是:公平锁的实现与非公平锁是很像的,只不过在获取锁时不会直接尝试使用CAS来获取锁。只有当队列没节点并且state为0时才会去获取锁,不然都会把当前线程放到队列中。原创 2023-12-30 09:30:00 · 1229 阅读 · 9 评论 -
【设计模式】RBAC 模型详解
随着软件系统的复杂性和规模的不断增长,权限管理成为了一个至关重要的问题。在大型多人协作的系统中,如何有效地管理不同用户的访问权限,确保系统的安全性和稳定性,是每一个开发者都需要面对的挑战。为了解决这一问题,业界提出了一种被广泛应用的权限管理模型——基于角色的访问控制(Role-Based Access Control,简称RBAC)。希望通过本篇博客的学习,您能够深入了解RBAC模型的核心思想和实现原理,掌握如何在实际项目中应用RBAC模型来提高系统的安全性和可维护性。原创 2023-12-24 09:30:00 · 1944 阅读 · 31 评论 -
【设计模式】命令模式
欢迎来到【设计模式】系列博客,今天我们将探讨其中一种重要的设计模式——命令模式。设计模式是软件开发中解决常见问题的最佳实践,而命令模式则是其中一种非常实用的设计模式,它可以帮助我们更好地组织和管理请求或命令。在本篇博客中,我们将详细介绍命令模式的定义、特点、使用场景以及实现方式。通过具体的案例和实践,我们将深入了解命令模式在实际项目中的应用和优势。同时,我们还将分享一些注意事项和最佳实践,以帮助您更好地理解和应用命令模式。原创 2023-12-23 09:30:00 · 1699 阅读 · 12 评论 -
阿里推荐 LongAdder ,不推荐 AtomicLong !
在分布式系统中,计数器是一个常见的需求。为了实现高并发、高可用的计数器,我们需要选择一个合适的实现方式。在 Java 中,有两种常见的计数器实现方式:AtomicLong 和 LongAdder。最近,阿里巴巴在一份技术报告中推荐使用 LongAdder ,而不是 AtomicLong。本文将介绍这两种计数器的原理和优缺点,并分析为什么阿里巴巴推荐使用 LongAdder。原创 2023-12-21 11:24:15 · 1355 阅读 · 21 评论 -
复杂 SQL 实现分组分情况分页查询
在处理数据库查询时,分页是一个常见的需求。尤其是在处理大量数据时,一次性返回所有结果可能会导致性能问题。因此,我们需要使用分页查询来限制返回的结果数量。同时,根据特定的条件筛选数据也是非常常见的需求。在本博客中,我们将探讨如何根据 camp_status 字段分为 6 种情况进行分页查询,并根据 camp_type 字段区分活动类型,返回不同的字段。我们将使用 SQL 变量来实现这一功能,并通过示例进行详细解释。原创 2023-12-20 15:54:35 · 2204 阅读 · 23 评论 -
【设计模式】策略模式在数据接收和发送场景的应用
在数据接收和发送场景打算使用了if else进行判断。ASystem.sync("向A同步数据");BSystem.sync("向B同步数据");...非常麻烦,需求多了很臃肿!策略模式(Strategy Pattern)定义了一组同类型的算法,在不同的类中封装起来,每种算法可以根据当前场景相互替换,从而使算法的变化独立于使用它们的客户端(即算法的调用者)。// 创建两个策略对象// 创建上下文对象,并传入策略对象。原创 2023-12-19 10:47:36 · 1437 阅读 · 25 评论 -
Java 多线程的基本概念!
在当今的计算机世界中,多线程编程已经成为了一种重要的技术,它能够充分利用多核处理器和多线程硬件的优点,提高程序的执行效率。Java作为一种流行的编程语言,也提供了丰富的多线程编程支持。在Java中,多线程编程涉及到多个概念和机制,包括线程的创建、线程的状态、同步、并发和死锁等。这些概念和机制的学习和理解对于掌握Java多线程编程至关重要。在接下来的文章中,我们将详细介绍Java多线程编程的基本概念和机制,并通过示例代码和案例分析帮助你更好地理解和掌握这些知识。原创 2023-12-18 10:36:36 · 1214 阅读 · 19 评论 -
多线程到底用不用在业务代码上???
在当今的软件开发中,多线程技术是一种常见的优化方式,可以显著提高程序的性能和响应能力。然而,对于业务代码是否应该使用多线程,不同的开发者和专家可能会有不同的看法和经验。在这篇文章中,我们将探讨多线程在业务代码中的应用,并分析其利弊。综上所述,是否在业务代码中使用多线程需要根据具体情况来决定。如果业务系统需要同时处理多个任务,并且每个任务都可以独立地执行,那么使用多线程可以提高系统的性能和响应能力。然而,如果业务逻辑比较简单,或者系统的设计不允许使用多线程,那么使用单线程可能更加简单和安全。原创 2023-12-17 09:00:00 · 1058 阅读 · 15 评论 -
JedisCluster 通过 Pipeline 实现两套数据轮换更新
本文实现了通过定时任务来调用接口,使两套数据轮换更新。因为要区分两套数据,所以 key 要设置前缀。例如:一天数据一换,今天查的 A 开头的 key ,明天查 B 开头的 key ,后天又查 A 开头的 key。今天查完后,明天更新 B 开头的 key ,但是 A 开头的 key 暂时不动,后天再查的时候,A开头的 key 要进行更新,先删再更新。原创 2023-12-16 09:00:00 · 1338 阅读 · 15 评论 -
Java 反射:探索运行时行为的强大工具
在Java编程中,反射是一种强大的工具,它允许我们在运行时检查和修改对象的行为。通过反射,我们可以动态地创建对象,调用方法,访问和修改字段,以及获取类的信息。尽管反射的能力强大,但是它也会带来一些潜在的问题,比如性能问题和对代码安全性的影响。因此,在使用反射时需要谨慎考虑。JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。原创 2023-12-15 11:14:57 · 1343 阅读 · 14 评论 -
如何排查线上问题的?
在当今的互联网时代,线上问题对企业的业务连续性和用户体验产生的影响越来越大。无论是网站崩溃、应用性能下降,还是服务中断,这些问题都可能对企业的声誉和用户满意度造成严重影响。因此,快速、准确地排查并解决线上问题变得至关重要。本文将介绍一些高效的线上问题排查方法,帮助您在面对线上问题时,迅速定位并解决问题。我们将在接下来的内容中详细讨论如何利用日志分析、监控系统、代码审查等手段,以及如何制定有效的应急预案。通过这些策略的实施,您将能够提高线上问题的解决速度,减少对业务的影响,并提高用户满意度。原创 2023-12-14 11:23:13 · 1071 阅读 · 4 评论 -
慢SQL的治理经验
在当今的数字化时代,数据库已经成为企业不可或缺的核心组件。然而,随着数据量的不断增加和查询的复杂性提高,慢查询成为了数据库性能的瓶颈之一。慢SQL不仅会影响系统的响应速度,还可能导致数据丢失或损坏,给企业带来巨大的损失。因此,慢SQL的治理成为了数据库管理的重要任务之一。本文将分享一些慢SQL的治理经验,包括如何识别、分析和优化慢查询。通过了解慢查询的原因和解决方法,我们可以提高数据库的性能和稳定性,为企业的业务发展提供更好的支持。原创 2023-12-13 10:58:07 · 1125 阅读 · 10 评论 -
AOP跨模块捕获异常遭CGLIB拦截而继续向上抛出异常
最近,在开发过程中,我遇到一个不易察觉的小bug。这个bug并没有直接给出报错信息,使得排查问题的根源变得困难。我希望通过分享这个经验,帮助大家避免重蹈覆辙,以免浪费不必要的时间和精力。为了避免类似的困境,我们应当时刻保持警惕,对开发过程中的每一个细节都进行严格的检查。同时,利用调试工具和日志输出等功能,可以帮助我们更快速地定位和解决问题。此外,定期进行代码审查和测试也是非常必要的,这有助于发现潜在的问题并及时解决。原创 2023-12-12 11:27:33 · 1233 阅读 · 8 评论 -
各种奇葩变量名合集
一个好的变量名能让读代码的人(包括写的人),身心舒畅,但一个“奇葩”的变量名可能会逼疯一个程序员。今天是各种各样的奇葩变量名大赏!!!!!!在编程过程中,好的变量命名是非常重要的。一个好的变量名能够清晰地表达变量的含义和作用,从而提高代码的可读性和可维护性。然而,有些时候,由于种种原因,开发者会使用一些非常奇特或者奇葩的变量名。本文将总结一些常见的奇葩变量名,并分析其原因和可能的改进方法。原创 2023-12-11 10:49:55 · 1054 阅读 · 0 评论 -
Blink Tree 比 B+Tree 性能猛多少???
Blink 树和 B+ 树都是一种类似于B树的数据结构,用于在磁盘上存储和索引数据以实现高效查找和操作。它们的主要区别在于内部节点和叶子节点的结构以及指针的使用方式。总的来说,Blink 树的特点是将内部节点和叶子节点合并为一个节点,减少了树的高度;而 B+ 树通过叶子节点之间的有序链表提高了范围查询和顺序遍历的性能。Blink tree 真的牛啊!# 如果键已经存在,更新值else:# 如果根节点已满,进行分裂else:# 如果是叶子节点,直接插入index = 0index += 1。原创 2023-12-08 10:25:00 · 1199 阅读 · 0 评论 -
Redis的数据类型以及如何解决大Key问题
在当今的数字化时代,数据成为了企业竞争力的核心要素之一。而Redis作为一种高效的内存数据结构,因其快速存取和丰富的数据类型特性被广泛应用于各类数据处理场景。在这篇文章中,我们将深入探讨Redis支持的数据类型以及如何解决大Key问题。通过了解Redis的数据类型以及相应的使用场景,我们可以更好地利用Redis的特性来满足各种数据存储需求。同时,对于大Key问题的解决策略,将帮助我们在处理大规模数据时提高性能和效率。让我们一起进入Redis的世界,探索其数据类型和大Key问题的解决方案。原创 2023-12-07 09:46:02 · 1008 阅读 · 0 评论 -
公司新招的实习生犯大错误了!!!
某天中午,公司的产品出现了问题,有人汇报说所有用户都变成了管理员,并且可以享受管理员的权限。然后员工小 A 大叫:“我 X,是我今天执行单元测试更新数据的时候,少加了个 where 条件!本来的预期:update user set userRole = 'admin' where id = 1实际上执行:update user set userRole = 'admin'于是导致整个库里的所有用户都变成了管理员,并且可以享受管理员的权限。原创 2023-12-06 15:54:23 · 915 阅读 · 0 评论 -
对 MyBatis Plus SaveBatch 调优提升25倍性能!!!
最近在压测一批接口,发现接口处理速度慢的有点超出预期,感觉很奇怪,后面定位发现是数据库批量保存这块很慢。这个项目用的是,批量保存直接用的是提供的 saveBatch。于是开始排查之路。所以如果有使用 jdbc 的 Batch 性能方面的需求,要将rewriteBatchedStatements 设置为 true,这样能提高很多性能。然后如果喜欢手动拼接 sql 要注意一次拼接的数量,分批处理。原创 2023-12-05 14:33:25 · 2985 阅读 · 1 评论 -
如何定位当生产环境CPU飙升的时候的问题
在当今的信息化时代,计算机系统在各行各业都发挥着重要的作用。然而,当生产环境中的CPU飙升时,系统性能会受到影响,甚至导致整个系统瘫痪。这不仅会对企业造成经济损失,还会对用户体验造成严重影响。因此,如何定位并解决生产环境中CPU飙升的问题,已成为众多企业和开发人员亟待解决的问题之一。本文旨在探讨如何定位生产环境中CPU飙升的问题,并提供相应的解决方案。通过了解CPU飙升的原因、定位方法以及解决方案,企业和开发人员可以更好地应对生产环境中出现的CPU飙升问题,提高系统性能和用户体验。原创 2023-12-04 16:57:00 · 1377 阅读 · 0 评论 -
软件公司发新版本前会做些什么?
软件开发一般不会上来就是最终版本,而是会一个版本一个版本的迭代。新版本上线前都会经过测试,但就算这样,也不能保证上线了不出问题。所以,在公司里上线新版本代码一般都是通过灰度系统。新版本代码的上线基本都会用灰度系统,可以逐步放量的方式来保证上线过程不会出大问题,也可以用来做产品 AB 实验。我们可以用 nginx 实现这样的功能。nginx 有反向代理的功能,可以转发请求到应用服务器,也叫做网关层。我们可以在这一层根据 cookie 里的 version 字段来决定转发请求到哪个服务。原创 2023-12-02 13:48:28 · 1085 阅读 · 1 评论 -
十种接口安全方案!!!
日常开发中,如何保证接口数据的安全性呢?接口数据安全的保证过程,主要体现在这几个方面:一个就是数据传输过程中的安全,还有就是数据到达服务端,如何识别数据,最后一点就是数据存储的安全性。介绍下保证接口数据安全的10个方案。数据加签:用Hash算法(如MD5,或者SHA-256)把原始请求参数生成报文摘要,然后用私钥对这个摘要进行加密,就得到这个报文对应的数字签名sign(这个过程就是加签通常来说呢,请求方会把数字签名和报文原文一并发送给接收方。验签:接收方拿到原始报文和数字签名(sign)后,用。原创 2023-12-02 13:15:08 · 2011 阅读 · 0 评论 -
免费用的 AI 工具 CodeGeeX ,开发效率翻倍!!!
AI 会淘汰程序员,但只会淘汰不会用 AI 的程序员。AI可以通过学习和分析大量的性能数据,自动寻找性能瓶颈并进行智能调优,加快软件的响应速度,提升用户体验。此外,AI在软件开发需求分析、自动化测试、代码生成、项目管理、持续集成与部署等方面也有应用,可以节省时间和精力,提高开发速度和质量。就分享到这了。所以AI技术在软件开发领域的应用可以造福程序员。AI可以提供更高效的代码自动生成和智能推荐功能,帮助程序员快速编写高质量的代码。这可以减轻程序员的工作负担,提高开发效率。原创 2023-12-01 16:27:15 · 2716 阅读 · 7 评论 -
Linux的dev/vda1文件满了导致MySQL无法写入
今天查看两个月前上线的小项目,发现运行非常慢,而且增删改查失效了(吓我一大跳),急急忙忙的就开始了我的线上问题排查之路。/dev/vda1是 Linux 系统中的一个设备文件,它表示第一个虚拟磁盘(vda)的第一个分区(1)。在大多数 Linux 发行版中,这是系统根分区的默认位置。如果您要对/dev/vda1进行操作(例如挂载、格式化、备份等),则需要具有足够的权限。一般来说,只有 root 用户或具有 sudo 权限的用户才能进行这些操作。当Linux的/dev/vda1。原创 2023-11-30 15:35:28 · 3005 阅读 · 0 评论 -
JD-GUI和JAD对War包和Jar包进行反编译教学
JD-GUI和JAD是两个用于反编译Java字节码的工具。代码调试:当你需要调试Java代码时,可以使用JD-GUI将Java类反编译为可读的源代码,以便进行调试和分析。代码分析:如果你需要对Java类进行深入的分析,例如了解代码结构、方法调用关系等,可以使用JD-GUI来反编译Java类,并查看反编译后的源代码。代码重构:如果你需要修改现有的Java类,可以使用JD-GUI将Java类反编译为可读的源代码,然后进行修改。注意,反编译后的源代码可能不完全与原始源代码相同,因此在进行修改时需要谨慎。原创 2023-11-29 16:34:20 · 5014 阅读 · 0 评论 -
Java源码中经常出现的for (;;) {}:理解无限循环
我们平常都会去阅读Java的源码,经常可以在源码中看到for (;;) {}的结构,本文将带你去理解无限循环。虽然无限循环可以在某些情况下很有用,例如在需要一直监听用户输入或执行某些后台任务的情况下,但它们也可能会导致程序变得不可响应或崩溃。因此,在使用无限循环时需要谨慎,确保有适当的退出条件或逻辑,以避免程序陷入死循环。原创 2023-11-28 14:55:14 · 1494 阅读 · 0 评论 -
Java全局异常处理器实现
Java全局异常处理器是一种处理Java程序中未被捕获的异常和错误的机制。它可以捕获在程序中所有代码块中发生的异常和错误,包括未被try-catch块捕获的异常和错误。通过设置全局异常处理器,可以在程序发生异常或错误时进行特定处理,如记录日志、提供友好的错误信息、发送警报等。全局异常处理器需要实现Thread.UncaughtExceptionHandler接口,并在程序启动时通过Thread.setDefaultUncaughtExceptionHandler()方法设置。原创 2023-11-28 11:35:00 · 1193 阅读 · 1 评论 -
如何与死锁斗争!!!
尽量不要改动线上数据库的字段,因为会触发锁表影响业务,严重时还可能出现死锁!数据库真的出现了死锁,业务全挂了,这种时候应该怎么办呢?本文就给大家分享一下数据库死锁的排查思路,万一出了问题,也有底气去解决。原创 2023-11-27 17:10:30 · 1114 阅读 · 1 评论 -
CountDownLatch和CyclicBarrier源码详解
我现在有个场景:现在我有50个任务,这50个任务在完成之后,才能执行下一个函数,要是你,你怎么设计?可以用JDK给我们提供的线程工具类,CountDownLatch和CyclicBarrier都可以完成这个需求。基于AQS实现,会将构造CountDownLatch的入参传递至statecountDown()就是在利用CAS将state减1,await)实际就是让头节点一直在等待state为0时,释放所有等待的线程。原创 2023-11-27 20:35:09 · 892 阅读 · 1 评论 -
还能这样读ThreadLocal?
ThreadLocal是Java中的一个类,用于创建线程本地变量,即每个线程都有自己的变量副本,互不干扰。它能够提供了线程的局部变量,让每个线程都可以通过set/get来对这个局部变量进行操作。不会和其他线程的局部变量进行冲突,实现了线程的数据隔离。原创 2023-11-26 23:20:34 · 962 阅读 · 0 评论 -
JWT 还能这样的去理解嘛??
JWT (JSON Web Token) 是目前最流行的跨域认证解决方案,是一种基于 Token 的认证授权机制。从 JWT 的全称可以看出,JWT 本身也是 Token,一种规范化之后的。JWT 自身包含了身份验证所需要的所有信息,因此,我们的服务器不需要存储 Session 信息。这显然增加了系统的可用性和伸缩性,大大减轻了服务端的压力。可以看出,。并且, 使用 JWT 认证可以攻击,因为 JWT 一般是存在在中,使用 JWT 进行身份验证的过程中是的。原创 2023-11-24 11:19:31 · 904 阅读 · 0 评论 -
你再不学Git就来不及了!!!
版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。除了项目源代码,你可以对任何类型的文件进行版本控制。原创 2023-11-24 18:02:48 · 1129 阅读 · 0 评论 -
不是吧?线程池这样搞?
学习线程池能够帮助我们更好地处理多线程编程,并提高程序的性能和稳定性。线程池指定线程数这块,首先要考量自己的业务是什么样的?是cpu密集型的还是io密集型的,假设运行应用的机器CPU核心数是N。 cpu密集型的可以先给到N+1,io密集型的可以给到2N 。原创 2023-11-23 21:12:46 · 910 阅读 · 0 评论