Android 进阶5:Glide4.0源码分析
这篇博客其实准备了很久,从Glide的各种使用到Glide的源码分析,Glide的源码很复杂,个人感觉,比LeakCanary,Eventbus等框架源码复杂很多,网上说别Picasso源码复杂,以后再看Picasso的源码吧。 本片博客打算分为三个部分 Glide的使用以及原理 Glide的源码分析 Glide的生命周期 1: Glide的使用 其实关于Glide 的使用,网上有很多,基本都是大同小异,在此不再陈述,这里说一些Glide的比较生疏的用法; 自定义添加动画 当我们第一次加载动画
NodeJs后端实现文件上传和下载
最近公司需要一些做基础服务以及一个APP的后台数据分析管理系统, 为了成为全栈工程师,自告奋勇的开启了Nodejs的开发后端。 现在有一个基础服务:file的上传和下载,关于为什么是基础服务?因为file的上传和下载与业务逻辑无关,不管什么业务逻辑都可能调用该接口,故称之为:基础服务。 还有:短信网关也属于基础服务。 声明:我的开发环境是:Express 闲话少叙,开启正文。平时后端的文件上传思路都是:前端——后端服务器——CDN服务器(存储文件的服务器)。其中前端到后端服务器使用的一般也就是
Android进阶6:View的事件分发机制源码
前言 关于事件分发机制,这个东西对于开发者,很重要,例如:解决滑动冲突;对于面试者,也很重要,比如:请描述一下View的事件分发机制~。说句实话,这个源码是看了很长时间,一直不敢写这篇文章,生怕误人子弟啊,说实话,刚开始刚觉很难,但是硬着头皮再看,也就那么回事了。。。 View分发机制的相关方法 View dispatchTouchEvent(ev) : 专门处理事件 onTouchEvent(ev) : ViewGroup dispatchTouchEvent(ev) : 它做的也就两件事,
Android进阶7:内存优化——LeakCanary原理分析
好的项目离不开健壮的代码,对于想要写出健壮的代码,解决内存泄漏是必须的。 对于LeakCanary,对于大多人是不陌生的,也就是检测内存泄漏的工具。可能在代码中我们会这样引入LeakCanary: //检查leakCanary和APP是否在同一个进程,如果是同一个进程就返回,不在同一个进程,就注册。
//因为不再同一个进程,不会对APP进程造成消极影响(如:APP进程变慢或者out of memory)
if (LeakCanary.isInAn
Android进阶7:APK瘦身(减少APK体积)
对于Android开发来说,关于减少APK体积的重要性,就不再多说了,直接进入正题吧。 首先对于APK瘦身,分为两种:压缩资源,压缩代码 1:移除无用资源和无用代码 移除无用资源分为两种:手动移除和自动移除 手动移除: Android studio提供了相应的检测工具 Link : Analyze > Inspect Code 在控制台的Inspection Results中显示出需要更改或者删除的代码和资源。 关于Link, 在开发者网站可以看到更详细的信息: 使用 Lint 改进您的代码
Android进阶8:SharedPreferences原理分析
关于SharePreferences(以下简称SP)的使用,相信从刚开发Android都开始使用了,但是对于SP的原理以及SP的缺点可能很多人没有系统的认知。 首先说一下SP的结论: 容易因此ANR:SP不适合存储数据量很大的信息;同时JSON以及HTML最好也不用SP存储,因为特殊字符转义是非常消耗性能的。 全量写入:在apply或者commit的时候,会先添加信息到内存中,在开启子线程,将内存中的信息写入到磁盘中(先清空磁盘该文件的信息,在全部写入)。 跨进程不安全:Sp没有跨进程的锁,就
Android中级工程师面试总结
年关将近,很多小朋友都在考虑换个坑蹲蹲,我也不例外,实际上我定义的初中高级开发对应如下: 初级工程师 1-3年 中级工程师 3-5年 高级工程师 5年以上 初级工程师:前两年基本都是——多处理一些场景,也就是扩展广度,在两年到三年的这一年是很关键的,需要扩展广度的同时,还要扩展深度,不过这个深度具体是大到什么程度,就根据个人情况了。 举个例子:我用了一个框架,这个框架怎么用?哪种场景使用?为什么这么用?原理是什么? 中级工程师 :由于我自己已经工作了三年,现在可以说是中级工程师了,一般来说现在
第四天重定向tr命令用户名密码修改
直接指针间接指针ext4格式硬链接特点不能跨分区[mage@centos7data]$ln/root/f3/data/f3.lnkln:failedtocreatehardlink‘/data/f3.lnk’=>‘/root/f3’:Invalidcross-devicelink硬链接本质是一个文件多个名称,夸分区则文件不同不能针对目录[mage@centos7data]$ln/data/d
设置Azure VM启用诊断
需要对 Azure 虚拟机进行故障排除时,可以使用Microsoft 提供的Azure 诊断。 诊断可以在运行虚拟机实例上捕获系统数据和日志记录数据。 诊断数据传输到所选的存储帐户。 本文将介绍如何在Azure 虚拟机上设置诊断、如何选择要收集的诊断信息的类型。1.登录Azure 门户2.在左侧导航栏中点击虚拟机3.选择需要设置诊断的虚拟机,然后点击监视中的诊断设置,点击启用来宾级别监视在通知中可
CSS实现父元素半透明,子元素不透明的问题
关于这个问题,其实是不熟悉opacity和rgba,下面解释一波~ 颜色我们都知道有RGB,在RG个新的值,成B颜色模型增加了一为了RGBA颜色模型。最后一个是alpha通道的值,取值在0.0到1.0之间。 共同点: 两者控制透明度的都是一个小数,从0到1,0.0是完全透明,1是完全不透明。 不同点: opacity属性的值,可以被其子元素继承!!! 让我看看代码如下:
<style type="text/css">
.box{
width:
JS浮点计算的问题以及处理
在使用浮点计算的时候明明1.56+0.07=1.63,小学生都会算的,可是计算机为什么算出来很长一段数字呢? 因为JavaScript 里的数字是采用 IEEE 754 标准的 64 位双精度浮点数。该规范定义了浮点数的格式。 不说话直接上代码看看:
<div>
数字1:<input id="input1" name="">
</div>
<div>
数字2:<input id="input2" name="">
</div>
<div>
<button id="add">+<
ionic3保存图片到本地相册
1安装 PhotoLibrary插件允许通过URL访问设备中的照片。因此,您可以使用普通的img标签来显示照片及其缩略图,以及不同的第三方库。还支持将照片和视频保存到库中。
npm install --save @ionic-native/photo-library
ionic cordova plugin add cordova-plugin-photo-library --variable PHOTO_LIBRARY_USAGE_DESCRIPTION="To choose phot
Jquery实现TreeGrid的效果【多级checkbox逻辑】
直接上代码吧: HTML:
<section style="display: flex;">
<div>TreeGrid:</div>
<div style="flex: 1">
<p style="margin-top: 0;">
<input class="all-check" type="checkbox" name="vehicle" value="Bike" />全选</p>
<div style="background: pink;margin-b
Vue中配置Sass
NPM中SASS的详细指南 1.创建自己的Vue项目 2.按照Sass依赖包
npm install sass-loader node-sass --save-dev 因为sass-loader需要node-sass和webpack 作为peerDependency。 3.在build文件夹下的webpack.base.conf.js的rules里面添加配置
{
test:/\.scss$/,
loaders:['style','css','sa
帮你搞定JS混淆的apply,call,bind~~
this对象指向会经常改变的,这会造成一些意想不到的影响。JavaScript提供了call、apply、bind这三个方法,来切换/固定this的指向。 首先说说他们三个之间的区别~ 相同点: 1、apply 、 call 、bind 三者都是用来改变函数的this对象的指向的; 2、apply 、 call 、bind 三者第一个参数都是this要指向的对象,也就是想指定的上下文; 3、apply 、 call 、bind 三者都可以利用后续参数传参; 不同点: 1、bind 是返回对应函
关于DOM的增删改那些事
DOM的了解 Dom是针对HTML和XML文档的一个API(应用程序编程接口),它秒回的是一个层次化的节点树,允许开发人添加,移除,和修改某一部分。 Document 1.Document类型可以表示HTML页面或基于XML的文档,不过最常见的还是作为HTMLDocument实例的document对象。
//所有浏览器都支持 document.documentElement和document.body
var html =document.documentElement;
alert(h
JS中对象比较数组对象中数据,没有增加有替换
设置一些模拟数据
//模拟数组
var arr = [
{ id: 1, child: { id: 111, content: 'aaa' } },
{ id: 2, child: { id: 222, content: 'bbb' } },
{ id: 3, child: { id: 333, content: 'ccc' } }
]
//模拟对象
var obj = { id: 3, child: { id: 333, content: 'ddd' } } 第一种方
JS判断当前是哪个浏览器
最近一直接触底层代码,测试中发现IE浏览器以前判断的方法行不通了。 上例子吧:
var explorer =navigator.userAgent;
//ie
if (explorer.indexOf("MSIE") >= 0) {
alert("ie");
}
//firefox
else if (explorer.indexOf("Firefox") >= 0) {
alert("Firefox");
}
//C
今日推荐
周排行