自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

二八法则的局外人

Keep moving and never give up

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

原创 看看不一样的ConcurrentHashMap

为了解决HashMap线程不安全以及synchronizedMap和HashTable并发效率低下的问题,Doug Lea大师为我们准备了兼具高效和安全的HashMap --> ConcurrentHashMap,本文就来讲讲ConcurrentHashMap是如何做到高效和安全的,由于ConcurrentHashMap在JDK1.7 和JDK1.8的实现不同,本文就分别介绍这两个版本的实现原理

2021-05-23 20:45:05 1114 16

原创 Window与其管理者的秘密

Window,字面意义即窗口,在Android中,所有的视图都是通过Window来呈现的,Window是View的直接管理者。Window是一个抽象类,具体实现是PhoneWindow。对Wndow的管理工作操作都是通过它的Manager–>WindowManager来做的,然而WindowManager也只是走个形式,真正的执行者是WindowManagerService,WindowManager通过提交工单的形式(IPC)交个WindowManagerService执行。WindowMana

2020-12-26 16:15:34 568

原创 Java容器:ArrayList的神秘面纱

ArrayList简介ArrayList 的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增长。在添加大量元素前,应用程序可以使用ensureCapacity操作来增加 ArrayList 实例的容量。因为 ArrayList 是基于数组实现的,所以支持快速随机访问。RandomAccess 接口标识着该类支持快速随机访问。ArrayList 实现了Cloneable 接口,即覆盖了函数 clone(),能被克隆。ArrayList 实现java.io.Serializa

2020-07-02 14:08:04 1271

原创 线程池实现?简单了解一下

在计算机中,线程是cpu执行的基本单位,可以通过创建线程来执行不同的任务,多线程的出现使得计算机CPU利用率提高了很多,尤其是当今多核CPU的广泛应用更是需要多线程。但是线程也是系统资源,在一个并发系统中,如果通过使用不断创建线程的方式来执行任务,那这个系统很快会因为创建过多线程导致内存溢出进而使系统崩溃,而且线程创建也是需要消耗不少时间,以这种方式来执行任务,不但不会发挥多线程的优势,还会降低系统响应速度。有没有一种方法能避免以上问题?就跟数据库连接池一样,线程可不可以有对应的线程池来管理线程,答案是有

2020-07-02 14:04:00 134

原创 synchronized与ReentrantLock的爱恨情仇

