自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Cheney的博客

记录学习成长过程!

  • 博客(166)
  • 资源 (5)
  • 收藏
  • 关注

原创 概念辨析(1)

注解表示该函数为事务方法,其中的操作要么全部执行成功或者全部不执行。如果一个所谓的“原子性函数”内部的实现并非真正的原子操作,或者存在其他可能导致线程不安全的因素(如共享了非原子操作的全局变量等),那么它就不是线程安全的。原子操作:原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch 线程切换。原子操作一定具备原子性,是线程安全的。具有原子性的函数或者方法并发一个原子操作不一定具备线程安全性。原子性:事务具有原子性,在一个函数上面加上。

2024-08-05 21:30:21 342

原创 Spring Core——资源加载与访问(Resource)

Resource接口为所有资源类型提供了一个通用的抽象,使得无论资源来自文件系统、类路径还是网络,开发者都可以通过一致的方式进行访问。通过使用这些实现类,开发者可以轻松地从不同来源获取资源,而不必担心底层的实现细节。总之,Resource接口及其实现类为资源访问提供了一种高度抽象和简化的解决方案,是Spring框架中一个非常有用的功能。Spring中将所有的资源抽象成了Resource对象,对于不同的资源类型有着不同的实现类,它为访问底层资源提供了一个统一的抽象,从而使得代码可以独立于实际资源的类型。

2024-07-28 23:56:48 476

原创 Redis 关于内存碎片的解决方法

今天生产机报内存爆满异常被叫过去查看问题,通过各种排除最终定位到了Redis的内存碎片的问题,这篇博客将详细介绍Redis内存碎片问题并给出最佳实践解决此问题。

2024-07-18 21:53:17 1049

原创 映射器代理工厂

我们在使用Mybatis时,只需要写Mapper和Dao接口就行,使用的时候只需要调用Dao中的方法就能完成数据的增删改查。那么Dao中的方法是谁实现的呢?难道Mybatis自动帮我们写了一个Dao的实现类吗?非也!而是使用了映射器代理工厂来实现的。映射器代理工厂(Mapper Proxy Factory)在Mybatis框架中扮演着至关重要的角色。它是用来创建映射器接口的代理对象的工厂类,通过这个工厂类,可以实现对数据库操作的抽象和简化。

2024-07-14 12:55:14 479

原创 设计模式——多例模式(23种之外)

多例模式(Multiton Pattern)是一种特殊的设计模式,它属于创建型模式。与单例模式(Singleton Pattern)相比,多例模式允许一个类有多个实例,但是实例的数量是有限制的,并且这些实例在全局范围内是共享的。这种模式适用于当系统中有且仅有几个对象实例被频繁使用,且这些对象的创建和销毁开销较大时。在我的SpringBoot项目中遇到的一个问题,最后使用多例模式解决了。

2024-07-13 15:24:16 515

原创 RedisTemplate 中序列化方式辨析

在Spring Data Redis中,RedisTemplate 是操作Redis的核心类,它提供了丰富的API来与Redis进行交互。由于Redis是一个键值存储系统,它存储的是字节序列,因此在使用RedisTemplate时,需要指定键(Key)和值(Value)的序列化方式。不同的序列化方式适用于不同的场景。下面将详细介绍几种序列化方法。

2024-07-10 22:28:00 1215

原创 FactoryBean 原理简介

FactoryBean 首先是一个工厂类,它可以生产指定的Bean,特殊之处在于它可以向Spring容器中注册两个Bean,一个是它本身,一个是FactoryBean.getObject()方法返回值所代表的Bean。通过实现 FactoryBean 接口,你可以控制某个 Bean 的实例化过程,提供比默认机制更复杂的创建逻辑。

2024-07-03 23:32:00 841

原创 ImportBeanDefinitionRegistrar 简单原理

ImportBeanDefinitionRegistr动态地向Spring应用上下文中注册额外的。这使得开发者能够在配置阶段根据特定条件或者逻辑动态地添加 Bean,而不是静态地声明所有的 Bean。那么应用场景是什么呢?在SpringBoot中我们定义一个Bean,只需要在类上面注解@Component即可,然后容器就帮我们管理了一个默认的单例Bean。那么,它就是借助来完成的。总结就是,当需要我们根据条件(这个条件可以是判断特定的注解、可以是是否是某个接口的实现等)来注册Bean时,我们可以使用来实现。

