- 博客(186)
- 收藏
- 关注
原创 Kubesphere上搭建ELK日志收集系统
版本:elasticsearch:7.14.01)创建挂载文件2)开放端口,设置环境变量3)挂载配置。
2024-12-09 22:30:45
696
原创 Kubesphere上搭建Nacos集群
3)重新创建三份nacos,配置环境变量(也可使用配置文件配置)使用最新版本:nacos/nacos-server。1)先创建一个有状态副本集,获取到dns。5)创建Node服务,登录nacos。2)创建集群配置文件。
2024-12-09 22:19:18
221
原创 模板模式
在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。
2024-10-02 14:16:43
275
原创 Netty入门
【零拷贝】的体现之一,对原始 ByteBuf 进行切片成多个 ByteBuf,切片后的 ByteBuf 并没有发生内存复制,还是使用原始 ByteBuf 的内存,切片后的 ByteBuf 维护独立的 read,write 指针。netty 中的 Future 与 jdk 中的 Future 同名,但是是两个接口,netty 的 Future 继承自 jdk 的 Future,而 Promise 又对 netty Future 进行了扩展。connect 方法是异步的,意味着不等连接建立,方法执行就返回了。
2024-09-28 16:23:38
1259
原创 NIO基础
这样,一个单独的线程可以通过轮询 Selector 来判断一组 Channel 是否有就绪状态的事件,从而只需要少量的线程就能处理大量的客户端请求。,可以从 channel 将数据读入 buffer,也可以将 buffer 的数据写入 channel,而之前的 stream 要么是输入,要么是输出,channel 比 stream 更为底层。它与数组类似,但是提供了对数据的结构化访问,并且可以跟踪已经读写了多少数据。Buffer 是一块可以写入数据,然后可以从中读取数据的内存块。
2024-09-28 11:40:23
1249
原创 职责链模式
责任链(Chain of Responsibility)模式:为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。
2024-09-26 16:34:26
330
原创 访问者模式
访问者(Visitor)模式:将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方式。它将对数据的操作与数据结构进行分离,是行为类模式中最复杂的一种模式。在访问者模式中,每增加一个新的元素类,都要在每一个具体访问者类中增加相应的具体操作,这违背了“开闭原则”。
2024-09-26 16:33:44
514
原创 迭代器模式
命令(Command)模式:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。
2024-09-26 16:33:08
689
原创 命令模式
命令(Command)模式:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。
2024-09-26 16:32:14
595
原创 解释器模式
解释器(Interpreter)模式:给分析对象定义一个语言,并定义该语言的文法表示,再设计一个解析器来解释语言中的句子。也就是说,用编译语言的方式来分析应用中的实例。这种模式实现了文法表达式处理的接口,该接口解释一个特定的上下文。
2024-09-26 16:31:37
475
原创 备忘录模式
备忘录(Memento)模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。该模式又叫快照模式。
2024-09-26 16:31:02
465
原创 观察者模式
观察者模式(Observer Pattern):定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。观察者模式又叫做发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。
2024-09-25 10:23:34
443
原创 中介者模式
中介者模式(Mediator Pattern):用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,减少对象间混乱的依赖关系,从而使其耦合松散,而且可以独立地改变它们之间的交互。对象行为型模式。
2024-09-25 10:22:53
445
原创 策略模式
策略(Strategy)模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。属于对象行为模式。
2024-09-25 10:21:29
476
原创 享元模式
享元模式(Flyweight Pattern)用于减少创建对象的数量,以减少内存占用和提高性能。这种模式尝试重用现有的细粒度对象,而不是每次都重新创建新的对象。享元模式特别适用于大量相似对象的场景,这些对象的状态可以被外部状态共享。
2024-09-25 10:20:35
419
原创 外观模式
外观(Facade)模式又叫作门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。也可为每一个部门单独提供方法。
2024-09-24 13:43:13
700
原创 装饰器模式
适配器是连接两个类,向一个现有的对象添加新的功能,同时又不改变其结构。属于对象结构型模式。创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。
2024-09-23 15:34:15
388
原创 桥接模式
桥接模式(Bridge Pattern)将抽象部分与它的实现部分分离,使它们都可以独立地变化。这种模式有助于减少类的数量,因为它将一个类层次结构中的两个维度(例如,抽象和实现)解耦,使得两者可以独立地扩展。
2024-09-23 15:33:40
413
原创 适配器模式
将一个接口成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作,适配器模式分为类结构型模式(继承)和对象结构型模式(组合)两种,前者(继承)类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少些。别名也可以是Wrapper,包装器适配器模式的主要角色TargetAdapteeTargetAdapteeTarget。
2024-09-23 15:33:08
493
原创 建造者模式
建造者模式(Builder Pattern)允许你逐步构建复杂的对象。这种模式将对象的构造过程与其表示分离,使得相同的构造过程可以创建不同的表示。建造者模式特别适用于需要创建具有多个部件或复杂配置的对象时。
2024-09-23 15:32:36
395
原创 原型模式(Prototype)
原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。本体给外部提供一个克隆体进行使用。
2024-09-22 18:55:06
251
原创 设计模式总览
设计模式主要分为以下三大类:创建型模式(Creational Patterns)结构型模式(Structural Patterns)行为型模式(Behavioral Patterns)
2024-09-22 18:54:04
927
原创 性能调优
OpenJDK中提供了一款叫JMH(Java Microbenchmark Harness)的工具,可以准确地对Java代码进行基准测试, 量化方法的执行性能。2)使用top -p 进程ID单独监控某个进程,按H可以查看到所有的线程以及线程对应 的CPU使用率,找到CPU使用率特别高的线程。在使用trace定位到性能较低的方法之后,使用watch命令监控该方法,可以获得更为详细的方法信息。4)找到nid线程ID相同的栈信息,需要将之前记录下的十进制线程号转换成16进制。
2024-09-19 20:49:49
819
原创 GC调优
同时还可以监控对象晋升的直方图。2)缓存对象过多:呈现锯齿状,对象创建之后内存上升,一旦发生垃圾回收之后下降到底部,并且每次下降之后的内存大小接近,处于比较高的位置。1)正常情况:呈现锯齿状,对象创建之后内存上升,一旦发生垃圾回收之后下降到底部,并且每次下降之后的内存大小 接近,存留的对象较少。通过GC日志,可以更好的看到垃圾回收细节上的数据,同时也可以根据每款垃圾回收器的不同特点更好地发 现存在的问题。最合理的设置方式应该是根据最大并发量估算服务器的配置,然后再根据服务器配置计算最大堆内存的值。
2024-09-19 18:20:20
1245
原创 内存泄漏
Arthas是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、 gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断, 包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升 线上问题排查效率。2)如果大量的数据在静态变量中被长期引用,数据就不会被释放,如果这些数据不再使用,就可能造成内存泄漏,所有尽量减少将对象长时间的保存在静态变量中,如果不再使用,必须将对象删除(比如在集合中)或者将静态变量设置为null。支配树展示的是对象实例间的支配关系。
2024-09-19 17:40:04
1154
原创 垃圾回收
终结器引用指的是在对象需要被回收时,终结器引用会关联对象并放置在Finalizer类中的引用队列中,在稍后由一条由FinalizerThread线程从队列中获取对象,然后执行对象的finalize方法,在对象第二次被回收时,该对象才真正的被回收。现代优秀的垃圾回收算法,会将上述描述的垃圾回收算法组合进行使用,其中应用最广的就是分代垃圾回收 算法(Generational GC)。可达性算法中描述的对象引用,一般指的是强引用,即是GCRoot对象对普通对象有引用关系,只要这层关系存在,普通对象就不会被回收。
2024-09-12 15:37:07
1258
1
原创 类加载器
扩展类加载器和应用程序类加载器都是JDK中提供的、使用Java编写的类加载器。在类加载的过程中,每个类加载器都会先检查是否已经加载了该类,如果已经加载则直接返回,否则会将加载请求委派给父类加载器。应用程序类加载器的parent父类加载器是扩展类加载器,而扩展类加载器的parent是空。( 并不是继承关系)如果所有的父类加载器都无法加载该类,则由当前类加载器自己尝试加载。扩展类加载器默认加载Java安装目录/jre/lib/ext下的类文件。应用程序类加载器是扩展类加载器的子类,是Java代码实现的。
2024-09-11 09:50:45
825
原创 运行时数据区
Java服务端程序开发时,建议将-Xmx和-Xms设置为相同的值,这样在程序启动之后可使用的总内存就是最大内存,而无需向java虚拟机再次申请,减少了申请并分配内存时间上的开销,同时也不会出现内存过剩之后堆收缩的情况。方法出口指的是方法在正确或者异常结束时,当前栈帧会被弹出,同时程序计数器应该指向上一个栈帧中的下一条指令的地址。used指的是当前已使用的堆内存,total是java虚拟机已经分配的可用堆内存,max是java虚拟机可以分配的最大堆内存。栈上的局部变量表中,可以存放堆上对象的引用。
2024-09-11 09:48:50
1268
原创 类的生命周期
连接(Linking)阶段的第一个环节是验证,验证的主要目的是检测Java字节码文件是否遵守了《Java虚拟机规 范》中的约束。解析阶段是连接阶段的第三步,它是将类、接口、字段和方法的符号引用(字节码文件中使用编号来访问常量池中的内容)转换为直接引用(内存地址)的过程。准备阶段是连接阶段的第二步,它为类变量分配内存,并设置默认初始值。这些变量所使用的内存都在方法区中进行分配。生命周期:加载 -> 连接 -> 初始化 -> 使用 -> 卸载。参数可以打印出加载并初始化的类。参数打印出加载并初始化的类。
2024-09-10 09:43:03
441
原创 字节码文件打开方式
该工具可以直观的查看.class字节码文件下载地址:https://github.com/ingokegel/jclasslib也可直接在idea中安装。
2024-09-10 09:42:17
366
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人