自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 设计模式-工厂模式实战

Spring的BeanFactory和ApplicationContext是工厂模式的实际应用示例,它们用于创建和管理Spring中的Bean对象。抽象工厂模式(Abstract Factory Pattern)进一步抽象了工厂模式,它包括多个工厂接口和多个具体工厂,每个具体工厂负责创建一组相关的产品。工厂模式是一种创建型设计模式,它提供了一种创建对象的接口,但将对象的实际创建委托给具体的子类或实现类。工厂模式是一种对象创建模式,它将对象的创建过程抽象化,并将实际的创建过程推迟到子类或实现类。

2024-01-01 00:00:00 872

原创 设计模式-单例模式实战

这种设计确保了在整个应用程序中只有一个运行时实例,因为 currentRuntime 在类加载时就被创建,并且构造函数是私有的,外部代码无法创建新的实例。这是一种有效的方式,以确保只有一个全局运行时环境,以便执行与运行时环境相关的操作,如执行外部进程、获取系统信息等。然而,在使用单例模式时,应慎重考虑,确保它真正符合应用程序的需求。单例模式是一种创建型设计模式,用于确保一个类只有一个实例,且提供全局访问点以访问该实例。原理:在类加载时,即实例化前,实例变量就已经被分配内存,因此保证了线程安全。

2023-11-22 11:59:29 819

原创 数据结构-深度优先搜索Java实现

深度优先搜索(DFS)是一种在图或树中进行搜索的算法,它沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所有边都已探寻过,搜索将回溯到发现节点v的那条边的起始节点。它的优点在于空间复杂度相对较小,可以处理大规模的数据,同时可以避免搜索冗余的节点。无论采用递归还是非递归方式,深度优先搜索的关键思想是深入到尽可能深的层级,直到无法再深入为止,然后回溯到上一个节点,继续探索。此外,DFS如同数据结构中的栈结构,是一种后进先出的结构,导致了所有的点进入栈时有一个顺序,我们称之为 “DFS序”。

2023-11-22 11:58:10 505

原创 数据结构-线性搜索Java实现

它逐一遍历数据,依次比较每个元素,直到找到目标元素或遍历完整个数据集。虽然它的时间复杂度是O(n),相对于更高效的算法如二分搜索,但线性搜索在小型数据集或无序数据中仍然是一种有用的工具。初始时,我们有一个循环变量 i,通常设置为0,用于遍历数组中的元素。我们还有一个目标元素 target,即要查找的元素。我们将当前遍历到的元素 arr[i] 与目标元素 8 进行比较。如果当前元素不等于目标元素,我们将循环变量 i 递增,移动到下一个元素。如果当前元素不等于目标元素,继续递增循环变量 i,移动到下一个元素。

2023-10-31 16:55:40 166

原创 数据结构-二分查找Java实现

现在,我们计算中间元素的索引。(left + right) / 2 为 (0 + 9) / 2,所以中间元素的索引为 4。由于目标元素在中间元素的右侧,我们将 left 更新为 mid + 1。计算新的中间元素, (left + right) / 2 为 (5 + 9) / 2,中间元素的索引为 7。计算新的中间元素, (left + right) / 2 为 (5 + 6) / 2,中间元素的索引为 5。初始时,我们有两个指针,left 指向数组的起始位置,right 指向数组的结束位置。

2023-10-31 16:53:57 230

原创 MapStruct使用教程(内含代码实战)

有时候,可能需要自定义映射行为,例如处理特定字段的转换或执行复杂逻辑。MapStruct 允许使用@Mapping注解来自定义映射。@Mapper在上面的示例中,我们使用@Mapping注解来指定目标属性和源属性之间的映射关系。这允许在不同属性名的情况下进行映射。MapStruct是一个Java注解处理器库,用于生成对象之间的映射代码。它的主要目的是简化对象之间的转换,特别是在DTO(Data Transfer Object)和领域对象之间进行映射的情况下非常有用。

2023-10-24 01:00:00 950

原创 数据结构-堆排序Java实现

堆排序的核心是构建和维护堆,确保最大(或最小)元素位于根节点,然后将根节点与数组末尾的元素交换,并逐渐减小堆的大小。在最大堆中,根节点的值是最大的,而在最小堆中,根节点的值是最小的。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。第一步是将这个数组构建成一个最大堆,确保堆的性质:每个父节点的值都大于或等于其子节点的值。堆化过程:从根节点开始,比较它与其子节点的值,如果子节点的值更大,则交换它们,然后继续堆化子节点。减小堆的大小,排除最后一个元素。

2023-10-19 10:30:34 802

原创 数据结构-归并排序Java实现

