摘要: 现将本博客的相关内容迁移到CSND博客 地址:http://blog.csdn.net/cz157733055 阅读全文
posted @ 2016-04-09 15:35 CQUMonk 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 前面三篇文章从最基础的TCP,HTTP协议理论开始,然后介绍了在Android的开发中所使用的HttpClient和HttpUrlConnection这两种Http客户端。在本文中,我们一起来学习一下在Android开发中经常使用的volley框架。首先,我们会从架构的角度了解一下整个框架的结构,然后从源码的角度理解框架实现细节。 volley是Google在13年发布... 阅读全文
posted @ 2015-09-29 19:23 CQUMonk 阅读(1309) 评论(0) 推荐(1) 编辑
摘要: 我们都知道,在操作系统中进程是OS分配资源的最小单位,而线程是执行任务的最小单位。一个进程可以拥有多个线程执行任务,这些线程可以共享该进程分配到的资源。当我们的app启动运行后,在该app没有其他组件正在运行的前提下,Android系统会启动一个新Linux进程来运行app,这个进程只包含了... 阅读全文
posted @ 2015-09-22 12:47 CQUMonk 阅读(2076) 评论(1) 推荐(0) 编辑
摘要: 大多数Android的app都会使用HTTP协议来发送和接收数据。在Android开发中,通常使用两种http客户端:一个是Apache的HttpClient,另一个是HttpURLConnection。这两种HTTP客户端API都支持HTTPS协议,流数据上传和下载,配置超时,IPV6协议以及连接池等等。 Apache HttpClient HttpClient的... 阅读全文
posted @ 2015-09-19 17:03 CQUMonk 阅读(946) 评论(2) 推荐(0) 编辑
摘要: 上篇文章介绍了传输层TCP协议的理论知识,本文主要介绍了TCP协议基础之上HTTP协议和HTTPS协议的理论知识。 HTTP协议基于TCP协议定义了客户端向服务器请求数据的方式,它是面向事务的应用层协议具有灵活、简单快速、无连接和无状态的特点,是网络中交换各类数据的基础。 HTTP协议的请求与响应报文 HTTP报文的格式如下所示: ... 阅读全文
posted @ 2015-09-11 20:37 CQUMonk 阅读(704) 评论(1) 推荐(1) 编辑
摘要: 本系列文章对整个Android网络编程进行了总结,包括基本的TCP/IP协议,HTTP协议,HTTPS协议,HttpClient,UrlConnection,一些网络通信的库到棉花糖新加入的OKHTTP。 本文主要对TCP协议的连接管理和拥塞控制两部分知识进行总结。连接管理 TCP协议是传输层的重... 阅读全文
posted @ 2015-09-10 20:42 CQUMonk 阅读(859) 评论(0) 推荐(0) 编辑
摘要: 本文首先概述了Android的进程间通信的Binder机制,然后结合一个AIDL的例子,对Binder机制进行了解析。 概述 我们知道,在Android app中的众多activity,service等组件可以运行在同一进程中,也可以运行在不同进程中。当组件运行在同一进程中进行通信就显得比较简单,在之前的Android线程间通信机制中已经讲过了;而当它们运行在不同的进程中时,就需要... 阅读全文
posted @ 2015-08-26 19:50 CQUMonk 阅读(2526) 评论(0) 推荐(1) 编辑
摘要: 本文首先从整体架构分析了Android整个线程间消息传递机制,然后从源码角度介绍了各个组件的作用和完成的任务。文中并未对基础概念进行介绍,关于threadLacal和垃圾回收等等机制请自行研究。基础架构 首先,我们需要从整体架构上了解一下Android线程通信都做了哪些工作。我们都知道,进程是操作... 阅读全文
posted @ 2015-08-23 17:33 CQUMonk 阅读(1740) 评论(0) 推荐(1) 编辑
摘要: 本篇的内容并不是介绍service使用方法和生命周期的,而是对其中的一些要点进行记录和分析。 我们都知道,Service是一个在后台执行的应用组件,用于在后台进行长期操作,例如进行网络事务,播放背景音乐等等。它又两种启动方式,如果其他的应用组件希望与该service进程内通信(IPC),可以通过与该... 阅读全文
posted @ 2015-08-20 16:51 CQUMonk 阅读(303) 评论(0) 推荐(0) 编辑
摘要: ArrayList是java中最常使用的动态数组,其具体使用方式就不再介绍,本文只是从源码角度介绍它内部的序列化和扩容机制。ArrayList作为集合框架中的一员,它的继承关系如下所示:public class ArrayList extends AbstractList implements C... 阅读全文
posted @ 2015-08-20 10:59 CQUMonk 阅读(308) 评论(0) 推荐(0) 编辑
摘要: 在Android中,人们主要通过手指与系统交互。Android把所有的touch事件都被封装成MotionEvent来进行处理,其中包括了手指点击的位置,时间等信息。其事件类型主要包括:ACTION_DOWN,ACTION_UP,ACTION_MOVE, ACTION_POINTER_DOWN, ... 阅读全文
posted @ 2015-08-12 14:10 CQUMonk 阅读(497) 评论(0) 推荐(0) 编辑
摘要: 在开发过程中,我们常常会来自定义View。它是用户交互组件的基本组成部分,负责展示图像和处理事件,通常被当做自定义组件的基类继承。那么今天就通过源码来仔细分析一下View是如何被创建以及在绘制过程中发生了什么。创建 首先,View公有的构造函数的重载形式就有四种:View(Context cont... 阅读全文
posted @ 2015-08-10 18:14 CQUMonk 阅读(2447) 评论(0) 推荐(0) 编辑
摘要: 我们知道,进程是OS分配资源的最小单位,而线程是执行操作的最小单位并不享有资源。ThreadLocal实现了线程数据变量的本地存储,每个线程都存储自己的变量,所有的线程都使用同样的ThreadLocal对象来存取变量,但是每个线程在存取时看到的变量值是不同的,不会影响到其他线程的变量,并且值可以为... 阅读全文
posted @ 2015-08-06 17:05 CQUMonk 阅读(967) 评论(0) 推荐(0) 编辑
摘要: Android使用LayoutInflater来进行布局加载,通常获取方式有两种:第一种:LayoutInflater layoutInflater = LayoutInflater.from(context); 第二种:LayoutInflater layoutInflater = (Layout... 阅读全文
posted @ 2015-08-05 23:06 CQUMonk 阅读(490) 评论(1) 推荐(0) 编辑
摘要: Dalvik虚拟机用来分配对象的堆划分为两部分,一部分叫做Active Heap,另一部分叫做Zygote Heap。下面基于管理机制来介绍为何分配为这两部分,以及堆内存的管理。 我们从Android系统启动说起。 Android系统启动后,会有一个Zygote进程创建第一个Dalvik虚拟... 阅读全文
posted @ 2015-07-28 14:27 CQUMonk 阅读(728) 评论(0) 推荐(0) 编辑
摘要: Dalvik虚拟机与Java虚拟机有着很多相似的特性,都支持GC,JIT,JNI等等。其主要区别在于文件格式以及指令集不同,下面对两者的特性进行比较与讨论。Difference1:文件格式 Dalvik的虚拟机类文件采用dex格式,而JVM的类文件是class格式。不同之处在于,我们熟悉的cl... 阅读全文
posted @ 2015-07-20 17:32 CQUMonk 阅读(651) 评论(0) 推荐(1) 编辑
摘要: Action Bar在实际应用中,很好地为用户提供了导航,窗口位置标识,操作点击等功能。它出现于Android3.0(API 11)之后的版本中,在2.1之后的版本中也可以使用。添加与隐藏Action Bar 在3.0之后的版本中(android:minSdkVersion 或者 andro... 阅读全文
posted @ 2015-06-10 20:50 CQUMonk 阅读(507) 评论(0) 推荐(0) 编辑
摘要: 客户端将消息对象发送给接收者,责任链模式将接收者连成一条链,并在该链上传递该消息对象,直到有对象处理它。通过让更多对象接触到消息请求,避免了发送者和接收者的耦合。 接收者Handler作为一个抽象类,持有自身引用,指向它的后继接收者successor。我们可以通过工厂模式构建这条责任链。 ... 阅读全文
posted @ 2015-06-06 10:44 CQUMonk 阅读(259) 评论(0) 推荐(0) 编辑
摘要: MVP(Model View Presenter)模式是由MVC模式发展而来的,在如今的Android程序开发中显得越来越重要。本篇文章简单讨论了MVP模式的思想。 啥是MVP MVP模式的主要思想是将程序的业务逻辑从表现层分离出来,理想情况下,MVP模式可以使得相同的逻辑拥有完全不同且可互换的views。 为啥要用MVP 在Android实际开发过程中,我们会遇到这样的问题:Android中的a... 阅读全文
posted @ 2015-04-04 15:21 CQUMonk 阅读(1428) 评论(0) 推荐(0) 编辑
摘要: 引子 Java虚拟机是Java应用程序的执行环境。通常而言,JVM是由一组严格的指令集和一个复杂的内存模型来具体实现的虚拟机,它用来解释编译好的java字节码文件,将字节码转换为特定机器可以执行的本机代码(native code)。它也可以指代某一软件运行时的进程实例。这里,我们以hotspot... 阅读全文
posted @ 2015-03-13 22:37 CQUMonk 阅读(307) 评论(0) 推荐(0) 编辑
摘要: 工厂模式包括工厂方法模式和抽象工厂模式。而抽象工厂模式是工厂方法模式的扩展。 在工厂模式下,我们通常采用工厂方法来代替new来实例化对象。 具体是如何做的呢? 首先,定义一个接口来创建对象,但是让子类来决定那些类需要被实例化。工厂方法把实例化的工作推迟到子类中去实现。 应用场景 有一组类似的对象需要... 阅读全文
posted @ 2014-12-19 20:49 CQUMonk 阅读(211) 评论(0) 推荐(0) 编辑
摘要: 首先,要辨析进程与线程的概念: 进程是程序执行的过程,它持有资源和线程,相对于程序本身而言具有动态性。 线程是系统中最小的执行单元,同一个进程中可能有多个线程,它们共享该进程持有的资源。线程的通信也称为线程的交互,方式主要有互斥和同步。同步是指线程之间通过共同协作完成某项工作,线程间具有... 阅读全文
posted @ 2014-12-19 15:46 CQUMonk 阅读(385) 评论(0) 推荐(0) 编辑
摘要: 在程序设计中,某些类只允许存在一个对象,需要使用单例模式来保证某个实例只有一个。例如,配置文件,线程池,缓存,日志对象等等。 单例模式分为懒汉式和饿汉式 饿汉式 在类加载的时候,该实例的对象会被创建。 首先将该类的构造函数私有化,不允许外部直接创建类的实例。 在类的内部创建该类的私有静态实例对象。 ... 阅读全文
posted @ 2014-12-06 21:05 CQUMonk 阅读(268) 评论(1) 推荐(0) 编辑
摘要: 模板方法模式为我们定义了一个算法的框架,框架之中定义了方法的执行步骤,但是具体每一步的方法要由具体的子类来实现。这样,在不改变整个算法结构的同时,就可以定义某个算法的特定步骤。 模板方法模式的类结构如下: 模板函数:在一个抽象基类中定义了一个模板方法,它规定了整个算法的结构并且定义了... 阅读全文
posted @ 2014-12-05 17:09 CQUMonk 阅读(249) 评论(0) 推荐(0) 编辑
摘要: 适配器模式是将一个类的接口,转换成客户期望的另一个接口,使得原来因为接口不兼容的类能够在一起工作。 它由下面四个组件构成: 客户端Client 目标接口Target 被适配者Adaptee 适配器Adapter 通常情况下,将被适配者的类作为对象组合在适配器Adapter类中,同时,适配器Adapt... 阅读全文
posted @ 2014-12-03 16:12 CQUMonk 阅读(220) 评论(0) 推荐(0) 编辑
摘要: 策略模式将可变的部分从程序抽象分离成算法接口,在该接口下分别封装一系列算法实现。这样不同的算法之间可以互相替换,使客户端可以独立这些算法。 根据面向对象的编程思想,我们通常会采用以下方式解决问题。 继承父类 优点:相同场景下代码复用率高 缺点:容易忘记代码的复写,不灵活,不同场景下代码复用率低 抽象... 阅读全文
posted @ 2014-11-24 18:26 CQUMonk 阅读(257) 评论(0) 推荐(0) 编辑
摘要: 本文主要讨论了机器学习中的最大似然估计MLE,贝叶斯估计和最大后验估计MAP,以及它们的关系,是上一篇《机器学习浅析之最优解问题》的深入。 最大似然估计MLE Frequentist Learning假定存在模型M,其中未知参数为.该参数的估计值为. 给定样本观察数据X,通过选择合适的θ值,可以使产生该样本数据X的概率最大。 首先介绍逆概率公式: 即 它可以将后验概率转化为给予先验概率... 阅读全文
posted @ 2014-11-10 11:41 CQUMonk 阅读(628) 评论(0) 推荐(0) 编辑
摘要: MapReduce架构与生命周期 概述:MapReduce是hadoop的核心组件之一,可以通过MapReduce很容易在hadoop平台上进行分布式的计算编程。本文组织结果如下:首先对MapReduce架构和基本原理进行概述,其次对整个MapReduce过程的生命周期进行详细讨论。 参考文献:董西城的《Hadoop技术内幕》以及若干论坛文章,无法考证出处。 MapReduce架构和... 阅读全文
posted @ 2014-10-30 19:55 CQUMonk 阅读(1195) 评论(0) 推荐(0) 编辑
摘要: 实验环境基本配置硬件:硬盘单节点50GB,1G内存,单核。 操作系统:CentOS6.4 64bit Hadoop:2.20 64bit(已编译) JDK:jdk1.7 磁盘分区: /5GB/boot100MB/usr5GB/tmp500MBswap2GB/var1GB/home剩余空间Linux系... 阅读全文
posted @ 2014-10-12 16:54 CQUMonk 阅读(1012) 评论(0) 推荐(1) 编辑
摘要: IP地址IP地址是由32位或者128位无符号数表示的网络层通信地址,是一种低级协议,TCP和UDP协议都是在它的基础上构建的。Java中使用InetAddress来表示IP地址,它有两个子类Inet4Address和Inet6Address,分别表示IPV4和IPV6。 getByName()方法通... 阅读全文
posted @ 2014-10-06 16:04 CQUMonk 阅读(391) 评论(0) 推荐(0) 编辑