albon arith

一些总结,欢迎交流

排序:
默认
按更新时间
按访问量

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

基于系统负载的动态限流组件 dynamic-limiter 背景 动态限流原理 测试效果 总结 基于系统负载的动态限流组件 dynamic-limiter 最早发在了:Qunar 技术沙龙 背景 一个系统的处理能力是有限的,当请求量超过处理能力时,通常会引起排队,造成响应时...

2018-01-05 22:59:50

阅读数:330

评论数:0

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

系统设计关于高可用系统的一些技术方案 高可用方法论 扩展 隔离 解耦 限流 分类 漏桶算法 令牌桶算法 滑动窗口计数法 动态限流 降级 熔断 发布相关 模块级自动化测试 灰度发布 回滚 其他 总结 参考资料 系统设计:关于高可用系统的一些技术方案 可靠的系统是业务稳定...

2017-09-17 09:22:32

阅读数:3384

评论数:0

消息队列 RocketMQ 设计学习

消息队列 RocketMQ 设计学习 概述 一个消息队列的实现需要关注哪些问题点?需要实现哪些功能? 先说最通用的功能,任何系统都需要考虑的功能: 系统结构 高可用 高性能 再说,MQ 特有的功能: Message Order At Least Once 消息查询 消息堆积能力 ...

2018-05-21 14:40:54

阅读数:68

评论数:0

分布式事务解决方案总结

分布式事务 两阶段提交协议 Paxos 算法 本地消息表 TCC 事务 Saga 模式 阿里的分布式事务处理方案 GTS 参考资料 分布式事务 两阶段提交协议 两阶段提交协议是用来处理分布式事务的。在分布式系统中,每个节点虽然可以知晓自己的操作时成功或者失败,却无法知道其...

2018-03-13 17:20:24

阅读数:113

评论数:0

DirectByteBuffer 里的堆外内存何时释放?

DirectByteBuffer 里的堆外内存何时释放? 简要答案 DirectByteBuffer 在分配堆外内存时: 先要通过 Bits.reserveMemory 来看看是否还有可用的内存,是否达到了堆外内存的上限?有的话,占坑。 通过 unsafe.allocateMemory...

2018-03-11 22:14:07

阅读数:54

评论数:0

利用 Java Agent 和 Instrument 技术录制线上流量

利用 Java Agent 和 Instrument 技术录制线上流量 Java Instrument 技术 遇到的难题 自动打包依赖 ClassNotFound 问题 HttpServletRequest body 只能 get 一次 利用 Java Agent 和 Inst...

2018-02-04 11:06:17

阅读数:133

评论数:0

性能优化案例(一):通过修改路由算法提升系统性能

性能优化案例一通过修改路由算法提升系统性能 概述 系统结构 优化方法 优化效果 性能优化案例(一):通过修改路由算法提升系统性能 概述 一般性能优化方法有两种:一是,从代码层面优化,提升某个方法的性能,从而提升单机性能;二是,从系统结构层面优化,通过减少无用功,来减少资源...

2018-02-03 19:25:30

阅读数:107

评论数:0

Netty 权威指南笔记(八):EventLoopGroup 和线程模型