归并排序是一种建立在归并操作上的有效、稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。归并排序将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。

2023-10-18 10:23:02 946

原创 数据结构-快速排序Java实现

快速排序的核心思想是选择一个基准元素,将数组分为两个子数组:一个包含所有小于基准的元素,一个包含所有大于基准的元素。在分区步骤中,我们将数组中的元素重新排列,将小于基准的元素移到基准的左边,将大于基准的元素移到基准的右边,基准元素本身位于中间。在这个例子中,左边的子数组 [11, 12, 22, 25, 34] 与右边的子数组 [90] 合并成了整个已排序的数组。在快速排序的第一步,我们需要选择一个基准元素。我们从数组的左边和右边分别开始,分别找到一个比基准元素大的元素和一个比基准元素小的元素。

2023-10-18 10:16:07 328

原创 数据结构-插入排序Java实现

插入排序是一种基本的比较排序算法,其核心思想是将数组分为已排序和未排序两部分,然后逐个将未排序的元素插入到已排序部分的适当位置。插入排序的时间复杂度为O(n^2),适用于小型数据集或接近有序的数据。它首先定义了一个包含整数数组的示例,然后调用 insertionSort 方法来对数组进行排序。insertionSort 方法通过将未排序部分的元素插入已排序部分的适当位置来实现插入排序。插入排序的关键思想是在未排序部分中选择元素,然后将其插入到已排序部分的适当位置,以构建有序数组。

2023-10-17 10:13:24 490 2

原创 数据结构-选择排序Java实现

选择排序的关键思想是不断选择未排序部分中的最小元素,并将其放在已排序部分的末尾。虽然选择排序不是最高效的排序算法,但它是一种简单而直观的算法,适用于小型数据集或用于教育目的。选择排序是一种基本的比较排序算法,其思想非常直观:它从未排序的元素中选择最小的元素,然后将其放到已排序的部分的末尾。它首先定义了一个包含整数数组的示例,然后调用 selectionSort 方法来对数组进行排序。selectionSort 方法通过找到未排序部分的最小元素,并与未排序部分的第一个元素交换位置来实现选择排序。

2023-10-17 09:51:53 449 2

原创 数据结构-冒泡排序Java实现

在每一轮循环结束后,检查是否发生了交换,如果没有交换发生,表示数组已经排序好,可以提前退出循环。冒泡排序是一种基础的比较排序算法,它的思想很简单:重复地遍历待排序的元素列表,比较相邻元素,如果它们的顺序不正确,则交换它们。该算法采用嵌套的for循环,外层循环用于遍历整个数组,内层循环用于比较相邻的元素并进行交换,直到整个数组都被排序完成。冒泡排序算法会在每一轮中将一个最大的元素 “冒泡” 到数组的末尾,这就是为什么它被称为冒泡排序。算法不断重复这个过程,直到没有需要交换的元素,这时数组已经排好序。

2023-10-16 15:56:19 1207 1

原创 为什么大厂都不推荐使用@Autowired注解

是什么原因导致大厂不推荐这种做法呢?这种依赖注入方式有什么弊端呢?

2023-10-16 15:43:44 825

原创 分布式主键算法

简单高效:雪花算法是一种相对简单且高效的算法,易于实现。全局唯一:生成的ID在分布式环境中是全局唯一的。有序性:ID的生成是有序的,有助于提高数据库索引性能。雪花算法(Snowflake Algorithm)是一种用于分布式系统中生成唯一标识符的算法,由Twitter开发。它通过将一个64位的整数ID分为不同的部分,确保在分布式环境中生成的ID不会重复。本文将详细介绍雪花算法的工作原理和结构。雪花算法是一种可靠且高效的分布式主键生成算法,已在实际生产中得到广泛应用。

2023-10-01 13:20:43 954 2

原创 Linux用户、用户组和文件权限的管理与实践

本文将通过详细的实战举例,对Linux用户、用户组和文件权限的所有操作进行深入探讨,旨在帮助读者熟练掌握相关工具和方法,更好地管理Linux系统。因此,用户组的提出,极大简化了Linux管理用户的难度,使得Linux对用户的管理以及权限划分更加容易便捷。2.允许一个预先指定的用户组中的用户访问:这种权限设置可以控制一组特定的用户对文件或目录的访问权限。要设置ACL,可以使用。

2023-10-01 13:10:03 560

原创 Oracle锁表处理、表空间使用率查询

兜兜转转,记得刚毕业的时候,使用得是oracle数据库,后来转战mysql,postgres等开源数据库。这不现在又用起了国产数据库和oracle。最近遇到了一些小问题,在处理过程中简单的记个笔记,方便日后查询。

