- 博客(50)
- 问答 (6)
- 收藏
- 关注
原创 深入浅出Android单元测试(一):单元测试基础
想学习单元测试无从下手,本文对以最易懂的方式介绍单元测试。若有错漏,烦请斧正。转载请注明出处。欢迎关注程序引力作者:程序引力 | 谢一 (Evan Xie)邮箱:evanyixie@gmail.com软件测试作为软件质量的保障,有着十分重要的意义。按照不同的层次划分,测试也有着诸多的种类。按照测试方式分,有白盒测试、黑盒测试、灰盒测试。按照测试范围或流程来分,有单元测试、集成测试...
2018-11-21 23:31:31 259
原创 Android事件分发机制:基础篇:最全面、最易懂。
如何提升安卓水平?安卓开发者必须了解的事件分发机制。最全面、最易懂的形式来讲解Android事件分发机制。0. 前言鉴于安卓分发机制较为复杂,故分为多个层次进行讲解,分别为基础篇、实践篇与高级篇。(一)基础篇:从基本概念入手,介绍了分发机制中的核心方法,通过分析其核心逻辑,总结其事件分发机制。(二)实践篇:该篇设计了简单与复杂的两个demo样例,从现象与应用的角度去讲解分发机制的核心...
2018-11-18 21:50:07 569
原创 二叉树的遍历
二叉树的遍历递归遍历递归遍历算法比较简单递归前序遍历递归中序遍历递归后序遍历非递归遍历非递归前序遍历方法一: static void preorderBinaryTree(TreeNode root){ TreeNode p=root; Stack<TreeNode> s=new Stack<TreeNode>(); //前序遍历二叉树
2016-09-17 13:12:25 516
原创 经典谷歌面试题:高楼扔鸡蛋
经典谷歌面试题:高楼扔鸡蛋存在某T层高楼,在该高楼中存在这样的一层,在该层之下的所有楼层扔鸡蛋,鸡蛋摔到地上都不会碎,还可以继续扔;在该层及该层之上的所有楼层,扔下鸡蛋都会摔碎。 目前手里有两个鸡蛋,怎样扔才能在最坏情况下,使得扔的次数最小。Java代码如下,更改楼层层高T,可输入扔鸡蛋的最小次数。package code.improved;public class ThrowEggs {
2016-09-12 21:38:21 3311
原创 常见默认端口
HTTP:80 HTTPS:443 FTP:21 SSH/SCP:22 Telnet:23 SMTP:25 DNS:53 SOCKS:1080 Weblogic:7001 Websphere:9080 Tomcat:8080
2016-09-08 09:29:54 522
原创 条件概率、联合概率、边缘概率
条件概率概述条件概率问题可以想象成面积的问题。思考时都可以转化为面积。 假设变量M的取值为A、B、C,以及N的取值为X、Y、Z。 有几个明显的结论:P(X|A)+P(X|B)+P(X|C)不一定等于1P(X,A)+P(X,B)+P(X,C)=P(X)假设P(X|A)=P(X|B)=P(X|C),也不表示P(X,A)=P(X,B)=P(X,C)成立独立性假设P(X|A)=P(X|B)=P(X|C
2016-09-08 09:29:10 22322
原创 排序算法总结
常见排序算法直接插入希尔排序冒泡排序快速排序简单选择堆排序归并排序基数排序由于计数排序可能需要占用非常大的内存,故基数排序是计数排序的内存优化版,即分别对每一位进行“计数排序”,注意处于同一“数位”的若干数,需要依次进入数位的队列,出列是服从先进先出的策略。计数排序:当输入的元素是 n 个 0 到 k 之间的整数时,它的运行时间是 Θ(n + k)。计数排序不是比较排序,排序的速度快于任何比较排序算
2016-09-08 09:28:35 363
原创 图
图的存储邻接矩阵方阵,第1行第2列表示顶点1对顶点2有边。邻接表每一个链表只表示与该顶点相连的顶点。十字链表用于有向图,分为弧结点和顶点结点 弧结点内容分别为:尾结点 | 头结点 | 指向弧头相同的弧结点 | 指向弧尾相同的弧结点 顶点结点内容为: 数据 | 指向以该顶点为弧头的第一个弧结点 | 指向以该顶点为弧尾的第一个弧结点邻接多重表用于无向图, 弧结点:该弧连接的顶点x | 指向下一条依
2016-09-08 09:28:08 425
原创 动态规划
动态规划总结如果一个问题的一次选择策略跟上一次选择策略有关,那这个问题可能是动态规划问题,这个策略造成的结果称为状态。动态规划解决的问题是:一个阶段的最优可以由前一个阶段的最优得到。注意,这里有一个容易混淆的地方,一个阶段的最优可以有前一个阶段的最优得到,而不是由前面所有阶段的最优得到。一般较常见的动态规划问题需要给出一个策略,其相应的条件都是数值型。问题的目标是要求一个价值最大或最小,这个价
2016-09-08 09:27:35 575
原创 内核态和用户态
内核态一个运行在内核模式的进程可以执行指令集中的任何指令,并且可以访问系统中任何存储器位置。用户态用户模式中的进程不允许执行特权指令,比如停止处理器、改变模式位,或者发起一个I/O操作。也不允许用户模式中的进程直接引用地址空间中内核区内的代码和数据。LinuxLinux使用了Ring3级别运行用户态,Ring0作为内核态,没有使用Ring1和Ring2。
2016-09-08 09:26:35 354
原创 常见OJ注意事项
常见OJ注意事项对于Java,代码顶部不要添加package对于Java,通常的类名叫做Main,且只有这个类为public的。输出的最后一行可能不需要换行。
2016-09-08 09:26:02 528
原创 获取输入
Scanner类下面这种读取方式需要停留在死循环中。注意,nextInt()之间用空格相隔。如果要返回String型,则只能用nextLine(),而没有nextString()类似的函数。 Scanner cin=new Scanner(System.in); int a,b; while(cin.hasNextInt()){ a=cin.nextInt();
2016-09-08 09:25:34 231
原创 创建型设计模式
创建型设计模式创建型设计模式对类的创建实例化过程进行抽象,将对象的创建和对象的使用分离。 * 简单工厂模式:使用频率4星 * 工厂方法模式:使用频率5星 * 抽象工厂模式:使用频率5星 * 建造者模式:使用频率2星 * 原型模式:使用频率3星 * 单例模式:使用频率4星 [TOC]简单工厂模式简单工厂模式将对象创建和对象使用相分离,降低了系统耦合度。 * 优点:无需知道具体类名,只要
2016-09-08 09:24:47 362
原创 结构型模式
结构型模式结构型模式可以分为类结构型模式和对象结构型模式: * 类结构型模式关心类的组合,由多个类可以组合成一个更大的系统,在类结构型模式中一般只存在继承关系和实现关系。 * 对象结构型模式关心类与对象的组合,通过关联关系使得在一个类中定义另一个类的实例对象,然后通过该对象调用其方法。根据“合成复用原则”,在系统中尽量使用关联关系来替代继承关系,因此大部分结构型模式都是对象结构型模式。[TOC]
2016-09-08 09:23:35 543
原创 机器学习概述
机器学习概述机器学习概述机器学习分类从样例中学习符号主义学习连接主义学习统计学习在问题求解和规划中学习通过观察和发现学习通过观察和发现学习从指令中学习机器学习分类 R.S.Michalski等人将机器学习分为“从样例中学习”、“在问题求解和规划中学习”、“通过观察和发现学习”和“从指令中学习”。E.A.Feigenbaum等人将机器学习划分为“机械学习”,“示教学习”,“类比
2016-09-08 09:21:24 617 1
原创 机器学习的策略
0.概述按照李航编著的《统计学习方法》中定义的机器学习三要素分别是:模型、策略和算法。分别指模型的假设空间、模型选择的准则以及模型学习的方法。 下面将结合周志华的《机器学习》来总结机器学习的策略,及选择模型的准则。面对不同机器学习算法,或同一学习算法的不同学习器,需对其性能或泛化性能进行评估,才能选择出最优模型。下面内容从数据集划分和选择模型时的总体步骤入手,然后总结了这些步骤中所用到的指标,
2016-09-08 09:21:01 1731
原创 机器学习十大算法
C4.5决策树,分类CART决策树,分类K-Means聚类kNN基本的分类、回归算法SVMAprioriEMPageRankAdaBoostNaive Bayes,生成学习
2016-09-08 09:20:39 478
原创 机器学习算法的联系和区别
联系当损失函数是0-1损失时,测试误差就变成了测试数据集上的误差率(错误率)序关系若离散属性有序关系,则可通过连续化转化为连续值 若离散属性没有序关系,通常只能转化为k维向量感知机与线性回归感知机是线性二分类问题,线性回归是回归问题感知机的y取值是{-1,1},线性回归y取值是R.感知机的损失函数来源于分类错误率,线性回归的损失函数是均方误差(均方误差在几何上就是欧式距离)感知机的优化方法
2016-09-08 09:19:26 962
原创 感知机
感知机特点二分类的线性分类模型对应于输入空间中的超平面属于判别模型,是神经网络和SVM的基础分为原始形式和对偶形式一般以误分类(错误率)作为损失函数,利用梯度下降法对损失函数进行极小化。f(x)=sign(wx+b)其中,w是超平面法向量,b是超平面截距,wx+b=0即表示超平面算法算法伪代码: 注:感知机学习算法采用不同的初值或先去不同的误分类点,解可能不同。收敛性Novikoff定理
2016-09-08 09:18:29 353
转载 原始问题与对偶问题
原始问题与对偶问题(转)每一个线性规划问题,我们称之为原始问题,都有一个与之对应的线性规划问题我们称之为对偶问题。原始问题与对偶问题的解是对应的,得出一个问题的解,另一个问题的解也就得到了。并且原始问题与对偶问题在形式上存在很简单的对应关系: * 目标函数对原始问题是极大化,对对偶问题则是极小化 * 原始问题目标函数中的收益系数(优化函数中变量前面的系数)是对偶问题约束不等式中的右端常数,而原始
2016-09-08 09:18:08 7007
原创 过拟合
随着训练程度加深,训练误差不断减小,趋近于0,但测试误差先减小,后增大。 当测试误差增大时,表示已经发生过拟合。 训练误差与测试误差的图像要记忆清楚。
2016-09-08 09:17:44 507
原创 分类模型概述
二分类感知机见文章《感知机》对数几率回归见文章《线性模型》多分类将多分类问题拆分为多个二分类问题,拆分的策略有: * 一对一:新样本同时提交给N(N-1)/2个分类器,最终结果由投票产生 * 一对余: * 多对多:比较: 一对一需训练N(N-1)/2个分类器,而一对余只需训练N个分类器 但一对一每次只是用两个类的样例,而一对余每次要使用所有的样例。类别很多时,一对一的时间开销更小。 因此
2016-09-08 09:17:24 623
原创 最小二乘法
最小二乘法总结因为某向量的长度(似乎在欧式空间下)等于向量各元素的平方和,再开方。 因此,均方误差可以看成是某向量的长度的平方。这个均方误差的每一项可以看成是这个向量的一个元素。 ⎡⎣⎢⎢yi⋮yn⎤⎦⎥⎥−(a0⎡⎣⎢⎢1⋮1⎤⎦⎥⎥+a1⎡⎣⎢⎢xi⋮nn⎤⎦⎥⎥)\begin{bmatrix}{y_{i}}\\{\vdots}\\{y_{n}}\\\end{bmatrix}-(a
2016-09-08 09:16:57 341
原创 懒惰学习和急切学习
懒惰学习在训练阶段仅仅是把样本保存起来,训练时间开销为零,待收到测试样本后再进行处理。急切学习在训练阶段就对样本进行学习处理的模型
2016-09-08 09:16:24 3583 1
原创 k近邻模型
k近邻模型当作为分类算法时,通过“投票法”预测结果。也可基于距离远近进行加权投票当作为回归算法时,通过“平均法”预测结果。也可基于距离远近进行加权平均属于懒惰学习不具有显式地学习过程作为分类算法《机器学习》中讨论了k近邻模型在样本独立同分布,且密度足够大的前提下,有结论: 最近邻分类器虽然简单,但它的泛化错误率不超过贝叶斯最优分类器的错误率的两倍范围:二分类或多分类,不要想当然的以为只能
2016-09-08 09:15:54 1935
原创 随机森林、Boost和GBDT
随机森林若干决策树组成,每一个决策树很小,只有问题属性中的一小个子集,然后将所以小的决策树组合起来,用投票法决定分类。 * 在数据集上表现良好 * 在当前的很多数据集上,相对其他算法有着很大的优势 * 它能够处理很高维度(feature很多)的数据,并且不用做特征选择(WHY?) * 在训练完后,它能够给出哪些feature比较重要 * 在创建随机森林的时候,对generlization
2016-09-08 09:15:21 1574
原创 数据库基础
数据库基础码和属性候选码候选码就是可以区别一个元组(即表中的一行数据)的属性或属性的集合,比如学生表student(id,name,age,sex,deptno),其中的id是可以唯一标识一个元组的,所以id是可以作为候选码的,既然id都可以做候选码了,那么id和name这两个属性的组合可不可以唯一区别一个元组呢?显然是可以的,此时的id可以成为码,id和name的组合也可以成为码,但是id和nam
2016-09-08 09:14:25 1052
原创 SQL查询
SQL查询SQL数据查询select [all | distinct] COLUMN_LIST from TABLE | VIEW //可查询多列[where CONDITION] //用于行的条件,检索条件可以来源于一张表或多张表[order by ORDER_LISH] //对检索结果排序,使可读性更好[group by GROUP_LIST] //对检索结果分组,使可读性更好[havi
2016-09-08 09:13:51 491
原创 SQL高级查询
SQL高级查询聚合函数查询count(*)count()sum()avg()max()min()利用聚合函数产生虚拟字段因为要用这些聚合函数,所以要配合select使用,因此有select *, (select avg(SALARY) from MEMBER) as AVG_SALARY from MEMBER;聚合函数虚拟字段排序select *, MAX_SALARY =
2016-09-08 09:13:02 418
原创 SQL多表连接查询
SQL多表连接查询笛卡尔积如果不加条件直接对多表进行连接查询,则会产生多表的笛卡尔积结果。故需要添加条件语句。 在多表连接查询中,要注意 * 分析要查询的字段来源于哪些表 * 考虑从哪张表查询更好一些 * 注意隐含的关联条件
2016-09-08 09:12:23 629
原创 Spark概述
Spark概述Spark特点内存计算中间处理数据也放在内存中,减少磁盘I/O支持复杂查询:包括filter、SQL查询、流式查询等支持实时流处理(Hadoop只能离线处理)迭代计算Spark应用框架Spark StreamingTachyon过去,Spark的计算功能和内存管理都是在JVM中,导致JVM负载较高,且JVM崩溃后数据会丢失。 Tachyon的目的是分离Spark的计算功能
2016-09-08 09:11:42 515
原创 Hadoop和Spark的联系和区别
Hadoop和Spark的联系和区别计算数据存储位置Hadoop:硬盘Spark:内存计算模型Hadoop:单一Spark:丰富处理方式Hadoop:非迭代Spark:迭代场景要求Hadoop:离线批处理。(面对SQL交互式查询、实时处理及机器学习等需要和第三方框架结合。多种数据格式转换,导致消耗大量资源)Spark:批处理、实时处理
2016-09-08 09:11:11 3651
原创 Spark Streaming和Storm的区别和联系
Spark Streaming和Storm区别和联系Spark Streaming和Storm都是将流数据分成一个个小块的批数据(batch)。处理模型、延迟Strom:处理的是每次传入的事件。秒内延迟。(最小100ms) Spark Streaming:处理的是某个时间段窗口内的事件流。秒级延迟。(0.5~2s)容错、数据保证Strom:每个单独的记录都会被跟踪。恢复时,意味着状态可能被错误滴更
2016-09-08 09:10:41 1177
原创 Spark Streaming
Spark Streaming流程创建StreamingContext对象定义输入源定义处理过程调用StreamingContext的start()方法开始处理数据处理过程持续到StreamingContext的stop方法被调用状态一个应用程序只允许有一个SparkContext处于活跃状态,创建新的时,会将老的关闭才行一个SparkContext对象可以创建多个Streaming
2016-09-08 09:10:05 220
原创 Java数组
Java数组第一部分:先对Java数组的声明、创建和初始化作简单介绍,之后附有总结(可以直接看这部分总结); 第二部分:对数组操作的总结。 [TOC]Java数组的声明、创建和初始化##数组的声明//recommended first oneType[] var;Type var[];##数组的创建 为数组分配空间new Type[num]##数组初始化 ###默认初始化 对
2016-09-08 08:59:41 178
原创 Java集合类
Java集合类1.特点1.1 Collection每个“槽”中只能保存一个元素1.1.1 Set相同数只保存一次除TreeSet外,所有Set均与Collection完全一样1.1.2 List以特定顺序保存数据尽管List要用的方法都在Collection中,但它与Collection存在着明显不同1.1.3 Queue不用Collectioin方法1.2 Map每个“槽”中能保存
2016-09-08 08:59:23 185
原创 Java细节
Java细节equals()与==的区别==:对于基本类型,比较它们的值;对于引用,比较引用是否指向同一个对象,即比较堆中地址equals():比较的也是对象的地址(Thinking in Java, page 489),只是如String,Integer,Data等对继承自Object的equals()重载了而已。所以给人们的感觉是equals()是比较值。(具体equals可以查看Objec
2016-09-08 08:59:05 178
原创 内部类
内部类普通内部类静态内部类只有内部类才能声明为static,即静态内部类(普通类只能有public,abstract,final或无修饰)只有静态内部类才能拥有静态成员,普通内部类只能定义普通成员静态类跟静态方法一样,只能访问其外部类的静态成员外部类的静态方法若访问内部类,只能访问静态内部类
2016-09-08 08:58:44 186
原创 Java读写文件
Java读写文件读文件记忆方式:r= new BufferedReader(new FileReader(new File(fileName)));String str=r.readline();r.close();写文件记忆方式:w= new BufferedWriter(new FileWriter(new File(fileName)));w.write("Hello World");
2016-09-08 08:58:14 203
空空如也
使用maven解决两个开源框架的包冲突,必须下载它的源代码版本来自己编译吗?
2016-04-27
怎么学习正在孵化中的Apache开源项目?
2016-04-24
root用户可以git clone,但普通用户就不能git clone
2016-04-22
mvn install后为何还需要package,而之后为何又要tar解压缩呢?
2016-03-29
对于Tomcat8,在META-INF里配置context.xml不起作用
2015-11-27
TA创建的收藏夹 TA关注的收藏夹
TA关注的人