Java并发编程中,经常会遇到数据同步或者并发访问的问题,解决这类问题,可以使用锁来保证多线程并发访问的安全性。Java 提供了两种锁机制来控制多个线程对共享资源的互斥访问,第一个是 JVM 实现的 synchronized,而另一个是 JDK 实现的 ReentrantLock。synchronizedsynchronized可以加在方法上使用,也可以使用synchronized代码块来进行同步同步代码块public void funcation() { synchronized (ob

2020-07-02 13:53:51 103

原创 JVM是这样管理和回收资源的

Java技术体系中所提倡的自动内存管理解决了两个问题:对象分配内存回收对象分配给对象的内存对象主要分配在新生代的Eden区,如果启动了本地线程分配缓冲,将按线程优先在TLAB上分配。但这不是绝对的,JVM中内定几条内存分配规则,有如下这些1.对象优先在 Eden 分配大多数情况下,对象在新生代 Eden 上分配,当 Eden 空间不够时,发起 Minor GC。2.大对象直接进入老年代大对象是指需要连续内存空间的对象,最典型的大对象是那种很长的字符串以及数组。经常出现大对象会提前触发垃圾

2020-07-02 13:50:14 84

原创 JVM内存中的对象

当对象创建后,对象在其生命周期内存活于Java虚拟机的内存中,一个对象从逻辑角度看,它由成员变量和成员函数构成,从物理角度来看,对象是存储在堆中的一串二进制数。1.对象在虚拟机内存中的布局在HotSpot虚拟机(OracleJVM)中,对象在内存中存储的布局可以分为3个区域,分别是● 对象头(Header)● 实例数据(Instance Data)● 对齐填充(Padding)1.1 对象头HotSpot虚拟机中的对象头包含两部分信息:1. 第一部分用于存储对象自身的运行时数

2020-07-02 13:46:48 177

原创 JVM是如何创造“女朋友”的

Java是一门面向对象的编程语言,在Java程序运行过程中不断有对象被创建出来。虚拟机遇到一条new指令时,会进行一系列对象创建的操作:1.检查常量池中是否有即将要创建的这个对象所属的类的符号引用;  ● 若常量池中没有这个类的符号引用,说明这个类还没有被定义!抛出ClassNotFoundException;  ● 若常量池中有这个类的符号引用,则进行下一步工作;2.进而检查这个符号引用所代表的类是否已经被JVM加载;  ● 若该类还没有被加载,就找该类的class文件,并加...

2020-07-02 13:45:25 104

原创 聊聊工厂模式的那些事

工厂模式实现了创建者和调用者的分离。在创建一个对象时不向客户暴露内部细节,并提供一个创建对象的通用接口。核心本质实例化对象,用工厂方法代替new操作。将选择实现类、创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。详细分类简单工厂模式:用来生产同一等级结构中的任意产品。(对于增加新的产品,需要修改已有代码)工厂方法模式:用来生产同一等级结构中的固定产品。(支持增加任意产品)抽象工厂模式:用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)简单工厂模式简

2020-07-02 13:34:57 4034

原创 Activity那些不为人知的秘密

Activity是Android应用程序直接与用户交互的组件,在Activity中,除了它的用法,像生命周期和启动模式,这些内容没有深入学习很难理解其中的奥秘,接下来揭示Activity中那些不为人知的秘密。文章目录Activity的生命周期正常情况下的生命周期异常情况下的生命周期资源相关的系统配置发生改变导致Activity被回收并重新创建内存...

2020-03-28 20:36:57 156

原创 如何优雅的给你的APK文件打上签名

历经千兴万苦开发Android应用后,将这个应用打包成APK文件发布到应用商店就可以让用户下载安装到他们的手机上。当然,不是所有的APK都能安装到手机上,Android系统要求只有签名后的APK文件才可以安装,因此我们还需要对生成的APK文件进行签名才行。在开发时,Android Studio使用了一个默认的keystore文件帮我们自动进行了签名,点击Android Studio右侧工具栏的G...

2020-03-14 19:59:36 578

原创 那些Android开发者必备的技能

文章目录全局获取Context用Intent传递对象Serializable方式Parcelable方式定制日志工具定时任务Alarm机制Doze模式多窗口模式编程进入多窗口模式多窗口模式下的生命周期禁用多窗口模式使用Java8新特性这都0202年了,Android手机早已是人手一部,随着5G的推广,Android手机会出现新变化,这对Andro...

2020-03-02 20:38:43 203

原创 Android学习羁绊之Material Design

Material Design是由谷歌的设计工程师们基于传统优秀的设计原则,结合丰富的创意和科学技术所发明的一套全新的界面设计语言,包含了视觉、运动、互动效果等特性,Material Design最大的特点就是好看,它的出现使得Android首次在UI方面超越了iOS。Material Design是一个推荐的设计规范...

2020-02-20 10:50:51 138

原创 Android学习羁绊之Service

Service(服务)是Android中实现程序后台运行的解决方案,它非常适合去执行那些不需要和用户交互而且还要求长期运行的任务。服务的运行不依赖于任何用户界面,即使程序被切换到后台,或者用户打开了另外一个应用程序,服务仍然能够保持正常运行。服务依赖于创建服务时所在的应用程序进程。当某个应用程序进程被终止时,所有依赖于该进程的服务也会...

2020-01-17 12:32:21 141

原创 Android学习羁绊之Notification

Notification(通知)是Android系统中比较有特色的一个功能,当某个应用程序希望向用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助通知来实现。发出一条通知后,手机最上方的状态栏中会显示一个通知的图标,下拉状态栏后可以看到通知的详细内容。文章目录Notification基本用法Android 8....

2020-01-13 16:53:05 124

原创 所谓的Java回调机制,不过如此

在一个应用系统必然存在模块间的相互调用(无论是什么语言实现的),模块间调用分为以下几种:文章目录同步调用异步调用回调同步回调异步调用同步调用同步调用是最基本并且最简单的一种调用方式,类A的方法a()调用类B的方法b(),一直等待b()方法执行完毕,a()方法继续往下走。原理图如下所示:这种调用方式适合b()方法执行时间不长的情况,若b()方法执行时间太长,则会导致a()方法中余下的代码...

2020-01-13 12:38:51 212

原创 Android学习羁绊之多媒体开发

文章目录调用摄像头和相册调用摄像头拍照启动摄像头指定照片存放路径照片显示从相册中选取照片打开相册相册图片显示播放多媒体文件播放音频播放视频手机在我们的生活中正扮演着越来越重要的角色,各种娱乐方式都可以在手机上进行。众多的娱乐方式少不了强大的多媒体功能的支持,而Android在这方面也做得非常出色。它提供了一系列的API,使得我们可以在程序...

2020-01-12 19:21:33 239

原创 Android学习羁绊之网络技术

PC、手机、平板,还是电视,几乎都会具备上网的功能,在可预见的未来,手表、眼镜、汽车等设备也会逐个加入到这个行列,21世纪的确是互联网的时代。Android系统也提供了网络功能,对于开发者,如何使用这些网络功能来编写程序是很重要的。WebView加载和显示网页通常都是浏览器的任务,如果要在应用程序中展示网页而不通过系统浏览器来实现,则需要...

2020-01-06 16:02:15 142

原创 Android学习羁绊之Content Provider

Content Provider(内容提供器)主要用于在不同的应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访数据的安全性。目前,使用内容提供器是Android实现跨程序共享数据的标准方式。不同于文件存储和SharedPreferences存储中的两种全局可...

2019-12-19 11:35:20 207

原创 JVM是如何进行类加载操作的

JVM的类加载机制:JVM把描述类的数据从Class文件中加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。与其他编译时需要进行连接工作的语言不同,在Java语言中,类型的加载、连接和初始化过程都是在程序运行期间完成的,这种做***增加性能开销,但为Java应用程序提供了高度的灵活性。文章目录类加载时机类加载过程加载加载...

2019-12-02 16:07:50 94

原创 Android学习羁绊之数据存储

数据持久化就是指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或电脑关机的情况下,这些数据仍然不会丢失。保存在内存中的数据是处于瞬时状态的,而保存在存储设备中的数据是处于持久状态的,持久化技术则提供了一种机制可以让数据在瞬时状态和持久状态之间进行转换。Android系统中主要提供了3种方式用于简单地实现数据持久化功能,即文件存储、Sh...

2019-12-01 19:04:53 211

原创 Android学习羁绊之Broadcast Receiver

Android中的每个应用程序都可以对自己感兴趣的广播进行注册,这样该程序就只会接收到自己所关心的广播内容,这些广播可能是来自于系统的,也可能是来自于其他应用程序的。Android提供了一套完整的API,允许应用程序自由地发送和接收广播。广播的分类Android中的广播主要可以分为两种类型:标准广播和有序广播标...

2019-11-01 19:54:40 171

原创 Android学习羁绊之Fragment

Fragment是一种可以嵌入在活动当中的UI片段,它能让程序更加合理和充分地利用大屏幕的空间,因而在平板上应用得非常广泛。Fragment和Activity十分相似,都能包含布局,都有自己的生命周期。文章目录Fragment使用方式引用Fragment动态添加Fragment用Fragment模拟返回栈Fragment和Activ...

2019-10-18 20:11:23 116

原创 Android学习羁绊之UI设计

软件开发过程中,界面设计和功能开发同样重要。Android中有多种编写程序界面的方式可供选择。接下来学习一下Android的UI开发。文章目录常见UI控件TextViewButtonEditTextImageViewProgressBarAndroid控件的可见属性AlertDialogProgressDialog基本布局线性布局相对布局帧布...

2019-10-16 19:58:11 175

原创 谈谈Android的那些事

提起Android,大家都很熟悉,Android操作系统是目前世界上市场占有率最高的移动端操作系统(是一种基于Linux的自由及开放源代码的操作系统。主要使用于移动设备,如智能手机和平板电脑),各式各样的Android手机无处不在(华为,小米,vivo,oppo,中兴等知名国产Android手机品牌)。Android在不到20年有如此大的成功,其背后也有着辛酸的历史。Android发展历史...

2019-10-05 23:20:41 255

原创 Android学习羁绊之Activity

Activity是Android系统的四大组件之一,Activity是用户可操作的可视化界面,为用户提供一个完成操作指令的窗口,一个Activity通常是一个单独的屏幕。一个应用程序可以包含零个或者多个Activity(零个Activity的应用程序并不常见),接下来学习一下Activity。文章目录Activity的基本用法创建Activity创建和加载布局注册ActivityToastMen...

2019-10-03 13:16:59 151

原创 上手第一个Android应用

近年来,随着智能手机的大众化,移动端开发成为了热门岗位,开发人员开发出各式App共我们日常使用,我们自己也可以来写出自己的Android应用,那么接下来就开始吧Android应用是使用Java应用来开发的,要进行Android应用开发需要掌握Java的基本用法,掌握Java的基本语法以及特性。(Google在2019年5月宣布了Kotlin 编程语言现在是 Android 应用程序开发人员的首...

2019-09-26 17:39:44 323

原创 一文解决CopyOnWriteArraySet

在上一篇文章中介绍了CopyOnWriteArrayList,既然有线程安全的List,那必定会有线程安全的Set。J.U.C包下存在一个线程安全的Set,它与CopyOnWriteArrayList名称类似,它是CopyOnWriteArraySet,那它是如何保证线程安全的呢,接下来解读一下相关的源码构造函数CopyOnWriteArraySet中有两个构造函数,如下代码所示public...

2019-08-31 21:00:40 372

原创 一文解决CopyOnWriteArrayList

ArrayList是常用的Java数据结构,不过在多线程环境下对ArrayList进行并发修改会造成很多意想不到的错误:并发导致数据丢失并发导致插入null并发导致数组越界所以ArrayList不是线程安全的类,在并发环境下需要使用线程安全的ArrayList进行修改操作,线程安全的ArrayList有这些:Vector和CopyOnWriteArrayList官方不推荐使用Vect...

2019-08-31 20:58:40 618

原创 JVM垃圾回收算法

垃圾回收算法JVM中的垃圾回收器,使用不同的垃圾回收算法对JVM中的垃圾进行回收,不同的垃圾收集器使用的回收算法不一样,总体来说,垃圾回收算法主要有如下几种1.标记-清除算法**算法原理:**算法分两部分进行,先标记所有需要回收的对象,标记完成后直接将这些对象清除。在标记阶段,程序会检查每个对象是否为活动对象,如果是活动对象,则程序会在对象头部打上标记。在清除阶段,会进行对象回收并取消...

2019-07-29 20:43:17 110

原创 JVM垃圾回收机制

Java虚拟机的内存结构分为五个部分,分别是:程序计数器、Java虚拟机栈、本地方法栈、堆、方法区。既然是存储空间,为避免在Java程序运行期间发生内存溢出的情况,就需要一个能及时清理掉不再使用的内容,回收对应的内存空间的角色存在,这个角色就是垃圾收集器。现在很多内存的动态分配与内存的回收技术已经十分成熟,可以看作是进入了“自...

2019-07-29 20:42:00 66

原创 浅谈单例模式

什么是单例模式单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的一个类只有一个实例。即一个类只有一个对象实例。在《设计模式》中,是这样来说明单例模式的:“保证一个类仅有一个实例,并提供一个访问它的全局访问点。”单例模式的优点– 由于单例模式只生...

2019-07-29 20:39:58 106

原创 JVM内存结构

Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的“高墙”,墙外面的人想进去,墙里面的人却想出来。 -----《深入理解Java虚拟机》对于Java开发者来说,在虚拟机自动内存管理机制的帮助下,不在需要为每一个new操作去写配对的delete/free代码,极大的简化了开发流程。但把内存控制的权利交给虚拟机,...

2019-07-25 11:03:40 106

原创 Java容器 -HashMap

什么是HashMap在进行Java学习和开发当中我们会接触到通过键值对进行数据存储的情况,这个时候会经常用到HashMap来实现这样的存储方式。HashMap是基于哈希表的Map接口实现。哈希表是结合了数组和链表自身的优点而产生的数据结构。HashMap在JDK1.8中有了较大的变化。JDK1.8之前HashMap由数组+链...

2019-07-21 18:35:27 150

原创 什么是设计模式

Christopher Alexander说过:“每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动”。1995 年,GoF(Gang of Four,四人组/四人帮)合作出版了《设计模式:可复用面向对象软件的基础》一书,共收录了 23 种设计模式,从此树立了软件设计模式领域的里程碑,人称「GoF设计模式」。设计模式...

2019-03-27 14:56:53 109

空空如也

空空如也

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

TA关注的人

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