2023-10-01 00:15:00 245

原创 Excel处理利器之openpyxl(内含实战代码)

最近工作中接触excel比较多,很多重复性的工作搞得我非常不爽,于是想先学习一下excel处理,方便在后面的工作中用脚本取代手工处理,这样又可以多出几个小时用来摸鱼。🤩🤩🤩至于为什么要用python去处理而不是java,说实话python写起来确实要比java简洁很多,说到底还是为了省事,哈哈哈哈哈。我们简单说一下python能处理excel的三方类库,通过下面表格可以看出各个类库适配的不同内容。根据我的需求,我选择了opepyxl。

2023-09-30 03:45:00 213

原创 求求你们别学了,已经追不上了,JDK21已经发布了

2023/06/08 Rampdown Phase One (fork from main line)2023/07/20 Rampdown Phase Two2023/08/10 Initial Release Candidate2023/08/24 Final Release Candidate2023/09/19 General Availability

2023-09-27 12:32:10 436

原创 Intellij IDEA 运行报错 Command line is too long.shorten command line for xxx or also for Spring boot

如果不缩短的话,那么JVM启动命令有可能因为classpath太长导致超过了操作系统的允许的最长命令参数长度,从而导致启动失败。所以这里有3种方式可以来缩短classpath的长度,进而缩短JVM启动的参数。直接修改Shorten command line,将其设置为Jar mainfest 或者classpath file点击apply即可。有同学说,我这个配置界面没有Shorten command line怎么办?后选择Shorten command line就会显示在配置界面,如下图。

2023-09-27 12:23:28 1472

原创 C++从入门到精通

C++是一门功能丰富且灵活的编程语言,适用于各种应用领域,包括系统编程、游戏开发、嵌入式系统和科学计算等。它的多样化特性使得开发者可以根据项目需求选择合适的编程风格和技术。GitHub上有许多适合新手学习的C++开源项目,这些项目的代码质量通常较高,并且具有教育性质。

2023-09-26 16:49:20 979

原创 我从未结束的Java之旅(二)

从团队组建初期开始,人员的扩张意味着你任务量的增大,这一变化打破了之前5人团队建立的平衡,小团队好管理的原因在于任务数量有限,当一个人能力足够强的时候可以力挽狂澜。任务数量由量变产生质变的时候,个人能力就显得十分有限。这时我意识到前期的平均分配确实存在一定的管理失职。

2023-09-14 12:39:54 198

原创 Java解析cron表达式实战

在我们实际开发中多数会在一些定时任务中试用表达式来控制任务的执行时间、频率等。有时候在围绕任务调度进行开发的时候,是需要通过解析表达式来获取一些信息,例如需要获取表达式得下一次执行时间,或者让用户在界面上设置时间,我们来生成cron表达式。那么如何来实现这些需求,这里我推荐cron-utils.

2023-03-28 16:45:34 1164 1

原创 基于token的身份认证及自动续期的解决方案

B/S架构大家应该都不陌生,web1.0时代,用户通过个人电脑浏览网站,单项获取信息,比如我们浏览新闻,查阅资料等。web2.0很快就到来,和1.0相比,用户可以随时随地分享自己的信息。这个时候就涉及到了我们的身份认证。当我们使用http无状态请求访问资源服务的时候,服务端是如何知道我们的身份的,我们今天就来聊一聊。💬💬💬💬💬💬。

2023-03-28 16:42:43 2502

原创 CentOS下安装crontab及cron表达式解析

实战加示例

2023-03-28 16:42:35 3085

原创 Jwt简介

技术文档这种东西,我一直认为是啃最原始的比较好,如果你去查阅别人翻译过的东西,那么势必会增加一层他人对原文的理解。像当年苦背面试题的时候,读了一篇关于内存模型的,我傻傻分不清jvm内存模型和java内存模型,一直认为这是一个东西,概念混淆,导致面试的时候闹了不少笑话。因此,现在在学习新的技术时,我会优先看原始文档。所以,本篇内容,我仅对原文做简单解释,原文地址见文尾。原文是英文文档,但是通俗易懂,请大家自行理解。

2023-03-09 10:55:05 663

原创 TypeError: ‘module‘ object is not callable python报错解决及问题分析

不仅如此,当需要使用模块中的成员时,需用该模块名(或别名)作为前缀,否则 Python 解释器会报错。这里总不会调用错误,想到了import这块,是不是在引入的时候出了问题,毕竟咱python是半路出家,面相谷歌编程人员。Python 提供了强大的模块支持,主要体现在,不仅 Python 标准库中包含了大量的模块(称为标准模块),还有大量的第三方模块,开发者自己也可以开发自定义模块。模块,英文为 Modules,至于模块到底是什么,可以用一句话总结:模块就是 Python 程序。,我们看下代码示例直接。

