- 博客(60)
- 资源 (1)
- 收藏
- 关注
原创 Gradle学习笔记 - 编译过程中部分task作用
在自定义gradle插件时,最头疼的莫过于不知道将插件加入到执行流程中哪个地方,下面梳理了一些主要task的作用:1、preDebugBuild 获取compile 和 runtime的依赖包并对其做一些版本号,依赖等的校验工作。2、compileDebugAidl 将aid...
2020-03-27 21:03:15 751
原创 Android apt学习记录
AbstractProcessor 注解处理器javac的一个工具,用来在编译时扫描和编译和处理注解(Annotation)的。只能生成新文件。ProcessingEnvironment提供 Element,Filer,Messager等工具,Filer在生成java文件使用,Messager可以打印日志,调试时使用的最多。 (Messager日志在Android studio - Bu...
2020-01-08 11:05:16 339
原创 CoordinatorLayout解析
CoordinatorLayout在CoordinatorLayout出现之前,为了处理嵌套滑动逻辑,一般需要继承一个ViewGroup,重写onInterceptTouchEvent和onTouchEvent等方法并实现相应的逻辑,然后在布局中直接引用。这样做有一点非常不好的地方就是:代码冗余,同时处理逻辑也比较繁琐。为此,CoordinatorLayout提供了一套非常完美的解决方案,具体来...
2019-04-28 20:09:47 334
转载 Java虚拟机原理图解(转)
一、java的六种存储地址及解释1) 寄存器(register):这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部。但是寄存器的数量极其有限,所以寄存器由编译器根据需求进行分配。你不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象。2) 堆栈(stack):位于通用RAM中,但通过它的“堆栈指针”可以从处理器哪里获得支持。堆栈指针若向下移动,则分配新的内存;若向上移动,则释...
2018-10-16 10:37:47 193
转载 Java GC 日志详解(一图读懂)
Java GC日志可以通过 +PrintGCDetails开启以ParallelGC为例YoungGC日志解释如下(图片源地址:这里) :FullGC(图片源地址:这里):
2018-10-11 16:22:33 599
原创 单例对象无法被回收的原因 - gc回收机制
单例对象无法被回收的真正原因要从java垃圾回收器开始说起JAVA垃圾对象判断准则Java中判断一个对象是否可以被回收是根据“可达性”来判定的。可达性:以一系列的称为 “GC Roots”的对象作为起始点,然后向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的,即可视为垃圾。GC Root...
2018-10-11 16:08:50 2805
原创 笔记 - JVM简介及执行流程
时隔一年,兜兜转转又转回Android开发,在开发过程中,对JAVA虚拟机内容有点疑惑,于是翻看了很多博客,根据自己的理解在此记录总结下,以便后续复习,非常感谢各位博主的辛勤付出。JVM简介JVM即java虚拟机,对于虚拟机有过了解的同学都知道虚拟机实际上是通过虚拟计算机硬件来运行一个系统的,实现相应的功能。jvm既然被称为java虚拟机,那么它必然也有相应的结构来完成java代码的执行(详见...
2018-10-09 15:52:52 3817 1
原创 输入一个正整数N,返回一个大于N并且二进制权重跟N相同的数
背景该题目来源于今天的网易校招笔试,其中二进制权重为一个正整数N的二进制中1的个数思路假设M为N的二进制,则从M的最后一位开始向前遍历,遇到第一个1改为0,继续遍历遇到第一个0改为1结束。代码public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.i
2016-09-23 21:09:28 1018
原创 java版文件重命名
背景我们经常在网上下载一些视频教程,然而这些视频命名规则各不相同,即使对于相同类型的文件名来说,当文件数量很大且文件名全部是中文时,文件排序是非规则的,因此本篇博客主要讲解一种改变文件夹名称使得文件按照规律进行排序。思路根据文件名对文件进行排序,然后重命名文件即可。代码规则:如 将文件名中带有 “第八讲 ”替换成“8”:构建排序规则 /*** * @param filePath 文件
2016-09-08 17:32:56 496
原创 Java程序初始化过程
java程序初始化执行顺序: 父类静态变量 -> 父类静态代码块 -> 子类静态变量 -> 子类静态代码块 -> 父类非静态变量 -> 父类非静态代码块 -> 父类构造函数 ->子类非静
2016-08-25 15:27:25 405
原创 Java自动装箱
以一道题为引子:Integer i01 = 59;int i02 = 59;Integer i03 =Integer.valueOf(59);Integer i04 = new Integer(59)。求以下输出结果:System.out.println(i01== i02);System.out.println(i01== i03);System.out.println(i03== i0
2016-08-25 09:39:14 314
转载 JVM 堆内存设置原理 (转)
堆内存设置 原理 JVM堆内存分为2块:Permanent Space 和 Heap Space。Permanent 即 持久代(Permanent Generation),主要存放的是Java类定义信息,与垃圾收集器要收集的Java对象关系不大。Heap = { Old + NEW = {Eden, from, to} },Old 即 年老代(Old Generation),New 即 年轻
2016-08-25 07:58:17 492
原创 Java类加载机制解析
例从一个例子出发分析,其中的原理请:Java虚拟机类加载机制(转)代码1:public class Test { public static Test test = new Test(); public static int a; public static int b = 0; private Test() { a++; b++;
2016-08-15 16:13:16 453
转载 Android面试:主线程中的Looper.loop()一直无限循环为什么不会造成ANR?(转)
引子:正如我们所知,在android中如果主线程中进行耗时操作会引发ANR(Application Not Responding)异常。造成ANR的原因一般有两种: 当前的事件没有机会得到处理(即主线程正在处理前一个事件,没有及时的完成或者looper被某种原因阻塞住了) 当前的事件正在处理,但没有及时完成为了避免ANR异常,android使用了Handler消息处理机制。让耗时操作
2016-08-15 12:41:58 6518 1
转载 Android性能分析-内存泄漏
转:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0309/2565.html
2016-08-14 15:38:29 292
原创 Android性能分析-traceview
TraceView简介traceview主要Android平台特有的数据采集和分析工具,主要用于分析Android应用程序的瓶颈。而traceview本身只是一个数据分析工具,数据采集则需要SDK中Debug类或者是DDMS中的工具。 简单描述:traceview就是分析一个应用进程中每个线程(具体可以定位到某个方法)的耗时情况,即占用cpu时间。用法 对于已知代码的程序: 对于一
2016-08-14 11:51:45 417
转载 Android 代码判断是否获取ROOT权限(转)
/** * 判断当前手机是否有ROOT权限 * @return */ public boolean isRoot(){ boolean bool = false; try{ if ((!new File("/system/bin/su").exists()) && (!new File("/system/xb
2016-08-12 16:41:19 396
转载 Java强引用、软引用、弱引用、虚引用详解 (转)
转自:http://blog.csdn.net/xiaofengcanyuexj/article/details/45271195Java中没有指针的概念,而引用就是一个弱化的指针,保证开发不能任意操作内存。最近整理了一下之前不明白的各种级别引用:强引用、软引用、弱引用、虚引用,它们的特点和应用场景汇总如下: 1、强引用 如果一个对象具有强引用,GC绝不会回收它;当内存空间不足,JVM宁愿抛出O
2016-08-12 16:37:23 444
转载 Android中内存泄露与如何有效避免OOM总结(转)
转自:http://m.blog.csdn.net/article/details?id=51579080一、关于OOM与内存泄露的概念我们在Android开发过程中经常会遇到OOM的错误,这是因为我们在APP中没有考虑dalvik虚拟机内存消耗的问题。1、什么是OOMOOM:即OutOfMemoery,顾名思义就是指内存溢出了。内存溢出是指APP向系统申请超过最大阀值的内存请求,系统不会再分配多余
2016-08-12 16:29:02 1664
转载 Android中Activity执行restart过程中涉及到的四种数据存储恢复的方法(转)
转自:http://www.2cto.com/kf/201511/449241.html 我们知道,当Configuration Change发生的时候(比如横竖屏切换等),会导致Activity重启,即先destroy,然后会restart,一般情况下restart的时间比较短,为了保证一致的用户体验,我们应该在Activity重启前将一些数据存储下来,然后在restart的时候重新根据这些数据
2016-08-12 15:52:57 1479
原创 TX Android电面问题
16年8月9号进行的电话面试,整个电面过程中基本上只涉及Android基础问题,有点出乎意料。 有部分问题忘记了,其中记得的有: 1. Activity生命周期 2. onStop() 方法中能不能进行读写数据库操作 3. 如果onstop方法中不能操作数据库,该怎么做 4. onSaveInstanceState()方法中能不能操作数据库 5. onSaveInstanceState(
2016-08-12 15:09:33 523
转载 Java虚拟机类加载机制(转)
转自:http://www.importnew.com/18548.html 看到这个题目,很多人会觉得我写我的java代码,至于类,JVM爱怎么加载就怎么加载,博主有很长一段时间也是这么认为的。随着编程经验的日积月累,越来越感觉到了解虚拟机相关要领的重要性。闲话不多说,老规矩,先来一段代码吊吊胃口。public class SSClass{ static { S
2016-08-11 21:01:51 638
转载 关于String内存分配的深入探讨 (转)
public class Test {public static final String MESSAGE="taobao";public static void main(String[] args) { String a = "tao"+"bao"; String b = "tao"; String c = "bao";System.out.println(a==MESSAGE);
2016-08-11 20:45:51 2314 1
原创 求最大子数组之和
题目在一个有N个元素的数组中,其中每个元素的值可正可负,在该数组中求一个连续子数组,使得该数组的和最大思路拿到这个题首先想到的是暴力法,即暴力循环求所有数组的和,因此可以求的该数组的最大值,其时间复杂度为O(N^3) 时间复杂度较高,我们可以用分治法和动态规划来做这道题。其中分治法时间复杂度为O(N*logN),而动态规划为O(N)。代码 暴力法:private static void f1
2016-08-11 11:48:01 299
原创 火车进站-即数的全排列问题
题目给定一个正整数N代表火车数量,其中n大于0且小于10,接下来输入火车入站的序列,一共N辆火车,每辆火车以数字1-9编号。要求以字典序排序输出火车出站的序列号。思路这道题考的是给定n个无重复的数,求这n个数的全排列问题代码public class F { public static void main(String[] args) { // 无重复的全排列 S
2016-08-10 21:28:30 2064 2
原创 求两个大数的和
题目给定两个50到100位长的数,求这两个数的和思路在java中long类型为8字节,即64位,因此不能用Long类型变量去承载并计算这两个数,只能考虑用数组或者字符串来计算代码import java.util.Scanner;import java.util.Stack;//本题使用的是String+Stack求解的,用数组效率更高点,因为栈的进栈和出栈浪费不少时间public class
2016-08-10 21:14:02 791
原创 数独-java版
求数独问题依然利用图的深度优先搜索算法求解直接上代码:public class 数独 { public static void main(String[] args) { String[][] map = { { "5", "3", " ", " ", "7", " ", " ", " ", " " }, { "6", " ",
2016-08-10 21:06:23 733
原创 n皇后问题-java版
题目对于一个n*n的棋盘,给定n个皇后,求每个皇后的位置,其中要求每个皇后在八个方向上是唯一存在的思路对n*n的棋盘使用图的深度优先收索求解,注意剪枝代码import java.util.ArrayList;/** * 对于一个n*n的棋盘,给定n个皇后,求每个皇后的位置,其中要求每个皇后在八个方向上是唯一存在的 */public class n皇后 { public static v
2016-08-10 20:47:42 557
原创 找零钱问题-图的深度优先
题目这是今年华为校招的一道测试题,题目为: 我们知道人民币有1、2、5、10、20、50、100这几种面值。现在给你n(1≤n≤250)元,让你计算换成用上面这些面额表示且总数不超过100张,共有几种。比如4元,能用4张1元、2张1元和1张2元、2张2元,三种表示方法。思路根据{1、2、5、10、20、50、100}构建一张 n行7列的图,利用图的深度优先收索算法求解。代码:import jav
2016-08-10 19:52:08 482
转载 Android 内存泄漏总结(转)
Android 内存泄漏总结 转自:https://yq.aliyun.com/articles/3009 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏大家都不陌生了,简单粗俗的讲,就是该被释放的对象没有释放,一直被某个或某些实例所持有却不再被使用导致 GC 不能回收。最近自己阅读了大量相关的文档资料,打算做个 总结 沉淀下来跟大家一起分享和学习,也给自己
2016-08-09 22:55:21 245
转载 java synchronized类锁,对象锁详解(转)
转载自http://zhh9106.iteye.com/blog/2151791 在java编程中,经常需要用到同步,而用得最多的也许是synchronized关键字了,下面看看这个关键字的用法。因为synchronized关键字涉及到锁的概念,所以先来了解一些相关的锁知识。java的内置锁:每个java对象都可以用做一个实现同步的锁,这些锁成为内置锁。线程进入同步代码块或方法的时候会自动获得该锁
2016-08-09 10:48:14 557
原创 Java 异常处理过程
例public class Test { public static void main(String[] args) { int s1 = f1(); System.out.println(s1); StringBuffer s2 = f2(); System.out.println(s2); } private
2016-08-07 09:40:03 813
原创 Java Scanner输入两个数组
题目从命令行读入两个数组的长度和数组的值,其中第一行两个数na和nb代表aa和bb数组的长度代码import java.util.Scanner;public class Z { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int na =
2016-08-02 16:11:37 12449
原创 Java中 Thread 与 Runnable 的区别
多线程实现方式定义一个线程子类,并继承Thread类。定义一个runnable子类,实现runnable接口,并将该用runnable子类传递给一个Thread类对象。上述使用runnable接口定义多线程的好处在java中不允许多继承的存在,若想简介使用多继承可以利用接口来实现若想定义一个已实现某个抽象的父类的线程时,在不使用接口时,无法继续继承Thread类,那么问题就出现了,这也就是使用
2016-07-29 22:00:59 348
原创 Java 内部类、匿名内部类、抽象类
何为内部类内部类是指 在一个类中在定义一个类 如: 1.成员内部类public class F { private int a; public void fun(){ //TODO } public class M{ private int a; public void fun(){ //TODO
2016-07-28 22:50:51 3524 2
原创 Java版 原地二路归并排序
二路归并排序原始二路归并排序思想: 先将原始数组划分为n个较小的子数组,然后对每个子数组两两进行排序并合并为一个次子数组 重复上述过程直到次子数组的个数为1即为排序后的原始数组时间复杂度:O(N*logN) (最好/坏情况)空间复杂度: O(N)原地二路归并排序为了解决原始二路归并排序空间复杂度较高的情况而产生的,思想很巧妙,很是佩服。它在将原始的空间复杂度由 O(N) 变为 O(1).
2016-07-27 17:14:21 865 1
原创 KMP算法-Next数组递归求法
/** * KMP算法:算法功能:在一个字符串s中,找到第一个与给定的字符串t想匹配的位置 */public class KMP { public static void main(String[] args) { String[] s = new String[] { "a", "b", "c", "a", "b", "a", "b", "c", "a" };// 主串
2016-07-16 17:29:43 1439
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人