摘要: 本文转载自:https://www.cnblogs.com/pkufork/p/java_unsafe.html 最近在看Java并发包的源码,发现了神奇的Unsafe类,仔细研究了一下,在这里跟大家分享一下。 Unsafe类是在sun.misc包下,不属于Java标准。但是很多Java的基础类库, 阅读全文
posted @ 2018-09-21 15:08 linghu_java 阅读(9245) 评论(0) 推荐(1) 编辑
摘要: Android上的热修复框架 AndFix 大家都很熟悉了,它的原理实际上很简单: 方法替换——Java层的每一个方法在虚拟机实现里面都对应着一个ArtMethod的结构体,只要把原方法的结构体内容替换成新的结构体的内容,在调用原方法的时候,真正执行的指令会是新方法的指令;这样就能实现热修复,详细代 阅读全文
posted @ 2018-09-21 11:56 linghu_java 阅读(10529) 评论(0) 推荐(0) 编辑
摘要: 本文由嵌入式企鹅圈原创团队成员、阿里资深工程师Hao分享。 上篇文章《Android无线开发的几种常用技术》我们介绍了几种android移动应用开发中的常用技术,其中的热补丁正在被越来越多的开发团队所使用,它涉及到dalvik虚拟机和android的一些核心技术,现在就来介绍下它的一些原理。 本篇先 阅读全文
posted @ 2018-09-19 21:09 linghu_java 阅读(778) 评论(0) 推荐(0) 编辑
摘要: 2015年是Android插件化技术突飞猛进的一年,随着业务的发展各大厂商都碰到了Android Native平台的瓶颈: H5和Hybird可以解决这些问题,但是始终比不上native的用户体验;于是,国外的FaceBook推出了react-native;而国内各大厂商几乎都选择纯native的插 阅读全文
posted @ 2018-09-18 21:04 linghu_java 阅读(437) 评论(0) 推荐(0) 编辑
摘要: 1. 什么是 Hook Hook 英文翻译过来就是「钩子」的意思,那我们在什么时候使用这个「钩子」呢?在 Android 操作系统中系统维护着自己的一套事件分发机制。应用程序,包括应用触发事件和后台逻辑处理,也是根据事件流程一步步地向下执行。而「钩子」的意思,就是在事件传送到终点前截获并监控事件的传 阅读全文
posted @ 2018-09-18 20:32 linghu_java 阅读(9513) 评论(0) 推荐(0) 编辑
摘要: 一、前言 最近腾讯弄出一个Tinker热修复框架,那么本文先不介绍这个框架,先来介绍一下阿里的一个热修复框架AndFix,这个框架出来已经很长时间了,但是看网上没有太多非常详细的讲解,这里就来做一次分析。正好项目中要使用到。首先这个框架是开源的:https://github.com/alibaba/ 阅读全文
posted @ 2018-09-18 20:05 linghu_java 阅读(274) 评论(0) 推荐(0) 编辑
摘要: 转自:https://mp.weixin.qq.com/s?__biz=MzI1MTA1MzM2Nw==&mid=400118620&idx=1&sn=b4fdd5055731290eef12ad0d17f39d4a; https://www.cnblogs.com/purpleraintear/p 阅读全文
posted @ 2018-09-18 15:40 linghu_java 阅读(935) 评论(0) 推荐(0) 编辑
摘要: 前言 前段时间,Android平台上涌现了一系列热修复方案,如阿里的Andfix、微信的Tinker、QQ空间的Nuva、手Q的QFix等等。 其中,Andfix的即时生效令人印象深刻,它稍显另类,并不需要重新启动,而是在加载补丁后直接对方法进行替换就可以完成修复,然而它的使用限制也遭遇到更多的质疑 阅读全文
posted @ 2018-09-18 10:44 linghu_java 阅读(1124) 评论(0) 推荐(0) 编辑
摘要: 一、前言 Android中hook框架已经非常多了,最优秀的当属Xposed和Substrate了,这两个框架我在之前的文章都详细介绍过了,不了解的同学,可以转战这里:http://www.wjdiankong.cn;但是这两个框架用于破解逆向是非常有用的,可惜他们最大的局限性就是需要root权限, 阅读全文
posted @ 2018-09-17 16:51 linghu_java 阅读(5003) 评论(0) 推荐(1) 编辑
摘要: Method结构体是啥? 在Dalvik虚拟机内部,每个Java方法都有一个对应的Method结构体,虚拟机根据此结构体获取方法的所有信息. Method结构体是怎样定义的? 此结构体在不同的android版本稍有变化,但是结构体前面比较重要的一部分(从clazz到nativeFunc)完全没有变化 阅读全文
posted @ 2018-09-17 15:49 linghu_java 阅读(1187) 评论(0) 推荐(0) 编辑
摘要: AndFix,全称是Android hot-fix。是阿里开源的一个Android热补丁框架,允许APP在不重新发版本的情况下修复线上的bug。支持Android 2.3 到 6.0。 andfix的github地址: https://github.com/alibaba/AndFix AndFix 阅读全文
posted @ 2018-09-12 17:28 linghu_java 阅读(1517) 评论(0) 推荐(0) 编辑
摘要: 1,整体思路 从使用方法出发,首先是怎么使用,其次是我们使用的功能在内部是如何实现的,实现方案上有什么技巧,有什么范式。全文基本上是对 OkHttp 源码的一个分析与导读,非常建议大家下载 OkHttp 源码之后,跟着本文,过一遍源码。对于技巧和范式,由于目前我的功力还不到位,分析内容没多少,欢迎大 阅读全文
posted @ 2018-09-07 22:12 linghu_java 阅读(302) 评论(0) 推荐(0) 编辑
摘要: B-树 B-树,这里的 B 表示 balance( 平衡的意思),B-树是一种多路自平衡的搜索树 它类似普通的平衡二叉树,不同的一点是B-树允许每个节点有更多的子节点。下图是 B-树的简化图. B-树有如下特点: 所有键值分布在整颗树中; 任何一个关键字出现且只出现在一个结点中; 搜索有可能在非叶子 阅读全文
posted @ 2018-09-06 20:18 linghu_java 阅读(1605) 评论(0) 推荐(0) 编辑
摘要: 具体讲解之前,有一点,再次强调下:B-树,即为B树。因为B树的原英文名称为B-tree,而国内很多人喜欢把B-tree译作B-树,其实,这是个非常不好的直译,很容易让人产生误解。如人们可能会以为B-树是一种树,而B树又是一种一种树。而事实上是,B-tree就是指的B树。特此说明。 一、B树 B树(B 阅读全文
posted @ 2018-09-06 13:31 linghu_java 阅读(319) 评论(0) 推荐(0) 编辑
摘要: 简介 本文讲解的内容是Android4.1以后的系统机制,将从整体上分析Android图形显示系统的结构,不深入分析每一层内部的代码实现,更多的是使用流程图和结构图来让大家理解Android是如何绘制、合成图形并显示到屏幕上。 本文将从三个层次进行讲解,大致如下图: 可以理解为上层生产,下层消费模型 阅读全文
posted @ 2018-08-31 15:20 linghu_java 阅读(1677) 评论(1) 推荐(1) 编辑
摘要: 一、android的pulibc.xml文件 如果你用 apktoool 反编译过 apk 就知道,反编译后res/values 下有一个 public.xml 文件,内容如图 这个东西有什么用呢? 先从如何使用资源 ID 开始,在开发中我们通常使用 Resources.getXXX(resid) 阅读全文
posted @ 2018-08-28 14:30 linghu_java 阅读(4889) 评论(0) 推荐(0) 编辑
摘要: 一、build.Gradle 这个 build.Gradle 文件来自 drakeet 大神的 Meizi 项目我直接在代码上加注释,参照着注释看代码就行,是不是发现有很多代码平时都没看见过。 疑问 1.apply plugin: 'com.android.application' 听说这是调用一个 阅读全文
posted @ 2018-08-13 22:55 linghu_java 阅读(1079) 评论(0) 推荐(0) 编辑
摘要: PriorityQueue其实是一个优先队列,和先进先出(FIFO)的队列的区别在于,优先队列每次出队的元素都是优先级最高的元素。那么怎么确定哪一个元素的优先级最高呢,jdk中使用堆这么一种数据结构,通过堆使得每次出队的元素总是队列里面最小的,而元素的大小比较方法可以由用户Comparator指定, 阅读全文
posted @ 2018-08-13 14:17 linghu_java 阅读(2996) 评论(0) 推荐(0) 编辑
摘要: 今天发一篇”水文”,可能很多读者都会表示不理解,不过我想把它作为并发序列文章中不可缺少的一块来介绍。本来以为花不了多少时间的,不过最终还是投入了挺多时间来完成这篇文章的。 网上关于 HashMap 和 ConcurrentHashMap 的文章确实不少,不过缺斤少两的文章比较多,所以才想自己也写一篇 阅读全文
posted @ 2018-08-07 14:49 linghu_java 阅读(445) 评论(0) 推荐(0) 编辑
摘要: 从上面的代码可以看到key的hash值的计算方法。key的hash值高16位不变,低16位与高16位异或作为key的最终hash值。(h >>> 16,表示无符号右移16位,高位补0,任何数跟0异或都是其本身,因此key的hash值高16位不变。) 为什么要这么干呢? 这个与HashMap中tabl 阅读全文
posted @ 2018-07-30 11:41 linghu_java 阅读(1344) 评论(0) 推荐(0) 编辑
摘要: Under the Hood: Dalvik patch for Facebook for Android 先来看一段中文内容 Under the Hood: Dalvik patch for Facebook for Android 先来看一段中文内容 Under the Hood: Dalvik 阅读全文
posted @ 2018-07-10 15:04 linghu_java 阅读(281) 评论(0) 推荐(0) 编辑
摘要: Mixin是JavaScript中用的最普遍的模式,几乎所有流行类库都会有Mixin的实现。 Mixin是掺合,混合,糅合的意思,即可以就任意一个对象的全部或部分属性拷贝到另一个对象上。 从提供的接口来看,有的是对对象的操作,有的是对类的操作。对类的操作又称为掺元类(Mixin classes) 一 阅读全文
posted @ 2018-06-29 15:53 linghu_java 阅读(1229) 评论(0) 推荐(0) 编辑
摘要: $broadcast: $broadcast事件是由父组件发起,所有子组件都会收到此广播事件,除非事件被手动取消。事件广播的顺序为广度优先搜索顺序,如上图,如果页面Page_Index发起一个$broadcast事件,那么按先后顺序依次接收到该事件的组件为:ComA、ComB、ComC、ComD、C 阅读全文
posted @ 2018-06-28 10:40 linghu_java 阅读(4809) 评论(0) 推荐(0) 编辑
摘要: 一直想研究下安卓各种布局控件,FrameLayout是安卓最简单的界面布局,所以就从FrameLayout讲起。 1.属性。frameLayout继承ViewGroup,除了拥有ViewGroup的属性之外,只有一个layout_gravity属性。看它的内部静态类LayoutParams: 1 p 阅读全文
posted @ 2018-06-08 20:56 linghu_java 阅读(1926) 评论(0) 推荐(0) 编辑
摘要: Android的布局方式有两种,一种是通过xml布局,一种是通过java代码布局,两种布局方式各有各的好处,当然也可以相互混合使用。很多人都习惯用xml布局,那xml布局是如何转换成view的呢?本文从源码的角度来简单分析下整个过程。 首先,创建一个新的项目,默认生成一个activity,其中xml 阅读全文
posted @ 2018-06-08 17:11 linghu_java 阅读(1265) 评论(0) 推荐(0) 编辑
摘要: 实现这么一个效果,一个布局中有一个View,那个View会随着我们手指的拖动而滑动,这种效果该如何实现? 我们第一反应应该是自定义一个DragView类继承View,然后重写onTouchEvent()方法,然后根据我们手指滑动的轨迹来调整DragView的显示位置。没错,就是这个思路,下面我们来实 阅读全文
posted @ 2018-06-06 17:02 linghu_java 阅读(481) 评论(0) 推荐(0) 编辑
摘要: Dalvik :http://zh.wikipedia.org/wiki/Dalvik%E8%99%9A%E6%8B%9F%E6%9C%BA ART :http://source.android.com/devices/tech/dalvik/art.html 正文 Ian Rogers 在Goog 阅读全文
posted @ 2018-06-05 14:02 linghu_java 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 1). android对事件分发的顺序为:Activity >PhoneWindow >DecorView >yourView; 2). android控件对事件处理的优先级:onTouch >onTouchEvent >onClick Android既然可以对事件进行拦截,肯定有某个方法对事件进行 阅读全文
posted @ 2018-06-04 16:12 linghu_java 阅读(400) 评论(0) 推荐(0) 编辑
摘要: 1、Fragment的生命周期函数 onAttach、onCreate、onCreateView、onViewCreated、onActivityCreated、onStart、onResume、onPause、onStop、onDestroyView、onDestroy、onDettach Act 阅读全文
posted @ 2018-05-25 14:49 linghu_java 阅读(390) 评论(0) 推荐(0) 编辑
摘要: 哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表,而HashMap的实现原理也常常出现在各类的面试题中,重要性可见一斑。本文会对java集合框架中的对应实现HashMap的实现原理进行 阅读全文
posted @ 2018-05-24 10:41 linghu_java 阅读(208) 评论(0) 推荐(0) 编辑
摘要: Terms VSS- Virtual Set Size 虚拟耗用内存(包含共享库占用的内存) RSS- Resident Set Size 实际使用物理内存(包含共享库占用的内存) PSS- Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存) USS- Uni 阅读全文
posted @ 2018-05-19 16:07 linghu_java 阅读(965) 评论(0) 推荐(0) 编辑
摘要: 要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,ps命令就是最基本进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵尸、哪些进程占用了过多的资源等等.总之大部分信息都是可以通过执行该命令得到。ps是显示瞬间进程的状态,并不动态连续 阅读全文
posted @ 2018-05-19 15:48 linghu_java 阅读(16567) 评论(0) 推荐(2) 编辑
摘要: 一、什么是内存模型,为什么要使用它 如果缺少同步,那么将会有许多因素使得线程无法立即甚至永远看到一个线程的操作结果 编译器把变量保存在本地寄存器而不是内存中 编译器中生成的指令顺序,可以与源代码中的顺序不同 处理器采用乱序或并行的方式来执行指令 保存在处理器本地缓存中的值,对于其他处理器是不可见 在 阅读全文
posted @ 2018-05-17 21:00 linghu_java 阅读(757) 评论(0) 推荐(0) 编辑
摘要: 非阻塞算法:使用底层的原子机器指令(例如比较并交换指令)代替锁来确保数据在并发访问中的一致性 应用于在操作系统和JVM中实现线程 / 进程调度机制、垃圾回收机制以及锁和其他并发数据结构 可伸缩性和活跃性上拥有巨大的优势,不存在死锁 原子变量:提供了与volatile类型变量相同的内存语义,并支持原子 阅读全文
posted @ 2018-05-17 20:59 linghu_java 阅读(412) 评论(0) 推荐(0) 编辑
摘要: Charles 是在 Mac 下常用的网络封包截取工具,在做移动开发时,我们为了调试与服务器端的网络通讯协议,常常需要截取网络封包来分析。 Charles 通过将自己设置成系统的网络访问代理服务器,使得所有的网络访问请求都通过它来完成,从而实现了网络封包的截取和分析。 除了在做移动开发中调试端口外, 阅读全文
posted @ 2018-05-16 14:31 linghu_java 阅读(271) 评论(0) 推荐(0) 编辑
摘要: 描述: 给定一个字符串,找到最长子串的长度,而不重复字符。 例子: 给定"abcabcbb"的答案是"abc",长度是3。 给定"bbbbb"的答案是"b",长度为1。 给定"pwwkew"的答案是"wke",长度为3.请注意,答案必须是子字符串,"pwke"是子序列,而不是子字符串。 我的方法:( 阅读全文
posted @ 2018-05-14 17:41 linghu_java 阅读(20967) 评论(0) 推荐(1) 编辑
摘要: KMP算法应该是每一本《数据结构》书都会讲的,算是知名度最高的算法之一了,但很可惜,我大二那年压根就没看懂过~~~ 之后也在很多地方也都经常看到讲解KMP算法的文章,看久了好像也知道是怎么一回事,但总感觉有些地方自己还是没有完全懂明白。这两天花了点时间总结一下,有点小体会,我希望可以通过我自己的语言 阅读全文
posted @ 2018-05-14 17:29 linghu_java 阅读(453) 评论(0) 推荐(0) 编辑
摘要: 一、状态依赖性管理 对于单线程程序,某个条件为假,那么这个条件将永远无法成真 在并发程序中,基于状态的条件可能会由于其他线程的操作而改变 1 可阻塞的状态依赖操作的结构 2 3 acquire lock on object state 4 while (precondition does not h 阅读全文
posted @ 2018-05-12 16:14 linghu_java 阅读(318) 评论(0) 推荐(0) 编辑
摘要: 并发程序中潜在错误的发生并不具有确定性,而是随机的。 安全性测试:通常会采用测试不变性条件的形式,即判断某个类的行为是否与其规范保持一致 活跃性测试:进展测试和无进展测试两方面,这些都是很难量化的(性能:即吞吐量,响应性,可伸缩性测试) 一、正确性测试 重点:找出需要检查的不变性条件和后验条件 1、 阅读全文
posted @ 2018-05-11 16:10 linghu_java 阅读(414) 评论(0) 推荐(0) 编辑
摘要: 一个对象是否需要是线程安全的取决于它是否被多个线程访问。 当多个线程访问同一个可变状态量时如果没有使用正确的同步规则,就有可能出错。解决办法: 不在线程之间共享该变量 将状态变量修改为不可变的 在访问状态变量时使用同步机制 完全由线程安全类构造的程序也不一定是线程安全的,线程安全类中也可以包含非线程 阅读全文
posted @ 2018-05-11 16:08 linghu_java 阅读(466) 评论(0) 推荐(0) 编辑