2024-07-02 12:32:37 942

原创 BeanFactoryAware 机制简介

BeanFactoryAware 是 Spring 框架中的一个接口,它允许一个 bean 在其初始化时感知到其所在的 BeanFactory。这通常用于在 bean 内部进行一些高级配置或访问 Spring 容器中的其他 bean。

2024-07-01 14:23:25 875

原创 Netty篇章(1)—— 核心原理介绍

Netty是一个Java NIO客户端/服务器框架,是一个为了快速开发可维护的高性能、高可扩展的网络服务器和客户端程序而提供的异步事件驱动基础框架和工具。如果要开发一个网络通信模块,那么Netty是首选,知名的Dubbo、Zookeeper、RocketMQ 网络通信模块全都是Netty实现的,我发现阿里的分布式框架网络通信模块很喜欢使用Netty作为网络通信框架。Netty的目标之一,是使通信开发可以做到“快速和轻松”。

2024-01-22 18:09:44 1047

原创 Java-NIO篇章(5)——Reactor反应器模式

Reactor就是一种网络编程的设计模式,如果不知道Reactor那么学Netty的时候会非常困难,因为很多概念就是Reactor,因此学会了Reactor在学Netty就非常简单。其次,懂得高并发中间件的网络通信设计的底层原理对提升自己的技术也是非常重要的,所以,学习像Netty这样的“精品中的精品”框架,肯定也是需要先从设计模式入手的。而Netty的整体架构,就是基于这个著名反应器模式。

2024-01-21 20:29:37 1365

原创 不同线程之间如何传参?

假设在主线程中的某个对象需要传入到另外一个线程中进行处理,那么两个线程之间如何传递参数?例如:主程序中有个字符串,使用异步子线程进行空格拆分,结果应该输出hello和world。

2024-01-21 20:25:06 709

原创 设计模式篇章(4)——十一种行为型模式

这个设计模式主要思考的是如何分配对象的职责和将对象之间相互协作完成单个对象无法完成的任务,这个与结构型模式有点像,结构型可以理解为静态的组合,例如将不同的组件拼起来成为一个更大的组件;而行为型更是一种动态或者具有某个动作触发的事件,具有一定行为的设计模式。现在不清楚没关系,学完23种设计模式再回头看就能理解了。行为型模式包括:模板方法模式、策略模式、命令模式、职责链模式、状态模式、观察者模式、中介者模式、迭代器模式、访问者模式、备忘录模式、解释器模式共11种。

2024-01-19 14:30:39 1282

原创 Java-NIO篇章(4)——Selector选择器详解

选择器的使命是完成IO的多路复用,其主要工作是通道的注册、监听、事件查询。一个通道代表一条连接通路,通过选择器可以同时监控多个通道的IO(输入输出)状况。选择器和通道的关系,是监控和被监控的关系。 选择器提供了独特的API方法,能够选出(select)所监控的通道已经发生了哪些IO事件,包括读写就绪的IO操作事件。 一般是一个单线程处理一个选择器,一个选择器可以监控很多通道。所以,通过选择器,一个单线程可以处理数百、数千、数万、甚至更多的通道。在极端情况下(数万个连接),只用一个线程就可以处理所有的通道。

2024-01-19 13:25:08 1866 1

原创 Java-NIO篇章(3)——Channel通道类详解

Java NIO中,一个socket连接使用一个Channel(通道)来表示。对应到不同的网络传输协议类型,在Java中都有不同的NIO Channel(通道) 相对应。其中最为重要的四种Channel(通道)实现: FileChannel、 SocketChannel、 ServerSocketChannel、 DatagramChannel。

2024-01-18 14:01:18 1614 1

原创 Java-NIO篇章(2)——Buffer缓冲区详解

Buffer类是一个抽象类,对应于Java的主要数据类型,在NIO中有8种缓冲区类,分别如下: ByteBuffer、 CharBuffer、 DoubleBuffer、 FloatBuffer、 IntBuffer、 LongBuffer、 ShortBuffer、MappedByteBuffer。 本文以它的子类ByteBuffer类为例子讲解。ByteBuffer子类就拥有一个byte[]类型的数组成员final byte[] hb,作为自己的读写缓冲区,数组的元素类型与Buffer子类的操作类型相

2024-01-17 19:17:17 1449

原创 Java-NIO 开篇(1)

