自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(74)
  • 资源 (23)
  • 收藏
  • 关注

原创 Android中的ViewRootImpl类源码解析

转载请注明出处http://blog.csdn.net/qianhaifeng2012/article/details/51737370请支持原创ViewRoot目前这个类已经没有了,是老版本中的一个类,在Android2.2以后用ViewRootImpl代替ViewRoot,对应于ViewRootImpl.java,他是链接WindowManager和DecorView的纽带,另...

2016-06-22 22:33:25 11171 15

原创 插件接入模式

1、实现快速接入2、按需接入3、解耦

2022-01-22 23:47:21 269

原创 CAP理论概述

在分布式系统中,我们经常听到CAP原理这个词,它是什么意思呢?其实和C、A、P这3个字母有关,C、A、P分别是这3个词的首字母。下面我们就看一下这3个词分别是什么意思?C - Consistent ,一致性。具体是指,操作成功以后,所有的节点,在同一时间,看到的数据都是完全一致的。所以,一致性,说的就是数据一致性。A - Availability ,可用性。指服务一致可用,在规定的时间内完成响应。P - Partition tolerance ,分区容错性。指分布式系统在遇到某节点或网络分区故障...

2021-05-17 20:16:43 176

原创 LeetCode

树94 二叉树的中序遍历 (DFS)95. 不同的二叉搜索树 II96. 不同的二叉搜索树99. 恢复二叉搜索树102 二叉树的层序遍历 (BFS)103 二叉树的锯齿形状遍历 (BFS)145 二叉树的后续遍历 (DFS)数组03 数组中的重复数04 寻找两个有序数组的中位数11 盛水最多的容器15 三数之和31 下一个排列链表19 删除链表的倒数第N个节点21. 合并两个有序链表...

2021-05-11 16:43:19 165

原创 状态

2017-09-24 14:48:39 353

原创 Android头像加载框架

好久没更新博客,最近在完成实习任务,自己研究出了一套头像加载机制,虽然谈不上高大上,但是使用起来确实比较方便,可以用在任何Android应用中需要头像的地方。先说一下这个头像加载的思路:      首先加载本地      如果本地加载成功           检查本地头像是不是最新的,如果是最新的,不操作,如果不是最新的,加载网络最新      如果本地加载失败

2016-11-06 14:22:57 3871 2

转载 MySQL 性能优化的最佳 20+ 条经验

今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情。当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能。这里,我们不会讲过 多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库。

2016-09-27 20:43:07 393

原创 回溯算法经典应用之—迷宫问题 (Java)

1、回溯算法简介回溯算法也叫试探法,它是一种系统地搜索问题的解的方法。回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。用回溯算法解决问题的一般步骤为:1)、定义一个解空间,它包含问题的解。2)、利用适于搜索的方法组织解空间。3)、利用深度优先法搜索解空间。4)、利用限界函数避免移动到不可能产生解的子空间。问题的解空间通常是在搜索问题的解的过

2016-08-24 17:28:42 1382

原创 回溯算法经典应用之—N皇后问题 (Java)

1、回溯算法简介回溯算法也叫试探法,它是一种系统地搜索问题的解的方法。回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。用回溯算法解决问题的一般步骤为:1、定义一个解空间,它包含问题的解。2、利用适于搜索的方法组织解空间。3、利用深度优先法搜索解空间。4、利用限界函数避免移动到不可能产生解的子空间。问题的解空间通常是在搜索问题的解的过程中动态产生

2016-08-24 15:37:35 4358

原创 快速排序 (Java)

快速排序其实是对冒泡排序的升级,都属于交换排序类,只不过它的实现,增大了记录的比较和移动的距离,将关键字较大的记录从前面直接移动到后面,关键字较小的记录从后面直接移动到前面,从而减少了总的比较次数与移动次数,它的基本思想是通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序的目的。packag

2016-08-24 10:50:31 522

原创 归并排序 (Java)

归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。它的原理是假设初始序列含有n个记录,则可以看成是n个有序的子序列,每个子序列的长度是1,然后两两归并,得到n/2个

2016-08-24 10:40:11 341

原创 堆排序 (Java)

