自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(166)
  • 资源 (3)
  • 问答 (1)
  • 收藏
  • 关注

原创 代理模式(Proxy Pattern)

■ 代理主题(Proxy Subject)角色:也叫做委托类、代理类,该角色负责控制对真实主题的引用,负责在需要的时候创建或删除真实主题对象,并且在真实主题角色处理完毕前后做预处理和善后处理工作。■ 抽象主题(Subject)角色:该角色是真实主题和代理主题的共同接口,以便在任何可以使用真实主题的地方都可以使用代理主题。代理模式是一项基本的设计技巧,许多其他的模式,如状态模式、策略模式、访问者模式本质上也采用了代理模式。⽬标对象的代理,负责控制和管理⽬标对象,并间接地传递外部对⽬标对象的访问。

2024-10-27 21:34:03 572 2

原创 分布式事务理论基础

在一阶段,Seata 会拦截“业务 SQL”,首先解析 SQL 语义,找到“业务 SQL”要更新的业务数据,在业务数据被更新前,将其保存成“before image”,然后执行“业务 SQL”更新业务数据,在业务数据更新之后,再将其保存成“after image”,最后生成行锁。在执行 Prepare 步骤过程中,如果某些参与者执行事务失败、宕机或与协调者之间的网络中断,那么协调者就无法收到所有参与者的 YES 响应,或者某个参与者返回了 No 响应,此时,协调者就会进入回退流程,对事务进行回退。

2024-10-25 01:57:14 399

原创 抽象工厂模式

抽象工厂模式是一个简单的模式,使用的场景非常多,例如,应用需要涉及不同操作系统的时候,可以考虑使用抽象工厂模式,如果需要在三个不同的平台(Windows、Linux、Android)上运行,则可以通过抽象工厂模式屏蔽掉操作系统对应用的影响。■ 产品族内的约束为非公开状态,在不同的工厂中,各种产品可能具有不同的相互依赖关系,这些依赖关系由工厂封装在其内部,对于工厂的使用者是不可见的。抽象工厂模式的使用场景是:当一个对象族(或是一组没有任何关系的对象)都有相同的约束,则可以使用抽象工厂模式。

2024-10-25 01:49:05 599

原创 Elasticsearch基础操作入门

所有其他语言可以使用 RESTful API 通过端口9200和 Elasticsearch 进行通信,你可以用你最喜爱的 web 客户端访问 Elasticsearch。事实上,正如你所看到的,你甚至可以使用curl命令来和 Elasticsearch 交互。被< >VERB方法谓词GETPOSTPUTHEADDELETEhttpshttpsHOSTlocalhostPORT9200PATH_count?prettyBODY。

2024-10-24 23:20:15 1507

原创 原型模式(Prototype Pattern)

注意 Java中Object提供的clone()方法采用的是“浅”克隆,即只复制关联对象的引用,而不复制关联对象的数据。■ 性能优良:原型模式是在内存二进制流的复制,要比直接new一个对象性能好,特别是在一个循环体内产生大量的对象时,原型模式可以更好地体现其优点。■ 一个对象多个修改者的场景,一个对象需要提供给其他对象访问,而且各个调用者可能都需要修改其值时,可以考虑使用原型模式复制多个对象供调用者使用。■ 性能和安全要求的场景,通过new产生一个对象需要非常烦琐的数据准备或访问权限,可以使用原型模式。

2024-10-24 00:54:22 714

原创 工厂方法模式

此种进一步抽象化的结果,使这种工厂方法模式可以用来允许系统在不修改具体工厂角色的情况下引进新的产品,这一特点使得工厂模式具有超过简单工厂的优越性。■ 具体产品(Concrete Product)角色:该角色实现抽象产品角色所声明的接口,工厂方法模式所创建的每一个对象都是某个具体产品角色的实例。工厂方法模式是简单工厂模式的进一步抽象和推广。首先,在工厂方法模式中,■ 具体工厂(Concrete Creator)角色:该角色实现了抽象工厂接口,含有与应用密切相关的逻辑,并且受到应用程序的调用以创建产品对象。

2024-10-24 00:00:01 339

原创 简单工厂(Simple Factory)

