自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Mlib

手起键落间

  • 博客(121)
  • 资源 (7)
  • 问答 (3)
  • 收藏
  • 关注

原创 为什么说TCP是面向流的协议?而UDP是面向数据报的协议?

IP、TCP、UDP协议头IP 是 TCP/IP 协议中的核心协议,为 TCP、UDP 等协议提供了一种尽力而为、无连接的数据报传输服务,也就意味着 IP 协议不保证成功传输,也不维护数据报相关的链接状态信息。IPv4 数据报头部至少为 20 字节,结构如下:版本:确定 IP 协议的版本(IPv4 或 IPv6),从而能正确解释后面的内容。IHL(头部长度):由于选项的存在,由此字段确定...

2019-12-23 13:41:12 8269 1

原创 【Java】反编译Mac版Charles,修改一些功能

目录反编译jar修改jar参考反编译jar修改jar如何修改jar包中的class文件参考Javassist 使用指南(一)如何把java App包装成Mac安装包 - How to create a macOS installer for a Java application (.jar)...

2019-11-18 14:34:34 795

原创 【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...

2019-07-30 12:42:50 7227

原创 【Android】ADB工具原理探究

ADB简介Android Debug Bridge (adb) 是一个Android的命令行工具。可以用来连接模拟器或实际的移动设备。比如 adb logcat, adb shell。Dalvik Debug Monitor Server(DDMS) 后台也是运行的adb来实现监控调试移动设备。总体而言,adb有两个用途:监控连接设备 :adb会监控所有已经连接设备(包括模拟器),譬如设...

2019-06-08 17:26:49 2424

原创 【Android】Doze模式识别与检测

从 Android 6.0(API 级别 23)开始,Android 引入了两个省电功能:Doze模式(官方翻译为低电耗模式)和 App Standby模式(官方翻译为应用待机模式),可通过管理应用在设备未连接至电源时的行为方式为用户延长电池寿命。Doze模式通过在设备长时间处于闲置状态时推迟应用的后台 CPU 和网络 Activity 来减少电池消耗。App Standby模式可推迟用户近期未与...

2019-05-27 10:33:56 2066

原创 IPv6安全浅析

原文链接 :IPv6安全浅析 - Huawei - 2010.12 第52期“缺乏安全性是互联网天生的弱点,这与是否采用IPv6关系不大。事实上,IPv6并没有引入新的安全问题,反而由于IPSec的引入以及发送设备采用永久性IP地址而解决了网络层溯源难题,给网络安全提供了根本的解决途径,有望实现端到端安全性。”中国电信科技委主任韦乐平这样评价IPv6安全。IPv6协议设计的安全考虑从...

2019-03-13 19:52:55 13772 2

原创 【HTTPS】使用OpenSSL生成带有SubjectAltName的自签名证书

操作步骤首先新建一个配置文件 ssl.conf如下:[ req ]default_bits = 4096distinguished_name = req_distinguished_namereq_extensions = req_ext[ req_distinguished_name ]countryName = Country...

2018-11-01 14:12:51 16665

原创 HTTPS原理与证书生成

HTTPSHTTPS与HTTP是什么关系呢?我们可以对比下HTTP与HTTPS的请求过程:HTTPS 在 TCP 和 HTTP 之间增加了 TLS(Transport Layer Security,传输层安全),提供了内容加密、身份认证和数据完整性三大功能。HTTPS也就是HTTP over SSL/TLS,所有的http数据都是在SSL/TLS协议封装之上传输的。Https协议在H...

2018-10-31 18:09:54 10090

原创 WebSocket协议浅析

HTTP协议的缺点单向请求:只能是客户端发起,服务端处理并响应请求/响应模式无状态协议半双工协议这种单向请求的特点,注定了如果服务器有连续的状态变化,客户端要获知就非常麻烦。我们只能使用轮询:每隔一段时候,就发出一个询问,了解服务器有没有新的信息。轮询的效率低,非常浪费资源。WebSocket就可以解决这些问题。WebSocket是什么WebSocket是HTML5新增的协议...

2018-10-29 21:12:09 1208

原创 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 = ...

2018-09-14 16:13:06 12599 8

原创 【Java】J.U.C并发包 - AQS机制

简介Java并发包(java.util.concurrent)中提供了很多并发工具,这其中,很多我们耳熟能详的并发工具,譬如ReentrantLock、Semaphore,CountDownLatch,CyclicBarrier,它们的实现都用到了一个共同的基类 - AbstractQueuedSynchronizer,简称AQS。AQS提供了一种原子式管理同步状态、阻塞和唤醒线程功能以及队列...

2018-08-27 10:24:00 498

原创 【Android】动态链接库so的加载原理

