Earth Guardian

You are not LATE!You are not EARLY!


  • 首页

  • 标签

  • 分类

  • 归档

  • 搜索

RxJava

发表于 2017-11-24 | 分类于 OpenSourceLibary

介绍

ReactiveX

主要是响应式编程(Reactive Program),它集合了观察者模式,迭代器模式,函数式编程的优点,是一种面向集合数据流和变化传播的编程范式,是基于异步数据流概念的编程模式。数据流就像一条河:它可以被观测,被过滤,被操作,或者为新的消费者与另外一条流合并为一条新的流
ReactiveX is a combination of the best ideas from the Observer pattern, the Iterator pattern, and functional programming
It is sometimes called “functional reactive programming” but this is a misnomer. ReactiveX may be functional, and it may be reactive, but “functional reactive programming” is a different animal. One main point of difference is that functional reactive programming operates on values that change continuously over time, while ReactiveX operates on discrete values that are emitted over time.

阅读全文 »

Dagger2

发表于 2017-11-24 | 分类于 OpenSourceLibary

基本概念

Dagger2 依赖注入框架,用来解耦类关系。特别是 MVP 分层结构中,方便解耦和分层测试
A fast dependency injector for Android and Java.
仓库地址:https://github.com/google/dagger

阅读全文 »

设计模式概览

发表于 2017-11-20 | 分类于 DesignPatterns

23 种设计模式

创建型模式 Creational Patterns

  • 工厂方法模式 Factory Method
    定义一个创建对象的接口,让子类决定实例化哪一个类。工厂方法将类的实例化延迟到子类
  • 抽象工厂模式 Abstract Factory
    提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。主要用来创建产品集合
  • 建造者模式 Builder
    将一个复杂对象的构建与它的表示分离,使得同样的构建可以创建不同的表示。隐藏了产品是如何组装的
  • 原型模式 Prototype
    用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新对象
  • 单例模式 Singleton
    保证一个类只产生唯一的一个实例
阅读全文 »

String、StringBuffer 和 StringBuilder 的区别

发表于 2017-11-20 | 分类于 Java

String

字符串常量,字符串内容和长度都是不可变的。定义如下:

1
2
3
4
5
6
7
8
9
10
11
12
/**
* ...
* Strings are constant; their values cannot be changed after they
* are created. String buffers support mutable strings.
* ...
*/
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final char value[];
...
}

String 的操作都是在堆内存中重新申请一块内存区并赋值,最终返回该存储区首地址给引用变量。所以如果频繁修改 String 会产生堆内存垃圾,直到 java 触发内存管理机制才能释放。所以在形参传递时, String 类似值传递。

StringBuffer

字符串变量,同时也是线程安全的(Synchronized)。

StringBuilder

字符串变量,但不是线程安全的。

使用策略

  • String :操作少量的数据
  • StringBuilder:单线程操作大量数据
  • StringBuffer :多线程操作大量数据

不要使用 String 类进行频繁的字符串拼接或插入删除,因为那样的性能较差,应该使用 StringBuffer 或 StringBuilder 类,这在 Java 的优化上是一条比较重要的原则。执行速度上:String < StringBuffer < Stringbuilder。

Java hashCode 和 eqauls

发表于 2017-11-20 | 分类于 Java

Object 的默认定义

也就是 Java 中所有的对象都会包含这两个方法:

1
2
3
4
public boolean equals(Object obj) {
return (this == obj);
}
public int hashCode() {...}
阅读全文 »

JAVA 集合类概览

发表于 2017-11-20 | 分类于 Java

Java 集合(也称为容器),是将多个元素组合成一个单元的对象。分为两大类: Collection 和 Map,常用集合为 List 、Set、Map;本文源码分析基于 JDK 1.8 。

阅读全文 »

Java Executor 框架

发表于 2017-11-17 | 分类于 Java

背景

