自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 正则表达式

一、定义Regular Expression, 正则表达式, ⼀种使⽤表达式的⽅式对字符串进⾏匹配的语法规则.我们抓取到的⽹⻚源代码本质上就是⼀个超⻓的字符串, 想从⾥⾯提取内容.⽤正则再合适不过了.正则的优点: 速度快, 效率⾼, 准确性⾼ 正则的缺点: 新⼿上⼿难度有点⼉⾼.不过只要掌握了正则编写的逻辑关系, 写出⼀个提取⻚⾯内容的正则其实并不复杂 正则的语法: 使⽤元字符进⾏排列组合⽤来匹配字符串 在线测试正则表达式https://tool.oschina.net/regex/二、元字符具有固定

2021-12-28 11:53:58 202

原创 【查找算法】- 二分查找算法

文章目录1 小案例2 二分查找算法的思路二分查找的代码1 小案例请对一个有序数组进行二分查找{1,8,10,89,1000,1234},输入一个数看看该数组是否存在此数,并且求出下标,如果没有就提示"没有这个数"。2 二分查找算法的思路二分查找的代码说明:增加了找到所有的满足条件的元素下标:课后思考题:{1,8,10,89,1000,1000,1234}当一个有序数组中,有多个相同的数值时,如何将所有的数值都查找到,比如这里的1000。package com.sukang.searc

2020-11-11 14:17:01 379

原创 【排序算法】- 归并排序

文章目录1 归并排序介绍:2 归并排序思想示意图1-基本思想:3 归并排序思想示意图2-合并相邻有序子序列:4 归并排序的应用实例:1 归并排序介绍:归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。2 归并排序思想示意图1-基本思想:3 归并排序思想示意图2-合并相邻有序子序列:

2020-11-11 13:12:01 334 1

原创 【排序算法】- 快速排序

文章目录1 快速排序法介绍:2 快速排序法示意图:3 快速排序法应用实例:1 快速排序法介绍:快速排序(Quicksort)是对冒泡排序的一种改进。基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列2 快速排序法示意图:3 快速排序法应用实例:要求:对[-9,78,0,23,-567,70]进行从小到大的排序,要求使用快速排序法。【测试

2020-11-11 10:01:58 166

原创 redis学习笔记

文章目录1 redis入门1.1 Redis简介1.2 Redis 的基本操作2 Redis 数据类型2.1 数据存储类型介绍2.2 string1 redis入门1.1 Redis简介中国被世界黑的最惨的一天2007年10月30日,北京奥运会门票面向境内公众第二阶段预售正式启动。上午一开始,公众提交申请空前踊跃。上午9时至10时,官方票务网站的浏览量达到了800万次,票务呼叫中心热线从9时至10时的呼入量超过了380万人次。由于瞬间访问数量过大,技术系统应对不畅,造成很多申购者无法及时提交申请,为

2020-11-10 17:06:16 232

原创 java如何避免死锁

文章目录一、什么是死锁二、怎么排查死锁三、死锁产生的4个必要条件四、避免死锁的方法一、什么是死锁java中的死锁是一种编程情况,其中两个或多个线程被永久阻塞,Java死锁情况出现至少两个线程和两个或更多资源。在这里,我们将写了一个简单的程序,它将导致java死锁场景,然后我们将分析它。package com.sukang.sort;/** * @description: * @author: sukang * @date: 2020-11-09 15:48 */public class

2020-11-09 17:48:25 3289

转载 Int和Integer的区别

文章目录一、Int和Integer的区别Int和Integer的比较(扩展)一、Int和Integer的区别1、Integer是Int的包装类,Int是八种基本数据类型之一。2、Integer变量必须实例化以后才可以使用,而Int变量不需要实例化。3、Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象,而Int是直接存储数据值。4、Integer的默认值是null,Int的默认值是0。Int和Integer的比较(扩展)先来看一段代码:publi

2020-11-09 14:25:14 9001

原创 【排序算法】- 希尔排序