简单工厂模式中,一个工厂类处于对产品类实例化的中心位置上,它知道每一个产品,它决定哪一个产品类应当被实例化。这个模式的优点是允许客户端相对独立于产品创建的过程,并且在系统引入新产品的时候无须修改客户端,即在某种程度上支持“开-闭”原则。这个模式的缺点是对“开-闭”原则的支持不够,因为如果有新的产品加入到系统中,则需要修改工厂类,将必要的逻辑加入到工厂类中。简单工厂把实例化的操作单独放到一个类中,这个类就成为简单工厂类,让简单工厂类来决定应该用哪个具体子类来实例化。

2024-10-23 23:57:12 346

原创 单例模式(Singleton)

双重检验锁模式(double checked locking pattern),是一种使用同步块加锁的方法,称为双重检查锁,因为会有两次检查 instance == null,一次是在同步块外,一次是在同步块内。在枚举被加载时,所有的枚举常量会被实例化,而每个枚举常量都是 final 和 static 的,因此只会被实例化一次。从案例1,可以发现创建对象都是通过共有的一个方法获取对象的。的规则,且仅在需要时才加载。这与外部类的加载是相互独立的,外部类的实例化、方法调用等操作不会触发静态内部类的加载。

2024-10-23 23:56:14 1078 1

原创 安装maven与nexus

Nexus安装后自带maven-releases,maven-snapshots两个仓库,用于将生成的jar包发布在这两个仓库中,在实际开发中需要将maven-releases设置为可以重复发布。nexus下载地址: https://help.sonatype.com/repomanager3/download/访问:http://ip:port/nexus,这里为:http://192.168.1.18:524/nexus。Maven官网下载地址:http://maven.apache.org。

2024-06-30 15:07:14 508

原创 Mac m1 maven 同步报错java.rmi.ConnectIOException: error during JRMP connection establishment; nested exc

Mac m1 maven 同步报错java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is:java.net.SocketException: Broken pipe写写代码,沉浸于做自己的事情是一种享受。这周比较忙,几天没有写打开自己电脑的Idea,出现红色的几行大字。如下浏览了一下,大概知道是连接出现了异常。但是不明白具体的问题点。这时候当然是使用GPT 和 google,

2024-06-30 02:42:32 1063 4

原创 ElasticSearch 底层读写原理

​ 写请求是写入 primary shard,然后同步给所有的 replica shard;读请求可以从 primary shard 或 replica shard 读取,采用的是随机轮询算法。1.选择任意一个DataNode发送请求,例如:node2。此时,node2就成为一个coordinating node(协调节点)2.计算得到文档要写入的分片routing 是一个可变值,默认是文档的 _id。

2024-03-09 22:29:48 1068

原创 Elasticsearch架构原理

一. Elasticsearch架构原理1、Elasticsearch的节点类型在Elasticsearch主要分成两类节点,一类是Master,一类是DataNode。1.1 Master节点在Elasticsearch启动时,会选举出来一个Master节点。当某个节点启动后,然后使用Zen Discovery机制找到集群中的其他节点,建立连接,并从候选主节点中选举出一个主节点。Master节点主要负责:● 处理创建,删除索引等请求,负责索引的创建与删除。

2024-03-09 13:45:50 1684

原创 ElasticSearch DSL语法

term: 这种查询和match在有些时候是等价的,比如我们查询单个的词hello,那么会和match查询结果一样,但是如果查询"hello world",结果就相差很大,因为这个输入不会进行分词,就是说查询的时候,是查询字段分词结果中是否有"hello world"的字样,而不是查询字段中包含"hello world"的字样。模糊匹配主要是针对文本类型的字段,文本类型的字段会对内容进行分词,对查询时,也会对搜索条件进行分词,然后通过倒排索引查找到匹配的数据,模糊匹配主要通过match等参数来实现。

2024-03-03 23:10:47 1516 1

原创 ElasticSearch开篇

结构化数据和非结构化数据。结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等。非结构化数据:指不定长或无固定格式的数据,如 互联网数据、邮件,word文档等。顺序扫描法和反向索引法顺序扫描法:所谓顺序扫描法,就是顺序扫描每个文档内容,看看是否有要搜索的关键字,实现查 找文档的功能,也就是根据文档找词。反向索引法:所谓反向索引,就是提前将搜索的关键字建成索引,然后再根据索引查找文档,也就 是根据词找文档。这种先建立索引,再对索引进行搜索文档的过程就叫。

2024-03-03 14:26:32 1035

原创 深入理解Mysql事务隔离级别与锁机制

MyISAM在执行查询语句SELECT前,会自动给涉及的所有表加读锁,在执行update、insert、delete操作会自动给涉及的表加写锁。InnoDB在执行查询语句SELECT时(非串行隔离级别),不会加锁。但是update、insert、delete操作会加行锁。简而言之,就是。

