自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Prometheus/Metrics监控dubbo线程池状态

代码里用了一个AtomicBoolean inited变量,因为一个项目里大概率是有多个service的,每一个service都会去做export操作,所以这里的onApplicationEvent方法,会进来多次,但实际上netty进程只会创建一次,就是在第一个service的export动作里完成的,所以只要第一个通知进来,就可以了。然后第一篇文章里,为了获取dubbo线程池,通过一个死循环去不断的去获取,然后注册到Registry里,因为不知道dubbo线程池实例化好的时机。

2023-04-19 18:11:26 1434

原创 IO控制基础篇

1.I/O控制器cup与物理设备之间有一个“中介”:I/O控制器,实现cpu与磁盘之间的控制。I/O控制器的功能:cpu发来的read或write命令,I/O控制器会有对应的控制寄存器来存放命令和参数。还有对应的状态寄存器,来记录I/O设备的当前状态,如,1表示空闲,0表示忙碌。I/O控制器还有个数据寄存器,在输出时,会暂存cpu发过来的数据,然后再把数据传送至设备;输入时,数据寄存器就会暂存设备发来的数据,之后cpu就会从数据寄存器里取走数据。I/O控制器有这么多的寄存器,就需要识别这些寄存

2021-01-31 23:38:29 1111

原创 Future这玩意

