自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

流浪猫

流浪猫

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

原创 设计模式(四)、策略模式

策略模式定义了一系列算法或策略,并将每个算法封装在独立的类中,使得它们可以互相替换。通过使用策略模式,可以在运行时根据需要选择不同的算法,而不需要修改客户端代码。策略模式通过将算法与使用算法的代码解耦,提供了一种动态选择不同算法的方法。客户端代码不需要知道具体的算法细节,而是通过调用环境类来使用所选择的策略。环境(Context):维护一个对策略对象的引用,负责将客户端请求委派给具体的策略对象执行。环境类可以通过依赖注入、简单工厂等方式来获取具体策略对象。

2024-04-29 11:46:48 1052

原创 设计模式(三)、模板方法设计模式

模板方法模式(Template Method Pattern):定义一个操作中算法的框架而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤模式结构模板方法模式包含如下角色:AbstractClass: 抽象类ConcreteClass:具体子类模式分析模板方法(Template Method)基本方法(Primitive Method)抽象方法(Abstract Method)具体方法(Concrete Method)

2024-04-29 10:42:02 739 2

原创 贪心算法入门

贪心算法(Greedy Algorithm)是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法。也就是首先选取局部最优,从局部最优推出全局最优。举例有一堆不同面额的钞票,要从中取十次,要求最后的总金额最大。我们当然是每次都去取最大面额的钞票,最终的总金额才是最大。特点贪心算法的题目有两种极端:第一种是比较简单的,这一种在解答时候会觉得就是常识,怎么还需要算法呢。第二种就是复杂类的。在此说明的原因是希望各位不要轻视贪心算法,这个算法没有那么简单。

2024-03-22 10:18:13 658 1

原创 设计模式(二)、工厂模式-工厂方法和抽象工厂的区别

工厂方法模式: 一个抽象产品类,可以派生出多个具体产品类。一个抽象工厂类,可以派生出多个具体工厂类。抽象工厂模式: 多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。一个抽象工厂类,可以派生出多个具体工厂类。工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。一个抽象工厂类,可以派生出多个具体工厂类。

2023-07-10 20:46:40 661

转载 设计模式(二)、工厂模式-抽象工厂模式

● ConcreteFactory(具体工厂):它实现了在抽象工厂中声明的创建产品的方法,生成一组具体产品,这些产品构成了一个产品族,每一个产品都位于某个产品等级结构中。与工厂方法模式相比,抽象工厂模式中的具体工厂不只是创建一种产品,它负责创建一族产品。● ConcreteProduct(具体产品):它定义具体工厂生产的具体产品对象,实现抽象产品接口中声明的业务方法。● AbstractProduct(抽象产品):它为每种产品声明接口,在抽象产品中声明了产品所具有的业务方法。

2023-07-10 20:41:47 150

原创 设计模式(二)、工厂模式--工厂方法模式

抽象工厂(抽象类或接口)不在负责具体的创建过程,即具体的代码实现。只制定了规范,具体的实现将由具体的工厂去实现。在这个模式中,工厂类和产品类往往可以依次对应。即一个抽象工厂对应一个抽象产品,一个具体工厂对应一个具体产品,这个具体的工厂就负责生产对应的产品。工厂方法模式是一种常用的创建型设计模式。它解决了简单工厂模式的问题:如违反了开闭原则,其次可以用于更复杂的结构。它的核心结构有四个角色抽象工厂;

2023-07-10 20:22:19 598

原创 设计模式(二)、工厂模式--简单工厂模式

简单工厂模式的示例

2023-07-10 20:07:37 493

原创 plsql 连接远程数据库出现listener does not currently know of service

在网上搜索了一圈说让我加上tnsnames.ora文件,添加配置信息。但是也没有成功,还是出现这个问题。而且我之前用plsql连接远程数据库的时候也没加过这个配置信息。项目中使用的是Oracle数据库,之前一直使用的是dbeaver来连接的。想着用PLSQL来连接。有没有哪位大神能说下为啥。

2023-05-18 17:21:19 155

转载 Java的文件删除

Java的文件删除代码

2023-04-24 15:55:54 76

原创 文件下载并压缩为zip格式

Java文件下载并压缩为zip格式

2023-04-24 15:48:54 146

转载 【Mybatis-plus】updateById()方法不能更新字段为null的原因及解决办法

找到一篇写的比较好的,就不想自己整理了,以下是原文链接。