前言最近开发的组件时常出现了运行时加载so库失败问题,每天都会有java.lang.UnsatisfiedLinkError的错误爆出来,而且线上总是偶然复现,很疑惑。所以本文将从AOSP源码简单跟踪Android中的动态链接库so的加载原理,试图找出一丝线索。加载入口首先我们知道在Android(Java)中加载一个动态链接库非常简单。就是我们日常调用的 System.load(...

2018-07-04 14:51:46 5458

原创 【Android】单元测试方法简介

前言基本单元测试框架Java单元测试框架:Junit、Mockito、Powermockito等;Android单元测试框架:Robolectric、AndroidJUnitRunner、Espresso等。最开始建议先学习Junit & Mockito。这两款框架是java领域应用非常普及,使用简单,官网的说明也很清晰。junit运行在jvm上,所以只能测试纯java...

2018-06-29 22:35:42 578

原创 【Java】使用Atomic变量实现锁

Atomic原子操作Java从JDK1.5开始提供了java.util.concurrent.atomic包,方便程序员在多线程环境下,无锁的进行原子操作。原子变量的底层使用了处理器提供的原子指令,但是不同的CPU架构可能提供的原子指令不一样,也有可能需要某种形式的内部锁,所以该方法不能绝对保证线程不被阻塞。在Atomic包里一共有12个类,四种原子更新方式,分别是原子更新基本类型,原子更...

2018-05-23 10:18:06 3649

原创 【Java】Thread类中的join()方法原理

简介join()是Thread类的一个方法。根据jdk文档的定义: public final void join()throws InterruptedException: Waits for this thread to die.join()方法的作用,是等待这个线程结束;但显然,这样的定义并不清晰。个人认为”Java 7 Concurrency Cookbook”的定义较为...

2018-05-09 18:34:09 21238 39

原创 【Android】Retrofit源码分析

Retrofit简介retrofit n. 式样翻新,花样翻新 vt. 给机器设备装配(新部件),翻新,改型Retrofit 是一个 RESTful 的 HTTP 网络请求框架的封装。注意这里并没有说它是网络请求框架,主要原因在于网络请求的工作并不是 Retrofit 来完成的。Retrofit 2.0 开始内置 OkHttp,前者专注于接口的封装,后者专注于真正的网络请...

2018-04-13 18:54:57 697

原创 【Android】App应用前后台切换的一种监听方法

Android本身并没有提供监听App的前后台切换操作的方法。最近看到一种简单巧妙的方法来监听前后台,这里分享记录一下。一、Activity生命周期我们知道在Android中,两个Activity,分别为A和B。假设此时A在前台,当A启动B时,他们俩之间的生命周期关系如下,可以参考之前的这篇文章【Android】Activity与Fragment的生命周期的关系: A.onPaus...

2018-04-06 20:13:39 4119

原创 【Java】线程池ThreadPoolExecutor实现原理

引言线程池:可以理解为缓冲区,由于频繁的创建销毁线程会带来一定的成本,可以预先创建但不立即销毁,以共享方式为别人提供服务,一来可以提供效率,再者可以控制线程无线扩张。合理利用线程池能够带来三个好处:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。提高线程的可管理性。线程是稀缺资源,如果无限制的创建...

2018-02-13 17:34:17 10434 4

原创 【Android】OkHttp源码分析

Android为我们提供了两种HTTP交互的方式:HttpURLConnection 和 Apache HttpClient,虽然两者都支持HTTPS,流的上传和下载,配置超时,IPv6和连接池,已足够满足我们各种HTTP请求的需求。但更高效的使用HTTP 可以让您的应用运行更快、更节省流量。而OkHttp库就是为此而生。在开始分析OkHttp之前我们先了解一下 HttpURLConnection

2018-01-26 19:02:36 983

原创 用Java实现断点续传 (HTTP)

断点续传的原理其实断点续传的原理很简单,就是在 Http 的请求上和一般的下载有所不同而已。 打个比方,浏览器请求服务器上的一个文时,所发出的请求如下: 假设服务器域名为 www.sjtu.edu.cn,文件名为 down.zip。 GET /down.zip HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, i

2018-01-22 16:26:53 1316

原创 如何判断CPU是大端还是小端模式

一、概念及详解在各种体系的计算机中通常采用的字节存储机制主要有两种: Big-Endian和Little-Endian,即大端模式和小端模式。Big-Endian和Little-Endian的定义如下:1) Little-Endian:就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。 2) Big-Endian:就是高位字节排放在内存的低地址端,低位字节排放在内存的高

2018-01-18 16:59:25 14569

原创 【Android】源码分析 - LRUCache缓存实现原理

一、Android中的缓存策略一般来说,缓存策略主要包含缓存的添加、获取和删除这三类操作。如何添加和获取缓存这个比较好理解,那么为什么还要删除缓存呢?这是因为不管是内存缓存还是硬盘缓存,它们的缓存大小都是有限的。当缓存满了之后,再想其添加缓存,这个时候就需要删除一些旧的缓存并添加新的缓存。因此LRU(Least Recently Used)缓存算法便应运而生,LRU是近期最少使用的算法,它

