- 博客(50)
- 收藏
- 关注
原创 红黑树入门
本文仅用于个人记录2-3树是最简单的B树,下面都称之为B树学习自https://blog.csdn.net/yang_yulei/article/details/26066409https://blog.csdn.net/aiaiai010101/article/details/76724243 B树 插入先进行查找,会查找到一个具体的分支 插入案例1 插入案例2 插入案例3 所以B树是从底部开始...
2018-05-31 23:37:02 165
原创 Android推送入门
(先讲一个题外话 使用预订单技术可以减小服务器压力)假如我们点外卖,这之间会有一系列的步骤,假如商家接单了,状态肯定会更新,我们的UI也会同步的转换到下一个状态。那么我们是怎么获知这个状态呢?1.伪推送,用户每10秒向服务器请求一次。但是其缺点:因为请求由间隔,所以延迟了;网络请求零散,电量消耗巨大(当然了,如果时间间隔久,这么做也许是一个不错的选择)2.服务端主动push,我们可...
2018-05-31 21:33:37 213
原创 对于一个基本有序的数组进行排序
十分简单,所以仅作个人记录用快排肯定不好,因为他的原理是选定一个值,然后使得他的左边的数都比他小,右边的数都比他大假定 1 2 3 4 5 100 6 7 8 200 9可以考虑增强型冒泡毫无疑问在第一次遍历的时候结果是这样的1 2 3 4 5 6 7 8 100 9 200然后如果是普通冒泡的话,我们下一个将从2开始,所以我们需要修改这个算法我们的目标就是定位到8,然后下一次从8开始遍历怎么定位...
2018-05-31 20:08:58 14665
原创 Android SQLite 数据库升级的注意事项
学习自https://blog.csdn.net/jie1991liu/article/details/50339797增加一个表、删除一个表是小事给表增加一个字段,删除一个字段就有点难受了数据库降级增加一个字段ALTER TABLE xxxx ADD COLUMN yyyy text意思就是修改一个表,使他增加一个数据类型为文本的一列这样我们就不会损害用户原来的数据了(ALTER在SQLite中...
2018-05-31 19:43:34 796
原创 BitmapFactory inBitmap参数的理解
使用inBitmap前使用inBitmap后一开始哪怕我看了这个图我也不太理解,后来我猜想应该是这样:当某个bitmap不可达的时候,这个时候就是处于了可回收的状态所以我们如果要复用的话,应该会把不可达的bitmap先recycler,然后新的bitmap就会在这块区域创建详细的使用方式可以看https://blog.csdn.net/ohehehou/article/details/409484...
2018-05-31 13:13:27 3486
原创 HTTP 2 多路复用
学习自https://segmentfault.com/a/1190000011172823TCP 3握4挥 频繁握手挥手代价太大所以我们复用TCP连接,在connection:keep-alive中开启(1.0默认关闭,1.1默认开启)但是存在的问题是如果打算复用连接,那么如果在连接被复用的时候,后面的请求必须等待;如果创建许多连接,服务器的压力又过大,keep-alive名存实亡。所以问题1:...
2018-05-30 22:20:40 1033
原创 线程池
学习原因线程池是面试的高频点,在先后两次面试中这一点被问倒,这才下定决心一次性搞定线程池,弄透整个线程池的源码,绝对可以在面试中加分学习路线上层的一些被忽视的细节底层的所有源代码最长的构造方法public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, ...
2018-05-30 00:59:55 187
原创 线程的状态
学习自https://www.cnblogs.com/jijijiefang/articles/7222955.html新建new Thread就绪thread.start()运行using cpu,就算时间片在切换,他在不使用当前时间片的时候,依然被定义成运行状态阻塞比如释放资源,比如object.wait。需要重新转化为就绪状态才有机会转化成运行状态死亡阻塞的几种情况1.this.wait,该...
2018-05-29 14:35:36 119
原创 IO入门
IO操作被分为两部分1.IO请求2.IO实际操作同步IO和异步IO的区别IO实际操作是否阻塞线程阻塞IO和非阻塞IO的区别如果发起IO请求会阻塞,直到IO实际操作完才不阻塞,这就是阻塞IO所以IO请求分为3类同步阻塞原来的线程直接挂起,等IO执行完后继续执行原来的线程同步非阻塞用户发起IO后可以做其他事情,但是需要时不时检测IO是否做完(Java NIO)异步IO执行完后会通知应用程序...
2018-05-29 14:01:04 181
原创 数据库死锁
学习自https://blog.csdn.net/qq_16681169/article/details/74784193了解数据库死锁需要的预备知识:1.事务及隔离级别2.共享锁、独占锁最常见的死锁:事务1想查询第A行,然后修改第B行事务2想查询第B行,然后修改第A行假设他们的查询同时发生事务1给A行增加了一个共享锁,同时事务2给B行增加了一个共享锁在可重复读的隔离级别下,对某条记录加了共享锁以...
2018-05-28 23:02:49 151
原创 重入锁、独占/共享锁、公平/非公平锁
重入锁一个线程对同一个对象多次加锁(我认为很有可能会发生锁合并)举个例子: static class Test { public static synchronized void say() { dosomething(); } public static synchronized void dosomething(...
2018-05-28 16:55:17 362
原创 平衡二叉树、B树、B+树、B*树入门
学习自https://zhuanlan.zhihu.com/p/27700617 平衡二叉树 B树(图中示例为m=3阶)每个节点(除了根节点)有:2<=k<=m个子节点关键字?叶子节点都在同一层如果一个非叶节点有n个子节点,那么这个非叶节点存放的关键字数有n-1个。 3、8、31、11、23、29、50、28怎么构建出一个5阶树呢?关键字数:3<=k<=4一旦关键字数小于3...
2018-05-27 00:15:23 1019
原创 HashMap 容量为2次幂的原理
学习自https://www.zhihu.com/question/20733617hashstatic final int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);}然后(n - 1) & hash首先介绍(n - 1)...
2018-05-25 17:39:39 646
原创 Android机型尺寸适配入门
学习自https://zhuanlan.zhihu.com/p/37199709https://www.jianshu.com/p/b6b9bd1fba4d机型适配目前暂时我认为分两块:1.尺寸2.代码(不同系统引发的莫名其妙的crash)本文简单介绍尺寸dp、px的换算dp*dpi/160=px(dpi/160也就是density)举个例子:屏幕分辨率为:1920*1080,屏幕尺寸为5吋的话,...
2018-05-24 18:36:36 1062
原创 JVM类加载机制
解析这个步骤 顺序不一定 这是为了支持运行时绑定而且各步骤是,前一个步骤弄到一半,估计就开启下一个步骤了 5种情况必须立刻进行初始化(之前的步骤自然也执行了)new getstatic putstatic invokestatic反射拿到了一个Class初始化一个类的时候,如果父类还没有初始化,先初始化父类(这一点对接口不适用)main方法那个类(但是不会主动生成那个类的对象哦,相应的你的非静态字...
2018-05-23 20:18:37 115
原创 Java内存区域
程序计数器:PC存放下一条指令的地址,会赋值给寄存器,这叫“取指令”,然后这个地址会+1或者由转移指针给出下一条指令的地址为了线程切换后可以恢复到正确的执行位置,每个线程都需要有一个独立的程序计数器(进程的切换是保存上下文,加载上下文)。如果执行的是Java方法,那么计数器记录的是虚拟机字节码指令的地址;如果是Native方法,计数器值为...
2018-05-23 20:17:01 130
原创 Android内存优化手册
2018/5/22内存里有啥线程公有的:栈、方法区线程私有的:pc、native方法栈、java方法栈(GC机制、Android内存管理也就不用说了) 工具MemoryLeak举个内存泄漏的例子。单例维护context的时候。profiler很容易可以看出内存抖动、dump heap看内存快照MAT大牛必备 图片是内存大户。如何在处理图片的大小和缓存上出彩也是比较难的(图片和视频的深入研究是值得的...
2018-05-22 18:49:09 125
原创 Android渲染优化手册
2018/5/22工具GPU rendering学会看柱状图过度绘制Looper、Choreographer(https://blog.csdn.net/qq_36523667/article/details/80034367) 嵌套为什么嵌套性能低呢?LayoutInlater是通过xml paser+反射进行的一个创建,消耗挺大的。而且类如RelativeLayout、LinearLayout...
2018-05-22 15:42:45 123
原创 Android TraceView的使用
Debug.startMethodTracing(getExternalFilesDir(null) + "/xbh.trace"); Debug.stopMethodTracing(); 权限<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 指定目录下会生成.trace adb导出....
2018-05-22 00:10:21 238
原创 Android启动优化手册
2018/5/21工具TraceView定位性能瓶颈,可以看见每个方法耗时、堆栈等,神器。 UI显示流程预先有一个空白windowonResume后,new一个window,并且设置décor给window,然后开始绘制。绘制好后,window替换原来的空白window splash(特殊机型、版本可能会失效,需要积累经验)我们可以利用的第一个时间段<style name="Splash" ...
2018-05-21 23:18:23 137
原创 Android Activity启动流程梳理
了解活动启动流程能干什么?1.插件化绕过manifest2.启动优化Instrumentation管理一个活动的生命周期AMS管理所有的活动 ActivityStarter根据intent、flags找到activity、stack ActivityStack管理一个活动栈ActivityStackSupervisor管理所有的活动栈 ActivityThread.ApplicationThrea...
2018-05-21 17:12:06 655
原创 Android Arouter入门
学习自https://blog.csdn.net/zhaoyanjun6/article/details/76165252这篇文章已经可以作为很详尽的Arouter的使用说明了我觉得他比较厉害的点就在这里再记录下为什么要使用路由?从显示到隐式。显示会有类之间的直接依赖,改动成本高。隐式声明是模块间解耦的主流。格式统一化。不管四大组件,URL跳转,服务,都是一样的请求形式。不局限于四大组件。功能服务...
2018-05-20 16:33:34 244
原创 Android 对架构和路由的思考
学习自https://www.jianshu.com/p/9c646002e2f7这是一种好架构吗?有人认为,很好了。我第一眼看过去,也是很不错了。因为这就是我的架构。项目会分成若干module。其实不太好。原因在于,耦合,你中有我,我中有你。为什么这么说呢?我是这么写的,比如A业务包,我会开放一定的API,然后也会开放一定的接口,我碰到写不下去的功能了,有些东西不属于我模块负责的,我直接扔个接口...
2018-05-18 00:49:06 572
转载 Android增量更新之签名校验
学习自https://www.jianshu.com/p/4132834b7fe7前言:正常途径拿不到,只能通过反射拿到PackageParser /** * 获取该目录下的apk签名 * @param path 当前apk路径 * @return */ public static String getSignature(String pat...
2018-05-17 23:49:39 452
原创 Android编译libjpeg-turbo so
很简单apply plugin: 'com.android.application'android { compileSdkVersion 27 defaultConfig { applicationId "com.example.myapplication" minSdkVersion 16 targetSdkVersion 2...
2018-05-17 22:58:02 1354 2
原创 Android Binder的实战与原理
服务端编写用AIDL生成一个Binder类package com.example.myapplication;public interface BookAIDL extends android.os.IInterface{ /** Local-side IPC implementation stub class. */ public static abstract class...
2018-05-17 15:33:59 286
原创 Android插件化架构之Hook绕过manifest检测
学习自https://www.jianshu.com/p/e359fafe5c29问题我们插件apk是不会进行一个安装的,那么他的manifest就不会生效,所以我们直接启动肯定是行不通的。所以我们只能隔绝掉我们主apk的manifest的检测。具体思路如下只需要动态代理hook,先在AMS的startActivity的方法中的Intent中启动一个已注册的活动假扮,然后在ActivityThre...
2018-05-16 22:42:38 1433 2
原创 Android插件换肤之AssetManager相关源码分析
学习自https://www.jianshu.com/p/5eac94143bd6本文可不看 没啥意义AssetManager.mObject是native层的AssetManager /** * Create a new AssetManager containing only the basic system assets. * Applications will ...
2018-05-16 16:34:47 676
原创 Android插件换肤之入门实战
学习自https://www.jianshu.com/p/5eac94143bd6首先是TypedArray进行一个定义,所以我们才能以src=...的形式去声明图片。所以我们需要关注TypedArray.getDrawable方法。其实他的本质还是像我们平时一样,通过Resource去获取drawable。通过Resource去获取drawable的流程大致如下先去找ResourceImpl的c...
2018-05-16 16:06:20 262
原创 Android加载未安装的APK中的类
学习自https://blog.csdn.net/fwt336/article/details/53336810他的才是加载apk里的内容,想看加载外源apk的可以去这个链接里看。我这里图方便,直接加载dex里的东西了。熟悉ClassLoader的朋友都知道,PathClassLoader仅仅能加载已安装的APK中的类,DexClassLoader就灵活度很高了,许多压缩文件他都可以进行一个加载。...
2018-05-15 23:26:13 633
原创 Android热修复之替换原有classes.dex的源代码分析
我们在服务端下载修复bug后的classes.dex并且动态替换原有的classes.dex这个过程的源代码的分析是我们今天要讨论的。文末给出所有源码。Context家族的classloader就是Android默认的加载器PathClassLoader。所以我们很简单一句话就可以获得了。ClassLoader pathClassLoader = context.getClassLoader();...
2018-05-15 23:04:59 2470 2
原创 Android热修复、multi dex入门
学习自https://www.jianshu.com/p/5f390be47ce8号称最简单的热修复,当然简单也有其弊端,不过作为入门教学,很好我们需要做的就是把补丁dex放到element数组的第一位。到这里可能还有点模糊,继续。multi dexhttps://blog.csdn.net/qq_36523667/article/details/80329077这篇文章可以很好的进行一个分包分包...
2018-05-15 22:35:05 341
原创 AndroidStudio 3.1 multi dex 分包
我弄了半天 发现还是不行结果欲哭无泪 原来是我的反编译软件坏了!后来我用了analyzer,发现确实是分包成功了我现在希望把MainActivity分到主包中Other分到2包中怎么做?build.gradledefaultConfig { applicationId "com.example.myapplication" minSdkVersion 16 targetSd...
2018-05-15 20:54:36 1098 1
原创 NDK实战之增量更新
这里NDK主要实现的功能是:根据当前应用的apk+我们从服务端上下载而来的增量文件去合成新的apk为了方便,我们这里的增量文件直接放在本地提取本应用apk所在的路径public class ApkExtract { public static String extract(Context context) { context = context.getApplication...
2018-05-15 12:09:27 168
原创 Android收集崩溃信息的原理
学习自https://www.jianshu.com/p/91f494c7adf6更推荐去集成sdk,本文侧重原理的解读腾讯https://bugly.qq.com/v2/index友盟http://www.umeng.com/收集工具类public class ExceptionCrashHandler implements Thread.UncaughtExceptionHandler {...
2018-05-14 21:36:50 896
原创 Android FragmentLifecycleCallbacks
他的作用是在外部监听一个碎片的生命周期呢需求场景:解耦static class FragmentSubscriber extends android.support.v4.app.FragmentManager.FragmentLifecycleCallbacks { @Override public void onFragmentViewCreated(android.suppo...
2018-05-11 10:07:07 4753
原创 Android Fragment 监听hide和show
setUserVisibleHint方法耳熟能详,可是仅仅适用于ViewPager,他是ViewPager中手动调用的,但是正常情况下我们该怎么监听呢?我们也手动调用不就好了上addFragment代码private Fragment mFragment;protected void addFragment(int frameLayoutId, Fragment fragment) { ...
2018-05-10 17:45:09 2609
原创 本博客知识体系及导航
过去的知识,好像都没意义了 2018.5.9 C、C++typedef内存角度理解结构体的-> 设计模式模板(把你的OnCreate藏起来,一句话初始化,开源中国的小技巧)观察者代理 数据库mysql插入中文报错事务、mysql隔离级别聚集索引、非聚集索引 网络信道、停等协议滑动窗口、最大吞吐量拥塞控制TCP可靠的原理OSPF的原理IP新老编址数据链路层服务ARP原理DNS(基于UDP)解析...
2018-05-09 16:36:30 324
原创 Android贝塞尔曲线
学习自https://blog.csdn.net/z82367825/article/details/51599245有许多精美的UI都离不开贝塞尔曲线,所以它值得我们学习二阶三阶看着图真的很好理解,公式就不展开了,Android有现成的api二阶绘制实例public MyView(Context context, @Nullable AttributeSet attrs) { super...
2018-05-08 13:28:09 170
原创 类加载器
学习自https://blog.csdn.net/jiangwei0910410003/article/details/17733153在新建一个Java对象的时候,JVM会把字节码加载到内存中(ART不是,会在安装的时候把字节码转化成机器码)。字节码一开始是存在于.class文件中的,类加载需要把.class文件中的字节码导入到硬盘中,经过一段时间后把字节码加载到内存中。一个例子,分别看看这个类...
2018-05-07 15:06:50 119
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人