- 博客(133)
- 收藏
- 关注
原创 如何优雅的使用 IDEA Debug 进行调试
Debug 是我们在开发过程中经常会使用到的一种排查问题的手段,我们用它来定位分析异常的出现,以及程序在运行中参数的变化。IDEA 本身具有很强的调试功能,掌握 IDEA 的一些 Debug 技巧,对我们开发和排查问题的效率会有很大的提升。
2022-11-13 23:45:35
3273
1
原创 设计模式之享元模式(结构型)
享元模式(Flyweight),主要用来减少创建对象的数量,以减少内存占用和提高性能。运用共享技术有效的支持持大量细粒度的对象。轻new内部状态外部状态。
2022-11-03 06:00:00
403
原创 设计模式之中介者模式(行为型)
中介者模式(Mediator),用一个中介对象来封装一系列的对象交互。中介者使个对象不需要显式的互相引用,从而使其松耦合,而且可以独立地改变它们之间的交互中介者模式很好的体现了迪米特法则,如果两个类不必彼此直接通信,那个这两个类就不应当发生直接的相互作用,如果一个类要调用另一个类的某个方法,可以通过第三者来转发这个调用。
2022-11-01 06:00:00
542
原创 设计模式之命令模式(行为型)
命令模式(Command),将一个请求封装为一个对象,请求以命令的形式包裹在对象中,传递给调用对象,调用对象寻找可以处理该命令的合适的对象,并将命令传递给相应的对象,该对象执行命令。请求本身成为一个对象。
2022-10-26 06:00:00
763
原创 设计模式之责任链模式(行为型)
链是什么?链是一系列节点的集合,各个节点可以灵活的拆分重组责任链模式:责任链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这个对象连成一条线,并沿着这条链传递该请求,知道有一个对象处理它为止。
2022-10-25 23:35:00
318
6
原创 设计模式之组合模式(结构型)
组合模式(Composite),将对象组合成树形结构以表示部分-整体的层次结构。组合模式使用户对单个对象和组合对象的使用具有一致性。
2022-10-21 06:00:00
345
原创 设计模式之备忘录模式(行为型)
备忘录(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样我们就可以将该对象复原到原先保存的状态。很多时候我们需要记录一个对象的内部状态,允许用户取消不确定或者错误的操作,恢复到他原来的状态,备忘录模式就提供了这样一种可以恢复状态的机制,可以使我们比较方便的回到某一个历史状态,比如游戏的存档、数据库的事务等。
2022-10-20 06:00:00
354
原创 设计模式之外观模式(结构型)
外观模式(Facade)为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使系统更加容易使用当一个系统随着时间的流逝,子系统越来越多,功能越来越复杂,如果系统内某个接口改变,客户端也要跟着改变,违背了开闭原则,也违背了迪米特法则,所以有必要为多个子系统提供一个统一的接口,从而降低系统的耦合度,这就是外观模式的目标。...
2022-07-19 06:00:00
245
原创 设计模式之模板方法模式(行为型)
当我们要完成在某一细节层次一致的一个过程或者一系列步骤,但个别步骤在更详细的层次上实现可能不同的时候,我们通常使用模板方法模式处理。AbstractClass 抽象类,抽象模板,定义并实现了一个具体模板方法,给出了一个算法的基本骨架,组成步骤有相应的抽象方法,在子类中进行实现ConcreteClass,实现父类定义的多个抽象方法,每个 AbstractClass 都可以有多个 ConcreteClass 实现,每个 ConcreteClass 都可以给出这些抽象方法的不同实现,使父类方法的实现各不相同
2022-06-27 22:21:35
140
原创 设计模式之策略模式(行为型)
策略模式的定义:策略模式是一种行为型模式,定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。比如商场收银时如何促销,用打折还是返利,其实都是一些算法,这些算法本身就是一种策略,这些算法是随时都可以互相替换的,这就是变化点,而封装变化是我们面向对象的一种很重要的思维方式。
2022-06-26 00:23:03
302
原创 从头开始搞懂 MySQL(08)count(*) 很慢怎么办
在开发系统的时候,我们可能经常需要计算一个表的行数,我们一般都是用来查询,如果系统中记录越来越多,这条 SQL 也越来越慢。为什么 MySQL 不直接记录一个总数,每次要查询的时候直接读出来呢?我们先来了解一下 count(*) 语句是怎么实现的,为什么这么实现。
2022-05-31 18:00:00
1689
1
原创 从头开始搞懂 MySQL(07)为什么同一条 SQL 时快时慢
我们在 一条 SQL 更新语句是如何更新的 中,知道了 WAL 机制,InnoDB 在处理更新语句的时候,只是做了一个写日志的磁盘操作,这个日志叫做 redo log,更新内存写完 redo log 之后,就会返回给客户端,这次更新成功什么是 flash在 redo log 记录的差不多后,会把内存中的数据写入磁盘中,这个过程叫做 flush,在这个 flush 操作执行之前,内存数据页跟磁盘数据页内容不一致,我们称这个内存页为脏页,内存数据写入到磁盘中后,内存和磁盘上的数据页内容一致,称为干净页第一种情况
2022-05-30 06:00:00
4457
原创 从头开始搞懂 MySQL(06)索引的选择
我们已经了解了唯一索引和普通索引的区别,那么在不同的业务场景下,我们应该选择普通索引还是唯一索引呢?我们还是使用第 4 篇文章中的例子来说明,假设字段 card 上的值都不重复我们从这两种索引对查询语句和更新语句的性能影响来进行分析。
2022-04-09 16:19:37
1171
原创 从头开始搞懂 MySQL(05)行锁、表锁、全局锁
行锁是针对数据表中行记录的锁,MySQL 的行锁是在引擎层实现的,并不是 所有的引擎都支持行锁,比如 MyISAM 就不支持,InnoDB 支持行锁,避免了并发控制时使用表锁。
2022-03-28 23:03:12
746
原创 从头开始搞懂 MySQL(04)索引
我们学习数据库时肯定会提到索引,或者在日常工作中,如果有一个慢 SQL,分析原因后,我们可能就会说给某个字段加个索引。索引到底是什么东西呢?索引是为了提高数据查询的效率,就像书的目录一样,在不看目录的情况下,我们想要找到一本书里面的内容,可能需要从头开始翻很久才能找到,有了目录之后,我们才能轻易找到想要的内容。
2022-03-24 23:21:31
1709
原创 从头开始搞懂 MySQL(03)事务隔离性
提到事务,我们肯定不陌生,和数据库打交道的时候,我们肯定会用到事物经典案例就是转账,小孙要给小白转 100 块钱,现在小孙的卡里只有 100 块钱。转账过程具体到程序里会有一系列操作,查询余额、扣除 100、更新余额等,这些操作必须是一体的,不然在查询余额后,还没有扣除之前,借着这个时间差再查一次,然后再给另外一个朋友转账。这个时候就要用到事物这个概念了。
2022-03-23 23:01:50
1547
原创 从头开始搞懂 MySQL(02)如何执行一条 SQL 更新语句
在上篇文章中我们了解了一个查询语句是怎么执行的,并了解了执行过程中涉及到的一些处理模块。一条查询 SQL 的执行过程需要经过连接器、分析器、优化器、执行器等模块,最后到达存储引擎。一条更新语句的执行流程是怎样的呢?我们还是从一个更新 SQL 说起,如下是一个表的创建语句,表有一个主键 ID 和一个 int 类型字段 num:如果要将 ID 为 1 的数据 num 加 1,SQL 语句如下:首先,可以肯定的说,查询 SQL 语句的流程,更新语句同样会走一遍,如下图。
2022-03-22 21:19:59
1256
原创 从头开始搞懂 MySQL(01)如何执行一条 SQL 查询语句
比如:一个最简单的表 test,表中只有一个字段 ID,我们执行下面的查询语句我们看到的仅仅只有输入一条语句,返回一个结果,却不了解这条语句在 MySQL 内的执行过程所以今天让我们一起把 MySQL 拆开,看看里面都有哪些零件,通过这个拆解让我们对 MySQL 有更深入的理解,让我们在碰到 MySQL 的一些异常或者问题的时候,能够快速定位并解决问题下面是 MySQL 的基本架构示意图,可以清楚地看到 SQL 语句在 MySQL 的各个功能模块中的执行顺序总体来说,MySQL 可以分为 Server 层和
2022-03-21 21:08:23
1056
原创 java 常用后端分页类
import lombok.Data;import java.io.Serializable;@Datapublic class Page implements Serializable { private static final long serialVersionUID = -3989189348324121L; /** * 默认页码 */ public static final int DEFAULT_PAGE_NO = 1; /**
2022-03-17 15:30:36
951
原创 设计模式之代理模式(结构型)
代理模式的定义:由于某些原因需要给对象提供一个代理以控制该对象的访问。这时访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。
2022-02-13 21:28:07
233
原创 设计模式之桥接模式(结构型)
桥接模式(Bridge):将抽象与实现分离,使它们可以独立变化比如我们常用的 JDBC 连接数据库的时候,在各个数据库之间进行切换,基本不需要改动什么代码,甚至丝毫不用动,原因就是 JDBC 提供统一接口,每个数据库提供各自的实现,用一个叫做数据库驱动的程序来桥接就可以了。
2022-01-22 16:53:45
568
原创 设计模式之装饰模式(结构型)
装饰器模式(Decorator Pattern)增加一个装饰类包裹原来的类,包裹的方式一般是通过在将原来的对象作为装饰类的构造函数的参数,可以实现对现有对象功能的拓展,使类功能更加灵活。装饰模式属于结构型模式。
2022-01-21 23:51:27
492
原创 设计模式之适配器模式(结构型)
适配器模式 Adapter:将一个类的接口转换为客户端希望的另外一个接口,使原本因为接口不匹配(或者不兼容)而无法在一起工作的两个类能够在一起工作。像是 Mac 的转换头、插座、数据线等,都是适配器模式的体现。
2022-01-19 23:26:00
679
原创 设计模式之原型模式(创建型)
如果对象的创建成本比较大,而同一个类的不同对象之间差别不大(大部分字段相同),这种情况下,我们可以利用已有对象(原型)进行复制(或者叫拷贝)的方式,创建一个或多个相同或相似的对象,以达到节省资源的目的,这种基于原型来创建对象的方式就叫做原型模式。用这种方式创建对象也不用知道对象创建的细节,比较高效。
2022-01-18 23:26:49
401
原创 设计模式之访问者模式 (行为型)
1、访问者模式定义访问者模式是一种从操作的对象结构中分离算法的方式,它可以在不改变数据结构的前提下定义作用于这些元素的新操作,遵循开闭原则Represent an operation to be performed on elements of an object structure. Visitor lets you define a new operation without changing the classes of the elements on which it operates2、
2022-01-16 14:09:54
187
原创 2021 款 MacBook Pro M1开发环境搭建(JDK、Maven、Homebrew、git、idea、MySQL、Navicat、docker、redis)
2021 款 MacBook Pro M1开发环境搭建(JDK、Maven、Homebrew、git、idea、MySQL、Navicat、docker、redis)
2022-01-15 16:39:23
7005
3
原创 springboot 项目整合 mybatis 打印 SQL 语句方法
springboot 项目整合 mybatis 后想打印 SQL 语句,找到以下几个方法:1、修改 application.properties 配置文件mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImplapplication.yml 文件:mybatis: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutIm
2022-01-11 22:14:59
4155
1
原创 设计模式之建造者模式(创建型)
/第一步:装CPU public abstract void BuildCPU();//第二步:装主板 public abstract void BuildMainboard ();//第三步:装硬盘 public abstract void BuildHD ();//获得组装好的电脑 public abstract Computer GetComputer ();}//电脑组件的集合 private List < String > parts = new ArrayList < String >();
2022-01-07 22:53:23
807
原创 使用多个 @RequestBody 接收参数传递给 Controller
在一个 Controller 提供的接口中,使用多个 @RequestBody 注解接收参数
2021-12-28 21:46:15
18103
2
原创 Windows 系统电脑如何下载安装并运行 Kubectl 查看云服务器 k8s 集群资源
Windows 系统电脑如何下载安装并运行 Kubectl 查看云服务器 k8s 集群资源
2021-12-21 18:03:58
1131
原创 线上问题分析诊断神器 Arthas(阿尔萨斯)
Arthas官方文档:https://arthas.aliyun.com/en-us/index.htmlArthas 是一款开源在线 java 诊断工具,采用命令行交互模式,支持 web 端在线诊断。Arthas 可以进行方法粒度(包括 private 方法)的耗时检测,入参,返回值查看,变量设置等。可以部分的代替线上 debug 功能,方便我们进行问题的定位和诊断
2021-12-19 23:08:09
17373
原创 Java 8 Stream 流详解
Java 8 中有两个重要的改变,一个是 Lambda 表达式,另外一个是 Stream API(java.util.stream.*)Stream 流的特点:- stream 流不会改变数据源,一般会产生一个新的集合来存储按照我们特定规则计算后的结果- stream 会延迟执行,在调用终端操作时中间操作才会执行
2021-12-09 15:12:35
912
原创 设计模式 一 单例模式(创建型)
一个类只能有一个实例对象,这个类称为单例类这个类的实例必须是这个类自己创建的,而不是使用 new这个类必须向整个系统提供这个实例,提供全局访问的方法。
2021-12-04 22:13:36
572
原创 设计模式概述
1、设计模式是什么?设计模式的一般定义为:设计模式(Design Pattern)是一套反复使用、多人知晓的,经过分类编目的,代码设计总结经验,使用设计模式是为了可重用代码,让代码更容易被他人理解并保证代码可靠性设计模式一般包含模式名称、问题、目的、解决方案、效果等组成要素,我们一般比较关注的是模式名称(Pattern Name),问题(Problem),解决方案(Solution)和效果(Consequences)根据它们的用途,设计模式可以分为 创建型, 结构型,行为型 三种创建型模式
2021-11-29 22:19:00
309
原创 Maven 使用
https://www.bilibili.com/video/BV1Ah411S7ZE?p=14&spm_id_from=pageDriverMaven 项目结构<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:sch
2021-11-26 21:18:16
411
原创 git 使用
一、git 安装安装完只要在桌面右键点击能出来这个就行,点 Git Bash 这个选项弹出一个命令窗口,就说明安装成功了二、git 基本操作1、git 仓库全局配置安装完成之后设置全局机器信息,所有 git 仓库都会使用这个配置$ git config --global user.name "userName"$ git config --global user.email "email@example.com"2、创建一个空目录$ mkdir gitTest # 创建文件夹 gitTe
2021-11-23 16:56:16
478
原创 六、数组中的逆序对
题目:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。示例:输入: [7,5,6,4]输出: 5限制:0 <= 数组长度 <= 50000代码实现:方法一:暴力解法(没啥说的很简单,嗯,超时了。。)class Solution { public static int reversePairs(int[] nums) { int n = 0; for(int
2021-11-22 19:16:49
124
原创 数据结构和算法(十九)插值查找
1、插值查找插值查找是根据查找关键字与查找表中最大最小关键字比较后的查找方法。插值查找基于二分查找,将查找点的选择改进为自适应选择,提高查找效率2、插值查找基本思想插值查找类似平时我们查字典的时候,查一个以 s 开头的单词时,绝对不会用二分查找,从字典的中间第一页开始,因为我们知道它的大概位置是在字典的较后面部分,所以可以从后面的某处查起。我们先从首字母 s 的地方开始查找,然后再根据第二个字母在字母表中的位置,找到对应位置再继续查找,这样重复这个过程,直到找到我们查找的这个单词这就是插值查找的基
2021-11-21 22:03:36
823
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人