自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Netty实现WebSocket服务

'打开WebSocket服务正常,浏览器支持WebSocket''抱歉,您的浏览器不支持WebSocket协议!'WebSocket连接没有建立成功!'WebSocket 关闭!

2023-08-22 17:15:59 141 1

原创 Netty编程笔记

I/O模型:阻塞模型、非阻塞模型、IO复用模型(Linux提供了select、poll)、信号驱动IO模型、异步IO模型。阻塞与非阻塞模型,这两种模型均涉及到用户态与内核台的切换IO复用模型,Linux提供了select、poll和epoll三种方式,其中select、poll是顺序扫描fd是否就绪,切支持的fd数量有限;epoll使用事件驱动方式代替顺序扫描,因此新能更高,当有fd就绪时,立即回调rollback。

2023-08-22 17:10:10 70

原创 常用的限流算法

限流算法固定窗口算法优点:实现简单缺点:在临界值前后是有问题的滑动窗口算法优点:可以实现非常平滑的限流,能很好的处理临界值问题漏桶算法概述:先定义一个桶,桶的容量是固定的,以任意速率向桶流入水滴,如果桶满了则溢出(被限流),桶底有个洞,按照固定的速率流出水滴。令牌桶算法:概述:先定义一个桶,桶的容量是固定的,用来存放令牌,以固定速率向桶放令牌,如果桶满了就不放令牌了,处理请求是先从桶拿令牌,拿到令牌了再去处理请求,否则就被限流优点:突发情况下一次可以拿取多个令牌

2023-06-07 10:50:17 100

原创 Redis之布隆过滤器

由一个二进制数组和一个Hash算法组成,是一个概率性的算法(若不在的元素,一定不存在;在的不一定在,主要是存在Hash冲突的可能),判断一个元素是否在一个集合中。使用场景如黑名单、邮件垃圾的过滤、爬虫网址判重。​ 缓存穿透问题:通过查询缓存不存在的key,采用架构设计时采取的兜底方案,强制必须去查询数据库,从而产生了缓存击穿。补充redis的布隆过滤器代码。

2023-06-07 10:45:41 229

原创 Redis的PipeLine的使用

推荐使用PipeLine的条件:单个TCP的报文的最大值1460字节,满足条件推荐使用PipeLine批量提交至redis。由于Redis的核心线程是单线程的,所以通过PipeLine提交的命令是顺序执行的。

2023-06-07 10:43:10 282

原创 Redis事务+Lua脚本

使用multi开启事务,但是redis的事务只是对语法的检查,它的事务是非常弱的事务,无法解决运行时的错误,因此实际使用中不要使用redis的事务(也可以根据自己的实际业务场景选择是否使用事务,当然并不建议使用multi的事务方式)使用事务+Watch机制(compareAndSwap)Redis+Lua实现简单的计数器的限流。Lua脚本rateLimiter.lua。服务端方法,判断是否被限流了。PipeLine+事务。

2023-06-07 10:40:55 364

原创 Hadoop生态圈之MapReduce批计算框架简述

数据以一条记录为单位经过Map方法映射成KV,相同的key为一组,这一组数据调用一次Reduce方法,在方法内迭代计算这组数据。根据已收到的TaskTracker汇报的资源数据,确定最终每一个split对应的map应该去哪个节点。yarn架构:将1.x中JobTracker的资源管理功能独立出来,进行独立的资源管理。通过cgroup(内核级)技术,在启动jvm进程的时候,由kernel约束死。Map的并行度由切片的数量来决定,Reduce的并行度由人决定。jvm进程->操作系统进程。

2023-05-30 10:21:57 98

原创 阻塞队列SynchronousQueue

offer(E e, long timeout, TimeUnit unit) 源码分析。生产者在调用上述方法时,第一个参数传递e,消费者在调用时,第一个参数传递null。如果在阻塞期间有消费者来匹配,生产者就会将绑定的消息交给消费者。在构建SynchronousQueue时会指定使用哪种子类实现。生产者等到阻塞结果,或者不允许阻塞,直接失败。生产者在阻塞期间线程被中断了,直接告辞。transfer核心方法源码分析。transfer方法流程图。消费者与生产者的原理一样。offer方法源码分析。

2023-05-23 23:10:34 93

原创 并发编程--延迟队列

也是基于二叉堆结构实现的,不同之处是DelayQueue是将剩余延迟时间最短的放在堆顶,继承Delayed接口,因此在使用DelayQueue时,需要实现Delayed方法,并重写两个方法。在应用上,比如外卖15分钟商家需要接单,否则,订单自动取消,可以每下一个订单就放在延迟队列中,如果规定时间内,商家没有接单,则通过消费者获取元素,然后取消订单。消费者要来拿数据,但是发现已经有消费者在等待栈顶数据了,这个后来的消费者也需要等待一会儿。消费者要拿到栈顶的数据,但是延迟时间还没到,此时需要等待一会儿。

2023-05-23 15:53:37 80

原创 阻塞队列&优先级队列源码解读

就是一个完整的二叉树,任意一个节点大于父节点或小于父节点(即小顶堆)PriorityBlockingQueue的写入源码分析。

2023-05-23 11:35:38 76

原创 并发编程--锁源码分析

偏向锁在升级为轻量级锁时,会涉及到偏向锁撤销,需要等到一个安全点(STW),才可以做偏向锁撤销,在明知道有并发情况,就可以选择不开启偏向锁,或者设置偏向锁延迟开启。如果一个操作是读多写少,采用上述操作,效率是很低的,这种情况可以采用ReentrantReadWriteLock去实现,原理是读读之间是非互斥的,即并发执行,如果是写操作,则还是互斥的。如果在一个循环中,频繁的获取和释放锁资源,这样带来的消耗很大,锁膨胀就是将锁的范围扩大,避免频繁的竞争和获取锁资源带来不必要的消耗。

