归档: 2017/10

0

J.U.C中的并发工具类

在Java的J.U.C包中提供了几个并发编程中非常有用工具类, 例如: Semaphore, CountDownLatch和CyclicBarrier. 这次准备来介绍这三个工具类. Semaphore Semaphore中文意思为: 信号量. 它主要用来维护一组有限的资源. 比如数据库连接, Socket连接. 信号量的使用方式很简单, 在构造函数中, 传入你需要维护的有限资源的数量, 每次

0

ReentrantLock和ReentrantReadWriteLock详解

ReentrantLock和ReentrantReadWriteLock是Java并发包中提供的锁, 他们都属于可重入锁.但是ReentrantLock是一种悲观锁, 它总是假设竞争条件总是会发生, 所以它同一时刻只能有一个线程获得锁, 而ReentrantReadWriteLock是属于乐观锁, 它假设竞争条件并不会经常发生, 所以同一时刻能让多个线程执行. 他们的一个共同点是: 都支持公平和

0

AbstractQueuedSynchronizer中的ConditionObject剖析

AbstractQueuedSynchronizer中的ConditionObject剖析 在多线程环境中, 有时候, 一个线程的执行是需要等待一个条件发生后才能执行的. 在经典的生产者和消费者模式中, 如果缓冲区满后, 生产者是不能向缓冲区投放item的, 它需要等待一个条件: 缓冲区不为满的状态. 同理, 如果缓冲区为空时, 消费者是不能消费item的, 它需要等待一个条件: 缓冲区不为空.

0

AbstractQueuedSynchronizer剖析

