自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Vue前端播放rtsp视频流(vue+webrtc-streamer)

Vue本身不能直接播放RTSP视频流,因为浏览器不支持直接播放RTSP格式的视频流。为了在Vue项目中播放RTSP视频流,通常需要使用一些转码工具或服务器将RTSP流转码为浏览器支持的格式,如HLS或FLV,然后再通过相应的播放器进行播放。这里用的是vue+webrtc-streamer播放rtsp视频流

2024-10-24 14:12:05 3414 4

原创 什么是持续集成(持续交付、部署)

过去,一个团队的开发人员可能会孤立地工作很长一段时间,只有在他们的工作完成后,才会将他们的更改合并到主分支中。持续交付是经典的敏捷的软件开发方法的自然延伸,它强调产品在修改后到部署上线的流程要敏捷话、自动化。(Continuous Delivery,简称CD)指的是:频繁地将软件的新版本,交付给质量团队或者用户,以供评审。防止分支大幅偏离主干,如果不经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。,并且鼓励有助于减少发布到客户环境中的错误和缺陷数量的行为,从而提高团队的工作效率。

2024-08-21 18:02:18 941

原创 Jenkins是什么(详细介绍)

Jenkins是一个开源的、可扩展的持续集成、交付、部署(软件/代码的编译、打包、部署)的基于web界面的平台。允许持续集成和持续交付项目,无论用的是什么平台,可以处理任何类型的构建或持续集成。

2024-08-21 16:36:07 991

原创 Centos7安装Redis(采用docker安装方式)

linux系统安装redis可以自己上传程序,手动启动,也可以用docker以容器形式启动。redis建议可采用docker安装,如果是例如mysql这种追求稳定的关系型数据库可以采用手动安装。docker run -d --privileged=true -p 6379:6379 --restart always -v /home/redis/redis.conf:/etc/redis/redis.conf -v /home/redis/data:/data --name redis redis

2024-08-14 21:08:44 1010

原创 CentOS7安装Docker教程(含最新镜像地址)

本文介绍了Centos7系统(虚拟机)如何安装docker。从yum下载,查看docker版本,下载指定版本docker,到启动及配置镜像仓库地址。最后提供了目前还未停用的docker仓库镜像地址。

2024-08-14 20:51:01 4029 1

原创 CentOS7提示ifconfig: command not found(安装ifconfig)

如果在Linux中遇到"ifconfig: command not found"错误,这可能是因为你使用的Linux发行版不再默认安装ifconfig命令。在最新的Linux发行版中,推荐使用ip命令来代替ifconfig。下面讲解一下解决方法。

2024-07-02 21:08:38 1182

原创 CentOS7更新yum源

由于CentOS7系统默认的yum源是国外的,下载速度较慢,建议换成国内的镜像地址。包含各种yum源镜像地址。wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

2024-07-02 21:03:06 6978 1

原创 Centos7网络配置(设置固定ip)

刚安装完系统,有的人尤其没有勾选自动网络配置的情况下,是访问不了外网的,本机也连不通虚拟机。或者现在有的是动态ip,几次之后启动ip地址就变了,会导致其他软件或程序之前连接配置要重新更改,很麻烦,下面讲解一下如何配置网络,如何设置成固定ip。

2024-07-01 21:16:03 5063

原创 VMWare安装CentOS7虚拟机

介绍了VMWare安装CentOS7虚拟机的全过程,包含镜像下载、安装及之后的网络配置

2024-07-01 20:31:53 558 1

原创 npm报错:request to https://registry.npm.taobao.org failed处理办法

看提示是淘宝镜像过期了。找了一下资料,好像是npm 淘宝镜像已经从 registry.npm.taobao.org 切换到了 registry.npmmirror.com。npm报错:request to https://registry.npm.taobao.org failed, reason certificate has expired。npm config set registry https://registry.npmjs.org/ (或npm config delete registry)

2024-06-20 10:14:54 4439

原创 最新JVM面试题(持续更新)

现代的商业虚拟机都采用这种收集算法来回收新生代,IBM公司的专门研究表明,新生代中的对象大概98%是“朝生夕死”的。即绝大部分都会在Eden区被回收。Java的NIO库允许Java程序使用直接内存。直接内存是在java堆外的、直接向系统申请的内存空间。通常访问直接内存的速度会优于Java堆。因此出于性能的考虑,读写频繁的场合可能会考虑使用直接内存。由于直接内存在java堆外,因此它的大小不会直接受限于Xmx指定的最大堆大小,但是系统内存是有限的,Java堆和直接内存的总和依然受限于操作系统能给出的最大内存。

