自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 资源 (1)
  • 收藏
  • 关注

原创 并发-Java内存模型JMM

1

2023-01-08 21:52:23 228 1

原创 并发-对象的半初始化问题

如果此时线程2抢占到cpu,然后发现instance!=null,然后直接返回使用,就会发现instance为空,就会出现异常。这就是指令重排可能导致的半初始化问题问题,因此要想保证程序100%正确就需要加volatile禁止指令重排。比如线程1执行了步骤13,还没有执行步骤2,此时instance!3)设置instance指向分配的内存地址:instance = memory;由于步骤2和步骤3不存在数据依赖关系,因此可能出现执行132步骤的情况。2)初始化对象:instance(memory);

2023-01-08 21:40:10 666 2

原创 Elasticsearch__读写原理

es读写数据的工作原理(1)es写数据过程1)客户端选择一个node发送请求过去,这个node就是coordinating node(协调节点)2)coordinating node,对document进行路由(根据documentID路由),将请求转发给对应的node(有primary shard)3)实际的node上的primary shard处理请求,然后将数据同步到replica node4)coordinating node,如果发现primary node和所有replica nod.

2022-03-27 15:27:02 426

原创 Redis缓存穿透解决方案

先来说下什么是缓存穿透缓存穿透是指查询一个根本不存在的数据,缓存层中和存储层中都不会命中,通常出于容错的考虑,如果从存储层查不到数据则不会写入数据层。这样将会导致数据的每次请求都要到存储层去查询,给存储层带来较大的访问压力,从而失去了缓存保护后端存储的意义。造成缓存穿透的基本原因有两个第一,自身业务代码或者数据出现问题。第二,一些恶意攻击、爬虫等造成。解决方案缓存空对象如果缓存层和存储层都没有命中,则先再存储层中存储对应key为为空值,并设置过期时间。String get(String ke

2022-03-15 19:56:00 894

原创 SpringBoot配置type-aliases-package后xml文件爆红

配置过后不影响程序正常运行,但是会爆红检查如果该插件开启,别名配置将会爆红,关闭即可

2022-03-01 18:11:20 741

原创 说说Redis中的缓存穿透,缓存击穿,缓存雪崩

缓存穿透先说下什么叫缓存穿透大量并发查询不存在的 KEY,在缓存和数据库中都不存在,同时给缓存和数据库带来压力,这就是缓存穿透。产生原因一般而言,缓存穿透的传声有 2 种可能性:业务数据被误删,导致缓存和数据库中都没有数据,还有一种就是恶意进行 ddos 攻击。解决方式缓存空值的 KEY,这样第一次不存在也会被加载会记录,下次拿到有这个KEY。Bloom 过滤或 RoaingBitmap 判断 KEY 是否存在,如果布隆过滤器中没有查到这个数据,就不去数据库中查。在处理请求前增加恶意请求检查,如

2022-01-24 17:32:39 606

原创 说说Map是集合吗

今天遇到一个问题Map是集合吗?我们看下面这个图(来自菜鸟教程)上图标题很明显”Java集合框架图“从中我们可以看到有Map的存在,那么平常我们说的集合包括Map吗?我们平常说的集合都是指Collection下的Set,List。而Map是否真如上图表示的一样,是集合呢??在《java编程思想》中有一下描述:Java使用类库还提供了一套相当完整的容器类来解决这个问题,其中基本的类型是List、Set,Queue和Map。这些对象也称为集合类,但是由于Java类库中使用了Collecti

2022-01-24 09:58:33 1449

原创 dbvis

1.dbvis下载地址:链接:https://pan.baidu.com/s/1WC1UHUWxvhD_q2GSYOG4uA提取码:5rov2.下载后安装dbvis3.将hive的目录放在已安装好的dbvis的jdbc的目录下。4.hive-site.xml中增加属性<!-- 这是hiveserver2 --> <property> <name>hive.server2.thrift.port</name> &

2022-01-18 09:31:42 546

原创 RocketMQ__NameSever

NameServer 架构设计消息中间件的设计思路一般基于主题的订阅发布机制,消息生产者( Producer )发送某 主题的消息到消息服务器,消息服务器负责该消息的持久化存储,消息消费者(Consumer)订阅感兴趣的主题,消息服务器根据订阅信息(路由信息)将消息推送到消费者( PUSH 模式)或者消息消费者主动向消息服务器拉取消息( PULL 模式),从而实现消息生产者与消息消费者解调,为了避免消息服务器的单点故障导致的整个系统瘫痪,通常会部署多台消息服务器共同承担消息的存储。Broker 消息服务

2022-01-11 09:45:20 967

原创 Spring__循环依赖解读

什么是循环依赖A类的创建依赖与B类,B类的创建依赖于A类有4种简单的情况依赖情况依赖注入方式循环依赖是否被解决AB相互依赖(循环依赖)均采用setter方法注入是AB相互依赖(循环依赖)均采用构造器注入否AB相互依赖(循环依赖)A中注入B的方式为setter方法,B中注入A的方式为构造器是AB相互依赖(循环依赖)B中注入A的方式为setter方法,A中注入B的方式为构造器否以上情况后续会讲Spring怎么去解决循环依赖三级缓存在

2022-01-04 19:51:09 246

原创 多线程__ThreadLocal

ThreadLocal作用很多地方叫做线程本地变量,也有些地方叫做线程本地存储,ThreadLocal 的作用是提供线程内的局部变量,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或者组件之间一些公共变量的传递的复杂度ThreadLocalMap(线程的一个属性)每个线程中都有一个自己的 ThreadLocalMap 类对象,可以将线程自己的对象保持到其中,各管各的,线程可以正确的访问到自己的对象。将一个共用的 ThreadLocal 静态实例作为 key,将不同对象的引用保存到不同

2021-12-28 17:26:38 321

原创 多线程__CAS

什么是CASCAS,compare and swap的缩写,中文翻译成比较并交换。作用利用CPU的CAS指令,同时借助JNI来完成Java的非阻塞算法。其它原子操作都是利用类似的特性完成的。而整个J.U.C都是建立在CAS之上的,因此对于synchronized阻塞算法,J.U.C在性能上有了很大的提升。存在的问题ABA因为CAS需要在操作值的时候检查下值有没有发生变化,如果没有发生变化则更新,但是如果一个值原是A,变成了B,又变成了A,那么使用CAS进行检查时会发现它的值没有发生变化,但是

2021-12-28 14:33:08 102

原创 多线程__上下文切换

线程的上下文切换

2021-12-28 09:21:52 514

原创 多线程___守护线程

守护线程定义守护线程–也称“服务线程”,他是后台线程,它有一个特性,即为用户线程 提供 公共服务,在没有用户线程可服务时会自动离开优先级守护线程的优先级比较低,用于为系统中的其它对象和线程提供服务。设置通过 setDaemon(true)来设置线程为“守护线程”;将一个用户线程设置为守护线程的方式是在线程对象创建 之前 用线程对象的 setDaemon 方法。在 Daemon 线程中产生的新线程也是 Daemon 的。线程则是 JVM 级别的,以 Tomcat 为例,如果你在 Web 应用

2021-12-27 21:23:30 125

原创 多线程__线程间通信wait和notify

wait和notifywait( ),notify( ),notifyAll( )都不属于Thread类,而是属于Object基础类,也就是每个对象都有wait( ),notify( ),notifyAll( ) 的功能,因为每个对象都有锁,锁是每个对象的基础,当然操作锁的方法也是最基础了。当需要调用以上的方法的时候,一定要对竞争资源进行加锁,如果不加锁的话,则会报IllegalMonitorStateException 异常当想要调用wait( )进行线程等待时,必须要取得这个锁对象的控制权(对象

2021-12-27 21:18:48 208

原创 多线程__线程创建方式

创建方式继承Thread类Thread 类本质上是实现了 Runnable 接口的一个实例,代表一个线程的实例。启动线程的唯一方法就是通过 Thread 类的 start()实例方法。start()方法是一个 native 方法,它将启动一个新线程,并执行run()方法public class MyThread extends Thread {public void run() {System.out.println("MyThread.run()");}}MyThread myTh

2021-12-27 21:12:12 94

原创 多线程__线程安全

线程安全如果线程执行过程中不会产生共享资源的冲突,则线程安全。如果有多个线程同时在操作主内存中的变量,则线程不安全实现线程安全的方式互斥同步临界区:syncronized、ReentrantLock信号量 semaphore互斥量 mutex互斥同步锁也叫做阻塞同步锁,特征是会对没有获取锁的线程进行阻塞。要理解互斥同步锁,首选要明白什么是互斥什么是同步。简单的说互斥就是非你即我,同步就是顺序访问。互斥同步锁就是以互斥的手段达到顺序访问的目的。操作系统提供了很多互斥机制比如信号量,互

2021-12-27 21:01:34 130

原创 多线程___僵尸进程

僵死进程是指子进程退出时,父进程并未对其发出的SIGCHLD信号进行适当处理,导致子 进程停留在僵死状态等待其父进程为其收尸,这个状态下的子进程就是僵死进程。

2021-12-27 20:55:21 209

原创 多线程__内存泄漏

什么是内存泄漏对于应用程序来说,当对象已经不再被使用,但是Java的垃圾回收器不能回收它们的时候,就产生了内存泄露。未引用对象将会被垃圾回收器回收,而引用对象却不会。未引用对象很显然是无用的对象。然而,无用的对象并不都是未引用对象,有一些无用对象也有可能是引用对象,这部分对象正是内存泄露的来源。为什么会发生内存泄漏让我们用下面的例子来看看为什么会发生内存泄露。对象A引用对象B,A的生命周期(t1-t4)比B的生命周期(t2-t3)要长,当B在程序中不再被使用的时候,A仍然引用着B。在这种情况下

2021-12-27 20:53:45 700

原创 多线程__线程间状态

Java 线程在运行的生命周期中的指定时刻只可能处于下面 6 种不同状态的其中一个状态。以下为源码: public enum State { NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED; }线程在生命周期中并不是固定处于某一个状态而是随着代码的执行在不同状态之间切换。Java 线程状态变迁如下图所示:初

2021-12-27 19:54:27 141

原创 Mysql学习

Mysql相关学习一.认识数据库1.1 作用1.2 数据库设计1.3 黑客攻击手段1.4 数据库范式二、Mysql2.1 架构2.2 权限表2.3 事务三、数据库引擎一.认识数据库1.1 作用用来存储、管理数据1.2 数据库设计需求分析需求收集和分析,得到数据字典和数据流图概念设计对用户需求综合,归纳与抽象,用E-R图表示逻辑设计将概念结构转换为某个DBMS所支持的数据模型物理设计为逻辑数据模型选取一个适合应用环境的物理结构实施建立数据库,编制与调试应用程序,组织数据入库,程序

2021-12-22 21:08:35 2122

原创 synchronized

synchronized的三种应用方式修饰实例方法,作用于当前实例加锁,进入同步代码前要获得当前实例的锁修饰静态方法,作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁修饰代码块,指定加锁对象,对给定对象加锁,进入同步代码库前要获得给定对象的锁。synchronized底层语义原理ava 虚拟机中的同步(Synchronization)基于进入和退出管程(Monitor)对象实现, 无论是显式同步(有明确的 monitorenter 和 monitorexit 指令,即同步代

2021-12-20 20:53:47 500

原创 JMM内存模型

JMM内存模型不是JVM内存结构!!!!Java内存模型(即Java Memory Model,简称JMM)本身是一种抽象的概念,并不真实存在,它描述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式,目的是解决由于多线程通过共享内存进行通信时,存在的本地内存数据不一致、编译器会对代码指令重排序、处理器会对代码乱序执行等带来的问题。参考参考...

2021-12-20 18:31:18 91

原创 java对象

由于Java面向对象的思想,在JVM中需要大量存储对象,存储时为了实现一些额外的功能,需要在对象中添加一些标记字段用于增强对象功能 。在学习并发编程知识synchronized时,我们总是难以理解其实现原理,因为偏向锁、轻量级锁、重量级锁都涉及到对象头,所以了解java对象头是我们深入了解synchronized的前提条件,以下我们使用64位JDK示例1.对象布局的总体结构2.获取一个对象布局实例public class Main{ public static void main(Stri.

2021-12-19 19:47:30 252

原创 多线程面试点

目录1.并发编程的优缺点2.并发编程的目的3.并发编程3要素4.线程的安全问题产生的原因5.解决多线程安全问题的方案6.并发与并行7.什么是多线程8.多线程的优缺点9.线程与进程10.线程与进程的区别11.用户线程和守护线程12.死锁13.死锁产生的四个必要条件14.避免死锁15.创建线程的方式16.Runnable接口和Callable接口有何区别17.run()方法和start()方法有和区别18.为什么需要调用start()方法来执行run()方法19.线程声明周期的6种状态20.调度算法21.Jav

2021-12-19 15:21:18 314

原创 你该知道的---上下文切换

多线程编程中一般线程的个数都大于 CPU 核心的个数,而一个 CPU 核心在任意时刻只能被一个线程使用,为了让这些线程都能得到有效执行,CPU 采取的策略是为每个线程分配时间片并轮转的形式。当一个线程的时间片用完的时候就会重新处于就绪状态让给其他线程使用,这个过程就属于一次上下文切换。概括来说就是:当前任务在执行完 CPU 时间片切换到另一个任务之前会先保存自己的状态,以便下次再切换回这个任务时,可以再加载这个任务的状态。任务从保存到再加载的过程就是一次上下文切换。上下文切换通常是计算密集型的。也就是说,它

2021-12-18 18:12:14 603

原创 多线程总结

目录一.概念1.1 线程,进程,程序1.2 并发,并行,串行1.3 同步,异步二.线程2.1生命周期2.2常用命令2.3调度方式2.4优先级2.5分类2.6优点2.7特性三.创建多线程四.线程池4.1定义4.2作用4.3创建流程4.4优点4.5分类4.6参数及配置4.7任务执行流程五.对象六.锁6.1分类6.2死锁七.同步7.1synchronized7.2Lock7.3Volatile一.概念1.1 线程,进程,程序线程:线程是进程的一部分,描述指令流执行状态。它是进程中的指令执行流的最小单位,是

2021-12-18 16:44:42 215

原创 url传参@RequestParam@PathVariable@RequestBody

@RequestParam将请求参数区域的数据映射到控制层方法的参数上为参数设定默认值当提交参数名称与接收参数不一致时使用,如果传入多个参数可以对参数进行封装url?userName=zhl&userName=holleypublic String requestparam8(@RequestParam(value="userName") String [] userNames) @PathVariable用来接收绑定以Restful风格传过来的参数,如果参数名称不一致,需要表.

2021-12-16 16:33:04 1494

原创 Redis高可用----分布式集群

一、Redis高可用高可用,也叫HA(High Availability),是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。如果在实际生产中,如果redis只部署一个节点,当机器故障时,整改服务都不能提供服务了。这就是我们常说的单点故障。如果redis部署了多台,当一台或几台故障时,整个系统依然可以对外提供服务,这样就提高了服务的可用性。二、Redis高可用模式1.主从模式1.1 概述redis多机器部署时,这些机器节点会被分成两类,一类是主节点(ma

2021-12-14 09:33:01 450

原创 Redis缓存

1.Redis是什么Redis 是完全开源免费的,遵守 BSD 协议,是一个高性能的 key-value 数据库。Redis 与其他 key - value 缓存产品有以下三个特点:Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。Redis 不仅仅支持简单的 key-value 类型的数据,同时还提供 list,set,zset,hash 等数据结构的存储。Redis 支持数据的备份,即 master-slave 模式的数据备份。2.Redis缓

2021-12-13 17:34:47 567

原创 Redis面试

1.为什么使用redis传统的关系型数据库如Mysql已经不能适用所有的场景了,比如秒杀的库存扣减,APP首页的访问流量高峰等等,都很容易把数据库打崩,所以引入了redis。2.redis数据结构字符串String,哈希Hash,列表list,无序集合set,有序集合zsetHyperLogLog基数操作,Geospatial地理操作,Bitmaps位操作3.怎样避免大量Key同时过期如果Key的过期时间设置的过于集中,到达过期时间点是,redis可能会出现短暂的卡顿,严重的化会出现雪崩,我们一

2021-12-13 10:53:19 590

原创 Redis持久化

Redis持久化1.Redis是什么2.Redis持久化3.持久化机制2.3 RDB2.3.1 实现原理2.3.2 触发机制2.3.3 执行流程2.3.4 优缺点2.4 AOF机制2.4.1 持久化原理2.4.2 执行流程2.4.3 优缺点2.4.4 选择哪个1.Redis是什么Redis 是完全开源免费的,遵守 BSD 协议,是一个高性能的 key-value 数据库。Redis 与其他 key - value 缓存产品有以下三个特点:Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中

2021-12-12 19:11:14 399

原创 Redis数据类型

Redis学习记录1. Redis简介2. Redis数据结构2.1 String2.1.1 SDS概述2.1.2 SDS 的存储示例:2.1.3 使用SDS而不使用c语言的string的好处:2.1.4 常用命令2.1.5 String作为数值操作时的注意事项2.1.6 内部编码2.1.7 使用场景2.2 list列表2.2.1 list概述2.2.2 常用命令2.2.3 内部编码2.2.4 使用场景2.2.5 开发提示2.3 set集合2.3.1 概述2.3.2 常用命令2.3.3 内部编码2.3.4

2021-12-12 17:53:07 468

原创 Spring__IOC容器初始化,Bean的生命周期

IOC容器的初始化最简单的也就是3个步骤,初始化Spring容器,注册内置的BeanPostProcessor的BeanDefinition到容器中;将配置类的BeanDefinition注册到容器中;调用refresh()方法刷新容器结合AnnotationConfigApplicationContext 进行分析初始化容器,注册后置处理器的BeanDefinition1.实例化容器容器就是来创建管理bean的,所以必须先实例化BeanFactory【DefaultListableBeanFact

2021-12-10 12:02:01 657

原创 openfeign的调用

消费端package com.jt.consumer.service;@FeignClient(name="sca-provider")//sca-provider为服务提供者名称public interface RemoteProviderService{ @GetMapping("/provider/echo/{string}")//前提是远端需要有这个服务 public String echoMessage(@PathVariable("string") String strin

2021-12-01 19:13:26 989

原创 报错java.lang.IllegalArgumentException: Param ‘serviceName‘ is illegal, serviceName is blank

没有在yml配置文件中指定服务名称解决

2021-12-01 14:23:29 3324

原创 报错 No constructor found in void matching

org.apache.ibatis.executor.ExecutorException: No constructor found in void matching [java.lang.String]没有对应类型的构造器在Mapper中写的是而在service中返回的是解决:将这里改为,并将selectUserPermissions返回值进行修改...

2021-12-01 11:50:00 3457

原创 报错NoSuchBeanDefinitionException

报错解决Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'javax.sql.DataSource' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.bean

2021-12-01 10:36:37 556

原创 报错Param ‘serviceName‘ is illegal, serviceName is blank

在Nacos配置中心中配置网关报错少些配置了,下面注释打开就行了

2021-11-30 09:47:09 3131

原创 GateWay

导入依赖<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency>配置配置文件server: port: 9000spring: application: n

2021-11-29 14:59:51 169

多线程211229.xmind

多线程相关基础知识

2021-12-30

空空如也

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

TA关注的人

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