自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

子悠のziyou

青青子衿,悠悠我心

  • 博客(65)
  • 收藏
  • 关注

原创 Completablefuture

Future判断任务是否完成就是get()或者idDone()循环不是很好,而Completablefuture可以直接方法回调与链式编程很方便。所以CompletableFuture封装了Future使其能够方法回调。实现了Future 与 CompletionStage这两个接口。实现CompletionStage接口是为了能够流式处理。xxxAsync的是开启另一个线程来执行。实现Future接口是为了能够得到数据。

2024-04-03 15:10:24 378

原创 设计模式-策略模式

一个类的行为或其算法可以在运行时更改,我们把它降维到代码层面。用人话翻译一下就是,运行时我给你这个类的方法传不同的“key”,你这个方法会执行不同的业务逻辑。细品一下,这不就是 if else 干的事吗?

2024-04-03 11:03:06 707

原创 基于数据库(MySQL)与缓存(Redis)实现分布式锁

基于数据库(MySQL)与缓存(Redis)实现分布式锁,分布式锁:分布式锁是在分布式的情况下实现互斥类型的一种锁实现分布式锁需要满足的五个条件。

2023-11-17 19:50:38 1279 1

原创 Spring接入Metric+Graphite+Grafana搭建监控系统

Spring接入Metric+Graphite+Grafana搭建自己的监控系统

2023-11-17 15:51:41 801 4

原创 Spring-statemachine实现订单状态机

StateMachine:状态机模型state:S-状态,一般定义为一个枚举类,如创建、待风控审核、待支付等状态event:E-事件,同样定义成一个枚举类,如订单创建、订单审核、支付等,代表一个动作。一个状态机的定义就由这两个主要的元素组成,状态及对对应的事件(动作)。状态机的相关概念Transition: 节点,是组成状态机引擎的核心source:节点的当前状态target:节点的目标状态event:触发节点从当前状态到目标状态的动作。

2023-07-26 23:59:39 1539

原创 Java实现质数筛的三种方法

今天在做一个算法题的时候遇到一个需要求质数的情况,但是本人比较菜只会暴力做法,所以在此记录学习一下质数筛选除了暴力以外的其它做法!注意:一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数。

2023-04-03 10:11:45 1215

原创 JVM-三色标记法

当被问到垃圾回收算法的时候,大多数人都知道三种回收算法,,但是标记的过程是如何的呢?在并发型标记的时候是怎么对对象图进行遍历的?三色标记法:在三色标记法中存在三种颜色,白色,灰色,黑色。

2023-03-25 14:32:37 547

原创 十二个鸡蛋三次找出坏鸡蛋

可能会在Z1与Z2比较大小哪里感觉到迷糊,你可以使用假设方法,比如Z1 > Z2这里,是怎么知道坏鸡蛋为4,8之中的一个,从我们选取的4,5,6,7,8,9,10,11中的9,10,11一定是好的,所以只有4,5,6,7,8中有问题,我们假设5,6,7有问题,而前面第二组是轻于第一组的,所以我们的结果应该是Z1 < Z2但是我们的结果不是,所以出现问题的是4号与8号,同理Z1 < Z2也可以这么进行假设。

2023-03-18 18:52:31 771

原创 僵尸进程与孤儿进程

在 Unix/Linux 系统中,正常情况下,子进程是通过父进程创建的,且两者的运行是相互独立的,父进程永远无法预测子进程到底什么时候结束。当一个进程调用 exit 命令结束自己的生命时,其实它并没有真正的被销毁,内核只是释放了该进程的所有资源,包括打开的文件、占用的内存等,但是留下一个称为僵尸进程的数据结构,这个结构保留了一定的信息(包括进程号 the process ID,退出状态,运行时间),这些信息直到父进程通过 wait()/waitpid() 来取时才释放。

2023-03-05 20:38:53 375

原创 负载均衡算法