一般情况下,I/O 复用机制需要事件分发器(event dispatcher)。 事件分发器的作用,即将那些读写事件源分发给各读写事件的处理者,就像送快递的在楼下喊: 谁谁谁的快递到了, 快来拿吧!开发人员在开始的时候需要在分发器那里注册感兴趣的事件,并提供相应的处理者(event handler...

2017-11-16 23:51:22

阅读数:175

评论数:0

Netty 权威指南笔记(七):ChannelPipeline 和 ChannelHandler 源码分析

Netty 的 ChannelPipeline 和 ChannelHandler 机制类似于 Servlet 和 Filter 过滤器,这类拦截器实际上是职责链模式的一种变形,主要是为了方便事件的拦截和用户业务逻辑的定制。 Servlet Filter 过滤器提供了一种面向对象的模块化机制,用来...

2017-11-07 14:14:33

阅读数:429

评论数:0

Netty 权威指南笔记(六):Channel 解读

JDK 的 NIO 类库中,提供了 SocketChannel 和 ServerSocketChannel 用于非阻塞 I/O 操作。类似于 NIO 的 Channel,Netty 提供了自己的 Channel 和其子类实现。

2017-11-06 09:48:35

阅读数:195

评论数:0

Netty 权威指南笔记(五):ByteBuf 源码解读

Java 本身提供了 ByteBuffer 类,为什么 Netty 还要搞一个 ByteBuf 类呢?因为 ByteBuffer 类有着许多缺点: 1. ByteBuffer 长度固定,无法动态伸缩。 2. ByteBuffer 只有一个位置指针 position,读写的时候需要手工调用 fli...

2017-11-03 14:04:10

阅读数:314

评论数:0

Netty 权威指南笔记(四):架构剖析

对 Netty 的架构进行剖析,学习其设计,便于在今后的架构设计中,设计出高性能、高可靠、可扩展的产品。

2017-11-02 12:54:04

阅读数:224

评论数:0

Netty 权威指南笔记(三):TCP 粘包和拆包

TCP 是一个“流”协议,所谓“流”就是没有界限的一串数据。大家可以想像河流里的水,期间并没有分界线。TCP 底层并不了解上层业务数据的具体含义,它会根据 TCP 缓冲区的实际情况进行包的划分。所以,在业务上,一个完整的包可能会被 TCP 拆分成多个包进行发送,也有可能把多个小的包,封装成一个大的...

2017-11-01 15:33:07

阅读数:165

评论数:0

《深入理解 Java 内存模型》笔记总结

简单的说,内存模型描述了某个程序的可能行为。内存模型包含一组规则,规定了一个线程的写操作何时对另一个线程可见。在程序行为满足这些规则的情况下,JVM 可以自由地进行代码转换,比如重排序和非必要的同步移除,代码转换往往是为了提升性能。

2017-10-31 10:29:14

阅读数:172

评论数:0

Netty 权威指南笔记(二):Java NIO 和 Netty 对比

Netty 是业界流行的 NIO 框架之一,它的健壮性、功能、性能、可定制性和可扩展性在同类框架中都说首屈一指的,也已经得到了成百上千商用项目的验证。Netty 框架都有什么优点呢? 1. API 使用简单,开发门槛低。 2. 功能强大,预置多种编解码功能,支持多种主流协议。 3. 定制能力强,...

2017-10-30 15:29:22

阅读数:1723

评论数:1

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

阅读数:423

评论数:0

Spring 框架学习(四):AOP

Aspect 是一种新的模块化机制,用来描述分散在对象、类或函数中的横切关注点。从关注点中分离出横切关注点是面向切面的程序设计的核心概念。分离关注点使得解决特定领域问题的代码从业务逻辑中独立出来,业务逻辑代码中不再含有针对特定领域问题代码的调用,业务领域同特定领域问题的关系通过切面来封装、维护,这...

2017-10-26 15:09:37

阅读数:167

评论数:0

Spring 框架学习(三):IoC 容器

IoC 容器的核心是依赖反转模式。许多应用都是由两个或多个类通过彼此的合作来实现业务逻辑的,这是的每个对象都需要与其合作对象的引用。如果这个获取过程要靠自己实现,那将导致代码高度耦合并且难以测试。在 Spring 中通过把依赖对象的获取交给 IoC 容器来完成,在解耦代码的同时提高了代码的可测试性。

2017-10-25 11:15:25

阅读数:213

评论数:0

Spring 框架学习(二):Spring 应用配置文件讲解

初学 Spring 的时候,只是照猫画虎,对于每一项配置的由来并不十分了解。这里,我们深入了解一下,这些配置都起到了什么作用?

2017-10-22 10:29:12

阅读数:156

评论数:0

Spring 框架学习(一):设计理念、整体架构

总结一下,Spring 的设计理念是: 1. IoC 控制反转:降低了对象之前的耦合关系,简化了应用的开发。 2. AOP 面向切面编程:方便以动态的、非侵入的方式,增强服务的功能。 3. 面向接口编程:作为平台,核心功能之外服务,都可以选择不同的技术实现。

2017-10-20 14:21:39

阅读数:408

评论数:0

Java 并发框架 Disruptor 源码分析:RingBuffer

Disruptor 是一个高性能的线程间通信库。它来自于 LMAX 对并发、性能和非阻塞算法的研究,如今交易系统基础架构的核心部分。这里,我们围绕其基础数据结构 RingBuffer,深入源码学习一下其实现。

2017-10-17 20:05:08

阅读数:307

评论数:0

Effective Java 读书笔记(十):序列化

谨慎地实现 Serializable 接口 考虑使用自定义的序列化形式 保护性地编写 readObject 方法 对于实例控制枚举类型优先于 readResolve 考虑用序列化代理代替序列化实例

2017-10-16 16:00:19

阅读数:139

评论数:0

Effective Java 读书笔记(六):方法

检查参数的有效性 必要时进行保护性拷贝 谨慎设计方法签名 慎用重载 慎用可变参数 返回零长度的数组和集合而不是 null 为所有导出的 API 元素编写文档注释

2017-10-15 19:53:47

阅读数:168

评论数:0

Effective Java 读书笔记(三):类和接口

使类和成员的可访问性最小化 在公有类中使用访问方法而非公有域 使可变性最小化 复合优先于继承 要么为继承而设计并提供文档说明要么禁止继承 接口优于抽象类 接口只用于定义类型 类层次优于标签类 用函数对象表示策略

2017-10-14 19:41:33

阅读数:242

评论数:1

Effective Java 读书笔记(四):泛型

请不要在新代码中使用原生态类型 消除编译时的非受检警告 列表 List 优先于数组 优先考虑泛型 优先考虑泛型方法 利用有限制通配符来提升 API 的灵活性 优先考虑类型安全的异构容器

2017-10-13 16:04:34

阅读数:141

评论数:0

Effective Java 读书笔记(七):通用程序设计

将局部变量的作用域最小化 for-each 循环优于传统的 for 循环 了解和使用类库 如果需要精确的答案请避免使用 float 和 double 基本类型优于装箱基本类型 如果其他类型更合适则尽量避免使用字符串 当心字符串连接的性能 通过接口引用对象 接口优先于反射机制 谨慎地使用本地方法 谨...

2017-10-12 20:04:01

阅读数:130

评论数:0

Effective Java 读书笔记(五):枚举和注解

用 enum 代替 int 常量 用实例域代替序数 用 EnumSet 代替位域 使用 EnumMap 代替序数索引 用接口模拟可伸缩的枚举 注解优先于命名模式 坚持使用 Override 注解 用标记接口定义类型

2017-10-10 20:17:16

阅读数:192

评论数:0

Effective Java 读书笔记(八):异常

只针对异常情况才使用异常 对于可恢复的情况使用受检异常对于编程错误使用运行时异常 避免不必要地使用受检异常 优先使用标准的异常 抛出与抽象相对应的异常 每个方法抛出的异常都要有文档 在细节消息中包含造成异常的信息 努力使失败保持原子性 不要忽略异常

2017-10-09 11:32:00

阅读数:164

评论数:0

Effective Java 读书笔记(九):并发

同步访问共享的可变数据 避免过度同步 使用线程池管理线程不要手动 new 线程 并发工具优先于 wait 和 notify 线程安全性的文档化 慎用延迟初始化 不要依赖于线程调度器 避免使用线程组 ThreadGroup

2017-10-01 16:32:23

阅读数:146

评论数:0

Effective Java 读书笔记(二):对于所有对象都通用的方法

Effective Java 读书笔记二对于所有对象都通用的方法 覆盖 equals 时要遵守的约定 覆盖 equals 的时候总是覆盖 hashCode 始终要覆盖 toString 谨慎覆盖 clone 考虑实现 Comparable 接口

2017-09-30 16:13:53

阅读数:192

评论数:0

Effective Java 读书笔记(一):创建和销毁对象

考虑用静态工厂方法代替构造器 构造器参数较多时考虑用 Builder 构建 用私有构造器或枚举类型强化 Singleton 属性 在私有构造器里抛异常来强化不可实例化的能力 避免创建不必要的对象 消除过期的引用 避免使用终结方法 finalize

2017-09-29 17:44:22

阅读数:257

评论数:0

Java 日志框架解析:设计模式、性能

在平常的系统开发中,日志起到了重要的作用,日志写得好对于线上问题追踪有着很大的帮助。一个好的日志框架,既要方便易用,也要有较好的性能,减少日志输出对系统内存、CPU 的影响。 研究一款开源项目,学到的不仅仅是这个项目本身,还会学到很多设计思想,可以利用到日常工作中。

2017-09-28 10:00:54

阅读数:1494

评论数:0

Java 进阶:异常影响性能吗?

Java 进阶:异常影响性能吗?曾经在给一个业务系统增加限流功能,使用的限流组件在流量超过阈值时,会直接抛异常,异常导致 CPU 占用率飙升。第一次遇到这样的情况,让我们不得不思考,异常怎么会对性能造成这么大的影响?下面我们写几个测试程序观察一下。

2017-09-24 10:31:26

阅读数:1314

评论数:0

Java 进阶:如何让线程主动让出 CPU

在 Java 中,有哪些方法可以让线程让出 CPU 呢?

2017-09-22 23:22:04

阅读数:1108

评论数:0

深入理解 Java 泛型:类型擦除、通配符、运行时参数类型获取

泛型的本质是参数化类型,相比于直接使用 Object 的好处是:编译期强类型检查、无需进行显式类型转换。这里介绍一些泛型的用法、特性,以及如何在运行时获取泛型参数类型信息。

2017-09-21 10:00:58

阅读数:587

评论数:0

Java 迭代器介绍

迭代器介绍迭代器模式迭代器模式是一个典型的设计模式,提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节。因为屏蔽了细节,可以针对不同实现的容器,提供一致的标准化的访问方法。

2017-09-18 14:46:01

阅读数:415

评论数:0

Java 注解:注解处理器获取泛型真实类型

注解 annotation 是 Java 中的一大特性,是插入代码中的元数据。注解的使用能够大大简化代码的编写,所以在很多框架中得到了使用,比如 spring、hibernate-validator。泛型的真实类型信息会在编译期间擦除,注解处理器正是运行在编译期间,能够用来获取泛型真实信息。

2017-09-17 16:30:31

阅读数:1143

评论数:0

降级熔断框架 Hystrix 源码解析:滑动窗口统计

一个滑动窗口统计主要分为两步: 1. bucket 统计,bucket 的大小决定了滑动窗口滚动时间间隔; 2. window 统计,window 的时长决定了包含的 bucket 的数目。 Hystrix 实现滑动窗口利用了 RxJava 这个响应式函数编程框架。

2017-09-14 11:25:09

阅读数:2225

评论数:0

Java 线程同步基础类 LockSupport 解析

LockSupport 类提供了基本的线程同步原语,是实现 AbstractQueuedSynchronizer 和 ReentrantLock 的基础。

2017-09-12 21:13:30

阅读数:294

评论数:0

Java 同步框架 AQS 深入分析

AQS 框架提供了先进先出的阻塞锁实现,在此基础上,提供了独占和共享等多种模式供使用方实现。除此之外,还提供了一个条件变量的实现。 锁是一种线程同步机制,用于保护对临界资源的访问。条件变量提供了一个“等待 - 唤醒”的机制,在阻塞队列里起到了生产者和消费者之间的通信的作用。

2017-09-12 09:14:33

阅读数:357

评论数:0

Java 同步原语 synchronized 剖析和锁优化

本文解析了 synchronized 的底层实现,介绍了 JVM 中优化锁的一些方法,以及实际编程中使用的一些锁优化方法。

2017-09-10 10:36:05

阅读数:475

评论数:0

日志压缩资源消耗优化: Linux CGroup 的使用

我们有一个系统,本身压力比较大,平常 CPU 占用率在 60% 左右。在整点之后的日志压缩时,CPU 占用率更是飙到来 80%,造成系统 Load 经常报警,烦不胜烦。 使用 top 命令查看后发现,gzip 压缩进程占用 CPU 资源过多,于是想到了利用 CGroup 来限制日志压缩进程的资...

2017-09-08 23:41:03

阅读数:438

评论数:0

深度剖析 JDK7 ConcurrentHashMap 中的知识点

看源码时候的一点儿总结:锁分离 Lock Stripping、Unsafe、自旋、顺序一致性 Sequential Consistency、权衡 Trade Offs。

2017-09-05 20:49:25

阅读数:248

评论数:0

性能优化概述

如何做性能优化 确定优化目标 定位性能瓶颈 制定优化方法 测试优化效果 性能优化目标是什么 吞吐量,越大越好 延时,越低越好 同样的资源下(前提),吞吐量越高越好,响应时间越低越好。通俗的讲就是:多快好省。 如何定位系统性能的瓶颈呢 资源分析 代码分析 资源分...

2017-09-04 10:53:10

阅读数:201

评论数:0

Hadoop Mapreduce Mapper和Reducer源码

Mapper public class Mapper { /** * The Context passed on to the {@link Mapper} implementations. */ public abstract class Context imple...

2014-01-08 10:20:05

阅读数:1558

评论数:0

叉积、线段相交判断、凸包

一、叉积 叉积的计算是线段方法的核心。对于向来p1和p2,叉积是由点(0,0)、p1、p2和p1+p2构成的平行四边形的有向面积。另一种与之等价但更有效的的叉积定义方式是将其看做矩阵行列式: p1×p2 = x1y2 - x2y1 = - p2×p1 若p1×p2为正,则相对于原...

2013-09-04 17:35:32

阅读数:6936

评论数:0

利用Java反射机制-访问Android隐藏API

通过类名获取类。 Class serviceManager = Class.forName("android.os.ServiceManager"); 获取方法 Method method = serviceManager.getMethod("getSer...

2013-07-26 21:18:21

阅读数:4438

评论数:0

Android:获取屏幕完整宽高,包含状态栏

WindowManager mWindowManager = (WindowManager) this .getSystemService(Context.WINDOW_SERVICE); Display mDisplay = mWindowManager.getDefaultDisp...

2013-05-13 21:24:31

阅读数:2937

评论数:0

Android NDK: 子线程中C调用Java

在底层c++生成的子线程中调用Java,需要JniEnv。而这个JniEnv的生成,需要用AttachCurrentThread方法。 1. 获取JVM,以及静态方法实例 static JavaVM* g_JavaVM = NULL; static jobject gIn...

2013-05-11 21:10:37

阅读数:3597

评论数:0

Ubuntu下安装Hadoop和配置Eclipse开发Hadoop

1. 安装hadoop 具体见:http://www.cnblogs.com/tippoint/archive/2012/10/23/2735532.html tips:不一定要新建hadoop用户,在当前用户下操作就行。 运行hadoop自带的wordcount例子: http://wenk...

2013-01-04 10:04:35

阅读数:2079

评论数:2

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