![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 75
shang_xs
java届的小学生
展开
-
Java并发工具类(四)Semaphore - 文件读取
Semaphore Executors原创 2022-12-29 16:08:12 · 961 阅读 · 0 评论 -
事件监听机制(五)再话Jdk事件监听到Spring框架事件监听
Spring 事件监听机制实现(同步/异步)背景熟悉Spring 框架的同学都清楚,Spring容器启动到销毁事件监听机制始终贯穿,那么Jdk中是否也存在相应的监听机制呢,我们一起进行深入的学习和研究。概念事件源:事件对象的产生者,任何一个事件都有一个来源事件监听器注册表:当事件框架或组件收到一个事件后,需要通知所有相关的事件监听器来进行处理,这个时候就需要有个存储监听器的地方,也就是事件监听器注册表事件广播器:事件广播器在整个事件机制中扮演一个中介的角色,当事件发布者发布一个事件后,就需要通过原创 2021-08-19 11:08:44 · 383 阅读 · 0 评论 -
字节码增强技术探索
字节码增强技术探索2019年09月05日 作者: 赵泽恩 文章链接 17853字 36分钟阅读1.字节码1.1 什么是字节码?Java之所以可以“一次编译,到处运行”,一是因为JVM针对各种操作系统、平台都进行了定制,二是因为无论在什么平台,都可以编译生成固定格式的字节码(.class文件)供JVM使用。因此,也可以看出字节码对于Java生态的重要性。之所以被称之为字节码,是因为字节码文件由十六进制值组成,而JVM以两个十六进制值为一组,即以字节为单位进行读取。在Java中一般是用javac命令编译转载 2020-12-23 14:11:31 · 249 阅读 · 0 评论 -
java agent
一、什么是java agent?Java agent是在JDK1.5引入的,是一种可以动态修改Java字节码的技术。java类编译之后形成字节码被JVM执行,JVM在执行这些字节码之前获取这些字节码信息,并且对这些字节码进行修改,来完成一些额外的功能,这种就是java agent技术。二、java agent可以实现什么样的功能?java agent能够在加载java字节码之前进行拦截并对字节码进行修改在jvm运行期间修改已经加载的字节码通过以上两种就可以实现在一些框架或是技术的采集点原创 2020-12-20 15:47:36 · 481 阅读 · 1 评论 -
RocketMQ(六)最佳实践
最佳实践1 生产者1.1 发送消息注意事项1 Tags的使用一个应用尽可能用一个Topic,而消息子类型则可以用tags来标识。tags可以由应用自由设置,只有生产者在发送消息设置了tags,消费方在订阅消息时才可以利用tags通过broker做消息过滤:message.setTags(“TagA”)。2 Keys的使用每个消息在业务层面的唯一标识码要设置到keys字段,方便将来定位消息丢失问题。服务器会为每个消息创建索引(哈希索引),应用可以通过topic、key来查询这条消息内容,以及消息转载 2020-12-02 17:32:31 · 668 阅读 · 0 评论 -
RocketMQ(四)设计
设计(design)1 消息存储[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lLpxm6fR-1606901004558)(https://github.com/apache/rocketmq/raw/master/docs/cn/image/rocketmq_design_1.png)]消息存储是RocketMQ中最为复杂和最为重要的一部分,本节将分别从RocketMQ的消息存储整体架构、PageCache与Mmap内存映射以及RocketMQ中两种不同的刷盘方式转载 2020-12-02 17:25:00 · 165 阅读 · 0 评论 -
RocketMQ(三)技术架构
1 技术架构RocketMQ架构上主要分为四部分,如上图所示:Producer:消息发布的角色,支持分布式集群方式部署。Producer通过MQ的负载均衡模块选择相应的Broker集群队列进行消息投递,投递的过程支持快速失败并且低延迟。Consumer:消息消费的角色,支持分布式集群方式部署。支持以push推,pull拉两种模式对消息进行消费。同时也支持集群方式和广播方式的消费,它提供实时消息订阅机制,可以满足大多数用户的需求。NameServer:NameServer是一个非常简单的Topic转载 2020-12-02 17:32:45 · 143 阅读 · 0 评论 -
RocketMQ(五)使用
RocketMQ使用1 基本样例在基本样例中我们提供如下的功能场景:使用RocketMQ发送三种类型的消息:同步消息、异步消息和单向消息。其中前两种消息是可靠的,因为会有发送是否成功的应答。使用RocketMQ来消费接收到的消息。1.1 加入依赖:maven:<dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-client</a转载 2020-12-02 17:32:39 · 228 阅读 · 0 评论 -
RocketMQ (二) 特性
特性(features)1 订阅与发布消息的发布是指某个生产者向某个topic发送消息;消息的订阅是指某个消费者关注了某个topic中带有某些tag的消息,进而从该topic消费数据。2 消息顺序消息有序指的是一类消息消费时,能按照发送的顺序来消费。例如:一个订单产生了三条消息分别是订单创建、订单付款、订单完成。消费时要按照这个顺序消费才能有意义,但是同时订单之间是可以并行消费的。RocketMQ可以严格的保证消息有序。顺序消息分为全局顺序消息与分区顺序消息,全局顺序是指某个Topic下的所有消转载 2020-12-02 17:32:54 · 113 阅读 · 0 评论 -
RocketMQ(一)基本概念
基本概念1 消息模型(Message Model)RocketMQ主要由 Producer、Broker、Consumer 三部分组成,其中Producer 负责生产消息,Consumer 负责消费消息,Broker 负责存储消息。Broker 在实际部署过程中对应一台服务器,每个 Broker 可以存储多个Topic的消息,每个Topic的消息也可以分片存储于不同的 Broker。Message Queue 用于存储消息的物理地址,每个Topic中的消息地址存储于多个 Message Queue 中转载 2020-12-02 17:33:01 · 113 阅读 · 0 评论 -
【解决】java.net.BindException Address already in use: NET_Bind
【解决】java.net.BindException Address already in use: NET_Bind方法一:1. 查看占用端口netstat -ano|findstr 8080有LISTENING说明存在端口为8080的应用程序2. 查看进程号对应的应用tasklist|findstr "36668"3. 根据进程号杀死应用taskkill /pid 36668 /f方法二:1. 任务管理器处理占用的端口号...原创 2020-09-22 11:34:30 · 9113 阅读 · 4 评论 -
HttpURLConnection 使用 & MissingServletRequestParameterException异常处理
http请求处理工具类HttpURLConnection 概述public abstract class HttpURLConnection extends URLConnectionA URLConnection with support for HTTP-specific features. See the spec for details.Each HttpURLConnection instance is used to make a single request but the und原创 2020-06-28 16:11:08 · 609 阅读 · 0 评论 -
Java并发工具类(二)CyclicBarrier
Java并发工具类(二)CyclicBarrier在J.U.C并发包中提供了一些工具类,可以供我们在日常的开发中,根据不同的情况去进行一些相关的并发控制,具体的类有:CountDownLatchSemaphoreExchangerCyclicBarrierCyclicBarrier概念当有多个线程同时去访问的时候,会发生阻塞,直到最后一个线程达到屏障时,程序才会继续执行。实现...原创 2019-02-13 08:59:29 · 676 阅读 · 0 评论 -
Java知识点汇总
Java知识点汇总转自: https://blog.csdn.net/forezp/article/details/8882324403-24 Java并发:彻底理解ThreadLocal03-23 Java并发:Synchronized原理和优化03-22 Java并发:java线程池详解03-21 Java并发:Java并发编程:CountDownLatch、CyclicBarri...转载 2019-06-10 10:43:28 · 227 阅读 · 0 评论 -
JDK动态代理实现原理
JDK动态代理实现原理动态代理机制通过实现 InvocationHandler 接口创建自己的调用处理器通过为 Proxy 类指定 ClassLoader 对象和一组 interface 来创建动态代理类通过反射机制获得动态代理类的构造函数,其唯一参数类型是调用处理器接口类型通过构造函数创建动态代理类实例,构造时调用处理器对象作为参数被传入Interface Inv...原创 2019-06-18 11:29:58 · 250 阅读 · 0 评论 -
JDK动态代理在Spring AOP中的实现
JDK动态代理在Spring AOP中的实现动态代理机制通过实现 InvocationHandler 接口创建自己的调用处理器通过为 Proxy 类指定 ClassLoader 对象和一组 interface 来创建动态代理类通过反射机制获得动态代理类的构造函数,其唯一参数类型是调用处理器接口类型通过构造函数创建动态代理类实例,构造时调用处理器对象作为参数被传入AO...原创 2019-06-18 12:42:44 · 793 阅读 · 0 评论 -
多级缓存实现消息投递(短信发送)
多级缓存实现消息投递(短信发送)文章背景接产品需求,要在项目中实现代扣失败后短信的发送,但从这一点来讲比较容易实现,代扣失败直接发短信就是了,但是需求难实现主要是在于场景的复杂性,目前代扣的场景包括,实时代扣、查证、回调三个部分;每天代扣次数不定,目前是两次。要求支持当天只能发一条失败短信通知,对于一个客户多个绑定卡的情况,只发送给最优卡绑定的手机;支持后续开放对多次批扣,多次短信发送的...原创 2019-08-01 10:00:13 · 321 阅读 · 0 评论 -
软件设计-接口设计、代码优化
软件设计-接口设计、代码优化前言随着产品业务的发展,产品和用户量不断提升,由于之前每个产品对应一套接口,使得接口数目迅速膨胀,维护的成本也日渐变高。好的接口设计,不管从代码复用还是代码健壮性来看都尤为必要,从复杂的产品中抽象出一套公用接口也变得势在必行。设计之初首先,研究了大话设计模式这本书,统缆设计模式之后,从产品设计角度去分析,采用简单工厂尤为简便,但是具体的实现细节会被类case w...原创 2019-05-13 10:39:30 · 3311 阅读 · 1 评论 -
CopyOnWrite思想在实际应用中的体现
CopyOnWrite思想在实际应用中的体现“ 今天聊一个非常硬核的技术知识,给大家分析一下CopyOnWrite思想是什么,以及在Java并发包中的具体体现,包括在Kafka内核源码中是如何运用这个思想来优化并发性能的。这个CopyOnWrite在面试的时候,很可能成为面试官的一个杀手锏把候选人给一击必杀,也很有可能成为候选人拿下Offer的独门秘籍,是相对高级的一个知识。读多写少的场...转载 2019-05-22 09:33:45 · 207 阅读 · 0 评论 -
ThreadLocal和InheritableThreadLocal深入探究(二)在Spring中的应用
ThreadLocal和InheritableThreadLocal深入探究(二)在Spring中的应用Spring中RequestContextHolder对ThreadLocal和InheritableThreadLocal的实现:org.springframework.web.context.request.RequestContextHolder该类暴露了web请求属性约束的支持,...原创 2019-02-23 10:29:23 · 1563 阅读 · 0 评论 -
ThreadLocal和InheritableThreadLocal深入探究(一)源码分析
ThreadLocal和InheritableThreadLocal深入探究ThreadLocal定义此类提供线程局部变量。这些变量不同于正常的对应项, 因为每个线程访问一个有自己的、独立初始化的变量副本。实例通常是希望将状态与线程关联的类中的私有静态字段 (例如 用户id或事务id)。官方示例import java.util.concurrent.atomic.AtomicIntege...原创 2019-02-23 10:20:47 · 467 阅读 · 0 评论 -
Java并发工具类(四)Semaphore
Java并发工具类(四)Semaphore在J.U.C并发包中提供了一些工具类,可以供我们在日常的开发中,根据不同的情况去进行一些相关的并发控制,具体的类有:CountDownLatchSemaphoreExchangerCyclicBarrierExchanger概念semaphore是指信号量,是用来控制同时访问特定资源的线程总数,它通过协调各个线程,以保证合理的使用公共资...原创 2019-02-13 08:59:51 · 807 阅读 · 1 评论 -
Java并发工具类(三)Exchanger
Java并发工具类(三)Exchanger在J.U.C并发包中提供了一些工具类,可以供我们在日常的开发中,根据不同的情况去进行一些相关的并发控制,具体的类有:CountDownLatchSemaphoreExchangerCyclicBarrierExchanger概念Exchanger是线程间协作的工具类,Exchanger用于进行线程间的数据交换,它提供一个同步点,在这个同...原创 2019-02-13 08:59:42 · 819 阅读 · 0 评论 -
Java并发工具类(一)CountDownLatch
Java并发工具类(一) CountDownLatch在J.U.C并发包中提供了一些工具类,可以供我们在日常的开发中,根据不同的情况去进行一些相关的并发控制,具体的类有:CountDownLatchSemaphoreExchangerCyclicBarrierCountDownLatch概念计时器必须大于等于0,只是等于0的时候,计时器就是0,调用await()方法时,不会阻塞...原创 2019-02-13 08:54:19 · 864 阅读 · 0 评论 -
Java并发编程
JAVA异步编程java 5前时代并发实现Java Green ThreadJava Native Thread编程模型ThreadRunnable使用join()实现线程同步实现局限性缺少线程管理的原生支持缺少"锁"API缺少知悉选哪个完成的原生支持执行结果获取困难Double Check Locking 不确定性public cla...原创 2019-02-12 10:50:19 · 634 阅读 · 2 评论 -
异步并发编程
异步事件驱动开发web fluxreactiveasyncVert.x异步编程什么是Vert.x是一个在JVM平台构建reactive应用的工具箱基于Netty多语言支持多模块支持(数据库、日志、服务发现)为什么要用Vert.xReactive编程模型性函数式异步非阻塞web 技术栈适合嵌入式或微服务应用Vert.x核心概念线程和编程模型异步I/O...原创 2019-02-12 10:43:37 · 848 阅读 · 0 评论 -
ThreadLocal深入理解与内存泄漏分析
ThreadLocal深入理解与内存泄漏ThreadLocal是啥?以前面试别人时就喜欢问这个,有些伙伴喜欢把它和线程同步机制混为一谈,事实上ThreadLocal与线程同步无关。ThreadLocal虽然提供了一种解决多线程环境下成员变量的问题,但是它并不是解决多线程共享变量的问题。那么ThreadLocal到底是什么呢?ThreadLocal很容易让人望文生义,想当然地认为是一个“本地线程...转载 2019-02-22 11:05:18 · 515 阅读 · 0 评论 -
ThreadLocal和InheritableThreadLocal深入探究(三)在Spring Cloud Netflix中的应用
ThreadLocal和InheritableThreadLocal深入探究(三)在Spring Cloud Netflix中的应用ThreadLocal在 Spring Cloud Netflix 中的实现:com.netflix.zuul.context.RequestContext请求上下文包含请求、响应、状态信息和数据, 以便 ZuulFilters 访问和共享。在请求的持续时间内...原创 2019-02-23 10:35:48 · 673 阅读 · 0 评论 -
事件监听机制(一)Java事件监听
事件监听机制(一)Java事件监听事件监听实现流程事件对象:继承自java.util.EventObject对象,由开发者自行定义实现。事件源:就是触发事件的源头,不同的事件源会触发不同的事件类型。事件监听器:事件监听器负责监听事件源发出的事件,事件监听器可以通过实现java.util.EventListener这个标识接口.,实现事件监听。流程总结事件源可以注册...原创 2019-02-25 09:56:27 · 12262 阅读 · 2 评论 -
深入学习和理解Servlet(二)
深入学习和理解Servlet(二)什么是ServletServlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情...原创 2019-05-20 15:53:01 · 1561 阅读 · 1 评论 -
深入学习和理解Servlet(一)
深入学习和理解Servlet(一)Servlet工作流程Servlet 定义Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Se...转载 2019-05-20 11:02:06 · 1034 阅读 · 0 评论 -
Java回调接口设计&&Lambda改造
Java回调接口设计&&Lambda改造设计之初作为一名有技术情怀的程序员,在日常开发中,我们会遇到多种多样的场景,比如说在代码执行完成后进行的同步操作,亦或者是在代码执行过程中发生的异步操作,如果实现接口设计呢?老规矩,查资料,翻代码,找实现的API,而后进行扩展,做到举一反三。Java对同步回调实现的支持// 答案一:// 顺序执行代码,实现不同方法的顺序压栈,通过利...原创 2019-05-08 10:32:42 · 1327 阅读 · 1 评论 -
后台管理系统采用IBatis逻辑分页导致SQL慢查询问题
后台管理系统采用IBatis逻辑分页导致SQL慢查询问题ibatis一词来源于internet和abatis的组合,是一个由Clinton Begin在2001年发起的开放源代码项目。于2010年6月16号被谷歌托管,改名为MyBatis。是一个基于SQL映射支持Java和.NET的持久层框架。ibatis优点半自动化“半自动化”的ibatis,却刚好解决了这个问题。这里的“半自动化”,是...原创 2019-04-03 20:07:37 · 992 阅读 · 0 评论 -
深入理解Apollo(三)Hello World设计
深入理解Apollo(三)Hello World设计参考来源:https://github.com/ctripcorp/apollo快速启动一、准备工作二、安装步骤三、启动Apollo配置中心四、使用Apollo配置中心为了让大家更快的上手了解Apollo配置中心,我们这里准备了一个Quick Start,能够在几分钟内在本地环境部署、启动Apollo配置中心。考虑到Docke...转载 2019-04-04 09:55:01 · 1616 阅读 · 0 评论 -
深入理解Apollo(四)Namespace设计
深入理解Apollo(四)Namespace设计参考来源:https://github.com/ctripcorp/apolloJava客户端使用指南一、准备工作二、Maven Dependency三、客户端用法3.1 API使用方式3.1.1 获取默认namespace的配置3.1.2 监听配置变化事件3.1.3 获取公共Namespace的配置3.1.4 获取非pro...转载 2019-04-04 09:55:24 · 10976 阅读 · 3 评论 -
Java实现日志脱敏处理
Java 实现日志脱敏处理题记在日常工作中,日志处理是我们每一个程序员必备的素质,但是在有些场景下客户信息敏感,需要进行某些字段,或者某部分字段的脱敏处理。接到需求我们开始操刀!需求分析处理字段的方式多种多样,如何方便,高效才是关键,众所周知在java中最好的处理方式就是封装,即,对程序员暴露出的最好是一个统一的API,不关心具体的处理逻辑,能拿到想要的返回值就好。实现第一版由于在RP...原创 2019-01-24 19:30:36 · 14181 阅读 · 14 评论