文章目录1 简单插入排序存在的问题2 希尔排序法介绍3 希尔排序法基本思想4 希尔排序法的示意图5 希尔排序法应用实例:1 简单插入排序存在的问题我们看简单的插入排序可能存在的问题。数组arr={2,3,4,5,6,1}这时需要插入的数1(最小),这样的过程是:{2,3,4,5,6,6}{2,3,4,5,5,6}{2,3,4,4,5,6}{2,3,3,4,5,6}{2,2,3,4,5,6}{1,2,3,4,5,6}结论:当需要插入的数是较小的数时,后移的次数明显增多,对效率有影响。2

2020-11-09 12:29:53 310 1

原创 TCP协议三次握手、四次挥手以及TCP窗口滑动机制

文章目录一、TCP报文格式二、TCP三次握手三、TCP四次挥手四、TCP的滑动窗口机制一、TCP报文格式16位源端口号:16位的源端口中包含初始化通信的端口。源端口和源IP地址的作用是标识报文的返回地址。16位目的端口号:16位的目的端口域定义传输的目的。这个端口指明报文接收计算机上的应用程序地址接口。32位序号:32位的序列号由接收端计算机使用,重新分段的报文成最初形式。当SYN出现,序列码实际上是初始序列码(Initial Sequence Number,ISN),而第一个数据字节是ISN+1

2020-11-08 16:18:54 720

转载 ConcurrentHashMap解析

文章目录模拟一个面试官和面试者的对话来解析ConcurrentHashMap面试官:HashMap在多线程环境下存在线程安全问题,那你一般都是怎么处理这种情况的?小明:一般在多线程的场景,我都会使用好几种不同的方式去代替:使用Collections.synchronizedMap(Map)创建线程安全的map集合;HashtableConcurrentHashMap不过出于线程并发度的原因,我都会舍弃前两者使用最后的ConcurrentHashMap,他的性能和效率明显高于前两者。面

2020-11-07 11:29:56 464

原创 ThreadLocal技术详解

文章目录一、ThreadLocal使用及原理解析1、基本使用2、原理分析二、InheritableThreadLocal的使用及原理解析1、基本使用2、原理分析3、ITL所带来的的问题三、TransmittableThreadLocal的使用及原理解析1、基本使用2、原理分析3、TTL中线程池子线程原生变量的产生四、总结一、ThreadLocal使用及原理解析项目中我们如果想要某个对象在程序运行中的任意位置获取到,就需要借助ThreadLocal来实现,这个对象称作线程的本地变量,下面就介绍下Thre

2020-11-05 15:49:36 314

原创 HashMap实现原理

文章目录一、什么是哈希表哈希冲突哈希冲突如何解决呢?HashMap采用哪种方法解决冲突的呢?二、对比:Hashtable、HashMap、TreeMap三、HashMap概念和底层结构四、HashMap的工作原理HashMap具体的存取过程:五、重写equals方法和hashCode方法1、如何重写equals方法和hashCode方法1 实现高质量的equals方法的诀窍包括2、实现hashCode方法的通用约定2、为啥HashMap中 “重写equals时也要同时覆盖hashcode”一、什么是哈希表

2020-11-05 13:29:57 536

原创 mvcc多版本并发控制

文章目录一、前提概要什么是MVCC?什么是当前读和快照读?当前读,快照读和MVCC的关系MVCC能解决什么问题,好处是?数据库并发场景有三种,分别为:MVCC带来的好处是?小结一下咯二、MVCC的实现原理隐式字段undo日志一、前提概要什么是MVCC?MVCCMVCC,全称Multi-Version Concurrency Control,即多版本并发控制。MVCC是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。MVCC在MySQL InnoDB

2020-10-31 10:29:45 1001 1

原创 netty学习笔记

文章目录一、I/O模型1、Java BIO编程1.1 java BIO工作机制1.2 java BIO应用实例1.3 java 问题分析2、java NIO编程2.1 NIO和BIO的比较2.2 NIO三大核心原理示意图2.3 应用实例-本地文件写数据2.4 应用实例-本地文件读数据2.5 应用实例-使用一个Buffer完成文件读取、写入一、I/O模型Java共支持3种网络编程模型/IO模式:BIO、NIO、AIOJava BIO:同步并阻塞(传统阻塞型),服务器实现模式为一个连接一个线程,即客户端

