自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(75)
  • 资源 (5)
  • 收藏
  • 关注

转载 OKHttp源码详解

首先大概看一下整个流程图:接下来讲解的思路将根据这个流程来。一、创建一个OkHttpClient对象:    OkHttpClient client = new OkHttpClient();二、怎么不见Builder呢?看下OkHttpClient的构造函数,其中new Builder(),这里采用了默认配置。OkHttpClient.Builder成员有很多

2017-11-30 15:39:15 243 1

原创 JVM详解

JVM整体结构:第一个模块:通过JVM  IDE将.java文件生成.class文件。具体的编译流程:核心就是对源文件的词法和语法进行一个分析。第二个模块:类加载器的子系统,将class文件的字节码加载到jvm对应的虚拟机内存中。类加载器的核心是classLoader,classLoader又是动态跟新的核心。JVM提供了所有classLoader,既以下四种:Bo

2017-11-14 20:06:51 1624 4

原创 dex文件与class文件如何生成

一、dex文件与class文件如何生成Class文件:可以被JVM所识别的文件。记录一个类文件的所有信息。文件结构:a)一种8位字节的二进制流文件。  b)各个数据按顺序紧密的排列,无间隙。  c)每个类或接口都单独占据一个class文件。Dex文件:可以被DVM所识别的文件。记录整个工程所有类的信息。文件结构:a)一种8位字节的二进制流文件。  b)各个数据按顺序紧密

2017-11-14 20:04:26 1331 1

转载 彻底弄懂HTTP缓存机制及原理

http://www.cnblogs.com/chenqf/p/6386163.html第一次请求数据时,时序图:  关于返回的缓存规则:HTTP缓存有多种规则,根据是否需要重新向服务器发起请求来分类,我将其分为两大类(强制缓存,对比缓存) 1、强制缓存 2、对比缓存  区别:强制缓存如果生效,不需要再和服务器发生交互,而对比缓存不管是否生效,都需要

2017-10-22 20:42:26 357

原创 ImageLoader原理分析

ImageLoader的实现:· 图片压缩· 内存缓存· 磁盘缓存· 网络拉取图片· 图片的同步加载· 图片的异步处理一、图片压缩功能的实现:通过采用BitmapFactory.Options来压缩图片,主要是用到了它的inSampleSize参数,当inSampleSize为1时,采样后的图片大小为原始图片大小;当inSampleSize大于1时,比如为2,那么采

2017-10-20 21:39:37 977

原创 Android 编译插桩操纵字节码

自定义 Gradle 插件、Transform API 的使用、ASM 的使用

2023-09-27 20:57:36 475

原创 Leetcode算法-滑动窗口最大值

的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的。滑动窗口每次只向右移动一位。

2023-08-13 19:07:57 173

原创 Leetcode算法-最小覆盖子串

所有字符的子串,则返回空字符串。所有字符的最小子串。

2023-08-12 20:19:53 217

原创 Leetcode算法-无重复字符的最长子串

请你找出其中不含有重复字符的。

2023-08-12 20:09:34 162

原创 Leetcode算法-求根节点到叶节点数字之和

树中每个节点都存放有一个。计算从根节点到叶节点生成的。给你一个二叉树的根节点。是指没有子节点的节点。

2023-08-12 18:05:59 141

原创 Leetcode算法-二叉树的完全性检验

中,除了最后一个关卡外,所有关卡都是完全被填满的,并且最后一个关卡中的所有节点都是尽可能靠左的。

2023-08-12 18:01:09 220

原创 Leetcode算法-岛屿的最大面积

(代表土地) 构成的组合,这里的「相邻」要求两个。如果没有岛屿,则返回面积为。岛屿的面积是岛上值为。

2023-08-06 20:10:33 130

原创 Leetcode算法-岛屿的周长

岛屿中没有“湖”(“湖” 指水域在岛屿内部且不和岛屿周围的水相连)。格子是边长为 1 的正方形。网格为长方形,且宽度和高度均不超过 100。计算这个岛屿的周长。方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地的格子相连组成的岛屿)。

2023-08-06 19:37:53 119

原创 Leetcode算法--岛屿数量

岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。视频讲解:https://b23.tv/z9xkMal。(水)组成的的二维网格,请你计算网格中岛屿的数量。此外,你可以假设该网格的四条边均被水包围。

2023-08-06 19:33:29 272

原创 Leetcode算法--合并区间

一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。表示若干个区间的集合,其中单个区间为。请你合并所有重叠的区间,并返回。

2023-08-06 19:04:33 242

原创 Leetcode算法--最大数

重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。输出结果可能非常大,所以你需要返回一个字符串而不是整数。

2023-08-06 18:59:50 226

原创 Leetcode算法--归并排序

归并排序思路和实现代码

2023-08-06 10:45:21 867