大多数并发应用程序都是围绕“任务执行(Task Execution)”来构造的:任务通常是些抽象且离散的工作单元。任务执行时应该选择清晰的任务边界以及明确的任务执行策略。执行策略有如下几种:

  • 串行执行
    在多任务中执行性能太差,只能一个个顺序处理,无法提高吞吐率或快速响应性
  • 显示创建线程
    new Thread(task).start():显示创建。但是大量创建会有如下问题:线程生命周期开销非常高;资源消耗:尤其是内存,当可运行线程数量多于处理器数量时,会出现大量闲置进程,会占用很多内存,线程竞争 CPU 资源时也会产生性能消耗;稳定性;
  • 使用并发框架
    如:Executor 框架
阅读全文 »

JVM:深入理解Java虚拟机--读书笔记

发表于 2017-11-06 | 分类于 Java

锁

在Java程序运行时环境中,JVM需要对两类线程共享的数据进行协调:
1)保存在堆中的实例变量
2)保存在方法区中的类变量

这两类数据是被所有线程共享的。

死锁

产生死锁 4 个必要条件

  • 互斥条件
    一个资源每次只能被一个进程使用
  • 保持和等待条件
    一个进程因请求资源而阻塞时,对已获得的资源保持不放
  • 不剥夺条件
    进程已获得的资源,在未使用完之前,不能强行剥夺
  • 环路等待条件
    若干进程之间形成一种头尾相接的循环等待资源关系
阅读全文 »

Java 多线程并发

发表于 2017-11-02 | 分类于 Java

线程常用 API

  • thread.start() :启动
  • thread.isAlive()
    判断当前线程是否处于活动状态
  • thread.sleep()
    在指定毫秒数内让当前正在执行的线程休眠
  • thread.getId():获取线程 ID
  • yield
    放弃当前的 CPU 资源,但放弃多长时间不确定
  • thread.interrupt()
    中断,仅仅是在该线程中打了一个停止的标记,并不是真的停止线程
  • thread.setPriority()
    设置优先级,并不会马上优先执行。线程优先级的代码影响较小,但是优先级高的确实会获取更多的 CPU 资源和执行速度
  • suspend()/resume
    暂停和恢复, 作废
  • stop
    停止线程,作废。暴力停止进程,会导致内存无法清理干净,锁的释放也会导致数据不一致
  • thread.wait()
    释放当前锁并等待,执行前必须确保已经获取该对象锁
  • thread.notify()/.notifyAll()
    也必须在同步代码块呢,通知该对象处于锁等待的线程/通知所有。注意:一次 notify 只能被一个处于 wait 的线程接受,即使该对象锁一直空闲,其他 wait 线程也收不到通知,除非使用 notifyAll。notify 后代码块并不会马上释放锁,而是需要将这个 synchronized 代码块执行完毕才会释放锁
  • thread.join
    等待指定线程对象销毁,但是当前线程会进入阻塞状态
  • Thread.currentThread()
    获得当前线程的引用
阅读全文 »

Java 内存模型

发表于 2017-10-25 | 分类于 Java

Java 内存模型(Java Memory Model, JMM),本文主要参考 JSR -133 内存模型

基本概念

共享变量

  • 堆内存:包含类实例、静态字段和数组元素
  • 方法区:类字段(全局变量)
    堆内存中的变量和方法区的全局变量,在线程之间共享,这些统称为共享变量。其他如虚拟机栈帧(局部变量表,方法返回值)等都是线程私有的

抽象示意图

内存模型决定一个线程对共享变量的写入何时对另一个线程可见,从抽象的角度来看:线程之间的共享变量存储在主内存中,每个线程都有一个私有的工作内存,工作内存中存储了该线程以读/写共享变量的副本。这里仅仅将 JMM 作为一个抽象概念,并不和物理实际内存、高速缓存、寄存器等做一一对应。内存模型抽象示意图:

0004-Java-memory-model.jpg

阅读全文 »
1…111213
redspider110

redspider110

地球卫士

124 日志
10 分类
54 标签
Creative Commons
© 2017 — 2019 redspider110
由 Hexo 强力驱动
|
主题 — NexT.Pisces v5.1.3
0%