自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(60)
  • 资源 (2)
  • 收藏
  • 关注

原创 Android框架系列-搞定APT技术

1、基本介绍:【在程序编译阶段工作】按照处理时期,注解分为两种类型,一种是运行时注解,另一种是编译时注解。运行时注解:运行时注解的实质是,在代码中通过注解进行标记,运行时通过反射寻找标记进行某种处理。而运行时注解一直以来被呕病的原因便是反射的低效。Retrofit运用了运行时注解。编译时注解:核心依赖APT(Annotation Processing Tools)实现,原理是在某些代码元素上(如类型、函数、字段等)添加注解,在编译时编译器会检查AbstractProcessor的子类,

2021-06-28 16:36:42 445 1

原创 JetPack系列之Hilt使用

1、基本介绍:字段注入:Hilt 需要知道如何从相应组件Component中提供必要依赖项的实例。绑定:将某个类型的实例作为依赖项提供所需的信息。2、注解:@HiltAndroidApp:所有使用 Hilt 的应用都必须包含一个带有 @HiltAndroidApp 注释的 Application 类。@HiltAndroidApp 会触发 Hilt 的代码生成操作,生成的代码包括应用的一个基类,该基类充当应用级依赖项容器。生成的这一 Hilt 组件会附加到 Application 对象的

2021-06-21 18:34:01 1216

原创 走在自己的时区里

在时间上,纽约走在加州前面三个小时,New York is 3 hours ahead of California,但加州并没有变慢。but it does not make California slow.有人22岁就毕业了,Someone graduated at the age of 22,但等了五年才找到好工作!but waited 5 years before securing a good job!有人25岁就当上了CEO,Someone became a C

2021-04-06 16:30:34 472 1

原创 JVM系列-深入理解ClassLoader类加载器

1、类加载器:1.1、基本概念:【作用于类加载的加载阶段】当你写完了一个*.java文件的时候,编译器会把他编译成一个由字节码组成的class文件,当程序运行时,JVM会首先寻找包含有main()方法的类,把这个class文件中的字节码数据读入进来,转化成JVM中运行时对应的Class对象。执行这个动作的,就叫类加载器。类的加载就是虚拟机通过一个类的全限定名来获取描述此类的二进制字节流,而完成这个加载动作的就是类加载器。类加载器将.class文件的二进制文件装入JVM的方法区,并且在堆区创建描述这

2021-03-31 18:43:53 146

原创 JVM系列-类加载流程

1、基本介绍:类的加载指的是将类的.class文件【编译器将java文件编译成class文件】中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。JVM有预加载功能:类加载器并不需要等到某个类被“首次主动使用”时再加载它,JVM规范允许类加载器在预料某个类将要被

2021-03-31 15:55:22 104

原创 JVM系列-JVM内存区域划分

1、基本介绍:运行时数据区通常包括这5个部分:程序计数器(Program Counter Register)、Java栈(VM Stack)、本地方法栈(Native Method Stack)、方法区(Method Area)、堆(Heap)。2、程序计数器:【PC寄存器,每个线程都有一个单独的PC寄存器】是一块较小的内存空间,它可以看做是当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令。字节码指令、分支、循环、跳转、异常处理

2021-03-30 16:53:27 124

原创 JVM系列-JVM整体架构图

1、大框架:2、基本加载流程:首先Java源代码文件(.java后缀)会被Java编译器编译为字节码文件(.class后缀);然后由JVM中的类加载器加载各个类的字节码文件;加载完毕之后,交由JVM执行引擎执行;在整个程序执行过程中,JVM会用一段空间来存储程序执行期间需要用到的数据和相关信息,这段空间一般被称作为Runtime Data Area(运行时数据区),也就是我们常说的JVM内存,在Java中我们常常说到的内存管理就是针对这段内存空间进行管理(如何分配和回收内存空间)。3、执

2021-03-30 15:58:32 572 3

原创 Java字节码系列-了解字节码基本结构

1、基本介绍:.java文件通过javac编译后将得到一个.class文件,比如编写一个简单的ByteCodeDemo类,编译后生成ByteCodeDemo.class文件,打开后是一堆十六进制数,由十部分按照固定的顺序组成。JVM的指令集是基于栈而不是寄存器,基于栈可以具备很好的跨平台性(因为寄存器指令集往往和硬件挂钩),但缺点在于,要完成同样的操作,基于栈的实现需要更多指令才能完成(因为栈只是一个FILO结构,需要频繁压栈出栈)。另外,由于栈是在内存实现的,而寄存器是在CPU的高速缓存区,相较而言