2018-01-13 11:20:29 4422

原创 【算法】字符串循环移位后是否包含

问题 给定两个字符串s1和s2,要求判断s2是否能够被通过s1做循环移位(rotate)得到的字符串包含。 例如,s1=AABCD和s2=CDAA,返回true;给定s1=ABCD和s2=ACBD,返回false。解法一最直接最笨的方法就对s1进行循环移动,再进行字符串包含的判断,从而遍历其所有的可能性。字符串循环移动,时间复杂度为O(n),字符串包含判断,采用普通的方法,时间复杂度为O

2017-12-31 15:35:06 1740 2

原创 【Android】源码分析 - View事件分发机制

事件分发对象(1)所有 Touch 事件都被封装成了 MotionEvent 对象,包括 Touch 的位置、时间、历史记录以及第几个手指(多指触摸)等。(2)事件类型分为 ACTION_DOWN, ACTION_UP,ACTION_MOVE,ACTION_POINTER_DOWN,ACTION_POINTER_UP, ACTION_CANCEL,每个事件都是以 ACTION_DOWN 开始 ACT

2017-12-26 19:27:57 551

原创 【算法】如何判断链表有环

如何判断单链表是否存在环 有一个单向链表,链表当中有可能出现“环”,就像题图这样。如何用程序判断出这个链表是有环链表? 不允许修改链表结构。 时间复杂度O(n),空间复杂度O(1)。 方法一、穷举遍历方法一:首先从头节点开始,依次遍历单链表的每一个节点。每遍历到一个新节点,就从头节点重新遍历新节点之前的所有节点,用新节点ID和此节点之前所有节点ID依次作比较。如果发现新

2017-12-25 20:05:59 78694 22

原创 【Android】源码分析 - Activity启动流程

启动Activity的方式Activity有2种启动的方式,一种是在Launcher界面点击应用的图标、另一种是在应用中通过Intent进行跳转。我们主要介绍与后者相关的启动流程。Intent intent = new Intent(this, TestActivity.class);startActivity(intent);从Activity入手@Overridepublic void st

2017-12-23 19:07:28 869

原创 【Android】常用ADB命令总结

1. 获取当前运行的Activity方法一:adb shell logcat | grep ActivityManager 方法二:adb shell dumpsys activity activities 2. 安装包信息adb shell dumpsys package app-release_1.0.9.apk

2017-11-27 14:02:46 556

原创 【Java】HashMap源码分析(JDK1.8)

前言Java为数据结构中的映射定义了一个接口java.util.Map,此接口主要有四个常用的实现类,分别是HashMap、Hashtable、LinkedHashMap和TreeMap,类继承关系如下图所示:下面针对各个实现类的特点做一些说明:(1) HashMap:它根据键的hashCode值存储数据,大多数情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历顺序却是不确定的。 HashM

2017-11-26 16:02:49 610

原创 【Java】生产者消费者模式的实现

前言生产者消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一存储空间,生产者向空间里生产数据,而消费者取走数据。阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。这个阻塞队列就是用来给生产者和消费者解耦的。wait/notify方法首先,我们搞清楚Thread.sleep()方法和Object.wait()、Object.notify()方法的区别。根据这篇文章java

2017-11-16 19:39:49 40953 11

原创 【Android】Binder - 如何使用AIDL

一、跨进程通信为了演示方便,将Service与Activity处于不同的进程,可以在AndroidManifest.xml中,把service配置成android:process=":remote" ,也可以命名成其他的。AIDL(1) IRemoteService.aidl:定义Server端提供的服务接口// IRemoteService.aidlpackage com.cuc.myandro

2017-11-02 15:21:39 526

原创 【Android】Dialog异常CalledFromWrongThreadException深入分析

问题在使用Dialog时,因为线程问题,在调用dismiss方法时出现了CalledFromWrongThreadException的Crash,如下:android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch it

2017-10-27 09:40:21 2865 1

转载 【Android】打印输出调用栈

