自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java -- 注解

注解在我们的项目代码中随处可见,是Java提供的设置程序中元素的关联信息和元数据( MetaData)的方法,它是一个接口,程序可以通过反射获取指定程序中元素的注解 对象,然后通过该注解对象获取注解中的元数据信息。平时看到的@override就是注解,我们认识注解之前,需要先学习一下元注解,元注解就是使用在注解之上的注解,标准的元注解包括这几个:@Target、@Retention、@Documented、@Inherited。@Target说明了注解所修饰的对象范围,包括:@ Retentio

2021-05-23 14:18:52 150

原创 HashMap提升版SparseArray,进阶版ArrayMap

前面提到HashMap在使用过程中会有浪费内存的问题,为了解决这个问题呢,谷歌官方提供了新的数据结构-SparseArray。这个数据结构从字面上理解呢,就是稀疏数组或者说稀疏阵列。那我们就重点分析下SparseArray是如何节省内存的吧。进入源码可以看到SparseArray的源码不是很长,然后映入眼帘的是几个成员变量: private static final Object DELETED = new Object(); //标识符,标记删除的元素 private boolea

2021-04-11 17:56:00 166 1

原创 HashMap的来龙去脉

我们学习数据结构的时候,最开始入门的也是最基础的两种数据结构是线性表和链表结构。线性表以数组为代表,数组我们平时很常用,我们都知道数组有个优点就是查询和修改很快这个具体的原理是因为数组在申请内存时,申请的是一块连续的相等大小的内存,那么我们在查找某个下标的元素的时候,只要知道了首地址、下标、每个元素所占的内存,那么我们很快就可以计算出目标地址,一下子就找到,其时间复杂度为O(1),但是数组的增删效率比较低,那是因为我们在增加或者删除一个元素的时候,该元素往后的其余元素都要随之逐个移动,这个移动的时间复杂

2021-04-10 17:09:16 187

原创 Java设计模式--SingleTon单例模式

