- 博客(68)
- 收藏
- 关注
原创 10分钟SkyWalking与SpringBoot融合并整合到Linux中
在虚拟机参数里加上这段,注意skywalking-agent.jar要去官网下载,jar包外面的文件也不能丢失,否则会报错。(5)之后上传之前的dockerfile文件,在当前目录下执行docker-compose up -d。启动完成之后,打开http://127.0.0.1:9090,会出现Skywalking的UI界面。(6)查看服务器的9090端口,skywalkingui是否工作正常。(1)一键安装docker,注意Centos版本要大于等于7。(7)上传测试项目,执行。6.部署到Linux中。
2024-02-29 10:00:40 909
原创 10分钟快速开始SkyWalking结合Springboot项目
CPM/PPM:服务负荷slow Services: 慢服务Un-Health Services (Apdex): Apdex性能指标(1是满分)Slow Endpoints: 慢请求点Global Response Latency:百分比响应延时,不同百分比的延时时间,单位ms。
2024-02-26 10:02:32 1691 1
转载 浅谈Java String.intern()[转载]
String.intern()原理String.intern()是一个Native方法,底层调用C++的 StringTable::intern 方法,源码注释:当调用 intern 方法时,如果常量池中已经该字符串,则返回池中的字符串;否则将此字符串添加到常量池中,并返回字符串的引用。package com.ctrip.ttd.whywhy;class Test { public static void main(String args[]) { String s1 = ne
2022-03-25 23:28:29 294 1
原创 线程间通信
线程间通信synchronized 案例class Ticket { private int number = 0; public synchronized void incr() throws InterruptedException { if(number!=0){ this.wait(); } number++; System.out.println(Thread.currentThread(
2022-02-04 22:49:47 297
原创 synchronized和lock
synchronizedsynchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种(一个线程访问一个对象中的synchronized(this)同步代码块时,其他试图访问该对象的线程将被阻塞):1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象; 2. 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象; 3. 修改一个静态的方法,其作用的范围是整个静态
2022-02-04 22:47:28 573
原创 用户线程与守护线程
用户线程与守护线程在Java中通常有两种线程:用户线程和守护线程(也被称为服务线程)通过Thread.setDaemon(false)设置为用户线程通过Thread.setDaemon(true)设置为守护线程线程属性的设置要在线程启动之前,否则会报IllegalThreadStateException异常如果不设置线程属性,那么默认为用户线程用户线程和守护线程的区别: 1.主线程结束后用户线程还会继续运行,JVM存活 2.如果没有用户线程,都是守护线程,那么JVM结束(所有的线程都会结束
2022-02-04 22:45:59 1527 1
原创 并发与并行
并发与并行并行是在多台处理器上同时处理多个任务。如 hadoop 分布式集群,并发是在一台处理器上“同时”处理多个任务。并行(parallel):指在同一时刻,有多条指令在多个处理器上同时执行。所以无论从微观还是从宏观来看,二者都是一起执行的。并发(concurrency):指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行。现实例子:并行好比人一边上厕所一边玩手机.
2022-02-04 22:45:14 260
原创 wait和sleep的区别
wait和sleep的区别sleep是Thread的静态方法,wait是Obejct的方法,任何对象实例都能调用 (因为 sleep 是让当前线程休眠,不涉及到对象类,也不需要获得对象的锁,所以是线程类的方法。wait 是让获得对象锁的线程实现等待,前提是要获得对象的锁,所以是类的方法)sleep不会释放锁,也不需要占用锁.wait会释放锁,调用前提是当前线程占用锁它们都可以被interrupted方法中断sleep 一般用于当前线程休眠,或者轮循暂停操作,wait 则多用于多线程之间的通信。
2022-02-04 22:44:43 365
原创 六类线程状态概述
线程状态初始(NEW):新创建了一个线程对象,但还没有调用start()方法。运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态(ready)。就绪状态的线程在获得CPU时间片后变为运行中状态(running)。阻塞(BLOCKED):表示线程阻塞于锁。等待(WAIT
2022-02-04 22:43:30 197
原创 进程、 线程和协程
进程、 线程和协程进程、 线程和协程的概念进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位。线程:是进程的一个执行单元,是进程内科调度实体。比进程更小的独立运行的基本单位。线程也被称为轻量级进程。协程:是一种比线程更加轻量级的存在。一个线程也可以拥有多个协程。其执行过程更类似于子例程,或者说不带返回值的函数调用。进程和线程的区别# 地址空间:>线程共享本进程的地址空间,而进程之间是独立的地址空间。#
2022-02-03 23:00:17 1390
原创 Buffer实用方法
Buffer实用方法rewind()方法Buffer.rewind()将 position设回0,所以你可以重读Buffer中的所有数据。limit保持不变,仍然表示能从Buffer中读取多少个元素(byte、char等)。clear()与compact()方法一旦读完Buffer中的数据,需要让Buffer 准备好再次被写入。可以通过clear()或compact()方法来完成。如果调用的是clear()方法,position将被设回0,limit被设置成capacity的值。换句话说,Buf
2021-09-14 22:56:01 514
原创 DatagramChannel用法
DatagramChannel用法1.打开DatagramChannelDatagramChannel server = DatagramChannel.open();server.socket().bind(new InetSocketAddress(10086));此例子是打开10086端口接收UDP接收包2.接收数据通过receive()接收UDP包ByteBuffer receiveBuffer = ByteBuffer.allocate(64);receiveBuffer.cle
2021-09-11 21:29:37 1465
原创 SocketChannel用法
SocketChannel用法Java NIO中的SocketChannel是一个连接到TCP网络套接字的通道SocketChannel支持设定参数SO_SNDBUF 套接字发送缓冲区大小SO_RCVBUF 套接字接收缓冲区大小SO_KEEPALIVE 保护连接O_REUSEADDR 复用地址SO_LINGER 有数据传输时延缓关闭Channel(非阻塞模式下有用)TCP_NODELAY 禁用Nagle算法(1)创建SocketChannel第一种方式:SocketChannel so
2021-09-11 21:27:18 3846
原创 ServerSocketChannel用法
ServerSocketChannel用法Java NIO中的 ServerSocketChannel 是一个可以监听新进来的TCP连接的通道, 就像标准IO中的ServerSocket一样。ServerSocketChannel类在 java.nio.channels包中。打开 ServerSocketChannel通过调用 ServerSocketChannel.open() 方法来打开ServerSocketChannel.如:ServerSocketChannel ser
2021-09-11 21:25:45 3244
原创 FileChannel详细用法
FileChannel详解第一步使用FileChannel之前我们必须打开它.我们需要通过InputStream,OutStream或者RandomAccessFile来获取一个FileChannel实例.下面是通过RandomAccessFile打开FileChannel的实例:RandomAccessFile aFile = new RandomAccessFile("D:\\gwt.txt","rw");FileChannel channel = aFile.getChannel();第二
2021-09-11 21:24:42 9107 1
原创 FileChannel介绍和案例
FileChannel介绍和案例介绍文件通道FileChannel是用于读取,写入,文件的通道。FileChannel只能被InputStream、OutputStream、RandomAccessFile创建。FileChannel通过字节流创建,那么操作的缓冲区肯定就是字节缓冲区。例子:package FileChannel演示;import java.io.FileNotFoundException;import java.io.IOException;import java.io.R
2021-09-11 21:23:18 257
原创 模板设计模式(常用用法)
模板设计模式模板方法(Template Method)模式的定义如下:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。它是一种类行为型模式。模板方法模式包含以下主要角色。1)抽象类/抽象模板(Abstract Class)抽象模板类,负责给出一个算法的轮廓和骨架。它由一个模板方法和若干个基本方法构成。这些方法的定义如下。① 模板方法:定义了算法的骨架,按某种顺序调用其包含的基本方法。② 基本方法:是整个算法中的一个步骤,包
2021-09-07 16:57:18 112
原创 备忘录模式(常用用法)
备忘录模式备忘录(Memento)模式的定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。该模式又叫快照模式。模式的结构备忘录模式的主要角色如下。发起人(Originator)角色:记录当前时刻的内部状态信息,提供创建备忘录和恢复备忘录数据的功能,实现其他业务功能,它可以访问备忘录里的所有信息。备忘录(Memento)角色:负责存储发起人的内部状态,在需要的时候提供这些内部状态给发起人。管理者(Caretaker)
2021-09-07 16:30:45 123
原创 访问者模式(常用用法)
访问者模式访问者(Visitor)模式的定义:将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方式。它将对数据的操作与数据结构进行分离,是行为类模式中最复杂的一种模式。访问者模式包含以下主要角色。抽象访问者(Visitor)角色:定义一个访问具体元素的接口,为每个具体元素类对应一个访问操作 visit() ,该操作中的参数类型标识了被访问的具体元素。具体访问者(ConcreteVisito
2021-09-07 15:23:55 664
原创 迭代器模式(常用用法)
迭代器模式迭代器模式在生活中应用的比较广泛,比如:物流系统中的传送带,不管传送的是什么物品,都会被打包成一个个箱子,并且有一个统一的二维码。这样我们不需要关心箱子里是什么,在分发时只需要一个个检查发送的目的地即可。再比如,我们平时乘坐交通工具,都是统一刷卡或者刷脸进站,而不需要关心是男性还是女性、是残疾人还是正常人等信息。迭代器(Iterator)模式的定义:提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。迭代器模式主要包含以下角色。抽象聚合(Aggregate)角色:定
2021-09-06 19:28:07 174
原创 中介者模式(常用用法)
中介者模式把“网状结构”改为“星形结构”的方法,就是运用了中介者模式.中介者(Mediator)模式的定义:定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式,它是迪米特法则的典型应用。中介者模式包含以下主要角色。抽象中介者(Mediator)角色:它是中介者的接口,提供了同事对象注册与转发同事对象信息的抽象方法。具体中介者(Concrete Mediator)角色:实现中介者接口,定义一个 List 来管理同事对象,协调
2021-09-06 19:15:52 121
原创 观察者模式(常用用法)
观察者模式观察者(Observer)模式的定义:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式,它是对象行为型模式。观察者模式的主要角色如下。抽象主题(Subject)角色:也叫抽象目标类,它提供了一个用于保存观察者对象的聚集类和增加、删除观察者对象的方法,以及通知所有观察者的抽象方法。具体主题(Concrete Subject)角色:也叫具体目标类,它实现抽象目标中的通知方法,当具体主题的内
2021-09-06 18:16:36 341
原创 状态模式(常用用法)
状态模式状态(State)模式的定义:对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。状态模式包含以下主要角色。环境类(Context)角色:也称为上下文,它定义了客户端需要的接口,内部维护一个当前状态,并负责具体状态的切换。抽象状态(State)角色:定义一个接口,用以封装环境对象中的特定状态所对应的行为,可以有一个或多个行为。具体状态(Concrete State)角色:实现抽象状态所对应的行为,并且在需要的情况下进行状态切换。/
2021-09-06 17:50:56 336
原创 职责链模式(常用用法)
职责链模式使用场景:你要请假,你可以找班长或者老师,肯定是优先跟班长说如果不行,再跟老师去说.责任链(Chain of Responsibility)模式的定义:为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。模式的结构职责链模式主要包含以下角色。抽象处理者(Handler)角色:定义一个处理请求的接口,包含抽象处理方法和一个后继连接。具体处理者(Concrete
2021-09-06 17:04:56 86
原创 策略模式(常用用法)
策略模式在软件开发中常常遇到类似的情况,当实现某一个功能存在多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能,如数据排序策略有冒泡排序、选择排序、插入排序、二叉树排序等。策略(Strategy)模式的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。策略模式的主要角色如下。抽象策略(S
2021-09-06 11:27:44 295
原创 命令模式(常用用法)
命令模式命令(Command)模式的定义如下:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。模式的结构命令模式包含以下主要角色。抽象命令类(Command)角色:声明执行命令的接口,拥有执行命令的抽象方法 execute()。具体命令类(Concrete Command)角色:是抽象命令类的具体实现类,它拥有接收者对象,并通过调用接收者的功能来完成命令要执行的操作。实现者/接收者(Rece
2021-09-06 10:15:42 338
原创 享元模式(常用用法)
享元模式享元(Flyweight)模式的定义:运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似类的开销,从而提高系统资源的利用率。这里笔者曾经用Unity做过一款子弹射击的游戏,用的就是这个模式.在FPS游戏中,射出去的子弹会产生一个实体,过一会一定要销毁不然会占用电脑内存.所以出现了对象池技术,限定多少发子弹会产生,然后销毁后进入池子,然后再被使用,大大减少开销.//车子抽象类public abstract class BikeFl
2021-09-05 22:49:01 161
原创 外观模式(常用用法)
外观模式外观(Facade)模式又叫作门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。在日常编码工作中,我们都在有意无意的大量使用外观模式。只要是高层模块需要调度多个子系统(2个以上的类对象),我们都会自觉地创建一个新的类封装这些子系统,提供精简的接口,让高层模块可以更加容易地间接调用这些子系统的功能。尤其是现阶段各种第三方SDK、开源类
2021-09-05 20:04:53 181
原创 装饰器模式(常用用法)
装饰器模式上班族大多都有睡懒觉的习惯,每天早上上班时间都很紧张,于是很多人为了多睡一会,就会用方便的方式解决早餐问题。有些人早餐可能会吃煎饼,煎饼中可以加鸡蛋,也可以加香肠,但是不管怎么“加码”,都还是一个煎饼。在现实生活中,常常需要对现有产品增加新的功能或美化其外观,如房子装修、相片加相框等,都是装饰器模式。装饰器(Decorator)模式的定义:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。通常情况下,扩展一个类的功能会使用继承方式来实
2021-09-05 19:27:15 252
原创 组合模式(常用方法)
组合模式在现实生活中,存在很多“部分-整体”的关系,例如,大学中的部门与学院、总公司中的部门与分公司、学习用品中的书与书包、生活用品中的衣服与衣柜、以及厨房中的锅碗瓢盆等。在软件开发中也是这样,例如,文件系统中的文件与文件夹、窗体程序中的简单控件与容器控件等。对这些简单对象与复合对象的处理,如果用组合模式来实现会很方便。组合模式的定义与特点组合(Composite Pattern)模式的定义:有时又叫作整体-部分(Part-Whole)模式,它是一种将对象组合成树状的层次结构的模式,用来表示“整体-
2021-09-04 20:04:48 222
原创 静态代理模式(常用用法)
静态代理模式代理模式的一种,静态代理模式静态代理采用的方式就是我们手动的将这些行为换进去,然后让编译器帮我们编译,同时也就将字节码在原有类的基础上加入一些其他的东西或者替换原有的东西,产生一个新的与原有类接口相同却行为不同的类型.静态代理第一个例子//租房public interface Rent { public void rent();}//房东public class Host1 implements Rent{ @Override public void r
2021-09-04 17:04:52 223
原创 动态代理模式(常用用法)
动态代理模式实现原理设计动态代理类(DynamicProxy)时,不需要显式实现与目标对象类(RealSubject)相同的接口,而是将这种实现推迟到程序运行时由 JVM来实现即:在使用时再创建动态代理类 & 实例静态代理则是在代理类实现时就指定与目标对象类(RealSubject)相同的接口通过Java 反射机制的method.invoke(),通过调用动态代理类对象方法,从而自动调用目标对象的方法//动态代理模式例子之一//租房public interface Rent
2021-09-04 17:03:12 149
原创 桥接模式(常用用法)
桥接模式桥接(Bridge)模式的定义如下:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。桥接(Bridge)模式包含以下主要角色。抽象化(Abstraction)角色:定义抽象类,并包含一个对实现化对象的引用。扩展抽象化(Refined Abstraction)角色:是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法。实现化(Implementor)角色:定义实现化角色的接口,供扩展抽象化角色
2021-09-03 14:48:51 256
原创 适配器模式(Adapter)
适配器模式(Adapter)场景运用:在现实生活中,经常出现两个对象因接口不兼容而不能在一起工作的实例,这时需要第三者进行适配。例如,讲中文的人同讲英文的人对话时需要一个翻译,用直流电的笔记本电脑接交流电源时需要一个电源适配器,用计算机访问照相机的 SD 内存卡时需要一个读卡器等。适配器模式分为类结构型模式和对象结构型模式两种,前者类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少些。**//类适配器模式**//接口转换器抽象实现public interf
2021-09-02 11:53:17 122
原创 原型模式(常用用法)
原型模式原型模式的优点:Java 自带的原型模式基于内存二进制流的复制,在性能上比直接 new 一个对象更加优良。可以使用深克隆方式保存对象的状态,使用原型模式将对象复制一份,并将其状态保存起来,简化了创建对象的过程,以便在需要的时候使用(例如恢复到历史某一状态),可辅助实现撤销操作。原型模式的缺点:需要为每一个类都配置一个 clone 方法clone 方法位于类的内部,当对已有类进行改造的时候,需要修改代码,违背了开闭原则。当实现深克隆时,需要编写较为复杂的代码,而且当对象之
2021-09-01 22:08:18 94
原创 建造者模式(常用用法)
建造者(Builder)模式建造者(Builder)模式由产品、抽象建造者、具体建造者、指挥者等 4 个要素构成建造者(Builder)模式的主要角色如下。产品角色(Product):它是包含多个组成部件的复杂对象,由具体建造者来创建其各个零部件。抽象建造者(Builder):它是一个包含创建产品各个子部件的抽象方法的接口,通常还包含一个返回复杂产品的方法 getResult()。具体建造者(Concrete Builder):实现 Builder 接口,完成复杂产品的各个部件的具体创建方法。
2021-09-01 18:43:08 174
原创 单例模式常用用法
单例模式单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。**意图:**保证一个类仅有一个实例,并提供一个访问它的全局访问点。**主要解决:**一个全局使用的类频繁地创建与销毁。**何时使用:**当您想控制实例数目,节省系统资源的时候。**如
2021-09-01 13:06:01 151
原创 三个工厂模式的具体实现(参观向)
工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)**简单工厂模式**//工厂类->产品类->抽象产品接口//调用工厂类即可vehicle接口public interface vehicle { void name();}bus类public class bus implements vehicle { @Override public void name() { System.out.println("This is a bus")
2021-08-31 23:04:19 103
原创 南京邮电大学离散数学求主析取范式和主合取范式实验。
南京邮电大学离散数学求主析取范式和主合取范式实验代码。因为CSDN上没有好的代码,于是博主自己写了一篇。```cpp#include <iostream>#include <cstdlib>#include <vector>#include <string>#include <cmath>#include <stack>#include <map>const int LEN = 140 + 10; in
2021-03-29 23:32:25 1064 10
原创 (c语言)合并两个有序数组
合并两个有序数组给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6]提示:-10^9
2020-10-20 19:44:24 3942
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人