将请求按顺序轮流地分配到每个节点上,不关心每个节点实际的连接数和当前的系统负载。优点:简单高效,易于水平扩展,每个节点满足字面意义上的均衡;缺点:没有考虑机器的性能问题,根据木桶最短木板理论,集群性能瓶颈更多的会受性能差的服务器影响。

2023-03-03 20:16:05 715

原创 Java集合-ArrayList源码

这里有两个空数组,第一个空数组是容量为0的时候的数组,第二个空数组是使用空参构造器的时候的数组。

2023-02-27 20:12:35 258 5

原创 MySQL-深度分页如何优化

延迟关联的优化思路,跟子查询的优化思路其实是一样的:都是把条件转移到主键索引树,然后减少回表。先查询出所需要的数据的主键id,因为在非聚集索引中每个叶子节点记录的数据为其id,这样就不需要回表查询,然后再去主键索引中查询。根据业务实际需求,看能否替换为上一页,下一页的功能,这样子就可以通过和上次数据进行比较,搭上树分支过滤的快车。深度分页造成的结果,offset越来越大,回表的记录越来越多,SQL查询性能急剧下降,会出现大量的慢SQL。直接通过主键索引查找,省略了二级索引查找过程,性能更高。

2023-02-26 14:23:07 1126 1

原创 设计模式-单例模式

在使用之前就创建,可以提高程序运行速度但是缺点是启动速度变慢同时占用内存。

2023-02-26 13:14:41 61

原创 JVM-垃圾回收器概述

这种垃圾收集器大家了解,现在已经不用串行的了。而且在限定单核cpu才可以用。现在都不是单核的了。对于交互较强的应用而言,这种垃圾收集器是不能接受的。一般在Java web应用程序中是不会采用串行垃圾收集器的。

2023-02-25 21:38:45 397

原创 基于JWT实现用户身份认证

JWT(JSON WEB TOKEN) 是目前最流行的跨域认证解决方案,是一种基于Token认证授权机制,JWT自身包含了身份验证所需要的所有信息,因此我们服务端不需要存储Session信息,这显然增加了系统的可用性和伸缩性,大大减轻了服务端压力。

2023-02-25 21:20:24 1369 7

原创 发布订阅模式

发布—订阅模式又叫观察者模式,它定义了对象间的一种一对多的关系,让多个观察者对象同时监听某一个主题对象,当一个对象发生改变时,所有依赖于它的对象都将得到通知。其中包含三个对象:发布者,订阅者,发布中心,接下来就进行代码的编写。

2022-12-12 11:55:26 271 5

原创 JVM-监控及诊断工具

它集成了多个JDK命令行工具,使用Visual VM可用于显示虚拟机进程及进程的配置和环境信息(jps,jinfo),监视应用程序的CPU、GC、堆、方法区及线程的信息(jstat、jstack)等,甚至代替JConsole。map(JVM Memory Map):作用一方面是获取dump文件(堆转储快照文件,二进制文件),它还可以获取目标Java进程的内存相关信息,包括Java堆各区域的使用情况、堆中对象的统计信息、类加载信息等。线程快照就是当前虚拟机内指定进程的每一条线程正在执行的方法堆栈的集合。

2022-12-11 14:21:11 3035 37

原创 Linux中的进程和服务常见命令

TTY:该进程是在哪个终端中运行的。killall 进程名称 (功能描述:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用)netstat -anp | grep 进程号 (功能描述:查看该进程网络信息)STAT:进程状态。常见的状态有:R:运行状态、S:睡眠状态、T:暂停状态、kill [选项] 进程号 (功能描述:通过进程号杀死进程)TIME:该进程占用 CPU 的运算时间,注意不是系统时间。Z:僵尸状态、s:包含子进程、l:多线程、+:前台显示。START:该进程的启动时间。

2022-12-09 22:18:41 249 8

原创 Java基础-多态实现原理

