自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

范二er

不积跬步,无以至千里;不积小流,无以成江海

  • 博客(113)
  • 收藏
  • 关注

原创 SQLite IllegalStateException 的隐蔽 bug 修复

摘要:java.lang.IllegalStateException: Couldn’t read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.发生场景:查询数据库报错日志如下: java.l

2018-01-20 14:35:45 587

原创 Android中的Window、WindowManager以及悬浮框视频播放的实现

摘要:近日看公司直播项目,其中有一个功能就是退出某房间之后,直播界面会以悬浮窗的形式出现,并且可以拖动悬浮窗到界面中任意位置,点击悬浮框之后,又可以回到房间中继续观看直播。现在这个功能在主流的直播或者视频类软件中都可以看到,比如:某鱼、某猫、某珠、某牙、某tube。当然了,某tobe当中的悬浮窗效果更佳炫酷,可以炫酷地从悬浮框中将视频主界面慢慢拖动出来,具体效果下载某tube就能看到。这篇文章就记

2018-01-20 14:32:24 8208 3

原创 View 的工作流程---结合HenCoder教程和《Android开发艺术探索》的总结

摘要:一直关注 Hencoder 的教程,前阵子刚好出了一期 View 的工作流程系列,然后结合《Android开发艺术探索》相关章节,做一下笔记。原文发表于本人的个人博客—–记录一个刚入职场的新人的学习过程申明:文中 draw过程 这一小节,是摘抄自 HenCoder Android 开发进阶:自定义 View 1-5 绘制顺序 ,详细内容请点击链接查看。MeasureSpecMeasureSp

2017-11-25 13:25:30 360

原创 Android官方TODO-MVP项目分析(上)---View 层 Presenter 层以及 Contract 分析