2023-02-16 11:50:53 2444

原创 Semaphore实战场景分析(附源码)

简单来说: 1.Semaphore通过初始化维护了一组凭证,通过acquire()获取凭证否则会阻塞,执行完动作后,通过release()释放手中的凭证供下一个工作线程使用。 2.Semaphore通常用于限制可以访问某些资源的线程数。 3.Semaphore是一个计数器,并且计数可以重复使用,获取凭证释放凭证。

2023-02-08 16:11:28 1258 1

原创 一文讲透单点登录架构思想(SSO)

单点登录(SingleSignOn,SSO),就是通过用户的一次性鉴别登录。当用户在身份认证服务器上登录一次以后,即可获得访问单点登录系统中其他关联系统和应用软件的权限,同时这种实现是不需要管理员对用户的登录状态或其他信息进行修改的,这意味着在多个应用系统中,用户只需一次登录就可以访问所有相互信任的应用系统。这种方式减少了由登录产生的时间消耗,辅助了用户管理,是比较流行的。摘自百度百科。

2023-01-19 18:29:35 3986 6

原创 MPP数据库简介及架构分析

MPP (Massively Parallel Processing),即大规模并行处理。简单来说,MPP是将任务并行的分散到多个服务器和节点上,在每个节点上计算完成后,将各自部分的结果汇总在一起得到最终的结果(与Hadoop相似)。MPP数据库是一款 Shared Nothing架构的分布式并行结构化数据库集群,具备高性能、高可用、高扩展特性,可以为超大规模数据管理提供高性价比的通用计算平台,并广泛地用于支撑各类数据仓库系统、BI 系统和决策支持系统。

2023-01-16 11:22:29 14809

原创 Python之虚拟环境venv实战详解

1.避免系统污染2.隔离依赖环境3.回避依赖冲突

2022-10-24 11:43:55 17482

原创 Java8~19新特性(附官网传送门)

文章末尾附Java各版本官方汇总传送门

2022-10-05 13:34:29 2428

原创 CountDownLatch、CyclicBarrier实战场景分析(附代码)

CountDownLatch、CyclicBarrier并发工具,实战理解,单一实战示例,混合实战示例,带你一次搞懂

2022-09-21 19:05:10 885 2

原创 Springboot之邮件发送(内附源码)

springboot邮件服务,内附源码及实战步骤。

2022-09-03 22:30:04 3695 8

原创 ThreadLocal源码解析及使用场景

ThreadLocal类用来提供线程内部的副本变量。这种变量在多线程环境下访问(通过get和set方法访问)时能保证各个线程的变量相对独立于其他线程内的变量。ThreadLocal实例通常来说都是private static类型的,用于关联线程和线程上下文。...

2022-08-02 17:38:32 890

原创 shiro.crypto.CryptoException: Unable to correctly extract the Initialization Vector or ciphertext

org.apache.shiro.crypto.CryptoException: Unable to correctly extract the Initialization Vector or ciphertext.

2022-07-28 10:26:58 6591

原创 Springboot接收请求参数的几种常用方式

@PathVariable、@RequestParam、@RequestBody、@RequestHeader、HttpServletRequest

2022-06-30 13:38:13 4650

原创 oh my zsh安装及插件安装

oh my zsh

2022-06-08 22:57:20 1880

原创 Error: Can‘t find Python executable “python“, you can set the PYTHON env variable.解决办法

Error: Can‘t find Python executable “python“, you can set the PYTHON env variablenode-saas 安装失败导致编译不成功node-saas 更换安装镜像源

2022-06-08 22:23:04 40131 15

原创 Mysql递归查询之GROUP_CONCAT限制返回长度跳坑指南

mysql递归查询,group_concat返回长度限制

2022-06-01 18:16:08 2080 6

原创 Mysql取消外键索引约束

概念外键是相对主键而来的。主键(primary key) 能够唯一标识表中某一行的属性或属性组。一个表只能有一个主键,但可以有多个候选索引。主键常常与外键构成参照完整性约束,防止出现数据不一致。主键可以保证记录的唯一和主键域非空,数据库管理系统对于主键自动生成唯一索引,所以主键也是一个特殊的索引。外键(foreign key) 是用于建立和加强两个表数据之间的链接的一列或多列。外键表示一个表中的一个字段被另一个表中的一个字段引用。外键对相关表中的数据造成了限制,使MySQL能够保持参照完整性。

2022-05-26 10:37:36 2577

空空如也

空空如也

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

TA关注的人

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