1. Java层如何打印调用栈?在优化Android启动过程时,同事给出一种打印出调用栈的函数。分享一下:java.util.Map<Thread, StackTraceElement[]> ts = Thread.getAllStackTraces(); StackTraceElement[] ste = ts.get(Thread.currentThread()); for (Sta

2017-10-26 10:28:52 788

原创 小米4A安装App报错INSTALL_FAILED_VERSION_DOWNGRADE

问题这两天用小米手机debug,完全卸载之后发现总是报错INSTALL_FAILED_VERSION_DOWNGRADE或者INSTALL_FAILED_ALREADY_EXISTS,AS的命令行中显示:Unknown failure (Failure - not installed for 0) Error while Installing APKs按理说应用已经卸载了,很是奇怪,不论是从应用商店

2017-10-20 10:54:24 1551

原创 【Android】源码分析 - AsyncTask异步任务机制

前言提到Android的多线程机制,常用的有如下几种方式:AsyncTask: 封装了线程池和Handler,为 UI 线程与工作线程之间进行快速切换提供一种便捷机制。适用于当下立即需要启动,但是异步执行的生命周期短暂的使用场景。HandlerThread: 一个已经拥有了Looper的线程类,内部可以直接使用Handler。为某些回调方法或者等待某些任务的执行设置一个专属的线程,并提供线程任务

2017-10-10 14:16:56 528

原创 【Android】源码分析 - IntentService机制

前言提到Android的多线程机制,除了我们常用的Thread来实现异步任务之外,还有AsyncTask:封装了线程池和Handler,主要为了子线程更新UI;HandlerThread:一个已经拥有了Looper的线程类,内部可以直接使用Handler;IntentService:一个内部采用HandlerThread来执行任务的Service服务,任务执行完毕后会自动退出;今天我们来根据

2017-10-05 16:17:42 626

原创 【算法】无序数组中求中位数

问题 给定一个int数组A,为传入的数字序列,同时给定序列大小n,请返回一个int数组,代表每次传入后的中位数。保证n小于等于1000或者 求一个无序数组的中位数。 如:{2,5,4,9,3,6,8,7,1}的中位数为5。 要求:不能使用排序,时间复杂度O(n)。分析因为题目指定不能使用排序算法,而且要求时间复杂度O(n),也就是要求一次遍历就得给出结果。所以排序算法基本上没有用武之地。

2017-10-05 11:23:31 9988 4

原创 【Android】EventBus 3.0 源码分析

概述EventBus是一个基于观察者模式的事件发布/订阅框架,开发者可以通过极少的代码去实现多个模块之间的通信,既可用于 Android 四大组件间通讯,也可以用于异步线程和主线程间通讯,而不需要以Interface回调、handler或者BroadCastReceiver的形式去单独构建通信桥梁。从而降低因多重回调导致的模块间强耦合,同时避免产生大量内部类。这是EventBus源码中的介绍:/**

2017-09-30 19:39:44 1513

原创 【Java】try-catch-finally语句中return的执行顺序思考

实验1、try中有return,finally中没有public class TryCatchTest { public static void main(String[] args) { System.out.println("test()函数返回:" + test()); } private static int test(){ int i =

2017-09-21 16:28:00 1285

原创 【算法】大数乘法问题及其高效算法

题目编写两个任意位数的大数相乘的程序,给出计算结果。比如: 题目描述: 输出两个不超过100位的大整数的乘积。 输入: 输入两个大整数,如1234567 和 123 输出: 输出乘积,如:151851741或者求 1234567891011121314151617181920 * 2019181716151413121110987654321 的乘积结果分析所谓大数相乘(M

2017-08-23 11:07:54 104079 17

原创 【算法】反转字符串

前言研究算法能提高我们的编程功底,更好地编写出高效稳健的代码。今天,我们研究的是 — 反转字符串。//输入一个字符串,输出它的倒序字符串input: Hellooutput: olleH解法反转字符串,确实没什么难度,但是我无意间搜索了一下,才发现这么一个看似简单的反转算法实现起来真可谓花样繁多。这里我们尽可能分别总结介绍一下。1、使用字符数组倒序输出最常规的解法,也是最容易想到的一种方法就是

2017-08-06 09:35:39 3456

百度中文分词词库

数据挖掘资源:可以用于中文分词的百度中文分词词库。

2015-11-24

android 图表类(折线图、柱状图、饼图)的数据展示Library

来自Github很火的Android图标类展示库,各种图表相当漂亮,也高大上! 主页面链接:https://github.com/PhilJay/MPAndroidChart

2014-09-10

android仿天气类app绘制饼状图、折线图、柱状图

android仿天气类app绘制饼状图、折线图、柱状图的实现,效果挺不错,推荐给大家

2014-04-14

android_下拉刷新_加载更多_源代码

实现思路见作者源博客,请戳传送门: http://104zz.iteye.com/blog/1682801

2014-03-09

android 滑动解锁实现源代码

我是搬运工,具体实现方式见原作者博客: http://www.cnblogs.com/lihuabest/archive/2013/03/08/2950070.html 欢迎下载*_*!

2014-03-06

Android_典型UI欣赏_第一季

Android_典型UI(用户界面)欣赏_第一季

2014-02-13

Android仿QQ微信开场导航以及登陆界面

Android仿QQ微信开场导航以及登陆界面 来自:- Mr梵谷的专栏 - 博客频道 - CSDN.NET

2014-02-13

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

TA关注的人

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