2024-03-06 21:50:05 783

原创 JUC并发编程最新面试题(持续更新)

多线程:多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务。多线程的好处: 可以提高 CPU 的利用率。在多线程程序中,一个线程必须等待的时候,CPU 可以运行其它的线程而不是等待,这样就大大提高了程序的效率。也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。线程也是程序,所以线程需要占用内存,线程越多占用内存也越多;多线程需要协调和管理,所以需要 CPU 时间跟踪线程;线程之间对共享资源的访问会相互影响,必须解决竞用共享资源的问 题。

2024-02-23 20:24:06 1087

原创 Spring最新核心高频面试题(持续更新)

IoC(Inversion of Control)是一种设计模式,它将对象之间的依赖关系的管理交给框架来处理,从而实现对象之间的松耦合和可维护性。传统的编程模式中,对象之间的依赖关系是由对象自己来管理的,当对象A需要对象B的协助完成某个功能时,对象A会主动创建对象B,然后在适当的时候调用对 象B的方法。这种方式会导致对象之间的依赖关系紧密耦合,使得代码难以维护和扩展。在Spring框架中,实现IoC的方式是通过依赖注入(Dependency Injection,DI)来实现的。

2024-02-20 20:59:01 1239

原创 Java高频面试题精选(最新)

java中的编译器和解释器Java中引入了虚拟机的概念,即在机器和编译程序之间加入了一层抽象的虚拟的机器。这台虚拟的机器在任何平台上都提供给编译程序一个的共同的接口。编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转换为特定系统的机器码执行。在Java中,这种供虚拟机理解的代码叫做字节码(即扩展名为.class的文件),它不面向任何特定的处理器,只面向虚拟机。每一种平台的解释器是不同的,但是实现的虚拟机是相同的。

2024-02-19 20:37:10 1252

原创 最新最全Redis面试题(含答案)

Redis应该算面试中必问的一个知识点,但是发现很多童鞋并不熟悉这块,这篇就常见的一些问题做一些整理,有不对的地方欢迎留言指正!1.什么是Redis 2.Redis的应用场景 3.为什么要用redis 4.Redis 的持久化机制是什么 5.如何选择合适的持久化方式 6.Redis的过期键的删除策略 7.Redis事务的概念 8.Redis事务相关命令 9.Redis事务其他实现 10.Redis主从架构 11.Redis集群的主从复制模型是怎样的 12.Redis实现分布式锁、缓存穿透,击穿,雪崩等

2023-12-10 20:58:32 2582

原创 SpringSecurity详解,实现自定义登录接口

目前市面上比较流行的权限框架主要实Shiro和,这两个框架各自侧重点不同,各有各的优劣。要在自己写的页面手动调用登录接口同时还要进行附加操作。层不可能从内存中查询用户,需要跟实际的权限数据库关联。编写登录接口,在其中调用方法。该接口需要再未登录的情况下可调用,所以要放开权限。编写个的实现类,重写方法,在改方法中根据传来的用户名去自己的权限数据库查询用户信息。封装到用户实体类中。

2023-10-28 13:26:53 5464 3

原创 jvm垃圾回收算法有哪些及原理

Serial收集器、Parallel收集器、ParNew收集器、CMS收集器、G1回收器及三色标记算法的详细讲解。单线程执⾏垃圾收集,收集过程中会有较⻓的STW(stop the world),在GC时⼯作线程不能⼯作。虽然STW较⻓,但简单、直接。新⽣代采⽤复制算法,⽼年代采⽤标记-整理算法。

2023-10-24 11:00:31 472

原创 JVM 垃圾回收算法详解

分代回收算法本质是上述各算法的结合优化,当前大多商用虚拟机都采用这种分代回收算法。其实大多数对象生命周期非常短,所以在发生GC时,需要回收的对象特别多,存活的特别少,因此需要搬移到另一块内存的对象非常少,所以不需要1:1划分内存空间。而是将整个空间划分为`新生代`(1/3)和`老年代`(2/3)。新生代按照8 : 1 : 1的比例划分为三块,最大的称为`Eden(伊甸园)区`,较小的两块分别称为`To Survivor`和`From Survivor`(幸存者区或存活区)。