2023-05-22 14:41:04 194

原创 并发编程的三大特性--有序性

单例模式由于指令重排可能出现线程会拿到没有初始化的对象,导致在使用时,由于内部属性为默认值,出现一些不必要的问题。java时乱序执行的,乱序执行的原因是尽可能的发挥CPU的性能。as-if-serial原则:针对于CPU级别的指令重排原则。happens-before原则:针对于jvm的指令重排。单例模式保证有序性的解决方案:volatile修饰变量。

2023-05-10 11:15:51 62

原创 并发编程的三大特性--可见性

错误代码示例如下:t1不会结束,因为synchronized在获取锁的时候从主内存获取flag,此时如果主线程还未修改flag标记,则获取到flag=true,synchronized获取锁读取到的是true,只有在内部代码执行完毕后释放锁了,才会去同步主内存,这就导致无法获取主线程修改后的flag值。现在的CPU都是多核的,每个线程的工作内存都是独立的,每个线程只会修改自己的工作内存,如果没有及时同步到主内存,就会导致数据不一致的问题。这个写回的数据,在其他CPU内核的缓存中直接无效。

2023-05-10 11:12:37 101

原创 并发编程的三大特性--原子性

每一个线程都有自己的ThreadLocalMap,再基于ThreadLocal作为key,对value进行存取,ThreadLocalMap与ThreadLocal之间是弱引用,即若tl1引用不存在的情况下,ThreadLocal1对象会被GC回收。CAS(compare and swap)比较和交换,是CPU的一条原语,他在替换内存的某个值时,首先查看内存中的值是否与预期值一致,如果一致则执行替换操作。可以在CAS一次失败后,将这个操作暂存起来,后续获取结果时,将暂存的结果全部执行完,再返回最后的结果。

2023-05-09 22:04:45 64

原创 Java线程基础知识扫盲

线程的等待(wait)和唤醒(notify/notifyAll),可以让获得synchornized的线程通过调用wait方法进入到锁的等待池中,并释放该线程的锁资源;可以让获取synchornized的线程调用notify或notifyAll方法,将等待池中的线程唤醒,进入到锁池中去竞争锁资源。在调用wait、notify、notifyAll时,必须要在有synchornized修饰的代码块中调用,否则会抛异常,因为是要操作某个对象的锁信息。线程的结束方式,return或抛异常均可实现线程的结束。

2023-05-08 23:35:07 46

原创 ElasticSearch安装

下载tar文件解压并进入文件夹新版es不允许使用root用户启动,需要创建用户并赋权限配置远程访问,修改config/elasticsearch.yml切换用户为es,启动es报错信息汇总:错误一:修改/文件,追加内容错误二:执行如下命令错误三:修改jvm参数 /config/jvm.options。

2022-11-29 18:55:12 815

原创 Redis安装

解压并执行make命令执行安装命令安装完成后,可进入安装目录下的utils文件夹,执行redis-server的安装步骤s。

2022-11-29 11:26:06 236

原创 Docker安装

第一步:卸载系统中存在的docker第二步:安装依赖第三步:设置docker-ce镜像地址第四步:安装Docker Engine,、containerd, 、Docker Compose也可跳过以上命令,安装指定版本的docker-ce第五步:开启docker。

2022-11-29 10:35:18 271

原创 FastDFS分布式文件系统安装部署

./make.sh ./make.sh install 安装完成后生成的目录如下 /usr/bin 可执行文件所在的位置 /etc/fdfs 配置文件 /usr/bin 主程序代码 /usr/include/fastdfs 插件组7、配置tracker cd /etc/fdfs vi tracker.conf base_path=/var/fastdfs/tracker

2022-07-27 17:46:54 126

原创 Windows编译Redis

redis编译

2022-06-07 14:43:42 99

原创 Spring Cloud GateWay——Filter过滤器

基于SpringCloudGateWay 1.8.0 版本讲解 内置过滤器 Spring Cloud GateWay 内置了28种过滤器 自定义过滤器

2022-05-12 14:01:54 3747

原创 规则引擎--Drools之workbench安装

基于Drools7.69.0.Final版本安装workbench需要的相关资源:WildFly:wildfly-23.0.2.Final.zip(自drools 6.5.0.Final之后,workbench不再支持tomcat启动) workbench:business-central-7.69.0.Final-wildfly23.war kie-server:kie-server-distribution-7.69.0.Final.zip jdk: jdk1.8(jdk17无法启动服务,

2022-05-09 10:19:29 1503 1

原创 规则引擎--Drools之规则文件

function的使用方法 构造相关方法,可在rule中构造function并使用,亦可以导入java类中的相关静态方法使用。示例代码如下:规则文件function.drlpackage rules;import com.songzerong.drools.entity.User;import function com.songzerong.drools.func.UserRuleFunction.getPassWord;function String getUserName(Us...

2022-05-07 16:06:53 622

原创 规则引擎--Drools整合SpringBoot

本文档基于Drools 7.69.0.Final 版本整合官方文档地址:www.drools.org基于maven构建项目:pom.xml中引入相关依赖,同时排除相关spring的依赖<?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"

2022-05-07 14:18:45 872 1

原创 (一)初识领域驱动模型-六边形架构

领域驱动模型

2022-04-21 11:15:22 1807

空空如也

空空如也

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

TA关注的人

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