高性能的Java通信,离不开Java NIO组件,现在主流的技术框架或中间件服务器,都使用了Java NIO组件,譬如Tomcat、 Jetty、 Netty、Redis、RabbitMQ等的网络通信模块。在1.4版本之前, Java IO类库是阻塞式IO;从1.4版本开始,引进了新的异步IO库,被称为Java New IO类库,简称为Java NIO。 称“老的”阻塞式Java IO为OIO(Old IO)。总体上说, NIO弥补了原来面向流的OIO同步阻塞的不足。

2024-01-17 15:46:46 1295

原创 行为型设计模式——命令模式

将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行存储、传递、调用、增加与管理

2024-01-14 13:06:49 1240

原创 行为型设计模式——中介者模式

中介者模式主要是将关联关系由一个中介者类统一管理维护,一般来说,同事类之间的关系是比较复杂的,多个同事类之间互相关联时,他们之间的关系会呈现为复杂的网状结构,这是一种过度耦合的架构,即不利于类的复用,也不稳定。中介者模式又叫调停模式,定义一个中介角色来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。

2024-01-14 12:23:59 1023

原创 行为型设计模式——备忘录模式

备忘录模式提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定的历史步骤,当新的状态无效或者存在问题时,可以使用暂时存储起来的备忘录将状态复原,很多软件都提供了撤销(Undo)操作,如 Word、记事本、Photoshop、IDEA等软件在编辑时按 Ctrl+Z 组合键时能撤销当前操作,使文档恢复到之前的状态;还有在 浏览器 中的后退键、数据库事务管理中的回滚操作、玩游戏时的中间结果存档功能、数据库与操作系统的备份操作、棋类游戏中的悔棋功能等都属于这类。

2024-01-13 22:49:49 1295

原创 行为型设计模式——迭代器模式

提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示

2024-01-13 22:30:21 1091

原创 行为型设计模式——观察者模式

观察者模式也不难,这个模式用大白话将就是若干个观察者类都订阅一个发布类(被观察者类),当发布者需要发表消息的时候,观察者都能够收到消息。定义:又被称为发布-订阅(`Publish/Subscribe`)模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。

2024-01-12 15:31:29 1021

原创 行为型设计模式——状态模式

状态模式是比较简单的设计模式,它的主要作用是减少代码中大量的 if-else 或者 switch-case 等逻辑判断(俗称屎山)。它将每个状态定义为一个类,而每个状态类有自己对应的方法,因此当需要根据状态执行逻辑代码时不需要写大量的if-else判断是哪个状态然后执行对应的逻辑,而只需要创建某个状态对象,直接调用它对应的方法即可。定义:对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。

2024-01-12 14:42:07 1230

原创 行为型设计模式——责任链模式

又名职责链模式,为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。用大白话讲,就是一个任务,有多个处理类可以进行处理,但是多个处理类只有一个处理类可以处理它,这需要根据这个任务类的本身情况决定,因此需要将这个任务按照处理类的顺序进行处理,我们只需要将这个任务丢给第一个处理类即可返回结果,因为它如果无法处理会自动转交给下一个更强的处理类,一直找到合适的处理类为止,否则返回null。

2024-01-11 20:00:21 1331

原创 行为型设计模式——策略模式

策略模式非常简单,只需要将策略或者某个算法定义成一个类,然后传给需要使用的对象即可。定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。

2024-01-11 19:41:30 1056

原创 行为型设计模式——模板方法模式

在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的实现与具体的环境相关。例如拿泡茶这件事来说,可以分为4个步骤,第一步洗茶具,第二步烧开水,第三步放入茶叶并根据不同的茶叶泡不同的时间,第四步品茶。以上的一二四步都是一样的,只有第三步不一样,因此可以将一二四步具体实现好,即模板方法。第三步则是用户自己需要实现的方法,即抽象方法。

2024-01-10 13:01:33 1179

原创 结构型设计模式——装饰器模式

装饰者模式指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式。就好比一个姑娘化妆,化完妆之后其实还是本人,只不过是多了一些功能,变好看了。因此,初学者可以简单理解成,装饰者模式就是外界传入一个对象(可以是构造方法也可以是set方法传入对象),对这个对象进行一些次要功能增强,然后返回的还是这个对象。这一点和代理模式有点点像,这里先不做区分。我们先来看一个快餐店的例子。

2024-01-09 13:30:42 1196

原创 结构型设计模式——适配器模式