原创 Leetcode算法--堆排序

堆排序思路和代码实现

2023-08-06 10:40:53 942

原创 Leetcode算法--快速排序

快速排序思路和代码实现

2023-08-06 10:37:42 758

原创 Android APP Bundle

使用 Play 核心库,您的应用日后可以请求将这些模块下载为动态功能 APK。通过 Dynamic Delivery,Google Play 只会将该模块的代码和资源提供给设备。App bundle 与 APK 的不同之处在于,您无法将其部署到设备。相反,它是一种上传格式,可将您应用的所有经过编译的代码和资源都包含在一个编译工件中。因此,在您上传已签名的 app bundle 后,Google...

2020-03-18 17:02:11 283

原创 Android插件化 免安装加载Activity

接上篇https://blog.csdn.net/j18874964028sss/article/details/104860086Plugin端需要被启动的PluginActivitypublic class PluginActivity extends AppCompatActivity { @Override protected void onCreate(Bundl...

2020-03-15 21:11:58 218

原创 Android插件化 类加载器DexClassLoader

方式一:从已安装的apk中读取,必须要有一个activity,且需要配置ACTION。利用这种方式获取插件信息,然后来构建classLoader加载类。插件APP代码:AndroidManifest.xml<intent-filter> <action android:name="com.jiangshuai.pluginone"/></in...

2020-03-14 14:37:20 264

原创 Android gradle命令集

