自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

世上只有一种英雄主义

在认清生活真相之后依然热爱生活

  • 博客(63)
  • 资源 (1)
  • 收藏
  • 关注

原创 Java泛型详解

由于博客的特殊显示原因,尖括号用()代替泛型概述Java泛型(generics)是JDK 5中引入的一个新特性,允许在定义类和接口的时候使用类型参数(type parameter)。声明的类型参数在使用时用具体的类型来替换。优缺点从好的方面来说,泛型的引入可以解决之前的集合类框架在使用过程中通常会出现的运行时刻类型错误,因为编译器可以在编译时刻就发现很多明显的错误。而从不好...

2016-09-25 23:43:15 5729 1

原创 Android的oom详解

Android的oom原因1.资源对象没关闭造成的内存泄露,try catch finally中将资源回收放到finally语句可以有效避免OOM。资源性对象比如:1-1,Cursor 1-2,调用registerReceiver后未调用unregisterReceiver() 1-3,未关闭InputStream/OutputStream 1-4,Bitmap使用后未调用rec...

2016-09-11 17:36:44 6224 3

原创 Android的ANR详解(原因和方案)

ANR的定义在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择“等待”而让程序继续运行,也可以选择“强制关闭”。所以一个流畅的合理的应用程序中不能出现anr,而让用户每次都要处理这个对话框。因此,在程序里对响应性能的设计很重要,这样系统不会显示A...

2016-09-10 12:50:55 3415

原创 Android Handler机制剖析

android的handler机制是android的线程通信的核心机制Android UI是线程不安全的,如果在子线程中尝试进行UI操作,程序就有可能会崩溃。Android中的实现了接收消息的“消息队列” ——【MessageQueue】阻塞式地从消息队列中接收消息并进行处理的“线程” ——【Thread+Looper】可发送的“消息的格式” ——【Message】“消...

2016-09-09 12:35:15 3083

Java泛型详解

由于博客的特殊显示原因,尖括号用()代替泛型概述Java泛型(generics)是JDK 5中引入的一个新特性,允许在定义类和接口的时候使用类型参数(type parameter)。声明的类型参数在使用时用具体的类型来替换。优缺点从好的方面来说,泛型的引入可以解决之前的集合类框架在使用过程中通常会出现的运行时刻类型错误,因为编译器可以在编译时刻就发现很多明显的错误。而从不好的...

2016-09-25 23:43:00 321

原创 Java程序员的必备知识-类加载机制详解

类加载器的概念类加载器是一个用来加载类文件的类。Java源代码通过javac编译器编译成类文件。然后JVM来执行类文件中的字节码来执行程序。类加载器负责加载文件系统、网络或其他来源的类文件。JVM中类加载器的树状层次结构Java 中的类加载器大致可以分成两类,一类是系统提供的,另外一类则是由 Java 应用开发人员编写的。引导类加载器(bootstrap class loader):它用来加载 Ja

2016-09-25 21:31:40 2339

原创 程序员必须搞清的概念-equals和=和hashcode的区别