2023-04-04 11:08:01 347

原创 文件上传--单个或多个文件上传

如果出现以上错误,请在pom.xml中引入。

2023-04-04 11:03:18 2574

原创 ORA-01791: 不是 SELECTed 表达式

在使用distinct和order by时,查询的字段也应该有order by 的字段。根据表中某一个字段去重,使用了distinct,同时按照时间排序。

2023-03-19 17:49:33 147

原创 Docker私有仓库

Docker私有仓库

2022-09-26 10:08:31 578

原创 Dockerfile

Dockfile

2022-09-26 10:06:50 1064

原创 Docker常用命令

docker常用命令

2022-09-26 09:43:58 1670

原创 Docker组件

Docker初步了解

2022-09-26 09:37:21 1234

原创 java: Compilation failed: internal java compiler error

Java编译失败

2022-09-05 10:13:19 89962 17

原创 设计模式分类

创建型模式:用于描述如何创建对象,它的主要特点是将对象的创建和使用分离。属于该类的模式有5种:单例,原型,工厂方法,抽象工厂,建造者结构型模式用于描述如何将类或对象按某种布局组成更大的结构。属于该类的模式有7种:代理,适配器,桥接,装饰,外观,享元,组合行为型模式:用于描述类或者对象之间怎样相互协作共同完成单个对象无法完成的任务,以及怎样分配指责。属于该类的模式有11种:策略,命令,职责链,状态,观察者,中介者,迭代器,访问者,备忘录,解释器...

2022-04-21 10:44:16 186

原创 Java的类加载

Java虚拟机类加载机制虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的 Java 类型,这就是虚拟机的类加载机制。在Java语言,类型的加载、连接和初始化过程都是在程序运行期间完成的类加载的过程类的个生命周期如下图:为支持运行时绑定,解析过程在某些情况下可在初始化之后再开始,除解析过程外的其他加载过程必须按照如图顺序开始。加载通过全限定类名来获取定义此类的二进制字节流。ClassLoader.

2022-03-06 10:51:50 346

原创 十一、reids6.0新功能

1、ACL简介ACL是Access Control List(访问控制列表)的缩写,该功能允许根据可以执行的命令和可以访问的键来限制某些链接在redis5之前,redis的安全规则只能密码控制,或者通过renmame来调整高危命令,如:flushdb,keys*,shutdown等。redis6提供了ACL的功能对用户进行更细粒度的权限控制:1)接入权限:用户名和密码2)可以执行的命令3)可以操作的key命令 acl list:展示用户权限列表ac...

2022-03-02 15:01:16 665

原创 十、redis的分布式锁

分布式锁是为了解决在单机部署的情况下控制所策略失效,而Java API不能提供分布式锁的能力锁产生的,这就需要一种跨jvm的互斥机制来控制共享资源的访问。分布式锁主流的实现方案:基于数据库实现 基于缓存(redis等) 基于zookeeper1、使用redis实现redis的命令:setnxset key NX PX 100EX second:设置过期时间为second秒,set key value EX second 效果等同于setex key second val

2022-03-02 14:49:29 209

原创 九、redis的删除机制

redis是采用定期删除+惰性删除策略一)redis有三种不同的删除机制redis数据库键的过期时间都保存在过期字典中,根据系统时间和存活时间判断是否过期。  1,定时删除:实现方式,创建定时器  2,惰性删除:每次获取键时,检查是否过期  3,定期删除:每隔一段时间,对数据库进行一次检查,删除过期键,由算法决定删除多少过期键和检查多少数据库二) 优缺点  1,定时删除,对内存友好,但是对cpu很不友好(因为单线程)定时删除,用一个定时器来负责监视key,当这个key过期

2022-03-02 14:46:09 1992

原创 八、redis缓存问题和解决方案

1、redis缓存穿透概念缓存穿透的概念很简单,用户想要查询一个数据,发现redis内存数据库没有,也就是缓存没有命中,于是向持久层数据库查询。发现也没有,于是本次查询失败。当用户很多的时候,缓存都没有命中,于是都去请求了持久层数据库。这会给持久层数据库造成很大的压力,这时候就相当于出现了缓存穿透。解决方法1、布隆过滤器:将数据库中所有的查询条件,放入布隆过滤器中,当一个查询请求过来时,先经过布隆过滤器进行查,如果判断请求查询值存在, 则继续查;如果判断请求查询不存在,直接丢弃。