2023-10-16 10:23:42 308

原创 JVM 垃圾回收机制(可达性分析、引用计数)

垃圾是指在运行程序中没有任何指针指向的对象,就是需要被回收的。在堆空间和元空间中,GC这条守护线程会对这些空间开展垃圾回收⼯作,那么**GC如何判断这些空间的对象是否是垃圾**,有两种算法`引用计数法`和`可达性分析算法`:可达性分析算法是通过一系列被称为「GC Roots」的根对象作为起始节点集,从这些节点开始,通过引用关系向下搜寻,搜寻走过的路径称为「引用链」,如果某个对象到GCRoots没有任何引用链相连,就说明该对象不可达,即可以被回收。

2023-10-15 20:28:51 455

原创 JVM运行时数据区

运⾏时数据区也就是JVM在运⾏时产⽣的数据存放的区域,这块区域就是JVM的内存区域,也称为JVM的内存模型——JMM(Java Memory Model)JMM分成了这么⼏个部分堆空间(线程共享):存放new出来的对象元空间(线程共享):存放类元信息、类的模版、常量池、静态部分线程栈(线程独享):⽅法的栈帧本地⽅法栈(线程独享):本地⽅法产⽣的数据程序计数器(线程独享):配合执⾏引擎来执⾏指令**注:**堆、元空间(含方法区)是线程共享的,线程栈、本地⽅法栈、程序计数器是独享的。

2023-10-14 10:02:35 319

原创 类加载器、双亲委派机制

​ 当类加载进⾏加载类的时候,类的加载需要向上委托给上⼀级的类加载器,上⼀级继续向上委托,直到启动类加载器。启动类加载器去核⼼类库中找,如果没有该类则向下委派,由下⼀级扩展类加载器去扩展类库中,如果也没有继续向下委派,直到找不到为⽌,则报类找不到的异常。双亲委派机制的流程如下:ClassLoader.class中的Class

2023-10-10 20:32:51 152

原创 java CAS详解(深入源码剖析)

CAS是compare and swap的缩写,即我们所说的比较交换。该操作的作用就是保证数据一致性、操作原子性。cas是一种基于锁的操作,而且是`乐观锁`。在java中锁分为乐观锁和悲观锁。悲观锁是将资源锁住,等之前获得锁的线程释放锁之后,下一个线程才可以访问。而`乐观锁`采取了一种宽泛的态度,通过某种方式不加锁来处理资源,比如通过给记录加`version`来获取数据,性能较悲观锁有很大的提高。CAS 操作包含三个操作数 —— 内存位置(V)、预期原值(A)和新值(B)。如果内存地址里面的值和A的值是

2023-09-19 22:00:29 716

原创 SpringBoot使用AOP详解

AOP(Aspect Oriented Programming)意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可对业务逻辑进行增强,在不改变原有逻辑的基础上,在其前后进行处理。降低了耦合性,减少了大量冗余的操作。特别适合用于大量方法都需要进行相同处理的操作。讲解了切面(Aspect)、切入点(Pointcut)、通知(Advice)、环绕通知

2023-09-14 16:49:54 10364

原创 AQS同步队列和等待队列的同步机制

理解AQS必须要理解同步队列和等待队列之间的同步机制,简单来说流程是:获取锁失败的线程进入同步队列,成功的占用锁,占锁线程调用await方法进入条件等待队列,其他占锁线程调用signal方法,条件等待队列线程进入同步队列排队。去银行办理业务,需要排队、在窗口办理、费时间的有专员带你去小屋办理。awaitsignal同步队列。AQS维护的队列是当前等待资源的队列,即获取锁失败的线程。每个Condition维护着一个队列,该队列的作用是维护一个等待singal信号的队列。

2023-09-09 17:03:03 408 1

原创 AQS源码剖析,完整流程解读

AQS是什么?AQS即AbstractQueuedSynchronizer缩写,翻译为抽象队列同步器,是一种用来构建锁和同步器的框架。 平时使用较多的ReentrantLock、CountDownLatch就是基于AQS实现。AQS基于CLH队列分配的模式有两种:默认*独占*模式和*共享*模式AQS完整流程解读,获取锁、释放锁、await等待、signal,同步队列和等待队列的转换

2023-09-09 15:31:10 390

原创 SpringBoot整合Websocket(Java websocket怎么使用)