单例模式在我们日常开发中其实也挺常见的,很多时候我们不喜欢别人对某个类创建太多的实例(亦或者需要频繁创建销毁某个对象,或者创建某个对象比较耗时消耗很多资源),那么我们就可以使用单例模式。单例模式的写法有很多,而有些写法其实纯在问题,那今天就在这篇文章中列举常见的单例写法并进行分析。首先就是最常见的饿汉式写法:(饿汉是指太饥饿了,急需,所以一上来就先new一个出来)public class SingleTonFactory { private static final SingleTonFa

2021-03-21 14:33:41 154 2

原创 242. 有效的字母异位词

原题地址:https://leetcode-cn.com/problems/valid-anagram给定两个字符串s和t,编写一个函数来判断t是否是s的字母异位词。示例1:输入: s = "anagram", t = "nagaram"输出: true示例 2:输入: s = "rat", t = "car"输出: false说明:你可以假设字符串只包含小写字母。进阶:如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情...

2021-03-21 09:46:00 130 2

原创 Java设计模式--Builder 建造者模式

建造者模式是我们平时开发中用的比较多的一种设计模式,特别是我们看源码的时候,感觉几乎是随处可见,那我们今天就以一个平日比较常见的例子来了解下建造者模式吧~小明是一家汽车公司的生产者,有天老板跟小明说,有个客户要买车,要10000辆,每辆车要有车头,车身,车轮,小明觉得很简单,然后就开始生产:public class Car { private String head; private String body; private String wheel; p

2021-03-20 11:27:11 171

原创 ArrayList 与 LinkedList -- 1

首先,我们从以下几个方面进行探究:1、数据结构上,顺序表和链表的差异、优缺点、适用范围;2、结合源码对两种数据结构进行分析;3、日常使用如何选择我们看下解答:1、二者存储结构的区别顺序表有以下特征:长度固定,必须在分配内存之前确定数组的长度,可以使用倍增-复制的办法来支持动态扩容; 存储空间连续,即允许元素的随机访问。 存储密度大,空间利用率高,内存中存储的全部是数据元素。 要访问特定元素,可以使用索引访问,时间复杂度为 O(1)。 要想在顺序表中插入或删除一个元素,都涉

2021-02-28 19:18:14 105

原创 Cloneable -- Java中的拷贝

昨天看一个知识点的时候,聊到了Java中的拷贝,感觉那边扩展的太多会影响到那边文章的篇幅,那么就在这里进行内容补充吧。讲到Cloneable接口的时候讲到了拷贝,那么我们在这里聊聊拷贝到额一些东西。首先从Java中传值方式入手,我们平时以为基本数据类型是值传递,引用数据类型是引用传递,其实不全是。像我们平时的int类型,是独立的,如果我们对一个变量a1 = 0进行拷贝,那么在内存中的存储是下面这样的:那这时候我们对a2进行修改,并不会影响到a1的值。那一个引用数据类型是什么样的呢:引用数

2021-02-28 17:42:26 109

原创 Java--反射

平时我们做项目写代码的时候,都是拿指定的类使用其api完成各功能的开发,但是如果一开始我们并不知道要使用的是类对象是哪个,这样是没办法new一个对象出来的,这时候就需要用到反射的技术了。反射就是在运行时才知道要操作的类是什么,并且可以在运行时获取类的完整构造,并调用其对应的方法,这是Java被视为动态语言的一个关键的特性。我们平时知道一个类,然后获取一个实例的操作很简单,直接new一下就好了,但想获取一个类就需要使用Class类的forName方法,参数是传入想要获得的类的全路径名,然后就可以获取到这个

2021-02-16 11:29:01 94 2

原创 Java--泛型

泛型:参数化类型为什么要使用泛型因为泛型提供了编译期的类型安全,确保只能把正确类型的对象放入集合中,避免在运行时出现ClassCastException。使用泛型的好处:1、可以让多种数据类型执行相同的代码;2、泛型在使用的时候指定类型,不需要强制类型转换。泛型类将类型由原来的具体类型参数化:public class MyClass<T> { private T data; public MyClass(){};}public class MyCl

2021-01-23 17:18:37 173 2

原创 化整为零 -- Android 插件化 (概述)

记得前几年在前一家公司上班,我们做项目的时候经常会报65535的问题,这是个很出名的问题,我记得那时候很多人外面面试的时候都会问到如何解决65535的问题,那首先了解下这是个什么问题。在我们平时开发的Android 应用,一个app所遇到的代码都打包在一个dex文件里,这个dex文件是一个类似于Jar包那样的存储了很多有Java编译字节码的归档文件。我们平时app启动的时候,第一次加载dex文件时是执行DexOpt对dex文件进行加载优化,这时会把每一个类中方法的id进行检索存储在一个链表中,问题就出在

2020-12-13 15:18:03 344

原创 Invalid Gradle JDK configuration found. Open Gradle Settings Use JDK from project structure

当我打开一个项目报这个错,看报错信息大致也能知道是JDK配置的问题,然后我就去查看JDK的配置:这里本来是没有设置的,我就给设置了Java1.8,应用了下,发现还是不行,然后我无心点了两次报错信息的链接,然后在弹开窗口选择了apply,,,,然后studio就开始build了。问题就解决了。。。或者就hi按照网上网友推荐的方法:修改此处的参数,然后重新build即可。...

2020-11-29 09:42:11 11127 2

原创 用Androidstudio生成SO包

最近项目有个需求,里面需要自己生成so包,但是以前一直没有接触过,今天尝试着自己弄了一个,防止以后忘记了,写个文章记录下来相关步骤:首先,so包会涉及到jni的内容,我们要记得配置NDK,下载好NDK之后,我们开始创建项目,这里比较重要的一步是,我们创建项目的时候要选择C++,如下图:然后把前面下载的NDK配置到项目中:检查下这里是否有配置好:准备工作完成,开始操练:先创建然后在终端中命令进入MyJni.class所在的java目录下:右键复制MyJni类

2020-10-04 18:25:30 977

原创 Java中的大魔王JVM -- 内存管理

上一篇文章跟大家聊过了JVM将class文件加载到内存的过程,那进了内存里面具体是怎么工作的,那今天继续了解下运行时数据区的原理。网上有个图来描述运行时数据区的内存分配,我觉得挺好的,贴来分享给大家...

2020-08-09 10:14:41 243

原创 Java中的大魔王JVM -- 类加载

这两天准备了点JVM的一些知识,拿来聊一聊吧。首先国际惯例介绍下JVM(Java Virtual Machine) Java虚拟机。内容包括一套字节码指令集、一组程序寄存器、一个虚拟机栈、一个虚拟机堆、一个方法区和一个垃圾回收器。我们平时说Java语言跨平台运行,主要就是靠这JVM,平时写完代码运行的过程,就是代码文件经过虚拟机编译成相应的.class字节码文件,然后经过解释器翻译成不同平台(操作系统)可以解析的语言调用本地方法库,然后进行执行。虚拟机的实例随着进程的开始而开始,有多个进程启动就会创建多

2020-08-07 11:10:49 352

原创 记一次简洁而优雅的网络请求分析--Retrofit

前面我们已经分析过了OkHttp网络请求框架的源码,今天继续聊聊一个新的框架,Retrofit。如果还没看过OkHttp框架的源码分析,点击这里(OkHttp源码解析)查看,有助于对今天内容的了解。国际惯例,先了解下框架的功能和特点:Retrofit是Square公司基于OkHttp开发的对网络请求接口进行封装的开源框架。框架中采用大量的注解,很大程度上简化了网络请求的代码,而且解耦性很强,现广泛使用于移动端和Java后端。那我们就从简单的使用开始把:首先,就是添加依赖和添加网络权限:im

2020-07-31 20:36:27 189

原创 千里之外,取其SJ(数据)-- 网络请求之okhttp

今天想聊聊网络请求框架,谈到网络框架,不得不聊聊okhttp。okhttp开发者是square公司,作为一个Android开发者,对此框架肯定不会陌生,该网络请求框架的优点有很多:1、支持HTTP2.x,允许所有同一个主机地址的请求共享一个socket连接;2、使用连接池减少请求延时;3、使用GZIP压缩减少响应数据的大小;4、缓存机制,避免一些重复的请求;5、自动重连和重定向。不管我们是直接使用okhttp还是使用基于okhhtp开发的Retrofit,都很有必要搞清楚okhttp的原理。那我们从一个

2020-07-25 15:47:02 267

原创 千里之外,取其SJ(数据)-- 网络请求之HTTP和HTTPS

谈到网络,必然离不开Http和Https先简单了解下Http吧HTTP协议(Hyper Text Transfer Protocol,超文本传输协议),用于从服务器传输超文本到本地浏览器的传送协议。工作于C/S架构,浏览器作为HTTP客户端通过URL向HTTP服务端服务器发送请求,web服务器根据接收到的请求,向客户端发送响应信息。HTTP工作于应用层,传输的数据单位是报文,分为请求报文和响应报文。...

2020-07-22 16:13:15 419

原创 千里之外,取其SJ(数据)-- 网络请求之网络基础

这么多年来,网络请求一直是一个app的重头戏,毕竟没了网络,app就成了单机版的了,今天想聊聊我们的老朋友okhttp。那首先,我们先补充复习一些基础知识:1、OSI模型

2020-07-21 16:14:11 190

原创 万能粘合剂,Android进程间通信--Binder

夏天到了,蚊虫又开始嚣张了,最近深圳这边又有登革热的新闻报导,大家一定要做好防护,平时做好卫生,保持清洁,也做好防蚊措施哈!那今天我们来聊聊Android的进程间通信之Binder机制。首先,我们先了解下什么是进程?按照官方说的:进程一般指一个执行单元,在PC和移动设备上指一个程序或者一个应用。一个程序至少有一个进程,一个进程至少有一个线程。 我们把一个app比作一个公司吧,那么一个进程就是一个部门,然后线程就是这个部门的成员。一个公司至少有一个部门(当一个公司只有一个部门的时候,这个部门就是啥..

2020-07-17 15:46:53 177

原创 倒杯茶,细细品,我们聊聊--Handler

之前总习惯于写笔记,总结都是写到笔记中,我的而博客有点吃醋了,所以我决定也要宠幸下我的博客,把我平时总结的一些东西更新到博客中,如有不对之处,欢迎指出!今天谈谈面试的常客--Handler。...

2020-07-11 21:44:31 180

原创 用应用宝安装自己打包的apk的时候,提示包损坏

提前声明一下,我的AS是3.2版本的,gradle版本是4.1的,前面自己写了demo,签名打包之后用应用宝安装,提示包已损坏,请重新下载。。。使用adb安装命令是可以正常安装,本地运行也是可以正常运行,但是用应用宝安装就出问题,尝试了各种网上说的方法,还是没有效果,最后看到一个帖子,里面提到“把build tools 版本改成27.0.2就行了”,我就试了一下,确实可行,这里只要修改在27以

2018-03-29 10:35:59 2477

原创 阿里云热修复之初体验—Sophix

Sophix 热修复

2018-03-28 23:24:43 625

原创 快应用--按照官方文档走一遍

快应用 - 照着官方文档来一遍!

2018-03-26 11:55:56 348

原创 我不喜欢一直写findViewById怎么办--用ButterKnife呀

    我们平时应用界面中多多少少都要使用到控件,在代码中要使用这些控件,就需要对布局中的view们进行findViewById,这下好了,一个布局文件里面有十几个甚至几十个view,然后我们就重复地findViewById...篇幅又长又没啥意义,怎么办,我就是不想使用findViewById--推荐使用ButterKnife!!!具体的原理和说明已经有大神做了很充分的解释了,我这边就按照自己的...

2018-03-06 17:29:26 648

原创 JavaScript在web中的简单使用(三)

前言:本文中会通过几个案例,对JavaScript中常用的API进行学习。案例一 对用户填写的数据进行校验一、准备工作首先要知道我们要执行哪些步骤 ?第一步,我们要确定要提交要用到的是哪个事件。显然我们这里要用到onsubmit事件,然后为其绑定一个函数(checkForm());第二步:如何获取用户输入的数据。知道了事件之后,就是要获取用户填写的数据了,要想获取填写的数据,就需要先获

2017-09-14 14:51:12 544

原创 JavaScript在web中的简单使用(二)

前言:前面对JavaScript的常用概念做了介绍,现在一起了解一下JavaScript在web中是如何使用的,本文会举出几个案例用来解释说明JavaScript的用法。引入方式我们先了解一下JavaScript应该如何引入到我们的Html页面中,JavaScript的引入方式大体上分为两种,方式一:内嵌,即在我们的HTML页面中直接嵌入JavaScript脚本;方式二:外联,即链接外部的

2017-09-05 17:29:58 737

原创 开篇--JavaScript在web中的简单使用(一)

本文主要是对JavaScript一些概念做简要的介绍,方便对后面内容的理解

2017-09-04 12:06:52 633 1

空空如也

空空如也

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

TA关注的人

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