- 博客(21)
- 资源 (23)
- 收藏
- 关注
原创 Callable与Runnable的区别及其在JDK源码中的应用
最近在学习java多线程方面的东西,在此希望把自己学到的东西做做总结,要想搞清楚实现原理,源码是最好的老师,因此这篇我打算从实践+源码角度来进行分析以下几个问题: (1):Callable与Runnable的区别; (2):Callable与Runnable的使用,并且通过Future对象获取Callable的返回值; (3)
2016-08-31 11:30:45 5638 7
原创 我眼中的java线程池实现原理
最近在看java线程池实现方面的源码,在此做个小结,因为网上关于线程池源码分析的博客挺多的,我也不打算重复造轮子啦,仅仅用纯语言描述的方式做做总结啦! 个人认为要想理解清楚java线程池实现原理,明白下面几个问题就可以了: (1):线程池存在哪些状态,这些状态之间是如何进行切换的呢? (2):创建线程池需要哪些参数,这些参数的具体含义是
2016-08-30 19:41:27 11852 11
原创 我眼中的Activity的工作过程
我们都知道平常在使用Activity的过程中,只需要我们调用Activity的startActivity方法,传入适当的参数就可以启动一个我们想要启动的Activity了,但是你知道这个过程中经历了些什么吗?今天我想从FrameWork层面解释下从系统启动到显示出我们的第一个Activity的整个过程,也算是对面试题:说一下一个Android APP从点击打开开始,是怎样展示在用户面前的回答了
2016-08-29 15:44:11 2594
原创 Android面试题集锦(五)
2016.8.26更新...........................................................................(78):使用MAT进行内存泄漏检查步骤总结 我们通常情况下是可以通过DDMS的Devices界面选中想要观察的进程,通过点击Update Heap并且点击Cause GC的方式查看当前应用程序的内存使
2016-08-26 10:24:53 1776 6
原创 Android内存优化建议
这篇博客主要是总结一些内存优化技巧,大体包括编码优化、Bitmap优化、优化ListView减少内存开销、布局优化、其他优化: 编码优化: (1):使用更加轻量级的数据结构 使用ArrayMap和SparseArray代替我们常见的HashMap,因为对于HashMap来说,它本身是由数组加链表实现的,通常为了他的mapping操作,我们需要开
2016-08-25 22:30:30 2801
原创 Android-----使用UncaughtExceptionHandler捕获全局异常
在我们通常开发的应用程序中,不可避免的会出现crash现象,特别是当应用程序已经上线之后,这些crash异常信息我们通常是很难捕捉到的,如果我们不能对这些异常信息做及时的收集并且修复的话,势必会带来用户体验度的下降,为此,Android的Thread类中为我们提供了setDefaultUncaughtExceptionHandler方法,这个方法会为我们设置默认的异常处理器,当然这个默认的异常处理
2016-08-22 22:41:48 1630
原创 排序类算法总结
public class Sort { /** * 插入排序 * @param numArray */ public void insertSort(int[] numArray) { if(numArray == null || numArray.length == 0) return; int i,j,temp; for(i = 1;i < numArray
2016-08-20 17:40:35 1709
原创 数据结构-----创建/递归非递归遍历二叉树
class BiTreeNode{ public BiTreeNode left; public BiTreeNode right; public int value; public BiTreeNode(int value) { this.value = value; }}public class BiTree { public int count = 0; publi
2016-08-15 20:47:10 1718
原创 MINA框架中的编码解码以及对粘包断包的处理
我们都知道MINA中是使用责任链的方式来实现将二进制字节流数据转换为java对象,或者将java对象转换为二进制字节流数据的,那么这个转换过程到底是怎么进行的呢?这就涉及到MINA中的编码与解码问题了; 我们先来看看解码过程: 当服务端读取客户端发送过来的消息时,会执行AbstractPollingIoProcessor里面的read方法,因为之前在我们对MIN
2016-08-14 19:02:06 5573
原创 Android-----借助MINA框架实现长连接、短连接以及断线重连
前面我们分析了MINA框架的源码,大家可以从这里进行查看,这篇博客我们使用MINA来完成项目中经常会用到的长连接、短连接、断线重连功能,直接开始了; MINA本身
2016-08-13 17:40:31 9020
原创 java-----NIO总结(四)
我们知道java中的IO经历了BIO到NIO再到AIO的发展,具体来讲的话BIO是同步阻塞式IO,NIO是同步非阻塞式IO,而AIO是异步非阻塞式IO,前面我们分析了BIO和NIO的用法,至于AIO目前我还没有研究的想法,先把BIO和NIO研究清楚了再说吧,这篇博客我对前面的内容进行总结,如果你没有看过前面的博客,强烈推荐你看下,下面是索引链接: java-----NIO总结(一
2016-08-11 21:13:24 1689 2
原创 java-----NIO总结(三)
前两篇博客我们通过将accept和read设置成非阻塞式的方式实现了同步非阻塞模式,但是缺点在于在服务端需要为每个客户端都要创建一个线程来处理每个客户端的请求,这点相对来说比较耗费服务端资源,比如我们通常用到的Socket长连接用于心跳检测,其实客户端根本就没有数据要发送,只是想要告诉服务端我还活着而已,这时候为客户端单独创建一个线程的话,未免就有点小题大做了,因此迫切的需要出现一种可以减少在服务
2016-08-11 20:02:47 2052
原创 java-----NIO总结(二)
上一篇文章中,我们分析了通常我们使用的面向字节流的BIO所存在的阻塞问题,那么这篇博客我们来看看java为我们提供的解决BIO的方案,就是NIO了; 在上篇文章的最后,我们提到了,使用了多线程只是能够实现对"业务逻辑处理"的多线程,但是对于数据报文的接收还是需要一个一个来的,也就是我们上面见到的accept以及read方法阻塞问题,多线程是根本解决不了的,那么首先我们来看看acc
2016-08-11 15:32:55 2536 2
原创 java-----NIO总结(一)
最近项目中用到了AndroidPN框架来实现一个推送平台,在看AndroidPN源码的过程中,着实有些费力,因为他内部是用MINA框架实现的,想想还是先把MINA搞清楚了再来看AndroidPN框架了,于是有了今天这个MINA框架源码分析系列,又因为MINA本身是对我们java NIO的二次封装,所以在正式讲解MINA源码之前,我们还需要先搞清楚java NIO的知识,这篇博客博客主要讲的就是ja
2016-08-11 10:12:34 1910 3
原创 MINA框架源码分析(三)
我们接着上一篇继续分析; 在addNow方法执行结束之后,我们已经为当前NioProcessor里面所有的NioSocketSession对应的SocketChannel注册了OP_READ事件,接下来继续查看Processor的run方法,源码在上一篇中有,执行到第49行,判断如果selected大于0执行第52行的process方法,selected的值其实就是Selecto
2016-08-10 17:31:39 4548 3
原创 MINA框架源码分析(二)
上一篇我们通过实例学习了MINA框架的用法,发现用起来还是挺方便的,就那么几步就可以了,本着学东西必知其原理的观念,决定看看MINA的源码实现,好了,我们开始吧! MINA源码对于客户端和服务端来说基本上差别不是很大的,所以我计划主要还是分析服务端的源码,在正式分析之前,我们需要对MINA有一个整体的了解; MINA中涉及到了这么几个对象:
2016-08-10 17:29:42 7600 5
原创 MINA框架源码分析(一)
作为一个比较优秀的网络通信框架,MINA框架大大的方便了我们开发高性能、高扩展性应用程序的效率,他的底层实现是java NIO,众所周知NIO是同步非阻塞式IO,使用它我们可以开发高并发的java程序,但是使用起来过于复杂也让人望而却步,MINA对NIO进行了二次封装,使用起来还是比较简单的,因为项目中用到了他来实现长连接心跳检测,所以决定研究下他的源码,更关键的是他优秀的线程模型和责任链机制,好
2016-08-09 16:30:14 4042
原创 java面试题集锦(三)
(35):Java中的异常分类 Java中的异常分为三大类:Error/Runtime Exception(运行时异常)/普通异常 这三类异常的类继承结构是 java.lang.Throwable java.lang.Error java.lang.Exception
2016-08-01 22:55:14 1769
原创 剑指offer-----面试题30(最小的k个数)
实现思路: 实现思路类似于上一题的求解数组中出现次数超过一半的数字,这道题同样也并没有要求我们将最小的k个数按顺序输出来,因此我们可以借助于快速排序寻找主元的位置的方法来实现,因为主元位置的左边都是小于主元的,主元位置的右边都是大于主元的,我们只需要不断的调用查找主元位置的方法直到主元位于k位置就可以了,当然没进行一次partition方法,主元本身也是在变化的,这时候主元位置左
2016-08-01 22:26:05 1774
原创 剑指offer-----面试题29(数组中出现次数超过一半的数字)
实现思路:首先如果数组中存在出现次数超过一半的数字的话,那么这个数字肯定会位于数组排序之后中间元素的右边,但是对数组排序的话,时间复杂度是O(nlogn),这道题并没有非要求我们对数组进行排序,我们只需要找到中间那个元素就可以了,具体实现方法可以参照快速排序寻找主元位置的思路,因为快速排序找到主元位置真正位置之后,主元位置左边的值全部都小于主元的值,主元位置右边的值全部都大于主元的值,如果主元位置
2016-08-01 21:32:34 1778
winhex.exe
2017-09-20
DiskLruCache.java
2016-05-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人