多态是面向对象编程里面的概念,一个接口的多种实现不同的实现方式,即为多态这里的接口不应理解得太死板,比如在 Java 里面,继承一个类和实现一个接口本质上都是一种继承行为,因此都可以理解为多态的体现。从静态和动态的角度进行划分,多态可以分为编译时多态和运行时多态。编译时多态是静态的,主要是指方法的重载,它是根据参数列表的不同来区分不同的方法,编译之后会变成两个不同的方法。而运行时多态是动态的,是通过动态绑定来实现的,也就是大家通常所说的多态性,本篇博客主要讨论运行时多态。

2022-12-09 16:57:46 1281

原创 HTTP常见状态码

网上都有状态码的说明但是有些不全所以我特此在这里整理一下,这个图来自小林大佬的图。

2022-12-09 10:09:37 533 5

原创 Java基础-反射的理解与优缺点

反射是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为 Java 语言的反射机制。

2022-12-09 09:47:51 676 9

原创 Java集合-HashMap1.8也会发生死循环

在网上搜资料时候然后发现网上都说1.7版本的HashMap会发生死链也就是死循环,但是在HashMap中也会产生死循环,接下来直接看代码吧。

2022-12-08 20:11:13 685 2

原创 进程与线程

线程是进程中的一个执行流,是CPU调度和分派的基本单位,它是比进程更小的执行单元,线程可以理解为进程中的一条执行路径。总的来说,进程和线程的主要区别在于它们是不同层次上的操作系统结构,进程是较大的执行单元,线程是较小的执行单元。当时间片用完时,由计时器发出时钟中断,调度程序便停止该进程的执行,并将它送往就绪队列的末尾,同时继续把 CPU 时间分配给队首的进程。因为进程切换都要保存进程的信息并且载入新进程的信息,如果时间片太小,会导致进程切换得太频繁,在进程切换上就会花过多时间。所以多进程要比多线程健壮。

2022-12-08 15:51:38 400

原创 Redis-大key解决策略

首先大key不是key很大而是key对应的value值很大一般而言如果String类型值大于10KB,Hash,Set,Zset,List类型的元素的个数大于5000个都可以称之为大key使用时注意事项最好在从节点上执行该命令或者在Redis实例业务压力的低峰阶段进行扫描查询,因为key很多时会很慢不足之处使用SCAN命令对数据库进行扫描。然后用TYPE命令获取返回的每一个key的类型对于String类型,可以直接使用STRLEN命令获取字符串长度,也就是占用的内存空间字节数对于集合类型来说可以使用MEM

2022-12-07 21:34:22 5266

原创 JUC-ReentrantLock

学习ReentrantLock就不得不知道AQS,因为ReentrantLock就是基于了AQS对象的用 state 属性来表示资源的状态(分独占模式和共享模式),子类需要定义如何维护这个状态,控制如何获取锁和释放锁getState - 获取 state 状态setState - 设置 state 状态compareAndSetState - cas 机制设置 state 状态独占模式是只有一个线程能够访问资源,而共享模式可以允许多个线程访问资源提供了基于 FIFO 的等待队列,类似于 Monitor 的

2022-12-07 14:02:36 151

原创 JUC-park/unpark

在使用park与unpark的时候就在疑惑为什么先调用unpark时后park就不会阻塞,现在就总结一下原理可以看到这个还是比较符合我们正常情况,因为先执行的是park再执行的是unpark那么先执行unpark再执行park呢?你会发现其实也可以,你也会感到疑惑为什么呢?park加锁后没有unpark为啥还是可以执行?与 Object 的 wait/notify 相比wait,notify 和 notifyAll 必须配合 Object Monitor 一起使用,而 park,unpark 不必

2022-12-07 10:43:23 423 1

原创 MuziDB数据库-项目描述