这个更加好理解,就是做适配功能的类,例如,现在手机没有了圆形耳机接口,只有Type-C接口,因此你如果还想要使用圆形耳机的话需要买个圆形接口转Type-C的转换器(适配器),这就是所谓的适配器,将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式分为类适配器模式和对象适配器模式,前者类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少些。

2024-01-09 13:03:10 1253

原创 结构型设计模式——桥接模式

如果一个系统需要在抽象化和具体化之间增加更多的灵活性,避免在两个层次之间建立静态的继承关系,通过桥接模式可以使它们在抽象层建立一个关联关系(参考案例:即视频文件格式对象成为操作系统类的一个成员变量)。“抽象部分”和“实现部分”可以以继承的方式独立扩展而互不影响(参考案例:操作系统和视频文件分别继承自己的父类),在程序运行时可以动态将一个抽象化子类的对象和一个实现化子类的对象进行组合(组合就是视频文件对象成为操作系统对象的一个成员变量或者讲属性),即系统需要对抽象化角色和实现化角色进行动态耦合。

2024-01-08 12:40:49 1176

原创 结构型设计模式——外观模式

外观(Facade)模式是“迪米特法则”的典型应用,还记得这个“迪米特法则”吗?如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。下图中的系统内部是很复杂的,左边这个系统对外的调用关系更是很乱的,内部的不堪直接暴露给观众。而使用外观模式,则可以设置一个门面或者叫做代理对象,统一由这个门面来对外提供简单的、整洁的调用接口。这就是外观模式!

2024-01-08 12:18:34 625

原创 设计模式篇章(3)——七种结构型模式

结构型设计模式主要思考的是如何将对象进行合理的布局来组成一个更大的功能体或者结构体,这个现在讲有点抽象,用大白话讲就是利用现有的对象进行组合或者配合,使得组合后的这个系统更加好。好是相对于不使用设计模式,按照自己的堆屎山的逻辑堆成一个冗余的系统。结构型模式包括:享元模式、外观模式、桥接模式、适配器模式、装饰模式、代理模式、组合模式七种设计模式。接下来,按照从易到难进行介绍!

2024-01-07 18:11:23 574

原创 结构型设计模式——享元模式

享元模式是结构型模式中最简单的一个模式,享是共享的意思,元是最小单元或细小的对象的意思。也就是说对一些需要大量重复使用的很细的对象进行缓存,缓存了就可以重复使用,例如Integer类中对整型-128到127进行了缓存,使用的正是享元模式。它有点类似单例模式,不过单例模式只共享一个类的唯一对象,而享元模式是共享多个类的唯一对象。给出定义如下:运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似对象的开销,从而提高系统资源的利用率。

2024-01-07 18:01:18 1077

原创 设计模式篇章(2)——五种创建者模式

创建者模式主要思考如何创建一个对象,如何将对象的创建与使用分离。一般初级程序员都是new一个对象,然后紧接着使用这个对象,在某些场景中这样子是有问题的,需要使用创建者模式替代的(例如使用单例模式)。设计模式中提供了五种创建模型,分别是单例、原型、工厂方法、抽象工厂方法、创建者五种模式。

2024-01-05 14:29:30 896

原创 Java枚举类全网最易懂讲解

今天有个同学说他没怎么用过枚举类让我给他讲解一下,他说看了这么多博客还是一团雾水。然后我搜了一下,发现都是写的啥呀!我来,如果这篇博客你还听不懂请狂喷我,暴躁老哥立马上线写下此版本,废话少说,下面开始介绍。

2024-01-04 14:34:33 1033

原创 设计模式篇章(1)——理论基础

设计模式:在软件开发中会面临许多不断重复发生的问题,这些问题可能是代码冗余、反复修改旧代码、重写以前的代码、在旧代码上不断堆新的代码(俗称屎山)等难以扩展、不好维护的问题。因此1990年有四位大佬(GoF组合)合作出了一本书,叫做《设计模式:可复用面向对象软件的基础》,它比较完美地解决了在软件工程当中所遇到的上述问题,即给出了如果遇到上述问题的标准答案!

2024-01-03 20:43:08 559

原创 Java异步回调的实现

在Java中,异步回调是一种常见的编程模式,用于处理异步操作和事件驱动的场景。异步回调通常用于处理耗时的任务,以避免阻塞主线程,提高应用程序的性能和响应性。大白话来讲就是方法A调用方法B的一种实现过程,其中方法B是非常耗时的,异步回调机制就是让方法A调用方法B但不阻塞当前线程,且方法B执行完后会自动调用方法A的一个指定的方法(往往在这里就是将结果传回来处理)。