查看所有的projectthis.getProjects()def getProjects() { println '-----------------------' println 'projects' println '-----------------------' this.getAllprojects().eachWithIndex { Projec...

2020-01-20 15:37:13 279

原创 自定义Gradle Plugin插件

new 'Android Library'model : 我取名为pluginone 修改pluginone model的build.gradle文件apply plugin: 'groovy'apply plugin: 'maven'dependencies{ // gradle sdk implementation gradleApi() // groov...

2020-01-15 17:45:31 168

原创 插件热修复技术

资料:https://zhuanlan.zhihu.com/p/33017826

2020-01-15 15:15:18 94

原创 Android Flutter Native笔记

在native中add flutter fragment方法1:// Get a reference to the Activity's FragmentManager to add a new // FlutterFragment, or find an existing one. FragmentManager fragmentManager = getSupport...

2020-01-12 16:20:45 2828

转载 Android Flutter Dialog笔记

void main() => runApp(MyApp());class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', theme: Theme...

2020-01-12 00:32:20 314

转载 RXJava记录

1、单例参考写法:public static RxBus getRxBus() { if (rxBus == null) { synchronized (RxBus.class) { if(rxBus == null) { rxBus = new RxBus(); } }...

2020-01-10 14:58:16 153

原创 Handler机制详细解

本文主要从Handle、Looper、Message、MessageQueue这四个方面进行讲述。一、首先看一下Message源码1、Message的成员变量有: public int what; public int arg1; public int arg2; public Object obj; public Messenge...

2019-01-12 18:43:36 328 1

转载 webview

Cache-Control与 Last-Modified 一起使用;Expires与 Etag一起使用;没有更新回包304,有更新回包200参考:https://blog.csdn.net/carson_ho/article/details/71402764https://juejin.im/entry/58ba3302570c350062124f68https://blog.csdn....

2019-01-07 21:04:01 188

转载 webview截取全屏

/storage/emulated/0/  这个路径表达的就是sd卡路径。可以用 adb shell去查看手机某路径下文件情况 cd /storage/emulated/0/Android/data/com.example.jiangshuai.scropimage/cachels全屏截取webview,并将图片保存到本地package com.example.jiangshua...

2018-12-22 19:43:49 374

原创 Android view

package com.example.jiangshuai.testview;import android.app.Activity;import android.content.res.Resources;import android.graphics.Rect;import android.os.Bundle;import android.support.v7.app.AppC...

2018-11-04 19:09:17 174

原创 设计模式:代理模式

定义:为一个对象提供一个替身或占位符以控制对这个对象的访问。下面我们来详细的看一下类图:首先是ISubject,它为RealSubject和Proxy提供了接口。通过实现同一接口,Proxy在RealSubject出现的地方取代它。RealSubject是真正做事的对象,它是被Proxy代理控制访问的对象。Proxy持有RealSubject的应用。客户和RealSubject的交互必须通过Pro...

2018-07-07 22:06:04 240

原创 设计模式:装饰者模式

定义:动态的将责任附加到对象上。若要拓展功能,装饰者提供了比继承更有弹性的替代方案。设计初衷:通常可以使用继承来实现功能的拓展,如果这些需要拓展的功能种类很繁多,那么势必生成很多子类,增加系统的复杂性;同时,使用继承实现功能拓展,我们必须可预见这些拓展功能,这些功能是编译时就确定了,是静态的。设计目标:允许类容易拓展,在不修改现有代码的情况下,搭配新的行为。要点:装饰者和被装饰者拥有共同的超类(基...

2018-05-17 22:20:34 162

原创 秋招Android面试总结:美团、携程、百度、腾讯、长银58

今年秋招自己分别先后拿下:携程、长银58消费金融、美团的offer。同时也参加过百度、腾讯、好未来、拼多多、cvte的面试,在这里总结一下,希望对后来之人有帮助。如果你正准备秋招或者春招可以参考以下三点:坚持、基础、能吹的项目。美团一面:最好的单例模式线程同步实现方式,介绍synchronized与volatile的具体区别APP瘦身你从哪里方面考虑设计模式快速排序美团

2017-11-20 15:08:35 3901 1

原创 插件化易混淆概念

2017-11-14 20:37:41 262

原创 Atlas插件化

框架核心原理:框架主要包括4个层次,每个层次都为上一层提供服务,每个层次都有自己不同的核心作用。我们的runtime层呢主要是负责管理插件的生命周期,而插件的生命周期呢又由安装、启动、激活以及运行这几个状态来组成。 1、容器的接入:         1)引入插件及依赖仓库2)引入atlas类型的plugin3)最后添加它的api库4)配置atlas参数2、Bun

2017-11-14 20:11:38 483

原创 small插件

small插件化集成:步骤:1、在gradle中先配置一些参数。2、在宿主工程中初始化我们的small,在application中初始化。3、以指定的规范来插件插件化,遵守命名规范,模块名需要以app开头,包名中需要包含app。因为Small会根据包名对插件进行归类。4、编译创建好的插件,在命令行中输入gradlewbuildBundle命令,如果没有异常的话我们的插件和宿

2017-11-14 20:10:42 373

原创 插件化实现基础

自定义插件化:  插件化对Manifest处理主要核心是有两个工作:第一个工作是文件的合并,就是文件的io操作,将所有的清单文件合并到总的manifest里面去。第二个点就比较复杂了:需要修改整个构建流程,这样的话新的构建流程才能将所有的插件中清单文件合并到数组manifest文件中。插件化框架如果加载插件当中的类:我们每一个插件都是一个apk,既然是apk 那么它里面

2017-11-14 20:10:07 309

原创 tinker热修复

Tinker的集成总结:首先在我们的gradle文件中去配置一个注解库,一个核心的SDK库,有了这两个库,我们还需要定义一个Tinkmanager对tinker API层做一层封装。有了这个Tinkmanager以后,我们第三步定义了一个CustomTinkerLike,这个对象继承于ApplicationLinke,在这个类中完成tinker的初始化,而为什么需要这个ApplicationLik

2017-11-14 20:09:01 247

PDF转Word工具

将PDF转成Word文档。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

2018-01-14

ZigBee CC2530视频教程

ZigBee CC2530视频教程 最近在倒腾Zigbee,准备参加物联网全国大赛,学校有给我们发Zigbee开发板,但是对于喜欢折腾的我来说,用开发板还是不过瘾,起码也得知道怎么去画一块板子。于是乎,在百度一番后就有了下面这篇文章。 作为片上系统Soc,CC2530的集成度是非常高的,这也方便了我们开发者。搭建它的最小系统比较简单。

2018-01-07

计算机网络精讲视频教程

共105个课时,讲计算机网络基础,对你绝对非常有帮助!! 1、课程介绍 2、局域网 3、Internet和广域网 4、规划ip地址和MAC地址。。。。。 55、TCP和UDP的应用场景。。。。60、UDP首部。。。79、HTTPT协议和网址。。。。105、创建临时无线网络

2018-01-07

ZigBee无线网络和收发器

ZigBee是为低数据速率、短距离无线网络通信定义的一系列通信协议标准。基于ZigBee的无线设备工作在868MHZ, 915MHZ和2.4Z频带。其最大数据速率是250Kbps. ZigBee技术主要针对以电池为电源的应用,这些应用对低数据速率、低成本、更长时间的电池寿命有较高的需求。在一些ZigBee应用中,无线设备持续处于活动状态的时间是有限的,大部分时间无线设备是处于省电模式(也称休眠模式)的。因此,ZigBee设备在电池需要更换以前能够工作数年以上。

2018-01-07

OkHttp源码详解

详细讲解OKHttp的实现。。。。。。在网络请求的小节中,我们已经看到了Interceptor的布局,在负责和服务器建立连接的ConnectInterceptor之前,就是CacheInterceptor。他们执行过程就是:在建立连接之前,我们检查响应是否已经被缓存、缓存是否可用,如果可用则直接返回缓存的数据,否则就进行后面的流程,并在返回之前把网络的数据写入缓存。

2017-11-30

空空如也

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

TA关注的人

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