自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MySQL 中 You can‘t specify target table ‘表名‘ for update in FROM clause错误解决办法

这里写自定义目录标题问题解释:不能在更新或删除的sql里嵌套子查询错误sql:delete from ent_role_user where (user_code ,role_code, tenant_code ) in ( select user_code ,role_code,tenant_code from ent_role_user where user_code = #{userName} and tenant_cod

2021-09-26 15:44:41 833

原创 org.springframework.web.multipart.MultipartException: Current request is not a multipart request

由上可知,报错提示当前请求不是一个 multipart request原因是在feign中,发送 multipartfile文件,应该使用【@RequestPart】而不是【@RequestParam】,且需要设置请求content-type为【multipart/form-data】,所以正确写法如下//正确方式 @PostMapping(value = "/service_a/upload",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)

2021-08-31 14:19:44 8675 3

原创 Intellij IDEA如何生成JavaDoc

javadoc基本介绍javadoc是Sun公司提供的一个技术,它从程序源代码中抽取类、方法、成员等注释形成一个和源代码配套的API帮助文档。也就是说,只要在编写程序时以一套特定的标签作注释,在程序编写完成后,通过Javadoc就可以同时形成程序的开发文档了。javadoc命令是用来生成自己API文档的,使用方式:使用命令行在目标文件所在目录输入javadoc +文件名.java。javadoc常用标识@author 作者@version 版本号@param 参数名 描述 方法的入参名及描述信息

2021-03-25 19:56:45 277

原创 Bug解决-----Exception in thread “main“ java.security.InvalidKeyException: Invalid key length: 7 bytes

异常如下:Exception in thread "main" java.security.InvalidKeyException: Invalid key length: 7 bytes at com.sun.crypto.provider.DESCipher.engineGetKeySize(DESCipher.java:373) at javax.crypto.Cipher.passCryptoPermCheck(Cipher.java:1067) at javax.crypto.Cipher

2021-02-10 12:09:44 2037

原创 ConcurrentHashMap源码分析

一、jdk1.8容器初始化1、源码分析在jdk8的ConcurrentHashMap中一共有5个构造方法,这五个构造方法中都没有对内部的数组做初始化, 只是对一些变量的初始值做了处理//没有维护任何变量的操作,如果调用该方法,数组长度默认是16 public ConcurrentHashMap() { }注意,调用可以传递初始容量的构造方法,得到的初始容量和HashMap以及jdk7的ConcurrentHashMap不同,即使你传递的是一个2的幂次方数,该方法计算出来的初始容量依然是

2021-02-07 11:33:16 190 1

原创 java内存模型(二)---重排序

重排序是指编译器和处理器为了优化程序性能而对指令序列进行重新排序的一种手段。

2021-02-02 20:59:13 109

原创 java内存模型(一)--java内存模型的基础

一.并发编程模型的两个关键问题在并发编程中,需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的 线程是指并发执行的活动实体)。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。在共享内存的并发模型里,线程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式通信。在消息传递的并发模型里,线程之间没有公共状态,线程之间必须通过发送消息来显式进行通信。同步是指程序中用于控制不同线程间操作发生相对顺序的机制。在共享内存并发模型里,同步是显式

2021-02-02 19:38:15 92

原创 JUC(四)---JUC下常用的辅助类(CountDownLatch.CyclicBarrier,Semaphore)