异步执行,听起来很抽象,简单的来说,主线程不管这件事了,起了个新的线程去做这件事,那么这件事的执行过程,对于主线程而言,就是异步的。可以把这件事的执行过程给抽象出来,定义为一个方法,方法的内容就是这件事的具体执行过程。比如Runnable。RunnableRunnable接口只有一个run()方法,run()里面的内容就是这件事执行的过程,怎么去异步呢?new Thread(new Runnable(){ @Override public void run() { // 这件事的逻

2021-01-18 23:10:56 187 1

原创 feign post 参数对象不加@RequestBody的用法

最近在做小程序调支付服务接口的一个功能,这个feign接口传参真的太费事。代码我就改造了下,不直接上真实代码。比如小程序调支付服务的订单查询接口,支付服务那边的controller的订单查询方法是: @ResponseBody @RequestMapping(value = "/order/select", method = RequestMethod.POST) @ApiOperation(value = "订单查询", notes = "订单查询") @ApiImplici

2020-09-15 18:25:43 5199 4

原创 lombok启动build失败

网上那些基本操作就不说了,在我这都没用。1.项目的maven文件中添加:<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> <configuration> <sou

2020-09-02 09:54:35 842 1

原创 angular2连接SpringBoot遇到的坑

学习angular我是通过看官方文档学习的:https://angular.cn/docs一开始看还是挺难理解的,虽然有写过vue,以为应该会差不多,但我错了,angular完全是另外一种框架。阅读文档的坑最开始看angular官方文档,花了一上午去硬啃那些概念,什么模块、组件啥的,发现蒙蔽的一批,直到练习后面的"试一试"案例,才对那些概念有点大概的理解。所以建议先对着"试一试"案例敲一遍,对整个框架内容有个大体的印象,再去结合案例回顾上面的基本概念。连接后台的坑到后面的"英雄的案例",在最后

2020-07-01 18:16:32 634

原创 netty准备篇—基于websocket实现简单网页聊天(二)

具体代码已经放到github上面去了,有兴趣的朋友可以看一下:我们先实现自己向自己聊天的功能:先创建一个SpringBoot项目,然后添加相应的依赖: <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-websocket --> <dependency> <groupId>org.springframew

2020-05-12 14:54:55 289

原创 netty准备篇---websocket的理解

WebSocket与Http的区别先看看Http请求的一个过程:客户端服务端1.客户端建立到服务器的 TCP 连接2.客户端发送请求3.客户端等待响应4.服务器收到请求5.服务器发送响应6.客户端收到响应7.请求结束TCP连接时支持双向同时读写的全双工协议,但是我们看传统的HTTP协议有几个问题:1、 请求过程是串行的,客户端与服务端相互等待。2、 请求时单向的,总是必须客户端发起请求。3、 HTTP协议时

2020-05-12 13:58:01 745

原创 业务中如何保证幂等性?

接口幂等性:用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。通俗点就是不会对数据库产生副作用。在支付业务中,一定要保证接口的幂等性。例如如果用户发起了一次支付,后台完成了支付的逻辑,以及订单状态的修改,但由于网络波动,用户没收到后台返回过来支付成功的请求,使得用户感觉没有付款成功,而又进行了一次付款,导致一个订单扣了两次款,流水也生成了两条这是万万不...

2020-05-06 15:16:32 2263

原创 垃圾回收篇-对象已die吗?

对象已死吗?标题

2020-04-29 18:26:42 185

原创 ssm的支付功能...升级为SpringBoot的使用二维码进行沙箱测试

感觉还得提升自己阅读文档的能力,把支付宝开发者中心官方文档看了一遍还是无从下手…而且官方文档提供的SDK Demo都是基于eclipse环境的,自己电脑用的IDEA,下载Demo跑起来都有点问题…这里推荐一个开源项目,继承了支付宝和微信的支付功能,也简单模拟了支付的真实操作:https://github.com/OUYANGSIHAI/sihai-maven-ssm-alipay基于s...

2020-04-01 16:49:33 395

原创 HashMap

看源码doc注释比所有的博客、视频讲解都要权威!所有翻译都是个人理解,仅供参考!Hash table based implementation of the Map interface. This implementation provides all of the optional map operations, and permits null values and the null k...

2020-03-23 20:36:52 144

原创 Spring的启动分析

public class SpringStartTests { public static void main(String[] args) {// ClassPathResource resource = new ClassPathResource("beans.xml");// DefaultListableBeanFactory factory = new DefaultListableBeanFactory();// XmlBeanDefin

2020-03-10 21:38:28 204

原创 SpringBoot打包后的Jar的加载进制(java -jar xxx.jar)

首先,咱们使用maven插件的打包功能,对总项目进行打包,成功后,子项目都生成了相应的xxx-SNAPSHOT.jar的jar文件:将含有main方法的admin-system对应的jar包文件复制到本地的一个目录下,然后对齐进行解压缩,出现的几个目录:我们就先看BOOT-INF\classes下的内容,其实就是我们项目编写的代码内容:BOOT-INF\lib下的内容也就是,咱们pom...

2020-02-29 00:46:18 571

原创 父module的pom、子module的pom

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ma...

2020-02-08 12:46:56 2422 1

原创 NIO的DirectByteBuffer

package com.crystal.cim.mycim.nio;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.nio.ByteBuffer;import java.nio.channels.FileChannel;public clas...

2020-02-07 00:37:44 265

原创 vm centos下载

https://blog.csdn.net/babyxue/article/details/80970526

2020-01-20 22:05:27 169

原创 重排序

重排序的定义直接看书是怎么说的:重排序是指编译器和处理器为了优化程序性能而对指令序列进行重新排序的一种手段。就是cpu为了优化代码的执行效率,它不会按顺序执行代码,会打乱代码的执行顺序,前提是不影响单线程顺序执行的结果。(当然了,只考虑cpu级别的重排序,还有其他的)书曰:在单线程程序中,对存在控制依赖的操作重排序,不会改变执行结果(这也是as-if-serial语义允许对存在控制依...

2020-01-11 17:53:47 518

原创 五层volatile详解(参考于马士兵老师视频讲解以及"并发编程的艺术"书籍)

一、CPU层面: link.

2020-01-11 13:29:52 593 2

原创 CPU层面

一、CPU层面基础知识CPU内部:L0寄存器、L1高速缓存、L2高速缓存 (速度快,成本高)CPU共享:L3高速缓存、L4主存、L5磁盘、L6远程文件存储 (速度慢,成本低)。如果有多块CPU,他们会共享CPU共享部分,而L5、L6不会直接和CPU打交道。读取内存数据的步骤:这里暂时把L3高速缓存、L4主存看成是一个内存,当从内存读取数据时,会把数据读取到L2的高速缓存,再读到L...

2020-01-11 13:28:11 611

原创 mysql组成部分

一、mysql组成部分组成部分:1、连接池组件2、管理服务和工具组件3、SQL接口组件4、查询分析器组件5、优化器组件6、缓存(cache)组件7、插件式存储引擎8、物理文件1、mysql存储引擎1.1 InnoDB存储引擎1、支持事务,设计目标主要面向在线事务处理(OLTP)的应用。2、行锁的设计(MyIsam只支持表锁),支持外键,支持(类似于Oracle的非锁定读...

2020-01-02 19:49:32 2398 2

原创 mysql技术内幕

一、mysql技术内幕链接: link.

2020-01-02 11:06:49 107

原创 netty 的 hello world

报错的话就这样加段代码:

2019-12-25 22:56:37 77

原创 java并发编程------1、上下文切换 + 死锁

理论:单核的计算机也可以实现多线程的操作,原因是因为cpu可以进行线程间的上下文切换,但上下文切换的时候需要保证记得切换前的线程执行位置,因为后面再切换回来的时候需要知道上一次已经执行在什么地方了,由此看来,上下文的切换时需要消耗性能的,也就是说多线程是比较吃性能的。所以多线程一定会比串型执行效率高(花的时间少)?public class ConcurrencyTest { pri...

2019-12-23 08:14:38 105

原创 12345

《并发编程的艺术》记录volatile的应用重排序的产生happens-before数据依赖性as-if-serial语义功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UM...

2019-12-22 22:57:23 195

原创 countdownlatch

CountDownLatch (倒计时器)CountDownLatch是一个同步工具类。它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行。CountDownLatch 的三种典型用法:某一线程执行前,要等待n个线程执行完毕,在countDownlatch初始化传入n,在一个线程执行完毕后,通过countdown()讲计数器减1,当计数器为0是,调用await(),唤醒等待的线...

2019-10-31 23:40:12 82

转载 400错误

400 请求出错由于语法格式有误,服务器无法理解此请求。不作修改,客户程序就无法重复此请求。原因:1、前端提交数据的字段名称或者是字段类型和后台的实体类不一致,导致无法封装;2、前端提交的到后台的数据应该是json字符串类型,而前端没有将对象转化为字符串类型;...

2019-05-09 15:35:52 2253

转载 springboot上jdbc报的错误

在applicaiton.yml配置文件上由于粗心:把name改成username…url对应数据库:crystal只是一个连接名,连接的url是 jdbc:mysql://localhost:3306/ssgThe Server time zone value ‘XXXXX’ 乱码错误:解决:参考:https://blog.csdn.net/Wei_NiZi/artic...

2019-04-16 15:26:30 613

转载 Unsupported major.minor version 52.0解决办法

Unsupported major.minor version 52.0: 看到Unsupported你是不是会想到jdk高版本能兼容低版本,但是低版本不能兼容高版本,不错,猜对了,其实就是这个意思。这个错误意思是你项目用JDK1.8运行过,现在又在本地的eclipse等开发工具或者本地环境变量为低版本的jdk1.7或者jdk1.6下运行,eclipse会说:“本地jdk版本太低,不支持这个jdk...

2019-03-29 14:11:30 844

转载 Concurrent.util常用类

CyclicBarrier使用:想象成一个场景:每一个线程代表一个跑步运动员,当运动员都准备好后,才一起出发,只要有一个没有准备好,大家都等待。多个阻塞线程等待着一个barrier确定。package t18;import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CyclicBarr...

2019-03-04 19:36:38 137

翻译 boot ---yaml

在application.properties添加其他的配置的方式:1,添加文件,在application.properties进行激活:2,不外加任何配置文件,直接在yaml文件中指定:3,4,在doc界面下:5,虚拟机参数:...

2019-03-02 22:20:03 141

转载 springboot入门三

主程序:@SpringBootApplication:Spring Boot应用标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就应该运行这个类的main的主方法来启动SpringBoot应用;点进去,组合注解:①,先看 @SpringBootConfiguration,Spring Boot的配置类:标注在某个类上,标识这是一个Spring Boot的...

2019-03-01 23:06:05 82

转载 Master-Worker模式

Master-Worker模式是常用的并行计算模式。它的核心思想是系统由李郎类进程协作工作:Master进程和Worker进程。Master负责接收和分配任务,Worker负责处理子任务。当各个Worker子进程处理完成后,会将结果返回给Master,由Master做归纳和总结。其好处是能将一个大任务分解成若干个小任务,并行执行,从而提高系统的吞吐量。Master:import java....

2019-02-28 13:06:53 680

原创 同步类容器

同步类容器都是线程安全的,但在某些场景下可能需要加锁来保护复合操作。复合操作如:迭代(反复访问元素遍历万容器中的所有元素),跳转(根据制定的顺序找到当前爱你元素的下一个元素),以及条件运算。这些复合操作在多线程并发地修改容器时,可能会表现出意外的行为,最经典的便是ConcurrentModificationException,原因是当容器迭代的过程中,被并发地修改了内容,这是由于早期迭代器设计的时...

2019-02-20 16:37:13 124

原创 单例和多线程

ThreadLocal概念:线程局部变量,是一种多线程间并发访问变量的解决方案。与synchronized等加锁方法是不同,ThreadLocal完全不提供锁,而使用以空间换时间的手段,为每个线程提供变量的独立副本,以保障线程安全。从性能上说,ThreadLocal不具有绝对的优势,在并发不是很高的时候,加锁的性能会更好,但作为一套与锁完全不管的线程安全解决方案,在高并发量或者竞争激烈的场景,...

2019-02-19 21:50:49 1007

原创 使用wait/notify模拟Queue(生产者消费者)

BlockingQueue:一个支持阻塞机制的队列,阻塞的放入和得到数据。import java.util.LinkedList;import java.util.concurrent.atomic.AtomicInteger;public class MyQueue { //1.需要一个承装元素的集合,插入删除多的情况使用LinkedList private LinkedList&l...

2019-02-19 17:52:22 176

原创 进程之间的通信(wait/notify)

进程通信的概念:线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体,线程间的通信就成为整体的比用方式之一。当线程存在通信指挥,系统间的交互性会更强大,在提高CPU利用率的同时还会使开发人员对线程任务在处理的过程中进行有效的把控与监督。使用wait/notify方法实现线程间的通信(注意这两个方法都是object的类的方法,所有对象都有这两个方法):1.wait和no...

2019-02-19 15:05:10 512

原创 volatile关键字

volatile概念:volatile关键字的主要作用是使变量在多个线程间可见。public class RunThread { /**volatile**/ private boolean isRunning = true; public void setRunning(boolean isRunning){ this.isRunning = isRunning; } ...

2019-02-19 12:16:15 113

原创 脏读

脏读:对于对象的同步和异步的方法,我们在设计自己的程序的时候,一定要考虑问题的整体,不然就会出现数据不一致的错误,很经典的就是脏读(dirtyread)。public class DirtyRead { private String username = "li4"; private String password = "123"; public void setValue(Str...

2019-02-18 23:36:33 3454

原创 线程

package second;public class MultiThread { private int num = 0; public synchronized void printNum(String tag){ try{ if(tag.equals(&quot;a&quot;)){ num = 100; System.out.println(&quot;tag a,set num over!&quot;);

2019-02-18 14:04:21 88

空空如也

空空如也

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

TA关注的人

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