自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(79)
  • 收藏
  • 关注

转载 JVM线上故障排查的基本操作

线上经常会遇到各种各样的问题,CPU 飚高,内存溢出,频繁 GC。总的来说,基本上就是cpu、磁盘、内存以及网络等相关问题,所以进行排查时候尽量四个方面依次排查一遍。同时例如jstack、jmap等工具也是不囿于一个方面的问题的,基本上出问题就是df、free、top 三连,然后依次jstack、jmap伺候,具体问题具体分析即可。

2023-09-12 14:46:46 261

原创 mysql(十)mysql主从复制--主库切换

可能为了更迭升级服务器,或者主库出现问题,又或者只是希望重新分配容量,此时需要切换主库。如果这是计划内的切换,会相对容易点。只需要在从库上使用命令,并设置合适的值。大多数的值都是可选的,至少要指定需要改变的项即可。从库将抛弃之前的配置和中继日志并从新的主库开始复制。同样新的参数会被更新到master.info文件中,这样就算重启,从库配置也不会丢失。整个过程中最难得就是获取新的主库上合适的二进制日志位置,这样从库才可以从和老主库相同的逻辑位置开始复制把从库提升为主库要更困难一点。

2023-09-06 10:46:02 1920

原创 mysql(九)mysql主从复制

MySQL的内建功能是构建基于MySQL的大规模,高性能应用的基础,这类应用使用所谓的“水平扩展”的架构。我们可以通过为服务器配置一个或多个从库的方式来进行数据同步,复制功能不仅有利于构建高性能的应用,同时也是高可用,可扩展性,灾难恢复,备份以及数据仓库等工作的基础。复制解决的基本问题是让一台服务器的数据与其他服务器保持同步。一台主库的数据可以同步到多台设备上,从库本身也可以被配置到另外一台服务器的书库。主库和从库可以有多种不同的组合方式。MySQL支持两种复制方式基于行的复制基于语句的复制。

2023-09-04 10:34:08 1230

原创 mysql(八)事务隔离级别及加锁流程详解

锁是计算机用以协调多个进程间并发访问同一共享资源的一种机制。

2023-08-24 18:05:39 1990

原创 mysql(七)自增ID ---- or ---- UUID

也可以根据自己业务需求,自己定义主键。

2023-07-24 11:29:29 1211

原创 mysql(六)多列索引之索引顺序问题

使用索引常见的错误是。

2023-07-21 10:04:03 2074

原创 mysql(五)索引的三种级别

对于一个查询而言,一个三星索引,可能是其最好的索引。如果查询使用三星索引,一次查询通常只需要进行一次磁盘随机读以及一次窄索引片的扫描,因此其相应时间通常比使用一个普通索引的响应时间少几个数量级。

2023-07-19 10:22:05 1148

原创 mysql(四)使用pt-query-digest分析慢查询日志

用于分析MySQL慢查询的一个工具,它也可以分析binlog、General log、slowlog,也可以通过SHOWPROCESSLIST或者通过tcpdump抓取的mysql协议数据来进行分析。可以把分析结果输出到文件中,分析过程是先对查询语句的条件进行参数化,然后对参数化以后的查询进行分组统计,统计出各查询的执行时间、次数、占比等,可以借助分析结果找出问题进行优化。

2023-07-15 17:44:46 2517

转载 设计模式(二十三)-----访问者模式(Visitor Pattern)

访问者模式适用于数据结构相对稳定的系统,将数据结构与基于数据的操作进行分离,使得添加作用于这些数据结构的新操作变得简单,并且不需要改变各数据结构,为不同类型的数据结构提供多种访问操作方式,这样是访问者模式的设计动机。除了使新增访问操作变得更加简单,也能够在不修改现有类的层次结构下,定义该类层次结构的操作,并将有关元素对象的访问行为集中到一个访问者对象中,而不是分散搞一个个的元素类中。

2023-07-13 18:03:06 83

转载 设计模式(二十二)-----模板模式(Template Pattern)

模板方法是基于继承实现的,在抽象父类中声明一个模板方法,并在模板方法中定义算法的执行步骤(即算法骨架)。在模板方法模式中,可以将子类共性的部分放在父类中实现,而特性的部分延迟到子类中实现,只需将特性部分在父类中声明成抽象方法即可,使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤,不同的子类可以以不同的方式来实现这些逻辑。模板方法模式的优点在于符合“开闭原则”,也能够实现代码复用,将不变的行为转移到父类,去除子类中的重复代码。

