自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 三顾Python,整理后成了我的一次分享

这是一次在字节内部的新人分享???? ,初衷是关于官网不同SDK版本下ApiDiff数据的数据获取关于Python的几个优势更简单的编程方式打印Hello WorldJava:public class Hello { public static void main(String[] args) { System.out.println("Hello World"); }}Python:print("Hello World")数组打印Java:S

2020-09-26 21:00:52 299

原创 一起用Gradle Transform API + ASM完成代码织入呀~

本文Demo地址:https://github.com/ClericYi/Asm_Demo前言最近的工作内容主要其实并不是说主攻插桩,但是这一次使用Lancet插桩给项目本来带来了极大的收益,这和工程的设计相关,当初的设计就是在对抖音中一个原有组件尽可能小的修改情况下,完成我新功能的接入,方案从SPI --> 主工程Lancet --> Lancet下沉到一个自定义组件中,一次次尝试确实也是领会这个黑科技的恐怖之处了。先了解以下当时的场景:先比较一期和二期的优势和劣势:实践发现一期.

2020-09-26 21:00:14 637

原创 锦囊篇|Java中的SPI机制

在一起用Gradle Transform API + ASM完成代码织入呀~这篇文章中我曾经提及关于SPI的方案,这篇文章针对的内容有三点:为什么当初要选择SPI,他的实现流程是什么样的,以及它存在什么样的问题。什么是SPIService Provider Interface翻译成中文就是服务提供接口,简称SPI,它是JDK内置的一种机制,用途就是本地服务发现和提供。用一个简单的案例来说明上面的图:今天是星期六没得上班,也就意味着小易同学得在家里把吃饭(调用方) 的问题解决了,那这个时候小易.

2020-09-26 20:59:33 362

原创 锦囊篇|一文摸懂SharedPreferences和MMKV(一)

使用方法SharedPreferences// 1:获得SharedPreferences,这是直接包含在Context中的方式,直接调用即可// 四种写入模式:MODE_PRIVATE、MODE_APPEND、MODE_WORLD_READABLE、MODE_WORLD_WRITEABLEval sp = baseContext.getSharedPreferences("clericyi", Context.MODE_PRIVATE)// 2:获取笔,因为第一步获得到相当于一张白纸,需要对应.

2020-07-04 10:46:47 413

原创 锦囊篇|一文摸懂SharedPreferences和MMKV(二)

