框架源码研究
文章平均质量分 91
框架源码研究
zhousenshan
现在的一切都是为将来的梦想编织翅膀,让梦想在现实中展翅高飞
展开
-
如何使用 SpringBoot + 事务钩子函数来打造高效支付系统
***/if (!这里又使用到了线程变量,我们在判断是否存在事务时,就是判断这个线程变量内部是否有值。那我们现在想在事务提交后触发自定义逻辑和这个有什么关系呢?我们在上面构建流水落地api的伪代码中有向内部添加了一个,内部并重写了@Override// 事务提交后,再异步发送消息给kafkatry {// 发送消息给kafka// 记录异常信息,发邮件或者进入待处理列表,让开发人员感知异常});});我们结合的源码来看,其实这段代码主要就是向线程变量内部的。转载 2024-07-28 13:41:37 · 62 阅读 · 0 评论 -
一文深度讲解JVM 内存分析工具 MAT及实践
1. 前言熟练掌握 MAT 是 Java 高手的必备能力,但实践时大家往往需面对众多功能,眼花缭乱不知如何下手,小编也没有找到一篇完善的教学素材,所以整理本文帮大家系统掌握 MAT 分析工具。本文详细讲解 MAT 众多内存分析工具功能,这些功能组合使用异常强大,熟练使用几乎可以解决所有的堆内存离线分析的问题。我们将功能划分为4类:内存分布详情、对象间依赖、对象状态详情、按条件检索。每大类有多个功能点,本文会逐一讲解各功能的场景及用法。此外,添加了原创或引用案例加强理解和掌握。转载 2024-05-12 09:11:54 · 2058 阅读 · 0 评论 -
JVM-结合MAT工具来分析OOM问题
比如这里就是明显的class com.hailintang.demo.jdk8.gc.oom.Dandan这个类占用了过多内存。这里说了,这个Dandan类的对象有360146个。然后,我们根据方法论,结合MAT工具,一个一个步骤来进行排查。那这个时候需要用到MAT的dominator-tree:就是用来分析对象之间的关系的工具。其实,大家完全可以把MAT这个定位OOM问题的方法论,用到实际工作。好了,到这里,基本上已经找到了具体是哪行代码引起的OOM问题。接下来,我们看看内存过多的对象是被谁引用。转载 2024-05-12 09:01:01 · 76 阅读 · 0 评论 -
MAT(Memory Analyzer Tool),找出导致OOM的代码
(2)-XX:HeapDumpPath=目 录 参 数 表 示 生 成 D U M P 文 件 的 路 径 , 也 可 以 指 定 文 件 名 称 , 例 如 : − X X : H e a p D u m p P a t h = {目录}参数表示生成DUMP文件的路径,也可以指定文件名称,例如:-XX:HeapDumpPath=目录参数表示生成DUMP文件的路径,也可以指定文件名称,例如:−XX:HeapDumpPath={目录}/java_heapdump.hprof。转载 2024-04-26 21:25:46 · 40 阅读 · 0 评论 -
学会这几点,让你的代码也变得优雅起来!
工作多年后,越发觉得代码整洁真的是太重要了!尤其是在团队开发中,写出优雅工整的代码,能让同事更乐于跟你合作。下面,将通过命名、类、函数、测试这四个章节,使我们的代码变得整洁。转载 2023-12-16 08:33:00 · 145 阅读 · 0 评论 -
一文带你彻底掌握阻塞队列!
在之前的文章中,我们介绍了生产者和消费者模型的最基本实现思路,相信大家对它已经有一个初步的认识。在 Java 的并发包里面还有一个非常重要的接口:BlockingQueue。是一个基于阻塞机制实现的线程安全的队列。通过它也可以实现生产者和消费者模型,并且效率更高、安全可靠,相比之前介绍的生产者和消费者模型,它可以同时实现生产者和消费者并行运行。那什么是阻塞队列呢?简单的说,就是当参数在入队和出队时,通过加锁的方式来避免线程并发操作时导致的数据异常问题。转载 2023-11-19 09:05:57 · 53 阅读 · 0 评论 -
thymeleaf的简单用法-常用标签
一.常用标签的用法1.1 th:text 用于文本的显示,并且可以进行简单的计算。<td th:text="${username}">mlm</td> -> <td>maliming</td><td th:text="9+7">2018</td> -> &am转载 2018-09-29 18:31:10 · 2197 阅读 · 0 评论 -
Flume日志采集系统与Logstash对比
Flume日志采集系统——初体验(Logstash对比版)本文就从如下的几个方面讲述下我的使用心得:初体验——与Logstash的对比安装部署启动教程参数与实例分析Flume初体验Flume的配置是真繁琐,source,channel,sink的关系在配置文件里面交织在一起,没有Logstash那么简单明了。 Flume与Logstash相比,我个人的体会如下:...转载 2018-11-03 17:58:53 · 1191 阅读 · 0 评论 -
使用Netty搭建APP推送服务器
调用时序图如下:源码:https://github.com/Aresyi/pushServer(1)获取socket登录秘钥(登录口令):key.key的时效为1分钟,如果客户端在拿到key后,1分钟之内不执行socket登录验证的流程,则key自动生效;接口服务地址:/user/getPushKey(2)客户端拿到key后,与服务器端建立s转载 2018-02-05 22:42:34 · 2271 阅读 · 0 评论 -
Netty笔记4-如何实现长连接
前面三章介绍了Netty的一些基本用法,这一章介绍怎么使用Netty来实现一个简单的长连接demo。Netty入门教程——认识Netty Netty入门教程2——动手搭建HttpServer Netty入门教程3——Decoder和Encoder关于长连接的背景知识,可以参考《如何使用Socket实现长连接》 一个简单的长连接demo分为以下几个步骤:长连接流程创建...转载 2018-10-04 09:47:59 · 336 阅读 · 0 评论 -
Spring Data Elasticsearch加Elasticsearch服务实现全文搜索
Elasticsearch是一个开源的基于Lucene的搜索服务器,Elasticsearch是使用Java语言开发的,它提供了分布式多用户全文搜索引擎,提供基于RESTful 的API接口。Elasticsearch还提供了一个Java的Client,以及相应的API。 Spring Data中提供了相应的模块Spring Data Elasticsearch,Spring Data Elas...转载 2018-09-05 22:54:10 · 440 阅读 · 0 评论 -
elasticsearch 5.x 系列之四(索引模板的使用,详细得不要不要的)
1,首先看一下下面这个索引模板curl -XPUT "master:9200/_template/template_1?pretty" -H 'Content-Type: application/json' -d' ---> 模板名字叫做template1{ "template" : "hello*", -------------> 匹配的索引名字 "ord...转载 2018-10-26 20:57:22 · 208 阅读 · 0 评论 -
ELK windows安装采坑记录
filebeat收集log4j日志重复如何处理你这种情况是生产上日志结构的常见现象。你这种就不能使用ess.* 这种方式去采集日志。你正在采集的ess.log日志一段时间后生成ess.xxx.log,这是对于logstash或fielbeat来说就是发现了一个新的文件,回重新进行采集,这就重复了。一般这种情况只要指定/path/log/ess.log,只采集ess.log文件,这样就不会重复...原创 2018-07-21 08:33:48 · 432 阅读 · 0 评论 -
Java异步NIO框架Netty实现高性能高并发
1. 背景1.1. 惊人的性能数据最近一个圈内朋友通过私信告诉我,通过使用Netty4 + Thrift压缩二进制编解码技术,他们实现了10W TPS(1K的复杂POJO对象)的跨节点远程服务调用。相比于传统基于Java序列化+BIO(同步阻塞IO)的通信框架,性能提升了8倍多。事实上,我对这个数据并不感到惊讶,根据我5年多的NIO编程经验,通过选择合适的NIO框架,加上高性能的压缩二...转载 2018-09-05 23:37:46 · 944 阅读 · 1 评论 -
ElasticSearch超强聚合查询(一)
Elasticsearch聚合查询一 Elasticsearch聚合查询一 聚合与搜索的概念 高阶概念 举例说明—关于汽车数据的相关聚合(Index=cars;type=transactions) 注意点:官方文档说明,如何设置fildData. 实战之—-查询那个颜色的汽车销量最好? 实战之—-在上面的聚合基础上添加一些指标—>’avera...转载 2018-10-03 14:05:02 · 2071 阅读 · 0 评论 -
Elasticsearch 5使用中文分词
本文演示了如何使用IK Analysis 插件来实现在 Elasticsearch 中的中文分词功能。使用中文分词在“Spring Boot应用企业级博客系统”课程中(http://coding.imooc.com/class/125.html),所有的博客功能都已经完成了。读者朋友们开始愉快地使用博客来发表博客了。但如果朋友们足够细心的话,发现在输入中文的标签的时候,存在一定的问题。...转载 2018-10-02 16:31:56 · 411 阅读 · 0 评论 -
netty入门学习(4)-LengthFieldPrepender和LengthFieldBasedFrameDecoder
在netty入门学习(1)中我们曾经提到NIO为了提高效率,默认情况下可以服务端一次write造成客户端多次read,或者服务商多个write但客户端一次全读取过来。模拟演示如下:改正前:服务端:import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.charset.Charset转载 2017-06-03 22:07:17 · 466 阅读 · 1 评论 -
elasticsearch的一些优化汇集
elasticsearch三个重要的优化 1、内存优化在bin/elasticsearch.in.sh中进行配置修改配置项为尽量大的内存:ES_MIN_MEM=8gES_MAX_MEM=8g两者最好改成一样的,否则容易引发长时间GC(stop-the-world)elasticsearch默认使用的GC是CMS GC如果你的内存大小超过6G,CMS是不给力的,容易出现sto...转载 2018-10-02 21:25:54 · 347 阅读 · 0 评论 -
Netty系列之Netty百万级推送服务设计要点
1. 背景1.1. 话题来源最近很多从事移动互联网和物联网开发的同学给我发邮件或者微博私信我,咨询推送服务相关的问题。问题五花八门,在帮助大家答疑解惑的过程中,我也对问题进行了总结,大概可以归纳为如下几类:Netty是否可以做推送服务器?如果使用Netty开发推送服务,一个服务器最多可以支撑多少个客户端?使用Netty开发推送服务遇到的各种技术问题。由于转载 2018-02-05 22:44:24 · 321 阅读 · 1 评论 -
Netty高性能开发备忘录
工作中使用netty,还都是解决小打小闹的问题,还没有遇到超过10k连接情况下,数据高性能分发及连接管理问题。无意中看到这篇文章,先转载一下,以后工作中遇到相关问题可以及时查阅,也希望更多人看到,并从中获取netty优化灵感。 原文链接如下:http://www.10tiao.com/html/321/201611/2659763226/5.html 1. 连接篇1....转载 2018-09-05 22:35:58 · 235 阅读 · 0 评论 -
Netty4底层用对象池和不用对象池实践优化
随着JVM虚拟机和JIT即时编译技术的发展,对象的分配和回收是个非常轻量级的工作。但是对于缓冲区Buffer,情况却稍有不同,特别是对于堆外直接内存的分配和回收,是一件耗时的操作。为了尽量重用缓冲区,Netty提供了基于内存池的缓冲区重用机制。性能测试表明,采用内存池的ByteBuf相比于朝生夕灭的ByteBuf,性能高23倍左右(性能数据与使用场景强相关)。在4.x版本中,UnpooledB...转载 2018-10-05 10:07:21 · 446 阅读 · 0 评论 -
sharding-jdbc 3.0 分库分表
网址:https://shardingsphere.apache.org/document/current/cn/overview/依赖:<dependency> <groupId>io.shardingsphere</groupId> <artifactId>sharding-jdbc<...转载 2019-06-16 09:36:49 · 474 阅读 · 0 评论 -
剖析Netty4的高性能
1、Netty简介 Netty是一个高性能、异步事件驱动的NIO框架,它提供了对TCP、UDP和文件传输的支持,作为一个异步NIO框架,Netty的所有IO操作都是异步非阻塞的,通过Future-Listener机制,用户可以方便的主动获取或者通过通知机制获得IO操作结果。作为当前最流行的NIO框架,Netty在互联网领域、大数据分布式计算领域、游戏...转载 2018-09-05 22:46:22 · 1617 阅读 · 0 评论 -
vue项目如何打包扔向服务器
当我们将 vue 项目完成后,面临的就是如何将项目进行打包上线,放到服务器中。我使用的是 vue-cli(simple) 脚手架,所以就讲一下如何将项目进行打包,并放到 tomcat 上。 如果是 vue-cli (非 simple 脚手架),这篇文章可能有点帮助。地址链接:vue-cli 如何打包上线 先来描述一下期间遇到的问题有哪些:1、打包后将 dist 文件夹和 index.html...转载 2018-07-04 22:13:41 · 639 阅读 · 0 评论 -
Elasticsearch教程(六) elasticsearch Client创建
Elasticsearch 创建Client有几种方式。首先在 Elasticsearch 的配置文件 elasticsearch.yml中。定义cluster.name。如下: cluster.name: sojson-application创建方式一: import static org.elasticsearch.node.NodeBuilder.*; /...转载 2018-09-05 22:25:50 · 848 阅读 · 0 评论 -
netty设计模式-责任链模式
责任链模式的定义:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系, 将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理他为止。首先来看看责任链模式的四个要素:1、责任处理器接口2、创建链,添加删除责任处理器接口3、上下文4、责任链终止机制。在netty里面,很明显channelHandler和Pipeline构成了责任链模式。让我们通过...转载 2018-09-08 01:25:21 · 353 阅读 · 0 评论 -
(一)Netty必学知识点 netty基础知识点总结
Java读源码之Netty深入剖析解析netty各大组件细节/百万级性能调优/设计模式实际运用前言:这是一门对Java开发人员非常重要的课程,源码的学习方式是不可逃避的。Netty也是大型互联网公司面试必备的问题,如果没有分布式开发经验,在面试时提出自己阅读过Netty源码,并能清晰表达的话。这部分内容会是很重要的加分项nioEventloop执行流程Netty 源码阅读的思考---...原创 2018-09-02 20:41:27 · 4497 阅读 · 2 评论 -
quartz-scheduler
http://www.quartz-scheduler.org/documentation/quartz-2.1.x/examples/原创 2017-07-08 12:12:42 · 1079 阅读 · 0 评论 -
Elasticsearch应用开发入门
为什么是Elasticsearch?相信广大网友对今年2月28日百度宕机的事情有所感受,就算没有亲身经历到也应该有所耳闻。由此可见在我们的生命中,度娘已经成为一到迈不过去的坎了,熟悉搜索引擎的朋友一定对Lucene有耳闻,如果说百度对于我们的生活不可或缺,那么,Lucene对于做搜索引擎的攻城狮们来说是同样的必不可少。当然了,搜索引擎也会牵涉到一些非常酷炫的名词,诸如数据挖掘,深度学习...转载 2018-07-19 22:31:58 · 369 阅读 · 0 评论 -
Netty-内存管理
通过NIO传输数据时需要一个内存地址,并且在数据传输过程中这个地址不可发生变化。但是,GC为了减少内存碎片会压缩内存,也就是说对象的实际内存地址会发生变化,所以Java就引入了不受GC控制的堆外内存来进行IO操作。那么数据传输就变成了这样但是内存拷贝对性能有可能影响比较大,所以Java中可以绕开堆内存直接操作堆外内存,问题是创建堆外内存的速度比堆内存慢了10到20倍,为了解决这个问题Net...转载 2018-09-05 23:45:48 · 1358 阅读 · 0 评论 -
Elasticsearch 如何做映射mapping
1、什么是映射 映射:创建索引的时候,可以预先定义字段的类型以及相关属性(比如说让某字段是否存储、用那种分析器、重要级别)Elasticsearch可定义的字段类型 作用:这样会让索引建立的更加的细致和完善! 分类:静态映射和动态映射2、映射的属性方法 除了定义字段的类型、还可以给字段添加相关的属性。通过定义这些属性,可以让字段更加高级、特殊性...转载 2018-10-02 21:49:52 · 1725 阅读 · 0 评论 -
Elasticsearch使用总结
最初接触Elasticsearch是在ELK日志系统的建设中,随着对日志数据的消费越来越多,被其强大的数据搜索和分析能力所吸引;后来,在用户行为数据采集系统中,使用Elasticsearch做核心数据存储和实时聚合分析;再后来,使用Elasticsearch搭建了产品的搜索服务。目前来看,Elasticsearch在这三个系统中表现都很灵活和优异,没有让我们失望,而在系统建设中,我们也遇到过不少问...转载 2018-10-26 21:02:33 · 351 阅读 · 0 评论 -
Java netty的option(ChannelOption.SO_BACKLOG, backLog)什么意思
这个都是socket的标准参数,并不是netty自己的。具体为:ChannelOption.SO_BACKLOG, 1024BACKLOG用于构造服务端套接字ServerSocket对象,标识当服务器请求处理线程全满时,用于临时存放已完成三次握手的请求的队列的最大长度。如果未设置或所设置的值小于1,Java将使用默认值50。Cha转载 2017-06-04 16:55:02 · 24580 阅读 · 1 评论 -
设计一个百万级的消息推送系统
前言首先迟到的祝大家中秋快乐。最近一周多没有更新了。其实我一直想憋一个大招,分享一些大家感兴趣的干货。鉴于最近我个人的工作内容,于是利用这三天小长假憋了一个出来(其实是玩了两天转载 2019-01-27 20:59:36 · 241 阅读 · 0 评论 -
Joda-Time 操作常用时间函数
package com.hhx.offline_tools; import java.nio.channels.NonWritableChannelException; import java.util.Calendar; import java.util.Date; import java.util.Locale; import org.joda.time.Dat转载 2017-07-08 12:05:21 · 2740 阅读 · 0 评论 -
python3与Excel的完美结合
Excel 是 Windows 环境下流行的、强大的电子表格应用。openpyxl 模块让 Python 程序能读取和修改 Excel 电子表格文件。例如,可能有一个无聊的任务,需要从一个电子表格拷贝一些数据,粘贴到另一个电子表格中。或者可能需要从几千行中挑选几行,根据某种条件稍作修改。或者需要查看几百份部门预算电子表格,寻找其中的赤字。正是这种无聊无脑的电子表格任务,可以通过 Python 来完成。LibreOffice Calc, WPS 和 OpenOffice Calc 都能处理 Excel 的电转载 2020-09-20 10:34:18 · 1590 阅读 · 0 评论 -
logstash采集规范与elasticsearch的template 、mapping 详细介绍
本文主要介绍es 的 template和mapping 配置,通过logstash的采集流程规范,更加容易深入理解到底什么是template和mapping配置背景知识什么是mapping?mapping定义了index中的每个type的每个字段的属性,主要是字段类型(integer,long,text,keyword,date,float,ip,geo)什么是template?如果用...转载 2018-10-26 21:14:16 · 1918 阅读 · 0 评论 -
Netty笔记4-如何实现长连接
前面三章介绍了Netty的一些基本用法,这一章介绍怎么使用Netty来实现一个简单的长连接demo。Netty入门教程——认识Netty Netty入门教程2——动手搭建HttpServer Netty入门教程3——Decoder和Encoder关于长连接的背景知识,可以参考《如何使用Socket实现长连接》 一个简单的长连接demo分为以下几个步骤:长连接流程...转载 2018-09-10 22:26:11 · 472 阅读 · 0 评论 -
Netty 接受请求过程源码分析 (基于4.1.23)
前言在前文中,我们分析了服务器是如何启动的。而服务器启动后肯定是要接受客户端请求并返回客户端想要的信息的,否则要你服务器干啥子呢?所以,我们今天就分析分析 Netty 在启动之后是如何接受客户端请求的。开始吧!1. 从源头开始从之前服务器启动的源码中,我们得知,服务器最终注册了一个 Accept 事件等待客户端的连接。我们也知道,NioServerSocketChannel 将自己...转载 2018-09-16 13:03:55 · 292 阅读 · 0 评论 -
Netty源码—三、select
NioEventLoop功能前面channel已经准备好了,可以接收来自客户端的请求了,NioEventLoop作为一个线程池,只有一个线程,但是有一个queue存储了待执行的task,由于只有一个线程,所以run方法是死循环,除非线程池shutdown。这个run方法的主要作用:执行selector.select,监听IO事件,并处理IO事件 由于NioEventLoop兼有线程池...转载 2018-09-05 22:39:14 · 293 阅读 · 0 评论