
Java
文章平均质量分 89
albon_arith
欢迎交流
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java BouncyCastle API 创建证书撤销列表 CRL 和验证证书有效性
创建 CRL 需要用到有 CRL 权限的 CA 机构私钥和证书: Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); // 准备好创建 CRL 所需的私钥和证书 PrivateKey caPrivateKey = ...... X509Ce...原创 2020-04-12 20:58:21 · 3341 阅读 · 2 评论 -
Java bouncycastle API 创建 CSR 和签发证书
引入 API <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</artifactId> <version>1.64</version>...原创 2020-04-05 11:45:51 · 4123 阅读 · 2 评论 -
Kafka 原理和架构解析
Kafka 是由 LinkedIn 开发的一个分布式的消息系统,使用 Scala 编写,它以可水平扩展和高吞吐率而被广泛使用。Kafka 是一种分布式的,基于发布 / 订阅的消息系统。主要设计目标如下:以时间复杂度为 O(1) 的方式提供消息持久化能力,即使对 TB 级以上数据也能保证常数时间复杂度的访问性能。高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒 100K 条以上消息的传...原创 2019-11-03 11:45:50 · 3784 阅读 · 2 评论 -
Netty 的组件和设计
Netty 基于 Java NIO 的异步的和事件驱动的实现,保证了高负载下应用程序性能的最大化和可伸缩性。Netty 也包含了一组设计模式,将应用程序逻辑从网络层解耦, 简化了开发过程,同时也最大限度地提高了可测试性、模块化以及代码的可重用性。事件驱动模型通常,我们设计一个事件处理模型的程序有两种思路:轮询方式:线程不断轮询访问相关事件发生源有没有发生事件,有发生事件就调用事件处理逻辑。...原创 2019-10-26 09:56:34 · 1623 阅读 · 0 评论 -
Netty 与线程绑核
如果你在开发低延迟的 Netty 应用程序,那么你可能了解过线程亲和性(thread affinity)这一概念。线程亲和性是指一个线程可以被强制在某一特定的 CPU 核和 CPU 核组上运行。这样你就可以在操作系统调度过程中消除线程迁移,提升性能。幸运的是,目前就有一个名为 Java-Thread-Affinity 的 Java 库,可以轻松地与 Netty 应用集成。首先,需要添加下面的依赖...翻译 2019-10-26 10:18:21 · 2801 阅读 · 0 评论 -
Netty 权威指南笔记(一):网络 I/O 模型和 Java NIO 入门
网络 I/O 模型和 Java NIO 入门Java I/O 模型的实现离不开底层操作系统的支持,所以这里先讲一下 Linux 网络 I/O 模型。Linux 网络 I/O 模型简介同步阻塞 I/O 模型最常见的模型是原创 2017-10-29 15:58:30 · 2241 阅读 · 0 评论 -
Spring 框架学习(三):IoC 容器
IoC 容器的核心是依赖反转模式。许多应用都是由两个或多个类通过彼此的合作来实现业务逻辑的,这是的每个对象都需要与其合作对象的引用。如果这个获取过程要靠自己实现,那将导致代码高度耦合并且难以测试。在 Spring 中通过把依赖对象的获取交给 IoC 容器来完成,在解耦代码的同时提高了代码的可测试性。原创 2017-10-25 11:15:25 · 587 阅读 · 0 评论 -
Netty 权威指南笔记(四):架构剖析
对 Netty 的架构进行剖析,学习其设计,便于在今后的架构设计中,设计出高性能、高可靠、可扩展的产品。原创 2017-11-02 12:54:04 · 712 阅读 · 0 评论 -
Spring 框架学习(四):AOP
Aspect 是一种新的模块化机制,用来描述分散在对象、类或函数中的横切关注点。从关注点中分离出横切关注点是面向切面的程序设计的核心概念。分离关注点使得解决特定领域问题的代码从业务逻辑中独立出来,业务逻辑代码中不再含有针对特定领域问题代码的调用,业务领域同特定领域问题的关系通过切面来封装、维护,这样原本分散在整个应用程序中的变动就可以很好地管理起来。原创 2017-10-26 15:09:37 · 459 阅读 · 0 评论 -
Netty 权威指南笔记(五):ByteBuf 源码解读
Java 本身提供了 ByteBuffer 类,为什么 Netty 还要搞一个 ByteBuf 类呢?因为 ByteBuffer 类有着许多缺点:1. ByteBuffer 长度固定,无法动态伸缩。2. ByteBuffer 只有一个位置指针 position,读写的时候需要手工调用 flip 和 rewind 方法进行模式转换,操作繁琐,容易出错。3. 功能太少,缺少一些高级特性。原创 2017-11-03 14:04:10 · 1572 阅读 · 0 评论 -
Netty 权威指南笔记(六):Channel 解读
JDK 的 NIO 类库中,提供了 SocketChannel 和 ServerSocketChannel 用于非阻塞 I/O 操作。类似于 NIO 的 Channel,Netty 提供了自己的 Channel 和其子类实现。原创 2017-11-06 09:48:35 · 2199 阅读 · 0 评论 -
Netty 权威指南笔记(八):EventLoopGroup 和线程模型
一般情况下,I/O 复用机制需要事件分发器(event dispatcher)。 事件分发器的作用,即将那些读写事件源分发给各读写事件的处理者,就像送快递的在楼下喊: 谁谁谁的快递到了, 快来拿吧!开发人员在开始的时候需要在分发器那里注册感兴趣的事件,并提供相应的处理者(event handler),或者是回调函数;事件分发器在适当的时候,会将请求的事件分发给这些handler或者回调函数。原创 2017-11-16 23:51:22 · 5436 阅读 · 0 评论 -
利用 Java Agent 和 Instrument 技术录制线上流量
利用 Java Agent 和 Instrument 技术录制线上流量Java Instrument 技术遇到的难题自动打包依赖ClassNotFound 问题HttpServletRequest body 只能 get 一次利用 Java Agent 和 Instrument 技术录制线上流量在做性能压测的时候,需要先准备好压测请求数据,可以采用人工制造的方式原创 2018-02-04 11:06:17 · 2364 阅读 · 0 评论 -
Effective Java 读书笔记(十):序列化
谨慎地实现 Serializable 接口考虑使用自定义的序列化形式保护性地编写 readObject 方法对于实例控制枚举类型优先于 readResolve考虑用序列化代理代替序列化实例原创 2017-10-16 16:00:19 · 429 阅读 · 0 评论 -
Effective Java 读书笔记(六):方法
检查参数的有效性必要时进行保护性拷贝谨慎设计方法签名慎用重载慎用可变参数返回零长度的数组和集合而不是 null为所有导出的 API 元素编写文档注释原创 2017-10-15 19:53:47 · 399 阅读 · 0 评论 -
Netty 权威指南笔记(七):ChannelPipeline 和 ChannelHandler 源码分析
Netty 的 ChannelPipeline 和 ChannelHandler 机制类似于 Servlet 和 Filter 过滤器,这类拦截器实际上是职责链模式的一种变形,主要是为了方便事件的拦截和用户业务逻辑的定制。Servlet Filter 过滤器提供了一种面向对象的模块化机制,用来将公共人物封装到可插入的组件中。这些组件通过 Web 部署配置文件(web.xml)进行声明,无须改动代码即可添加和删除过原创 2017-11-07 14:14:33 · 5807 阅读 · 0 评论 -
Spring 框架学习(二):Spring 应用配置文件讲解
初学 Spring 的时候,只是照猫画虎,对于每一项配置的由来并不十分了解。这里,我们深入了解一下,这些配置都起到了什么作用?原创 2017-10-22 10:29:12 · 422 阅读 · 0 评论 -
Effective Java 读书笔记(七):通用程序设计
将局部变量的作用域最小化for-each 循环优于传统的 for 循环了解和使用类库如果需要精确的答案请避免使用 float 和 double基本类型优于装箱基本类型如果其他类型更合适则尽量避免使用字符串当心字符串连接的性能通过接口引用对象接口优先于反射机制谨慎地使用本地方法谨慎地进行优化遵循普遍接受的命名惯例原创 2017-10-12 20:04:01 · 433 阅读 · 0 评论 -
Netty 权威指南笔记(二):Java NIO 和 Netty 对比
Netty 是业界流行的 NIO 框架之一,它的健壮性、功能、性能、可定制性和可扩展性在同类框架中都说首屈一指的,也已经得到了成百上千商用项目的验证。Netty 框架都有什么优点呢?1. API 使用简单,开发门槛低。2. 功能强大,预置多种编解码功能,支持多种主流协议。3. 定制能力强,可以通过 ChannelHandler 对通信框架灵活扩展。4. 性能高。5. 成熟稳定,社区活跃,已经修复了 Jav原创 2017-10-30 15:29:22 · 13844 阅读 · 1 评论 -
Effective Java 读书笔记(四):泛型
请不要在新代码中使用原生态类型消除编译时的非受检警告列表 List 优先于数组优先考虑泛型优先考虑泛型方法利用有限制通配符来提升 API 的灵活性优先考虑类型安全的异构容器原创 2017-10-13 16:04:34 · 465 阅读 · 0 评论 -
《深入理解 Java 内存模型》笔记总结
简单的说,内存模型描述了某个程序的可能行为。内存模型包含一组规则,规定了一个线程的写操作何时对另一个线程可见。在程序行为满足这些规则的情况下,JVM 可以自由地进行代码转换,比如重排序和非必要的同步移除,代码转换往往是为了提升性能。原创 2017-10-31 10:29:14 · 521 阅读 · 0 评论 -
Effective Java 读书笔记(三):类和接口
使类和成员的可访问性最小化在公有类中使用访问方法而非公有域使可变性最小化复合优先于继承要么为继承而设计并提供文档说明要么禁止继承接口优于抽象类接口只用于定义类型类层次优于标签类用函数对象表示策略原创 2017-10-14 19:41:33 · 630 阅读 · 1 评论 -
Netty 权威指南笔记(三):TCP 粘包和拆包
TCP 是一个“流”协议,所谓“流”就是没有界限的一串数据。大家可以想像河流里的水,期间并没有分界线。TCP 底层并不了解上层业务数据的具体含义,它会根据 TCP 缓冲区的实际情况进行包的划分。所以,在业务上,一个完整的包可能会被 TCP 拆分成多个包进行发送,也有可能把多个小的包,封装成一个大的数据包发送,这就是所谓的 TCP 粘包和拆包问题。原创 2017-11-01 15:33:07 · 688 阅读 · 0 评论 -
DirectByteBuffer 里的堆外内存何时释放?
DirectByteBuffer 里的堆外内存何时释放?简要答案DirectByteBuffer 在分配堆外内存时:先要通过 Bits.reserveMemory 来看看是否还有可用的内存,是否达到了堆外内存的上限?有的话,占坑。通过 unsafe.allocateMemory 分配内存。创建 Cleaner,这个 Cleaner 就是用来管理堆外内存的。Cleaner 继承...原创 2018-03-11 22:14:07 · 1867 阅读 · 0 评论 -
消息队列 RocketMQ 设计学习
消息队列 RocketMQ 设计学习概述一个消息队列的实现需要关注哪些问题点?需要实现哪些功能?先说最通用的功能,任何系统都需要考虑的功能:系统结构高可用高性能再说,MQ 特有的功能:Message OrderAt Least Once消息查询消息堆积能力事务定时消息回溯消费物理部署结构如上图所示, RocketMQ的部署结构有以下特点:...原创 2018-05-21 14:40:54 · 1105 阅读 · 0 评论 -
自动内存管理的艺术【笔记】
自动内存管理的艺术引言标记-清扫回收概述三色抽象位图标记懒惰清扫标记-整理回收概述局限性复制式回收引用计数法分代垃圾回收概述时间测量弱分代假说分代与堆布局多分代年龄记录分代间指针自动内存管理的艺术引言存活性是一个全局特征,但是调用 free 函数将对象释放却是局部行为,所以如何将对象正确地释放是一个复杂的问题。...原创 2018-06-02 12:09:53 · 967 阅读 · 0 评论 -
Apache HTTPClient 源码解析:主流程
使用示例最近使用 HTTPClient 踩了不少坑,故在此总结下。本文基于 HTTPClient 4.5.6 进行分析,分析源码之前,先贴下用法示例:public class HttpUtil { private static final Logger LOGGER = LoggerFactory.getLogger(HttpUtil.class); private stati...原创 2019-09-19 22:23:54 · 5092 阅读 · 3 评论 -
关于 HTTP 长连接
使用长连接能够减少建立销毁连接的消耗,三次握手、四次挥手对性能影响是很大的。一般 RPC 如 Dubbo 默认都是长连接的,HTTP 1.1 之上也可以支持长连接了,HTTP 2.0 也支持了单一长连接的多路复用。一般 HTTP 服务前面都会挂 nginx 做负载均衡,那么长连接的设置也分为从客户端到 nginx、从 nginx 到服务端两部分。如果使用 Java 的 apache HTTPC...原创 2019-09-15 23:58:31 · 2833 阅读 · 0 评论 -
Java 性能调优总结
这里总结一下,Java 性能调优的方法:代码层面String 使用优化循环拼接字符串显式使用 StringBuilderJDK 从 6 到 7、8 到 9 对 String 是一直在优化的正则表达式少用捕获组贪婪模式会带来回溯,多用独占模式和懒惰模式ArrayList 和 LinkedList使用 ArrayList 时尽量给定合适的初始化容量在头部插入删除元...原创 2019-07-21 17:27:09 · 906 阅读 · 0 评论 -
分布式链路跟踪技术(五):跨线程传输和上下文传播
在分布式链路跟踪系统中,同一条请求处理链路要用一个全局唯一的 traceId 来标识,那就需要把 traceId 传输到该请求涉及的各个系统中。Trace 信息要在系统之间传输时,是通过各种 RPC 中间件里埋点,把 Trace 信息放在 HTTP Header、RPC Context 里进行传输的。实际中,同一个系统内部业务处理出现多线程操作时,如果不做显式处理,也容易丢失 Trace 信息。...原创 2019-07-21 16:59:55 · 3805 阅读 · 0 评论 -
【笔记】从 Paxos 到 Zookeeper:第七章 Zookeeper 技术内幕之服务端
title: 从 Paxos 到 Zookeeper:第七章 Zookeeper 技术内幕之服务端notebook: Javatags:服务端启动单机版启动大致可以分为如下步骤:配置文件解析初始化数据管理器初始化网络IO管理器数据恢复对外服务核心类介绍:QuorumPeerMain:启动入口类。DataDirCleanuoManager:历史文件清理器,包括事务日...原创 2019-07-07 11:06:08 · 1159 阅读 · 0 评论 -
Java 随机数生成器 Random & SecureRandom 原理分析
文章目录java.util.Randomjava.Security.SecureRandom/dev/random 与 /dev/urandom资料Java 里提供了一些用于生成随机数的工具类,这里分析一下其实现原理,以及他们之间的区别、使用场景。java.util.RandomRandom 是比较常用的随机数生成类,它的基本信息在类的注释里都写到了,下面是 JDK8 里该类的注释:/**...原创 2019-06-22 21:04:27 · 39416 阅读 · 2 评论 -
Java 中的 SafePoint
SafePoint 介绍什么是 SafePoint?SafePoint 是 Java 代码中的一个线程可能暂停执行的位置。SafePoint 保存了在其他位置没有的一些运行时信息。SafePoint 保存了线程上下文中的任何东西,包括对象,指向对象或非对象的内部指针。在 JVM 处于 SafePoint 时,可以做什么呢?Garbage collection pausesCode de...原创 2019-06-15 22:26:04 · 2434 阅读 · 0 评论 -
【笔记】自动内存管理的艺术:堆内存的划分
文章目录为何要进行分区如何分区何时进行分区参考资料为何要进行分区之前几章讲解垃圾回收时,都假定:所有对象由相同的垃圾回收算法管理,并且所有垃圾都将在同一时间得到回收。然而如果我们对不同的对象加以区别对待的话,在回收处理的性能上将得到相当大的好处。最广为人知的例子就是所谓“分代回收算法”,该算法将对象按不同的年龄进行分割,并优先回收更年轻的对象。如何分区分区原则详细描述案例...原创 2019-04-16 19:28:00 · 811 阅读 · 0 评论 -
【笔记】自动内存管理的艺术:引用计数
文章目录概述引用计数算法的优缺点提升效率延迟引用计数合并引用计数环状引用计数受限域引用计数总结概述之前介绍的几种垃圾回收算法都是间接式的,他们都需要从已知的根集合出发对存活对象图进行遍历,才能确定所有的存活对象。本章将介绍最后一种基本回收算法:引用计数。在引用计数算法中,对象的存活性可以通过引用关系的创建或删除直接判定,无须像追踪式垃圾回收器那样先通过堆遍历找出所有存活对象,然后再反向确定出未...原创 2019-04-13 14:58:38 · 1499 阅读 · 0 评论 -
【笔记】自动内存管理的艺术 引言&标记清扫回收器
文章目录引言概述自动动态内存管理垃圾回收算法标记-清扫回收算法概述标记-清扫算法三色抽象位图标记懒惰清扫标记过程中的高速缓存不命中问题需要考虑的问题引言概述托管语言以及托管运行时系统不仅能够提升程序的安全性,而且可以通过对操作系统和硬件架构的抽象来提升灵活性,因而受到越来越多开发者的青睐。大部分现代编程语言都使用动态内存分配,即允许进程在运行时分配或释放无法在编译期确定大小的对象,而且对象...原创 2019-03-31 22:07:06 · 1019 阅读 · 0 评论 -
【笔记】深入理解 Java 虚拟机:晚期(运行期)优化
文章目录概述Hotspot 虚拟机内的即时编译器解释器与编译器编译对象与触发条件方法调用计数器回边计数器编译过程Client CompilerServer Compiler编译优化技术优化技术概览公共子表达式消除数组边界检查消除方法内联逃逸分析概述在部分商用虚拟机(Sun Hotspot、IBM J9)中,Java 程序最初是通过解释器解释执行的,当虚拟机发现有个方法或代码块运行特别频繁时,就...原创 2019-03-14 12:02:47 · 6753 阅读 · 1 评论 -
【笔记】深入理解 Java 虚拟机:早期(编译期)优化
原创 2019-02-19 12:03:50 · 938 阅读 · 0 评论 -
【笔记】深入理解 Java 虚拟机:类文件结构
概述代码编译的结果从本地机器码编程字节码,是存储格式发展的一小步,却是编程语言发展的一大步。Java 在诞生之初,曾经有一个著名的口号“一次编译,到处运行”,这句话充分表达了软件开发人员对冲破平台界限的渴求。各种不同平台的虚拟机都统一使用的存储格式 —— 字节码,是构成平台无关性的基石。虚拟机的另外一种特性是语言无关性,目前已经出现了一大批在 Java 虚拟机之上运行的语言,比如 Scala、...原创 2019-01-19 10:46:47 · 947 阅读 · 0 评论 -
【笔记】Spring 事务原理分析和源码剖析
文章目录概述源码解析xml 配置解析事务代理类的创建事务拦截器的实现切面实现事务处理实现总结:资料概述事务处理是一个重要并且涉及范围很广的领域,涉及到并发和数据一致性方面的问题。作为应用平台的 Spring 具有在多种环境中配置和使用事务处理的能力,也就是说通过使用 Spring 的事务处理,可以把事务处理的工作统一起来,为事务处理提供统一支持。由于这方面的内容比较多,这里只讲事务处理中最为...原创 2018-11-05 23:14:54 · 3667 阅读 · 2 评论