2020-10-24 14:53:36 409

原创 RabbitMQ消息队列处理库存解锁及关闭订单问题

文章目录一、RabbitMQ延时队列消息的TTL死信二、实战延时关单规范设计三、消息队列处理库存解锁及关单1、流程分析2、库存微服务2.1 解锁库存配置2.2 解锁库存流程2.3 业务代码2.4 调试四、RMQ 延时队列处理关单及库存解锁整合1、流程分析2、订单关单3、订单释放和库存释放进行绑定五、消息丢失、重复、积压等解决方案1、消息丢失2、消息重复3、消息积压一、RabbitMQ延时队列RabbitMQ延时队列实现定时任务。场景:比如未付款订单,超过一定时间后,系统自动取消订单并释放占有的库存。

2020-10-17 15:40:17 3500 2

原创 本地事务与分布式事务

文章目录一、本地事务1、事务的基本性质2、事务的隔离级别3、spring事务的传播行为4、SpringBoot事务关键点4.1、事务的自动配置4.2、事务的坑一、本地事务1、事务的基本性质数据库事务的几个特性:原子性(Atomicity)、一致性(Consistency)、隔离性或独立性(isolation)、持久性(Durability),简称就是 ACID。原子性:一系列的操作整体不可拆分,要么同时成功,要么同时失败。一致性:数据在事务的前后,业务整体一致。转账:A:1000; B:10

2020-10-17 11:51:26 1018

原创 Nginx+Windows搭建域名访问环境

文章目录正向代理反向代理搭建域名访问环境Nginx配置文件反向代理配置Nginx请求网关正向代理作用:隐藏客户端信息例如:如果想访问谷歌,访问不上,可以搭建代理服务器,电脑配置代理服务器的地址,想访问某个地址,就由代理服务器帮我们访问反向代理作用:屏蔽内网服务器信息,负载均衡访问例如:想访问我们的系统,我们的系统每个服务器由内网部署,如果整个内网暴露出去,容易引起攻击,为了能找到整个内网服务器集群,在它们前面前置一个服务器(这样就是反向代理),而这个服务器可以使用Nginx。搭建域名访问环境

2020-10-11 12:22:17 2239 1

原创 消息队列RabbitMQ

文章目录一、RabbitMQ1、MQ简介1、简介2、RabbitMQ核心概念2、Docker安装RabbitMQ3、RabbitMQ消息发送测试1、fanout 模式2、Direct 模式3、Topic 模式二、Springboot 整合1、RMQ相关配置1、引入依赖2、启动类开启RMQ注解3、 配置文件增加RMQ属性2、RMQ使用1、单元测试3、RMQ队列监听1、监听消息2、RabbitListener三、可靠投递1、发送端确认2、消费端确认1、配置修改2、测试四、RabbitMQ 延时队列1、Rabbi

2020-10-11 12:17:29 317 1

原创 接口幂等性问题处理

文章目录一、接口幂等性概念1. 接口调用存在的问题2. 什么是接口幂等性3. 什么情况下需要保证接口的幂等性二、那些情况需要防止任意多次执行所产生的影响均与一次执行的影响相同,这是幂等性的核心特点。其实在我们编程中主要操作就是CURD,其中读取(Retrieve)操作和删除(Delete)操作是天然幂等的,受影响的就是创建(Create)、更新(Update)。一、接口幂等性概念1. 接口调用存在的问题现如今我们的系统大多拆分为分布式SOA,或者微服务,一套系统中包含了多个子系统服务,而一个子系

2020-10-10 14:55:19 1121 1

原创 SpringSecurity 退出登录使JWT失效的解决方案

