自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 开源库openhtmltopdf html 转pdf特殊字符适配

HTML转PDF特殊字符

2022-01-21 11:11:06 2880

原创 Git diff 比较两个版本文件之间的差异

一:git diff 基本用法git diff 什么参数都不加,默认比较工作区暂存区的差异git diff --cached [<path>...]比较暂存区与最新本地版本库(本地库中最近一次commit的内容)git diff HEAD [<path>...]比较工作区与最新本地版本库。如果HEAD指向的是master分支,那么HEAD还可以换成mastergit diff commit-id [<path>...]比较工作区与指定commit-id的差异g

2020-08-18 08:47:58 15821

原创 Git 大文件清理

查找大文件git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')"结果zsh: no matches found: .git/objects/pack/*.idx4fa9c4356393c0a3047a64e2662d5b624a471b3e47e9174f93476eb8fb744c66b2060b

2020-07-24 14:11:39 912

原创 # Git 大文件清理

查找大文件git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')"结果zsh: no matches found: .git/objects/pack/*.idx4fa9c4356393c0a30...

2020-07-24 14:09:46 244

原创 从源码的角度分析BigDecimal 初始化报错

报错信息项目Gosn 解析报错,报错信息如下。java.lang.NumberFormatException: Bad offset/length: offset=0 len=0 in.length=0仔细找了下发现是 BigDecimal 报出的错误,下面BigDecimal是初始化的代码时抛出错误的代码(部分代码)。 public BigDecimal(char[] in, int offset, int len) { int begin = offset; // first

2020-05-15 18:32:21 1541 1

原创 Gradle 和 Gradle Wrapper 到底是什么关系。

Gradle Wrapper我们推荐使用 Gradle Wrapper 执行gradle 构建,(后面简称Wrapper).Wrapper 实质上是一个脚本,这个脚本使用申明版本的gradle 执行构建任务。如果本地没有Wrapper 中申明的gradle 版本,Wrapper会先下载它。这样开发者不必必须下载和项目指定版本相同的gradle,就可以完成构建。从而为公司节约时间、节约成本。W...

2019-10-31 16:36:56 807

原创 Gradle 和 Gradle Wrapper 到底是什么关系。

Gradle Wrapper我们推荐使用 Gradle Wrapper 执行gradle 构建,(后面简称Wrapper).Wrapper 实质上是一个脚本,这个脚本使用申明版本的gradle 执行构建任务。如果本地没有Wrapper 中申明的gradle 版本,Wrapper会先下载它。这样开发者不必必须下载和项目指定版本相同的gradle,就可以完成构建。从而为公司节约时间、...

2019-10-31 16:36:23 528

原创 Jenkins 系列 -- 总目录

概述本系列文章从Jenkins的安装开始,到最后完成打包后发布到应用分发服务器,生成下载二维码并发送邮件给相关人员。逐步递进,一步一步的完成一个完整 的自动化打包流程 。下面是文章列表链接。Jenkins系列 -- Mac上 jenkins 安装Jenkins 系列 -- 创建第一个打包项目Jenkins 系列 -- 参数化打包Jenkins 系列 - 安装包上传到 to...

2019-10-30 19:16:33 82

原创 Jenkins 系列 -- 总目录

概述本系列文章从Jenkins的安装开始,到最后完成打包后发布到应用分发服务器,生成下载二维码并发送邮件给相关人员。逐步递进,一步一步的完成一个完整 的自动化打包流程 。下面是文章列表链接。Jenkins系列 – Mac上 jenkins 安装Jenkins 系列 – 创建第一个打包项目Jenkins 系列 – 参数化打包Jenkins 系列 - 安装包上传到 tomcat 并提供下载...

2019-10-30 19:13:48 110

原创 Jenkins 系列 -- 二维码下载安装

概述上一篇我们已经把Jenkins 打包好的 apk 文件上传到tomcat服务器,可以提供下载了。但这个下载需要手动去点击,才能下载。而现在的人又都那么懒,最好的下载方式当然是扫个二维码就能下载。生成二维码工具我们这里使用 qrcode,这是个python 开源库。具体使用方法可以看官方文档。关于怎么安装 python ,作为程序员,我想自己搞定吧。不过好多人推荐这个教程,我也贴在这吧,这...

2019-10-30 19:07:04 418

原创 Jenkins 系列 -- 邮件通知

概述打包成功,我们需要通知相关人员下载最新的安装包进行测试。或者打包失败需要通知开发人员看看什么原因等等,所以打包后发个邮件通知下相关人员,相当的有必要。设置邮箱jenkins 自带的邮件通知不是很好用。我们使用插件版本Email-extension plugin,这个插件在推荐插件列表中。如果你当时选择了安装推荐插件,那么你已经安装好了。如果没有可以自行搜索安装。所以这里我们直接去设置。...

2019-10-30 19:03:14 287 1

原创 jenkins 系列 - 安装包上传到 tomcat 并提供下载

概述网上有些文章是上传到各种内测平台。个人感觉,不是很好。比如广告、比如平台不稳定。比如平台审核不通过等等,非常多的因素会导致不能下载。其实自己搭一个简单的文件服务器还是简单的。tomcat 配置为下载服务器我们可以把tomcat 配置为简单为文件下载服务器修改 conf/web.xml使用命令 vim conf/web.xml<init-param> <para...

2019-10-30 18:53:55 444

原创 jenkins 系列 -- 二维码下载安装包

概述上一篇我们已经把Jenkins 打包好的 apk 文件上传到tomcat服务器,可以提供下载了。但这个下载需要手动去点击,才能下载。而现在的人又都那么懒,最好的下载方式当然是扫个二维码就能下载。生成二维码工具我们这里使用 qrcode,这是个python 开源库。具体使用方法可以看官方文档。关于怎么安装 python ,作为程序员,我想自己搞定吧。不过好多人推荐这个教程,我也贴在这吧,这...

2019-10-30 18:46:11 271

原创 Jenkins系列 -- Mac上 jenkins 安装

概述Jenkins 是一款开源 CI&CD软件,用于自动化各种任务,包括构建、测试和部署软件。Jenkins 支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序。jenkins 支持插件扩展的方式去实现不同的功能。jenkins 目前提供一千多种插件,真的可以说是实现你任何需求。Jenkins 官方文档安装jenkins一:pgk 安装包安装这是官网的...

2019-10-30 18:42:01 211

原创 jenkins系列 -- Mac上 jenkins 安装

概述Jenkins 是一款开源 CI&CD软件,用于自动化各种任务,包括构建、测试和部署软件。Jenkins 支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序。jenkins 支持插件扩展的方式去实现不同的功能。jenkins 目前提供一千多种插件,真的可以说是实现你任何需求。Jenkins 官方文档安装jenkins一:pgk 安装包...

2019-10-30 18:41:51 361 1

原创 Jenkins 系列 -- 创建第一个打包项目

上一篇我们安装好了 Jenkins 设置了管理员用户。这一篇我们将实现第一自动化打包,迈出了我们成功的第一步。全局工具配置Manage Jenkins -->Global Tool Configuration一: jdk 安装可选择自动安装或设置使用本地的jdk如下。当勾选Install automatically 时,系统会自动从官网下载对应版本的jdk。如果选择使...

2019-10-30 18:36:06 116

原创 Jenkins 系列 -- 创建第一个打包项目

上一篇我们安装好了 Jenkins 设置了管理员用户。这一篇我们将实现第一自动化打包,迈出了我们成功的第一步。全局工具配置Manage Jenkins -->Global Tool Configuration一: jdk 安装可选择自动安装或设置使用本地的jdk如下。当勾选Install automatically 时,系统会自动从官网下载对应版本的jdk。如果选择使用本地安装的jd...

2019-10-30 18:35:45 405

原创 jenkins 系列 -- 参数化打包

概述这应该是本系列的重点了。参数化打包,打包时注入参数到apk 包中,动态修改相关参数。添加构建参数找到相应project点击配置,对工程进行配置。General菜单下勾选This project is parameterized ,就会出现添加参数的下拉按钮。点击添加参数按钮并选择 Choise Parameter类型参数。命名为BUILD_TYPE,值为Release...

2019-10-30 18:25:34 548

原创 Jenkins 系列 -- 参数化打包

概述这应该是本系列的重点了。参数化打包,打包时注入参数到apk 包中,动态修改相关参数。添加构建参数找到相应project点击配置,对工程进行配置。General菜单下勾选This project is parameterized ,就会出现添加参数的下拉按钮。点击添加参数按钮并选择 Choise Parameter类型参数。命名为BUILD_TYPE,值为Release 和 Debug...

2019-10-30 18:25:03 1841

原创 jenkins 系列 - 安装包上传到 tomcat 并提供下载

概述网上有些文章是上传到各种内测平台。个人感觉,不是很好。比如广告、比如平台不稳定。比如平台审核不通过等等,非常多的因素会导致不能下载。其实自己搭一个简单的文件服务器还是简单的。tomcat 配置为下载服务器我们可以把tomcat 配置为简单为文件下载服务器修改 conf/web.xml使用命令 vim conf/web.xml<init-param> ...

2019-10-24 16:45:33 348

原创 那些高端、优雅的注解是怎么实现的<4> -- 使用Annotaion Processing Tool 解析注解

概述注解的解析可以通过反射,但反射的性能较低。所以在移动平台上,如安卓端使用,那是得不偿失的。那么Android 端如何解析注解的呢?Android 端使用 apt 解析注解。然后使用自动生成的代码实现需要的逻辑。自定义注解系列文章那些高端、优雅的注解是怎么实现的<0> – 注解的分类那些高端、优雅的注解是怎么实现的 <1> – 自定义注解语法那些高端、优雅的注...

2019-10-17 19:34:54 82

原创 那些高端、优雅的注解是怎么实现的<0> -- 注解的分类

概述此文仅仅讲解注解的分类,让你对注解有个大概的认识,形成一个概念。如果你对注解比较熟悉或者不想看这么浅显的东西,可以直接下一篇。此系列文章,我将从最基础的分类开始,一直到最后完成一个自定义实战项目为止。循序渐进,图文结合,希望既清晰白话,又经济实用。但限于本人能力有限,不足之处,烦请指出。另本系列文章多处借鉴刘果国老师的文章,再次感谢老师的辛勤付出。自定义注解系列文章那些高端、优雅的注解...

2019-10-17 19:33:14 79

原创 那些高端、优雅的注解是怎么实现的 <1> -- 自定义注解语法

概述使用元注解来定义我们自己的注解,就是自定义注解。一个自定义注解可能像下面这样@Target({ElementType.TYPE,ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Inherited@Documentedpublic @interface Message { String decr() defau...

2019-10-17 19:32:03 114

原创 那些高端、优雅的注解是怎么实现的<2> -- 解析注解q

概述通过反射获取类、方法或成员上的 运行时 注解信息,从而实现动态控制程序运行逻辑,这也是注解的魅力所在。当然反射是比较影响性能的一种方式,在手机端是不适用的。但手机端也有很多注解类框架,那么他们是怎么实现的呢?那就是使用 APT 解析 编译时 注解。在编译时会通过注解标示来动态生成一些 Java 代码或者 xml,而在运行时,注解已经不存在了,它会依靠编译时生成的 Java 代码来实现我们需...

2019-10-17 19:30:20 92

原创 那些高端、优雅的注解是怎么实现的<3> - 可继承性@Inherited

这是一个看起来让人迷糊的特性,所以我拿出一个章节来说明,然而它并没有那么重要。自定义注解系列文章那些高端、优雅的注解是怎么实现的<0> – 注解的分类那些高端、优雅的注解是怎么实现的 <1> – 自定义注解语法那些高端、优雅的注解是怎么实现的<2> – 解析注解那些高端、优雅的注解是怎么实现的<3> - 可继承性@Inherited那些...

2019-10-17 19:28:53 99

原创 那些高端、优雅的注解是怎么实现的<5> --使用Annotaion Processing Tool 自定义注解

一:概述上一篇我们用普通的方式完成了披萨店的代码,下面我们用注解的方式去实现,彻底解决这个需求的痛点。自定义注解系列文章那些高端、优雅的注解是怎么实现的<0> – 注解的分类那些高端、优雅的注解是怎么实现的 <1> – 自定义注解语法那些高端、优雅的注解是怎么实现的<2> – 解析注解那些高端、优雅的注解是怎么实现的<3> - 可继承性...

2019-10-17 19:26:58 147

原创 那些高端、优雅的注解是怎么实现的<6> --自定义持久层框架-类 Hibernate

概述上一篇我们用apt,实现了一个自动生成工厂类的实例。这篇我们使用反射的方式去实现一个持久层框架,当然只是核心代码,并不是可以直接拿来使用的商业项目 ,类似于 Hibernate。自定义注解系列文章那些高端、优雅的注解是怎么实现的<0> – 注解的分类那些高端、优雅的注解是怎么实现的 <1> – 自定义注解语法那些高端、优雅的注解是怎么实现的<2>...

2019-10-17 19:23:31 93

原创 那些高端、优雅的注解是怎么实现的--总目录

概述这是一系列文章,通过java注解的详细解析,期望您以后看到注解不在感到神秘。不管是现在后台开发的Spring家族,还是移动端的各种框架。如大神JakeWharton的butterknifte、Dagger2等 。 注解随处可见,所以我们必须理解学会注解。介绍首先我们会去搞清楚什么是注解?注解由那些元素组成?怎么去定义一个注解?注解为什么那么神奇的功效?它是怎么做到的?带着这些疑问我们从最...

2019-10-17 19:17:46 74

原创 HttpURLConnection 网络请求最佳实践

概述在Android开发中网络请求是最常用的操作之一, Android SDK中对HTTP(超文本传输协议)也提供了很好的支持,这里包括两种接口:标准Java接口(java.NET) —-HttpURLConnection,可以实现简单的基于URL请求、响应功能;Apache接口(org.appache.http)—-HttpClient,使用起来更方面更强大。但在android AP...

2019-10-17 19:15:11 412

原创 Android bug -- Retrofit java.io.IOException: Canceled

错误出现的场景描述我们的项目中使用了Retrofit 结合 RxJava、RxAndroid 调用后台接口,在 Retrofit 中有个拦截器,去拦截打印log 信息。当调用chain.proceed(newRequest)方法的时候出现上述错误。分析这不是个必现的错误。只是调用某些接口才会出现。从Retrofit 的源码可以知道。当 Retrofit 的网络请求未完成,而观察者已经取...

2019-10-13 11:50:59 4945 1

原创 TextInputLayout 惊现底层bug-on a null object

报错信息提取Android - Attempt to invoke virtual method 'void android.view.View.getBoundsOnScreen(android.graphics.Rect)' on a null object reference整体崩溃信息FATAL EXCEPTION: main Process: br.com.fornaro.ar...

2019-10-13 00:53:50 174

原创 TextInputLayout 惊现底层bug-on a null object

报错信息提取Android - Attempt to invoke virtual method 'void android.view.View.getBoundsOnScreen(android.graphics.Rect)' on a null object reference整体崩溃信息FATAL EXCEPTION: main Process: br.com.fo...

2019-10-13 00:52:33 171

原创 Mac 上安装 TensorFlow

系统要求及前提条件macOS 10.12.6 (Sierra) 或更高版本(64 位)(不支持 GPU)需要 Python 3.4、3.5 或 3.6虽然我们建议使用 TensorFlow 提供的 pip 软件包,但也可以使用由社区提供支持的 Anaconda软件包。安装我们这里使用 Anaconda 进行安装conda create -n tensorflow_p36 pi...

2019-10-13 00:38:00 278

原创 bug日记-单例模式下的监听器应该怎么设置?

概述没错,这是一个bug引发的思考。其实今天这个标题感觉很难取,可能词穷,也可能语文体育老师教的。不会归纳总结。现在,开始说正事。镇楼的妹子要漂亮代码是枯燥的,那么。。。。问题描述一般Retrofit、OkHttp 大家都会封装为单例模式。在我司的一个项目中OkHttp中有个文件上传进度拦截器。拦截器的构造函数里有个文件上传进度监听器。因为是单例模式,那么很显然 OkHttp只会初始化...

2019-10-13 00:29:25 125

原创 Android attr format属性详解 (自定义属性详

下面再对attr的format的类型进行一下说明。如下图:booleanboolean表示attr是布尔类型的值,取值只能是true或false。stringstring表示attr是字符串类型。integerinteger表示attr是整数类型,取值只能是整数,不能是浮点数。floatfloat表示attr是浮点数类型,取值只能是浮点数或整数。fractionfracti...

2019-10-13 00:22:54 1195

原创 五分钟学会 Material Design之实现上滑隐藏ToolBar,TabLayout

一:目的效果1.这个时候上图,不废话二:你需要了解的概念1. **CoordinatorLayout **该控件是Design包下的一个控件,也是Design包中最复杂、功能最强大的控件:那么它的神奇之处在哪里? 它是众多子view的领导者,能组织view之间互相协作的一个ViewGroup。CoordinatorLayout使得子view之间知道了彼此的存在,...

2019-10-13 00:15:26 120

原创 Android attr format属于详解 (自定义属性详解)

Android attr format属性详解 (自定义属性详解)下面再对attr的format的类型进行一下说明。如下图:booleanboolean表示attr是布尔类型的值,取值只能是true或false。stringstring表示attr是字符串类型。integerinteger表示attr是整数类型,取值只能是整数,不能是浮点数。f...

2019-10-13 00:12:53 241

原创 Android Attr、Style和Theme详解

关于Attr、Style和Theme详解本文主要参考以下三篇博客的内容,感谢三位的分享1.Attr、Style和Theme详解2.一些关于style和attr的使用问题3.Android中View自定义XML属性详解以及R.attr与R.styleable的区别一:定义及基本使用方法Attr:属性,风格样式的最小单元;Style:风格,它是一系列Attr的集合用以定义...

2019-10-13 00:09:09 542

原创 Dagger2 入门有这篇就够了(晋级篇)

Dagger2 入门晋级篇,直奔主题吧!一 :组件之间的依赖MainActivityModule 中Schoole的提供方法,需要参数Principal 的实例,但是MainActivityModule ,中并没有提供。可是AppComponent对应的AppModule有提供。于是我们让MainComponent依赖AppComponent,并在AppComponent中将...

2019-10-13 00:02:27 140

原创 Dagger2入门有这篇就够了(入门篇)

网上的Dagger2各种多,但看完了,只能让原本懵逼的更懵逼,我只能说大神的世界我不懂,那么Dagger2真那么难吗?给我耐心,我给你答案!!!1.定义:没耐心了解的,也可以下一步。Dagger is a fully static, compile-time dependency injection framework for both Java and Android. ...

2019-10-12 23:37:19 367

空空如也

空空如也

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

TA关注的人

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