- 博客(18)
- 收藏
- 关注
原创 OKHTTP分享三网络连接
连接复用背景每一次Http请求都要经历三次握手四次挥手,重复的连接与释放,导致对请求的响应变慢 持续连接在传输数据后仍然保持连接,当客户端需要再次获取数据的时候,直接使用刚刚空闲下来的链接而不需要再次握手 实现方式:在请求头中添加connection:keep-alive 如果有大量空闲的持续连接存在,会影响其它客户端的正常请求。所以有必要对持续连接的数量和持续时间做限制与连接有关的类连接
2018-01-02 17:22:59 1399
原创 OKHTTP分享二缓存策略
与缓存有关的HeaderExpires Expires: Thu, 12 Jan 2017 11:01:33 GMT 表示到期时间,一般用在response报文中,当超过此时间响应将被认为是无效的而需要网络连接,反之直接使用缓存条件GET 客户端发送条件get请求,如果缓存是有效的,则返回304 Not Modifiled,否则才返回body。ETag ETag是对资源文件的一种摘要,
2018-01-02 16:19:17 2159
原创 OKHTTP分享一框架流程
TCP/IP五层模型 分层(由上至下) 作用 代表协议 应用层 定义报文类型、字段语义 等 HTTP、SMTP等 传输层 负责进程之间的通信 TCP、UDP 网络层 负责子网之间的通信、路由寻址(网络地址) IP 链路层 定义数据的分组格式、MAC寻址(网卡寻址) 物理层 将数据编码为用0、1标识的比特流 - 下层为上层提供服
2018-01-02 16:07:04 381
原创 有向图中有向环检测
背景假如有三个存在优先级的任务x、y及z,x要在y之前完成,y要在z之前完成,而z又要在x之前完成,那该问题一定是无解的。寻找有向图中是否存在有向环是判定一个任务优先级问题的前提边的类型从某个点开始的深度搜索过程中遇到了后向边,可作为找到有向环的标志代码实现private boolean[] onStack = new boolean[V];public void dfs(int s) {
2018-01-02 10:55:08 2543
原创 无向图有环检测
问题给定一幅无向图,如何检测出其是否有环存在?//只需在深度优先搜索方法中添加几行代码即可解决public void dfs(int v, int s) {//v代表要被搜索的节点,s是v的父节点,s->v,代表指向v的一条路径, marked[v] = true; for (int w : G.adj(v)) { if (!marked[w]) {
2017-12-30 15:49:32 2005
原创 Java实现快速排序及三向快速排序
快速排序思想选中数组中某个元素(一般为数组首元素)为参照物,将数组中比参照物小的元素排到数组左边,比参照物大的元素排到数组右边。快速排序的操作步骤以数组a[N]的首元素a[0]为参照物,设立两个指针i、j分别指向数组下标为1和N-1的位置移动指针i,直到满足a[i] > a[0]移动指针j,直到满足a[j] < a[0]交换a[i]和a[j]继续寻找及交换满足条件的下一个a[i]和a[j]
2017-12-16 16:07:26 470
原创 深度优先搜索和广度优先搜索
邻接表数组法图是点和边的集合。如下图所示:假定所有的点都是以0-N的自然数来表示,用数组a[N]索引(下标)代表所有的点,数组的元素为一个保存了与该点直接相连的所有的点的容器(Bag)。即a[N]表示所有和点N直接相连的点的集合,如下图所示: 此种对图的描述方法称为邻接表数组法。一个图(Graph)对象对外提供的API: API 含义 int V() 顶点数 int E()
2017-12-02 17:41:45 215
原创 Java实现二叉查找树(BST)
背景对于一个size为N的链表或有序数组来说,进行第N+1次操作时最坏情况下的增长数量级如下表: 数据结构 \ 操作 查找 插入 链表 N logN 有序数组 logN N链表的优势在于插入,有序数组的优势在于查找(二分查找),而二叉查找树综合了以上两者的优点。API 函数 描述 put(Key ke
2017-09-11 20:33:02 432
原创 排序算法之堆排序
注:此文需要对有序二叉堆、优先队列等知识有所了解,建议看完用有序二叉堆实现优先队列后再阅读此文和优先队列的关系因为优先队列本身已经提供了删除最小(或最大)元素的接口,最简单的做法是将待排序数组依次插入优先队列中,再依次删除最小元素。此种做法需额外的空间(优先队列),且时间复杂度较高(相当于插入排序,外循环用于便利所有待排序元素,内循环用于向优先队列insert元素)。操作步骤待排序的数组可看做一个
2017-09-02 15:53:38 200
原创 索引优先队列的实现
注:此文需要对有序二叉堆、优先队列等知识有所了解,建议看完用有序二叉堆实现优先队列后再阅读此文背景普通优先队列(不带索引)只能访问有序二叉堆的根节点,而无法引用队列中的其它任何元素。特点索引优先队列中存储的元素都有对应的“索引”,通过“索引”我们可以引用该索引对应的元素。可以理解为HashMap中的key-value,key即索引,value即所对应的元素。实现要点数组T[] a存放所有的元素,数
2017-08-31 18:14:54 694 1
原创 用有序二叉堆实现优先队列
优先队列优先队列要提供并实现两个操作删除并返回最大元素插入元素优先队列的实现优先队列的实现采用有序二叉堆形式,采用链表或堆栈也可实现,但时间复杂度较高。这里不再赘述。有序二叉堆的特点所有根结点必定不小于其两个叶子节点如果某个节点对应的数组下标为k,则其根节点为k/2,其叶子节点为2k和2k+1有序二叉堆通过数组实现,采用数组a[N+1]描述有序二叉堆中第一个到最后一个节点(数组元素a[0
2017-08-30 19:54:40 563
原创 排序算法之归并排序及利用归并排序求逆序数
排序算法之归并排序1. 自顶向下的归并排序中心思想将待排序的数组平均切分为两半,将前半部分和后半部分分别进行排序,再讲两个有序数组归并到一个数组中特点递归,需要额外的空间(辅助数组)来保存切分完成的子数组,主要难点在于合并操作步骤将待排序数组均分为两半对前半部分进行排序对后半部分进行排序合并两个子数组递归调用以上过程代码实现public void sort(int[] a){ i
2017-08-27 22:11:28 888
原创 排序算法之希尔排序
排序算法之希尔排序背景希尔排序是对插入排序的优化,如果一个长度为N的数组中,数值最小的元素恰好在数组最末端,则将该元素归位(假设从小到大插入排序)得移动N-1次。特点相对于插入排序是移动相邻元素,希尔排序移动的是不相邻的元素,先对数组的局部进行排序,最终借助插入排序将局部有序的数组排序中心思想使数组中任意间隔为h的元素都是有序的操作步骤先找出待排序数组的h序列,可通过h = h * 3 + 1;
2017-08-27 16:51:49 384
原创 Android异步工具之-AsyncTask用法及机制分析
定义This class allows to perform background operations and publish results on the UI thread without having to manipulate threads and/or handlers.摘自开发者网站。大意是AsyncTask兼具执行后台耗时操作和前台UI显示更新的功能,可以代替用threa
2017-08-10 16:52:03 273
原创 用systrace分析卡顿问题
1. 如何抓取systrace1)将sdk platform-tools升级到最新(目前是25.0.1),因为旧版本sdk抓取到的systrace文件会出现打不开或显示信息不全等问题。2)在ubuntu环境下运行如下adb 命令: $ cd android-sdk/platform-tools/systrace$ python systrace.py --time
2017-08-10 16:45:56 5654
原创 Android卡顿问题分析方法
卡顿直接原因:绘制一帧的时间>16ms根本原因:1)UI线程做了耗时操作(严重ANR)2)布局过于复杂,嵌套多,overdraw3)内存GC被频繁触发分析方法:1)HierarchyViewer会显示绘制每个view时(onMeasure、onLayout和onDraw的耗时),找出哪个view的绘制导致了掉帧,优化其布局;2)设置->开发者选项->调试GPU过度绘制(
2017-08-10 16:39:38 706
原创 Android 内存溢出(OOM)问题分析方法
oom的原因?1)对象设计不合理(单个对象的内存占用过大、同类对象未重复利用);2)一次性申请很大内存导致超出了系统对单个应用设定的内存上限(Dalvik Heap Size);3)内存泄漏如何利用工具定位oom?1) 先查找发生oom的是哪个activity?可采取的查找方式有:对每个activity使用adb shell dumpsys meminfo "process
2017-08-10 16:28:31 845
原创 Android 消息机制(Handler、Looper和MessageQueue)
背景主线程不能执行耗时操作;子线程完成了耗时操作,需要在UI上作出相应的改变;Android控件不是线程安全的,对其的操作只能在主线程进行,导致子线程无法访问UI;消息机制帮助子线程“间接操作UI”。概述消息机制主要包含4个类Message :消息的载体 ,可被复用;MessageQueue: 用链表实现的消息队列,接收handler发送的消息,取出一个消息
2017-08-09 19:34:14 274
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人