文章目录一、将Jwt Token存入Redis中二、实现JwtClaimsSetVerifier,验证Jwt Token是否有效三、实现JwtTokenStore的removeAccessToken方法,退出后使原令牌失效项目引入了JWT,在实现退出功能的时候,发现即使调用了相关接口废弃令牌,但是令牌仍然可以使用。查看原码才知道,使用的JwtTokenStore的removeAccessToken是个空方法。查了下资料,看到以下这段话。其实要完美地失效JWT是没办法做到的。“Actually, J

2020-09-27 11:44:11 6454 1

转载 git进行项目版本管理

文章目录为规范源代码版本管理,现将各分支表述如下:1.master分支2.develop分支3.release分支4.feature分支5.hotfixes分支git命令行操作指南为了更好地管理目前公司内的源码版本,让大家更好的协同工作,前阵子看了不少关于git版本管理的文章,总结除了一个相对简单的管理规范,并在实践一段时间后,进行了调整。最终版如下:为规范源代码版本管理,现将各分支表述如下:1.master分支存放的应该是随时可供在生产环境中部署的代码当开发活动告一段落,产生了一份新的可供部

2020-09-27 11:33:14 219

原创 异步与线程池及异步编排

文章目录一、异步1、初始化线程池的4中方式2、开启线程测试二、线程池1、开发中为什么使用线程池?2、线程池七大参数:3、工作顺序:4、面试:三、CompletableFuture异步编排1、创建异步对象2、计算完成时回调方法3、线程串行化方法4、两任务组合 - 都要完成5、多任务组合四、测试代码五、异步编排小案例1、顺序获取详情、2、异步编排获取详情1、线程池配置2、代码优化一、异步在业务开发中,有很多异步场景,为了节约时间或或者提高系统的吞吐量,要做一些异步任务,在Java中要实现异步通常都是Thre

2020-09-14 15:47:07 1248 2

原创 缓存及分布式锁

文章目录一、缓存1、缓存使用2、本地缓存与分布式缓存3、整合redis二、高并发下缓存失效的三个问题-穿透、雪崩、击穿1、缓存穿透2、缓存雪崩3、缓存击穿4、小结三、分布式锁原理及使用1、本地锁2、分布式锁演进四、分布式锁-Redisson1、Redisson简介和整合2、Redisson-lock锁测试3、Redisson读写锁4、项目实战五、SpringCache1、项目整合SpringCache一、缓存1、缓存使用为了系统性能的提升,我们一般都会将部分数据放入缓存中,加速访问。而DB承担数据罗盘

2020-09-13 13:23:25 336

原创 压力测试和性能优化实践

文章目录一、压测概念二、性能指标三、压测软件JMeter Address Already in use错误解决四、堆内存与垃圾回收一、压测概念1、压力测试考察当前软硬件环境下系统所能承受的最大负荷并帮助找出系统瓶颈所在。压测都是为了系统在线上的处理能力和稳定性维持在一个标准范围内,做到心中有数。2、使用压力测试,我们有希望找到很多种用其他测试方法更难发现的错误。有两种错误类型是:内存泄漏、并发与同步。3、有效的压力测试系统将应用以下这些关键条件:重复、并发、量级、随机变化。影响性能考虑点包括:

2020-09-08 16:56:33 473

原创 Java重写equals方法

文章目录一、为什么equals()方法要重写?二、怎样重写equals()方法?1、自反性原则2、对称性原则3、传递性原则4、必须覆写hashCode方法这样结果就是三个false。一、为什么equals()方法要重写?判断两个对象在逻辑上是否相等,如根据类的成员变量来判断两个类的实例是否相等,而继承Object中的equals方法只能判断两个引用变量是否是同一个对象。这样我们往往需要重写equals()方法。我们向一个没有重复对象的集合中添加元素时,集合中存放的往往是对象,我们需要先判断集合中是否存

2020-08-30 12:51:23 820

原创 获取SpringCloud gateway响应的response的并进行修改