2022-03-01 12:34:38 477

原创 七、哨兵(Sentinel)模式

主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用。这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式。一、哨兵模式概述哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。这里的哨兵有两个作用通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服.

2022-03-01 12:01:25 7998

原创 六、redis的主从复制

主机数据更新后根据配置和策略,自动同步到备机的master/slave机制,master以写为主,slave以读为主,两者数据相同。1、复制原理从服务器启动成功连接到主服务器后会发送一个sync(2.8版本后时psync)命令(同步请求) 主服务器接到命令启动后台的存盘过程,同时收集修改数据集命令,在后台执行完成后。master将传送整个rdb文件到从服务器 全量复制:slave服务在接收到文件数据后,将其存盘并加载到内存中 增量复制:master继续将新收集到的所有修改命令依次给slave完

2022-03-01 11:24:40 54

原创 五、reids持久化

redis是一个支持持久化的内存数据库,通过持久化机制把内存中的数据同步到硬盘文件来保证数据持久化。当redis重启后通过把硬盘文件重新加载到内存的方式来回复数据。RDB是redis默认的持久化方式,按照一定的时间周期策略把内存中的数据以快照的方式保存到硬盘的二进制文件AOF:redis会将每一个收到的写命令都通过write函数追加到文件最后,当redis重启是会通过执行文件中保存的写命令来在内存中重建整个数据库的内容。当两种方式同时开启时,redis会优先选择AOF来恢复如果只开启AOF.

2022-03-01 11:18:57 71

原创 四、Redis的事务

1、Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化,按顺序地执行。事务在执行过程中,不会被其他客户端发送来的命令请求打断。redis事务的主要做用就是串联多个命令防止别的命令插队。2、Multi Exec discard从输入Multi命令开始,输入的命令都会一次进入命令列队中,但不会执行,直到输入Exec后,Redis会将之前的命令列队中的命令依次执行。组队的过程中可以通过discard来放弃执行Multi:开启事务,进入组队阶段,该阶段命令还未执行E

2022-03-01 11:09:28 70

原创 三、redis中的新数据类型

1、Bitmaps1)Redis提供了这个数据类型可以实现对位的操作:Bitmaps本身不是一种数据类型,实际上就是字符串(key-value),但是它可以对字符串的位进行操作 Bitmaps单独提供了一套命令,所以在redis中使用Bitmaps和使用字符串的方法不太相同。可以把Bitmaps想象成一个以位为单位的数组,数组的每个单元只能存储0和1,数组的下标在Bitmaps中叫做偏移量。2)命令设置值setbit key offset value获取值getbit key o

2022-03-01 10:32:08 643

原创 二、Redis的发布和订阅(暂无具体实现细节)

Redis发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息redis的发布订阅机制包括三个部分:发布者,订阅者和channel其中:发布者和订阅者都是redis客户端,channel是redis服务端。发布订阅命令行实现:1、打开客户端订阅channel1SUBSCRIBE channel12、打开另一个客户端,给channel1发布消息hellopublish channel1 hello...

2022-03-01 10:27:06 409

原创 一、redis的常用五个数据类型

String: 一般做一些复杂的计数功能的缓存List: 做简单的消息队列的功能Hash: 单点登录Set: 做全局去重的功能SortedSet: 做排行榜应用,取TopN操作;延时任务;做范围查找1、StringString的数据结构为简单动态字符串(Simple Dynamic String,缩写SDS),是可以修改的字符串。内部结构实现类似Java的ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配。如图所示,内部为当前字符串实际分配的空...

2022-02-28 17:53:11 416

原创 二、消息的存储

RocketMQ的消息存储在本地文件系统中,这些相关文件默认在当前用户主目录下的store目录中。store目录中主要有以下文件夹:commitLog:存放commitlog文件,消息是写在commitlog文件中的 checkpoint:存储commitLog,consumequeue,index文件的最后刷盘时间戳 abort:该文件在broker启动后会自动创建,正常关闭broker,该文件会自动消失。如若在没有启动broker的情况下发现该文件存在,说明之前的broker关闭是非正常关闭的

2022-02-25 16:55:22 529

原创 一、消息的生产

