自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 SpringCloud

方法获取实例列表(传参为服务名),然后实现负载均衡(使用Random实现,Random传参为列表size),随机从实例列表中取出一个实例,里面包含了实例的全部信息(主机名、端口号、原信息等等),然后使用RestTemplate向提供者发起网络请求,获得HTTP响应。当然了,拆分也是有一定的要求的,服务提供者通过心跳机制向注册中心报告自己的健康状态,当心跳异常时,注册中心就会将异常的服务剔除,并通知订阅了该服务的消费者。如果不同服务之间存在数据的交换,那么就需要由一个服务调用另一个服务的接口,成为服务治理。

2024-01-23 23:58:14 1126

原创 RabbitMq

首先,了解下什么是,这很重要,有些流程使用同步很合理,但是使用异步就会违反需求,就比如下单,用户下单后要先扣减余额,才能更新订单的支付状态,这两步操作只能是同步操作,因为第二步是否成功紧密关联第一步返回的结果。而修改完订单状态后的一系列不重要操作,则是可以进行异步处理,就比如更新订单状态、增加用户积分等等,就可以使用异步操作。

2024-01-10 22:58:59 1321 3

原创 Docker实战

(docker -run 创建并启动容器,-d代表后台运行,–name起名字,-p 80:80端口映射 -e是环境变量,没有就不用写,最后加上镜像名称,然后回车)多容器操作,通过一个单独的docker-compose.yml模板文件,来定义一组相关联的应用容器,帮助我们来实现多个相互关联的Docker容器快速部署。(停止nginx容器,然后再用docker -ps查看,会发现nginx没了,所以docker -ps是查看运行中的容器)(查看容器状态,其中输出的关键字如下,IMAGE容器所使用的镜像,

2024-01-08 16:15:01 1208

原创 JavaScript的同步和异步问题

异步任务是指不进入主线程,而进入任务队列的任务,只有任务队列通知主线程,某个异步任务可以执行了,该任务才会进入主线程,当我们打开网站时,像图片的加载,音乐的加载,其实就是一个异步任务,我们的ajax也是异步来执行的。单线程从从任务队列中读取任务是不断循环的,每次栈被清空后,都会在任务队列中读取新的任务,如果没有任务,就会等到,直到有新的任务,这就叫做任务循环,因为每个任务都是由一个事件触发的,因此也叫作事件循环。首先应该重要点就是异步队列,之前也说过,异步任务是不会进入主线程的,而是进入一个任务队列,

2022-10-20 14:39:39 554 1

原创 微服务架构之:Redisson分布式可重入锁原理

而在m2里有尝试获取锁,在m1调用m2,所以他们是在一个线程里,一个线程两次的来获取锁,这就是锁的重入。刚才解决了我们自定义redis分布式锁的不可重入问题,但是还存在着锁时不可重试的,而且超时释放的隐患也没能得到解决,最后就是主从一致性的问题。我们源码里面的tryLock时可以提供参数的,在给定的参数时间内如果没有获取到锁时可以不停的重新尝试获取锁,成功与否返回true和false。,这个thread1也就是锁的标识,其目的就是将来在释放锁时会判断避免误删,只有锁时自己的才会去删除。

2022-08-23 21:42:55 2118 1

原创 微服务架构之:基于Redis的分布式锁优化(Redisson)

这时候如果锁时不可重入的,那么在a()里获取的锁,在b()时又想获取这把锁,显然是无法获取的,所以这时候就回去等待a()锁的释放,而锁时无法释放的,于是就会出现死锁。虽然这些问题多多少少都存在隐患,但是概率小到可以忽略不计,自己去实现代价太多,但是不实现心里总不踏实,所以我们来找找有没有什么成熟的框架可以让我们直接调用。这是一个风险,但是如果设置的太长,万一出现了故障,在很长的一段时间里都要等待这个锁的释放,这样的锁的阻塞周期就过长。所以这个超时释放问题还是要解决,如果这个时间设置的太短,

2022-08-21 22:31:48 769

原创 微服务架构之:Redis的分布式锁---搭建生产可用的Redis分布式锁

单体架构上,乐观锁和悲观锁可以锁住并发情况下的同步代码块,我们多使用synchronized来对方法加锁。但是在配上负载均衡的集群模式下,普通的synchronized是无法锁住从两台服务器同时进入的请求。JVM内部的锁监视器直接作废。所以锁的监视器一定要在JVM的外部,让所有JVM都去找独一无二的锁监视器来获取锁,这样也就只有一个线程获取锁,也就实现了多JVM的线程互斥。分布式锁核心是实现多进程之间的互斥,而满足这一点的方式有很多,常见的有三种:Mysql、Redis。

2022-08-18 21:30:47 2262 2

原创 Redis中Key的层级结构

Redis的key允许有多个单词形成的层级结构,多个单词之间用冒号。这个格式并非固定,也可以根据自己的需求来删除或添加词条。

2022-08-14 13:30:28 914

原创 JVM中的栈和栈帧

栈帧:一个栈中可以有多个栈帧,栈帧随着方法的调用而创建,随着方法的结束而消亡。(有点类似于对象逃逸)。该栈帧中存储该方法中的变量,原则上各个栈帧之间的数据是不能共享的,但是在方法间调用时,jvm会将一方法的返回值赋值给调用它的栈帧中。每一个方法调用,就是一个压栈的过程,每个方法的结束就是一个弹栈的过程。栈内存归属于单个线程,每个线程都会有一个栈内存,其存储的变量只能在其所属线程中可见,即栈内存可以理解成线程的私有内存。...

2022-08-12 15:06:21 373

原创 在Mysql中一条查询SQL的执行过程是怎样的

执行器首先会做权限判断,如果操作的角色没有对表的查询权限,则会在这一步返回权限错误。权限无误后执行器会拿上一步的执行计划来调用存储引擎。由存储引擎对数据进行实际的查询操作,并返回最终的查询结果。前四步也相当于预处理,也就是业务逻辑判断,而最终对物理数据进行操作的也就是存储引擎了。mysql是以组件的形式引入存储引擎的。然后将查询到的数据返回给终端。...

2022-08-11 17:58:21 414

原创 操作系统知识点四:进程管理

进程是一个具有独立功能的程序关于某个数据集合的一次活动,是系统进行资源分配和调度的独立单位。进程是程序的一次执行。进程的运行要加载到内存中。进程是一个程序及其数据在处理机上顺序执行时发生的活动。进程是程序在一个数据集合上运行的过程。进程是操作系统进行资源分配和调度的一个最小的独立单位。...

2022-08-11 17:27:11 493

原创 操作系统知识点一:操作系统的概述

操作系统,简称OS,是管理计算机硬件和软件资源的计算机程序。在计算机系统总起着管理者的作用。用户应用程序操作系统(OS)硬件(裸机)应用程序都安装在了操作系统里,操作系统是管理硬件和软件(应用程序)的系统软件OS是一种系统软件与硬件交互对资源共享进行调度管理解决并发操作处理中存在的协调问题数据结构复杂,外部接口多样化,便于用户反复使用。作为系统软件,OS做了那些事?管理与配置内存决定系统资源供需的优先次序控制输出设备和输入设备操作网络与管理文件系统等基本事务。......

2022-08-03 20:55:30 393

原创 操作系统知识点三: 线程与进程

进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。线程是进程的最小运行单元。线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。......

2022-08-03 15:51:25 118

原创 Redis知识点——从搭建到弃坑

以日志的形式记录服务器锁处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录,调操作系统命令进程刷盘。RDB保存的是数据,AOF保存的是增删改查指令。,存储有序元素的时候,是把元素都放入到链表中,然后按照有序集合里面元素的分值从小到大,从左到右进行排序。也就是说,只有网络请求模块和数据操作模块是单线程的,而其他的持久化、集群数据同步等是多线程的。Redis的数据结构有一个Zset,是一个有序集合,它的数据结构是压缩列表或者。,而键值对读写的命令仍然是单线程处理的,..

2022-07-31 13:26:47 865

原创 MySQL八股知识点:从入门到删库

全面包含mysql八股知识点

2022-07-24 19:31:01 622

原创 Mybatis常见知识点

hibernate通过它强大的映射结构和hql语言,大大降低了对象与数据库(oracle、mysql等)的耦合性,而mybatis由于需要手写sql,因此与数据库的耦合性直接取决于程序员写sql的方法,如果sql不具通用性而用了很多某数据库特性的sql语句的话,移植性也会随之降低很多,成本很高。mybatis的优点其实也是缺点,正因为mybatis的使用简单,数据的可靠性、完整性的瓶颈更多依赖与程序员对sql的使用水平。在Mybatis里面,SQL和代码是分离的。..................

2022-07-22 17:45:06 1065

原创 操作系统知识点二:中断与系统调用

中断是指CPU在执行当前程序时出现的某种状况,使得CPU必须停止当前程序,而去执行另一段来处理的紧急事务,处理接收后的CPU再返回原先暂停的程序继续执行,这个过程就称为中断。

2022-07-21 15:37:52 3846 1

原创 SpringBoot的自动配置原理

但是并没有指定basePackage,如果没有指定扫描包,spring底层会自动扫描当前配置类所在的包。将当前配置类所在的包保存在一个BasePackages的Bean中。会排除掉那些不需要的bean,按照自定义的方式来排除,需要指定一个类(实现。以前我们需要配置的东西,springboot会自动帮我们配。这个类时是专门来排除配置类,并且是自动配置类中里面的其中一个。标注在某个类上,表示它是SpringBoot的配置类。只要加了它,就会加载所有的自动配置类。就是把当前的类标记位配置类。...

2022-07-20 16:51:10 260

原创 Bean的生命周期详解

这一类的Bean加载过程中的一些前置和后置的一些处理扩展实现,这些类或者配置,其实是Spring提供给我们来去实现Bean加载过程中的一些扩展在很多的和Spring集成的中间件也比较常见。,这个阶段的主要作用就是把Bean保存到容器,以及Spring的缓存中。第五个阶段就是销毁实例阶段,当Spring的应用上下文被关闭的时候,那么上下文中所有的Bean就会被销毁,如果存在Bean配置了。,如果被实例化的Bean存在依赖其他Bean的情况,则需要对这些依赖的Bean进行对象注入。这些方法,会在这个阶段调用。.

2022-07-16 10:25:20 4408

原创 Spring的常用注解

它只能注入其他bean类型,当有多个类型匹配时,使用时要注入的对象变量名称作bean的id,在spring容器中查找,找到了就注入成功。例如我们配置数据源时,可以把连接数据库的信息写到properties配置文件中,就可以使用此注解指定properties配置文件的位置。他们三个注解都是针对一个的衍生注解,他们的作用及属性都是一模一样的。如果不指定value属性,默认bean就是id当前的类名,首字母小写。name给当前@Bean注解方法创建的对象指定一个名称(即bean的id)。...

2022-07-15 14:31:26 620

原创 Spring IOC的启动流程(Spring bean对象的创建过程),从理论到源码,一步分析到位

这里new了一个对象,这其实是最简单的创建IOC容器的方法,我们点进去。 这是它的构造方法,它重载了其他构造方法,点this,可以看到: 在这个方法中,我们可以看到他调用了一个刷新的方法,这个刷新就是IOC容器的刷新开启方法,我们再点进去。类:AbstractApplicationContext 可以一次正常的流程,他一共调用了12个方法来启动IOC容器。 方法主要的作用就是在容器刷新前做准备工作: 方法的主要作用是创建一个DefaultListableBeanFac

2022-07-12 17:27:38 1232

原创 Redis的常用指令、五种数据类型和底层原理,一篇带你搞懂数据如何存储在redis内存中。

如下图,我们从下图的 第一级索引层 开始查找,那么要找到结点15,只需要找 结点 1-4-7-10-14-14-15,只需要查询七个结点即可。因为长度字节大于39,他的字节大小就不确定,所以RedisObject和字符串的内存是分开分配的。比如说,在原始的链表中如果要查询结点15,那么一共就需要从结点1开始,到结点15,一共查询15个结点才能找到结点15。(跳表必须是排好序的)出来的,而且新插入的一个节点不受其他层节点的影响。压缩列表的节点是不定的,因为他可以根据存储的内容,动态调整其占用空间的大小。...

2022-07-11 15:55:19 1432

原创 操作系统的五中IO模型

我们所说的IO都是操作系统层面的IO,在网络环境下,通俗的来说将IO分为两种:1.等、2.数据搬迁。如果想要提高效率,就等缩短等待时间。 当程序需要从内核态读取数据的时候,必须等待内核空间将数据返回后,才可以继续向下执行。效率低,浪费CPU资源。 当程序发起调用后,操作系统如果没有准备好数据,返回错误状态码,应用程序开始轮询再次发起调用,不进入阻塞状态,直到操作系统数据准备好了,将数据返回给用户。对于阻塞IO而言,NIO提高了运行效率,对于CPU而言,轮询是一次较大的消耗。 开

2022-07-11 12:12:56 182

原创 一篇带你搞懂Session和Token的区别,大数据时代下为什么会产生token?

因为网络http是,这样就无法确定你的本次请求和上次请求是不是一个人发送的,所有需要session来验证信息。 浏览器第一次访问服务器,服务器会创建一个session,同时为该session生成一个唯一的会话,也就是。然后将sessionid及对应的session分别作为保存到缓存中,也可以持久化到数据库或者redis中。浏览器下次在访问时,会带着cookie中的sessionid,然后服务器根据sessionid找到对应的session进行匹配。 首先,session的存储是需要空间的

2022-07-10 10:57:25 3631

原创 Spring的事务传播机制是什么?

多个事务相互调用时,事务如何在这些方法直接传播?spring提供了7种不同的传播特性,来保证事务的正常执行。 默认的事务传遍机制,如果当前没事务,就new一个。如果当前存在事务,则加入这个事务。 当前存在事务,则加入当前事务。如果当前没事务,则以非事务的方式执行。 当前存在事务,则加入当前事务,如果当前不存在事务,则抛出异常。 创建一个新事物,如果当前存在事务,则挂起事务。 以非事务方法执行,如果当前存在事务,则挂起事务。 不使用事务,如果当前事务存在,则会抛出异常

2022-06-29 13:02:37 145

原创 Servlet的生命周期、JDBC驱动过程、MVC的执行流程、对称加密和非对称加密

servlet的生命周期就是从servlet的创建到销毁的过程。 当客户端来一个请求时服务器创建一个Servlet实例,然后调用方法来初始化这个实例,只有实例初始化成功,Servlet才能接收客户的请求 初始化成功后,进入Servlet的执行时期,调用doGet或者doPost方法 Servlet会一直运行直到服务器停止,在结束时,需要收回在init()方法中使用的资源,通过来实现。主要分为七个步骤2.建立并获取数据库连接对象3.创建JDBC 对象4.设置SQL语句的传入参数

2022-06-27 18:22:25 275

原创 TCP的三次握手和四次挥手

首先,TCP是面向连接的,所有在连接前要首先确保和双方的是否都正常。实质上就是连接服务器的指定端口,建立TCP连接,并同步双方的序列号和确认号,开始交换信息。 刚开始客户端属于,服务器端属于 第一次握手是客户端打开,然后向客户端发送,然后初始化自己的序列号。这时候客户端属于(报文发送状态)。 第二次握手是服务器端接收到客户端发送的SYN报文,然后以自己的SYN作为应答,发送给客户端,并且指定初始自己的序列号。同时会给客户端发送一个ACK报文(客户端的),表示自己已接收到客户端建立连接的请

2022-06-27 14:24:19 700 1

原创 二叉树的遍历

先访问根节点,在访问左孩子,有孩子中序遍历先左孩子,再根节点,最后右孩子后序遍历先左孩子,后右孩子,最后根节点按照一层一层的顺序去访问,他是广度优先使用队列的方式,先进先出...

2022-06-22 14:37:09 201

原创 网络安全OSI七层模型之——传输层

区别:TCP协议传输的主要特点是:、传输可靠、面向连接等等,他是依靠以下来保证通讯安全的。 在数据传输过程中,将发送的数据段当做一个16位的整数,将这些整数加起来,并且前面的位不能丢弃,补在后面,最后,得到校验和。 接收方: 在发送数据前计算校验和,并进行校验和的填充。 接收方: 收到数据后,对数据以同样的方式进行计算,求出校验和,与发送方的进行比对。 序列号: TCP传输时将每个字节的数据都进行了编号,这就是序列号 确认应答: TCP传输的过程中,每次接收方收到数据后,都

2022-06-20 16:42:40 1166

原创 MVC的执行流程

根据配置创建对象。这个对象已创建,会根据的配置查找文件根据文件中的配置扫描包下的所有类 根据注解,创建**Controller类的对象,并且创建Spring容器,将这个对象放在Spring容器中。 springMvc还会扫描Controller类中注解了的方法。将对应的方法和controller全部记录在内。进入tomcat,会被(核心前端控制器)接收。 DispatcherServlet接受请求后,会解析请求,得到url(地址)。 然后查找所有的记录好的映射器对象(@Re

2022-06-18 12:32:52 5646

原创 并发编程:java的对象头存储了那些信息?synchronized是怎么进行优化的

synchronized使用锁对象是存储在对象头里面的。对象头由和组成。对象头占12个字节(byte) MarkWord包括哈希码,GC分代年龄,锁状态标志,线程持有的锁和线程的偏向ID。 Class MetaData Address 存储对象的类型指针,该指针指向它的类元数据。这个阶段在对象头的存储是001,1bit记录了偏向锁位,01是记录了无锁阶段。偏向锁时JDK1.6之后引进的锁优化。在无锁竞争的条件下,一个线程通过一次CAS尝试将对象头中Thread ID设置为自己的线程号,偏向锁

2022-06-17 13:49:08 314

原创 谈谈你都了解过哪些垃圾回收器,CMS垃圾回收器有什么问题吗?

在JDK3之前,单线程垃圾回收器是唯一的选择。在进行垃圾回收时会暂停用户的线程,直到他收集完毕。 串行的垃圾回收器有两种,Serial和Serial Old,一般搭配使用(分代回收(老年代标记-压缩)), 随着JDK版本的更新迭代,串行垃圾回收器的停顿时间较长,所以衍生出了并行垃圾回收器,多个线程同时工作,但也会STW(stop-the-world),暂停用户线程。在JDK5之后,搭配CMS一起使用。 并行垃圾回收器是ParNew、 Parallel Scavenge、Parllel

2022-06-16 21:35:09 301

原创 死锁产生的条件、死锁的处理方法、手写死锁

死锁就是多个并发线程因争夺系统资源而产生相互等待的现象。

2022-06-16 18:06:28 98

原创 MySQL:谈谈你对mysql事务的理解

事务就是一次对数据库操作的若干单元的一条或多条sql的管理 ,事务管理的目标就是完整性,要么全部执行,要么全不执行。 事务的特性:ACID,原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。 一个事务中的 所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。如果一个事务中间执行时报错,那么已经执行sql语句会回滚到事务开始前的状态。 ...

2022-06-16 14:00:39 444

原创 MySQL:详细解读mysql的索引机制和分类,为何使用B+树?

索引是帮助Mysql高效获取数据的数据结构。用大白话来说,就好比一本书的目录,帮助引擎更快的查询。 为什么有索引? 因为在一些大型项目时,单表的数据量会过大,往往会超过百万条数据。 这 100 万条数据在硬盘上是存储在数据页上的,一页数据大小为16K,存储这大量的数据需要很多页。加入我们需要 mysql会扫描全表来从数据1开始逐渐往后扫描。如果不添加索引,这样的效率是非常的低。 索引的优缺点?优点:缺点: 索引也是需要空间储存的,而且在执行增删改操作时,需要对索引的数据结构进行更新。 .

2022-06-16 12:52:33 242

原创 MySQL:什么是mysql的架构和引擎?

MySql的架构大致分为四层,分别是 引擎就是实际存储数据的机制。不同的引擎机制不同,例如索引,锁等。根据不同的需求选择不同的引擎,来达到最大的效率。查看表引擎 mysql的引擎有九种,分别是1. MyIsam , 2. InnoDB, 3. Memory, 4. Blackhole, 5. CSV, 6. Performance_Schema, 7. Archive, 8. Federated , 9 Mrg_Myisam。 但是常用的引擎只有两种:innodb和myisam。

2022-06-16 11:06:15 232 1

原创 对Spring AOP的理解

对SpringAOP的相关术语的理解和代理的思想

2022-06-14 15:22:07 1947

原创 对Spring IOC控制反转的详细理解

Spring中对IOC控制反转的理解,关于生成的对象的生成、生命周期、线程安全和循环依赖问题。

2022-06-10 15:00:06 731

原创 ThreadLocal——如何实现线程副本变量和内存泄露问题

ThreadLocal的底层原理和内存泄漏

2022-06-09 21:27:32 292

原创 JavaSE面试要点六——并发编程(有序性、可见性、原子性、线程池)

Java语言是支持多线程的,多线程技术使程序的响应速度更快 ,可以在进行其它工作的同时一直处于活动状态。实现多线程的方式主要有三种:继承Thread类、实现Runable接口、继承Callable接口。 多线程共享数据并发:说的是在一个时间段内,多件事情交替执行,宏观上的同时执行。并行:说的是多个事情在同一时间段内同时执行,微观上的同时执行。 并发编程是在很多线程对共享资源进行访问时,需要通过控制,让多个线程并发的对共享数据进行访问。由于CPU、内存、硬盘三者之间的读写速度不一样。...

2022-06-06 15:23:33 237

空空如也

空空如也

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

TA关注的人

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