AbstractQueuedSynchronizer剖析在介绍AbstractQueuedSynchronizer(下面称AQS)前, 我们先来看看一个不安全的锁, 然后引出构建安全锁需要处理哪些情况. 123456789101112131415161718typedef struct lock_t { int flag;} lock_t;void init(lock_

0

深入理解Java集合框架-WeakHashMap, IdentityHashMap 和 HashTable

WeakHashMap WeakHashMap总体实现和HashMap差不多, 不同的时, WeakHashMap中的Key是弱引用类型, WeakHashMap内部的Key是会被自动回收的. 另外需要关注的是, WeakHashMap并没有向HashMap那样, 在1.8做了优化. 弱引用Key 123456789101112131415161718192021222324252627282

0

图解HTTP-返回结果的状态码-笔记

状态码类别:类别 原因短语1XX Informational(信息性状态码) 接收的请求正在处理2XX Success(成功状态码) 请求正常处理完毕3XX Redirection(重定向状态码) 需要进行附加操作以完成请求4XX Client Error(客户端错误状态码) 服务器无法处理请求5XX Server Error(服务器错误状态码) 服务器处理请求出错

0

图解HTTP-网络基础-笔记

网络基础 TCP/IPTCP/IP协议族 我们通常使用到的网络是在TCP/IP协议族的基础上运作的。而HTTP属于它内部的一个子集。 TCP/IP是互联网各类协议族的总称, 如图:

0

AsyncTask源码浅析

源码浅析 概述AsyncTask是一个执行异步任务的小型框架,里面封装了Handler,使得使用者不必关心线程之间的切换,虽然现在执行异步任务都不会用AsyncTask,用得更多的是Bolt Tasks 和RxJava,但是AsyncTask中的设计思想还是很多值得学习的,比如:内部中,串行运行任务时的队列控制,handler的将结果回调回主线程,以及如何取消正在执行的任务等。。

0

universal-image-loader源码浅读

概述 UIL是一款经典的图片加载框架,该类库的设计运用了多种设计模式,使得它的可拓展性增加,比如缓存的策略,如果默认的缓存策略不能够满足你的需求的话,你完全可以自己定制自己的缓存策略。 使用者不必关心加载图片时会发生OOM,其中发生的概率还是很小的,因为类库中对图片进行了三级缓存,其中的内存缓存使用了双级缓存(强引用和弱引用)。 库中考虑到用户可能会使用ListView,GridView或者RecyclerView来展示图片,因此在库中提供了一个PauseOnScrollListener来控制滑动时是否要加载图片。 这次,简单来分析类库的使用流程

0

Volley--队列控制

Volley之四个队列的配合使用概述在Volley中,存在这四个重要的队列,这次想单独来分析一下这四个队列的配合使用。

0

Volley--网络优化和缓存

概述:volley的特点都大家很清楚,volley适合数据量小且通信频繁的请求,但是不适合数据量大的请求。volley有这样的特点是由其内部网络优化和缓存所决定的,这次分析其中的原理。

0

重拾Dagger2-组织

回顾在上一篇中, 我们从源码的角度分析了Dagger的工作原理, 在这一篇中, 我们来重点讲解Dagger2依赖组织的方式, 在讲解之前, 我们先来理解Component dependencies和SubComponent Component dependencies VS SubComponent为了提高一个Component中代码的复用度, 我们可以利用 Component dependenc

0

java基础

字符串使用+连接字符串 使用+连接字符串每次都会构建一个新的对象,在需要频繁拼接字符串的场景时,会比较耗时和浪费空间,因为String创建后就不可以再改变,因此+ 操作是线程安全的 StringBuilder 该类可以解决String拼接字符串时出现的问题,但是StringBuilder线程不安全。 StringBuffer StringBuilder可以保证线程安全,但是也因此效率变得低 总结 如果只需要简单的拼接字符串的话,可以直接使用+号拼接 如果需要频繁拼接而且无需考虑线程安全的,可以使用StringBuilder 如果需要频繁拼接但要考虑到线程安全的话,可以使用StringBuffer

0

图解HTTP-与HTTP协议的Web服务器-笔记

与HTTP协作的Web服务器通信数据转发程序:代理、网关、隧道 在HTTP通信时,代理、网关和隧道是用于通信数据的转发的应用程序,他们可以配合服务器进行工作 代理就像一个中介,他接收客户端发来的信息继而转发给服务器,同时也可以接受服务器的信息转发给客户端 网关是转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,它就像自己拥有资源的源服务器一样对请求进行处理。有时客户端可能都不会察觉,自己的通信目标是一个网关。 隧道是在相隔甚远的客户端和服务器两者之间进行中转,并保持双方通信连接的应用程序。 代理

0

Java内存分配与回收策略

内存分配与回收策略目录 对象优先在Eden分配 大对象直接进入老年代 长期存活对象将进入老年代 动态对象年龄判定 空间分配担保 对象优先在Eden分配 大多数情况下, 对象主要分配在新生代的Eden区上. 当Eden区没有足够的空间进行分配时, 虚拟机将进行一次 Minor GC 大对象直接进入老年代 大对象指的是需要大量连续内存空间的Java对象,最典型的大对象就是那种很长的字符串以及数组.

0

Java内存区域

Java内存区域目录 运行时数据区 程序计数器 Java虚拟机栈 本地方法栈 Java堆 方法区 运行时常量池 HotSpot虚拟机对象探秘 对象的创建 对象的内存布局 对象的访问定位 运行时数据区 程序计数器 程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。 字节码解释器通过改变程序计数器的值来选取下一条需要执行的字节码指令,分支,循环,跳转,异常处理

0

深入理解Java集合框架-set家族

Set集合的最大特点是能够保证内部的元素唯一性. 这种特性是建立在Map的基础上的. 换句话说: Set通过组合的模式, 在Map的基础上扩展了一些特性. 由于Set是建立在Map的基础上的. 如果理解了Map的话, Set会很好理解. 接下来我们来看看Set家族的UML UML Set接口对应Map接口, 定义了Set的一些方法. AbstractSet对应AbstractMap, 为Set

0

深入理解Java集合框架-TreeMap

这次要介绍的Map跟之前介绍的Map有点不一样. 之前的Map, 例如: HashMap, LinkedHashMap都是基于散列技术. 而这次要介绍的TreeMap则不同, TreeMap是基于一种叫红黑树的数据结构. 接下来, 我们先看看TreeMap的UML图片 UML 跟之前介绍过的Map一样, TreeMap实现了Cloneable和Serializable, 因此它支持克隆(浅克隆

0

深入理解Java集合框架-LinkHashMap

上篇我们分析了HashMap, 知道了遍历HashMap时, 顺序是不能够保证的.如果遍历时需要顺序, 那么应该用LinkedHashMap, 也就是我们这次要来分析的另外一个集合类. UML 从UML图来看, LinkedHashMap的继承于HashMap, 可见LinkedHashMap是基于HashMap来扩展的. 如果理解了HashMap的话, 那LinkedHashMap应该算是很

0

深入理解Java集合框架-LinkedList

上篇文章中我们学了ArrayList, 知道了ArrayList比较适合需要频繁访问元素的场景. 但是在插入和删除元素时, 表现得效率低下. 这次, 我们来分析适合使用在频繁插入和删除元素的场景的集合: LinkedList. UML 我们先来看看UML图, LinkedList在继承关系上, 跟ArrayList基本相同. 我们这里只分析不同点. LinkedList继承AbstractS

0

深入理解Java集合框架-ArrayList

UML 从上面的UML图, 我们可以看出 ArrayList实现了三个标记接口, 他们分别是:RandomAccess, Serializable, Cloneable. RandomAccess接口表示ArrayList支持随机访问其中的元素, 也就是ArrayList可以随机访问其中的元素, 并且时间复杂度为O(1). Serializable接口表示ArrayList可以被序列化. Cl

0

图解HTTP-确保Web安全的HTTPS-笔记

HTTP存在的不足 通信使用明文(不加密), 内容可能会被窃听 不验证对方身份,因此有可能遭遇伪装 无法证明报文的完整性,所以有可能遭到篡改 通信使用明文可能会被窃听 HTTP本身是不具备加密的功能的,因此在发送报文时是采用明文传输. 如何采用明文进行传输的话,内容可以通过抓取传输时的数据包,再由工具进行解析,就可以得到通信的内容

0

图解HTTP-报文信息-笔记

HTTP报文内的HTTP信息HTTP报文 用于HTTP协议交互的信息被称为报文 请求端(客户端)的HTTP报文称为请求报文 相应端(服务器端)的HTTP报文称为响应报文 HTTP报文分为报文首部和报文主体(不一定有报文主体) HTTP报文结构:

0

CustomView总结

LayoutParams认知 Q: 什么是LayoutParams? 它跟view的关系是什么? 什么是LayoutParams? 我们在XML布局中定义的layout_xx属性,最终都会以Java代码的形式展现出来, 而LayoutParams就是这些layout_xx属性在Java层的映射, 也就是说LayoutParams是view在xml布局中layout_xx的属性容器. 可见,

0

重拾Dagger2

最近项目没什么bug,也没什么新的需求, 闲得有点慌(其实一直很闲…), 既然那么闲, 那就重新深入学习Dagger2吧. 之前虽然有学过Dagger2, 但是并没研究其中的原理, 用起来总感觉很不踏实, 于是借此机会研究了一波Dagger2, 并准备分为三篇来讲, 分别为: 使用篇, 原理篇和组织篇. 本篇的目的就指在介绍Dagger2 Dagger2是什么?Dagger2是之前由Square公

0

重拾Dagger2-理解Dagger2

回顾上一篇我们主要介绍了如何用Dagger2在Android应用中进行依赖注入, 在这一篇中, 我们主要来理解Dagger2中的原理, 毕竟知己知彼后才用得踏实 API关系 Provider: provider是一个接口, 它的作用是包装被依赖的类 Factory: 继承于Provider, 作用是创建依赖的对应实例 MembersInjector: 也是一个接口, 作用是将依赖注入到需要依赖的

0

重拾Dagger2-使用Dagger2

常用注解解释在学习Dagger2之前,我们最好就是将Dagger2中的常用的注解的含义捋清一遍, 这样上手Dagger2就不会显得那么难,所以下面我准备介绍Dagger2中常用的注解的含义,这些注解包括 Inject Provides Module Component Qualifiers Scope InjectInject的中文意思是注射,在Dagger2中它在不同的地方代表不同的含义.当

0

Picasso中值得学习的技巧

Picasso中的线程池 Picasso中的线程池主要是对对网络状态进行了监听,并且包装了一个FutureTask实现请求的优先级比较。 分析: 首先在Picasso中,定义了一个优先级枚举类型: 12345678910/** * The priority of a request. * * @see RequestCreator#priority(Priority) */ public enum Priority { LOW, NORMAL, HIGH }

0

Picasso基本用法及源码浅析

基本用法:加载图片: picasso支持从Resource,MediaStore,content,contacts,url 加载图片。 123Picasso.with(this) .load(uri) .into(mImageView); 以上是最简单的通用加载图片的方法

0

计算机网络-运输层

计算机网络-运输层 目录 概述 分用和复用 UDP协议 运输层梳理 概述 当网络的边缘部分中的两个主机使用网络的核心部分功能进行通信时,只有主机的协议栈才有运输层,而网络的核心部分中的路由器在转发分组时都只用到下三层的功能. 网络层是为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信. 在网络层中, IP数据报首部的检验和字段只检验首部是否出现差错而不检查数据部分.而在运输层