自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

王员外的博客

人生短暂,活到老,学到老

原创 Java之LinkedList源码分析(第X篇:总结)

0、LinkedList实现了List接口、Deque接口,一个既可以做线性表、又可以做栈、又可以做队列的super容器 1、LinkedList的底层数据结构是双向链表,插入与删除的效率很高哦,O(1)就搞定了 2、LinkedList查找就没那么利索了,因为没有下标,只能从头或从尾...

2020-05-29 20:25:56 46 0

原创 Android之UI Automator框架源码分析(第一篇:简要介绍与学习计划)

便可建立在本地 JVM 上运行的 JUnit 测试,或建立在设备上运行的插桩测试。当然,您也可以通过集成测试框架来扩展测试能力,例如集成Mockito可以在本地单元测试中测试 Android API 调用, 集成Espresso或UI Automator可以在插桩测试中测试用户交互。您可以使用E...

2020-05-28 20:36:02 62 0

原创 Java之HashMap源码分析(第十一篇:总结)

http://wiki.jikexueyuan.com/project/java-collection/hashmap.htmlHashMap 的实现原理(基于JDK1.7)可以先了解个大概 https://zhuanlan.zhihu.com/p/50675786?utm_source=wec...

2020-05-24 23:42:02 48 0

原创 Java之ArrayList源码分析(第八篇:内部类-ListItr)

ArrayList中重写了基类AbstractList的两个listIterator方法,这两个方法均会返回一个ListItr对象,ListItr是作为增强型的迭代器对象而设计的,我们接下来就一探究竟 0、类结构 private class ListItr extends Itr...

2020-05-22 11:29:59 62 0

原创 Java之ArrayList源码分析(第七篇:四个内部类的基本介绍)

注意:本文源码基于JDK1.8 ArrayList内部定义了四个内部类,即有普通内部类、也有静态内部类、那么他们各自的用途是什么呢?本文将做出解答

2020-05-21 10:57:45 35 0

原创 Java之集合框架源码分析(第一篇:Collection接口)

蛋疼啊,蛋疼,JDK1.8给interface里面加了好几个default方法,我也是醉了醉了!! package java.util; import java.util.function.Predicate; import java.util.stream.Stream; import...

2020-05-20 17:34:16 95 0

原创 Java之浅谈方法中参数加上final的一个作用