堆排序就是利用堆(大顶堆或者小顶堆)进行排序的方法,这个先假设用大顶堆,它的基本思想是,将待排序的序列构造成一个大顶堆。此时,整个序列的最大值就是堆顶的根节点,然后将它移走,其实就是将其与对数组的末尾元素交换,此时末尾元素就是最大元素,然后将剩余的n - 1个序列重新构造成一个堆,这样就会得到n个元素中的次大值,如此反复,完成排序。代码如下:package com.qian.sort;

2016-08-24 10:27:19 400

原创 希尔排序 (Java)

希尔排序也是一种插入式排序,是对直接插入排序的一种改进,希尔排序就是将待排序序列分组,这种分组是将相隔某个增量的记录组成一个子序列,实现跳跃式的移动,使得排序的效率提高。其实这个增量选取还是比较关键的,选取的不当可能导致排序结果不对。可究竟应该取什么增量好,目前还是一个数学难题。Java版的代码:package com.qian.sort;import java.util.Arrays

2016-08-24 10:15:42 475

原创 直接插入排序 (Java)

直接插入排序是一种稳定的排序算法,它的基本操作就是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。排序的过程可以联想一下玩扑克牌的时候摸牌的过程,每摸一张牌,都会理一次牌,也就是插入排序的原理。Java版的代码如下:package com.qian.sort;import java.util.Arrays;public class Inser

2016-08-24 10:02:45 411

原创 简单选择排序 (Java)

简单选择排序就是通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录交换。简而言之,就是每一趟记录最小值得索引值,然后交换,是一种稳定的排序算法。Java版的代码如下:package com.qian.sort;import java.util.Arrays;public class SelectSort { public void sele

2016-08-23 20:00:32 297

原创 排序之冒泡排序 (Java)

冒泡排序是一种最简单的排序算法,是一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果范旭则交换,直到没有反序的记录为止,是一种稳定的排序算法。Java版的代码如下:package com.qian.sort;import java.util.Arrays;public class BubbleSort { void bubbleSort(int[] nums) {

2016-08-23 19:54:38 346

原创 Java中的static关键字深入解析

一、static代表着什么在Java中并不存在全局变量的概念,但是我们可以通过static来实现一个“伪全局”的概念,在Java中static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,当然也可以修饰代码块。Java把内存分为栈内存和堆内存,其中栈内存用来存放一些基本类型的变量、数组和对象的引用,堆内存主要存放一些对象。在JVM加载一个类的时候,若该类存在sta

2016-08-12 14:46:51 535

原创 TCP/IP——socket网络编程总结

TCP是Transfer Control Protocol的简称,是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须建立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行

2016-07-27 16:33:20 1126

原创 Android应用程序的启动过程源码解析—点击图标启动过程

在Android系统中,有两种操作会引发Activity的启动,一种用户点击应用程序图标时,Launcher会为我们启动应用程序的主Activity;应用程序的默认Activity启动起来后,它又可以在内部通过调用startActvity接口启动新的Activity,依此类推,每一个Activity都可以在内部启动新的Activity。通过这种连锁反应,按需启动Activity,从而完成应用程序的

2016-07-27 16:05:38 3872

原创 设计模式之桥接模式——链接两地的交通枢纽

1、介绍桥接模式也称为桥梁模式,是结构型设计模式之一,在显示生活中大家都知道桥梁是链接河道两岸的主要交通枢纽,简而言之其作用就是链接河的两边,而我们的桥接模式与显示中的情况很相似,也是承担着链接两边的作用,在代码中,两边指的又是什么呢?2、定义将抽象部分与实现部分分离,使它们都可以独立的进行变化。3、使用场景从定义中桥梁主要作用是链接抽象部分与实现部分,但是事实上,任何

2016-07-25 11:00:37 733

原创 设计模式之工厂模式——应用最广泛的模式

工厂模式主要分为三种,简单工厂模式、工厂方法模式、抽象工厂模式。1、绪论在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的。但是在一些情况下, new操作符直接生成对象会带来一些问题。举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助

2016-07-24 22:37:09 1774 2

原创 策略模式——时势造英雄

1、定义策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们可以相互替换。策略模式让算法独立于使用它的客户端而独立变化。注意:策略模式与状态的结构几乎完全一样。但是他们的目的、本质却不一样。2、使用场景1)针对同一种问题的多种处理方式、仅仅是因为具体行为有差别时,2)需要安全的封装多种同一类型的操作时3)出现同一抽象类有多个子类,而又需要使用if-else

