
Java
文章平均质量分 88
Java
卓修武
- 程序猿
- 健身
- 看书
展开
-
对组件、模块、子系统、系统、框架、架构 定义浅析
内容总结自 极客专栏模块与组件模块和组件的概念在实际工作中比较容易混淆,但是实际上只要认识到模块和组件都是系统的组成部分,只是从不同的角度拆分系统就容易理解了。 从逻辑的角度来拆分系统后,得到的单元就是“模块”,从物理的角度来拆分得到的单元就是“组件”。划分模块的主要目的是职责分离;划分组件的主要目的是单元复用。系统与子系统系统是由一群有关联的个体组成的,没有关联......转载 2018-05-11 19:57:26 · 17785 阅读 · 1 评论 -
RxJava-创建Observable操作符
RxJava-创建Observable操作符 Create: 最基本的创建Obserable的操作符,基本上所有的其他创建类型的操作符,内部都是通过调用这个方法创建Obsera>ble对象。 Defer 这个方法很有用,Defer操作符需要指定一个Obserable的工厂方法,然后它只会在有订阅者订阅它时才会创建Obserable,而且是为每个订阅者创建自己的Obserable原创 2016-04-03 16:19:08 · 2168 阅读 · 1 评论 -
RxJava-Scheduler
RxJava-Scheduler RxJava可以给Obserable操作符的链式过程中切换代码的线程功能,可以指定操作符(或者特定的Obserable)在特定的调度器(Scheduler)上执行。 RxJava有多种调度器类型可供择. Schedulers.computatoin() 一般用于计算任务,比如比如事件循环和回调处理。不要用来做IO操作,IO操作大部分的事件用于等待IO连接原创 2016-04-03 13:57:52 · 947 阅读 · 0 评论 -
RxJava-过滤操作符
RxJava-过滤操作符过滤操作符相对来说比较简单和易于理解,(建议在学习这些过滤操作符的时候,点进源码查看一下具体使用的过滤函数,因为Rx有很多平台的语言,可能为了与其他平台一致,所以有很多功能实际相同的函数,很多操作符内部调用了其他操作符,可以加深理解)filter( ) — 过滤数据takeLast( ) — 只发射最后的N项数据last( ) — 只发射最后的一项数据lastOrDe原创 2016-04-05 23:21:49 · 624 阅读 · 0 评论 -
RxJava-left
RxJava-Left lift 是Obserable对象的方法,参数类型是Operator,Operator是一个表示变化的接口,它的一个具体实现类是 OperatorMap Obserable对象通过调用lift方法,返回了一个新的Obserable对象。 public final <R> Observable<R> lift(final Operator<? extends R, ?原创 2016-03-29 23:40:21 · 732 阅读 · 0 评论 -
RxJava-变换操作
RxJava-变换操作 buffer: buffer操作符,将原有Observable发射的数据缓存起来,比如buffer(2),就每2个数据放进一个集合,然后发射这个集合出去。buffer方法有很多重载的方法。 FlatMap: 该操作符,使用一个指定的函数对原始Observable发射的每一项数据执行变换操作(lift),这个函数返回一个本身也发射数据的Observable,然后Fl原创 2016-04-03 19:17:36 · 496 阅读 · 0 评论 -
设计一个“高效”的字节码插桩框架
背景在做性能监控及项目优化的过程中,不可避免地需要使用字节码插桩的来实现一些需求。比如函数体前后插桩实现 函数耗时检测Activity、Fragment 相关生命周期函数插桩,实现UI活动耗时检测Thread、ThreadPoolExecutor 构造函数调用替换,实现线程相关性能检测移除 Log 类相关的函数调用,避免不必要的日志打印行为等等当重复的进行了一些项目“字节码插桩”的相关插件的开发后,我们考虑这方面重复性的工作是否可以做进一步地简化,因为重复地进行 “新建Plugin项目”、原创 2021-06-22 16:40:25 · 552 阅读 · 0 评论 -
由表及里深入Java泛型系统
由表及里深入Java泛型系统泛型的基本概念Java 泛型(generics)是 JDK 1.5 中引入的一个新特性,泛型提供了编译时类型安全检测机制,该机制允许程序在编译期检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。参数化类型的意义参数化类型的意义是将原来具体的类型参数化,类似方法中的变量参数,此时类型也可以定义成参数形式。比如JDK集合包的L...原创 2019-05-16 22:11:15 · 392 阅读 · 0 评论 -
浅析ServiceLoader
1.SPI的概念了解ServiceLoader,需要先了解 SPI(Service Provider Interface)SPI的简单来说就是在程序设计时将一个功能服务的接口与实现分离,在程序运行时通过JVM机制自动找到服务接口的实现类并创建,以达到解耦的目的,提高程序的可拓展性; 比如JDBC2.ServiceLoaderServiceLoader就是 Java平台提供的一个简单的 ...原创 2019-02-20 17:35:44 · 329 阅读 · 0 评论 -
Java ASM 技术简介
什么是ASMASM 是一个 Java 字节码操控框架。它能被用来动态生成类或者增强既有类的功能。ASM 可以直接产生二进制 class 文件,也可以在类被加载入 Java 虚拟机之前动态改变类行为。Java class 被存储在严格格式定义的 .class 文件里,这些类文件拥有足够的元数据来解析类中的所有元素:类名称、方法、属性以及 Java 字节码(指令)。ASM 从类文件中读入信息后,能够改变原创 2017-11-23 22:10:53 · 45337 阅读 · 7 评论 -
使用 Visual VM工具
如何打开 VisualVM 工具首先保证Java的环境变量已经配置好,则可在命令窗口执命令jvisualvm安装 VisualGC 插件Visual GC 插件主要是提供 JVM 实时的各分代内存情况的图标分析。安装步骤 Tools->Plugins-> 找到Visual GC 执行安装分析程序 插件安装好之后,在主界面可以看到本机目前正在执行的JAVA 应用程序 选中程序,比如我这边分析原创 2017-09-20 10:23:34 · 1509 阅读 · 0 评论 -
EffectiveJava-避免创建不必要的对象
这章讲的其实是 Java 语言的一些细节,比如重用不可变的对象 Stirng s = new String("hello");//每次都创建了一个新的对象,实际情况中,应该没人会这样写 Stirng s = "hello"; 每次都重用的一个对象重用已知不会被修改的对象 假设我们需要 检验一个人是否是出生在1946-1964年之间 public class Person{原创 2016-03-12 14:40:41 · 833 阅读 · 0 评论 -
用私有构造器或者枚举类型强化 Singleton属性
本章讲解的其实是 单例模式 的实现方式,单例模式一般的实现是有以下几种 私有化构造函数的形式 通过私有化构造函数,使客户端不能通过 new 关键字的形式来创建对象,同时我们需要提供静态方法来使得外部能够通过调用调用静态方法取得该类的唯一实例,其中这又分成了经常说的 饿汉式 和懒汉式的实现// 饿汉式,就是一口吃个饱,在类被加载器加载的时候 就创建了 这个实例 public class原创 2016-03-12 13:58:57 · 806 阅读 · 0 评论 -
Java解析XML 一.SAX 方式
Java中解析 XML有三种方式,SAX,Pull,DOm一:SAX解析:这是一种基于事件驱动的解析方式,它的工作方式是自动将时间推入注册的时间处理器进行处理, 不能控制事件处理器进行处理。SAX解析 需要一个解析器, 解析器的是通过调用java提供的静态工厂 SAXParserFatory获得。还需要一个时间处理器,在处理器中定义了解析过程中的各个事件, java原创 2015-08-12 10:42:45 · 581 阅读 · 0 评论 -
Java or Android 知识点书签
1.Java 4种引用的透彻理解Java引用原创 2015-08-17 13:28:20 · 403 阅读 · 0 评论 -
final、static、static final修饰的字段赋值的区别
static修饰的字段在类加载过程中的准备阶段被初始化为0或null等默认值,而后在初始化阶段(触发类构造器)才会被赋予代码中设定的值,如果没有设定值,那么它的值就为默认值。final修饰的字段在运行时被初始化(可以直接赋值,也可以在实例构造器中赋值),一旦赋值便不可更改;static final修饰的字段在Javac时生成ConstantValue属性,在类加载的准备阶段根据ConstantVal原创 2015-08-05 10:29:29 · 3765 阅读 · 1 评论 -
深入Java 类的初始化
如果对Java类的加载机制有了解的话,应该会指定,一个类( class文件)只会在 4种情况下被加载 1. 在虚拟机直接类的字节码时, 遇到 new getstatic putstatic invkesatatic 这4条指令时,如果累还没有进行初始化,那么就会触发初始化,这4条指令的使用场景是:new 关键字实例化对象, 读取或者设置一个类的静态字段 (这里不包括被stat转载 2015-08-05 13:22:11 · 602 阅读 · 0 评论 -
Java并发编程笔记
Java可重入内置锁, 如果一个子类重写父类 同步的方法, 那么在子类在调用 这个方法时为什么不会产生死锁呢? 可重入内置锁概念原创 2015-08-06 10:37:36 · 1072 阅读 · 0 评论 -
优秀博客站点集合
算法:白话经典算法原创 2015-08-04 11:37:17 · 600 阅读 · 0 评论 -
设计模式解析之代理模式
设计模式-代理模式代理模式的概念 代理模式(proxy pattern)是一种结构型的设计模式,代理模式在程序开发中的运用非常广泛。简单地描述代理模式就是:为其他对象(被代理对象)提供一种代理以控制对原有对象的操作。实际的行为是由被代理对象完成的。 代理模式可以分为两部分,静态代理 和 动态代理,它们的区别将在下面详细介绍。角色介绍: Suject: 抽象主题类 该类的主要职责是申明原创 2016-01-25 23:34:51 · 1886 阅读 · 0 评论 -
EffectiveJava-6 内存泄漏-清楚过期对象的引用
清楚过期的引用 Java虚拟机具有自动垃圾回收的功能,程序员不需要像 C/C++ 一样,手动释放内存,但是这并不意味着你不需要注意不再需要使用的对象的内存空间的释放问题。只要类是自己管理内存,程序员就应该警惕内存泄露问题考虑以下一端简单的栈实现的代码 public class Stack{ private Object[] elements; private原创 2016-03-15 23:11:21 · 660 阅读 · 0 评论 -
EffectiveJava-8所有类都通用的方法-equals()、hashCode()、toString()
对所有对象都通用的方法 本章主要讲述 Object 类的 equals()、hashCode()、toString()方法的意义和作用,在什么时候应该重写该方法,而什么时候不要这样做。在想重写该方法时 应该注意的事项什么时候不用覆盖 equls 方法类的每个实例本质上都是唯一的。 对于代表活动实体而不是值(value) 的类来说确实如此,比如TThread。Object提供的equls实现对于这原创 2016-03-18 00:33:25 · 608 阅读 · 0 评论 -
EffeciveJava-2 遇到多个参数时考虑使用构建器
遇到多个构造器参数时要考虑用构建器重叠构造器 这一章的内容很好理解,相信大家在写 Java 程序的时候也遇到过,使用一个 类 ,而这个类有多个重载的构造函数,当然一般开发的 API 设计的还是比较合理,不会有多余的参数,一些比较强大的框架 API 可选参数多的时候也会提供一个默认的实现。一句话:重叠构造器模式可行,但是当哟u许多参数的时候,客户端代码会很难编写,并且难以阅读,你需要很好的查看文档,原创 2016-03-07 23:07:17 · 962 阅读 · 0 评论 -
什么是类的反射?怎么使用类的反射?
一个对象的创建发生了什么? 首先 虚拟机会先去检查 这个类是否已经被载入到内存,这里的类被载入指的类加载器是否已经载入过类的字节码(类的加载只会发生一次),字节码也就是你编写的.java文件 经编译之后生成的 .class文件。 (Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在Class文件中,中间没有添加任何分隔符,这使得整个Class文件原创 2015-08-08 12:40:31 · 3217 阅读 · 0 评论