自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

albon arith

一些总结,欢迎交流

  • 博客(243)
  • 资源 (13)
  • 收藏
  • 关注

原创 一个简洁安全的配置解析框架

背景设计与实现注解标记关键信息自定义配置解析规则支持 Bean ValidationConfigParser 解析器类型自动匹配安全保障扩展功能总结背景为了解决配置解析中的一些痛点,开发了一个配置解析框架。我们先说一下,老的的配置解析方式有哪些问题?老的配置解析代码示例,如下所示: private List<String> pe...

2018-07-08 22:25:37 1426

原创 基于系统负载的动态限流组件 dynamic-limiter

基于系统负载的动态限流组件 dynamic-limiter背景动态限流原理测试效果总结基于系统负载的动态限流组件 dynamic-limiter最早发在了:Qunar 技术沙龙背景一个系统的处理能力是有限的,当请求量超过处理能力时,通常会引起排队,造成响应时间迅速提升。如果对服务占用的资源量没有约束,还可能因为系统资源占用过多而宕机。因此,为了保证系统在遭遇

2018-01-05 22:59:50 4561 5

原创 系统设计:关于高可用系统的一些技术方案

系统设计关于高可用系统的一些技术方案高可用方法论扩展隔离解耦限流分类漏桶算法令牌桶算法滑动窗口计数法动态限流降级熔断发布相关模块级自动化测试灰度发布 回滚其他总结参考资料系统设计:关于高可用系统的一些技术方案可靠的系统是业务稳定、快速发展的基石。那么,如何做到系统高可靠、高可用呢?下面首先讲一下高可用需要面临的常见问题,再从技术

2017-09-17 09:22:32 29254 2

原创 六边形架构

六边形架构又称“端口和适配器模式”,是 Alistair Cockburn 提出的一种具有对称性特征的架构风格。在这种架构中,系统通过适配器的方式与外部交互,将应用服务与领域服务封装在系统内部。

2022-05-03 11:10:59 1352

原创 架构设计方法 - 扩展性

什么是软件架构?软件架构这项工作的实质就是规划如何将系统切分成组件,并安排好组件之间的排列关系,以及组件之间互相通信的方式。软件架构设计的目标是支撑软件系统的全生命周期,设计良好的架构可以让系统便于理解、易于修改、方便维护,并且能轻松部署。软件架构的终极目标就是最大化程序员的生产力,同时最小化系统的总运营成本。方法总结本文主要说下解决扩展性的方法。SOLID 设计原则:单一职责、依赖反转、开闭、里式替换、接口隔离再往上是更大组件粒度的设计原则:复用/发布等同原则、共同闭包原则、共同复用原

2022-04-10 17:23:22 747

原创 Kerberos 认证协议

Kerberos 认证协议Kerberos 认证协议是基于对称密钥的认证协议,主要组成部分如下图所示:KDC:Kerberos Distribution Center,作为 Client、Server 共同信任的第三方,起着重要的协调作用。包含 Authentication Server 和 Ticket Granting Server。AS:Authentication Server,认证 Client、Server 为其颁发 与 TGS 交互的 Session Key。TGS:Ticket G

2020-08-01 20:37:07 700

原创 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 2908 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 3548 2

原创 PKI 公钥基础设施原理与应用

文章目录PKI 是什么PKI 详细介绍PKI 的组成核心算法CA 机构数字证书证书撤销机制应用:访问控制参考资料PKI 是什么Public Key Infrastructure(PKI),中文叫做公钥基础设施,可以理解为利用公钥技术为网络应用提供加密和数字签名等密码服务以及必需的密钥和证书管理体系。它是一个提供安全服务的基础设施,PKI 技术是信息安全技术的核心,同时也是电子商务的关键和基础技...

2019-12-21 19:56:08 6342

原创 Nginx 原理和架构

Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。Nginx 的整体架构Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...

2019-11-09 17:13:28 73285 41

原创 Kafka 原理和架构解析

Kafka 是由 LinkedIn 开发的一个分布式的消息系统,使用 Scala 编写,它以可水平扩展和高吞吐率而被广泛使用。Kafka 是一种分布式的,基于发布 / 订阅的消息系统。主要设计目标如下:以时间复杂度为 O(1) 的方式提供消息持久化能力,即使对 TB 级以上数据也能保证常数时间复杂度的访问性能。高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒 100K 条以上消息的传...

2019-11-03 11:45:50 3613 2

翻译 Netty 与线程绑核