2016-07-21 20:47:53 415

原创 设计模式之状态模式——随遇而安

1、状态模式介绍状态模式中的行为是由状态决定的,不同的状态有不同的行为,状态模式把对象的行为包装在不同的具体状态对象里,每一个状态对象都有一个共同的抽象状态基类。状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变。2、定义当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了基类。3、使用场景1)当一个对象的行为取决于它的状态,并且它必须在运行时根据

2016-07-21 20:15:19 744

原创 java设计模式——装饰模式

装饰模式也称为包装模式。结构型设计模式之一,其使用一种对客户端透明的方式动态的扩展对象的功能,同时它也是继承关系的一种替代方案之一。装饰模式可以动态的给一个对象添加一些额外的职责。就增加功能功能来说,装饰模式相比生成子类更为灵活。装饰模式的UML类图如图:抽象组件类:可以是一个接口或者抽象类,其充当的是被装饰的原始对象。Component.javapub

2016-07-20 22:03:21 480

原创 Android源码中的代理模式解析

Android源码下的比较经典的代理模式其中之一是ActivityManagerProxy代理类,其具体代理的ActivityManagerNative的子类ActivityManagerService,ActivityManagerService在这里就不在具体赘述了,这里主要梳理一下整个代理的框架。ActivityManagerProxy是ActivityManagerNative的内部类

2016-07-20 21:26:47 923

原创 设计模式之代理模式——编程好帮手

代理模式也称为委托模式,是一种结构型设计模式,所谓代理,就是一个人或者机构代表另一个人或者机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。为其他对象提供一种代理以控制对这个对象的访问。当无法或者不想直接访问某个对象或者访问某个对象存在困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,委托对象与代理对象需要实

2016-07-20 11:23:32 1104 2

原创 Android源码中的适配器模式

在Android开发过程中,ListView的Adapter是我们最常见的类型之一,我们需要使用Adapter加载Item View的布局,并且进行数据绑定、缓存复用等操作。代码大致如下:ListView myListView = (ListView)view.findViewById(R.id.id_list);MyAdapter adapter = new MyAdapter()

2016-07-19 22:36:07 1971

原创 适配器模式——得心应手的“粘合剂”

适配器模式在日常开发中使用率极高,从代码中随处可见的Adapter就可以看出来。在Android中,ListView,GridView到现在最新的RecyclerView都需要使用Adapter,并且在开发中我们遇到的优化问题,出错概率较大的地方也基本来自Adapter,这是一个让人又爱又恨的角色。言归正传,适配器是将两个不兼容的类融合在一起,它有点像粘合剂,将不同的东西通过一种转换使得它们能

2016-07-19 11:07:00 385

原创 回调模式——特殊的观察者模式

我们知道观察者模式是一对多的关系,一个被观察者与多个观察者之间的关系,而回调模式则是一对一的关系,其实在Android中,大量的使用到了回调模式,比如各种个样的clickListener,还有各种各样的CallBack都是回调模式。下面实现一个简单的回调模式。模仿Android中的按钮点击事件。定义一个Button.javapackage com.test.callback;publi

2016-07-18 17:39:27 621

原创 观察者模式——解决、解耦的钥匙

观察者模式是一个使用率非常高的模式,它最常用的地方是GUI系统,订阅—发布系统。另外Android中的listview中的notifyDataSetChange函数,都是使用观察者模式。另外Android中的回调模式也有点观察者模式的影子,很像,但并不是完全的观察者模式,回调模式是一对一,观察者模式是一对多。观察者模式的一个重要作用是解耦,将观察者与被观察者解耦,使得他们之间依赖性更小,甚至做

2016-07-18 17:14:38 483

原创 设计模式之单例模式——应用最广泛的设计模式

单例模式是应用最广的设计模式之一,在应用这个模式的时候,单例对象的类必须保存只有一个实例存在,如果有一个类中包括了很多功能,会消耗很多资源,那么这个类应该采用单例模式,没有理由让它构造多个实例。比如一个类既要访问IO,又要访问数据库等资源,就可以考虑使用单例模式,这种不能自由构造对象的情况,就是单例模式的使用场景。单例模式的框图大致如下:其中Client为客户端,Singleton

2016-07-18 10:06:42 522

转载 Java并发编程:Callable、Future和FutureTask