文章目录一、需求说明:二、解决方案:三、代码实现一、需求说明:由于公司的项目接入了几个几个服务进来,因为这几个服务接口返回的结果对象没有统一,前端需要后端将返回结果对象统一。二、解决方案:在网关写一个全局过滤器去对接口返回结果对象进行重构然后返回给前端。三、代码实现package com.jzt.zyy.gateway.filter;import cn.hutool.core.util.StrUtil;import cn.hutool.json.JSONObject;import

2020-08-24 18:28:20 6617 1

原创 mybatis-plus实现逻辑删除

文章目录需求说明代码实现需求说明常规的删除为物理删除,比较暴力。使用逻辑删除的好处是可能以后要用得到某些删除的数据。 比如说 某个需求是订单编号要自增, 即使这个订单被删除了,也要从被删除的订单编号开始递增,这个时候逻辑删除就派上用场了。逻辑删除就是在数据库中,指定某个状态位字段,约定好删除和未删除的状态。例如1是未删除, 0 是删除 。关于mybatis-plus逻辑删除的官网: mybatis-plus逻辑删除代码实现官方文档介绍的使用方法如下。一共只有两步, 一个是在yml中配置,

2020-08-20 14:46:08 5767 1

原创 网站跨域问题理解及解决方案

文章目录一、跨域的概念二、options请求为什么发生两次请求options请求如何产生options请求options请求有什么作用三、跨域解决方案使用nginx部署为同一个域后端服务配置当次请求允许跨域网关配置跨域一、跨域的概念跨域: 指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制。同源策略: 是指协议,域名,端口都要相同,其中有一个不同都会产生跨域。二、options请求自后天restful接口流行开来,从浏览器请求一个接

2020-08-20 09:50:57 973

原创 一个获取多级目录的小案例