2023-07-13 17:48:45 90

转载 设计模式(二十一)-----策略模式(Strategy Pattern)

将类中经常改变或者可能改变的部分提取为作为一个抽象策略接口类,然后在类中包含这个对象的实例,这样类实例在运行时就可以随意调用实现了这个接口的类的行为。比如定义一系列的算法,把每一个算法封装起来,并且使它们可相互替换,使得算法可独立于使用它的客户而变化,这就是策略模式。UML结构图:环境类(Context):通过 ConcreteStrategy 具体策略类来配置,持有 Strategy 对象并维护对Strategy 对象的引用。可定义一个接口来让 Strategy 访问它的数据。

2023-07-13 17:43:28 177

转载 设计模式(二十)-----状态模式(State Pattern)

状态模式,就是允许对象在内部状态发生改变时改变它的行为,对象看起来就好像修改了它的类,也就是说以状态为原子来改变它的行为,而不是通过行为来改变状态。当对象的行为取决于它的属性时,我们称这些属性为状态,那该对象就称为状态对象。对于状态对象而言,它的行为依赖于它的状态,比如要预订房间,只有当该房间空闲时才能预订,想入住该房间也只有当你预订了该房间或者该房间为空闲时。对于这样的一个对象,当它的外部事件产生互动的时候,其内部状态就会发生变化,从而使得他的行为也随之发生变化。

2023-07-13 17:32:19 115

转载 设计模式(十九)-----观察者模式(Observer Pattern)

观察者模式又称为 发布-订阅模式,定义了对象之间一对多依赖关系,当目标对象(被观察者)的状态发生改变时,它的所有依赖者(观察者)都会收到通知。一个观察目标可以对应多个观察者,而这些观察者之间没有相互联系,所以能够根据需要增加和删除观察者,使得系统更易于扩展,符合开闭原则;并且观察者模式让目标对象和观察者松耦合,虽然彼此不清楚对方的细节,但依然可以交互,目标对象只知道一个具体的观察者列表,但并不认识任何一个具体的观察者,它只知道他们都有一个共同的接口。

2023-07-13 16:57:32 196

转载 设计模式(十八)-----备忘录模式(Memento Pattern)

备忘录模式提供了一种恢复状态的机制,在不破坏封装的前提下,捕获对象的内部状态,并保存在该对象之外,保证该对象能够恢复到某个历史状态;备忘录模式将保存的细节封装在备忘录中,除了创建它的创建者之外其他对象都不能访问它,并且实现了即使要改变保存的细节也不影响客户端。但是备忘录模式都是多状态和多备份的,会早用较多的内存,消耗资源。

2023-07-13 16:11:12 235

原创 mysql(三)InnoDB之自适应hash索引

InnoDB 用户无法手动创建哈希索引,如果从这一层面来说,InnoDB 不支持哈希索引,但是InnoDB 会自调优 (self-tuning),如果判定建立自适应哈希索引 (Adaptive Hash Index, AHI),能够提升查询效率,InnoDB 自己会建立相关哈希索引,如果从这一层来说,InnoDB 是支持哈希索引的如果存储引擎不支持hash索引,则可以模拟像InnoDB一样创建hash索引,这样可以得到hash索引带来的便利,如只需要 很小的索引就可以为超长的键创建索引。

2023-07-13 15:38:31 1424

转载 设计模式(十七)-----中介者模式(Mediator Pattern)

中介者模式通过中介者对象来封装一系列的对象交互,将对象间复杂的关系网状结构变成结构简单的以中介者为核心的星形结构,对象间一对多的关联转变为一对一的关联,简化对象间的关系,便于理解;各个对象之间的关系被解耦,每个对象不再和它关联的对象直接发生相互作用,而是通过中介者对象来与关联的对象进行通讯,使得对象可以相对独立地使用,提高了对象的可复用和系统的可扩展性。在中介者模式中,中介者类处于核心地位,它封装了系统中所有对象类之间的关系,除了简化对象间的关系,还可以对对象间的交互进行进一步的控制。

2023-07-12 17:33:45 94

转载 设计模式(十六)-----迭代器模式(Iterator Pattern)

