自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 收藏
  • 关注

原创 PowerMock使用Tips

在Android单元测试中,Mockito和PowerMock这两种工具都可以用一个虚拟的对象来替换那些外部的、不容易构造的对象,解决units之间由于耦合而难于被测试的问题。两者的不同点在于Mockito对于大多数的标准单测case都很适用,而PowerMock可以去解决一些更难的问题(比如静态方法、私有方法等)。PowerMock完美的弥补Mockito测试框架的不足,但笔者在实际运用过程中发现PowerMock似乎更容易产生报错,特此记录一些踩坑和注意点。目录1、mock()与spy().

2021-04-01 17:29:01 306

原创 单元测试通过反射测试私有内部类

待测试代码片段:public class OuterClass { //目标所需获取Inner对象 private class InnerClass { //内部类的私有成员属性 private String innerVal = "innerVal"; protected String innnerMethod() { return "innnerMethod"; } .

2021-03-31 16:24:26 1158

原创 PowerMockito测试私有void方法报错UnfinishedStubbingException

待测试代码片段:class PowerMockitoExample{ private void TestPrivateMethod(){ System.out.println("Inside private method"); } public void TestPublicMethod(){ System.out.println("Inside public method"); TestPrivateMethod(); }}创建测试Test类:.

2021-03-31 15:56:43 4260 1

原创 ThreadLocal小结(上)

一、是什么ThreadLocal翻译成中文应该是:线程局部变量。ThreadLocal提供了线程的局部变量,如果创建一个ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的一个副本,每个线程都可以通过set()和get()来对这个局部变量进行操作,但不会和其他线程的局部变量进行冲突,实现了线程的数据隔离。往ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的。是一个以ThreadLocal对象为键、任意对象为值的存储结构。从表面上看ThreadLoca

2020-09-10 16:36:13 141

原创 回调机制小结

一、简介所谓回调:就是A类中调用B类中的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法。举个生活中的例子:我打电话向你请教问题,是个难题,你一时想不出解决方法,于是我们约定:等你想出办法后打手机通知我,我就挂掉电话办其它事情去了。过了一段时间,你打过来告诉我答案。那么问题来了,...

2020-08-17 23:03:38 147

原创 Android的ScrollView

昨天第一次遇到需要使用ScrollView的场景,总结一下。一、jianh凡是这个界面的组成非常不规则,而且竖直方向长度不够就肯定需要使用Scrollview了。因为ListView处理的是规则的内容。至于带视差效果的滚动自然是ScrollView。举个例子,比如一则新闻页,有配图,在配图下可以点击按钮了解更多,有标题,最后是全部的新闻内容。那么ListView显然不是最好的选择,但是一般的Layout,比如LinearLayout、RelativeLayout或者FrameLayout之类Lay.

2020-08-11 14:55:24 265

原创 synchronized小结

synchronized小结一、引言二、正文2.1、synchronized简介2.2、synchronized到底锁住的是谁2.2.1、synchronized(this)2.2.2、synchronized修饰的方法2.2.2、synchronized修饰的方法一、引言最近在解决一些bug单时经常会遇到synchronized相关,特别是一些耗时长的bug,对于synchronized不同的用法也时常有些模糊,这里就来总结一下synchronized相关。二、正文2.1、synchroni

2020-08-11 00:17:06 114

原创 Android内存泄露——MAT工具

一、前言结束一个需求之后面临着就是各种各样的bug单,其中内存泄露问题着实让人头疼,这篇主要介绍一下如何使用工具——MAT二、正文1、Hprof文件解析打开AndroidSDK,找到platform-tools目录下的hprof-conv工具输入命令 hprof-conv in.hprof out.hprof ,其中in.hprof输入文件名,out.hprof输出文件名2、Mat工具使用(官网地址)这里推荐独立安装(下载地址):根据系统直接下载Windows (x86)或Wi

2020-08-01 21:29:03 381

原创 string.split 分隔符连续出现 会多出空白字符

首先这里有一些基本用法 Java split 方法

2020-07-13 23:22:18 1087

原创 在未排序的数组中找到第 k 个最大的元素

一、引言昨儿面试中遇到的算法题 :在未排序的数组中找到第 k 个最大的元素。首先想到的就是先排序,但是就算是快排的时间复杂度也要O(nlogn),给的时间有限,一时间也没想出更好的办法,想着既然时间复杂度降不下来,那不如就用简单点的堆排序: //大根堆 O(nlogk) public int findKthLargest(int[] nums, int k){ PriorityQueue<Integer> maxHeap = new PriorityQueue

2020-07-13 22:57:04 1741

原创 java.lang.IllegalStateException:The specified child already has a parent... 异常

一、报错:java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child’s parent first.是在addview的时候这句报错,提示是需要removeview()父类意思是在添加一个子view的时候,然而子view已经有自己的parent,addview的时候又添加了别的parent,要先移除后在添加。二、解决思

2020-07-02 10:48:52 1131

原创 Android 在Java代码中动态设置View的id

方法有很多,这里就介绍我用到的:写在配置xml文件里在res/values/下添加ids.xml(名字可随意)文件;ids.xml 文件添加:<?xml version="1.0" encoding="utf-8"?><resources> <item name="my_view" type="id"/></resources>然后在代码中设置:my_view.setId(R.id.my_view);...

2020-07-02 10:41:02 1145

原创 android removeRule不可用

一、报错因需求,需要在Java代码中动态地将android:layout_alignParentBottom设置为false,首先想到的是addRule和removeRuleRelativeLayout.LayoutParams rlp = (RelativeLayout.LayoutParams) v.getLayoutParams();rlp.remove(RelativeLayout.ALIGN_PARENT_BOTTOM);但是remove下方会有红色波浪线,removeRule是AP

2020-07-02 10:34:33 253

原创 Layout Inspector:视图布局检查器

一、引言在App运行过程中,我们的视图层级可能会由于用户的操作一直在发生改变,甚至可能会有一些出乎预料的变化。最近在请教前辈这类问题时,学习到了一个布局查看神器——Layout Inspector。二、简介Layout Inspector是Android Studio自带的布局检查器,允许我们在运行时检查应用程序的视图层次结构,如果您的布局是在运行时(而不是完全在 XML 中)构建的并且布局表现出意外行为,这会很有用。Layout Inspector官方使用文档三、使用如需打开 L

2020-06-27 11:11:17 1718

原创 约瑟夫环 超时问题

一、引言原题:剑指 Offer 62. 圆圈中最后剩下的数字 :0,1,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。思路:每次找到下一个要删除的位置,假设当前删除的位置是 index,下一个删除的数字的位置是 index+ m - 1 。由于数到末尾会从头继续数,所以最后取模一下,就是 (index+ m - 1)%n。 public int LastRemaining_Solution(int n, int m) {

2020-06-26 11:37:26 2628

原创 树 的那些事儿

一、常见的树首先树是一堆元素的集合,若不为空则至少含有一个根节点以及0或多个子树。二叉树则是每个结点最多有两个子树的树结构;二叉树(Binary Tree)主要包括:满二叉树、完全二叉树、二叉搜索树、平衡二叉树。满二叉树:除了叶节点外每一个节点都有左右子叶完全二叉树:由满二叉树转化而来,也就是将满二叉树从最后一个节点开始删除,一个一个从后往前删除,剩下的就是完全二叉树。...

2020-06-26 10:08:42 100

原创 安卓四种弹窗:Toast、Dialog、Actionbar 和 Snackbar

弹窗分为模态弹窗和非模态弹窗两种,两者的区别在于需不需要用户对其进行回应。模态弹窗会打断用户的正常操作,要求用户必须对其进行回应,否则不能继续其它操作行为;非模态弹窗则不会影响用户的操作,用户可以不对其进行回应,非模态弹窗通常都有时间限制,出现一段时间后就会自动消失。Toast 提示框Toast提示框是一种非模态弹窗,它弹出一个小信息,作为提醒或消息反馈来用,一般用来显示操作结果,或者应用状态的改变。最常见的Toast提示框为一句简短的描述性文字。考虑到Toast提示框显示的时间较.

2020-06-23 20:45:22 2091

原创 在Java代码中设置布局/控件

一、引言在实际开发中,往往需要更灵活地控制布局位置,譬如说控件的左边距要根据其左边TextView的文字长度来变化leftMargin,此时就应该在代码中实现动态变化二、正文布局文件片段如下:<LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" ...> <TextView

2020-06-23 16:18:23 885

原创 Java中String字符串和byte数组互相转换

1.string 字符串转换成 byte[] 数组String str = "reagan";byte[] srtbyte = str.getBytes();2.byte[] 数组转换成 string字符串String res = new String(srtbyte);System.out.println(res);3.可以设定编码方式的转换String str = "reagan";byte[] srtbyte = null;try { srtbyte = s.

2020-06-20 19:38:40 980

原创 int.class 与 Integer.class

一、引言今天在通过反射访问私有方法时,程序一直抛出NoSuchMethodException 异常。

2020-06-17 18:13:09 1503

原创 总结动态规划算法

目录一、前言1.1、引子1.2、介绍二、正文2.1、方法总结2.1、实战分析一、前言1.1、引子计算机归根结底只会做一件事:穷举。所有的算法都是在让计算机如何聪明地穷举而已,动态规划也是如此。还是要从一个经典的例子说起——斐波那契数列(详细可见我的另一篇文章 斐波那契数列递归算法优化),我们似乎可以发现动态规划遵循一套固定的流程:递归的暴力解法 -> 带备忘录的递归解法 -> 非递归的动态规划解法。所以从某种程度上来说,所有的动态规划本质都是优化后的暴力求解。1.2、介绍DP

2020-06-13 17:58:41 178

原创 总结递归算法

一、前言递归在算法题中是很常用的,但是可能是因为人的思维方式的问题,很多时候会觉得,一看都会一写就废。我也做了不少递归的题目了,但是大部分都没办法完全自己独立完整地写出来,所以感觉有必要好好整理一下,一味得追求数量也没有用,总结出自己的东西来才能以不变应万变。二、正文2.1、方法总结总的来说,递归无非就是写一个方法,先写出一个终止条件,然后根据题目,找出递推关系,进行递归。具体又可以拆分对应成以下三步:将大问题分解为小问题:明确函数功能,把原问题分解为若干个相对简单类同的子问题;寻找

2020-06-05 09:35:09 373

原创 斐波那契数列递归算法优化

一、前言斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368…学习递归时用的第一个简单的例子就是斐波那契数列,当时也惊叹于递归的魔力。后来在一次面试过程中,面试官就出了这道题,我还寻思怎么这么简单,当面试官让我测试用例输入100的时候,我就知道我还是太年轻了…我一直认为毫无问题的看起来既简洁又优雅的算法,居然是这么耗

2020-05-31 22:47:52 3745

原创 Java 运算符

一、前言对于Java运算符一直有点混淆,记录一下,有待更新补充…二、正文1、整除(/) 和求余(%)(1)/(整除):意思就是被除数到底包含几个除数;可以这么记:也就是能被整除多少次int i=4/2;//这里i=2,4被2刚好整除2次int i=5/2;//这里i=2;5能被2整除2次(2)%(求余):意思就是求被除数不除数整除后还余下多少;注意:余数的符号跟被除数符号相同,不管后面数int i=5%2;//这里i=1;表示5被2整除2次还余1int i=-5%2;//这

2020-05-31 11:20:26 84

原创 Android Studio解决 java.lang.VerifyError: Expecting a stackmap frame at branch target xx

一、前言在写单元测试时原本没有问题,pull了一次代码之后重新运行时报错(如下:java.lang.VerifyError: Expecting a stackmap frame at branch target XXException Details: Location: ... Reason: Expected stackmap frame at this location. Bytecode: ... 二、解决Google了一下…原因:大概是jav

2020-05-26 23:02:17 1266

原创 "open failed: EACCES (Permission denied)"读取SD卡报错解决办法

一、前言最近在学习安卓,也碰到了各种各样的bug,这次的这个bug折腾了我一整个晚上!!所以整理出来让大家少栽跟头…二、问题背景实现一个简单的从模拟器的SD卡中读取数据实现音乐的播放暂停和停止关键代码如下:protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstan...

2020-05-01 16:23:38 2440 2

原创 解惑HTTP&RPC

一、引言正如我们所知的,RPC(Remote Procedure Call Protocol远程过程调用)是分布式架构的核心;HTTP是一个简单的请求-响应协议。接下来将根据以下几个问题进行讨论: HTTP和RPC同一级别,还是被RPC包含? Restful也属于RPC么? RPC真的就比HTTP好吗? 既然有 HTTP 请求,为什么还要用 RPC 调用?写在前面:其实rpc不...

2020-04-12 17:24:13 285

原创 HTTPS

一、引言HTTP是一个优秀的通信协议,不过事物皆具有双面性,该协议也是有不足之处,大概有以下几点:使用明文传输,可能会被窃取不安全不验证通信方身份无法证明报文的完整性,证明不了报文是否被修改1.1、HTTP不具备加密功能HTTP协议本身是没有加密功能,所以无法对请求和响应等内容加密。HTTP报文均采用明文形式,数据包在网络间传输很容易就被人窃取,如使用抓包工具(Wireshark)...

2020-03-02 16:18:29 859

原创 HTTP

一、HTTP1.1、HTTP报文HTTP报文是由一行一行的简单的字符串组成的。HTTP报文都是纯文本,不是二进制代码。HTTP有两种报文:请求报文和响应报文,具体介绍如下1.1.1、HTTP请求报文一个HTTP请求报文由请求行(request line)、请求头部(request header)、空行和请求数据4个部分构成。1、请求行(HTTP请求报文的第一行)请求行由方法字段、U...

2020-03-02 15:36:03 352

原创 Java常用设计模式——观察者模式

3.2、观察者模式(1)简介许多对象并不是独立存在的,其中一个对象的行为发生改变可能会导致一个或者多个其他对象的行为也发生改变。例如,Excel 中的数据与折线图、饼状图、柱状图之间的关系;MVC 模式中的模型与视图的关系;事件模型中的事件源与事件处理者。所有这些,如果用观察者模式来实现就非常方便。1、属于行为型模式:这些设计模式特别关注对象之间的通信。2、当对象间存在一对多关系时,则使...

2020-02-24 15:54:55 103

原创 Java常用设计模式——工厂模式

3.2、工厂模式(1)简介定义:工厂模式大体分为简单工厂、工厂方法、抽象工厂等三种模式。工厂方法模式也可称为工厂模式,与抽象模式都是属于GOF23种设计模式中的一员;简单工厂模式不属于23 种经典设计模式,它的缺点是增加新产品时会违背“开闭原则”。可以大概理解为:简单工厂进阶变成了工厂方法,然后再进阶成了抽象工厂。难度逐步增加,也越来越抽象。下面按先易到难逐个分析。优点:1、将创建实例...

2020-02-23 20:02:36 194

原创 Java常用设计模式——单例模式

3.1、单例模式(1)简介定义:指一个类只有一个实例,且该类能自行创建这个实例,并提供对实例的全局访问方法的一种模式。例如,Windows 中只能打开一个任务管理器,这样可以避免因打开多个任务管理器窗口而造成内存资源的浪费,或出现各个窗口显示内容的不一致等错误。特点:单例类只有一个实例对象;该单例对象必须由单例类自行创建自己的唯一实例;单例类对外提供一个访问该单例的全局访问点;...

2020-02-23 17:14:28 171

原创 Java常用设计模式

一、定义设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式使代码编制真正工程化。简单说:模式:在某些场景下,针对某类问题的某种通用的解决方案。场景:项目所在的环境问题:约束条件,项目目标等解决方案:通用、可复用的设计,解决约束达到目标。二、分类...

2020-02-23 17:10:59 76

原创 Java的外部类和内部类

一、概念1.1、定义外部类:这是一个相对内部类的概念,如果一个类中嵌套了另外一个类,我们就把这个类叫做外部类。内部类:顾名思义,就是定义在里边的那个类。 内部类可以作用在方法里以及外部类里,作用在方法里称为局部内部类,作用在外部类里分为实例内部类和静态内部类。二、内部类与外部类的互访2.1、外部类和内部类的类访问修饰符外部类只有两种访问控制符,即public和default(包...

2020-02-21 19:44:39 1655

原创 深入理解Java虚拟机

一、引子在写Java代码的时候,都知道写的代码都是在一个叫做Java虚拟机的东西上执行的。今天突然开始思考到底什么是虚拟机,它是怎么实现的,发现自己确实有点模棱两可了。在本文中,我会写下对虚拟机的总结理解。二、概述2.1、定义Java虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令...

2020-02-18 19:04:17 106

原创 Java泛型(上)

一、引子一般的类和方法,只能使用具体类型:要么是基本类型,要么是自定义类型。如果要编写可以应用于多种类型的代码,这种刻板的限制对代码的束缚就会很大。多态算是一种泛化机制,但对代码的约束还是太强(要么继承父类,要么实现接口)。有许多原因促成了泛型的出现,而最重要的一个原因,就是为了更安全友好的使用容器类 : 用来指定容器要持有什么类型的对象,而且由编译器来保证类型的正确性。很熟悉的一个...

2020-02-16 22:25:10 86

空空如也

空空如也

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

TA关注的人

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