如果你在开发低延迟的 Netty 应用程序,那么你可能了解过线程亲和性(thread affinity)这一概念。线程亲和性是指一个线程可以被强制在某一特定的 CPU 核和 CPU 核组上运行。这样你就可以在操作系统调度过程中消除线程迁移,提升性能。幸运的是,目前就有一个名为 Java-Thread-Affinity 的 Java 库,可以轻松地与 Netty 应用集成。首先,需要添加下面的依赖...

2019-10-26 10:18:21 2672

原创 Netty 的组件和设计

Netty 基于 Java NIO 的异步的和事件驱动的实现,保证了高负载下应用程序性能的最大化和可伸缩性。Netty 也包含了一组设计模式,将应用程序逻辑从网络层解耦, 简化了开发过程,同时也最大限度地提高了可测试性、模块化以及代码的可重用性。事件驱动模型通常,我们设计一个事件处理模型的程序有两种思路:轮询方式:线程不断轮询访问相关事件发生源有没有发生事件,有发生事件就调用事件处理逻辑。...

2019-10-26 09:56:34 1527

原创 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 4637 3

原创 关于 HTTP 长连接

使用长连接能够减少建立销毁连接的消耗,三次握手、四次挥手对性能影响是很大的。一般 RPC 如 Dubbo 默认都是长连接的,HTTP 1.1 之上也可以支持长连接了,HTTP 2.0 也支持了单一长连接的多路复用。一般 HTTP 服务前面都会挂 nginx 做负载均衡,那么长连接的设置也分为从客户端到 nginx、从 nginx 到服务端两部分。如果使用 Java 的 apache HTTPC...

2019-09-15 23:58:31 2673

原创 安全传输与身份认证

什么是 TLS 安全传输呢?传输层安全性协议(英语:Transport Layer Security,缩写作TLS),及其前身安全套接层(Secure Sockets Layer,缩写作SSL)是一种安全协议,目的是为互联网通信提供安全及数据完整性保障。TLS 在传输数据之前有一个握手阶段,利用密钥交换算法 RSA 和 Diffie-Hellman 来交换数据密钥,然后在传输数据时就可以使用该...

2019-09-08 20:50:34 1603

原创 领域驱动设计概述

领域驱动设计(Domain Driven Design,DDD)是由 Eric Evans 最早提出的综合软件系统分析和设计的面向对象建模方法,如今已经发展成为了一种针对大型复杂系统的领域建模与分析方法。它完全改变了传统软件开发工程师针对数据库进行的建模方法,从而将要解决的业务概念和业务规则转换为软件系统中的类型以及类型的属性与行为,通过合理运用面向对象的封装、继承和多态等设计要素,降低或隐藏整个...

2019-08-03 11:10:36 1260

原创 CQRS 架构

CQRS 是一个读写分离的架构思想,全称是:Command Query Responsibility Segregation,即命令查询职责分离,表示在架构层面,将一个系统分为写入(命令)和查询两部分。一个命令表示一种意图,表示命令系统做什么修改,命令的执行结果通常不需要返回;一个查询表示向系统查询数据并返回。读写两边可以用不同的架构实现,方便实现 CQ 两端的分别优化。CQRS 架构里通常读...

2019-07-27 16:37:25 2788

原创 MVC 模型

MVC 是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。模型 Model 是应用程序的核心,包含了数据和处理数...

2019-07-27 11:32:40 1114

原创 Java 性能调优总结

这里总结一下,Java 性能调优的方法:代码层面String 使用优化循环拼接字符串显式使用 StringBuilderJDK 从 6 到 7、8 到 9 对 String 是一直在优化的正则表达式少用捕获组贪婪模式会带来回溯,多用独占模式和懒惰模式ArrayList 和 LinkedList使用 ArrayList 时尽量给定合适的初始化容量在头部插入删除元...

2019-07-21 17:27:09 794

原创 分布式链路跟踪技术(五):跨线程传输和上下文传播

在分布式链路跟踪系统中,同一条请求处理链路要用一个全局唯一的 traceId 来标识,那就需要把 traceId 传输到该请求涉及的各个系统中。Trace 信息要在系统之间传输时,是通过各种 RPC 中间件里埋点,把 Trace 信息放在 HTTP Header、RPC Context 里进行传输的。实际中,同一个系统内部业务处理出现多线程操作时,如果不做显式处理,也容易丢失 Trace 信息。...

2019-07-21 16:59:55 3472

