- 博客(211)
- 资源 (3)
- 收藏
- 关注
原创 【mybatis-generator】mybatis代码生成器generator,生成文件名自定义配置
在根据表名生成实体类时,其类名和字段名默认使用驼峰命名,比方说 CREATE_DATE,生成的属性名字就是createDate相关属性设置:但是表名有时候比较长,我们就想要自己定义生成的文件名。
2024-01-12 21:03:51 1906
原创 单机环境下定时任务的基本原理和常见解决方案(二)之时间轮原理分析
Timer实现方式最小堆最小堆基于时间轮写入效率O(logN)O(logN)类HashMap,近似O(1)查询效率O(1)O(1)近似O(1)优点实现简单 O(1)可以对大量定时任务进行统一调度线程池执行,有异常捕获机制写入性能高缺点对于大量定时任务不便于管理单线程执行;没有异常捕获机制写入效率较低,在需要大量添加定时任务的场景下会影响性能单线程执行;没有异常捕捉机制。
2023-07-28 20:13:11 801
原创 【Redis】Redis如何实现分布式锁及Redission分布式锁源码分析(一)
在单进程的系统中,当存在多个线程可以同时改变某个变量(共享变量)时,就需要注意该变量在多线程环境下是否线程安全,我们一般通过加锁来保证线程安全,即多线程操作下让代码也按照我们期望的方式执行。加锁的目的就是为了保证多个线程在一个时刻只有一个代码块可以执行(通过操作一个每个线程可见的共享变量来实现加锁),常用的单机锁就是synchronized,lock。但是如果部署多台机器,或者需要在不同的服务之间进行互斥操作,那么单机锁的方式就不适用了。
2023-06-16 22:17:19 3518
转载 vscode使用restClient实现各种http请求
我们在使用rest client请求时,可以使用变量,如下图:我们定义了一个orgCode变量,并在请求时作为请求的header中的orgCode数据。通过{{baseUrl}}则使用了环境变量中的值。那我们该如何选择环境变量呢?如下图:当点击右下角的环境位置时,上面就会出现已有的环境变量的下拉框,这时我们就可以选择环境变量。那么,我们如何使用接口返回的数据呢?
2023-03-22 21:20:04 1958
原创 【并发编程】线程的基本原理和Thread Dump线程分析
我们平时在线程中使用的sleep、wait、join等操作,它都会抛出一个InterruptedException异常,为什么要抛出这个异常,是因为它在阻塞期间,必须要能够响应被其他线程发起的中断请求,而这个响应是通过InterruptedException 来实现的。线程在运行过程中,会存在几种不同的状态,一般来说,在Java中,线程的状态一共是6种状态,分别是。方法,这个方法就是实现线程中断操作的,其实现原理就是通过修改线程的中断标识来实现线程中断。我们在使用线程的时候,如果出现问题,怎么排查?
2023-03-22 17:42:46 481
原创 failed to run command ‘java‘ : No such file or directory
查看了下C盘对应的java.exe的文件,是一个快捷方式的链接,其对应的目标地址和我配置的。jdk的环境变量是已经配置好了的,我重新在cmd环境下执行了。本地运行一个项目的时候提示无法执行java命令。,确实无法找到对应java的执行文件。路径不一致,删除该快捷方式就ok了。
2023-03-22 16:57:16 429
原创 【设计模式】访问者模式
简单来说,访问者模式就是封装一些作用于某种数据结构中的各元素的操作,它可以在不改变这个数据结构的前提下定义作用于这些元素的新操作。数据结构稳定,但是作用于数据结构的操作经常变化需要数据结构与数据操作分离需要对不同数据类型(元素)进行操作,但是有不使用判断具体类型使得数据结构和作用于结构上的操作解耦,使得操作集合可以独立变化。扩展性好,添加新的操作或者说访问者会非常容易。增加新的元素类型会非常困难,每次新增元素类型,则访问者类必须增加对应元素类型的操作。
2023-03-12 23:10:16 954 1
原创 【设计模式】状态模式
*优点 **结构清晰,状态模式将与特定状态相关的行为封装到一个状态类中,并将不同状态的行为分割开来,满足“单一职责原则”,状态类职责明确,有利于扩展新的状态和转换关系缺点状态模式的使用必然会增加系统的类与对象的个数。状态模式对开闭原则的支持并不太好,对于可以切换状态的状态模式,增加新的状态类需要修改那些负责状态转换的源码,否则无法切换到新增状态,而且修改某个状态类的行为也需要修改对应类的代码。
2023-03-12 16:21:46 529
原创 【设计模式】命令模式和解释器模式
优点降低耦合 : 通过引入中间件(命令抽象接口), 将请求发起者与请求的接收者进行解耦;扩展性高 : 如果要扩展新命令 , 直接定义新的命令对象即可缺点增加复杂度 : 扩展命令会导致类的数量增加 , 增加了系统的复杂度需要针对每个命令 开发一个与之对应的命令类优点扩展性强,可以很方便的扩展语法缺点实际利用场景比较少语法规则复杂时,会引起类膨胀,增加系统维护难度。
2023-03-11 22:41:51 467
原创 【设计模式】中介者模式和观察者模式
中介模式的英⽂翻译是 Mediator Design Pattern。在 GoF 中的《设计模式》⼀书中,它是这样定义的:中介模式定义了⼀个单独的(中介)对象,来封装⼀组对象之间的交互。将这组对象之间的交互委派给中介对象,来避免对象之间的直接交互。属于行为型模式通过引⼊中介这个中间层,将⼀组对象之间的交互关系(或者说依赖关系)从多对多(⽹状关系)转换为⼀对多(星状关系)我们的注册中心就是中介者模式的典型应用场景,比方说朋友圈,QQ群, 淘宝商城都是中介者模式在生活上的应用抽象中介者具体中介者。
2023-03-11 17:51:26 682
原创 【设计模式】备忘录模式和迭代器模式
在负责人类中可以存储一个或多个备忘录对象,它只负责存储备忘录对象,而不能修改备忘录对象(负责人类只提供备忘录对象的读写接口,不提供备忘录属性的读写接口)。对于⼤对象的备份来说,备份占⽤的存储空间会⽐较⼤,备份和恢复的耗时会⽐较⻓。针对这个问题,不同的业务场景有不同的处理⽅式。在不违背封装原则的前提下,捕获⼀个对象的内部状态,并在该对象之外保存这个状态,以便之后恢复对象为先前的状态,属于行为型模式。它是一个需要保存状态的类,可以创建一个备忘录/备份,并存储它的当前内部状态,也可以使用备忘录来恢复其内部状态。
2023-03-11 15:03:09 725
原创 【设计模式】装饰器模式
装饰器模式主要用于解决继承关系过于复杂的问题,通过组合来替代继承。它主要的作⽤是给原始类添加增强功能。除此之外,装饰器模式还有⼀个特点,那就是可以对原始类嵌套使⽤多个装饰器。为了满⾜这个应⽤场景,在设计的时候,装饰器类需要跟原始类继承相同的抽象类或者接⼝。
2023-03-10 22:13:37 684
原创 【设计模式】模板方法模式和门面模式
经典的例子就是app和服务端的交互,app有一个复杂模块,需要从三个系统获取对应的数据来组装,如果app之间和三个系统交互,就要进行三次网络传输,增加一个中间层,将三个系统的接口进行整合封装,对外提供一个接口给app调用,那么就能明显提高性能。模板模式十分简单,我们用其实现一个去银行办理业务的例子,无论你去银行办理什么业务,都需要经过: 取号,排队,办理业务几个步骤 ,这里还增加了一个钩子方法,对于某些特殊的情形,可以增加额外的处理步骤。门⾯模式为⼦系统提供⼀组统⼀的接⼝,定义⼀组⾼层接⼝让⼦系统更易⽤。
2023-03-10 21:15:23 691
原创 【设计模式】享元模式和委派模式
享元模式中的“复⽤”可以理解为“共享使⽤”,在整个⽣命周期中,都是被所有使⽤者共享的,主要⽬的是节省空间。第三方的代码不需要知道A的存在,也不需要和A发生直接的联系,通过B就可以直接使用A的功能,这样既能够使用到A的各种功能,又能够很好的将A保护起来,一举两得。Integer.valueOf的源码中对数字大小做了个判断,如果是在[-128,127]的范围内,其值是从缓存中获取的, 因为这个范围的数字的使用频率是最高的,所以jdk使用了享元模式来共享数据,提高性能。看,它们是完全不同的。
2023-03-10 17:40:40 755
原创 【设计模式】适配器模式和桥接模式
通过适配器模式,客户端可以使用统一的一套接口,这样实现起来更简洁明了复用了现有的类和代码,减少代码的改动量一个类存在两个(或多个)独立变化的维度,且这两个(或多个)维度都需要独立进行扩展系统不希望使用继承或因为多层次继承导致类的个数急剧增加需要在抽象和具体实现之间增加更多的灵活性。
2023-03-09 22:02:53 649
原创 【设计模式】工厂模式
简单工厂:专门定义一个类(Factory)来负责创建其它类的实例,被创建的实例通常都具有共同的父类或实现同一个接口。工厂(方法)模式:定义一个用于创建对象的接口(工厂接口IConfigParserFactory),让子类或实现去决定实例化哪个类。抽象工厂模式:提供接口给客户端用以创建一系列相关或者相互依赖的对象(往往会有一个可以创建多个产品等级结构的产品的工厂)
2023-03-08 22:21:58 718
原创 【设计模式】策略模式和责任链模式
责任链模式就是将请求沿着处理链进行发送,每个链节点收到请求后,都可以对请求进行处理或者将其传递给链上的下一个节点。实际使用责任链的时候,一个请求既可以在被任一节点处理后直接结束,也可以走完整个链路再结束,具体视使用场景决定。策略模式将算法的实现分别封装起来,让他们之间可以方便的进行替换,而不需要去改动代码。举个例子:拼多多现在有促销活动,其优惠策略可能是拼团活动价格,优惠券抵扣,补贴价格,购物返现等…现在有一个db的操作,需要经过组长,领导,DBA的三重审批才可以执行,使用责任链代码实现如下。
2023-03-03 22:40:56 760
原创 【设计模式】代理模式
CGLib动态代理继承了被代理的类;JDK动态代理实现了被代理类的接口JDK动态代理和CGLib动态代理都是在运行时生成字节码文件,JDK动态代理直接写Class字节码,CGLib是用过ASM框架写字节码,CGLib生成代理类字节码文件的效率更低CGLib使用了FastClass机制来调用方法,比通过反射调用的JDK动态代理的执行效率更高。
2023-03-03 13:22:43 393
原创 Java8从入门到精通 笔记
java8新特性 lambda表达式,stream用Lambda表达式就可以用更简洁的代码实现这一功能使用 Lambda 表达式结合 Stream API, 只要给出相应的集合, 我们就可以完成对集合的各种过滤并输出结果信息。Lambda 表达式在 Java 语言中引入了 “->” 操作符, “->” 操作符被称为 Lambda 表达式的操作符或者箭头操作符, 它将 Lambda 表达式分为两部分:只包含一个抽象方法的
2022-12-03 23:14:13 659
原创 git clone permission denied(已上传公钥)
将本地生成的key(一般在本地的~/.ssh/id_rsa.pub文件中)添加到gitlab。排查后发现是由于从OpenSSH 8.2 版本开始,客户端默认禁用了ssh-rsa。为了解决这个问题,我们可以在本地开启ssh-rsa的支持。或者使用其他加密算法.
2022-09-24 10:06:03 1384
转载 你会问问题吗?
在工作和生活中,总是会有很多人问题我很多技术方面的问题。有一些时候,问问题的和答问题的总是会有一些不爽的事情发生。如下面的几种情况:比如:“我的电脑老是蓝屏,怎么办?”,通常这样的问题90%以上的回答是:“重装吧”。这让问问题的人感到很沮丧,但你不能不承认那不是答案。而且有时候让人无法解答,比如:“我的makefiel出错了,你帮我看看我的makfile”,我通常会非反问,报了什么错吗?另一种情况是,回答问题的人首先先对问问题的人的抱怨,你问的问题就不对,或是,你问的这个问题是什么意思,而导致问问题的
2021-10-24 14:51:01 158
转载 X-Y PROBLEM
X-Y Problem对于X-Y Problem的意思如下:1)有人想解决问题X2)他觉得Y可能是解决X问题的方法3)但是他不知道Y应该怎么做4)于是他去问别人Y应该怎么做?简而言之,没有去问怎么解决问题X,而是去问解决方案Y应该怎么去实现和操作。 于是乎:1)热心的人们帮助并告诉这个人Y应该怎么搞,但是大家都觉得Y这个方案有点怪异。2)在经过大量地讨论和浪费了大量的时间后,热心的人终于明白了原始的问题X是怎么一回事。3)于是大家都发现,Y根本就不是用来解决X的合适的方案。X-Y Pro
2021-10-24 14:12:01 209
原创 执行maven clean package 时报OutOfMemoryError的解决办法
最近在使用maven clean package打包一个项目的时候遇到OutOfMemoryError的报错,如下查看了下具体的文件报错说明https://cwiki.apache.org/confluence/display/MAVEN/OutOfMemoryError,可能是以下三个原因:你构建的是一个非常大的多模块项目,每个模块都需要一定量的内存,导致内存不够你正在使用一些执行内存密集型操作的插件,例如分析所有项目的依赖项你正在使用带有 fork=false 选项(默认)的 Maven 编
2021-08-01 21:54:48 1762
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人