2024-02-28 22:29:56 1665

原创 服务器资源检查

【代码】服务器资源检查。

2023-10-29 12:43:32 259

原创 通过zookeeper浅谈一致性算法

CAP 定理指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。通俗来说:一致性(C):当系统数据发生更新操作后,各个主机中的数据仍然处于一致的状态。可用性(A):对于用户的每一个请求,系统总是可以在有限的时间内对用户做出响应。分区容错性(P):分布式系统在遇到任何网络分区故障时,仍能够保证对外提供满足一致性或可用性的服务。

2023-10-29 10:00:00 608

原创 MySQL阻塞与死锁

因为不同锁之间的兼容性关系,在有些时刻一个事务中的锁需要等待另一个事务中的锁释放它所占用的资源,这就是阻塞。查询:设置值:注意:参数参数是动态的,在mysql运行时可进行调整,参数是静态的,不可在运行时进行修改,否则会报错。(其实InnoDB存储引擎在大部分情况下都不会对异常进行回滚。异常实例演示:左边为会话A,右边为会话B。初始状态数据库表film中有3条数据,ID,分别为3,5,6;首先会话A 开启了事务A,并且在Next-Key Lock算法下锁定了小与5包含5的记录。

2023-09-06 22:07:42 744 1

原创 MySQL中的锁机制

抛砖引玉:多个查询需要在同一时刻进行数据的修改,就会产生并发控制的问题。我们需要如何避免写个问题从而保证我们的数据库数据不会被破坏。

2023-08-14 01:56:49 940 1

原创 MYSQL幻读问题

​ 通俗来说就是,time1:事务A读取某个范围,time2:事务B在这个范围中插入了一条新记录并提交事务,time3:事务A再次读取该范围的记录时读取到事务B新增的记录。对于上面的SQL语句,会将(-∞,+∞)这个范围加锁,因此在这个范围内的插入都是不允许的,从而避免幻读。但是我们会发现update ID 为3的记录是成功的,也就是说事务A是可以感知到事务B新增的ID为3的记录。注意这时select出的记录中是没有ID为3的记录。Time1: 开启事务A , 查询表film中的所有记录。

2023-08-13 03:23:41 323

原创 垃圾收集算法

而老年代的对象存活几率是比较高的,而且没有额外的空间对它进行分配担保,所以我们必须选择“标记-清除”或“标记-整理”算法进行垃圾收集。算法分为“标记”和“清除”阶段:标记存活的对象, 统一回收所有未被标记的对象(一般选择这种);当前虚拟机的垃圾收集都采用分代收集算法,这种算法没有什么新的思想,只是根据对象存活周期的不同将内存分为几块。根据老年代的特点特出的一种标记算法,标记过程仍然与“标记-清除”算法一样,但后续步骤不是直接对可回收对象回收,而是让所有存活的对象向一端移动,然后直接清理掉端边界以外的内存。

2023-04-27 14:15:05 149

原创 从JDK源码级别彻底剖析JVM类加载机制

● 加载:在硬盘上查找并通过IO读入字节码文件,使用到类时才会加载,例如调用类的main()方法,new对象等等,在加载阶段会在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口。双亲委派机制,加载某个类时会先委托父加载器寻找目标类,找不到再委托上层父加载器加载,如果所有父加载器在自己的加载类路径下都找不到目标类,则在自己的类加载路径中查找并载入目标类。● 扩展类加载器:负责加载支撑JVM运行的位于JRE的lib目录下的ext扩展目录中的JAR类包。

2023-04-26 11:23:24 417

原创 RabbitMQ编程模型

RabbitMQ出于服务器复用的想法,可以在一个RabbitMQ集群中划分出多个虚拟主机,每一个虚拟主机都有AMQP的全套基础组件,并且可以针对每个虚拟主机进行权限以及数据分配,并且不同虚拟主机之间是完全隔离的。Stream队列是RabbitMQ自3.9.0版本开始引入的一种新的数据队列类型,也是目前官方最为推荐的队列类型。仲裁队列,是RabbitMQ从3.8.0版本,引入的一个新的队列类型,整个3.8.X版本,也都是在围绕仲裁队列进行完善和优化。这是RabbitMQ最为经典的队列类型。

2023-04-17 23:37:15 430

原创 一条SQL在MySQL中是如何执行的

你可以看到,如果查询命中缓存,MySQL 不需要执行后面的复杂操作,就可以直接返回结果,这个效率会很高。等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。之后,这个连接里面的权限判断逻辑,都将依赖于此时读到的权限。,如果命中查询缓存,会在查询缓存返回结果的时候,做权限验证。2,在引擎层做了热点数据的缓存。查询缓存的失效非常频繁,只要有对一个表的更新,这个表上所有的查询缓存都会被清空.

2023-04-08 00:33:48 472

原创 RocketMQ安装

为了便于观察,这次搭建一个2主2从异步刷盘的集群,所以我们会使用conf/2m-2s-async下的配置文件,实际项目中,为了达到高可用,一般会使用dleger。然后在对应的slave在worker2上,修改work2上的 conf/2m-2s-async/broker-b-s.properties。把下载的rocketmq-all-4.7.1-bin-release.zip在本地完成解压,并上传到/app/rocketmq目录。先配置2m-2s-async/broker-a.properties。

2023-04-08 00:10:47 417

原创 提高单元测试的意义&如何用Mockito做好单元测试

​ 定义:单元测试是开发者编写的一小段代码,用于检验代码的一个很小的,很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件下特定函数的行为(《单元测试之道 Java版》)。换句话说,指对软件中的最小可测试单元进行检查和验证,针对的是类和方法。我们是否需要从头开始一行行代码写?不用的,有些插件可以帮忙生成部分代码生成代码的插件idea自带的生成功能TestMe插件,这款插件只会给你生成一个壳,真正逻辑需要自己编写。squaretest插件,这里就不展开讲了。

2023-04-08 00:03:16 2095

原创 RocketMQ安装

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8UJIRej8-1677910572044)(C:\Users\QiJian\AppData\Roaming\Typora\typora-user-images\image-20220531134421318.png)]然后在对应的slave在worker2上,修改work2上的 conf/2m-2s-async/broker-b-s.properties。先配置2m-2s-async/broker-a.properties。

