-
Java网络编程-HTTP协议
所属栏目:[Java] 日期:2020-12-15 热度:188
HTTP协议的定义 这篇文章暂时不研究HTTP底层的TCP/IP的握手和挥手过程,只从表面的交互流程分析HTTP协议。 HTTP英文全称是Hypertext Transfer Protpcol,也就是超文本传输协议。HTTP是一个标准,定义了Web客户端如何与服务器对话以及数据如何从服务器传回到[详细]
-
JDK中注解的底层实现
所属栏目:[Java] 日期:2020-12-15 热度:53
前提 用Java快三年了,注解算是一个常用的类型,特别是在一些框架里面会大量使用注解做组件标识、配置或者策略。但是一直没有深入去探究JDK中的注解到底是什么,底层是怎么实现了?于是参考了一些资料,做了一次稍微详细的分析。 JDK的注解描述 参考JavaSE-8[详细]
-
一个低级错误引发Netty编码解码中文异常
所属栏目:[Java] 日期:2020-12-15 热度:180
前言 最近在调研 Netty 的使用,在编写编码解码模块的时候遇到了一个中文字符串编码和解码异常的情况,后来发现是笔者犯了个低级错误。这里做一个小小的回顾。 错误重现 在设计 Netty 的自定义协议的时候,发现了字符串类型的属性,一旦出现中文就会出现解码[详细]
-
网络编程-Java中的Internet查询
所属栏目:[Java] 日期:2020-12-15 热度:96
前提 在深入理解URL、URI等概念,或者学些Socket相关的知识之,有必要系统理解一下Internet相关的一些基础知识。 Internet地址 连接到Internet(因特网)的设备称为节点(node),而任意一个计算机节点称为主机(host)。每个节点或者主机都由至少一个唯一的数来标[详细]
-
Spring Cloud Gateway入坑记
所属栏目:[Java] 日期:2020-12-15 热度:197
Spring Cloud Gateway入坑记 前提 最近在做老系统的重构,重构完成后新系统中需要引入一个网关服务,作为新系统和老系统接口的适配和代理。之前,很多网关应用使用的是 Spring-Cloud-Netfilx 基于 Zuul1.x 版本实现的那套方案,但是鉴于 Zuul1.x 已经停止迭[详细]
-
使用Redis实现延时任务(一)
所属栏目:[Java] 日期:2020-12-15 热度:142
前提 最近在生产环境刚好遇到了延时任务的场景,调研了一下目前主流的方案,分析了一下优劣并且敲定了最终的方案。这篇文章记录了调研的过程,以及初步方案的实现。 候选方案对比 下面是想到的几种实现延时任务的方案,总结了一下相应的优势和劣势。 方案 优[详细]
-
通过micrometer实时监控线程池的各项指标
所属栏目:[Java] 日期:2020-12-15 热度:166
通过micrometer实时监控线程池的各项指标 前提 最近的一个项目中涉及到文件上传和下载,使用到JUC的线程池 ThreadPoolExecutor ,在生产环境中出现了某些时刻线程池满负载运作,由于使用了 CallerRunsPolicy 拒绝策略,导致满负载情况下,应用接口调用无法响[详细]
-
浅析JDK中ServiceLoader的源码
所属栏目:[Java] 日期:2020-12-15 热度:77
前提 紧接着上一篇《通过源码浅析JDK中的资源加载》,ServiceLoader是SPI(Service Provider Interface)中的服务类加载的核心类,也就是,这篇文章先介绍ServiceLoader的使用方式,再分析它的源码。 ServiceLoader的使用 这里先列举一个经典的例子,MySQL的Ja[详细]
-
使用Redis实现延时任务(二)
所属栏目:[Java] 日期:2020-12-15 热度:92
前提 前一篇文章通过 Redis 的有序集合 Sorted Set 和调度框架 Quartz 实例一版简单的延时任务,但是有两个相对重要的问题没有解决: 分片。 监控。 这篇文章的内容就是要完善这两个方面的功能。前置文章:使用Redis实现延时任务(一)。 为什么需要分片 这里[详细]
-
Spring Cloud Gateway、并发编程等等
所属栏目:[Java] 日期:2020-12-15 热度:169
2019年 JUC线程池服务ExecutorService接口实现源码分析 Github Page:http://www.throwable.club/2019/07/27/java-concurrency-executor-service Coding Page:http://throwable.coding.me/2019/07/27/java-concurrency-executor-service JUC线程池ThreadPoo[详细]
-
通过源码浅析Java中的资源加载
所属栏目:[Java] 日期:2020-12-15 热度:55
前提 最近在做一个基础组件项目刚好需要用到JDK中的资源加载,这里说到的资源包括类文件和其他静态资源,刚好需要重新补充一下类加载器和资源加载的相关知识,整理成一篇文章。 理解类的工作原理 这一节主要分析类加载器和双亲委派模型。 什么是类加载器 虚[详细]
-
彻底告别加解密模块代码拷贝-JCE核心Cpiher详解
所属栏目:[Java] 日期:2020-12-15 热度:162
前提 javax.crypto.Cipher,翻译为密码,其实叫做 密码器 更加合适。Cipher是JCA(Java Cryptographic Extension,Java加密扩展)的核心,提供基于多种加解密算法的加解密功能。在不了解Cipher之前,我们在完成一些需要加解密的模块的时候总是需要到处拷贝代码[详细]
-
深入理解Object提供的阻塞和唤醒API
所属栏目:[Java] 日期:2020-12-15 热度:64
深入理解Object提供的阻塞和唤醒API 前提 前段时间花了大量时间去研读JUC中同步器 AbstractQueuedSynchronizer 的源码实现,再结合很久之前看过的一篇关于 Object 提供的等待和唤醒机制的JVM实现,发现两者有不少的关联,于是决定重新研读一下 Object 中提供[详细]
-
深入理解Java中的Garbage Collection
所属栏目:[Java] 日期:2020-12-15 热度:66
前提 最近由于系统业务量比较大,从生产的GC日志(结合Pinpoint)来看,需要对部分系统进行GC调优。但是鉴于以往不是专门做这一块,但是一直都有零散的积累,这里做一个相对全面的总结。本文只针对 HotSpot VM 也就是 Oracle Hotspot VM 或者 OpenJDK Hotspot[详细]
-
Redis高级客户端Lettuce详解
所属栏目:[Java] 日期:2020-12-15 热度:90
前提 Lettuce 是一个 Redis 的 Java 驱动包,初识她的时候是使用 RedisTemplate 的时候遇到点问题 Debug 到底层的一些源码,发现 spring-data-redis 的驱动包在某个版本之后替换为 Lettuce 。 Lettuce 翻译为 生菜 ,没错,就是吃的那种生菜,所以它的 Logo[详细]
-
Java网络编程-URI和URL
所属栏目:[Java] 日期:2020-12-15 热度:170
前提 前面的一篇文章《Java中的Internet查询》分析完了如何通过IP地址或者主机名确定主机在因特网中的地址。任意给定主机上可能会有任意多个资源,这些资源需要有标识符方便主机之间访问对方的资源,因此这篇文章深入分析一下URL和URI。 URI URI全称是Unifor[详细]
-
使用Redis实现UA池
所属栏目:[Java] 日期:2020-12-15 热度:126
前提 最近忙于业务开发、交接和游戏,加上碰上了不定时出现的犹豫期和困惑期,荒废学业了一段时间。天冷了,要重新拾起开始下阶段的学习了。之前接触到的一些数据搜索项目,涉及到请求模拟,基于反爬需要使用随机的 User Agent ,于是使用 Redis 实现了一个[详细]
-
基于Netty和SpringBoot实现一个轻量级RPC框架-Server篇
所属栏目:[Java] 日期:2020-12-15 热度:166
前提 前置文章: Github Page :《基于Netty和SpringBoot实现一个轻量级RPC框架-协议篇》 Coding Page :《基于Netty和SpringBoot实现一个轻量级RPC框架-协议篇》 在前置的《基于Netty和SpringBoot实现一个轻量级RPC框架-协议篇》一文中已经定义了一个相对简[详细]
-
基于Netty和SpringBoot实现一个轻量级RPC框架-Client篇
所属栏目:[Java] 日期:2020-12-15 热度:82
前提 前置文章: 《基于Netty和SpringBoot实现一个轻量级RPC框架-协议篇》 《基于Netty和SpringBoot实现一个轻量级RPC框架-Server篇》 前一篇文章相对简略地介绍了 RPC 服务端的编写,而这篇博文最要介绍客户端( Client )的实现。 RPC 调用一般是面向契约[详细]
-
深入分析Java反射(二)-数组和枚举
所属栏目:[Java] 日期:2020-12-15 热度:96
前提 Java反射的API在JavaSE1.7的时候已经基本完善, 但是本文编写的时候使用的是Oracle JDK11 ,因为JDK11对于sun包下的源码也上传了,可以直接通过IDE查看对应的源码和进行Debug。 本文主要介绍反射中可能用到的两个比较特殊的类型,数组和枚举,分别对应[详细]
-
从源码上理解Netty并发工具-Promise
所属栏目:[Java] 日期:2020-12-15 热度:141
前提 最近一直在看 Netty 相关的内容,也在编写一个轻量级的 RPC 框架来练手,途中发现了 Netty 的源码有很多亮点,某些实现甚至可以用 苛刻 来形容。另外, Netty 提供的工具类也是相当优秀,可以开箱即用。这里分析一下个人比较喜欢的领域,并发方面的一个[详细]
-
深入分析Java反射(五)-类实例化和类加载
所属栏目:[Java] 日期:2020-12-15 热度:92
前提 其实在前面写过的《深入分析Java反射(一)-核心类库和方法》已经介绍过通过类名或者 java.lang.Class 实例去实例化一个对象,在《浅析Java中的资源加载》中也比较详细地介绍过类加载过程中的双亲委派模型,这篇文章主要是加深一些对类实例化和类加载的认[详细]
-
Hystrix完整配置列表
所属栏目:[Java] 日期:2020-12-15 热度:194
前提 Hystrix 在2018年11月20日之后已经停止维护,最后一个提交记录是: Latest commit 3cb2158 on 20 Nov 2018 ,最后一个正式版本为 1.5.18 。鉴于目前所在公司的技术栈是 Spring Cloud ,熔断和降级组件主要用的还是 Hystrix ,这里就 Hystrix 的完整列表[详细]
-
深入理解JDK中的Reference原理和源码实现
所属栏目:[Java] 日期:2020-12-15 热度:166
前提 这篇文章主要基于JDK11的源码和最近翻看的《深入理解Java虚拟机-2nd》一书的部分内容,对JDK11中的 Reference (引用)做一些总结。值得注意的是,通过笔者对比一下JDK11和JDK8对于 java.lang.ref 包的相关实现,发现代码变化比较大, 因此本文的源码分析[详细]
-
深入分析Java反射(四)-动态代理
所属栏目:[Java] 日期:2020-12-15 热度:55
动态代理的简介 Java动态代理机制的出现,使得Java开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地获得代理类。代理类会负责将所有的方法调用分派到委托对象上反射执行,在分派执行的过程中,开发人员还可以按需调整委托类对象[详细]