文章目录1、需求2、代码实现1、需求获取京东商城首页的三级菜单数据2、代码实现使用springboot+mybatis实现1、controller @RequestMapping("/list/tree") @ApiOperation(value = "查询三级分类、组装为分类树",notes = "前端通过key==data获取") public R list(){ List<CategoryEntity> entities = categoryS

2020-08-19 09:21:50 244

原创 ElasticSearch详解文档

1. ELASTICSEARCH1、安装elastic searchdokcer中安装elastic search(1)下载ealastic search和kibanadocker pull elasticsearch:7.6.2docker pull kibana:7.6.2(2)配置mkdir -p /mydata/elasticsearch/configmkdir -p /mydata/elasticsearch/dataecho "http.host: 0.0.0.0" >

2020-08-08 10:15:15 1516

原创 【排序算法】- 插入排序

文章目录1 插入排序法介绍:2 插入排序法思想:3 插入排序思路图:4 代码实现:1 插入排序法介绍:插入式排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。2 插入排序法思想:插入排序(InsertionSorting)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成

2020-07-10 08:21:50 139

原创 【排序算法】- 选择排序

文章目录1 基本介绍2 选择排序思想3 选择排序思路分析图4 代码示例1 基本介绍选择式排序也属于内部排序法,是从欲排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的。2 选择排序思想尚硅谷Java数据结构和算法更多Java–大数据–前端–python人工智能-区块链资料下载,可访问百度:尚硅谷官网第128页选择排序(selectsorting)也是一种简单的排序方法。它的基本思想是:第一次从arr[0]arr[n-1]中选取最小值,与arr[0]交换,第二次从arr[1]ar

2020-07-08 09:15:08 142

原创 【排序算法】- 冒泡排序

文章目录1 基本介绍2 演示冒泡过程的例子(图解)3 冒泡排序应用实例1 基本介绍冒泡排序(BubbleSorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。优化:因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在排序过程中设置一个标志flag判断元素是否进行过交换。从而减少不必要的比较。(这里说的优化,可以在冒泡排序写好

2020-07-07 10:36:36 122

原创 【数据结构java篇】- 栈

文章目录1 栈的一个实际需求2 栈的介绍3 栈的应用场景4 栈的快速入门1 栈的一个实际需求请输入一个表达式计算式:[722-5+1-5+3-3]点击计算【如下图】请问:计算机底层是如何运算得到结果的?注意不是简单的把算式列出运算,因为我们看这个算式722-5,但是计算机怎么理解这个算式的(对计算机而言,它接收到的就是一个字符串),我们讨论的是这个问题。->栈2 栈的介绍栈的英文为(stack)。栈是一个先入后出(FILO-FirstInLastOut)的有序列表。栈(stack)

2020-07-02 15:34:05 107

原创 Netty学习笔记

文章目录1 Netty介绍和应用场景1.1 Netty的介绍1.2 Netty的应用场景1.2.1 互联网行业1.2.2 互联网行业1.2.3 大数据领域1.2.4 其它开源项目使用到Netty2 JavaBIO编程2.1 I/O模型2.1.1 I/O模型基本说明2.2 BIO、NIO、AIO适用场景分析2.3 JavaBIO基本介绍2.4 JavaBIO工作机制2.5 JavaBIO应用实例2.6 JavaBIO问题分析3 JavaNIO编程3.1 JavaNIO基本介绍1 Netty介绍和应用场景1

2020-06-28 14:45:16 391

原创 【数据结构java篇】- 链表

文章目录1 链表(LinkedList)介绍2 单链表的应用实例3 单链表面试题(新浪、百度、腾讯)5 双向链表应用实例5.1 双向链表的操作分析和实现6 单向环形链表应用场景6.1 单向环形链表介绍6.2 Josephu问题1 链表(LinkedList)介绍链表是有序的列表,但是它在内存中是存储如下小结上图:链表是以节点的方式来存储,是链式存储每个节点包含data域,next域:指向下一个节点如图:发现链表的各个节点不一定是连续存储链表分带头节点的链表和没有头节点的链表,根据实际的需求

2020-06-28 10:44:01 239

原创 【数据结构java篇】- 队列

文章目录1 队列的一个使用场景2 队列介绍3 数组模拟队列思路4、数组模拟环形队列1 队列的一个使用场景银行排队的案例:2 队列介绍队列是一个有序列表,可以用数组或是链表来实现。遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出示意图:(使用数组模拟队列示意图)3 数组模拟队列思路队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图,其中maxSize是该队列的最大容量。因为队列的输出、输入是分别从前后端来处理,因此需要两个变量front

2020-06-12 10:21:39 114

原创 【数据结构java篇】- 稀疏数组

文章目录一个实际的需求基本介绍应用实例一个实际的需求编写的五子棋程序中,有存盘退出和续上盘的功能。分析问题:因为该二维数组的很多值是默认值0,因此记录了很多没有意义的数据.->稀疏数组。基本介绍当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。稀疏数组的处理方法是:记录数组一共有几行几列,有多少个不同的值把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模稀疏数组举例说明应用实例使用稀疏数组,来保留类似前面的二维数组

2020-06-11 10:13:04 119

原创 【设计模式】- 状态模式

文章目录什么是状态模式状态模式应用场景状态模式实现需要重构的代码状态模式与策略模式区别策略模式结构图:状态模式结构图状态模式实现什么是状态模式状态模式允许一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改变了它的类一样。状态模式应用场景1.一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。2.操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态。这个状态通常用一个或多个枚举常量表示。 通常,有多个操作包含这一相同的条件结构。State模式将每一个

2020-06-01 10:53:52 330

原创 【java虚拟机】- 垃圾回收

文章目录1. 如何判断对象可以回收1.1 引用计数法1.2 可达性分析算法1.3 四种引用2. 垃圾回收算法2.1 标记清除2.2 标记整理2.3 复制3. 分代垃圾回收3.1 相关 VM 参数4. 垃圾回收器4.1 串行1. 如何判断对象可以回收1.1 引用计数法1.2 可达性分析算法Java 虚拟机中的垃圾回收器采用可达性分析来探索所有存活的对象扫描堆中的对象,看是否能够沿着 GC Root对象 为起点的引用链找到该对象,找不到,表示可以回收哪些对象可以作为 GC Root ?1.

2020-05-27 17:56:48 126

空空如也

空空如也

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

TA关注的人

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