2021-03-29 18:28:06 284

原创 Java设计模式系列-访问者模式

此设计模式系列,均为用通俗易懂的语言抛砖引玉,不作深究,最近在系统学习ASM字节码框架,里面用到了各种Visitor类,大量应用了访问者设计模式,特记录此篇文章。1、基本介绍:封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些数据元素的新的操作。主要解决:稳定的数据结构和易变的操作的解耦。假如一个对象中存在着一些与本对象不相干(或者关系较弱)的操作,可以使用访问者模式把这些操作封装到访问者中去,这样便避免了这些不相干的操作污染这个对象。2、成员:一个.

2021-03-11 14:59:14 95

原创 JVM系列-深究Java中的常量池

1、基本概念:1.1、常量:常量是用final修饰的变量或者是在编译时期定义好的字符串。常量在类编译时期载入类的常量池中。1.2、什么是字面量和符号引用:字面量包括:1.文本字符串 2.八种基本类型的值 3.被声明为final的常量等;符号引用包括:用一组符号来描述所引用的目标,符号可以是任何形式的字面量,只要使用时能无歧义地定位到目标即可。它与直接引用区分一下,直接引用一般是指向方法区的本地指针。一般包括三类常量:1.类和方法的全限定名 2.字段的名称和描述符 3.方法的名称和描

2021-03-11 11:28:53 133

原创 在mac上安装MySql遇到的那些坑

1、在官网下的MySql安装器,安装不了,老是最后一步报错安装器遇到一个错误,导致安装失败:原因:我用的是macos 10.15系统,它本身没有生成目录/private/tmp解决办法:打开目录/private/,然后手动建立文件夹tmp即可解决。2、在安装MySql后,启动不了,启动后几秒钟自动关闭:原因:看错误日志/usr/local/mysql/data/mysqld.loca...

2020-03-24 15:53:09 773 1

原创 【Docker系列01】Docker Mac安装教程

1、基本介绍:Docker 是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。可以类比于虚拟机,但是比虚拟机更为轻便。传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而Docker内的应...

2020-03-23 12:00:42 263

原创 【Git系列】git submodule-单项目多仓库管理方案

1、基本介绍:当项目比较大的时候便于复用,或者多个项目共用module。这个时候需要抽取项目公共模块,而且现在基本是使用git作为版本控制工具,这样就变成App Project 有多个module,每个module都是一个独立的git repository。而且我们希望单个的module都可以独立维护,可以更方便查看和随时随地同步更新。为了达成这样的目的我们可以使用git-submodule...

2020-01-09 11:23:19 1830

转载 展望未来,总结过去10年的程序员生涯总结性忠告

走过的路,回忆起来是那么曲折,把自己的一些心得体会分享给程序员兄弟姐妹们,虽然时代在变化,但是很可能你也会走我已经做过的10年的路程,有些心得体会你可以借鉴一下,觉得说得有道理的你就接纳,觉得说得没道理的,你就抛弃,以下是我发自内心的,给大家的忠告,特别是针对那些小弟弟妹妹们。01. 自己的户口档案、养老保险、医疗保险、住房公积金一定要保管好。由于程序员行业每年跳槽一次,我不隐瞒大家,我至...

2019-12-30 11:00:37 272

原创 mac终端bash、zsh、oh-my-zsh最实用教程

1. 基本介绍:Shell讲解可以详见另一篇shell博文。bash与zsh都是mac终端自带的shell命令解释器,早期macos系统默认使用bash解释器,在macos10.15系统中官方推荐使用zsh解释器。zsh原称为Z Shell。也是一种shell,兼容最常用的bash这种shell的命令和操作,并且有很多增强,超强的订制性。zsh功能很强大,但是配置超难,oh-my-zsh...

2019-11-20 15:58:32 2878

原创 【Firebase系列】认识Firebase

todo

2019-10-30 10:59:50 715

原创 【Hybrid App混合开发系列】带你重新认识WebView

todo

2019-10-30 10:56:06 246

原创 【Android开发精进之路】App启动页、闪屏页、广告页框架设计

todo

2019-10-30 10:53:59 419