实际开发中,我们针对不同的需求,可能需要以不同的方式来遍历整个整合对象,但我们不希望在集合容器的抽象接口层中充斥着各种不同的遍历操作遍历一个集合对象不需要了解聚合对象的内部结构提供多种不同的遍历方式迭代器模式提供一种访问集合中的各个元素,而不暴露其内部表示的方法。将在元素之间游走的职责交给迭代器,而不是集合对象,从而简化集合容器的实现,让集合容器专注于在它所应该专注的事情上,更加符合单一职责原则。

2023-07-12 17:19:26 315

转载 设计模式(十五)-----解释器模式(Interpreter Pattern)

解释器模式,就是定义语言的文法,并建立一个解释器来解释该语言中的句子,通过构建解释器,解决某一频繁发生的特定类型问题实例。这里我们将语言理解成使用规定格式和语法的代码解释器模式描述了如何构成一个简单的语言解释器,主要应用在使用面向对象语言开发的编译器中,它描述了如何为简单的语言定义一个文法,如何在该语言中表示一个句子,以及如何解释这些句子。例如我们经常利用正则表达式检测某些字符串是否符合我们规定的格式。

2023-07-12 16:44:02 171

转载 设计模式(十四)-----命令模式(Command Pattern)

命令模式的本质是将请求封装成对象,将发出命令与执行命令的责任分开,命令的发送者和接收者完全解耦,发送者只需知道如何发送命令,不需要关心命令是如何实现的,甚至是否执行成功都不需要理会。命令模式的关键在于引入了抽象命令接口,发送者针对抽象命令接口编程,只有实现了抽象命令接口的具体命令才能与接收者相关联。另外命令可以像强对象一样可以被存储和传递,所以可支持撤销的操作使用命令模式的优势在于降低了系统的耦合度,而且新命令可以很方便添加到系统中,也容易设计一个组合命令。

2023-07-12 15:17:02 202

转载 设计模式(十三)-----责任链模式(Chain of Responsibility Pattern)

职责链可以将请求的处理者组织成一条链,并将请求沿着链传递,如果某个处理者能够处理请求则处理,否则将该请求交由上级处理。客户端只需将请求发送到职责链上,无须关注请求的处理细节,通过职责链将请求的发送者和处理者解耦了,这也是职责链的设计动机。职责链模式可以简化对象间的相互连接,因为客户端和处理者都没有对方明确的信息,同时处理者也不知道职责链中的结构,处理者只需保存一个指向后续者的引用,而不需要保存所有候选者的引用。

2023-07-12 14:45:52 418

原创 mysql(二)Explain详解

explain命令是查看MySQL查询优化器如何执行查询的主要方法,可以很好的分析SQL语句的执行情况。每当遇到执行慢(在业务角度)的SQL,都可以使用explain检查SQL的执行情况,并根据explain的结果相应的去调优SQL等。

2023-07-12 11:31:38 146

转载 设计模式(十二)-----代理模式(Proxy Pattern)

通过上面的例子,我们可以很清楚地理解什么是代理模式:代理模式的设计动机是通过代理对象来访问真实对象,通过建立一个对象代理类,由代理对象控制原对象的引用,从而实现对真实对象的操作。在代理模式中,代理对象主要起到一个中介的作用,用于协调与连接调用者(即客户端)和被调用者(即目标对象),在一定程度上降低了系统的耦合度,同时也保护了目标对象。但缺点是在调用者与被调用者之间增加了代理对象,可能会造成请求的处理速度变慢,

2023-07-11 18:03:16 92

转载 设计模式(十一)-----享元模式(Flyweight Pattern)

享元模式通过共享技术有效地支持细粒度、状态变化小的对象复用,当系统中存在有多个相同的对象,那么只共享一份,不必每个都去实例化一个对象,极大地减少系统中对象的数量。比如说一个文本系统,每个字母定一个对象,那么大小写字母一共就是52个,那么就要定义52个对象。如果有一个1M的文本,那么字母是何其的多,如果每个字母都定义一个对象那么内存早就爆了。那么如果要是每个字母都共享一个对象,那么就大大节约了资源。在了解享元模式之前我们先要了解两个概念:内部状态、外部状态。

2023-07-11 17:01:55 97

转载 设计模式(十)-----外观模式(Facade Pattern)