2023-03-04 14:16:48 1024

原创 docker mysql应用安装

将修改后的配置放到容器。

2022-10-22 21:57:07 413

原创 dacker安装

官网:https://documentation.portainer.io/Portainer社区版2.0拥有超过50万的普通用户,是功能强大的开源工具集,可让您轻松地在Docker, Swarm,Kubernetes和Azure ACI中构建和管理容器。Portainer的工作原理是在易于使用的GUI后面隐藏使管理容器变得困难的复杂性。通过消除用户使用CLI,编写YAML或理解清单的需求,Portainer使部署应用程序和解决问题变得如此简单,任何人都可以做到。

2022-10-16 20:12:13 346

原创 fastJson序列化与反序列化

Java泛型是jdk1.5引入的一个新特性。泛型的本质是参数化类型,也就是说操作的数据类型被指定为一个参数。

2022-10-05 21:40:48 2554

原创 redis分布式锁案例分析

3、替代redis的事务功能:redis自带的事务功能很鸡肋,而redis的lua脚本几乎实现了常规的事务功能,官方推荐如果要使用redis的事务功能可以用redis lua替代。如果是集群,锁的生效只有在当前服务器的进程上生效。1、减少网络开销:本来5次网络请求的操作,可以用一个请求完成,原先5次请求的逻辑放在redis服务器上完成。管道不是原子的,不过redis的批量操作命令(类似mset)是原子的。这时候在极端情况下就会出现 请求A释放请求B的锁,B释放C的,C释放D的,…上面的代码中不是原子的。

2022-10-04 02:54:55 629

原创 Redis数据结构,一个字牛。

当几百万条的数据时,就只有一个user ,当获取所有的值的时候。​ 目前的工作做中redis扮演者越来越重要的角色,但是我看挺多人都只会使用redis的字符串,当然选择也应该根据实际的业务场景来选择合适的数据结构。​ 进入官网是这么显示展示的,从这能够得到的信息就是:1:redis是开源的。这时有人就会说了,前面提到的数据结构已经能够做到上面的需求了啊,例如上面的签到日历,使用string结构,签了是1,没有签是2。下面还有三种新类型。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

2022-10-02 17:35:51 832

原创 JVM类加载机制