该项目写完也有一段时间了,为了避免以后忘记该项目的一些实现的原理,所以写下这篇博客来记录一下该项目的设计等MuziDB分为前端与后端,前后端交互通过socket进行交互,前端的作用就是读取用户输入并发送到后端进行执行然后输出返回结果,并等待下一次的输入,后端则需要解析SQL,尝试执行并返回结果。MuziDB的后端分为五个模块TM:维护XID文件来维护事务的状态,并提供接口给其它模块来查询某个事务的状态DM:直接管理数据的DB文件和日志文件VM:基于两段锁协议实现调度序列的可串行化,并实现了MVCC消除读

2022-12-05 13:44:06 331 2

原创 SpringMVC-执行流程

SpringMVC执行流程以及重要组件

2022-12-04 21:52:51 380 3

原创 Spring-Bean的生命周期

十分钟学会Spring中Bean的生命周期

2022-12-04 21:21:58 344 1

原创 JUC-BlockingQueue二

接着上篇BlockingQueue没讲完的LinkedTransferQueue是一个由链表结构组成的无界阻塞队列,相对于其它阻塞队列,LinkedBlockingQueue可以算是LinkedBlockingQueue与SynhronoousQueue结合,LinkedtransferQueue是一种无界阻塞队列,底层基于单链表实现,其内部结构分为数据节点、请求节点,基于CAS无锁算法实现与前面类似不再赘述其中节点操作过程类似于SynchronousQueue与SynchronousQueue有区

2022-12-04 11:18:04 453 3

原创 JUC-BlockingQueue

要学习其中的任务队列就需要先学习BlockingQueue,Blocking是一个接口,其中主要的方法为ArrayBlockingQueueArrayBlockingQueue的底层是基于数组实现,当指定容量后数组就确定了不会发生扩容通过上述数据结构可以看出,ArrayBlockingQueue是通过一个循环数组的方式来实现存储元素的,这里takeIndex记录当前可以取元素的索引位置,而putIndex则记录了下一个元素可以放入的位置,如果队列满了则是takeIndex == putIndex,这里

2022-12-03 23:43:03 537 6

原创 JUC-线程池理解与学习

Java线程池的学习

2022-12-03 17:04:15 458 7

原创 HTTP1.0、1.1、2.0、3.0的区别

HTTP1.0、1.1、2.0、3.0的区别

2022-12-02 20:20:54 158

原创 DNS查询流程

DNS查询流程,其中域名的层级关系类似于一个树状结构。查询服务器域名对应的IP地址。

2022-12-02 15:22:25 3494

原创 Java基础-常见IO五种模型

常见IO五种模型-阻塞IO、非阻塞IO、IO多路复用、信号驱动IO、异步IO

2022-12-01 21:34:09 969 3

原创 MySQL-如何定位慢查询SQL以及优化

如何定位慢查询SQL以及优化、慢查询日志记录慢SQL、explain查看分析SQL执行计划、profile分析执行耗时、Optimizer Trace分析详情、确定问题采用响应措施

2022-12-01 20:59:19 4803 29

原创 MySQL-索引的数据结构及优缺点

索引的数据结构、索引及其优缺点、索引的声明与使用以及索引的设计原则

2022-11-26 21:59:31 994

原创 腾讯云COS+PicGo+Typora十分钟搭建自己的图床

腾讯云COS+PicGo+Typora十分钟搭建自己的图床

2022-11-25 09:48:11 754 4

原创 Git常见命令与使用,从0到1学会使用Git

Git常见命令与使用,从0到1学会使用Git,Git常见的命令以及Git安装下载都包含其中

2022-11-25 09:25:08 511 8

原创 JVM-如何判断对象是否该被回收(引用计数法、可达性分析算法)

如何判断对象是否该被回收(引用计数法、可达性分析算法)

2022-11-24 15:00:59 619 7

60+套大学生创新创业项目,大创项目申报书(国家级创新创业项目,省级创新创业项目,互联网+项目)

创新创业大赛优秀作品,项目计划书作品范例 国家级创新创业项目,省级创新创业项目,互联网+项目共60多套 划重点60+ 划重点60+ 划重点60+

2023-04-07

空空如也

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

TA关注的人

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