外观模式通过对客户端提供一个统一的接口,用于访问子系统中的一群接口。使用外观模式有以下几点好处:更加易用:使得子系统更加易用,客户端不再需要了解子系统内部的实现,也不需要跟众多子系统内部的模块进行交互,只需要跟外观类交互就可以了;松散耦合:将客户端与子系统解耦,让子系统内部的模块能更容易扩展和维护。更好的划分访问层次:通过合理使用 Facade,可以更好地划分访问的层次,有些方法是对系统外的,有些方法是系统内部使用的。把需要暴露给外部的功能集中到门面中,这样既方便客户端使用,也很好地隐藏了内部的细节。

2023-07-11 16:41:20 80

转载 设计模式(九)-----装饰器模式(Decorator Pattern)

当需要对类的功能进行拓展时,一般可以使用继承,但如果需要拓展的功能种类很繁多,那势必会生成很多子类,增加系统的复杂性,并且使用继承实现功能拓展时,我们必须能够预见这些拓展功能,也就是这些功能在编译时就需要确定了。那么有什么更好的方式实现功能的拓展吗?答案就是装饰器模式。装饰器模式可以动态给对象添加一些额外的职责从而实现功能的拓展,在运行时选择不同的装饰器,从而实现不同的行为;比使用继承更加灵活,通过对不同的装饰类进行排列组合,创造出很多不同行为,得到功能更为强大的对象;

2023-07-11 16:27:59 73

转载 设计模式(八)-----组合模式(Composite Pattern)

组合模式将叶子对象和容器对象进行递归组合,形成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性,能够像处理叶子对象一样来处理组合对象,无需进行区分,从而使用户程序能够与复杂元素的内部结构进行解耦。组合模式最关键的地方是叶子对象和组合对象实现了相同的抽象构建类,它既可表示叶子对象,也可表示容器对象,客户仅仅需要针对这个抽象构建类进行编程,这就是组合模式能够将叶子节点和对象节点进行一致处理的原因。

2023-07-11 15:10:35 98

原创 设计模式(七)-----桥接模式(Bridge Pattern)

将抽象部分与他的实现部分分离,这样抽象化与实现化解耦,使他们可以独立的变化.如何实现解耦的呢,就是通过提供抽象化和实现化之间的桥接结构。

2023-07-11 14:33:29 648

原创 设计模式(六)-----适配器模式(Adapter Pattern)

适配器模式主要用于将一个类的接口转化成客户端希望的目标类格式,使得原本不兼容的类可以在一起工作,将目标类和适配者类解耦;同时也符合“开闭原则”,可以在不修改原代码的基础上增加新的适配器类;将具体的实现封装在适配者类中,对于客户端类来说是透明的,而且提高了适配者的复用性,但是缺点在于更换适配器的实现过程比较复杂。适配器模式是一种非常常见的设计模式,它可以帮助我们解决不兼容的类或接口之间的问题,同时也可以帮助我们在不改变原有代码的情况下,增加新的功能。

2023-07-10 15:29:30 319

转载 设计模式(五)-----原型模式(Prototype Pattern)

原型模式主要用于对象的创建,使用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。简单来说,就是对自身进行拷贝,原形就是自身,原型模式可以理解为对自身的一种备份原型模式是一种比较简单的模式,也非常容易理解,实现一个接口,重写一个方法即完成了原型模式。在实际应用中,原型模式很少单独出现。经常与其他模式混用,他的原型类Prototype也常用抽象类来替代。

2023-07-10 14:13:54 38

转载 java--------对象拷贝

我们知道在Java中存在这个接口Cloneable,实现该接口的类都会具备被拷贝的能力,同时拷贝是在内存中进行,在性能方面比我们直接通过new生成对象来的快,特别是在大对象的生成上,使得性能的提升非常明显。然而我们知道拷贝分为深拷贝和浅拷贝之分,但是浅拷贝存在对象属性拷贝不彻底问题。

2023-07-07 16:16:16 1428

转载 Spring Cloud Alibaba-----整合Gateway

大家都知道在微服务架构中,一个系统会拆分为多个微服务。那么作为客户端要如何去调用这么多的微服务,如果没有网关存在,我们只能在客户端记录每个微服务的地址,然后去分别用。每个业务都会需要鉴权、限流、权限校验、跨域等逻辑,如果每个业务都各自为战,自己造轮子实现一遍,会很蛋疼,完全可以抽出来,放到一个统一的地方去做。

2023-07-05 17:27:22 1322

转载 Spring Cloud Alibaba-----整合Seata