摘要:最近看了一下 google 官方的 sample ,做的是一个 TODO 应用,使用的是 MVP 模式,之前笔者也学习了一段时间的 MVP,前面写了几篇文章记录学习过程,也有一些思考,最后呈现出来的问题就是 Presenter 层臃肿问题,以及 View 层接口难以管理的问题。比方说 View 层,它是负责 UI 的更新工作,我们希望它里面都是 showXXXZZZ(@Nullable Par

2017-11-14 09:52:38 2067

原创 Android当中的MVP模式(七)终篇---关于对MVP模式中代码臃肿

个人博客:CODE FRAMER BIGZ MVP系列文章配套DEMO Android 当中的 MVP 模式(一)基本概念 Android 当中的 MVP 模式(二)封装 Android 当中的 MVP 模式(三)基于分页列表的封装 Android 当中的 MVP 模式(四)插曲-封装 OkHttp Android 当中的 MVP 模式(五)封装之后的 O

2017-11-05 21:33:48 1422

原创 Android当中的MVP模式(六)View 层 Activity 的基类--- BaseMvpActivity 的封装

个人博客地址 :CODER FRAMER BIGZ摘要:使用封装之后的 MVP 模式实现一个新的界面,也就是 View 层,那么就需要去实现 IBaseView 接口,可能还需要针对当前要实现的界面情况,在 IBaseView 的基础之上派生出一个新的接口 IXxxView,之前的 SohuAlbumInfoActivity 用于展示搜狐电视剧主要信息的 View 就是这种情况,由 IBaseVie

2017-11-05 20:50:48 3420

原创 Android当中的MVP模式(五)封装之后的OkHttp工具在Model层

个人博客地址 :CODER FRAMER BIGZ摘要:在上一篇中对 OkHttp 进行了简单的封装,但是没有使用到这个系列当中的 Demo 里面,这一章就使用上一篇封装的 OkHttp 工具,替换掉之前 Demo 里面的 Model 层的网络请求.并且之前的部分接口方法都没有使用,比如说 IBasePresenter 接口中的 HashMap<String, String> getParams()

2017-11-05 20:50:09 1029

原创 Android当中的MVP模式(四)插曲-封装OkHttp

个人博客地址 :CODER FRAMER BIGZ摘要:前两篇中使用的网络请求工具是 OkHttp ,并没有经过封装,都是简单的使用 get 请求,并且将错误全部都抛到上层去解决了, 这无形之中增加了上层的编码复杂度,即使要抛向上层,起码也要给一个 errorCode 或者是 errorMsg 吧,所以这边文章就针对 OkHttp 进行封装,然后将封装之后的工具使用到上一小结的 Demo 之中。

2017-11-05 20:49:29 460

原创 Android当中的MVP模式(三)基于分页列表的封装

摘要:在上一篇中对MVP模式进行了封装,然后通过封装之后的类,实现了一个网络请求,但是请求到网络数据之后,就直接展示到了 View 层,并没有其他的操作,然而我们在开发过程中, 经常会用到分页加载,一般在滑动控件向上滚动,加载更多事件触发是调用,并且这个过程设计到两个参数,一个是 PageIndex :页码;一个是 PageSize 一页数据的大小, 分页加载就是通过在某一具体事件触发时,调用修改这

2017-11-05 20:48:47 1628

原创 Android 当中的 MVP 模式(二)封装

Android 当中的 MVP 模式(二)封装个人博客地址 :CODER FRAMER BIGZ在Android当中的MVP模式(一)基本概念中,用了一个简单的的登录Demo展示了一下 MVP 模式的基本姿势,虽然项目结构是更加清晰了,但是代码量明显增多了,原来的网络请求操作只用 1 个类可以搞定,现在需要 4 个类,并且每当有不同作用的 model 出现时,我们就需要相应的为他们添加 presen

2017-11-05 20:47:54 505 1

原创 Android当中的MVP模式(一)基本概念

Android当中的MVP模式(一)基本概念1. 为什么要使用MVP在传统的Android开发中,我们一般是使用MVC模式进行开发的。1.1 传统MVC模式介绍:View: 视图层,对应xml文件Controller: 控制层,对应Activity和Fragment层,进行数据处理Model:实体层,负责获取实体数据采用MVC模式的一个最大的弊端就是xml作为View层视图能力实在太弱,所以

2017-11-05 20:46:42 441

原创 AsyncTask浅析

前言从去年秋招到今年的春招,最后确定工作单位,可真是忙忙碌碌的一年,在时间跨度一年的找工作中,自己收获还是挺多的,本来想在毕业前夕,想写点什么东西纪念下这段时光的,但是可能还是因为自己道行不够吧,始终不能很好的记录下大学四年和一年的求职之路,所以此处还是暂时跳过。希望能在毕业一年后,再好好总结。 目前已经到上海来了,下周一就正式入职,充满了未知和挑战,自己还是挺兴奋的,趁这几天有时间,先复习一下一

2017-07-01 15:39:22 367

原创 算法题:二叉树A是否包含二叉树B的拓扑结构

1. 题目对于两棵彼此独立的二叉树A和B,请编写一个高效算法,检查A中是否存在一棵子树与B树的拓扑结构完全相同。给定两棵二叉树的头结点A和B,请返回一个bool值,代表A中是否存在一棵同构于B的子树。/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null;

2017-03-13 16:19:35 1176

原创 算法题:二叉树打印

1.题目有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树。给定二叉树的根结点root,请返回打印结果,结果按照每一层一个数组进行储存,所有数组的顺序按照层数从上往下,且每一层的数组内元素按照从左往右排列。保证结点数小于等于500。/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode r

2017-03-13 14:37:08 554

原创 Java-Integer-int面试题

碰到过几次,然后在刷题的时候又碰到了,就记录一下。 归纳啊总结成一张图

2017-02-28 09:13:54 620

原创 关于try-catch-finally-return语句的执行顺序

直接贴代码main函数 public static void main(String[] args) { System.out.println("=============NoException=================="); System.out.println(noException()); System.out.println("===

2017-02-16 18:40:51 726

原创 剑指Offer---面试题37:两单链表中第一个公共节点

一 题目输入两个链表,找出它们的第一个公共结点。public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}二 思路假设单链表1表长n, 单链表2表长m;思路1:遍历单链表1(表长n),每遍历一个节点就循环遍历单链表2(表长m)

2017-02-16 12:15:58 381

原创 剑指Offer---面试题36:数组中的逆序对

一.题目在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。 例如:{7,5,6,4},一共存在五个逆序对:{7,5},{7,6},{7,4},{5,4},{6,4};二.分析思路1:显而易见,从头到尾扫描数组,没扫描到一个数字,就拿去和后面所有的数组进行比较,两个for循环,解决问题,算法时间复杂度为o(n^2),思路2:

2017-01-11 15:28:55 366

原创 剑指Offer---面试题35:第一个只出现一次的字符

一.题目在一个字符串(1二.分析思路1: 从头到尾的扫描字符串,每扫描到一个字符,就和后面的字符进行比较,如果后面的字符串中没有出现相同的字符,那么该字符就是只出现一次的第一个字符,返回此时外层for循环的循环变量i,就是该字符的位置;时间复杂度:o(n)^2思路2: 1. 构造一个哈希表,Chatacteer作为key,Integer'作为value,分别表示字符

2017-01-10 15:13:54 313

原创 剑指Offer---面试题27:二叉搜索树与双向链表

一.题目输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val

2017-01-05 14:02:44 278

原创 剑指Offer---面试题26:复杂链表的复制

一.题目输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)public class RandomListNode { int label; RandomListNode next = null; RandomLis

2017-01-05 12:06:36 254

原创 剑指Offer---面试题25:二叉树中和为某值的路径

一.题目入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。二.分析首先要对路径这一次定义有准确的了解,如题目所述,从根节点往下,到叶子节点所经过的节点,当然也包括根节点和叶子节点;然后,由题目意思可以知道,要使 “二叉树中结点值的和为输入整数(int target) 的路径”,那么在先序遍历的时候,从根节点开

2017-01-05 11:32:28 256

原创 剑指Offer---面试题22:栈的push,pop序列问题

一.题目输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)二.分析首先精简一下题目的意思:就是输入两个数组,int[]A,int[]B,A为入栈顺序,判断

2016-12-28 19:33:35 517

原创 剑指Offer---面试题21:包含min函数的栈

一.题目定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。import java.util.Stack;public class Solution { public void push(int node) { } public void pop() { } public int top() { } public int min() {

2016-12-28 19:31:38 275

原创 剑指Offer---面试题19:镜像二叉树

一.题目操作给定的二叉树,将其变换为源二叉树的镜像。 public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null;public TreeNode(int val) { this.val = val;}}二.分析以题目中的两棵树为例: 就是先序遍历这棵树,如果当

2016-12-28 19:30:36 286

原创 剑指Offer---面试题18:树的子结构

一.题目输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构);树的结点结构如下:public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val =

2016-12-21 16:02:06 507

原创 TCP的建立与释放

TCP的连接与释放:”三次握手,四次挥手”客户端再发送一次确认的原因? 防止已经失效的链接请求报文段又传送到了B,因而产生错误.为什么客户端在TIME-WAIT状态必须等待2MSL时间? 第一:为了保证客户端发送的最后一个ACK报文段能够到达服务端;第二:防止已经失效的链接请求报文段出现在本链接中 保活计时器的作用?(上图中没有展示出) 当客户端已经与服务端建立了链接,但是之后,客户端

2016-12-21 13:37:21 335

原创 剑指Offer---面试题17:合并两个有序链表

一.题目 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。二.分析根据题目条件,就可以联想到归并排序(Merge_Sort)的算法,差异在于:经典的归并算法中,被排序的是数组,而,数组的容量在一开始就是被确定的,所以我们需要用o(N)的临时空间来辅助算法的进行.而这道题目的容器是链表,故不需要这o(N)的辅助空间;接下来的思路就和归并排序的merge方法

2016-12-17 16:19:07 692

原创 剑指Offer---面试题16:反转链表

一.题目 输入一个链表,反转链表后,输出链表的所有元素。public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}二.分析参考 剑指Offer—面试题15:链表中的倒数第k个节点一文中的分析,这道题目也就是面试题15所体现出

2016-12-17 14:31:33 476

原创 剑指Offer---面试题15:链表中的倒数第k个节点

一.题目 输入一个链表,输出该链表中倒数第k个结点。/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { public ListNode FindKth

2016-12-17 11:08:38 397

原创 剑指Offer---面试题14:调整数组,使奇数位于偶数前

题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。分析:最开始思路是这样的: 1. 整两个指针leftPos,rightPos,一个指向数组最前端,一个指向数组最后端; 2. leftPos向右移动,当array[leftPos]%2==0的时候停下来,与此同时righ

2016-12-14 15:59:07 509

原创 剑指Offer---面试题9:斐波那契数列

题目:写一个函数,输入n,求斐波那契数列的第n项;解法一:刚进大一的时候,学习c语言,斐波那契数列是经常用于展示递归的经典例子.但是从时间复杂度角度来说的话,采用尾递归这并不是一个优秀的算法.public void Fibonacci(int n){ if(n<=0){ return 0; } if(n==1){ return 1; }

2016-12-09 15:07:13 460

原创 剑指Offer---面试题8:旋转数组的最小数字

题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路1:如果此类题目出现在在线编程题中,那么想要通过系统的测试数据,无疑是非常简单的,不啰嗦,直接贴代码:cla

2016-12-08 17:11:45 276

原创 剑指Offer---面试题:使用两个栈实现队列

题目:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。思路: 首先,应该明确栈和队列的特性.栈是先进后出表队列是先进先出表我们可以这样设想: 1. push操作,我们将元素压入stack1; 2. pop操作,我们将stack1里面的所有元素都出栈,然后依次压入stack2; 这样一来,原先第一个压入stack1里面的元素(假设是Integer类型的

2016-11-29 15:28:01 439

原创 数据结构和算法------AVLTree的实现

在实现AVLTree之前,首先应该明确: 1. AVLTree是一种特殊的BinarySearchTree,即带有平衡条件的二叉查找树.所以BinarySearchTree的部分操作在此处可以套用. 2. 在remove和insert操作的时候,应该及时调整(balance)新的AVLTree,让其满足其定义. 3. insert操作时候,有如下四种情况: (几张图,画一个小时 -

2016-11-27 21:17:35 681

原创 数据结构和算法------BinarySearchTree的实现

public class BinarySearchTree<AnyType extends Comparable<? super AnyType>> { /* * 节点内部类 */ private static class BinaryNode<AnyType> { AnyType element; BinaryNode<AnyTy

2016-11-18 17:41:42 1807

原创 Thinking in Java 第八章------多态(2)

8-3构造器和多态构造器不同于其他的方法,涉及到多态时也是如此.构造器是static的,只不过该static是隐式申明的.构造器方法不具有多态性.8-3-1构造器的调用顺序基类的构造器总是在导出类的构造过程中被调用,并且按照继承层次,逐渐向上调用,使每个基类的构造器都能够被调用.导出类只能访问自己的成员,而不能访问基类的成员(因为基类成员通常是private类型),只有基类的构造器才具有

2016-11-13 19:53:01 656

原创 数据结构和算法------LinkedList的实现

package com.example;import java.util.ConcurrentModificationException;import java.util.Iterator;import java.util.NoSuchElementException;/** * LinkedList泛型类的实现 * Created by zfy on 2016/11/13. */publ

2016-11-13 16:36:12 1038

原创 数据结构和算法------ArrayList的实现

概述:今年的秋招接近尾声了,在秋招的笔试和面试中,反映出了我自己技术栈的很多不足,最致命的地方在于数据结构和算法,计算机网络.在拿了三个Offer之后,结束秋招之旅.现在沉下心来,重新开始学习数据结构和算法,并且记录每一种数据结构的Java语言实现.同时也开始拜读[ThingKing in Java]和[Effective Java]这两本著作.争取在2017年的春招中拿到一份更加满意的Offer.

2016-11-13 16:33:30 692

原创 Thinking in Java 第八章------多态(1)

概述多态通过分离做什么和怎么做,从另一角度将接口和实现分离开来。多态不但能够改善代码的组织结构和可读性,还能够创建可扩展的程序——即无论在项目最初创建时,还是在需要添加新功能时都可以“生长”的程序。多态的作用是消除类型之间的耦合关系.多态方法允许一种类型表现出与其他相似类型之间的区别,只要它们是从同一基类导出.8.1在论向上转型对象既可以作为它自己本身的类型使用,也可以作为其基类型来使用.这种

2016-11-09 19:12:28 633

空空如也

空空如也

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

TA关注的人

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