一.CountDownLatch—计数器代码测试:public class CountDownLatchTest { public static void main(String[] args) throws InterruptedException { // 总数是6,必须要等执行完6个线程后才能执行await下面的代码 //例如:有6个学生,一定要等6个学生走完后才能关门 CountDownLatch countDownLatch = new

2021-01-22 15:04:24 142 1

原创 JUC(三)-----Callable

一.与Runnable的区别1.可以有返回值,获取返回值时可能需要等待,会阻塞2,可以抛出异常3.方法不同,run/call4.二.代码测试:public class CallableTest { public static void main(String[] args) throws ExecutionException, InterruptedException { //怎么启动Callable---用futurTask来做中间类传递 Future.

2021-01-22 14:51:25 103 1

原创 JUC(二)----解决集合类不安全的问题

一.List不安全并发下,ArrayList不安全的,会出现并发修改异常ConcurrentModificationException二. 解决办法1.用Vector类没有问题2.用Collections.synchronizedList3.用JUC包下的CopyOnWriteArrayListCopyOnWrite 写入时复制三.Set和Map不安全,用JUC下的CopyOnWriteArraySet和ConcurrentHashMap在并发下HashSet和HashMap也会

2021-01-22 14:37:05 112 1

原创 JUC(一)------什么是JUC

指的是java.util.concurrent包下的类和接口,用于并发编程

2021-01-22 14:19:07 146

原创 分库分表(四)----Sharding JDBC的快速入门

一.需求说明本章节使用Sharding-JDBC完成对订单表的水平分表,通过快速入门程序的开发,快速体验Sharding-JDBC的使用 方法。人工创建两张表,t_order_1和t_order_2,这两张表是订单表拆分后的表,通过Sharding-Jdbc向订单表插入数据, 按照一定的分片规则,主键为偶数的进入t_order_1,另一部分数据进入t_order_2,通过Sharding-Jdbc 查询数 据,根据 SQL语句的内容从t_order_1或t_order_2查询数据。二.环境搭建2.1

2021-01-19 09:54:23 136

原创 分库分表(三)----Sharding-JDBC

一.Sharding-JDBC介绍Sharding-JDBC是当当网研发的开源分布式数据库中间件,从 3.0 开始Sharding-JDBC被包含在 Sharding-Sphere 中,之后该项目进入Apache孵化器,4.0版本之后的版本为Apache版本ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding- Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成。 他们均提供标准化的数据分片、分布式事

2021-01-19 09:35:33 134

原创 分库分表(二)---分库分表带来的问题

分库分表能有效的缓解了单机和单库带来的性能瓶颈和压力,突破网络IO,硬件资源,连接数的瓶颈,但同时也带来了一些问题.一.事务一致性问题由于分库分表把数据分布在不同的库甚至不同服务器,不可避免带来分布式事务的问题.二.跨节点关联查询在没有分库前,我们检索商品时可以通过以下SQL对店铺信息进行关联查询:SELECT p.*,r.[地理区域名称],s.[店铺名称],s.[信誉]FROM [商品信息] pLEFT JOIN [地理区域] r ON p.[产地] = r.[地理区域编码]LEFT JO

2021-01-19 09:28:34 254

原创 分库分表(一)---什么是分库分表

一.分库分表是什么小明是一家初创电商平台的开发人员,他负责卖家模块的功能开发,其中涉及了店铺、商品的相关业务,设计如下 数据库:通过以下SQL能够获取到商品相关的店铺信息、地理区域信息:SELECT p.*,r.[地理区域名称],s.[店铺名称],s.[信誉] FROM [商品信息] p LEFT JOIN [地理区域] r ON p.[产地] = r.[地理区域编码]LEFT JOIN [店铺信息] s ON p.id = s.[所属店铺] WHERE p.id = ?随着公司业务快

2021-01-19 09:15:05 276

原创 Xshell连接不上虚拟机怎么办,或者在虚拟机上用ifconfig查询不到对应的ip地址

我连接不上的原因是因为虚拟机意外关机了,在虚拟机上用ifconfig查询不到对应的ip地址解决办法:1)在虚拟机上,输入命令nmcli n会出现disabled2)再输入:nmcli n on3)再用ifconfig查询就可以出现对应的ip了...

2020-12-31 16:42:37 339

原创 nacos在linux上启动时报内存不足怎么办

刚在centos 7上安装 Nacos 时启动,发现报错了,看了报错信息,是启动内存不够,我们打开启动脚本查看了一下vim /usr/local/tmp/nacos/bin/startup.shstandalone代表着单机模式运行,非集群模式Xms 是指设定程序启动时占用内存大小Xmx 是指设定程序运行期间最大可占用的内存大小-Xmn 新生代的大小我们调整下 Xms 和 Xmx 的大小修改这三个值的大小,依次为 64 64 40,然后保存退出: wq!接着进入 nacos bin目录

2020-12-31 14:41:51 2439 1

原创 zookeeper面试题----什么是ZAB协议,zookeeper的节点类型,服务器的角色有什么

一.ZAB协议是什么ZAB协议是为分布式协调服务zookeeper专门设计的一种支持崩溃恢复的原子广播协议.ZAB协议包括两种基本的模式:崩溃恢复和消息广播.当整个zookeeper集群刚刚启动或者leader服务器宕机.重启或者网络故障导致不存在过半的服务器与leader的服务器保持正常的通信时,所有服务器进入崩溃恢复模式,首先 选举产生新的leader服务器,然后集群follower服务器开始与新的leader服务器进行数据同步,当集群中超过半数的机器与该leader服务器完成数据同步之后,退出恢

2020-12-23 21:14:54 173

原创 面试题----在什么地方可以用mq,或者为什么要使用mq

首先,mq的作用有三个:1.实现异步通信同步通信是什么样的?发出一个调用请求之后,在没有得到结果之前,就不返回,由调用者主动等待这个调用的结果,而异步是相反的,在调用发出之后,这个调用就直接返回了,所以没有返回结果,也就是说,当一个异步过程调用发出后,调用者不会马上得到结果,而是在调用发出后,被调用者通过状态,通知来通知调用者,或者通过回调函数处理这个调用2.实现系统解耦在我们的分布式系统中,一个业务流程涉及多个系统的时候,他们之间就会形成一个依赖关系。比如我们以 12306 网站退票为例,在传

2020-12-20 16:45:59 1436 4

原创 kafka(九)---Kafka消息的可靠性

没有一个中间件能够做到百分之百的完全可靠,可靠性更多的还是基于几个9的衡量指标,比如4个9、5 个9. 软件系统的可靠性只能够无限去接近100%,但不可能达到100%。所以kafka如何是实现最大可能的可靠性呢?分区副本:你可以创建更多的分区来提升可靠性,但是分区数过多也会带来性能上的开销,一般来说,3个副本就能满足对大部分场景的可靠性要求acks:生产者发送消息的可靠性,也就是我要保证我这个消息一定是到了broker并且完成了多副本的持久化,但这种要求也同样会带来性能上的开销。它有几个可选项:

2020-12-20 16:23:58 221

原创 kafka(八)----分区的副本机制

一.分区的副本机制我们已经知道Kafka的每个topic都可以分为多个Partition,并且多个partition会均匀分布在集群的各个节点下。虽然这种方式能够有效的对数据进行分片,但是对于每个partition来说,都是单点的,当其中一个partition不可用的时候,那么这部分消息就没办法消费。所以kafka为了提高partition的可靠性而提供了副本的概念(Replica),通过副本机制来实现冗余备份。每个分区可以有多个副本,并且在副本集合中会存在一个leader的副本,所有的读写请求都

2020-12-20 16:16:58 274

原创 kafka(七)----如何保存消费端的消费位置

一.什么是offset每个topic可以划分多个分区(每个Topic至少有一个分区),同一topic下的不同分区包含的消息是不同的。每个消息在被添加到分区时,都会被分配一个offset(称之为偏移量),它是消息在此分区中的唯一编号,kafka通过offset保证消息在分区内的顺序,offset的顺序不跨分区,即kafka只保证在同一个分区内的消息是有序的; 对于应用层的消费来说,每次消费一个消息并且提交以后,会保存当前消费到的最近的一个offset。那么offset保存在哪里?offset在哪里维护?

2020-12-20 16:05:54 479 1

原创 kafka(六)----如何确定coordinator

一.谁来执行Rebalance以及管理consumer的group呢?kafka提供了一个角色,coordinator来执行对于consumer group的管理,当consumer group的第一个consumer启动的时候,它会去和kafka server确定谁是它们组的coordinator。之后该group内的所有成员都会和该coordinator进行协调通信二.如何确定coordinatorconsumer group如何确定自己的coordinator是谁呢, 消费者向kafka集群中的

2020-12-20 15:39:20 1299 4

原创 kafka(五)----kafka的分区分配策略

一.什么是分区分配策略同一个group中的消费者对于一个topic中的多个partition,存在一定的分区分配策略。在kafka中,存在三种分区分配策略,一种是Range(默认),另一种是RoundRobin(轮询),StickyAssignor(粘性),在消费端中的ConsumerConfig中,通过这个属性来指定分区分配策略public static final String PARTITION_ASSIGNMENT_STRATEGY_CONFIG = "partition.assignment

2020-12-20 15:20:32 460

原创 kafka(四)---kafka的使用原理

一.关于Topic和PartitionTopic在kafka中,topic是一个存储消息的逻辑概念,可以认为是一个消息集合。每条消息发送到kafka集群的消息都有一个类别。物理上来说,不同的topic的消息是分开存储的,每个topic可以有多个生产者向它发送消息,也可以有多个消费者去消费其中的消息。Partition每个topic可以划分多个分区(每个Topic至少有一个分区),同一topic下的不同分区包含的消息是不同的。每个消息在被添加到分区时,都会被分配一个offset(称之为偏移量)

2020-12-20 15:09:02 126

原创 kafka(三)----java中使用kafka进行通信

一.kafaka的异步发送kafka对于消息的发送,可以支持同步和异步,同步会需要阻塞,而异步不需要等待阻塞的过程,从本质上来说,kafka都是采用异步的方式来发送消息到broker,但是kafka并不是每次发送消息都会直接发送到broker上,而是把消息放到了一个发送队列中,然后通过一个后台线程不断从队列中取出消息进行发送,发送成功后会触发callback,kafka客户端会积累一定量的消息统一组成一个批量消息发送出去,触发条件是前面提到的batch.size和linger.ms.而同步发送的方法,

2020-12-20 14:51:49 478

原创 形参和实参的区别

1)形参的作用范围为方法的内部,当方法调用结束后,形参的生命周期也就结束了,因此,在方法外不能使用形参,它只有在被调用时才会分配内存单元,调用结束后会立刻释放内存空间,而实参不能在调用方法的内部使用.2)在方法调用的时候,只能把实参的值传送给形参而不能把形参的值反向的传递给实参,因此,在方法调用过程中,对形参值的改变不会影响实参的值如下例所示:public class Test { public static void f(int n) { n++; Syst

2020-12-20 14:00:03 3057

原创 kafka(二)---kafka的安装部署

一.下载https://archive.apache.org/dist/kafka/2.0.0/kafka_2.11-2.0.0.tgz二.安装过程安装过程非常简单,只需要解压就行,因为这个是编译好之后的可执行程序tar -zxvf kafka_2.11-2.0.0.tgz三.配置zookeeper因为kafka依赖于zookeeper来做master选举一起其他数据的维护,所以需要先启动zookeeper节点kafka内置了zookeeper的服务,所以在bin目录下提供了这些脚本zo

2020-12-19 11:48:13 139 1

原创 kafka(一)----应用场景分析及名词解释

一.什么是KafkaKafka是一款分布式消息发布和订阅系统.他的特点是高性能,高吞吐量,最早设计的目的是作为LinkedIn的活动流和运营数据的处理管道。这些数据主要是用来对用户做用户画像分析以及服务器性能数据的一些监控,所以kafka一开始设计的目标就是作为一个分布式、高吞吐量的消息系统,所以适合运用在大数据传输场景二.Kafka的应用场景由于Kafka具有更好的吞吐量,内置分区,冗余及容错性的优点(Kafka每秒可以处理十几万的消息),让Kafka成为了一个很好的大规模消息处理应用的解决方案,所

2020-12-19 11:38:35 393 1

原创 设计模式----策略模式

一.策略模式的应用场景1.假如系统中有很多类,而他们的区别仅仅在于他们的行为不同.2.一个系统需要动态地在几种算法中选择一种.

2020-12-15 09:16:18 93

原创 对一个ArrayList的元素去重,元素类型为自定义对象.请给出自定义类的关键代码和去重算法

一.自定义类中关键代码 //User类中的equals方法 @Override public boolean equals(Object o) { User user = (User) o; return age == user.age && Objects.equals(name, user.name); }二.去重算法----选择排序 ArrayList<User> list = new ArrayList&lt

2020-12-14 19:21:04 196 4

原创 编程题:有数组a,请将数组封装到list,然后将封装好的List删除偶数,输出删除后的List

方法一:add方法public class Test01 { public static void main(String[] args) { Integer[] a = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; List<Integer> list = new ArrayList<>(); List<Integer> newList = new ArrayList<Integer&gt

2020-12-14 19:17:08 137

原创 设计模式 -----委派模式

委派模式不属于GOF23种设计模式中,它的基本作用就是负责任务的调用和分配任务,Spring中的DispatcherServlet就是用到了委派模式,现实生活中也常有委 派的场景发生,例如:老板(Boss)给项目经理(Leader)下达任务,项目经理会根据 实际情况给每个员工派发工作任务,待员工把工作任务完成之后,再由项目经理汇报工 作进度和结果给老板。

2020-12-14 15:34:46 102

原创 设计模式---模板模式

模板模式通常又叫模板方法模式,是指定义一个算法的骨架,并允许子类为一个或者多个步骤提供实现,模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤,属于行为性设计模式

2020-12-11 22:35:34 179 1

原创 理理Spring中一个bean的创建过程-------AbstractApplicationContext这个抽象类中的refresh()方法

public void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownMonitor) { StartupStep contextRefresh = this.applicationStartup.start("spring.context.refresh"); // Prepare this context for refreshing. prep

2020-12-03 14:33:57 158

原创 我理解的Spring的循环依赖

一.具体过程:所谓循环依赖,是指在两个类之间的相互引用,例如在A中引用B,B中引用A,那Spring容器在创建A时的步骤如下:1)先从单例池中拿,这个单例池即我们经常说的spring容器,也可以称之为一级缓存,里面是一个map集合,装的是完整的bean2)如果单例池中没有,那就会去调用createbean方法去创建,在创建的同时,把它放入一个set集合中,表示该类正在创建3)在new 完A后,会先去判断是否支持循环引用,如果支持,就会先把这个new但是还没进行属性注入的A放到一个二级缓存中,我们把它

2020-12-02 20:04:40 89

原创 用gradle4.4转化spring,发现依赖包integration-0.9.15.jar已经不在仓库了,应该怎么解决?

A problem occurred configuring root project 'spring'.> Could not resolve all files for configuration ':classpath'. > Could not find org.jetbrains.dokka:integration:0.9.15. Searched in the following locations: https://plugins.gradle.

2020-12-02 09:44:47 930

原创 MyBatis(三)-----源码解析(一)

分析源码,我们还是从编程式的 demo 入手 InputStream inputStream = Resources.getResourceAsStream(resource);//步骤1 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//步骤2 SqlSession session = sqlSessionFactory.openSessi

2020-12-01 10:18:21 82 1

原创 MyBatis(一)-----MyBatis中的二级缓存

一.二级缓存的介绍1)二级缓存是用来解决一级缓存不能跨会话共享的问题的,范围是namespace级别的,可以被多个SqlSession共享(只要是同一个接口里面的相同方法,都可以共享),生命周期和应用同步二.面试题1.如果开启了二级缓存,二级缓存应该是工作在一级缓存之前,还是在一级缓存之后呢?二级缓存是在哪里维护的呢? 答:作为一个作用范围更广的缓存,它肯定是在SqlSession的外层,否则不可能被多个SqlSession共享。而一级缓存是在SqlSession内部的,所以第一个问题,肯定是工作在

2020-11-30 22:39:47 218

原创 MyBatis(一)-----MyBatis中的一级缓存

一.概述1.MyBatis跟缓存相关的类都在cache包里面,其中有一个Cache接口,只有一个默认的实现类PerpetualCache,它是用HashMap实现的,除此之外,还有很多的装饰器,通过这些装饰器可以额外实现很多的功能2.所有的缓存实现类总体可分为三类:基本缓存,淘汰算法缓存,装饰器缓存二.一级缓存1.特点:1)一级缓存是在会话(SqlSession)层面进行缓存的2)默认是开启的,不需要任何的配置3)PerpetualCache对象是放在Executor里面维护的----

2020-11-30 22:26:50 155

skywalking_springboot.jar

skywalking spring jar包,随着分布式系统和微服务架构的出现,一次用户的请求会经过多个系统,不同服务之间的调用关系十分 复杂,任何一个系统出错都可能影响整个请求的处理结果。以往的监控系统往往只能知道单个系统的健 康状况、一次请求的成功失败,无法快速定位失败的根本原因。

2020-08-04

空空如也

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

TA关注的人

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