- 博客(16)
- 收藏
- 关注
原创 KafKa快速入门
一、为什么使用消息队列1.使用同步的通信方式来解决多个服务之间的通信同步的通信方式会存在性能和稳定性的问题2.使用异步的通信方式针对于同步的通信方式来说,异步的方式,可以让上游快速成功,极大提高了系统的吞吐量,而且在分布式系统中,通过下游服务多个服务的分布式事务的保障,也能保障业务执行之后的最终一致性。二、什么是消息队列三、消息队列的流派目前消息队列中间件选型有很多种rabbitMQrocketMQ:阿里内部的一个大神,根据kafka内部原理手写的一个消息队列中间件kafka:
2021-12-07 09:06:51
1700
原创 java定时任务工具详解之Quartz
Quartz简介特点:强大的调度功能灵活的应用方式分布式和集群能力主要用到的设计模式Builder模式Factory模式组件模式链式写法三个核心概念调度器任务触发器第一个Quartz程序/** * @author hukai * @since 2021-11-30 */public class HelloJob implements Job { @Override public void execute(JobExecutionContex
2021-12-03 13:18:06
471
原创 java定时任务工具详解之Timer
目前市场上主流的定时任务处理的java工具有Timer和Quartz两种Timer--------------60%能解决Quartz-------------Timer不能解决的它都能解决Timer和Quartz的区别出身不同,Timer是由jdk直接提供,调用方式简单,而Quartz来自开源项目,需要引入其他jar包能力区别,Quartz的能力远比Timer功能强大底层机制,Timer只有一个后台线程去执行定时任务。而Quartz拥有一个线程池,可以多个线程去执行任务Timer介绍
2021-11-30 15:20:45
334
原创 计算机网络知识梳理-1
什么是计算机网络计算机网络主要由一些通用的、可编程的硬件互连而成,通过这些硬件,可以传送不同类型的数据,并且可以支持广泛和日益增长的应用。计算机网络不是软件概念,还包含硬件设备计算机网络不仅仅是信息通道,还可以支持广泛的应用计算机网络的分类互联网的发展历史中国互联网发展历史计算机网络的层次结构一.层次结构设计的基本原则各层之间是相互独立的每一层有足够的灵活性各层之间完全解耦思考:为什么计算机网络需要进行分层设计二.OSI七层模型物理层、数据链路层、网络层
2021-11-29 17:28:05
557
原创 关于SQL中FIND_IN_SET函数的使用场景
需求:前端以数组的方式去传多个值,数据库中则是按字符串的形式存储数据。需求是需要根据前端所传数组中的任意一个值去查询,mapper文件:
2021-11-24 09:23:49
348
原创 数据库中Json字符串的存取问题
前端传json对象,后端如何将json对象转为字符串入库,查询时将数据库中Json字符串转为对象回传前端。数据库:其中rest_date_ranges字段:[{"month":"2021-02","weekdays":"1","custom":["1","2","3"]}]register_source字段:{"type":1,"quantity":1,"weekdays":2,"weekends":2,"customData":[{"date":"2021-11-17","count":"4"
2021-11-24 09:13:41
776
原创 实现父子进程之间数据传递的方法及存在问题
一、问题的提出在系统开发过程中常使用ThreadLocal进行传递日志的RequestId,由此来获取整条请求链路。然而当线程中开启了其他的线程,此时ThreadLocal里面的数据将会出现无法获取/读取错乱,甚至还可能会存在内存泄漏等问题,下面用代码来演示一下这个问题。并行流:二、问题的解决ThreadLocal的子类InheritableThreadLocal其实已经帮我们处理好了,通过这个组件可以实现父子线程之间的数据传递,在子线程中能够父线程中的ThreadLocal本地变量。三、源码
2021-10-28 13:56:40
530
原创 ThreadLocal使用及其源码分析
项目中我们如果想要某个对象在程序运行中的任意位置获取到,就需要借助ThreadLocal来实现,这个对象称作线程的本地变量,下面就介绍下ThreadLocal是如何做到线程内本地变量传递的1. ThreadLocal介绍1.1 官方介绍 从Java官方文档中的描述:ThreadLocal类用来提供线程内部的局部变量。这种变量在多线程环境下访问(通过get和set方法访问)时能保证各个线程的变量相对独立于其他线程内的变量。ThreadLocal实例通常来说都是private static类型的,用于
2021-10-28 13:31:55
173
原创 Integer类的缓存机制
Integer类的缓存机制我们查看Integer的源码,就会发现里面有个静态内部类。public static Integer valueOf(int i) { assert IntegerCache.high >= 127; //当前值在缓存数组区间段,则直接返回该缓存值 if (i >= IntegerCache.low && i <= IntegerCache.high) return Int
2021-10-27 17:51:13
173
原创 RocketMQ-文件读写以及底层数据结构的设计
RocketMQ的并发读写能力扛住了2016年双十一,每秒17.5万笔订单的创建(单笔订单衍生出N条消息,实际tps是17.5*n 万),下面对其高并发读写原理进行探讨。主要体现在两方面:客户端收发消息服务器接收消息并持久化(重点)客户端(RocketMQ-client)1,客户端发送消息有负载均衡,客户端内存中保存着当前所有的服务器列表,每次发送都切换一台服务器发送消息,使得每台服务器接收的消息量尽量均衡,避免热点问题。2,发送代码为线程安全,当Producer实例就绪之后,完全可以死循环发
2021-10-27 16:41:34
556
原创 Java零拷贝机制解析
Java零拷贝机制解析Linux提供的领拷贝技术 Java并不是全支持,支持2种(内存映射mmap、sendfile);NIO提供的内存映射 MappedByteBuffer首先要说明的是,JavaNlO中 的Channel (通道)就相当于操作系统中的内核缓冲区,有可能是读缓冲区,也有可能是网络缓冲区,而Buffer就相当于操作系统中的用户缓冲区。MappedByteBuffer mappedByteBuffer = new RandomAccessFile(file, "r")
2021-10-27 14:06:12
160
原创 Linux-零拷贝问题
本文探讨linux中主要的几种零拷贝技术以及零拷贝技术的适用的场景,为了迅速建立起零拷贝的概念,我们拿一个常用的场景进行引入:引文在写一个服务端程序时(Web Server或者文件服务器),文件下载是一个基本功能。这时候服务端的任务是:将服务端主机磁盘中的文件不做修改地从已连接的socket发出去,我们通常用下面的代码完成:while((n = read(diskfd, buf, BUF_SIZE)) > 0) write(sockfd, buf , n);基本操作就是循环的从磁盘读
2021-10-27 13:08:21
136
原创 Elasticsearch-映射与分析
映射与分析当摆弄索引里面的数据时,我们发现一些奇怪的事情。一些事情看起来被打乱了:在我们的索引中有12条推文,其中只有一条包含日期 2014-09-15 ,但是看一看下面查询命中的 总数 (total)GET /_search?q=2014 # 12 resultsGET /_search?q=2014-09-15 # 12 results !GET /_search?q=date:2014-09-15 # 1 resultGET /_search?q
2021-10-23 17:27:20
428
原创 Elasticsearch-搜索最基本工具
搜索-最基本的工具现在,我们已经学会了如何使用 Elasticsearch 作为一个简单的 NoSQL 风格的分布式文档存储系统。我们可以将一个 JSON 文档扔到 Elasticsearch 里,然后根据 ID 检索。但 Elasticsearch 真正强大之处在于可以从无规律的数据中找出有意义的信息——从“大数据”到“大信息”。Elasticsearch 不只会_存储(stores)_ 文档,为了能被搜索到也会为文档添加_索引(indexes)_ ,这也是为什么我们使用结构化的 JSON 文档,而不
2021-10-23 14:09:20
137
原创 Elasticsearch-分布式文档存储
路由一个文档到一个分片中当索引一个文档的时候,文档会被存储到一个主分片中。 Elasticsearch 如何知道一个文档应该存放到哪个分片中呢?当我们创建文档时,它如何决定这个文档应当被存储在分片 1 还是分片 2 中呢?首先这肯定不会是随机的,否则将来要获取文档的时候我们就不知道从何处寻找了。实际上,这个过程是根据下面这个公式决定的:shard = hash(routing) % number_of_primary_shardsrouting 是一个可变值,默认是文档的 _id ,也可以设置成一个
2021-10-23 13:20:24
113
原创 Elasticsearch-数据的输入与输出
Elasticsearch删除文档:删除文档的语法和我们所知道的规则相同,只是使用DELETE方法 DELETE /website/blog/123如果找到该文档,Elasticsearch 将要返回一个 200 ok 的 HTTP 响应码,和一个类似以下结构的响应体。注意,字段 _version 值已经增加:{ "found" : true, "_index" : "website", "_type" : "blog", "_id" : "123",
2021-10-23 11:22:37
221
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人