原创 分布式链路跟踪技术(四):链路拓扑

在“分布式链路跟踪系统(一):Dapper 介绍”里提到过链路跟踪系统要解决的难题之一是“链路梳理难:需求迭代很快,系统之间调用关系变化频繁,靠人工很难梳理清楚系统链路拓扑”。讲拓扑计算之前,先看一下分布式链路跟踪的数据模型,可以参考文章 OpenTracing 数据模型。一条 Trace(调用链)可以被认为是一个由多个 Span 组成的有向无环图,比如下面的 Trace 就是由 6 个 Spa...

2019-07-13 13:01:54 2998

原创 【笔记】从 Paxos 到 Zookeeper:第七章 Zookeeper 技术内幕之服务端

title: 从 Paxos 到 Zookeeper:第七章 Zookeeper 技术内幕之服务端notebook: Javatags:服务端启动单机版启动大致可以分为如下步骤:配置文件解析初始化数据管理器初始化网络IO管理器数据恢复对外服务核心类介绍:QuorumPeerMain:启动入口类。DataDirCleanuoManager:历史文件清理器,包括事务日...

2019-07-07 11:06:08 1010

原创 分布式链路跟踪技术(三):自定义 Annotation

在文章“分布式链路跟踪系统(一):Dapper 介绍”里提到过 Annotation,Annotation 里除了可以记录链路的基本信息(耗时、应用名、方法名),还可以用来记录一些业务自定义的扩展信息。扩展信息有两类:纯文本,记录在链路数据里,方便查看。key-value 数据,实现多维度查询,比如 key 是订单号 orderNo 时,可以通过 orderNo=xxx 找到和该订单相关的所...

2019-06-29 16:55:01 866

原创 分布式链路跟踪系统(二):基本的系统架构

在上一篇文章“分布式链路跟踪系统(一):Dapper 介绍”里讲了分布式链路跟踪系统的主要功能、实现原理,这一节讲一下基本的系统架构设计。分布式链路跟踪系统架构主要有三个部分:数据收集、分析处理、查询展示,如下图所示:之前讲过 Trace 数据的埋点主要依赖通用的中间件,埋点记录的数据如何收集呢?有两种方式:Trace SDK 直接上报、写到日志文件再通过 Agent 收集上报。直接上报缺点是...

2019-06-29 14:08:28 1166

原创 分布式链路跟踪系统(一):Dapper 介绍

文章目录概述基本原理Annotation植入采样率资料概述随着分布式系统和微服务的出现,一次用户请求可能会经过多个系统,不同服务之间的交互非常复杂,任何一个系统出错都可能影响整个请求的处理结果。以往的监控系统往往只能知道单个系统的健康状况、一次请求的成功失败,无法快速定位失败的根本原因。除此之外,复杂的分布式系统也面临这下面这些问题:性能分析难:一个服务依赖很多服务,被依赖的服务也依赖了其...

2019-06-23 16:16:57 3073 1

原创 Java 随机数生成器 Random & SecureRandom 原理分析

