
原创
文章平均质量分 78
xhmj12
一个码农,技术公众号:开发者全社区(JANiubility)
展开
-
快速排序算法
每次排序的时候设置一个基准点,将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数全部放到基准点的右边。此时我们已经将原来的序列,以6为分界点拆分成了两个序列,左边的序列是“3 1 2 5 4”,右边的序列是“9 7 10 8”。回顾一下刚才的过程,其实哨兵j的使命就是要找小于基准数的数,而哨兵i的使命就是要找大于基准数的数,直到i和j碰头为止。细心的同学可能已经发现,快速排序的每一轮处理其实就是将这一轮的基准数归位,直到所有的数都归位为止,排序就结束了。现在交换哨兵i和哨兵j所指向的元素的值。原创 2023-04-04 18:38:06 · 392 阅读 · 0 评论 -
Android动态加载基础 ClassLoader工作机制
基本信息 作者:kaedea 项目:android-dynamical-loading 类加载器ClassLoader早期使用过Eclipse等Java编写的软件的同学可能比较熟悉,Eclipse可以加载许多第三方的插件(或者叫扩展),这就是动态加载。这些插件大多是一些Jar包,而使用插件其实就是动态加载Jar包里的Class进行工作。这其实非常好理解,Java代码都是写在...原创 2018-10-25 17:42:51 · 210 阅读 · 0 评论 -
热修复——深入浅出原理与实现
一、简述热修复无疑是这2年较火的新技术,是作为安卓工程师必学的技能之一。在热修复出现之前,一个已经上线的app中如果出现了bug,即使是一个非常小的bug,不及时更新的话有可能存在风险,若要及时更新就得将app重新打包发布到应用市场后,让用户再一次下载,这样就大大降低了用户体验,当热修复出现之后,这样的问题就不再是问题了。目前较火的热修复方案大致分为两派,分别是:阿里系:DeXposed...转载 2018-10-26 11:52:02 · 256 阅读 · 0 评论 -
阿里Android热修复技术选型——三大流派解析
2015年以来,Android开发领域里对热修复技术的讨论和分享越来越多,同时也出现了一些不同的解决方案,如QQ空间补丁方案、阿里AndFix以及微信Tinker,它们在原理各有不同,适用场景各异,到底采用哪种方案,是开发者比较头疼的问题。本文希望通过介绍QQ空间补丁、Tinker以及基于AndFix的阿里百川HotFix技术的原理分析和横向比较,帮助开发者更深入了解热修复方案。技术背景原创 2016-09-19 11:55:54 · 940 阅读 · 0 评论 -
【转】Android 插件化和热修复知识梳理
概述在Android开发中,插件化和热修复的话题越来越多的被大家提及,同时随着技术的迭代,各种框架的发展更新,插件化和热修复的框架似乎已经日趋成熟,许多开发者也把这两项技术运用到实际开发协作和正式的产品当中。因此,我们势必需要了解一下这两门技术。插件化和热修复首先需要明确的一点,插件化和热修复不是同一个概念,虽然站在技术实现的角度来说,他们都是从系统加载器的角度出发,无论是采用hook...转载 2018-08-01 17:48:39 · 251 阅读 · 0 评论 -
Android客户端插件化热修复各种方案对比和最全总结
原文链接:Android客户端插件化热修复各种方案对比和最全总结2016年不能扯几句热修复和插件化都不好意思说自己是做 Android 的,虽然我对这个技术不怎么感兴趣,奈何业务需要也得深入的研究一下,本文记录我对热修复的插件化的学习和研究。技术背景插件化解决的问题减小主包大小不发版上新功能独立开发加载 A/B原创 2016-11-14 10:55:15 · 5665 阅读 · 1 评论 -
Android动态加载技术 简单易懂的介绍方式
Android插件化原创 2016-08-12 14:09:19 · 648 阅读 · 0 评论 -
Binder 原理剖析
一. 前言这篇文章我酝酿了很久,参考了很多资料,读了很多源码,却依旧不敢下笔。生怕自己理解上还有偏差,对大家造成误解,贻笑大方。又怕自己理解不够透彻,无法用清晰直白的文字准确的表达出 Binder 的设计精髓。直到今天提笔写作时还依旧战战兢兢。Binder 之复杂远远不是一篇文章就能说清楚的,本文想站在一个更高的维度来俯瞰 Binder 的设计,最终帮助大家形成一个完整的概念。对于应用层开...原创 2018-09-06 16:28:06 · 265 阅读 · 0 评论 -
Binder学习指南--Binder原理最通俗易懂的讲解,这篇文章就够了
转自:http://weishu.me/2016/01/12/binder-index-for-newer/ 毫不夸张地说,Binder是Android系统中最重要的特性之一;正如其名“粘合剂”所喻,它是系统间各个组件的桥梁,Android系统的开放式设计也很大程度上得益于这种及其方便的跨进程通信机制。理解Binder对于理解整个Android系统有着非常重要的作用,An...原创 2018-03-29 14:36:18 · 1050 阅读 · 0 评论 -
Creating Custom Views
翻译自:file:///Users/baidu/android-sdk/docs/training/custom-views/index.html 产生自定义View Android框架已提供了大量的View类用于和用户交互和展示各种类型的数据。但是有时你的app可能有内置的View无法满足的特定需求。这篇文章将告诉你如何产生具有鲁棒性和可复用的自定义...原创 2015-09-30 12:03:15 · 578 阅读 · 1 评论 -
Android Handler和HandlerThread
Handler的官方解释如下: A Handler allows you to send and process Message and Runnable objects associated with a thread's MessageQueue.Each Handler instance is associated with a si...原创 2014-10-28 20:08:39 · 509 阅读 · 1 评论 -
Android系统启动流程
Android系统启动过程及APP的启动过程原创 2022-12-02 16:06:19 · 6526 阅读 · 0 评论 -
JDK1.5中的线程池(java.util.concurrent.ThreadPoolExecutor)使用简介
在多线程大师Doug Lea的贡献下,在JDK1.5中加入了许多对并发特性的支持,例如:线程池。 一、简介 线程池类为 java.util.concurrent.ThreadPoolExecutor,常用构造方法为: ThreadPoolExecutor(int corePoolSize, int maxim...原创 2015-07-15 17:03:04 · 461 阅读 · 0 评论 -
设计模式之策略模式
先看设计模式的定义: 策略模式(Strategy Pattern):定义了算法族,分别封装起来,让它们之间可相互替换,次模式让算法的变化独立于使用算法的客户。 举个例子,大家应该都玩过武侠角色游戏,下面就以角色游戏为背景来介绍。假设公司需要做一款武侠游戏的角色模块,需求是这样:每个角色对应一个名字,每类角色对应一种样子,每个角色拥有一个逃跑...原创 2015-08-31 20:15:56 · 116 阅读 · 0 评论 -
设计模式之单例详解
单例模式是一种常见的设计模式,我们也知道单例模式有如下几种实现形式: 1.最简单的实现---饿汉式 注:如上标红所示,写一个单例(不管什么形式),主要注意点如下几点: 1.成员变量 single 要声明成静态的(static),因为需要在静态方法getInstance()中访问...原创 2015-03-30 14:06:17 · 151 阅读 · 0 评论 -
设计模式之观察者模式
观察者模式又称为发布—订阅Subscriblem模式。 观察者模式(Obsrever)完美的将观察者和被观察的对象分离开。举个例子,用户界面可以作为一个观察者,业务数据是被观察者,用户界面观察业务数据的变化,发现数据变化后,就显示在界面上。面向对象涉及的一个原则是:单一职责原则。系统中的每个类将重点放在一个功能上,而不是其他方面。一个对象只做一件事,并且...原创 2015-05-18 20:58:08 · 306 阅读 · 0 评论 -
设计模式之单例详解
设计模式之单例详解(面试必备)原创 2016-04-27 13:38:09 · 875 阅读 · 2 评论 -
设计模式之Adapter
Adapter设计模式 在设计模式里,适配器模式(Adapter pattern)是将一个类的接口转换成用户所期待的。一个适配使得因接口不兼容而不能在一起的工作的类工作在一起。做法是将有别与自己的接口包裹在一个已存在的类中。 如果你有一个存在的系统需要插入一个新的类库,但是新的类库并不能匹配你写的系统,如下图: ...原创 2015-05-12 15:02:14 · 392 阅读 · 0 评论 -
设计模式之Adapter
在设计模式里,适配器模式(Adapter pattern)是将一个类的接口转换成用户所期待的。一个适配使得因接口不兼容而不能在一起的工作的类工作在一起。做法是将有别与自己的接口包裹在一个已存在的类中。原创 2016-04-28 15:46:11 · 724 阅读 · 0 评论 -
设计模式之模板方法模式
参见:http://xhmj12.blogspot.com/2015/05/design-patterntemplate-method-pattern.html 模板方法(Template Method)设计模式 模板方法模式定义如下: Template Method Pattern: Define the...原创 2015-05-17 19:09:57 · 129 阅读 · 0 评论 -
冒泡排序
冒泡排序(Bubble Sort),是计算机科学领域的一种较简单的排序算法。 它重复走访要排序的数列,一次比较两个元素。 这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端,故名。 如上图,为一趟冒泡排序的过程和结果,从中我们可以总结冒牌排序特点如下: ...原创 2014-05-27 21:14:05 · 141 阅读 · 0 评论 -
选择排序
每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 算法描述 比如在一个长度为N的无序数组中,在第一趟遍历N个数据,找出其中最小的数值和第一个元素交换,第二趟遍历剩下的N-1个数据,找出其中最小的数值和第二个元素交换......第N-1趟遍历剩下的2个数据,找出其中...原创 2014-05-29 17:54:16 · 139 阅读 · 0 评论 -
二叉树的遍历
二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有前序、中序以及后序三种遍历方法。因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁。而对于树的遍历若采用非递归的方法,就要采用栈去模拟实现。在三种遍历中,前序和中序遍历的非递归算法都很容易实现,非递归后序遍历实现起来相对来说要难一点。 ...原创 2014-05-20 16:17:50 · 178 阅读 · 0 评论 -
算法之斐波拉契数列算法研究
1.我们计算斐波拉契数列,最常用的一种就是使用递归,如下所示: 一次运行结果为:2.备忘录算法实现裴波那契数列问题 一次运行结果为: 3. 动态规划算法实现裴波那契数列(非递归实现)一次运行结果:动态规划算法是通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推(或者说分治)的方式去解决。 [1] 动态规划算法的基本思想与分治法类似,也...原创 2018-07-21 21:05:06 · 356 阅读 · 0 评论 -
Fibonacci数列实现
我们知道Fibonacci的定义如下: 结果为:fibonacci: 0 1 1 2 3 5 8 13 21 34 55 89 .... 而编程实现该数列有两种方式:一种是递归实现;一种是非递归实现。而这类问题典型的实现是递归实现。如下所示: 1.递归实现 ...原创 2015-03-30 14:59:17 · 271 阅读 · 0 评论 -
归并排序
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 首先考虑下如何将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。 代码如下...原创 2014-06-04 16:26:37 · 147 阅读 · 0 评论 -
Java实现单链表反转操作
单链表是一种常见的数据结构,由一个个节点通过指针方式连接而成,每个节点由两部分组成:一是数据域,用于存储节点数据。二是指针域,用于存储下一个节点的地址。在Java中定义如下:public class Node { private Object data;//数据域 private Node next;//指针域 public Node(Object...原创 2019-05-08 17:28:00 · 265 阅读 · 0 评论 -
异或运算及其在算法中的运用
1.异或的定义异或的定义如下:只有在两个比较的位不同时其结果是1,否则结果为0即“两个输入相同时为0,不同则为1”! 输入 运算符 输入 结果 1 ⊕ 0 1 1 ⊕ ...原创 2018-07-19 14:21:16 · 7489 阅读 · 0 评论 -
算法之冒泡排序
冒泡排序(Bubble Sort),是计算机科学领域的一种较简单的排序算法。 它重复走访要排序的数列,一次比较两个元素。 这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端,故名。原创 2016-04-28 13:39:12 · 808 阅读 · 0 评论 -
插入排序算法
有一个已经有序的数据序列,要求在这个已经排好序的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法。 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序。 如下图所示: 算法描述 ...原创 2014-05-30 11:39:25 · 203 阅读 · 0 评论