在前面的文章中我们讲述了创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。  这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。  如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。  而自从Java 1.5开始,就提供了Callable和Future,通过它们可以在任务执行完毕

2016-07-11 16:58:24 485

原创 Gradle知识巩固

1   什么是构建工具?               我们大家都知道 Gradle 是一种构建工具,那么什么是构建工具呢?       网上一大堆的文字解释我觉得很难理解,这里我以咱们 Android 开发来举个例子吧。       我们以前开发都是用 Eclipse ,而 Eclipse 大家都知道是一种 IDE (集成开发环境),

2016-07-11 16:42:41 384

转载 android Context深度剖析

android程序和java程序的区别Android程序不像Java程序一样,随便创建一个类,写个main()方法就能跑了,而是要有一个完整的Android工程环境,在这个环境下,我们有像Activity、Service、BroadcastReceiver等系统组件,而这些组件并不是像一个普通的Java对象new一下就能创建实例的了,而是要有它们各自的上下文环境,也就是我们这里讨论的Con

2016-06-24 22:03:11 495

转载 GitHub TOP 100Android开源库

本项目主要对目前 GitHub 上排名前 100 的 Android 开源库进行简单的介绍, 至于排名完全是根据GitHub搜索Java语言选择「Best Match」得到的结果,然后过滤了跟Android不相关的项目,所以排名并不具备任何官方效力,仅供参考学习,方便初学者快速了解当前一些流行的Android开源库。 1. React Native这个是 Faceb

2016-06-23 16:16:08 938

原创 从AsyncTask的源码解析AsyncTask工作原理

