自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

xuguoli_beyondboy的专栏

只要笑一笑,没什么过不了。

  • 博客(123)
  • 资源 (5)
  • 收藏
  • 关注

原创 Weex之Android端的浅析(一)

基本介绍:体验了一下weex,发现weex语法还挺简单,上手容易,发现自己没什么前端知识,也能极易上手,出于强烈好奇和业务预研的需要,分析了其Android端的Weex Sdk一些源码. 先从WXSDKManager入手后,画出其结构图如图: IWXUserTrackAdapter:用来处理日志信息接口,常常拿来做一些用户埋点统计. IWXImgLoaderAdapter:用来处理View

2016-11-10 17:51:59 7576 4

原创 Android触屏事件处理流程浅析

在android触屏事件中,我们经常会碰到onclick(),onTouch(),onTouchEven()等方法,那谁会先执行,执行顺序又是怎么样呢?View的触屏事件处理为弄清除上面那些,首先从源码入手,看看其整个触屏事件分发的过程. 先从dispatchTouchEvent()分析:/** * Pass the touch screen motion event down to t

2016-11-01 22:16:24 2908

原创 Android的类加载浅析

类加载流程在周志明写的<<深入理解java虚拟机的一本书中>>已经详细地介绍java加载类过程,在HotSpot虚拟机实现中是通过双亲委派机制来加载类的,那么android又如何实现呢?在android系统中,有两种常见的加载器实现:DexClassLoader和PathClassLoader,其都继承了BaseDexClassLoader,而BaseDexClassLoader也继承了java的C

2016-09-29 11:37:49 3636

原创 Android View的滑动

view的位置参数view的位置中,经常会碰到几个获取位置参数方法,如getX(),getScrollX,getLeft()等,在View绘制过程中,其位置是由四个顶点来决定,其分别是top,left,right,bottom,但需的注意的一点是:其位置是相对于父容器,而不是相对于屏幕的,就如下图: 在获取view的宽和高,通常会调用getWidth()和getHeight()两个方法,从源码

2016-09-11 14:55:55 621

原创 Binder机制(一)

binder的介绍:由于不同的进程不可以直接互相访问,所以需要一些机制来确保进程间能够通信,在linxu中,有以下几种: 1.管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。 2.信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,

2016-02-26 02:03:58 1873

原创 安卓智能指针

为什么要安卓智能指针在安卓系统中,为提高运行效率,其框架中间层很多是采用c++和c语言去实现的,在这实现过程,必定会应用不少地指针操作,同时c++和c不想Java那样有垃圾自动回收功能,因此会使程序员在某些操作常常遇到一些如下的问题:忘记指针初始化,这是指针在程序执行过程中,会随机指向某个地址,一旦这个地址是程序或系统核心部分,容易引起数据错误或系统崩溃等错误(这个问题很好解决,将指针默认设置为n

2016-02-04 00:56:41 892

原创 AsyncTask源码分析

AsyncTask的使用介绍:AsyncTask从Build.VERSION_CODES#HONEYCOMB 开始默认的执行方式是单个线程串行执行任务,而不是多个线程并发执行,如果要多个线程并发执行任务,可以调用executeOnExecutor()方法,并传入其自带的THREAD_POOL_EXECUTOR字段,该类异步操作适合较短的耗时操作,官方例子如下:/**泛型分别是代表oInBackgro

2016-01-29 00:40:57 550

原创 指针,数组,引用之间的不同点

指针和数组的区别:数组整数变量加1,其值将增加1,,但将指针变量加1后,增加的量等于它指向的类型的字节数。指针的值可以修改,而数组名是常量不可以修改。对数组应用sizeof运算符得到的是数组的长度,而对指针应用sizeof得到的是指针的长度。对数组取地址时,数组名也不会被解释为其地址,short tell[10] 的&tell[0] 是一个2字节内存快的地址,而&tell 是一个20字节内存

2016-01-27 13:51:59 1308

原创 Android Espresso单元测试

Espresso介绍在Android单元测试中,谷歌官方推荐使用Espresso框架,根据谷歌官方介绍,Espresso的最关键的优势就是它能自动同步模拟行为对UI的测试,它能够检测到主线程空闲状态的时候,以便在适当的时候运行你的测试代码或命令,这样你就没必要通过sleep去让主线程睡眠的方式去同步测试。说白了就是Espresso框架测试app不会通过阻塞主线程去同步UI测试。 Espresso有

2016-01-07 15:17:59 5172 4

原创 HandlerThread类应用

通常AsyncTask和Handler都是为异步更新UI而诞生的两个类,只是AsyncTask是一个封装后的后台任务类,是方便大家简单处理异步任务后更新UI的操作(如短时间异步任务操作),但它并不适合处理所有的后台异步任务操作,它也存在一下几点问题:当它在Activity或Fragment作为非静态内部类,一旦它创建了实例,它就会引用了外部类的Activity或Fragment实例,如果这个Asy

2015-12-28 15:07:02 552

原创 Handler,MessageQueue,Runnable与Looper

三者关系Handler是处理消息或发送消息,MessageQueue存储消息,Runnable安排执行任务,Looper循环MessageQueue消息队列,并取出消息到给制定Handler处理。其三者具体关系如下:每个Thread只对应一个Looper。每个Looper只对应一个MessageQueue。每个MessageQueue中有N个Message。每个Message中最多指定一个H

2015-12-27 16:51:05 1042

原创 android内存管理(三)

垃圾内存回收算法在垃圾内存回收算法中,我们常见的垃圾回收算法有引用计数法(Reference Counting)、标注并清理(Mark and Sweep GC)、拷贝(Copying GC)和逐代回收(Generational GC)等算法。 引用计数回收法: 记录每个对象被引用的次数。每当创建一个新的对象,或者将其它指针指向该对象时,引用计数都会累加一次;而每当将指向对象的指针移除时,引用计

2015-12-22 21:55:34 825

原创 android内存管理(二)

匿名内存共享匿名内存简单介绍 Anonymous Shared Memory是Android特有的内存共享机制,它是基于linxus共享内存而改进的,它可以将指定的物理内存分别映射到各个进程自己的虚拟的地址空间中,从而便捷地实现进程间的内存共享。 关于linxus的进程间内存共享通讯的简单介绍及实例,请参考下面这两篇博客: http://blog.csdn.net/ljianhui/ar

2015-12-12 16:29:05 601

原创 android内存管理(一)

虚拟内存如果在程序被挂起或被换出前仅仅使用了一部分进程快,那么为该进程给内存中装入太多的块显然会带来巨大的浪费。而虚拟内存借助磁盘和内存交换,仅仅装入这小部分块来更好地使用内存,然后,如果程序转移到或访问到不在内存中的某个快中的指令或数据时,就会引发一个中断,告诉操作系统读取需要的块。 我们知道进程中的所有内存访问都是逻辑地址,这些逻辑地址在运行时动态的被转换成物理地址,而这意味着一个进程

2015-12-08 18:27:28 1801

原创 静态散列

散列基础知识在静态散列方法中,把标识存储在一个固定大小的表中,使用一个函数f确定标识符x在散列表中的地址(或位置),散列表ht存放在一片连续的内容空间中,该空间被分割为b个散列通:ht[0],….,ht[b-1],每个散列桶可以初始化s个槽,如果s=1,就意味着每个散列桶恰好可容纳一个记录。 如: 标识符的长度限定为6个字符,且第一个字符必须是字母,其余的字符可以是字母也可以是数字,那么,标识符

2015-11-18 14:42:54 2815

原创 HCI二轮面试任务

首先恭喜各位能顺利进入HCI的二轮面试,根据二轮面试要求,需要大家通过自学的方式去做个小小的项目,时间为一个星期(不用担心自己能不能做好,尽力而为去做,千万不要直接抄袭,如果你看懂人家的实现,可以去抄袭人家,因为这轮面试主要考察大家的自学能力,以及一个星期能学习多少东西),做完之后,记得在面试那天,你的安卓手机要装上你的做个小项目(不管做的怎么样),如果没有安装安卓手机可以装,麻烦发小项目的软件安装

2015-11-17 21:41:51 1154

原创 求二进制数中1的个数

对于一个字节(8bit)的变量,求其二进制表示中”1”的个数,要求算法的执行效率尽可能的高。 这道题看似简单,但对于这道题作者却给了出五中解法。 解法一:每次求余,看余数是否为1,如果是的话就累计加一,然后再除以2,重复以上步骤,直到为0,最后这个结果就是二进制表示中1的个数。//求余统计二进制数中1的个数int Count(unsigned char v){ int num=0;

2015-11-15 21:30:19 1575 1

原创 基数排序

基数排序是把一个逻辑关键字看成是由多个关键字组合而成的,并且一步一步地按每个关键字排号顺序,如把这些关键字记为:K0K^0,K1K^1,…,Kr−1K^{r-1},其中K0K^0为该记录中最高有效关键字,而Kr−1K^{r-1}为最低有效关键字。如果从最高有效关键字开始排序成为MSD排序,如果从最低有效关键字开始排序成为LSD排序。 例如,一个整数由若干位组成,且各位都有次序的,从而使其最右边的数

2015-11-14 20:11:18 1801

原创 归并排序

在归并排序的迭代算法中,可以把输入序列看成是个n个已排序序列,其中每个序列的长度为1,将这些序列两两归并就得到了 n/2个长度为2的序列(如果n为奇数,则有一个序列长度为1),然后对这n/2这个序列进行两两归并,依次类推,直到只剩下一个序列为止。 归并排序是在输入记录上执行若干遍归并,其中第一遍归并的是长度为1的子序列,第二遍归并的是长度为2的子序列,而第i遍归并的是长度为2i−12^{i-1}

2015-11-14 11:03:46 1417

原创 走进HCI这个家

很多人估计是没听说过HCI这个家吧,HCI这个家它曾经很辉煌,曾经很响亮,但它一直很低调,没有大力宣传自己,但每年却有1/3-1/4左右的成员从这个家从来以后就奔向IT女神,男神 ——BTA等大公司,哇,那它到底是一个什么家,又如何培养一批又一批的优秀成员呢?现在就让小喽啰来带你走进HCI这个家吧。HCI简介人机交互工作室创建于2004年,由华南农业大学的计算机和编程爱好者组成,以项目驱动的方式为学

2015-10-31 14:41:53 1537

原创 快速排序

快速排序根据整个文件,把控制当前排序进程的基准关键字放在正确的位置上,在快速排序总,如果把关键字k1k_1放置在位置s(i)s(i)处,那么,当j<s(i)s(i)时,则有kj<=ks(i)k_j<=k_{s(i)},而j>s(i)s(i)时,则有kj>=ks(i)k_j>=k_{s(i)},因此,当把基准关键字放置在此位置上后,原来的文件被划分为两个子文件,其中的一个文件包含记录R0R_0,…,R

2015-10-27 14:09:28 1600

原创 插入排序

初始时,有序序列为R0R_0,有序序列R0R_0,然后依次插入R1R_1,R2R_2,…,Rn−1R_{n-1},由于每次插入都使得结果序列是有序,故叫插入排序,其实时间复杂度:O(∑i=0n−1i)=O(n2)O(\sum\limits_{i = 0}^{n - 1} i ) = O({n^2}). 假定n=5,且输入序列为(5,4,3,2,1),每次插入后的情况如下: i [0]

2015-10-27 12:58:45 535

原创 顺序查找

假定有一个表list和一个待查找关键字searchnum,要找到表中关键字与 searchnum相匹配的记录,如果表中list有n个记录,且list[i].key表示记录i的关键字值,可以通过依次检查关键字值list[0].key,list[1].key,…list[n-1].key对其进行查找 ,直至找到该记录所在位置,或者检查完表中全部记录为止,这种方式就叫顺序查找,时间复杂度:∑i=0n−1(

2015-10-26 14:20:46 785

原创 表验证

通常,我们需要比较表来验证他们是否相同,或者找出相异的元素,因此表验证问题实际上就是把一个表的每个关键字作为待查关键字,对另一个表进行重复查找,这里可以用随机表和有序表来设计表验证算法,假设有两个表list1和list2,其关键字分别为list1[i].key, 0<=i<=n和list2[i].key,0<= j//随机验证表算法void verify1(element list1[],elem

2015-10-26 14:18:00 599

原创 二分法查找(折半查找)

顺序查找并没有对表中的关键字域的顺序做出任何假设,与顺序查找不同,在折半查找中,表中的记录是按关键字域有序排列的,其比较会出现下面三种结果: searchumn< list[middle].key,此时,无需考虑位于list[middle]和list[n-1]之间的记录,而继续查找位于list[0]和list[middle-1]间的记录。searchnum=list[middle].key,此时

2015-10-26 13:18:23 2097

原创 最小生成树

一颗带权无向图的生成树的代价是该生成树中所有边的代价之和,最小代价生成树就是一颗代价最小的生成树,构建无向图的最小生成树就是采用贪心算法,不过对于最小生成树问题,需满足以下约束条件:只能使用图中的边只能使用恰好n-1条边不能使用产生环路的边 Kruskal算法通过每次向当前最小代价生成树T中加入一条边的方法构成最终的最小生成树T,算法按照边的代价非递减的顺序选取,并加入T中,如果所选取的边与

2015-10-24 13:27:22 730

原创 生成树

生成树:如果连通图G的一个子图是一棵包含G的所有顶点的树,则该子图称为G的生成树(SpanningTree)。 生成树是连通图的包含图中的所有顶点的极小连通子图,图的生成树不惟一(极小子图是指边数最少的子图,任意一个具有n个顶点的连通图至少含有n-1条边,具有n-1条边的连通图必是一棵树,因此n个顶点的生成树包含n-1条边),从不同的顶点出发进行遍历,可以得到不同的生成树,当采用深度搜索构造生成

2015-09-30 10:53:26 2830 3

原创 不要被阶乘吓到

编程之美有一道关于阶乘的题目: 1给定一个整数N,那么N的阶乘等于N!,末尾有多少个0呢,例如N=10,N!=3628800,N!的末尾有两个0 2求N!的二进制表示中最低位为1的位置。 阶乘定义: **n!={1n(n−1)!n=0n>0∀n∈Nn! = \left\{ {\begin{array}{*{20}c} 1 \\ {n(n - 1)!} \\\end{ar

2015-09-22 00:49:07 1452

原创 图的深度优先搜索和广度优先搜索

深度优先搜索首先访问起始顶点v,这里假设访问只是输出结点所对应的顶点序号字段,然后,从顶点v的邻接表中选取一个未访问过的顶点w进行访问,并从w开始继续进行深度优先搜索,将v的邻接表中的当前位置保存在一个栈中,当最终搜索到一个顶点u,且u的邻接表中的顶点全部被访问过时,就从栈中取出一个顶点,并按照上述方法处理该顶点的邻接表,整个过程类似树的前序遍历。 图G的结构图和邻接表图: 其图深度搜

2015-09-21 16:26:27 1470

原创

完全图是具有最多边数的图,一个具有n个顶点的完全无向图,其边数为n(n-1)/2,而一个具有n个顶点的完全有向图,其边数为n(n-1). 一条简单路径是指路劲上除了起点和终点可能相同外,其余顶点都互不相同。 在无向图G中,如果从顶点v0到v1存在一条路径,则称顶点v0和v1是连通的,如果无向图G中的每对顶点vi和vj,都存在一条从vi到vj的路劲,则称无向图G是连通的。 在有向图G中,如果每对

2015-09-20 14:39:50 1095

原创 构造数独

编程之美有一道关于深度搜索和回溯应用的题目——构造数独: 数独的棋盘是由九九八十一个小方格组成的。玩家在每个小格子中,分别天上1至9的任意一个数字,让整个棋盘每一行,每一列,以及每一个3*3的小矩阵中的数字都不重复。 作者给两种解法: 解法一: 下面的GenerateValidMatrix()函数用经典的深度优先搜索来生成一个可行解。从(0,0)开始,对没有处理过的格子,调用GetValid

2015-09-13 14:03:56 1636

原创 森林

森林是n>=0个互不相交的树的集合,如:二叉树删除一个根,就可以转换为森林。 如果T1,….Tn是一个森林,则对应于该森林的二叉树记为B(T1,…..,Tn),那么就有以下定义: 若n=0,森林就为空。 根为森林中第一颗树T1的根,左子树是B(T11,T12,…..,T1n),其中T11,T12,…..,T1n是T1根的所有子树,右子树是B(T2,…..,Tn)。 如: 因此森林的

2015-09-09 19:19:45 2043 1

原创 二叉查找树

虽然在需要优先级队列的应用程序中,堆非常合适,但它并不适用删除任意元素的应用,从具有n个元素的堆中删除任意元素的时间开销为O(n),并且查询任意元素的时间开销也是O(n),因此当进行插入,删除和查找操作,二叉查找树的性能就非常的适合。 二叉查找树,具有如下性质:每个元素都有关键字,任意两个元素的关键字都不相同,即,关键字是唯一的。非空左子树的关键字值一定小于其子树根结点的关键字值。非空右子树

2015-09-08 09:12:18 1054

原创 求数组中最长递增子序列

编程之美有一道关于数组中最长递增子序列,题目如下: 写一个时间复杂度尽可能低的程序,求一个一维数组(N个元素)中最长递增子序列的长度。 例如在序列1,-1,2,-3,4,-5,6,-7中,其最长的递增子序列的长度为4(如1,2,4,6),从该书给的例子我们可以知道的是其最长的递增子序列可以不连续的。 作者利用动态规划方法给了三种解法。 解法一: 根据无后效

2015-09-07 16:43:04 3760 1

原创 HTTP网络协议(五)

主动攻击:是指攻击通过直接访问Web应用,把攻击代码传入的攻击模式,该模式是直接针对服务器上的资源进行攻击,因此攻击者需要能够访问到那些资源,例如:SQL注入攻击和OS命令注入攻击。 被动攻击:是指利用圈套策略执行攻击代码的攻击模式,在被动攻击过程中,攻击者不直接对目标Web应用访问发起攻击,例如:跨站脚本攻击和跨站点请求伪造。 被动攻击模式大致步骤:攻击者诱使用户触发已设置好的陷阱,而陷阱会

2015-09-06 17:09:15 1402

原创

最大堆:是指在一颗完全二叉树中,一个结点的关键值都不小于其儿子结点的关键字值,既满足(parent.value>=parent->left_child.value&&parent.value>=parent->right_child.value.). 最小堆:是指在一颗完全二叉树中,一个结点的关键值都不大于其儿子结点的关键字值,既满足(parent->left_child.value>=paren

2015-09-03 02:09:06 906

原创 HTTP网络协议(四)

确保Web安全的HTTPSHTTP存在三个比较明显的缺点:通信使用明文(不加密),内容可能会被窃听。不验证通信方的身份,因此有可能遭遇伪装。无法证明报文的完整性,所以可能已遭篡改。 尽管HTTP协议中没有加密机制,但可以通过和SSL或TLS的组合使用加密HTTP的通信内容,组合在一起通常被称为HTTPS。 HTTP协议在通信过程会存在以下隐患:无法确定请求发送至目标的Web服务器是否是按

2015-09-02 20:34:36 1925

原创 寻找最大的K个数

编程之美有一道考察多种排序的题目,题目如下: 有一个长度为N的无序数组,假定其中的每一个元素都各不相等,求其中最大的K个数。 作者对于此题目结合各种排序算法给出了五种解法思路。 解法一: 使用快速排序或堆排序对它们元素进行排序,整个排序的时间复杂度为O(N*log2{log}_2N),然后取出前K个,时间复杂度为O(K),总时间复杂度O(N*log2{log}_2N)+O(K)=O(N*l

2015-09-02 01:57:45 1339

原创 线索二叉树

二叉树在连接存储表示中,空链的数目是大于非空链的数目,即在2n个空链中,有n+1个是空链,如果利用这些空链来指向二叉树其他结点的指针,这结点称为线索,具体建立线索树过程:如果结点的左儿子ptr->left_child为空,则在中序遍历中,用指向在ptr之前访问的结点的指针代替ptr->left_child,即用指向ptr的中序遍历的前驱结点的指针代替空链。如果结点的右儿子ptr->right_c

2015-08-31 16:53:33 744

原创 二叉树的其他操作

二叉树一个较实用的操作就是二叉树的复制,而二叉树的复制可以在后序遍历基础上实现。 代码实现://二叉树的复制操作tree_pointer copy(tree_pointer original){ if(original) { tree_pointer temp=(tree_pointer)malloc(sizeof(node)); if(IS_FULL(te

2015-08-31 14:08:45 535

汇编36选7期末作业

这是汇编36选7的期末作业,功能特色:就是利用系统时钟产生随机数,并且利用延时来逐渐显示数字。

2015-06-29

计算机组成原理8位CPU

计算组成原理由16位CPU实验改成8CPU实验的代码和其报告

2015-06-26

华南农业大学Java课程设计

该Java课程设计实现学生分数的3D图形统计及分析,表格有颜色区分及格和不及格分数,自动输入分数等级,自动排序等功能。

2015-06-25

Android 反编译工具

具体教程请看百度或谷歌,这是Android反编译工具,对于刚学习反编译的人来说,工具少不了,如何利用好这个工具,请按照人家的博客或文章来操作。

2014-08-03

Android 开发精要

这是典型的Android开发精要,对初学者可以起到进阶的作用,值得一看。

2014-08-03

空空如也

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

TA关注的人

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