讲解了vue结合springboot项目怎么使用websocket进行通信。WebSocket 是一种基于 TCP 协议的全双工通信协议,可以在浏览器和服务器之间建立`实时、双向的数据通信`。可以用于在线聊天、在线游戏、实时数据展示等场景。与传统的 HTTP 协议不同,WebSocket 可以保持`长连接`,实时传输数据,避免了频繁的 HTTP 请求和响应,节省了网络带宽和服务器资源,提高了应用程序的性能和用户体验。

2023-09-02 23:30:06 1049

原创 前端将file文件传给后台,后台将文件传给前台(包含上传下载)

讲述了前端选择file文件传递给后台、后台将文件发送给前端的整个过程。拆开讲述了两者分别对应的使用场景。上传:将文件传给后台下载:后台传递流给前台

2023-08-27 20:46:02 12004 6

原创 Java IO流动(实战操作)

java IO流原理、IO流的分类。FileInputStream、FileOutputStream、BufferInputStream等常用输入输出流的代码实操。流的常用使用场景,怎么将文件从前端传输给后台,后台将文件返回给前端。

2023-08-27 17:12:23 303

原创 Feign远程调用

Feign是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求,Feign可以通过处理注解,将请求模板化,当实际调用的时候,传入参数,根据参数再应用到请求上,进而转化成真正的请求。Feign默认的请求处理超时时⻓1s,有时候我们的业务确实执行的需要一定时间,那么这个时候,我们就需要调整请求处理超时时⻓,Feign自己有超时设置,如果配置 Ribbon的超时,则会以Ribbon的为准。Feign可插拔的注解支持,包括Feign注解和JAX-RS注解;需要调用的服务成为服务消费者。

2023-08-23 17:57:18 197

原创 RabbitMq死信队列

​死信,其实这是 RabbitMQ 中一种消息类型,和普通的消息在本质上没有什么区别,更多的是一种业务上的划分。如果队列中的消息出现以下情况之一,就会变成死信:如果给消息队列设置了消息的过期时间(),或者发送消息时设置了当前消息的过期时间,当消息在队列中的存活时间大于过期时间时,就会变成死信。如果给消息队列设置了最大容量(),队列已经满了,后续再进来的消息会溢出,无法被队列接收就会变成死信。消息接收时被拒绝会变成死信,例如调用或,并设置requeue为false。RabbitMQ死信队列俗称,

2023-08-20 22:10:39 560

原创 RabbitMq交换机类型介绍

在RabbitMq中,生产者的消息都是通过交换器来接收,然后再从交换器分发到不同的队列,再由消费者从队列获取消息。这种模式也被成为“发布/订阅”。分发的过程中交换器类型会影响分发的逻辑。

2023-08-19 09:29:47 845

原创 RabbitMq:Topic exchange(主题交换机)的理解和使用

主题交换机的流程,相当于报纸订阅。有一个总报社`(相当于生产者)`发出各种类型的报纸到各个分报社,分报社相当于不同的`交换机`,每种类型报纸相当于不同的`routing_key`,再往下有卖报点去分报社去报纸,但每个卖报点根据消费者的需求所需要的类型不一样。比如一个分报社手里有两种类型的报纸:`新闻.经济`、`新闻.体育`。这时三个卖报点来取报纸,卖家A只需要`新闻经济类`,那他跟交换机的binding_key就是`新闻.经济`;卖家B只需要`新闻体育类`,那他的binding_key就是`新闻.体育`;而

2023-08-17 00:12:53 2259

原创 Springboot整合RabbitMq,详细使用步骤

消息队列(Message Queue)是一种应用间的通信方式。顾名思义,将消息放到队列中,排队发出。消息发布者只管把消息发布到MQ中而不用管谁来取,消息使用者只管从 MQ 中取消息而不管是谁发布的。这样发布者和使用者都不用知道对方的存在。而且消息队列一般有完整的接收确认,发布消息回调等一系列机制,可以确保接收方一定能接受。用到的场景如:异步处理,应用解耦,流量削锋和消息通讯。可以直接在java代码中通过注入实体类的方式创建交换机及队列等设备。但此方式添加的’设备‘是懒加载的形式,只要当使用到识别到监听注解

2023-08-13 00:40:09 4393 6

原创 看redisson是如何解决锁超时问题