消息的生产过程Producer将消息写入到broker的某个Queue中,经历了一下几个过程:Producer发出消息之前,会先向NameServer发出获取Topic的路由消息请求 NameServer返回该Topic的路由表及broker列表 Producer根据代码中指定的Queue选择策略,从Queue列表中选出一个队列,用于后续存储消息 Producer对消息做一些特殊处理,例如:消息本身超过4M,则对其进行压缩 Producer向选择出的Queue所在的broker发出RPC请求

2022-02-25 13:54:44 98

原创 RocketMQ的集群搭建

1、数据复制和刷盘策略数据复制复制策略是Broker的Master和Slave之间的数据同步方式,分为同步复制和异步复制同步复制:消息写入master后,master会等待slave同步数据成功后才向producer返回成功ACK 异步复制:消息写入master后,master会立即向producer返回成功ACK,不会等待slave同步数据成功刷盘策略刷盘策略是指消息发送到broker内存后消息持久化到磁盘的方式(也叫做落盘),分为同步刷盘和异步刷盘同步刷盘:当消息持.

2022-02-24 17:30:14 391

原创 RocketMQ的工作流程(简略版)

工作流程:1、启动NameServer,NameServer启动后开始监听端口,等待broker,producer,consumer连接2、启动broker时,broker会和所有的NameServer建立并保持长链接,然后每隔30s向NameServer定时发送心跳包3、发送消息前,可以先创建Topic,创建Topic时需要指定该topic要存储在哪些broker上,同时也会将topic和broker的关系写入到NameServer,不过这步并不...

2022-02-24 16:14:28 3043

原创 RocketMQ的各个角色

broker broker面向producer和consumer接受和发送消息 向nameserver提供自己的消息 是消息中间件的消息存储,转发的服务器 路由注册:每个broker节点,在启动时都会遍历nameserver列表,与每个nameserver建立长链接,注册自己的信息(例如:brokerId,broker名称,broker地址,所属集群名等),之后每隔30s发送一次心跳,NameServer接收到心跳后会更新时间戳。 broker集群broker...

2022-02-24 14:48:44 1406

原创 Error: Can‘t find Python executable “...\python.EXE“, you can set the PYTHON env variable

问题描述Error: Can’t find Python executable “D:\soft2\python\python.EXE”, you can set the PYTHON env variable.最开始就是想要运行一个vue项目,npm install 命令之后就遇到了这个鬼问题。第一眼就看到了这个问题,用node-sass竟然还需要python。我真太阳了????,我又看了我的环境变量,也有python,在cmd中执行python也能查看版本信息(我的版本是3.6.8),然后我

2022-01-14 00:25:28 1055

转载 中航信Eterm协议解析,解包,封包源码

地址:Eterm协议解析,解包,封包源码等_简趴活的博客-CSDN博客

2022-01-13 23:37:27 978

原创 String为什么被final修饰

首先,被final修饰的变量,无论是类属性、对象属性、形参还是局部变量,都需要进行初始化操作。而String被final修饰主要由于两个方面:安全性和效率一)效率:使用字符串池final修饰的String,代表这个类不能被继承,而String是一个char类型的数组,证明它是不可更改的,但这也仅仅是引用地址不可改,再加上被private修饰,证明数组本身也不会改变。只有当字符串本身也不会变的时候才可以使用字符串池,这样节省空间二)安全性:String类被final修饰不能被继承,无法修改,在多线

2021-10-25 14:45:34 4165

原创 oracle用到的函数

1、substr() --字符串截取格式1: substr(string string, int a, int b); 格式2:substr(string string, int a) ;解析: 格式1: 1、string 需要截取的字符串 2、a 截取字符串的开始位置(注:当a等于0或1时,都是从第一位开始截取) 3、b 要截取的字符串的长度 格式2: 1、string 需要截取的字符串...

2021-07-23 15:49:48 99

浏览器的一个广告拦截器插件

一个浏览器的广告拦截器,如果杀毒软件之类的也无法阻拦烦人的广告的话,可以试试这个插件,很好用,本人亲测。让你在使用电脑时不再分心。强烈推荐。

2023-03-25

erlang25.0.3版本

内容概要:该软件为erlang的目前最新版 使用场景:如果使用rabbitmq的3.9以上版本,也许你会需要这个安装包。 其他说明:下载一个感觉时间好长,所以我就发布到这里了,各位有需要的可以下载哦。我会把rabbitmq目前的最新版本也上传上来,各位如果有需要也可以下载使用。从官网下载erlang感觉时间真的会很长。

2022-07-20

空空如也

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

TA关注的人

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