为了分析AsyncTask的工作原理,我们从它的execute方法开始分析,execute方法又会调用executeOnExecutor方法,他们的源码如下: public final AsyncTask execute(Params... params) { return executeOnExecutor(sDefaultExecutor, params);

2016-06-18 22:27:16 475

原创 Android中的消息机制

Android中的消息机制主要是指Handler的运行机制,Handler的运行需要底层的MessageQueue和Looper的支撑。MessageQueue的中文翻译是消息队列,顾名思义,它的内部存储了一组消息,以队列的形式对外提供插入和删除的工作。注意MessageQueue底层其实采用单链表而不是队列;Looper的中文翻译为循环,在这里可以理解为消息循环。由于MessageQueue只是

2016-06-17 22:29:51 391

原创 Android中的IPC方式——使用AIDL

上一篇博文介绍了使用Messenger来进行IPC,可以发现Messenger是以串行的方式处理客户端发来的消息,如果有大量的消息发过来只能一个一个的处理,就先的不太合适。这篇博文介绍使用AIDL进行进程间通信,使用IPC。AIDL的大概实现过程如下1、服务端服务端首先要创建一个Service用来坚挺客户端的链接请求,然后创建一个AIDL文件,将暴露给客户端的接口在合格AIDL文件中声

2016-06-17 15:47:15 354

原创 Android中的IPC方式——使用Messenger

Messenger可以翻译为信使,通过它可以在不同进程中传递Message对象,注意这里的Messenger和Message是两个概念。在Message中放入我们需要传递的数据,就可以轻松的实现数据的进程间通信了。Messenger是一种轻量级的IPC方案,它的底层实现是AIDL,这一点可以从Messenger的构造方法和getBinder方法看出来: public Messenger(

2016-06-17 10:37:08 365

原创 Android中的IPC方式——使用Bundle和文件共享

IPC是inter-process communication的缩写,含义是进程间通信或者跨进程通信,是指两个进程之间进行数据交换的过程。IPC方式包括Bundle、文件共享、AIDL、Messenger、ContentProvider和Socket等进程间通信的方式。这里主要讲解Bundle和文件共享的方式。那么什么进程呢,首先进程和线程是很不同的概念,今晨一般只一个执行单元,在PC和移动设

2016-06-16 22:31:47 942

状态机.zip

MongoDB[2] 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。[3]

2017-09-24

maven模板javaspring

mvn 模板

2017-07-18

4.3.0.RELEASEspring-web.zip

4.3.0.RELEASEspring-web4.3.0.RELEASEspring-web4.3.0.RELEASEspring-web4.3.0.RELEASEspring-web4.3.0.RELEASEspring-web4.3.0.RELEASEspring-web

2017-07-13

事件分发机制demo

View的分发机制博客源码http://blog.csdn.net/qianhaifeng2012/article/details/51660054

2016-06-13

蚁群算法原理及其应用pdf版

蚁群算法原理及其应用 段海滨著

2016-03-29

黑金—NIOSII那些事儿 REV7.0

黑金原创教程,NIOSII的开发,Verilog HDL 部分看完可以继续着部分

2015-10-28

VerilogHDL那些事儿-整合篇

黑金原创教程,VerilogHDL那些事儿-整合篇,继时序篇,

2015-10-28

Verilog_HDL_那些事儿_时序篇v2

黑金原创教程,这一篇是关于时序的,是继建模篇的,写的很不错

2015-10-28

VerilogHDL那些事儿_建模篇(for DB4CE15

黑金原创教程,个人感觉这一版写的最好,非常容易上手

2015-10-28

quartus11.0 FFT IP核的实现 modelsim仿真通过

quartus11.0 FFT IP核的实现 modelsim仿真通过

2015-10-24

云帆大数据----04 MapReduce入门编程、框架原理、

云帆大数据--hadoop-1.2.1 PPT--04 MapReduce入门编程、框架原理、

2015-10-21

云帆大数据------03 HDFS体系结构、Shell操作和Java API使用

云帆大数据-hadoop1.2.1---PPT-----03 HDFS体系结构、Shell操作和Java API使用

2015-10-21

云帆大数据----02 Hadoop 1.x介绍、本地(单机)模式和伪分布式安装与测试

云帆大数据hadoop-1.2.1-PPT-02 Hadoop 1.x介绍、本地(单机)模式和伪分布式安装与测试

2015-10-21

云帆大数据(hadoop)PPT--01 Linux系统环境搭建和基本命令使用

云帆大数据的hadoop-1.2.1 PPT--01 Linux系统环境搭建和基本命令使用

2015-10-21

Hadoop+0.20.2+API.chm

Hadoop+0.20.2+API.chm 英文原版

2015-10-21

51单片机实现交通灯系统模拟

(1)支干道交替通行,主干道每次放行30秒,支干道每次放行20秒; (2)绿灯亮时表示可以通行,红灯亮时表示禁止通行; (3)每次绿灯变红灯时,黄灯先亮5秒(此时另一干道上的红灯不变); (4)十字路口要求有数字显示,作为时间提示,以便人们更直观地把握时间,具体要求主、支干道通行时间及黄灯亮的时间均以秒为单位做减数器; 在黄灯亮时,原红灯按1HZ的频率闪烁; 当有急救车到达时,路口的信号灯全部变红,让急救车通过;假定急救车通过时间为10s,急救车通过后,交通灯恢复先前状态

2015-10-20

AVR-mega128单片机实现温度DS18B20,proteus仿真实现

AVR-mega128单片机实现温度DS18B20,proteus仿真实现,包含三个文件夹,有ICCAVR,CVAVR,以及不同晶振的方案

2015-10-20

AVR-mega16实现计算器,proteus仿真实现

AVR-mega16实现计算器,proteus仿真实现

2015-10-20

51单片机实现用ADS1115采集0~5V电压

实现用ADS1115采集0~5V电压,超出此范围时,LCD1602液晶提示报警。电压数值显示精确到小数点后3位。四个按键分别控制采集进度。VB语言软件编程实现数据实时接收,显示,保存。

2015-10-20

Hadoop权威指南(中文版)

本书从Hadoop的缘起开始,由浅入深,结合理论和实践,全方位地介绍Hadoop这一高性能处理海量数据集的理想工具。全书共14章,3个附录,涉及的主题包括:Hadoop简介;MapReduce简介;Hadoop分布式文件系统;Hadoop的I/O、MapReduce应用程序开发;MapReduce的工作机制;MapReduce的类型和格式;MapReduce的特性;如何安装Hadoop集群,如何管理Hadoop;Pig简介;Hbase简介;ZooKeeper简介,最后还提供了丰富的案例分析。

2015-10-13

FileZilla---FTP软件

FileZilla是一个免费开源的FTP软件,分为客户端版本和服务器版本,具备所有的FTP软件功能。

2015-10-13

altera的FFT_ip核使用官方手册

altera的FFT_ip核使用官方手册,全英文原版,非中文翻译版,看起来虽然有点吃力,但还是原版比较给力。

2015-09-07

空空如也

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

TA关注的人

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