参数加final 1、斯坦福教授说的好,方法可以比喻成一台机器(面包机),没错,在我的机器(方法)里面,我要的参数加了final(要原料),你给我传过来的参数,机器里面就无法改了,也就是说在机器里的这个参数,一直指向的都是你传进来的参数。 public class FinalNBA { ...

2020-05-19 00:39:11 10626 5

原创 Java之Vector源码分析(第一篇:初步了解)

0、与ArrayList不同,Vector中的操作是线程安全的,除此之外, 它俩超级像 1、Vector的增删改查等实例方法,均加了synchronized,意味着同一时刻一个Vector对象的方法,只能有一个线程访问,其他线程只能处于阻塞状态,等待对象锁,这样就保证了Vector的线程安全...

2020-05-15 11:40:50 41 0

原创 Java之LinkedList源码分析(第六篇:删除元素-List接口)

(注意:本文基于JDK1.8) 0、remove方法,接受一个int参数 public E remove(int index) { checkElementIndex(index); return unlink(node(index)); ...

2020-05-14 11:46:57 63 0

原创 如何从零制作一个测试平台(第二篇:找轮子)

在上一篇文章中,我们确定了技术方向,Python后端框架选择了Flask,Web前端框架则选择Vue,在本篇中我们要去github上找基于Flask开发好的项目、找基于Vue技术开发好的项目,圈内称为找轮子,这将帮助我们加速研发速度…… 后端轮子 github上Flask项目轮子挺多,...

2020-05-13 17:33:00 46 0

原创 Java之LinkedHashMap源码分析(第一篇:基本了解)

前言:HashMap一切都好,就是有一个缺点,当我们去遍历HashMap中的元素时,发现与插入顺序无关,它是完全无序的,我们想要一个有序的HashMap LinkedHashMap就在此背景下诞生了,它提供了两种有序的方式,满足你遍历的需求,牛13 0、听闻可以利用LinkedHashMa...

2020-05-13 14:47:36 48 0

原创 Java之LinkedList源码分析(第五篇:结点类)

private static class Node<E> { E item; Node<E> next; Node<E> prev; Node(Node<E> prev, E elem...

2020-05-11 22:53:23 23 0

原创 Java之LinkedList源码分析(第四篇:添加元素-Deque接口)

Deque接口扩展了Queue接口,本篇将是以上添加元素的源码分析 0、一个参数,接受一个参数类型为E的对象 public void addFirst(E e) { linkFirst(e); } 方法内部会调用linkFirst方法(见1号知识点),并...

2020-05-11 22:37:40 31 0

原创 Java之ArrayList源码分析(第五篇:遍历元素)

遍历源码全部拿出来

2020-05-08 15:56:31 57 0

原创 Java之ArrayList源码分析(第X篇:总结)

0、类结构 public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable...

2020-05-08 11:56:42 27 0

原创 Java之HashMap源码分析(第八篇:扩容细节分析)

Java之HashMap源码分析(第三篇:扩容),在第三篇中,做了分析,但诸多疑问,扩容追求细节 0、

2020-05-06 21:50:02 60 0

原创 Android之AsyncTask源码分析(第四篇:执行任务过程)

(注意:本文基于API 28的源码分析,API 29上或其他平台的源码略有不同) 调用AsyncTask的execute方法后,onPreExecute、doInbackground、onPostExecute,调用顺序源码解读 0、 ...

2020-04-24 17:57:22 86 0

原创 工作经验回忆(第二篇:借测试机)

【借手机】是整个测试行为中经常需要做的一件事,测试机永远不够用,这是因为App的用户遍布五湖四海,它们使用各种不同型号的手机,并随时可能会遇到各种奇葩问题,并且反馈到公司内部,你需要在最短的时间内尝试复现问题,所以借到一台相同环境的手机,非常重要!! 如何更好的完成这件事情呢?? 0、手机...

2020-04-21 23:42:22 62 0

原创 如何从零制作一个测试平台(第一篇:技术选型)

感谢那么多朋友,所以我决定打造系列文章 背景:或多或少,有一个平台的好处非常多,比如可以随时查看历史记录,比如可以随时调用其它服务,毕竟Linux环境的计算能力还是很强的,活不多说,首先就是技术选型 0、优先考虑ROI,所以技术选型上,一定要速度快,最优先的做法是去github找轮子,二次...

2020-04-20 20:51:04 85 0

原创 工作经验回忆(第一篇:开篇)

好汉不提当年勇,绝对不能放在职场,这是我的大错特错,职场就是反复转述你哪里牛b,这才让雇主放心,让雇主觉得花钱值。我发现我老吃亏了,做了很多事情说不出来,一没总结的习惯,二没系统的知识支撑,好在我还有一个博客,还留下了当年很多资料,可以把我的经验通通留下来…… 0、好记性不如烂笔头 这是我...

2020-04-19 00:08:00 79 1

原创 Android之AsyncTask源码分析(第三篇:执行任务)

(注意:本文基于API 28的源码分析,API 29上或其他平台的源码略有不同)

2020-04-18 01:00:33 59 0

原创 Android之AsyncTask源码分析(第一篇:加载)

AsyncTask类持有的类变量都是相当重要的,接下来就看看下它持有了什么? 当我们创建一个AsyncTask子类的对象时,最先进行的是类的初始化,最终类构造器<clinit>会被执行 0、AsyncTask类持有的用于输出日志的常量 private static ...

2020-04-14 12:30:42 38 0

原创 Android之IntentService源码分析(第三篇:退出)

每当我们startService后,IntentService总会自己结束,在第一篇文章中,其实已经知道它为什么自我退出了 0、IntentService中定义的一个普通内部类,它是一个Handler类 当重写的onHandleIntent方法调用完后,马上就会调用的是一个stopSelf...

2020-04-08 18:57:32 51 0

原创 Android之IntentService源码分析(第二篇:使用)

a、extends IntentService,重写onHandleIntent方法,在里面加入你自己的业务逻辑 b、startService(传入Intent对象) 0、一个参数,接受一个Intent对象 protected abstract void onHandleInt...

2020-04-08 18:42:08 53 0

原创 Android之IntentService源码分析(第一篇:创建)

IntentService扩展了Service,对象是由AMS框架创建的,一个自带工作线程、自带运行完退出的Service,下面看看它是怎么实现的? 0、无参 public IntentService(String name) { super(); ...

2020-04-08 18:32:27 49 0

原创 Android之HandlerThread源码分析(第五篇:实践)

0、A对象持有一个HandlerThread对象,HandlerThread一直处于运行中…… private HandlerThread mXXXXManagerThread; mXXXXManagerThread = new HandlerThread(&q...

2020-04-08 17:29:05 41 0

原创 Android之HandlerThread源码分析(第四篇:退出)

HandlerThread对象开启的线程,如果不退出且没有工作任务时不会占用CPU资源,项目中一般会选择一直留存该工作线程,方便我们随时要求工作线程执行耗时的任务,不过它仍然提供了退出的API 0、无参 public boolean quit() { Loop...

2020-04-08 17:13:05 28 0

原创 Android之AsyncTask源码分析(第二篇:创建对象)

0、本文将基于API26对AsyncTask的源码进行一个深入的,风骚的学习 1、万事开头难,从哪开始呢?AsyncTask是一个工作线程类,一个可以和主线程交互的工作线程类 2、AsyncTask涉及的知识点 a、设计模式:模版方法模式 b、Java基础:继承、枚举、范型类、内部...

2020-04-07 23:02:07 50 0

原创 Android之MessageQueue源码分析(第二篇:插入Message)

Message对象将在此方法中被MessageQueue对象管理上 0、两个参数,接受一个Message对象,一个发送时间when boolean enqueueMessage(Message msg, long when) { if (msg.target ==...

2020-04-05 18:31:23 37 0

原创 Android之Looper源码分析(第二篇:循环)

android/os/Looper.java 当在某个线程中,调用了loop方法后,线程的执行将一直在该方法中循环执行 public static void main(String[] args) { ………………省略很多……………… Loo...

2020-04-05 17:24:59 61 0

原创 Android之Looper源码分析(第一篇:创建)

Looper提供了两个public的方法,用于创建Looper对象,它的构造方法是private修饰的 private Looper(boolean quitAllowed) { mQueue = new MessageQueue(quitAllowed); ...

2020-03-29 20:30:09 44 0

原创 Java之LinkedList源码分析(第三篇:添加元素-List接口)

LinkedList的添加方法太多了……,先从List系列开始 0、一个参数,接受一个参数类型E的参数 public boolean add(E e) { linkLast(e); return true; } 传入的元素对象e,直接被传...

2020-03-25 21:11:57 46 0

原创 Java之LinkedList源码分析(第二篇:创建对象)

创建LinkedList对象,从这里开始 0、无参 public LinkedList() { } 默认的构造方法,是我们最常用的,它只是new了一个对象 1、一个参数,接受一个Collection对象 public LinkedList(Collec...

2020-03-23 23:19:59 45 0

原创 Java之LinkedList源码分析(第一篇:初步了解)

0、LinkedList实现了List、又实现了Deque,而Deque又继承了Queue,所以LinkedList添加元素、删除元素的方法很多很多,LinkedList简直就是全能的一个线性表!底层采用双向链表实现,非线程安全,假设多个线程同时添加元素,那后果就是添加的元素互相覆盖掉………,造成...

2020-03-23 23:07:50 27 0

原创 Java之ArrayList源码分析(第四篇:扩容机制)

有个供我们手动触发的扩容方法,那就从它开始 0、一个参数,接受一个int public void ensureCapacity(int minCapacity) { int minExpand = (elementData != DEFAULTCAPACITY_E...

2020-03-23 23:05:54 28 0

原创 Java之ArrayList源码分析(第三篇:删除元素)

删除元素也是我们常用的方法 0、一个参数,接受一个int public E remove(int index) { if (index >= size) throw new IndexOutOfBoundsException(outO...

2020-03-23 22:07:59 37 0

原创 Java之ArrayList源码分析(第二篇:添加元素)

0、一个参数,接受一个参数类型E的对象 public boolean add(E e) { ensureCapacityInternal(size + 1); // Increments modCount!! elementData[size++] =...

2020-03-21 00:19:22 31 0

原创 Java之ArrayList源码分析(第一篇:创建对象)

ArrayList操作元素的时间复杂度 插入尾部:O(1) 插入中间:O(n) 删除尾部:O(1) 删除中间:O(n) 查找元素:O(n) 访问元素(下标):O(1) 为什么时间复杂度是这样?本系列文章将会解答它………… 创建ArrayList对象的三种方式 0、无参 ...

2020-03-16 13:52:28 50 0

原创 Java之HashMap源码分析(第四篇:扩容机制)

本文源码基于JDK1.8+ HashMap中有多达七处进行了扩容,统统调用了resize()方法,我看了很多HashMap的文章,我发现怎么看都记不住,所以我决定还是自己总结一篇扩容过程的文章! 下面就是resize()方法的源码,整个方法最后会返回一个数组对象,作者写的实在精妙,resi...

2020-03-13 22:31:03 62 0

原创 Java之HashMap源码分析(第七篇:遍历元素)

遍历HashMap对象,三个方法都可以 0、无参 public Set<Map.Entry<K,V>> entrySet() { Set<Map.Entry<K,V>> es; return (es ...

2020-03-13 21:47:06 44 0

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