
javaSE
文章平均质量分 51
Xiao--Y
一个普通的java工程师
展开
-
spring boot 整合钉钉机器人发送消息通知
盯盯消息通知主要用于系统预警、资源预警、重要消息通知,随时随地可以掌握重要信息一、通知效果1.文本通知2.带链接的通知3.makrdown格式 通知4.ActionCard 通知5.Feedcard 消息通知二、使用方法1.新建一个消息通知群,用于消息通知复制这个加签的字符串,后面会用到记住这个webhook,反而也会用到2. 新建 spring boot 工程2.1 POM 文件<dependencies> <原创 2021-11-26 14:55:10 · 3567 阅读 · 2 评论 -
spring 事务传播行为、隔离级别、行级锁
spring 事务传播行为传播行为含义PROPAGATION_REQUIRED表示当前方法必须运行在事务中。如果当前事务存在,方法将会在该事务中运行。否则,会启动一个新的事务PROPAGATION_SUPPORTS表示当前方法不需要事务上下文。如果当前存在事务,则加入该事务;如果当前不存在事务,则以非事务的方式继续运行。PROPAGATION_MANDATORY表示该方法必须在事务中运行。如果当前存在事务,则加入该事务;如果当前不存在事务,则抛出异常。PROPA原创 2021-07-08 09:01:42 · 547 阅读 · 0 评论 -
设计模式-单例模式
目录简介实际应用场景UML代码实现1.饿汉式(线程安全) [不推荐用]2.懒汉式(线程不安全) [不推荐用]3.懒汉式-加锁(线程安全) [不推荐用]4.懒汉式-双重校验锁(线程安全) [推荐用]5.枚举(线程安全) [极推荐使用]6.静态内部类(线程安全) [推荐用]7. 测试代码测试简介一个类只允许创建一个对象(或者实例),那这个类就是一个单例类实际应用场景在一些常用的工具类、线程池、缓存,数据库,账户登录系统、配置文件等程序中可能只允许我们创建一个对象UML代码实现1.饿汉式(线程安全)原创 2021-03-22 10:03:05 · 112 阅读 · 0 评论 -
设计模式-工厂模式
目录简介实际应用场景UML代码实现测试简介工厂模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。实际应用场景1、日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方。2、数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。3、设计一个连接服务器的框架,需要三个协议,“POP3”、“IMAP”、“HTTP”,可以把这三个作为产品类,原创 2021-03-21 20:07:47 · 98 阅读 · 0 评论 -
设计模式-状态模式
目录简介实际应用场景UML代码实现测试简介在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。实际应用场景1、打篮球的时候运动员可以有正常状态、不正常状态和超常状态。2、曾侯乙编钟中,‘钟是抽象接口’,'钟A’等是具体状态,'曾侯乙编钟’是具体环境(Context)。UML代码实现public class Context {原创 2021-03-18 09:54:02 · 111 阅读 · 2 评论 -
设计模式-责任链模式
目录简介实际应用场景UML代码实现测试简介责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。实际应用场景1、红楼梦中的"击鼓传花"。2、JS 中的事件冒泡。3、JAVA WEB 中 Apache Tomcat 对 En原创 2021-03-17 09:29:01 · 108 阅读 · 0 评论 -
设计模式-代理模式
目录简介实际应用场景UML1、静态代理2、动态代理代码实现1、静态代理2、动态代理(JDK)测试1、静态代理2、动态代理(JDK)简介代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用实际应用场景买火车票不一定在火车站买,也可以去代售点UML1、静态代理2、动态代理代码实现/** * @author liuyongtao * @since 2021-3-15 12:00 */public interface Image { void display原创 2021-03-15 14:35:15 · 112 阅读 · 0 评论 -
java中线程安全的集合和创建不可以修改的集合
目录标线程安全的集合创建不可以修改的集合线程安全的集合Vector vector = new Vector();Stack stack = new Stack();CopyOnWriteArrayList<Object> copyOnWriteArrayList = new CopyOnWriteArrayList<>();List<String> synList = Collections.synchronizedList(new ArrayList<原创 2021-03-13 21:53:05 · 147 阅读 · 1 评论 -
设计模式-迭代器模式
目录简介实际应用场景UML代码实现测试简介提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。实际应用场景将书(Book)放到书架(BookShelf)中,并将书名按顺序显示UML代码实现/** * @author xiaoy * @since 2021-3-10 9:38 */public interface Container<E> { Iterator<E> iterator();}/** * @author xi原创 2021-03-10 10:30:52 · 107 阅读 · 0 评论 -
设计模式-策略模式
目录简介实际应用场景UML代码实现测试简介定义算法族,分别封装起来,让它们之间可相互替换,此模式让算法的变化独立于使用算法的客户实际应用场景账单同步的功能。来自不同平台的账单,使用不同的文件保存,需要解析文件,校验数据,保存数据,归档账单UML代码实现/** * 解析数据接口 * * @author xiaoy * @since 2021-3-8 15:33 */public interface IParsingData { void parsingData()原创 2021-03-09 09:01:20 · 118 阅读 · 0 评论 -
设计模式-命令模式
目录简介实际应用场景UML代码实现测试简介将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。(简化: 将请求封装成对象,将动作请求者和动作执行者解耦。)实际应用场景假设现在有电视、电脑、电灯等家电,现在需要你做个遥控器控制所有家电的开关,要求做到每个按钮对应的功能供用户个性化,对于新买入家电要有非常强的扩展性UML代码实现/** * 命令执行器接口 * * @author xiaoy * @since 2021-3-8 8:51原创 2021-03-08 09:30:02 · 112 阅读 · 0 评论 -
设计模式-观察者模式
目录简介实际应用场景UML代码实现测试简介观察者模式,又可以称之为发布-订阅模式,观察者,顾名思义,就是一个监听者,类似监听器的存在,一旦被观察/监听的目标发生的情况,就会被监听者发现实际应用场景观察者模式多用于实现订阅功能的场景,例如微博的订阅UML代码实现/** * 主题 * @author liuyongtao * @since 2021-3-5 9:26 */public interface Subject { void registerObserver(Obse原创 2021-03-05 17:27:45 · 105 阅读 · 0 评论 -
ThreadLocal 怎么实现多个线程间的隔离
ThreadLocal.java 部分代码:public void set(T value) { Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t); if (map != null) map.set(this, value); else createMap(t, value);}ThreadLocalMap getMap(Thread t) { r原创 2021-02-25 11:37:04 · 251 阅读 · 3 评论 -
如何绕过java的构造器,创建实例
要实例的类:public class BlogDto2 { private Integer id; private String name; { System.out.println("11111"); } public BlogDto2(Integer id, String name) { this.id = id; this.name = name; System.out.println("2原创 2020-05-24 21:37:05 · 265 阅读 · 0 评论 -
centos7安装docker
Docker 官网地址:https://docs.docker.com/engine/install/centos/安装前准备查看系统版本cat /etc/redhat-release安装gcc和gcc-c++yum -y install gccyum -y install gcc-c++卸载旧版本yum remove docker \ docker-client \ docker-client-late原创 2020-05-10 20:12:44 · 172 阅读 · 0 评论 -
线程池中 submit()和 execute()方法有什么区别
submit()和 execute()方法的区别execute 方法执行完成后没有返回值,而submit方法执行后有返回值方法所在的类不同,execute 方法:java.util.concurrent.Executor;submit方法:java.util.concurrent.ExecutorService所需要的参数不同,execute : java.util.concurre...原创 2020-05-05 10:20:59 · 2680 阅读 · 0 评论 -
创建线程池有哪几种方式
创建线程池有哪几种方式一、Executors二、ThreadPoolExecutor一、ExecutorsExecutors是一个线程相关的工具类。主要提供了以下几种创建线程池的方法:indexmethodcorePoolSizemaximumPoolSizekeepAliveTimeunitworkQueue1newCachedThreadPool0In...原创 2020-05-04 22:15:27 · 11351 阅读 · 0 评论 -
Quartz的应用之Cron表达式
一、Quartz的应用场景1.邮件提醒和告警2.执行文件传输操作3.创建销售报表4.定时拉取银行对账文件,定时对账等5.定时生成报表二、CronExpression表达式完整格式为: [秒] [分] [小时] [日] [月] [周] [年]序号说明是否必填允许填写的值允许的通配符1秒是0-59, - *2分是0-59, - * ...原创 2019-08-12 13:49:10 · 325 阅读 · 0 评论 -
读写properties文件
工程结构:import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.Properties;/** * 读取properties文件原创 2015-04-07 11:29:15 · 526 阅读 · 0 评论