- 博客(272)
- 收藏
- 关注
原创 CountDownLatch实现原理及使用
CountDownLatch在多线程并发编程中充当一个计时器的功能,并且维护一个count的变量,并且其操作都是原子操作,该类主要通过countDown()和await()两个方法实现功能的,首先通过建立CountDownLatch对象,并且传入参数即为count初始值。当count的值为0时,这时候阻塞队列中调用await()方法的线程便会逐个被唤醒,从而进入后续的操作。需要等待其他线程执行完毕之后,再运行的线程,调用 countDown.await()实现阻塞同步。需要同步的线程执行完之后,计数-1;
2023-08-01 14:16:13
222
原创 Spring Boot使用@Async实现异步调用:自定义线程池
}上面我们通过使用核心线程数10:线程池创建时候初始化的线程数最大线程数20:线程池最大的线程数,只有在缓冲队列满了之后才会申请超过核心线程数的线程缓冲队列200:用来缓冲执行任务的队列允许线程的空闲时间60秒:当超过了核心线程出之外的线程在空闲时间到达之后会被销毁线程池名的前缀:设置好了之后可以方便我们定位处理任务所在的线程池线程池对拒绝任务的处理策略:这里采用了CallerRunsPolicy策略,当线程池没。
2023-07-31 16:20:35
1864
原创 Letcode动态规划专题-初级
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar
2022-05-02 16:43:35
571
原创 八大排序算法 -结合真实题目 最小的K个数
最小的K个数描述给定一个长度为 n 的可能有重复值的数组,找出其中不去重的最小的 k 个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4(任意顺序皆可)。数据范围:0\le k,n \le 100000≤k,n≤10000,数组中每个数的大小0 \le val \le 10000≤val≤1000要求:空间复杂度 O(n)O(n) ,时间复杂度 O(nlogn)O(nlogn)//////////1.冒泡排序,求最小的k个元素import java.u
2022-03-23 16:23:13
722
原创 @JsonFormat与@DateTimeFormat注解的使用
背景:从数据库获取时间传到前端进行展示的时候,我们有时候可能无法得到一个满意的时间格式的时间日期,在数据库中显示的是正确的时间格式,获取出来却变成了很丑的时间戳,@JsonFormat注解很好的解决了这个问题,我们通过使用@JsonFormat可以很好的解决:后台到前台时间格式保持一致的问题,其次,另一个问题是,我们在使用WEB服务的时,可能会需要用到,传入时间给后台,比如注册新用户需要填入出生日期等,这个时候前台传递给后台的时间格式同样是不一致的,而我们的与之对应的便有了另一个注解,@DataTimeFo
2022-03-15 18:45:18
530
原创 toString与String的区别
举个例子先:定义一个经过Base64加密的字符串String str=“TU0jV0xBTiNVYys5bEdiUjZlNU45aHJ0bTdDQStBPT0jNjQ2NDY1Njk4IzM5OTkwMDAwMzAwMA==”现在解密:String rlt1=new String( Base64.decode(str, Base64.DEFAULT));String rlt2=Base64.decode(str, Base64.DEFAULT).toString();结果是:rlt1=“MM#
2022-03-12 19:41:50
608
原创 二分查找(递归与非递归)超级无敌版 内附一个非常牛逼的链接
是否递归实现:在于判断条件后更改阀值继续循环至符合条件,还是对相应的子集重新本函数。递归方法int BinSearch(int Array[],int low,int high,int key/*要找的值*/) { if (low<=high) { int mid = (low+high)/2; if(key == Array[mid]) return mid; else if(ke
2022-03-06 15:15:10
169
原创 二叉树 深度优先遍历 与 广度优先遍历
深度优先遍历1、先序遍历2、中序遍历3、后序遍历广度优先遍历层序遍历遍历二叉树深度优先和广度优先的通俗解释?dfs:进栈、退栈,一搜到底bfs:入队、出队,步步为营
2022-03-05 10:04:09
149
原创 二叉树先序遍历、中序遍历、后序遍历 递归和非递归算法
一、二叉树先序遍历(1)递归算法// 递归先序遍历public static void recursionPreorderTraversal(TreeNode root) { if (root != null) { System.out.print(root.val + " "); recursionPreorderTraversal(root.left); recursionPreorderTraversal(root.right);
2022-02-26 21:06:26
3106
1
原创 剑指offer题目详细版本
一、链表题目1、从尾到头打印链表使用栈(也可以使用数组,逆序输出)/*** public class ListNode {* int val;* ListNode next = null;** ListNode(int val) {* this.val = val;* }* }**/import java.util.Stack;import java.util.ArrayList;p
2021-11-20 19:23:38
583
原创 spring5注解编程基础组件(三)
一、配置组件@Configuration把一个类作为一个IoC容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean,默认是类名首字母小写其次就是取方法名称最后优先取Bean注解的Value@ComponentScan在配置类上添加@ComponentScan注解。该注解默认会扫描该类所在的包下所有的配置类,相当于之前的context:component-scan可以添加参数筛选需要注入bean的规则,includeFilters,自己写Filte
2021-09-21 18:32:17
114
原创 Spring框架(一)
一、Spring简化开发的四个策略基于POJO的轻量级和最小侵入性编程;最小侵入性编程体现在,Spring竭力避免因自身的API而弄乱你的应用代码。Spring不会强迫你使用Spring的接口或是继承Spring的类,相反,在基于Spring构建的应用中,它的类通常没有任何痕迹表明你使用了Spring。最坏的场景是,一个类可能会使用Spring注解,但它依旧是POJO(Plain Old Java Object, 即普通Java对象)。Spring赋予POJO魔力的方式之一就是通过DI装配它们,
2021-09-21 17:10:05
487
原创 设计模式总结与对比
一、一句话归纳设计原则二、设计模式分类设计模式总结的是经验之谈总结的是前人的经验,提供给后人去借鉴使用,前人栽树,后人乘凉。设计模式可以帮助我们提升代码的可读性、可扩展性;降低维护成本;解决复杂的业务问题,但是,千万千万不要死记硬背,生搬硬套。下面我们还是先来总体预览一下GOF23种设计模式的归纳和总结。三、一句话归纳设计模式各设计模式对比及编程思想总结...
2021-09-20 18:10:13
138
原创 观察者模式和访问者模式
·一、观察者模式当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。观察者模式的优点和缺点优点:1)观察者与被观察者抽象耦合,容易扩展;2)建立了一套触发机制。缺点:1)循环依赖会导致系统崩溃;2)观察者太多会浪费时间。二、观察者模式实例观察者模式使用三个类 Subject、Observer 和 Client。Subject 对象带有绑定观察者到 Client 对象和从 Clien
2021-09-20 13:32:31
1551
原创 中介者模式与解释器模式
一、中介者模式介绍为什么引入中介模式?在现实生活中,中介者的存在是不可缺少的,如果没有了中介者,我们就不能与远方的朋友进行交流了。而在软件设计领域,为什么要使用中介者模式呢?如果不使用中介者模式的话,各个同事对象将会相互进行引用,如果每个对象都与多个对象进行交互时,将会形成如下图所示的网状结构。从上图可以发现,如果不使用中介者模式的话,每个对象之间过度耦合,这样的既不利于类的复用也不利于扩展。如果引入了中介者模式,那么对象之间的关系将变成星型结构,采用中介者模式之后会形成如下图所示的结构:从上图
2021-09-20 11:03:07
271
原创 状态模式与备忘录模式
一、状态模式状态模式( State Pattern ) 也称为状态机模式(State Machine Pattern), 是允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类,属于行为型模式。原文:Allow an object to alter its behavior when its internal state changes. The object will appear to change its class.解释:允许对象在内部状态发生改变时改变它的行为,对象看起来
2021-09-19 23:18:51
349
原创 迭代器模式与命令模式详解
一、迭代器模式的定义迭代器模式( Iterator Pattern ) 又称为游标模式(Cursor Pattern), 它提供一种顺序访问集合/容器对象元素的方法,而又无须暴露集合内部表示。迭代器模式可以为不同的容器提供一致的遍历行为,而不用关心容器内容元素组成结构,属于行为型模式。原文 : Provide a way to access the elements of an aggregate object sequentially without exposing its under lyi
2021-09-19 18:30:23
492
原创 策略模式和责任链模式
一、策略模式策略模式( Strategy Pattern )又叫也叫政策模式( Policy Pattern) ,它是将定义的算法家族、分别封装起来,让它们之间可以互相替换,从而让算法的变化不会影响到使用算法的用户。属于行为型模式。原文: Define a family of algor ithms, encapsulate each one, and make them inter changeable.**策略模式在生活场景中应用也非常多。**比如一个人的交税比率与他的工资有关,不同的工资水平
2021-09-19 17:45:39
4785
1
原创 委派模式与模板模式
一、委派模式定义委派模式(Delegate Pattern)又叫委托模式,是一种面向对象的设计模式,允许对象组合实现与继承相同的代码重用。它的基本作用就是负责任务的调用和分配任务,是一种特殊的静态代理,可以理解为全权代理,但是代理模式注重过程,而委派模式注重结果。委派模式属于行为型模式。二、委派模式真实案例从类图中我们可以看到, 委派模式有三个参与角色:抽象任务角色( Task ) : 定义一个抽象接口, 它有若干实现类。委派者角色( Delegate ) : 负责在各个具体角色实例之间做出决策并
2021-09-19 13:11:50
224
原创 适配器模式与桥接模式
一、适配器模式三种情况适配器模式,顾名思义,就是把原本不兼容的接口,通过适配,使之兼容。举个生活中简单的例子,以前的手机内存卡可以取出来,但是想和电脑之间传输音乐、视频等资料不能直接传输,需要通过USB读卡器,然后插入USB接口就可以传输了,这个USB读卡器就相当于适配器。你经常使用的手机或电脑充电器,也属于适配器,它将220V的交流电转换为手机可用的直流电。下面,以手机充电器为例讲解适配器模式。适配器模式一般分为三类:类适配器模式、对象适配器模式、接口适配器模式(缺省适配器模式)1.类适配器模式
2021-09-12 17:20:14
2012
原创 享元模式与组合模式
一、享元模式定义享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用。由于 享元模式要求能够共享的对象必须是细粒度对象,因此它又称为轻量级模式,它是一种 对象结构型模式。模式所涉及的角色 Flyweight: 享元接口,通过这个接口传入外部状态并作用于外部状态; ConcreteFlyweight: 具体的享元实现对象,必须是可共享的,需要封装享元对象的内部状态; Unshare
2021-09-12 09:07:52
408
原创 门面模式 与 装饰器模式
一、门面模式定义定义:又叫门面模式,提供了一个统一的接口,用来访问子系统中的一群接口外观模式定义了一个高层接口,让子系统更容易使用类型:结构型UML类图门面模式是对系统复杂的关系处理做了一个封装,对外提供一个简单的接口,成员介绍:子系统:被门面模式封装的子系统,也是具体业务逻辑的细节facade类:门面类,对子系统执行流程进行封装,对外开放功能接口,一般为单例对象。二、门面模式实例门面模式主要包含2种角色:**外观角色(Facade):**也称门面角色,系统对外的统一接口;**子
2021-09-05 19:34:48
416
原创 Docker 分享 小 Demo示例
1、Tomcat映射宿主主机2、构建Image,并将镜像上传 DockerHub,通过DockerHub下载镜像创建一个Spring Boot项目写一个controller@RestControllerpublic class DockerController {@GetMapping("/dockerfile")@ResponseBodyString dockerfile() {return "hello docker" ; }}mvn clean package打成一个j
2021-08-25 17:44:27
469
原创 原型模式 与 建造者模式
一、原型模式原型模式(Prototype Pattern)是指原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象,属于创建型模式。原型模式的核心在于拷贝原型对象。以系统中已存在的一个对象为原型,直接基于内存二进制流进行拷贝,无需再经历耗时的对象初始化过程(不调用构造函数),性能提升许多。当兑现的构建过程比较耗时时,可以利用当前系统中已存在的对象作为原型,对其进行克隆(一般是基于二进制流的复制),躲避初始化过程,使得新对象的创建时间大大减少。下面,我们来看看原型模式类结构图。在这里插入代码片
2021-08-08 17:38:17
362
原创 单例模式的应用
单例模式定义:单例模式(Singlleton Pattern) 是指确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点。一、饿汉式优点:执行效率高,性能高,没有任何的锁缺点:某些情况下,可能会造成内存浪费二、懒汉式优点:节省了内存缺点:线程不安全的问题三、线程式四、...
2021-08-02 22:07:48
1813
原创 Git版本回退并且同步远端的记录
操作过程:一、首先查看远程仓库版本git log 二、回滚指定版本并且推送到远端git reset --hard f44d39873be042ee31eb7befc4ff96fc67e9eb96git push -f参考:记录一次Git远程仓库版本回退在idea里如何实现Git项目回滚...
2021-07-29 13:20:09
1081
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人