1. 首先equals()和hashcode的介绍equals 方法在非空对象引用上实现相等关系: * 自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。 * 对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。 * 传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(

2016-09-22 23:56:13 2559 1

原创 海量数据处理算法(top K问题)

举例有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M。返回频数最高的100个词。思路首先把文件分开针对每个文件hash遍历,统计每个词语的频率使用堆进行遍历把堆归并起来具体的方案1.分治: 顺序读文件中,对于每个词c,取hash(c)%2000,然后按照该值存到2000个小文件中。这样每个文件大概是500k左右。注意:如果其中的有的文件超过了1M

2016-09-22 20:20:01 4342 3

原创 ceil和floor函数的编程实践

ceil()向上取整floor向下取整题目在最近几场魔兽争霸赛中,赫柏对自己的表现都不满意。 为了尽快提升战力,赫柏来到了雷鸣交易行并找到了幻兽师格丽,打算让格丽为自己的七阶幻兽升星。 经过漫长的等待以后,幻兽顺利升到了满星,赫柏很满意,打算给格丽一些小费。赫柏给小费是有原则的:1.最终给格丽的钱必须是5的倍数; 2.小费必须占最终支付费用的5%~10%之间(包含边界)。升星总共耗费A魔卡,赫

2016-09-19 11:04:42 1346

原创 程序员易混淆的10个基础概念

1.java初始化过程:初始化父类中的静态成员变量和静态代码块 ; 初始化子类中的静态成员变量和静态代码块 ; 3.初始化父类的普通成员变量和代码块,再执行父类的构造方法;4.初始化子类的普通成员变量和代码块,再执行子类的构造方法; 2.instance是java的二元运算符,用来判断他左边的对象是否为右面类(接口,抽象类,父类)的实例3.linux的启动过程文件/sbin/init在核心完整

2016-09-19 10:46:13 2023 1

原创 DFS(深度优先)算法编程实践

DFS定义DFS(Depth-First-Search)深度优先搜索算法,是搜索算法的一种。是一种在开发爬虫早期使用较多的方法。它的目的是要达到被搜索结构的叶结点 。特点每次深度优先搜索的结果必然是图的一个连通分量。深度优先搜索可以从多点发起。如果将每个节点在深度优先搜索过程中的“结束时间”排序(具体做法是创建一个list,然后在每个节点的相邻节点都已被访问的情况下,将该节点加入list结尾,然后逆

2016-09-19 10:31:04 4821 1

原创 Android的四个基本概念(线程通信和GLSurfaceView)

GLSurfaceView提供了下列特性:1> 管理一个surface,这个surface就是一块特殊的内存,能直接排版到android的视图view上。 2> 管理一个EGL display,它能让opengl把内容渲染到上述的surface上。 3> 用户自定义渲染器(render)。 4> 让渲染器在独立的线程里运作,和UI线程分离。 5> 支持按需渲染(on-demand)和连续渲染

2016-09-18 12:27:25 2427

原创 Android的四个基本概念(线程通信和GLSurfaceView)

GLSurfaceView提供了下列特性:1> 管理一个surface,这个surface就是一块特殊的内存,能直接排版到android的视图view上。2> 管理一个EGL display,它能让opengl把内容渲染到上述的surface上。3> 用户自定义渲染器(render)。4> 让渲染器在独立的线程里运作,和UI线程分离。5> 支持按需渲染(o...

2016-09-18 12:27:00 176

原创 Java Math的 floor,round和ceil

floor 返回不大于的最大整数 round 则是4舍5入的计算,入的时候是到大于它的整数round方法,它表示“四舍五入”,算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下取整,所以,Math.round(11.5)的结果为12,Math.round(-11.5)的结果为-11。ceil 则是不小于他的最小整数

2016-09-18 12:21:39 1064

Java Math的 floor,round和ceil

floor 返回不大于的最大整数 round 则是4舍5入的计算,入的时候是到大于它的整数round方法,它表示“四舍五入”,算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下取整,所以,Math.round(11.5)的结果为12,Math.round(-11.5)的结果为-11。ceil 则是不小于他的最小整数 <script t...

2016-09-18 12:21:00 143

原创 android自定义View-继承

介绍anroid通过继承系统的控件自定义view方法是通过对OnDraw()方法进行复写来实现的举例继承TextView在textView的背景加上矩形的效果代码实现testView的代码public class TestView extends TextView { public TestView(Context context) { super(context);

2016-09-18 11:42:39 1374

原创 Android优化之ArrayMap

ArrayMap的介绍官方对ArrayMap也有说明:它不是一个适应大数据的数据结构,相比传统的HashMap速度要慢,因为查找方法是二分法,并且当你删除或者添加数据时,会对空间重新调整,在使用大量数据时,效率并不明显,低于50%。ArrayMap是牺牲时间换空间ArrayMap和HashMap的区别1.存储方式不同HashMap内部有一个HashMapEntry...

2016-09-11 15:53:06 2747

原创 Android优化之ArrayMap

ArrayMap的介绍官方对ArrayMap也有说明:它不是一个适应大数据的数据结构,相比传统的HashMap速度要慢,因为查找方法是二分法,并且当你删除或者添加数据时,会对空间重新调整,在使用大量数据时,效率并不明显,低于50%。ArrayMap是牺牲时间换空间ArrayMap和HashMap的区别1.存储方式不同HashMap内部有一个HashMapEntryarray...

2016-09-11 15:53:00 350

原创 Android的ANR详解(原因和方案)

ANR的定义在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择“等待”而让程序继续运行,也可以选择“强制关闭”。所以一个流畅的合理的应用程序中不能出现anr,而让用户每次都要处理这个对话框。因此,在程序里对响应性能的设计很重要,这样系统不会显示A...

2016-09-10 12:50:00 480

原创 Android Handler机制剖析

android的handler机制是android的线程通信的核心机制Android UI是线程不安全的,如果在子线程中尝试进行UI操作,程序就有可能会崩溃。Android中的实现了接收消息的“消息队列” ——【MessageQueue】阻塞式地从消息队列中接收消息并进行处理的“线程” ——【Thread+Looper】可发送的“消息的格式” ——【Message】“消息发...

2016-09-09 12:35:00 239

原创 Android Service详解

service作为四大组件值得我们的更多的关注在Android中,Activity主要负责前台页面的展示,Service主要负责需要长期运行的任务。例如,一个从service播放音乐的音乐播放器,应被设置为前台运行,因为用户会明确地注意它的运行.在状态栏中的通知可能会显示当前的歌曲并且允许用户启动一个activity来与音乐播放器交互。Service的两种实现形式1.非绑定通过调用应用程序组件(例如

2016-09-09 10:58:28 1563

原创 Android Service详解

service作为四大组件值得我们的更多的关注在Android中,Activity主要负责前台页面的展示,Service主要负责需要长期运行的任务。例如,一个从service播放音乐的音乐播放器,应被设置为前台运行,因为用户会明确地注意它的运行.在状态栏中的通知可能会显示当前的歌曲并且允许用户启动一个activity来与音乐播放器交互。Service的两种实现形式1.非绑定通过调用...

2016-09-09 10:58:00 207

原创 计算机9个基础知识点

1.编译型语言和解释型语言的区别编译型语言:编译是指在应用源程序执行之前,就将程序源代码“翻译”成目标代码(机器语言),因此其目标程序可以脱离其语言环境独立执行,使用比较方便、效率较高。但应用程序一旦需要修改,必须先修改源代码,再重新编译生成新的目标文件(* .OBJ)才能执行,只有目标文件而没有源代码,修改很不方便。现在大多数的编程语言都是编译型的。编译程序将源程序翻译成目标程序后保存在另一个文件

2016-09-08 21:37:36 2432

原创 计算机9个基础知识点

1.编译型语言和解释型语言的区别编译型语言:编译是指在应用源程序执行之前,就将程序源代码“翻译”成目标代码(机器语言),因此其目标程序可以脱离其语言环境独立执行,使用比较方便、效率较高。但应用程序一旦需要修改,必须先修改源代码,再重新编译生成新的目标文件(* .OBJ)才能执行,只有目标文件而没有源代码,修改很不方便。现在大多数的编程语言都是编译型的。编译程序将源程序翻译成目标程序后保存在...

2016-09-08 21:37:00 274

原创 希尔排序详解

概述希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。希尔排序是基于插入排序的以下两点性质而提出改进方法

2016-09-06 21:31:30 4053 2

原创 希尔排序详解

概述希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。希尔排序是基于插入排序的以下两点性质...

2016-09-06 21:31:00 439

原创 计算机10大基础知识点(一)

1.析构函数析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。以C++语言为例:析构函数名也应与类名相同,只是在函数名前面加一个位取反符~,例如~stud( ),以区别于构造函数。它不能带任何参数

2016-09-06 17:13:52 6172 2

原创 计算机10大基础知识点(一)

1.析构函数析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。以C++语言为例:析构函数名也应与类名相同,只是在函数名前面加一个位取反符~,例如~stud( ),以区别于构造函数。它不能...

2016-09-06 17:13:00 554

原创 最大流问题

举例描述最大流问题是一个很经典的问题,很多人对此也很熟悉,它能够等同于一个线性规划问题。下面给出最大流问题的一个基本描述:如下图所示,s是源点,t为汇点,每条边上数字的含义是边能够允许流过的最大流量。可以将边看成管道,0/3代表该管道每秒最多能通过3个单位的流量,0代表当前流量。最大流问题即是说,从s点到t点,最大允许流量是多少?公式描述 的流量等于流出该点的流量。这个可以理解为流量守恒,就如同电

2016-09-06 16:45:15 6561

最大流问题

举例描述最大流问题是一个很经典的问题,很多人对此也很熟悉,它能够等同于一个线性规划问题。下面给出最大流问题的一个基本描述:如下图所示,s是源点,t为汇点,每条边上数字的含义是边能够允许流过的最大流量。可以将边看成管道,0/3代表该管道每秒最多能通过3个单位的流量,0代表当前流量。最大流问题即是说,从s点到t点,最大允许流量是多少?公式描述的流量等于流出该点的流量。这个可以理...

2016-09-06 16:45:00 1388

原创 堆排序详解

概述堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值,即A[PARENT[i]] >= A[i]。在数组的非降序排序中,需要使用的就是大根堆,因为根据大根堆的要求可知,最大的值一定在堆顶。什么是堆?堆(...

2016-09-06 12:59:41 3390 4

原创 堆排序详解

概述堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值,即A[PARENT[i]] >= A[i]。在数组的非降序排序中,需要使用的就是大根堆,因为根据大根堆的要求可知,最大的值一定在堆顶。什么是堆?堆(二叉...

2016-09-06 12:59:00 497

原创 选择排序详解

概述选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。思想选择排序法的第一层循环从起始元素开始选到倒数第二个元素,主要是在每次进入的第二层循环之前,将外层循环的下标赋值给临时变量,接下来的第二层循环中,如果发现有比这个最小位置处的元素

2016-09-06 12:38:24 1712 1

原创 选择排序详解

概述选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。思想选择排序法的第一层循环从起始元素开始选到倒数第二个元素,主要是在每次进入的第二层循环之前,将外层循环的下标赋值给临时变量,接下来的第二层循环中,如果发现有比这个最...

2016-09-06 12:38:00 199

原创 插入排序详解

概述有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。基本思想插入排序的基本思想是:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适

2016-09-06 12:01:58 1519 3

原创 插入排序详解

概述有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。基本思想插入排序的基本思想是:每步将一个待排序的纪录,按其关键码值的大小插入前面已经...

2016-09-06 12:01:00 178

原创 二叉树的性质

二叉树概述在计算机科学中,二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。性质概述二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2^{i-1}个结点;深度为k的二叉树至多有2^k-1个结点;对任何一棵二叉树

2016-09-06 11:10:23 1803 2

原创 哈夫曼树和哈夫曼编码

哈夫曼树给定n个权值作为n的叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。基本概念哈夫曼树(霍夫曼树)又称为最优树.1、路径和路径长度在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点

2016-09-04 11:56:45 1872

原创 操作系统基础(一)

操作系统把CPU的时间片分配给用户进程,再由用户进程的管理器将时间分配给用户线程。那么,用户进程能得到的时间片即为所有用户线程共享虚拟存储器的最大容量 = min(内存+外存,2^n)。n为计算机的地址总线位数。1.多道批处理 系统在单道批处理系统中,内存中仅有一道作业,它无法充分利用系统中的所有资源,致使系统性能较差。 在多道批处理系统中,用户所提交的作业都先存放在外存上并排成一个队列,称为“

2016-09-04 02:31:22 1376

原创 操作系统基础(一)

操作系统把CPU的时间片分配给用户进程,再由用户进程的管理器将时间分配给用户线程。那么,用户进程能得到的时间片即为所有用户线程共享虚拟存储器的最大容量 = min(内存+外存,2^n)。n为计算机的地址总线位数。1.多道批处理 系统在单道批处理系统中,内存中仅有一道作业,它无法充分利用系统中的所有资源,致使系统性能较差。在多道批处理系统中,用户所提交的作业都先存放在外存上并排成一个队...

2016-09-04 02:31:00 189

深入理解Java虚拟机——JVM高级特性与最佳实践(第2版

深入理解Java虚拟机——JVM高级特性与最佳实践(第2版).pdf,完整,带书签, 完整版

2017-11-03

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除