比如利用redis实现的分布式锁会设置一定的过期时间,超过该时间,缓存自动删除,锁被释放。这是防止因程序宕机等原因导致锁一直被占用。但存在一定的问题,如果是该业务执行过程中有点小阻塞,业务还没执行完,结果锁超时释放,下一个线程就又会进来同时执行,产生并发问题。问题1:怎么保证业务没执行完时,不让锁自己释放呢?不断给锁续约。即上锁之后,每隔一段时间增加缓存中的过期时间,一致重复执行,直到业务执行完。业务执行完会发出完成的信号,循环程序监听到信号后跳出不再续约。

2023-08-03 22:06:10 1743 2

原创 Redisson是怎么实现可重试锁的

可重试锁是什么:一个请求尝试获取锁时,如果锁已被人占用,则立即返回失败结束请求是不合理的。最好的方式是`给予一定的容错空间,在一定的时间内再多次尝试获取锁,如果长时间仍获取不到才返回失败`。而简单的基于redis实现的分布式锁不能实现该功能。redisson可以实现该功能。

2023-08-02 14:07:47 345 2

原创 redisson实现可重入锁原理

在保存锁时会记录获取锁的次数。如果同一个线程递进3次获取同一把锁,那次数就是3,释放锁时,不能直接删除,而是释放一次锁,标志位就。需要注意的是只有判断所以存在并且是自己上的时候,才能再次将标识值+1,如果是其他线程获取的则直接获取锁失败。比如在获取完锁之后,执行完另一个方法又要再一次获取这把锁,是不允许拿到的。就是一个操作redis的一个工具,更多是用来上分布式锁,他帮你写了很多固定的上锁步骤,你直接调用即可。上锁时向redis里存入hash结构的数据,hash的key为线程值,value为上锁的次数。

2023-07-31 23:19:18 534 2

原创 如何解决库存超卖问题

但查询和修改时两个命令,并发情况下,有可能多个线程同时查询出来,符合条件都进入修改命令,这就导致数据没有把控,最后的数值会超出限制的量。​ 每行数据数据会有个字段version记录当前数据的版本,修改数据前查询该数据的version,修改时比较version是否一致(即可以把version作为where条件,这样保证只能修改version对应的数据)。如下图:线程1,2都查询到的版本为1,线程1先进入sql执行,符合条件执行成功,线程2进入时库中数据版本号已被修改,不能修改。字段被修改后,在根据新的。

2023-07-30 22:05:34 291 2

原创 基于redis实现分布式锁

当我们在项目中对同一个共享资源进行并发的操作时,如果不进行加锁的话有可能会出现数据一致性问题。单体项目时,我们或许会加一个synchronized锁来保证单个实例并发安全。但问题来了,,如果应用被部署了多个节点,并发请求被负载均衡到了不同的应用节点上,那synchronized就锁不住多个应用了,还是会出现数据一致性问题。:同一时刻只能有一个服务(或应用)访问资源。:一致性要求保证加锁和解锁的行为是原子性的。:锁只能被持有该锁的服务(或应用)释放,及不能被其他服务解锁操作释放。

2023-07-21 18:21:12 179 2

原创 redis缓存穿透、雪崩、击穿区别、解决方案

并且缓存重建业务较复杂的key突然失效了,无数的请求访问会在瞬间给数据库带来巨大的冲击。,这样缓存永远不会生效,这些请求都会打到数据库。大量请求并发访问数据库可能会承受不了。或者Redis服务宕机,导致大量请求到达数据库,带来巨大压力。他和穿透的区别,穿透是同一个key,雪崩是大量key且同时。这种情况一般会发生于热点数据,会提前存入缓存。区别是一个key,突然失效,访问量很大。问题也叫热点Key问题,就是一个。

2023-07-16 13:54:01 135 1

原创 什么是缓存击穿、怎么解决

查询缓存后将变量时间与当前时间做比较,如果发现已经过期,则获取互斥锁,然后开启一个新的额外线程去查询并更新缓存,主线程先直接返回就得缓存数据。因为将数据存入缓存的时候,需要先执行一系列的查询操作,如果该数据访问量非常大,那也会给数据库造成很大压力。缓存过期后,第一个查询的线程,先获取互斥锁再去查询数据库,在这期间如果有别的线程来查询,会获取互斥锁失败。当然不是所有的数据都要做缓存击穿处理,热点数据才需要,所以一些地方的逻辑处理会不大一样。如果获取锁成功,则查询数据库,将数据存入缓存,最后一定要解锁。

2023-07-16 13:46:28 149

空空如也

空空如也

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

TA关注的人

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