类加载过程 ;自定义类加载器只需要继承 java.lang.ClassLoader 类,该类有两个核心方法,一个是loadClass(String, boolean),实现了双亲委派机制,还有一个方法是findClass,默认实现是空方法,所以我们自定义类加载器主要是重写findClass方法。try {//defineClass将一个字节数组转为Class对象,这个字节数组是class文件读取后最终的字节数组。...

2022-08-13 23:54:04 156

原创 Could not create server TCP listening socket 127.0.0.16379 bind 操作成功

Redis启动失败提示:Could not create server TCP listening socket 127.0.0.16379 bind 操作成功使用如下命令启动redis,启动失败redis-server.exe redis.windows.conf问题截图:问题解决:# 启动客户端redis-cli.exe# 关闭链接shutdown # 退出客户端exit如果输入shutdown,提示(error) NOAUTH Authentication requi

2022-04-25 22:38:20 1649

原创 JDK7中ConcurrentHashMap源码解析

ConcurrentHashMap数据结构ConcurrentHashMap的数据结构与HashMap基本类似, 区别在于:1、内部在数据写入时加了同步机制(分段锁)保证线程安全,读操作是无锁操作;2、扩容时老数据的转移是并发执行的,这样扩容的效率更高ConcurrentHashMap 线程安全的具体实现方式JDK 1.7ConcurrentHashMap基于ReentrantLock实现分段锁将数据分为一段一段的存储,然后给每一段数据配一把锁,底层数据结构:Segment 数组 + Has

2022-04-25 22:32:54 944

原创 JDK7 HashMap源码解析

为什么HashMap中在链表与数组的选择时选择了数组?因为使用链表的话访问查询会比较低(get方法),在ArrayList中可以直接使用下表来获取数据,但是链表需要一个位置一个位置遍历来查询。在HashMap中get和put使用的频率都是非常的高的,所以我们也需要同时去保证他们的效率。JDK 1.8 前 : 数组 + 链表put方法:● 通过 key 的 hashCode 经过 扰动函数(hash()) 处理过后得到 hash 值● 通过 (n - 1) & hash (高效的求余数的办

2022-04-23 00:29:11 286

原创 idea中配置tomcat时找不到war/war exploded

问题截图,找不到war/war exploded解决办法:file—>project structure —>Modules—>webArtifacts 如下操作接着通过上面的操作接可以了

2022-04-23 00:19:21 1834 2

原创 mysql5.7解压版出现 MySQL之2003-Can‘t connect to MySQL server on ‘localhost‘(10061 ...)

打开navicat出现如下报错:出现上面问题我猜想:服务没有启动在管理后台一看别说服务没有启动了,就连MySQL的服务都没有。回想一下可能是之前自己为了图便捷使用电脑管家的时候可能不小心把服务删除了。解决办法:DOS命令进入安装目录下的bin目录执行如下:mysqld -install 问题解决...

2022-03-31 14:51:00 1875

原创 LeetCodePlugin安装与使用

首先找到LeetCode editor , 安装Tools下找到LeetCode Plugin 右边进行如下配置CodeFileName (代码文件名字)$!velocityTool.camelCaseName(${question.titleSlug})CodeTemplate (Code初始化模板)package com.qijian.leetcode.editor.cn;${question.content}public class $!velocityTool.c..

2022-03-12 13:47:01 669

原创 ngrok内网穿透

ngrok内网穿透小程序和后台api通信小程序不能够直接访问后台接口如果要访问后台的话,需要通过内网穿透将ip暴露到公网使用工具:ngrok工具官网:https://ngrok.com/安装下载后解压并cmd进入文件目录j进入官网,执行第二部所示命令,dos命令执行 。ngrok authtoken 25RWZ2x1jaGmkY48NnSstKUvrvu_81oN8FXiE6fMyBzsXWZjP(这是隧道id)命令执行之后在C:\Users\QiJian\.ngr

2022-02-26 17:33:05 293

equals方法的重写.docx

equals方法重写作业,Students类,有三个属性id ,name ,grade。还有一个测试类用于测试创建了三个对象前两各对象的数据完全一样,第三个对象的数据不同。使用equals方法比较。并输出结果。

2019-12-06

第一次实验报告.7z

面向对象程序设计 c++版 第二版实验报告一 实验目的 熟悉VC++操作环境并生产所写应用的发布版

2019-06-14

计算圆面积.cpp

int mian() { struct Circle myC; myC.InputR(); myC.ComputS(); myC.OutputS() return 0; } 主函数如上,要求完善计算圆面积的程序,园的相关信息集中定义在结构体中,并实现对结构体的调用。

2019-05-19

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

TA关注的人

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