2023-12-26 16:01:22 495

原创 状态模式——状态转换的优化神器

状态模式(State Pattern)是一种行为型设计模式,它允许对象在其内部状态发生变化时改变其行为。状态模式的核心思想是将对象的状态封装成不同的类,并在对象内部维护一个指向当前状态的引用。这使得对象在不同状态下具有不同的行为,而且可以在运行时动态切换状态。其实这有点像策略模式,共同点都是是传入的状态|策略对象来驱动行为。下面给出例子并说明使用状态模式和不使用状态模式实现状态转换功能的区别。

2023-12-06 14:56:03 160

原创 异步任务线程池——最优雅的方式创建异步任务

对于刚刚从校园出来的菜鸡选手很容易写出自以为没问题的屎山代码,可是当上线后就会立即暴露出问题,这说到底还是基础不够扎实!只会背八股文,却不理解,面试头头是道,一旦落地就啥也不是。此处,抛出几个八股文:为什么要使用线程池?使用Executors的工厂类创建的线程池会有什么问题?阿里为什么推荐使用标准构造器创建线程池?使用线程池提交任务submit和execute有啥不一样吗?等等,如果以上的问题你回答不出,那么你距离一个中级软件工程师还有很大差距!我建议系统性学习一下,如果只是想知道答案可以访问我的相关博客。

2023-11-18 16:43:10 269

原创 try-with-resources(TWR)方式关闭流资源

使用传统的方式关闭流资源当然没问题,但是需要写的代码有点多,而是Java 7 之后的新语法糖,旨在减轻开发人员释放try块中使用的资源的压力。一时用TWR方式一时爽,一直用一直爽,但是有些情况也是不能使用这种方式的,但是绝大多数时候是可以使用的,下面进行详细的介绍。

2023-11-17 14:19:44 396

原创 策略模式的应用——应对频繁的需求变更

在工作中,往往我们的需求是多变的,那么如果我们只是简单的硬编码解决暂时的需求,那么当需求进行变更的时候我们的接口就需要变更来应对新的需求。但是有些情况下我们可以写一些通用接口来因对这种变化,即把频繁变化的东西提取出来,交给接口调用者来设计。在这种情况下,我们的接口就无需变化,而当需求变化了只需要重写频繁变化的对象即可。这就是策略模型的一种应用,接下来将用具体的例子来说明这种编码方式的具体实现。

2023-11-15 16:33:12 435

hello-spring-boot-starter

自定义spring boot Starter,请参考博文:https://blog.csdn.net/cj151525/article/details/131366473?spm=1001.2014.3001.5501 Spring Boot starter 我们知道Spring Boot大大简化了项目初始搭建以及开发过程,而这些都是通过Spring Boot提供的starter来完成的。在实际项目中一些基础模块其本质就是starter,所以我们需要对Spring Boot的starter有一个全面深入的了解,这是我们的必备知识。 starter介绍 spring boot 在配置上相比spring要简单许多, 其核心在于spring-boot-starter, 在使用spring boot来搭建一个项目时, 只需要引入官方提供的starter, 就可以直接使用, 免去了各种配置。starter简单来讲就是引入了一些相关依赖和一些初始化的配置。

2023-06-24

cascade.xml

该文件是用了330张正样本,1100左右负样本跑出的xml文件,个人觉得泛化性比较强,负样本与正样本的相似性应该要更大。后面会试验!这个效果总的来说可以识别人脸戴口罩。

2020-03-20

mask_data.zip

这就是一些戴口罩的人脸图片,适合一些小型的数据分析与训练,图片不多,大概500张,需要处理哦。没有积分的朋友留下邮箱给你。谢谢啦

2020-03-20

haarcascades.zip

OpenCv haarcascades xml 文件,包含人脸识别,猫脸识别,微笑识别等等所有OpenCv自带模型。

2020-03-20

未来教育全套考试系统

计算机考试一到四级所有科目全部免费,免安装,近百元的资源只要一个积分,之后全部免费免费

2018-10-06

未来教育考试系统

包括了计算机考试一级,二级,三级,四级全部科目,刷题系统全部破解免费。所有都免费,免安装。价值百元的资源

2018-09-23

空空如也

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

TA关注的人

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