事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。在关系数据库中,一个事务由一组SQL语句组成。事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。:事务是一个不可分割的工作单元,事务中包含的所有操作要么都做,要么都不做。:事务必须使数据库从一个一致性状态变到另一个一致性状态,事务的中间状态不能被观察到。

2023-07-05 14:57:52 3670

原创 设计模式(四)-----建造者模式(Builder Pattern)

建造者模式将复杂产品的创建步骤分解在在不同的方法中,使得创建过程更加清晰,从而更精确控制复杂对象的产生过程;通过隔离复杂对象的构建与使用,也就是将产品的创建与产品本身分离开来,使得同样的构建过程可以创建不同的对象;并且每个具体建造者都相互独立,因此可以很方便地替换具体建造者或增加新的具体建造者,用户使用不同的具体建造者即可得到不同的产品对象。

2023-07-01 16:08:42 144

原创 Spring Cloud Alibaba-----整合Sentinel

随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、流量路由、熔断降级、系统自适应过载保护、热点流量防护等多个维度保护服务的稳定性。丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。完备的实时监控:Sentinel 同时提供实时的监控功能。

2023-06-27 17:20:01 1062

原创 linux-----命令大全

查看文件内容,less用法比more更具有弹性,可以使用 [pageup][pagedown] (前后按键)等按键的功能来往前往后翻看文件,而且less在查看之前不会加载整个文件。通过重定向,我们可以将字符串写入文件中,字符串后面加 > 符号和文件名,就可以将本该显示到标准输出的字符串,写入文件中,如果文件不存在,就会自动创建文件。:用于显示指定文件末尾内容,我们一般查看日志时肯定是查看最新的内容,也就是从尾部开始查看,tail就能很好的帮助我们查看最近的内容。对于文件,将列出文件名以及其他信息。

2023-06-25 14:32:09 626

原创 设计模式(三)-----单例模式(SingletonPattern)

单例模式是一种常用的软件设计模式,其定义是单例对象的类只能允许一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。一般情况下直接使用饿汉式就好了,如果明确要求要懒加载(lazy initialization)会倾向于使用静态内部类,如果涉及到反序列化创建对象时会试着使用枚举。

2023-06-13 14:08:29 395

原创 设计模式(二)-----工厂模式(Factory Pattern)

工厂模式将目的将创建对象的具体过程屏蔽隔离起来简单工厂模式(Simple Factory)工厂方法模式(Factory Method)抽象工厂模式(Abstract Factory)这三种模式从上到下逐步抽象,并且更具一般性。《设计模式》将简单工厂模式看为工厂方法模式的一种特例,两者归为一类。我们先从以下案例对工厂模式做个初步的了解:(1)在没有工厂的时代,如果客户需要一款奔驰车,那么就需要客户去创建一款奔驰车,然后拿来用。

2023-06-09 17:01:57 167

原创 设计模式(一)-----概述

设计模式(Design Pattern)代表了最佳实践,通常是软件开发人员在开发中面临的一般问题的解决方案,这些解决方案是众多软件开发人员经过相当长一段时间的试错后总结出来的。任何被广泛使用的技术或者功能都会有特定的经验总结,因此面向对象有面向对象的设计模式,软件架构有软件架构的设计模式,数据口有数据库的设计模式。对于转发类型的芯片,其软件架构有一定的设计模式,同时可编程的微码也存在一定的设计模式与设计原则。当然,我们常说的设计模式默认情况下指的是面向对象设计模式。

2023-06-09 14:41:43 143

原创 Redis(进阶)-----Redis实现分布式锁

在多线程的环境下,为了保证一个代码块在同一时间只能由一个线程访问,Java中我们一般可以使用synchronized语法和ReetrantLock去保证,这实际上是本地锁的方式。但是现在公司都是流行分布式架构,在分布式环境下,如何保证不同节点的线程同步执行呢?实际上,对于分布式场景,我们可以使用分布式锁,它是控制分布式系统之间互斥访问共享资源的一种方式。

2023-06-07 17:29:44 940

转载 Redis(进阶)-----Redis简介

因为Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了(毕竟采用多线程会有很多麻烦!)Redis利用队列技术将并发访问变为串行访问绝大部分请求是纯粹的内存操作(非常快速)采用单线程,避免了不必要的上下文切换和竞争条件非阻塞IO优点:(1)速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)

2023-06-07 11:41:22 55

空空如也

空空如也

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

TA关注的人

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