为什么说TCP是面向流的协议?而UDP是面向数据报的协议? IP、TCP、UDP协议头IP 是 TCP/IP 协议中的核心协议,为 TCP、UDP 等协议提供了一种尽力而为、无连接的数据报传输服务,也就意味着 IP 协议不保证成功传输,也不维护数据报相关的链接状态信息。IPv4 数据报头部至少为 20 字节,结构如下:版本:确定 IP 协议的版本(IPv4 或 IPv6),从而能正确解释后面的内容。IHL(头部长度):由于选项的存在,由此字段确定...
【Java】反编译Mac版Charles,修改一些功能 目录反编译jar修改jar参考反编译jar修改jar如何修改jar包中的class文件参考Javassist 使用指南(一)如何把java App包装成Mac安装包 - How to create a macOS installer for a Java application (.jar)...
【Android】移动端接入Cronet实践 移动端接入Cronet实践QUIC协议获取Chromium源码编译CronetAndroid / iOS buildsDesktop builds (targets the current OS)Running the ninja files生成的文件使用CronetAndroid Debug LogSee VLOG(1) and VLOG(2) logging:See VLOG(1) loggi...
【Android】ADB工具原理探究 ADB简介Android Debug Bridge (adb) 是一个Android的命令行工具。可以用来连接模拟器或实际的移动设备。比如 adb logcat, adb shell。Dalvik Debug Monitor Server(DDMS) 后台也是运行的adb来实现监控调试移动设备。总体而言,adb有两个用途:监控连接设备 :adb会监控所有已经连接设备(包括模拟器),譬如设...
【Android】Doze模式识别与检测 从 Android 6.0(API 级别 23)开始,Android 引入了两个省电功能:Doze模式(官方翻译为低电耗模式)和 App Standby模式(官方翻译为应用待机模式),可通过管理应用在设备未连接至电源时的行为方式为用户延长电池寿命。Doze模式通过在设备长时间处于闲置状态时推迟应用的后台 CPU 和网络 Activity 来减少电池消耗。App Standby模式可推迟用户近期未与...
IPv6安全浅析 原文链接 :IPv6安全浅析 - Huawei - 2010.12 第52期“缺乏安全性是互联网天生的弱点,这与是否采用IPv6关系不大。事实上,IPv6并没有引入新的安全问题,反而由于IPSec的引入以及发送设备采用永久性IP地址而解决了网络层溯源难题,给网络安全提供了根本的解决途径,有望实现端到端安全性。”中国电信科技委主任韦乐平这样评价IPv6安全。IPv6协议设计的安全考虑从...
【HTTPS】使用OpenSSL生成带有SubjectAltName的自签名证书 操作步骤首先新建一个配置文件 ssl.conf如下:[ req ]default_bits = 4096distinguished_name = req_distinguished_namereq_extensions = req_ext[ req_distinguished_name ]countryName = Country...
HTTPS原理与证书生成 HTTPSHTTPS与HTTP是什么关系呢?我们可以对比下HTTP与HTTPS的请求过程:HTTPS 在 TCP 和 HTTP 之间增加了 TLS(Transport Layer Security,传输层安全),提供了内容加密、身份认证和数据完整性三大功能。HTTPS也就是HTTP over SSL/TLS,所有的http数据都是在SSL/TLS协议封装之上传输的。Https协议在H...
WebSocket协议浅析 HTTP协议的缺点单向请求:只能是客户端发起,服务端处理并响应请求/响应模式无状态协议半双工协议这种单向请求的特点,注定了如果服务器有连续的状态变化,客户端要获知就非常麻烦。我们只能使用轮询:每隔一段时候,就发出一个询问,了解服务器有没有新的信息。轮询的效率低,非常浪费资源。WebSocket就可以解决这些问题。WebSocket是什么WebSocket是HTML5新增的协议...
CPU Cache与缓存行 引言先看下面这两个循环遍历哪个快?int[][] array = new int[64 * 1024][1024];// 横向遍历for(int i = 0; i < 64 * 1024; i ++) for(int j = 0; j < 1024; j ++) array[i][j] ++;// 纵向遍历for(int i = ...
【Java】J.U.C并发包 - AQS机制 简介Java并发包(java.util.concurrent)中提供了很多并发工具,这其中,很多我们耳熟能详的并发工具,譬如ReentrantLock、Semaphore,CountDownLatch,CyclicBarrier,它们的实现都用到了一个共同的基类 - AbstractQueuedSynchronizer,简称AQS。AQS提供了一种原子式管理同步状态、阻塞和唤醒线程功能以及队列...
【Android】动态链接库so的加载原理 前言最近开发的组件时常出现了运行时加载so库失败问题,每天都会有java.lang.UnsatisfiedLinkError的错误爆出来,而且线上总是偶然复现,很疑惑。所以本文将从AOSP源码简单跟踪Android中的动态链接库so的加载原理,试图找出一丝线索。加载入口首先我们知道在Android(Java)中加载一个动态链接库非常简单。就是我们日常调用的 System.load(...
【Android】单元测试方法简介 前言基本单元测试框架Java单元测试框架:Junit、Mockito、Powermockito等;Android单元测试框架:Robolectric、AndroidJUnitRunner、Espresso等。最开始建议先学习Junit & Mockito。这两款框架是java领域应用非常普及,使用简单,官网的说明也很清晰。junit运行在jvm上,所以只能测试纯java...
【Java】使用Atomic变量实现锁 Atomic原子操作Java从JDK1.5开始提供了java.util.concurrent.atomic包,方便程序员在多线程环境下,无锁的进行原子操作。原子变量的底层使用了处理器提供的原子指令,但是不同的CPU架构可能提供的原子指令不一样,也有可能需要某种形式的内部锁,所以该方法不能绝对保证线程不被阻塞。在Atomic包里一共有12个类,四种原子更新方式,分别是原子更新基本类型,原子更...
【Java】Thread类中的join()方法原理 简介join()是Thread类的一个方法。根据jdk文档的定义: public final void join()throws InterruptedException: Waits for this thread to die.join()方法的作用,是等待这个线程结束;但显然,这样的定义并不清晰。个人认为”Java 7 Concurrency Cookbook”的定义较为...
【Android】Retrofit源码分析 Retrofit简介retrofit n. 式样翻新,花样翻新 vt. 给机器设备装配(新部件),翻新,改型Retrofit 是一个 RESTful 的 HTTP 网络请求框架的封装。注意这里并没有说它是网络请求框架,主要原因在于网络请求的工作并不是 Retrofit 来完成的。Retrofit 2.0 开始内置 OkHttp,前者专注于接口的封装,后者专注于真正的网络请...
【Android】App应用前后台切换的一种监听方法 Android本身并没有提供监听App的前后台切换操作的方法。最近看到一种简单巧妙的方法来监听前后台,这里分享记录一下。一、Activity生命周期我们知道在Android中,两个Activity,分别为A和B。假设此时A在前台,当A启动B时,他们俩之间的生命周期关系如下,可以参考之前的这篇文章【Android】Activity与Fragment的生命周期的关系: A.onPaus...
【Java】线程池ThreadPoolExecutor实现原理 引言线程池:可以理解为缓冲区,由于频繁的创建销毁线程会带来一定的成本,可以预先创建但不立即销毁,以共享方式为别人提供服务,一来可以提供效率,再者可以控制线程无线扩张。合理利用线程池能够带来三个好处:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。提高线程的可管理性。线程是稀缺资源,如果无限制的创建...
【Android】OkHttp源码分析 Android为我们提供了两种HTTP交互的方式:HttpURLConnection 和 Apache HttpClient,虽然两者都支持HTTPS,流的上传和下载,配置超时,IPv6和连接池,已足够满足我们各种HTTP请求的需求。但更高效的使用HTTP 可以让您的应用运行更快、更节省流量。而OkHttp库就是为此而生。在开始分析OkHttp之前我们先了解一下 HttpURLConnection
用Java实现断点续传 (HTTP) 断点续传的原理其实断点续传的原理很简单,就是在 Http 的请求上和一般的下载有所不同而已。 打个比方,浏览器请求服务器上的一个文时,所发出的请求如下: 假设服务器域名为 www.sjtu.edu.cn,文件名为 down.zip。 GET /down.zip HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, i