MMKV源码分析初始化 / MMKV.initialize(this);在MMKV的整套流程中,MMKV的初始化起着承上启下的作用。public static String initialize(Context context) { // 获取根路径 String root = context.getFilesDir().getAbsolutePath() + "/mmkv"; MMKVLogLevel logLevel = MMKVLogLevel.L

2020-07-04 10:46:11 392

原创 Glide都在用的LruCache,你学会了吗?

前言说到Glide就有点尴尬,我本来想出一篇《手撕Glide》,但是很遗憾,源码实在太多了。写着写着就3000多字了,甚至还没写完,实在不合适,因为我写文的原则是短小精悍,所以就暂时不出这篇文章了,这次就先讲讲Glide都在用的LruCache有什么神奇之处。另外我抖音的面试在即,也不知道自己水平到了没有,现在出一篇算一篇先。思维导图使用方法及结果在项目中直接导入Glide的库,调用内部的LruCache来看看效果。LruCache lruCache = new LruCache<Str.

2020-06-22 09:24:27 347 1

原创 面试中的HashMap、ConcurrentHashMap和Hashtable,你知道多少?

前言学过数据结构的读者们想必其实也都学过HashMap,面试官问你的时候,想来你都是很清楚的知道HashMap是怎样的一个构成?确实很简单,就是数组加链表嘛。那再问你Hashtable和HashMap的区别是什么?脑子也不用想,又能出来一个答案线程安全和线程不安全,Hashtable不允许存在空值呗。那继续往深处问,HashMap是怎么做性能优化的?这个时候你是怎么样的反应呢?如果知道红黑树,那就能答出来;不知道的话那不是就凉了,因为这个时候连ConcurrentHashMap都需要放弃回答了!!!.

2020-06-18 21:50:12 204

原创 锦囊篇|一文摸懂EventBus

使用方法在app下的build.gradle的dependencies中进行引入,当然高版本也容易出现问题。implementation 'org.greenrobot:eventbus:3.2.0'使用三步骤:(1) 定义事件public class MessageEvent { public final String message; public MessageEvent(String message) { this.message = message.

2020-06-16 15:46:06 342

原创 关于JVM,你必须知道的那些玩意儿

类的加载机制先使用一张图整个加载机制所包含的过程。通过这张图我们可以了解到,关于类的加载其实就是可以分为五个大阶段,不过下面文中主要从加载、验证、准备、解析还有初始化这五个方面来做一个讲解:加载需要完成以下三项任务:(1)通过一个类的全限定名来获取定义此类的二进制字节流。(并没有指定数据必须从Class文件中获取)(2)将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。(3)在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口。.

2020-06-09 18:38:16 211

原创 锦囊篇|一文摸懂Handler

前言在日常开发中,我们势必会使用到子线程和UI线程的通信,而起着桥梁作用的就是我们常用的Handler。但是他的内部是怎么运作的?运作的过程中存在什么问题?需要我们注意,本文将会详细讲解。解析Handler从图中我们就可以知道了,整个Handler工作组成的包括了Handler、Looper、MessageQueue、Message这四个部分。MessageQueue和Message分别只是一个队列和消息实体类,自然不再多说。而Handler和Looper的具体是怎样的呢?在我的模拟Hand.

2020-06-05 22:40:46 180

原创 锦囊篇|一文摸懂LeakCanary

LeakCanary泄漏目标推测LeakCanary想来也是我们的一个老朋友了,但是它是如何做到对我们的App进行内存泄漏分析的呢?这也是我们今天要去研究的主题了。我们要先思考的第一个问题也就是App中已经存在泄漏了,那我们该怎么知道他泄漏了呢?????????????,我么应该知道在JVM中存在这样的两种关于实例是否需要回收的算法:引用计数法可达性分析法引用计数法对于 引用计数法 而言,存在一个非常致命的循环引用问题,下面我们将用图分析一下。类A和类B作为一个实例,那么类A和类B的计

2020-06-05 12:36:50 179

原创 关于多线程,你必须知道的那些玩意儿

进程与线程概念进程和线程作为必知必会的知识,想来读者们也都是耳熟能详了,但真的是这样嘛?今天我们就来重新捋一捋,看看有没有什么知识点欠缺的。先来一张我随手截的活动监视器的图,分清一下什么叫做进程,什么叫做线程。想来很多面试官会问,你对进程和线程的理解是什么,他们有什么样的区别呢?其实不用死记硬背,记住上面的图就OK了。正好里面有个奇形怪状的App,我们就拿爱优腾中的爱举例。先来插个题外话,今天突然看到爱奇艺给我的推送,推出了新的会员机制 —— 星钻VIP会员,超前点播、支持 五台 设备在线、.

2020-05-24 22:26:50 664

原创 锦囊篇|一文摸懂ButterKnife

前言于2020年3月26号,Jack Wharton 官宣 ButterKnife 废弃了。但是我们就没有必要去学习了吗?显然并不是这样的,一个开源库背后的每一分思想和技术都是我们应该去探究的点。使用方法最新版本具体信息根据ButterKnife的官网来进行查找。导入包。 在app下的build.gradle的dependencies中进行引入,当然高版本也容易出现问题。implementation 'com.jakewharton:butterknife:10.2.1'annota.

2020-05-23 09:22:45 1468

原创 锦囊篇|一文摸懂RxJava

前言于3月14号,RxJava开源了他的第三个版本。这个版本中,更新了一下的内容:(1)包结构变化RxJava 3 components are located under the io.reactivex.rxjava3 package (RxJava 1 has rx and RxJava 2 is just io.reactivex. This allows version 3 to live side by side with the earlier versions. In additi

2020-05-15 11:36:38 828

原创 锦囊篇|一文摸懂OkHttp

前言在面试中,OkHttp作为我们基本属于必用的第三方库来说,也是一个非常重要的考点,所以对其原理的掌握也会让我们的能力得到一定的提升。OkHttp官网地址:https://square.github.io/okhttp/基本使用先一段引入关于OkHttp的使用,这是直接拉取了官网挂着的使用方法。因为在一般的使用过程中,后台可能会通过比较带有的session或者cookie来判断当前用户是否和缓存的用户相同,所以一般一个项目整体使用单例模式来创建OkHttpClient的对象。OkHttpC.

2020-05-15 11:34:39 361

原创 设计模式的十八般武艺

![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91c2VyLWdvbGQtY2RuLnhpdHUuaW8vMjAyMC81LzUvMTcxZTJjMzRmODMxY2EwNg?x-oss-process=image/format,png)# 六大原则 ## 单一职责原则> 定义:就一个类而言,应该仅有一个引起它变化的原因。其实字面意思就已经...

2020-05-05 14:15:21 208

空空如也

空空如也

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

TA关注的人

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