原创 【App性能优化系列】App启动优化、白屏优化

todo

2019-10-30 10:49:19 177

原创 【Hybrid App混合开发系列】聊聊混合开发中的缓存设计

todo

2019-10-30 10:47:11 361

原创 【Hybrid App混合开发系列】混合开发也能给用户丝一般体验--用户体检优化白屏优化计划

todo

2019-10-30 10:43:58 208

原创 【Hybrid App混合开发系列】带你设计混合开发整体架构

todo-

2019-10-30 10:42:17 336

原创 【Hybrid App混合开发系列】 手把手带你封装跨平台的灵魂工具--DSBridge 通信桥接

todo

2019-10-30 10:33:39 548

原创 Android可以获取的各种唯一ID

Device ID:获取到的实际就是IMEI码。。官方sdk中已经标记为不推荐。Android ID:跟app的签名id、user、device绑定的唯一id。在手机进行出厂设置或app的签名id改变时,该值会更改。Root手机可以更改此值。IMEI:基于GSM的(International Mobile Equipment Identity)国际设备唯一标识。MEI...

2019-10-30 10:23:16 1157

原创 【算法】布隆过滤器-大数据处理

todo:完成公司组件化架构就来填上

2019-02-21 15:17:14 222

原创 Mac上安装HomeBrew傻瓜式详解教程

1、基本介绍:Homebrew也称brew,MacOS下基于命令行的最强大软件包管理工具,使用Ruby语言开发。类似于CentOS的yum或者Ubuntu的apt-get,拥有安装、卸载、更新、查看、搜索软件等很多实用的功能。简单的一条指令,就可以实现包管理,而不用你关心各种依赖和文件路径的情况,十分方便快捷。Homebrew可以安装在MacOS中不包含的UNIX工具,换句话说就是MacO...

2018-12-29 14:27:40 2223 2

原创 大话Android中APT技术

1、AOP:1.1、基本介绍:如果说,OOP是把问题划分到单个模块的话,那么AOP就是把涉及到众多模块的某一类问题进行统一管理。Android AOP就是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,提高开发效率。1.2、应用场景:日志记录:业务埋点持久化...

2018-12-22 11:41:42 485 2

原创 OKHTTP3源码解读:Dispatcher任务分发队列