文章目录java.util.Randomjava.Security.SecureRandom/dev/random 与 /dev/urandom资料Java 里提供了一些用于生成随机数的工具类,这里分析一下其实现原理,以及他们之间的区别、使用场景。java.util.RandomRandom 是比较常用的随机数生成类,它的基本信息在类的注释里都写到了,下面是 JDK8 里该类的注释:/**...

2019-06-22 21:04:27 36142 2

原创 Java 中的 SafePoint

SafePoint 介绍什么是 SafePoint?SafePoint 是 Java 代码中的一个线程可能暂停执行的位置。SafePoint 保存了在其他位置没有的一些运行时信息。SafePoint 保存了线程上下文中的任何东西,包括对象,指向对象或非对象的内部指针。在 JVM 处于 SafePoint 时,可以做什么呢?Garbage collection pausesCode de...

2019-06-15 22:26:04 2263

原创 HTTP 协议对比

HTTP 协议,即超文本传输协议(Hypertext transfer protocol)。是一种详细规定了浏览器和万维网(WWW = World Wide Web)服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。比较常用的 HTTP 协议版本有 1.0、1.1、2.0,HTTP1.0 最早在网页中使用是在 1996 年,那个时候只是使用一些较为简单的网页上和网络请求上,而 H...

2019-06-02 23:36:29 1005

原创 【笔记】从 Paxos 到 Zookeeper:第七章 Zookeeper 技术内幕之客户端

文章目录系统模型数据模型节点特性版本-保证分布式数据原子性操作Watcher-数据变更通知ACL-保障数据安全序列化与协议序列化通信协议客户端一次会话的创建过程初始化阶段会话创建阶段响应处理阶段服务器地址列表ClientCnxn:网络 I/O会话系统模型这一节首先从数据模型、节点特性、版本、Watcher 和 ACL 五方面来讲述 Zookeeper 的系统模型。数据模型ZooKeeper...

2019-06-02 09:26:02 847

原创 面向对象设计的 SOLID 原则

文章目录依赖倒置原则接口隔离单一职责开闭原则里氏替换原则迪米特法则资料依赖倒置原则高级模块不应当依赖于低级模块。它们都应当依赖于抽象。抽象不应当依赖于实现,实现应当依赖于抽象。依赖倒置原则存在的真正意义是指,我们需要将一些对象解耦,它们的耦合关系需要达到当一个对象依赖的对象作出改变时,对象本身不需要更改任何代码。这样的架构可以实现一种松耦合的状态的系统,因为系统中所有的组件,彼此之间...

2019-05-26 12:01:30 840

原创 【笔记】从 Paxos 到 Zookeeper:第 5 章 使用 Zookeeper

文章目录部署和运行客户端脚本原生 Java API开源客户端ZkClientCurator基础 API监听功能leader 选举分布式 Barrier资料部署和运行zk 有三种模式:单机模式、集群模式、伪集群模式,单机模式就是只部署一台服务器,集群模式是在多台服务器上部署多个 zk 进程,伪集群模式是在一台服务器上部署多个 zk 进程。zk 不同模式的配置都是差不多的,配置也非常简单,只需要...

2019-05-25 11:15:03 821

原创 【笔记】自动内存管理的艺术:堆内存的划分

文章目录为何要进行分区如何分区何时进行分区参考资料为何要进行分区之前几章讲解垃圾回收时,都假定:所有对象由相同的垃圾回收算法管理,并且所有垃圾都将在同一时间得到回收。然而如果我们对不同的对象加以区别对待的话,在回收处理的性能上将得到相当大的好处。最广为人知的例子就是所谓“分代回收算法”,该算法将对象按不同的年龄进行分割,并优先回收更年轻的对象。如何分区分区原则详细描述案例...

2019-04-16 19:28:00 750

原创 【笔记】自动内存管理的艺术:引用计数

文章目录概述引用计数算法的优缺点提升效率延迟引用计数合并引用计数环状引用计数受限域引用计数总结概述之前介绍的几种垃圾回收算法都是间接式的,他们都需要从已知的根集合出发对存活对象图进行遍历,才能确定所有的存活对象。本章将介绍最后一种基本回收算法:引用计数。在引用计数算法中,对象的存活性可以通过引用关系的创建或删除直接判定,无须像追踪式垃圾回收器那样先通过堆遍历找出所有存活对象,然后再反向确定出未...

2019-04-13 14:58:38 1284

原创 【笔记】自动内存管理的艺术 引言&标记清扫回收器

文章目录引言概述自动动态内存管理垃圾回收算法标记-清扫回收算法概述标记-清扫算法三色抽象位图标记懒惰清扫标记过程中的高速缓存不命中问题需要考虑的问题引言概述托管语言以及托管运行时系统不仅能够提升程序的安全性,而且可以通过对操作系统和硬件架构的抽象来提升灵活性,因而受到越来越多开发者的青睐。大部分现代编程语言都使用动态内存分配,即允许进程在运行时分配或释放无法在编译期确定大小的对象,而且对象...

2019-03-31 22:07:06 946

原创 【笔记】深入理解 Java 虚拟机:晚期(运行期)优化

文章目录概述Hotspot 虚拟机内的即时编译器解释器与编译器编译对象与触发条件方法调用计数器回边计数器编译过程Client CompilerServer Compiler编译优化技术优化技术概览公共子表达式消除数组边界检查消除方法内联逃逸分析概述在部分商用虚拟机(Sun Hotspot、IBM J9)中,Java 程序最初是通过解释器解释执行的,当虚拟机发现有个方法或代码块运行特别频繁时,就...

2019-03-14 12:02:47 6662 1

原创 【笔记】深入理解 Java 虚拟机:早期(编译期)优化

2019-02-19 12:03:50 860

原创 【笔记】深入理解 Java 虚拟机:虚拟机字节码执行引擎

2019-02-01 00:02:31 1429

原创 【笔记】深入理解 Java 虚拟机:类文件结构

概述代码编译的结果从本地机器码编程字节码,是存储格式发展的一小步,却是编程语言发展的一大步。Java 在诞生之初,曾经有一个著名的口号“一次编译,到处运行”,这句话充分表达了软件开发人员对冲破平台界限的渴求。各种不同平台的虚拟机都统一使用的存储格式 —— 字节码,是构成平台无关性的基石。虚拟机的另外一种特性是语言无关性,目前已经出现了一大批在 Java 虚拟机之上运行的语言,比如 Scala、...

2019-01-19 10:46:47 862

原创 【笔记】Spring 事务原理分析和源码剖析

文章目录概述源码解析xml 配置解析事务代理类的创建事务拦截器的实现切面实现事务处理实现总结:资料概述事务处理是一个重要并且涉及范围很广的领域,涉及到并发和数据一致性方面的问题。作为应用平台的 Spring 具有在多种环境中配置和使用事务处理的能力,也就是说通过使用 Spring 的事务处理,可以把事务处理的工作统一起来,为事务处理提供统一支持。由于这方面的内容比较多,这里只讲事务处理中最为...

2018-11-05 23:14:54 3543 2

Virtual Machines Versatile Platforms for Systems and Processes

《Virtual Machines: Versatile Platforms for Systems and Processes》,帮助您了解“虚拟机”一词到底指代什么,有什么不同类型,大概有哪些实现方法,等等。读完这本书有助获得一个清晰的大局观。

2017-10-13

修改代码的艺术 中文版

本书是继《重构》和《重构与模式》之后探讨修改代码技术的又一里程碑式的著作, 而且从涵盖面和深度上都超过了前两部经典。 书中不仅讲述面向对象语言(Java、C#和C++)代码,也有专章讨论C这样的过程式语言。 作者将理解、测试和修改代码的原理、技术和最新工具(自动化重构工具、单元测试框架、仿对象、集成测试框架等), 与解依赖技术和大量开发和设计优秀代码的原则、最佳实践相结合,许多内容非常深入,而且常常发前人所未发。 书中处处体现出作者独到的洞察力,以及多年开发和指导软件项目所积累的丰富经验和深厚功力。 通过这部集大成之作,你不仅能掌握最顶尖的修改代码技术,还可以大大提高对代码和软件开发的领悟力。

2017-09-23

Netty5.0 架构剖析和源码解读

Netty5.0 架构剖析和源码解读,Java 网络编程必读。 Netty5.0 架构剖析和源码解读,Java 网络编程必读。 Netty5.0 架构剖析和源码解读,Java 网络编程必读。

2017-09-18

matlab 7.0 在数字信号处理中的应用

matlab 7_0 在数字信号处理中的应用 matlab 7_0 在数字信号处理中的应用 matlab 7_0 在数字信号处理中的应用

2010-04-03

Linux Command Directory

很好很强大 Linux Command Directory Linux Command Directory Linux Command Directory 英文的,英文的,英文的,英文的,英文的,

2009-10-28

Win32help.exe

您需要使用 WinHlp32.exe 程序显示文件扩展名为“.hlp”的 32 位帮助文件。 要在 Windows Vista 上查看 .hlp 文件,需要安装该应用程序。

2009-10-16

新编windows32 api参考大全

作为Microsoft 32位平台的应用程序编程接口,Win32 API是从事Windows应用程序开发所必备的。本书首先对Win32 API函数做完整的概述;然后收录五大类函数:窗口管理、图形设备接口、系统服务、国际特性以及网络服务;在附录部分,讲解如何在Visual Basic和Delphi中对其调用。 本书是从事Windows应用程序开发的软件工程师的必备参考手册。

2009-10-16

Standard C Library c++ STL

包括 General C/C++ Standard C Library C++ Standard Template Library 英文版

2009-09-26

GNU.C++.for.Linux

GNU.C++.for.Linux GNU.C++.for.Linux GNU.C++.for.Linux GNU.C++.for.Linux

2009-09-02

Linux操作系统下C语言编程入门

Linux操作系统下C语言编程入门 Linux操作系统下C语言编程入门 Linux操作系统下C语言编程入门

2009-08-15

Python核心编程第二版中文版

Python核心编程第二版中文版 相当不错的好书阿!!!

2009-08-15

WINDOWS核心编程中文版

WINDOWS核心编程中文版 经典书籍,中文版

2009-04-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除