漫谈Http和Https
一.Http🦄Http简介HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,它是构建于 TCP/IP 协议之上的一个应用层协议(网络进行通信的规则),默认端口号是 80。HTTP协议工作于客户端-服务端架构之上。HTTP客户端通过URL向HTTP服务端发送所有请求,HTTP服务端根据接收到的请求后, 向客户端发送响应信息。HTTP 是一种无状态 (stateless) 协议,HTTP协议本身不会对发送过的请求和相应的通信状态进行持久化处理。这样做的目的是为了保持HTTP协议的简单性,从而能够快速处理大量的事务, 提高效率。 但是,很多应用场景中,我们需要保持各种状态,如:登录状态等。我们就必须引入一些技术来记录管理状态,例如Cookie等技术。目前绝大多数的Web开发,都是构建在HTTP协议之上的。 🦓Http的特点HTTP...
Android上传aar到Jcenter和Jitpack
一.上传项目到Jcenter1.注册jcenter账号进入注册地址选择右边sign up here 进行注册,建议直接使用github账号授权登录。(qq,网易等邮箱很多时候收不到验证码,所以要想成功完成注册最好用google邮箱) 2.创建Repository(仓库)注册成功之后创建Repository,作为存放开源库的仓库,最好选择为公共仓库(public),仓库名称和仓库类型为maven,仓库名称在后面上传时需要用到。 3.获取 API Key登录bintray, Edit profile -> API Key 可以获取上传的秘钥key,后面上传项目的时候需要使用。 4.配置引入 bintray-release插件项目根目录build.gradle配置,加入bintray-release插件 1234567891011121314151617181920buildscript { ... repositories { ... } dependencies { ... ...
Okhttp3.0配置支持第三方签名Https证书
一.Https简介HTTPS全称为Hyper Text Transfer Protocol over Secure Socket Layer或是Hypertext Transfer Protocol Secure 中文含义为“超文本传输安全协议” 。是以安全为目标的HTTP通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 。HTTPS 在HTTP 的基础下加入SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面。 二.Okhttp支持Httpsokhttp默认情况下是支持https协议的网站的,比如https://www.baidu.com等,可以直接通过okhttp请求就可以获取对应的数据。需要注意的是Okhttp支持的https的网站基本都是CA机构颁发的证书,...
Android依赖注入框架Dagger2全面使用总结
一 依赖注入依赖注入(DI)是控制反转(Inversion of Control,IoC)的一种重要方式,IoC是将依赖对象的创建和绑定通过被依赖对象类的外部来实现。依赖注入提供一种机制,将需要依赖对象的引用传递给被依赖对象。它是面向对象的一种设计模式,其目的是为了降低耦合。举个栗子: 12345public class Person { Decorate decorate; public Person(){ decorate = new Decorate(jacket,shoe); } 这里的Person对象的初始化为实例化Decorate,如果Decorate类实例化参数增加,则必须对Person对象初始化进行修改。如果还有其他类的也是按照这种方式创建Decorate类,那么就需要修改多处,这违背了单一职责原则和开闭原则。因此需要引入依赖注入来解决这个问题。依赖注入,就是将依赖注入到宿主类(或者叫目标类)中,从而解决上面所述的问题。 二...
使用Aop技术提升Android开发效率
一.AOP概念AOP 和...
Android颜色透明度
十六进制颜色透明度表格 透明度 十六进制值 100% 全透明 00 99% 03 98% 05 97% 08 96% 0A 95% 0D 94% 0F 93% 12 92% 14 91% 17 90% 1A 89% 1C 88% 1F 87% 21 86% 24 85% 26 84% 29 83% 2B 82% 2E 81% 30 80% 33 79% 36 78% 38 77% 3B 76% 3D 75% 40 74% 42 73% 45 72% 47 71% 4A 70% 4D 69% 4F 68% 52 67% 54 66% 57 65% 59 64% 5C 63% 5E 62% 61 61% 63 60% 66 59% 69 57% 6B 56% 6E 56% 70 55% 73 54% 75 53% 78 52% 7A 51% 7D 50% ...
Windows及Linux平台安装AMP(Apache+MySQL+PHP )
一. linux平台安装AMP安装apache1. 查看是否安装了apache服务器(apache服务的软件包名称叫做httpd)。1231、可以通过 apachectl -v 或者httpd -v 查看apache是否安装,如果安装了的话会显示版本号;2、如果通过rpm包安装的话可以用 rpm -q httpd 查看,如果安装的的话会显示包的名称; 2. 通过yum安装Apache服务程序。1yum install httpd -y 3. 安装完成后,启用并启动Apache服务。12sudo systemctl enable httpdsudo systemctl start httpd 4. 检查Apache服务的状态和版本。1sudo systemctl status httpd 5. 查看Apache监听的端口。1netstat -an|grep :80 可以看到,80端口处于监听状态,说明服务已经启动,为使客户端能访问Apache服务器的80端口,要打开防火墙的TCP80端口。 1iptables -I INPUT -p tcp --dport 80 -j...
Java-高级特性之锁
Java多线程开发中,如果涉及到共享资源操作场景,那就必不可少要和Java锁打交道。 Java中的锁机制主要分为Lock和Synchronized,本文主要分析Java锁机制的使用和实现原理,按照Java锁使用、JDK中锁实现、系统层锁实现的顺序来进行分析,话不多说,let’s go~ Java锁使用在Lock接口出现之前,Java程序是靠synchronized关键字实现锁功能的,而JavaSE 5之后,并发包中新增了Lock接口(以及相关实现类)用来实现锁功能,它提供了与synchronized关键字类似的同步功能,只是在使用时需要显式地获取和释放锁。虽然它缺少了(通过synchronized块或者方法)隐式获取释放锁的便捷性,但是却拥有了锁获取与释放的可操作性、可中断的获取锁以及超时获取锁等多种synchronized关键字所不具备的同步特性。 Java锁使用示例: Lock lock = new ReentrantLock();lock.lock();try {// ..} finally...
Android调试桥(ADB)
一.ADB概念1. 什么是ADB?ADB全称Android Debug Bridge(安卓调试桥),在PC端安装ADB并且配置好ADB环境变量。就可以通过DOS命令行窗口输入命令的方式来对Android设备进行调试。 2. ADB的作用?ADB的主要左右有两大类,一类是直接对Android进行调试。二类是通过adb shell进入到shell模式以后用linux命令行 对设备进行操作。 对应用进行调试 安装卸载应用。 将文件从pc推到Android设备中,从Android设备中拉取图片。 获取截图,录屏,获取正在显示的Activity等功能。 安卓系统是基于Linux系统开发,也就支持常见的Linux的命令。通过adb shell来执行这些命令。 二.ADB的环境配置(Win10版)为了ADB能够在PC端全局任意位置使用DOS命令行进行操作,首先要在PC端配置环境变量。 1.下载ADB文件到PCADB And Fastboot for...
Java-高级特性之泛型
一. Java 中的泛型Java 5 中添加了泛型,用以编译时类型检查,借此消除使用集合类时常见的ClassCastException风险。 123456List list = new ArrayList();list.add("abc");list.add(1); for(Object obj : list){ String str=(String) obj; } 上面的代码可以很好地编译,但是在运行时会引发ClassCastException,因为我们试图将集合中的对象强制转换为String,而其中一个元素是Integer类型。使用泛型之后: 123456List<String> list1 = new ArrayList<String>(); list1.add("abc");//list1.add(1); //编译时期就会发生报错for(String str : list1){ //不需要类型转换,...