1、基本介绍:Dispatcher持有一个线程池和三个可代表的线程维护的队列,并提供了add,remove,cancel三个性质的方法。只不过这个取消的方法交给了拦截器RetryAndFollowUpInterceptor处理,拦截器会调用coneation.canel()进行传输层的握手中断。2、Dispatcher类: public final class Dispatcher {...

2018-12-10 17:37:09 384

原创 【算法】递归算法

1、基本介绍:【递归用的是数学归纳法】递归可以用来解决阶乘、斐波那契数列、汉诺塔、杨辉三角的存取、字符串反转、字符串全排列、二分查找、树的深度求解在内的八个经典问题。递归函数就是直接或间接调用自身的函数,也就是自身调用自己,并且有去(递去)有回(归来)。“有去”是指:递归问题必须可以分解为若干个规模较小,与原问题形式相同的子问题,这些子问题可以用相同的解题思路来解决。“有回”是指 : ...

2018-08-27 12:37:57 687

原创 OkHttp3源码解读四:连接层

1、基本介绍: • Connection连接层:管理网络连接,发送新的请求,接收服务器访问,都是在ConnectInterceptor中完成的。 • Connection: ○ 客户端通过HTTP协议与服务器进行通信,首先需要建立连接,okhttp并没有使用URLConnection, 而是对socket直接进行封装,在socket之上建立了connectio...

2018-08-07 17:02:05 302

原创 OkHttp3源码解读三:缓存层

1、基本介绍: • Cache缓存层:管理本地缓存,当用户的网络请求在本地已有符合要求的缓存时,OkHttp会直接从缓存中返回结果,从而节省网络开销。 • OkHttp的缓存工作都是在CacheInterceptor中完成的。2、重要类: 2.1、Cache: • Cache管理器,其内部包含一个DiskLruCache将cache写入文件系统。 • ...

2018-08-07 17:00:53 259

原创 OkHttp3源码解读二:拦截器

1、基本介绍:一个拦截器的intercept()方法所执行的逻辑大致分为三部分: • 在发起请求前对request进行处理 • 调用下一个拦截器,获取response • 对response进行处理,返回给上一个拦截器2、各种拦截器:• RetryAndFollowupInterceptor: ○ 用来做自动重试和自动重定向的拦截器; ...

2018-08-07 16:58:50 280

原创 OkHttp3源码解读一:接口请求层

1、基本介绍:接口层:接收用户的网络访问请求(同步请求/异步请求),发起实际的网络访问,接受服务器返回的结果。2、重要类:2.1、OkHttpClient:OkHttp框架的客户端,更确切的说是一个用户面板,用户使用OkHttp进行各种设置,发起各种网络请求都是通过OkHttpClient完成的。每个OkHttpClient内部都维护了属于自己的任务队列Dispat...

2018-08-07 16:24:40 417

原创 Retrofit2源码解读

1、基本介绍:1.1、重要类介绍:call:创建Http网络请求。提供了同步异步请求方法:execute()、enqueue()。生成Request对象,返回请求结果对象。callFactory:Call的工厂类。默认直接new OkHttpClient()。如果你需要对okhttpclient进行详细的设置,需要构建OkHttpClient对象,然后传入。...

2018-08-06 16:17:26 316

原创 【算法】单链表反转

前言: 算法重不重要:这个话题有史以来,公说公有理婆说婆有理。我个人觉得你要想进大厂,进技术氛围牛逼的团队,算法是必考察的,Android中Handler机制中的Message缓存池设计就是普通的单链表操作,HashMap中的解决Hash碰撞也是用链表数据结构来实现,常用的集合类里面的实现逻辑基本都是各种数据结构,Android各种框架用到的缓存机制比如Lru算法,还有各...

2018-07-10 17:43:34 6746

原创 Android子线程更新UI

1、子线程更新UI的方法:1.1、子线程调用Handler的sendMessage(message)或者post(runnable)发送事件:mHandler = new Handler() { @Override public void handleMessage(Message msg) { //操作界面 ...

2018-07-08 10:51:37 559

原创 JVM系列-GC垃圾回收机制

1、基本介绍:• 在Java中,程序员不需要去关心内存动态分配和垃圾回收的问题,这一切都交给了JVM来处理。 • 它让开发者无需关注空间的创建和释放,而是以守护进程的形式在后台自动回收垃圾。该进程会在内存紧张的时候自动跳出来,把堆空间的垃圾全部进行回收,从而保证程序的正常运行。 • 顾名思义,垃圾回收就是释放垃圾占用的空间,那么在Java中,什么样的对象会被认定为“垃圾”?那么当一些对象被...

2018-07-08 10:38:27 444

原创 【性能优化】65535方法数超出

1、基本介绍: 我们写完 java代码之后,dx tool 会把 java 编译成 Dalivik 虚拟机能识别的DEX 文件,这个文件里最多能够索引65535 个 method。 这些 method 是指能够 索引 (reference) 到的,而不是 定义 (define) 的。或者说,如果你定义了一个方法,但这个方法并没有被调用,那么就不算在内。 ...

2018-07-06 11:23:31 560

原创 【设计模式.结构型】装饰模式

1、基本介绍:装饰模式又名包装(Wrapper)模式。装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。动态地给一个对象增删一些额外的功能。(继承不能做到这一点,继承的功能是静态的,不能动态增删。2、成员:抽象构件(Component)角色: 它是具体构件和抽象装饰类的共同父类,声明了在具体构件中需要实现的业务方法,它的引入可以使客户端以一致的方式处理未被装...

2018-07-06 10:49:43 219

原创 【理财】利息利率之类的基本概念

利息:  利息是因本金的借贷(存、放)而发生的的货币报酬;利息的实质是利润的一部分,是剩余价值的转化形式。利息的收益与利率成正比。   利息=本金×利率×时间本息:本息 = 本金+利息利率:  利率也叫利息比率或利息率, 表示一定时期内利息量与本金的比率,通常用百分比表示,按年计算则称为年利率。按月计算的叫月利率。   利率= (利息/(本金x时间))×100%...

2018-05-25 12:55:43 459

Rxjava2操作符大全

Rxjava2操作符大全,方便你使用Rxjava2;Rxjava2操作符大全,方便你使用Rxjava2;Rxjava2操作符大全,方便你使用Rxjava2

2018-04-24

空空如也

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

TA关注的人

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