自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(200)
  • 资源 (9)
  • 收藏
  • 关注

原创 Android进阶之开发问题笔记

0 工作总结当天问题,当天解决,坚决不过周。(2017/5/7)Git提交前先review代码,确认无误再提交;每次提交的内容是一个功能点,方便查找功能、代码。(2017/7/2)每一个功能点都必须经过自测,才能提交测试。(2017/7/2)控制情绪。(2017/8/8)考虑问题更加全面,非常注意:新版本、老版本互相兼容(2017/12/7)对需求或者问题,能够自己独立思考(独立分...

2017-06-26 22:37:40 14815 7

原创 Java多线程之如何写出线程安全的程序?

1 如何写出线程安全的程序?答:1.1 这道题想考察什么?答:(1)考察要点●是否对线程安全有初步了解(初级)●是否对线程安全的产生原因有思考;是否知道final、volatile关键字的作用;是否清楚1.5之前JavaDCL为什么有缺陷(中级)●是否清楚的知道如何编写线程安全的程序;是否对hreadLocal的使用注意事项有认识(高级)(2)题目剖析●如何写出线程安全的程序?●什么是线程安全?如何实现线程安全?2 什么是线程安全?答:本质是可变资源(内存)线程间共享的问题,关键是:可

2020-12-05 16:45:40 659

原创 Java多线程之如何停止一个线程?

1 如何停止一个线程?答:1.1 这道题想考察什么?答:(1)考察要点●是否对线程的用法有了解;是否对线程的stop方法有了解(初级)●是否对线程stop过程中存在的问题有认识;是否熟悉interrupt中断的用法(中级)●是否能解释清楚使用boolean标志位的好处;是否知道interrupt底层的细节(高级)●通过该题目能够转移话题到线程安全,并阐述无误(高级)(2)题目剖析●如何停止一个线程?●官方停止线程的方法被废弃,所以不能直接简单的停止线程?如何设计可以随时被中断而取消的任务

2020-11-29 16:35:53 2028

原创 Android进阶之深入理解Activity的onActivityResult

1 Activity的onActivityResult使用起来非常麻烦,为什么不设计成回调?答:答:我觉得这是一个很有趣的问题,有趣的除了题目本身,也在于其引申出的感悟。我们在使用和学习Android Framework相关的内容时,除了要了解其内部实现机制,还要求自己要试着去反思,或者提问其设计的目的,这样才能帮助我们更好的理解和吸收其设计的精髓之处。1.1 这道题想考察什么?答:(1)考察要点●是否熟悉onActivityResult的用法(初级)●是否思考过用回调替代onActivityR

2020-11-25 23:54:14 3406 2

原创 Java进阶之深入理解泛型的实现机制

1 Java泛型的实现机制是怎样的?答:1.1 这道题想考察什么?答:(1)考察要点●对Java泛型使用是否仅停留在集合框架的使用(初级)●对Java泛型的实现机制的认知和理解(中级)●是否有足够的项目开发实战和“踩坑”经验(中级)●对泛型(或模板)编程是否有深入的对比研究(高级)●对常见的框架原理是否有过深入剖析(高级)(2)题目剖析●题目区分度非常大●回答需要提及以下几点才能显得有亮点:①类型擦除从编译角度的细节;②类型擦除对运行时的影响;③类型擦除对反射的影响;④对比类型

2020-11-23 21:39:04 1232

原创 Java进阶之深入理解方法分派

1 怎么理解Java的方法分派?1.1 这道题想考察什么?●多态、虚方法表的认识(初级)●对编译和运行时的理解和认识(中级)●对Java语言规范和运行机制的深入认识(高级)横向对比各类语言的能力(高级)●Groovy , Gradle DSL 5.0以前唯一正式语言●C++ , Native程序开发必备●就是确定调用谁的、哪个方法●针对方法重载的情况进行分析●针对方法覆写的情况进行分析答:...

2020-11-21 11:27:19 389

原创 Java进阶之深入理解内部类的本质

1 内部类1.1 什么是内部类?答:类都对应于一个独立的Java源文件,但一个类还可以放在另一个类的内部,称之为内部类,相对而言,包含它的类称之为外部类。不过,内部类只是Java编译器的概念,对于Java虚拟机,它是不知道内部类这回事的,每个内部类最后都会被编译为一个独立的类,生成一个独立的字节码文件。1.2 为什么放到别的类内部呢?答:内部类与包含它的外部类有比较密切的关系,而与其他类关系不大,定义在类内部,可以实现对外部完全隐藏,可以有更好的封装性,代码实现上也往往更为简洁。1.3 内部类有什

2020-11-18 22:04:01 422

原创 算法刻意练习之字KMP算法

1 特点(1)KMP(2)核心:KMP算法的想法是,设法利用这个已知信息,不要把"搜索位置"移回已经比较过的位置,继续把它向后移,这样就提高了效率。2 举例分析有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"?2.1 《部分匹配表》是如何产生的(1)“前缀"和"后缀”。 "前缀"指除了最后一个字符以外,一个字符串的全部头部组合;"后缀"指除了第一个字符以外,一个字符串的全部尾部组合。(2)"部分匹配值"就是"前缀"和"后缀"

2020-11-16 21:59:00 211

原创 算法刻意练习之动态规划

1 特点1.1 动态规划和递归或者分治没有根本上的区别(关键看有无最优的子结构)1.共性:找到重复子问题;2.差异性:最优子结构、中途可以淘太欠优解;1.2 递归问题一含有重疊的子问题,操作重复1.记忆化搜索(自顶而下);2.动态规划(自底而上);1.3 常识一般求解最值的问题都可以朝着动态规划的方向去想。2 关键点: 1.根据最优子结构定义状态:dp[n] = bestOf(dp[n-1], dp[n-2], ...) 2.递推状态转移方程(DP方程) 一维:dp[i] = d

2020-11-15 17:05:06 151

原创 算法刻意练习之位运算

1 位运算1.1 为什么需要位运算1.2 位运算符1.3 算数移位与逻辑移位1.4 位运算的应用(核心)

2020-11-15 15:41:52 112

原创 算法刻意练习之布隆过滤器/LRU Cache

1 LRU Cache1.1 特点1.2 工作原理1.3 替换策略1.4 模板/** * 哈希表 + 双向链表:一个哈希表和一个双向链表维护所有在缓存中的键值对 * * 双向链表按照被使用的顺序存储了这些键值对,靠近头部的键值对是最近使用的,而靠近尾部的键值对是最久未使用的。 * 哈希表即为普通的哈希映射(HashMap),通过缓存数据的键映射到其在双向链表中的位置。 * * 思路: * 1.用字典来存储 key-value 结构,这样对于查找操作时间复杂度就是 O(1);

2020-11-15 15:28:10 150

原创 算法刻意练习之字典树/并查集

1 字典树1.1 特点又叫Trie树、前缀树(Prefix Tree)、单词查找树或键树,是一种多叉树结构1.2 对比树、二叉搜索树(1)树(2)二叉搜索树1.3 基本结构(1)基本结构(2)真实的字典树上图是一棵Trie树,表示了关键字集合{“a”, “to”, “tea”, “ted”, “ten”, “i”, “in”, “inn”} 。从上图可以归纳出Trie树的基本性质。1.4 基本性质1.5 核心思想1.6 场景(1)搜索前缀匹配、字符串检索、词频统计、字符串

2020-11-15 11:50:39 121

原创 Java进阶之深入理解Char

1 byte[]中的Unicode码(1)Unicode码中的ASCII 码(2)Unicode码中的非 ASCII 编码。简体中文汉字编码方式:GB2312编码等Unicode码 26007 对应的字符为 斗Unicode码 32599 对应的字符为 罗(3)char[] 转换为byte[]2 1字节=1byte=8bit=8位二进制;1int=4字节=32bitbit又名比特、位,简称b,是计算机硬盘中的最小存储单位,是二进制中的一个数位“0”或数位“1”。ASCII码值就是用一

2020-10-19 22:05:55 874 2

原创 Android系统分析之带着问题看事件分发机制

1 讲讲Android的事件分发机制?答:3 简述事件传递的流程答:2 为什么会有事件分发机制?答:3 ViewGroup的事件分发涉及到哪些过程和方法?答:3 View中为什么会有dispatchTouchEvent方法,它存在的意义是什么?答:3 View中为什么没有onInterceptTouchEvent事件拦截方法?答:3 用伪代码表示ViewGroup的事件分发过程并解释?答:3 ViewGroup和View同时注册了事件监听器(onClick等),哪个会执行?答:

2020-09-20 19:32:49 739

原创 算法刻意练习之二分查找

1 三个前提条件1. 目标函数单调性(单调递增或者递减)。二分的数据必须是有序的,这样可以通过它的某些特征排除掉比如说 前半部分 或 后半部分;2. 存在上下界(bounded);3. 能够通过索引访问(index accessible);2 代码模板public int binarySearch(int[] array, int target) { int left = 0, right = array.length - 1, mid; while (left <= rig

2020-09-20 00:00:53 128

原创 算法刻意练习之DFS/BFS/双向BFS/剪枝

1 搜索1.1 特点(1)如果遍历的数据结构本身没有任何特点,就遍历所有的节点,同时保证每个点访问一次,且仅访问一次最后找到结果(2)对于节点的访问顺序不限,可分为深度优先 depth first search广度优先 breadth first search(3) 在树(图/状态集)中寻找特定结点public class TreeNode { public int val; public TreeNode left, right; public TreeNode(

2020-09-19 23:38:59 292

原创 算法刻意练习之堆/二叉堆

1 堆 Heap1.1 特点(1)递归 - 循环,通过函数体来进行的循环;(2)盗梦空间的梦境1.2 递归状态树(1)示例2 二叉堆 Binary Heap2.1 特点(1)递归 - 循环,通过函数体来进行的循环;(2)盗梦空间的梦境2.2 递归状态树(1)示例...

2020-09-14 00:15:36 187

原创 算法刻意练习之递归/分治/回溯/贪心算法

1 递归(Recursion)1.1 特点(1)递归 - 循环,通过函数体来进行的循环;(2)盗梦空间的梦境1.2 递归状态(1)示例1.4 递归思维要点(1)不要人肉进行递归(最大误区),初学者可以在纸上画出递归的状态树,慢慢熟练之后一定要抛弃这样的习惯。一定要记住:直接看函数本身开始写即可。否则,永远没办法掌握、熟练使用递归;(2)找到最近最简的方法,将其拆解成可重复解决的问题(找最近重复子问题)。原因是我们写的程序的指令,只包括 if else 、 for 和 while loop

2020-09-14 00:00:10 679

原创 算法刻意练习之树/二叉树/二叉搜索树/AVL树和红黑树

1 树 Tree1.1 特点(1)树 Tree:1.2 演示(1)示例2 二叉树 Binary Tree2.1 特点(1)二叉树 Binary Tree:2.2 演示(1)构造(2)示例(3)分类2.3 二叉树遍历(1)前序遍历( Pre-order ) : 根 - 左 - 右;(2)中序遍历( In-order ) : 左 - 根 - 右;(3)后序遍历( Post-order ) : 左 - 右 - 根;(4)模板3 图 Graph3.1 特点(1)树和

2020-09-13 00:29:45 255

原创 算法刻意练习之栈/队列/双端队列/优先队列

1 栈(Stack)1.1 特点(1)Stack:先入后出;添加、删除皆为 O(1)1.2 演示(1)主要API(2)示例2 队列(Queue)2.1 特点(1)Queue:先入先出;添加、删除皆为 O(1)2.2 演示(1)主要API(2)示例2.3 时间复杂度3 双端队列(Deque)3.1 特点(1)Stack:两端可以进出的Queue,即是Deque - double ended queue;插入和删除都是 O(1) 操作;3.2 演示(1)主要API

2020-08-30 11:18:47 188

原创 算法刻意练习之数组/链表/跳表

1 数组申请数组时Memory Controller在内存中给你开辟一块连续的内存地址;通过访问Memory Controller来访问数组,复杂度是O(1);可以随机访问任何一个元素;问题在于 插入 和 删除 频繁的情况下, 数组不好用;插入需要挪动元素 O(1)、O(n);删除也需要挪动元素, 然后给数组最后一位设置为空来触发GC, O(n);2 链表3 跳表...

2020-08-29 23:20:00 278

原创 算法刻意练习之时间/空间复杂度

1 时间复杂度:是指执行当前算法所消耗的时间1、常数阶O(1):无论代码执行了多少行,只要是没有循环等复杂结构,消耗的时间并不随着某个变量的增长而增长,那时间复杂度就都是O(1)例:int i = 1;j = 2;++i;j++;int m = i + j;2、线性阶O(n):大多数遍历例:for循环里面的代码会执行n遍,因此它消耗的时间是随着n的变化而变化for(i=1; i<=n; ++i) { j = i; j++;}3、平方阶O(n²):双重循环4、

2020-08-29 23:01:57 262

原创 Android系统分析之带着问题看Handler

1 Handler问题三连:是什么?有什么用?为什么要用,不用行不行?1.1 Handler是什么?答:Handler是Android FrameWork架构中的一个基础组件,用于子线程与主线程间的通信,实现一套非阻塞的消息创建、传递、处理机制。1.2 Handler有什么用?答:把子线程中的UI更新信息传递给主线程(UI线程),以此完成UI更新操作。1.3 Handler为什么要用,不用行不行?答:2 Android UI更新机制(GUI) 为何设计成了单线程的?答:3 真的只能在主(U

2020-08-16 11:41:32 1211

原创 Kotlin之深入理解协程

1 协程基础1.1 带问题理解协程GlobalScope.launch(Dispatchers.Main) { suspendSimpleDelay()}suspend fun suspendSimpleDelay(): Unit { withContext(Dispatchers.IO) { delay(10000) }}1.Kotlin协程中挂起的是什么?协程。2.什么是协程?kotlin协程为launch()、async() 等中

2020-08-13 15:11:01 741

原创 Kotlin之精选

1 如何巧用Kotlin内置函数?1.1 let、also、with、run、和apply区别?1.2 使用示例区别?1.2.1 letprivate fun higherFunCompare() { val people : People = People("chen", 1, listOf("x", "y")) /** * let * 作用:1.避免写判空的处理;2.使用it替代object对象在其作用域内访问属性&

2020-08-13 14:51:44 215

原创 Gradle之如何创建Gradle插件工程及调试

1 如何创建Gradle插件工程2 如何使用kotlin编写插件呢?3 如何调试插件3.1 打断点打断点和Android开发一样,点一下就行;3.2 执行编译在命令行中执行APP的编译命令:gradlew assembleDebug -Dorg.gradle.daemon=false -Dorg.gradle.debug=true案例:D:\project\statsdk>gradlew assembleDebug -Dorg.gradle.daemon=false -Dorg.g

2020-07-13 21:11:22 4050 4

原创 Android源码分析之OKHttp框架

1 OKHttp简介1.1 定义1.2 作用1.3 优点1.4 优点1.5 使用(1)(2)(6)学习链接Android OkHttp完全解析 是时候来了解OkHttp了-鸿洋Android 一个改善的okHttp封装库-鸿洋2 OKHttp原理2.12.2(1)(2)3 造轮子的方式分析OKHttp原理3.1 搭建大体的框架4 OKHttp源码分析4.15 优秀的思想和设计5.16 学习链接Android主流三方库源码分析(一、深入理解OKHttp源码)Ok

2020-06-14 20:35:57 753

原创 Android源码分析之EventBus框架

1 EventBus简介1.1 定义1.2 作用1.3 优点2 EventBus原理2.1 最核心的原理利用了subscriptionsByEventType这个重要的HashMap对象,将订阅对象,即接收事件的方法存储在这个列表,发布事件的时候在列表中查询出相对应的方法并执行。2.2 EventBus原理介绍3 造轮子的方式分析EventBus原理3.1 搭建大体的框架:create4 EventBus源码分析4.1 源码分析4.1.1 基本使用5 优秀的思想和设计5.16

2020-05-31 14:00:05 711

转载 Android进阶之深入理解Context

1 Context概念(1)在启动Activity/Service,发送广播,获取系统资源,获取系统服务等都需要Context的参与,可见Context的常见性。到底什么是Context,Context字面意思上下文,或者叫做场景,也就是用户与操作系统操作的一个过程,比如你打电话,场景包括电话程序对应的界面,以及隐藏在背后的数据。1.1 Android系统的角度Context是什么呢?Context是一个场景,代表与操作系统的交互的一种过程,是维持Android程序中各组件能够正常工作的一个核心功能类

2020-05-29 10:14:58 434

原创 Android进阶之数据加密算法

1 Des加密1.1 什么是Des加密?DES是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同密钥的算法。DES加密算法出自IBM的研究,后来被美国政府正式采用,之后开始广泛流传,但是近些年使用越来越少,因为DES使用56位密钥,以现代计算能力24小时内即可被破解。1.2 加密有哪些特点?1.3 应用场景?1.4 算法实现?1.5 学习链接Android数据加密之Des加密...

2020-03-22 11:40:40 275

原创 Android进阶之混淆配置

1、proguardFiles会让sdk中配置的混淆文件不能在app中生效,sdk中配置consumerProguardFiles即可实现在app中生效。debug{ consumerProguardFiles 'proguard-rules.pro'}2、区别:①proguardFiles是用于构建sdk的混淆规则;(即是:sdk单独先混淆)②consumerProgua...

2019-12-22 17:44:07 899

原创 Android进阶之7.0适配-应用之间共享文件(FileProvider)

1 问题(1)以下是一段简单的代码,它调用系统的相机app来拍摄照片:void takePhoto() { String cameraPhotoPath = getApplicationContext().getExternalCacheDir().getPath(); File cameraFile = new File(cameraPhotoPath, "test.jpg"...

2019-12-15 13:57:07 25125

原创 Java多线程之深入理解队列同步器AbstractQueuedSynchronizer(AQS)

1 AQS介绍AQS的全称为(AbstractQueuedSynchronizer),这个类在java.util.concurrent.locks包下面:AQS是一个用来构建锁和同步器的框架,使用AQS能构造出应用广泛的同步器,比如:ReentrantLock,Semaphore,CountDownLatch,其他的如ReentrantReadWriteLock,SynchronousQue...

2019-10-27 10:55:57 333

原创 Android studio项目中的gradle配置

1 gradle.properties详解gradle.properties是项目级别的Gradle配置文件。在使用Android Studio新建Android项目之后,在项目根目录下会默认生成一个gradle.properties文件,我们可以在里面做一些Gradle文件的全局性的配置,也可以将比较私密的信息放在里面,防止泄露。1.1 gradle.properties文件模板# Pro...

2019-10-18 19:29:56 1006

原创 软技能之读《如何在工作中快速成长?致工程师的10个简单技巧》

1 对认知的定义 如何在工作中快速成长?致工程师的10个简单技巧比如:说到时间管理立马连接到“找到不被打扰的时间用于投资自己”;说到执行力立马连接到“先想明白,然后一步步做下去”;说到改变习惯立马连接到“在触发条件发生进入下一个行为时,做对选择题”。通过认知的改变,会激发自己做出思考,做出行为的改变,从而影响我们的判断,提升我们的能力,确切地说认知升级颠覆了自己的思考习惯,让我们超...

2019-10-10 09:51:02 472

原创 Java多线程之深入理解原子变量

1 什么是原子变量?为什么需要它们呢?对于count++这种操作来说,通常使用synchronized关键字保证原子更新操作,synchronized会保证多线程不会同时更新变量count。但是,使用synchronzied成本太高了,需要先获取锁,最后还要释放锁,获取不到锁的情况下还要等待,还会有线程的上下文切换,这些都需要成本。而Java从Jdk 1.5开始提供了java.util.con...

2019-08-25 23:06:44 761

原创 Java多线程之深入理解synchronized

1 synchronized关键字synchronized翻译为中文的意思是同步的,它是Java中处理线程安全问题常用的关键字,也有人称其为同步锁。2 synchronized到底锁住的是什么(1)synchronized锁住的是对象而非代码,实际保护的是同一个对象的方法调用,确保同时只能有一个线程执行。(2)再具体来说,synchronized锁住的对象有一个锁和一个等待队列,锁只能被一...

2019-08-25 17:33:31 360

原创 Java多线程之并发编程系列

1 线程基础1.1 详解Thread与Runnable(1)概念(2)学习链接Java基础之详解Thread与Runnable(3)总结1.2 详解2 深入理解synchronized2.1 深入理解synchronized3 Java中的锁3.1 可重入锁4 Java中13个原子操作类5 并发容器5.1 Collections.synchronizedList()5....

2019-08-25 12:01:39 176

原创 Android深入理解RemoteViews

1 前言RemoteViews可以理解为一种远程的View,其实他和远程的Service是一样的,RemoteViews表示的是一种View的结构,他可以在其他的进程中显示,最常用的就是通知栏和桌面小组件。2 RemoteViews应用2.1 在通知栏上的应用2.1.1 什么是通知通知是在常规UI界面之外向用户展示消息的工具,当系统发出通知时,它会以图表的形式显示在状态栏中。2.1.2...

2019-08-11 22:45:52 1658

原创 Java基础之异常

1 父类异常与子类异常之间的捕获关系1.1 问题public class Annoyance extends Exception {}public class Sneeze extends Annoyance {}public class Human { public static void main() { try { try ...

2019-07-30 21:15:11 147 1

RxJava框架时序图-线程切换

RxJava框架时序图-线程切换,RxJava框架时序图-线程切换

2018-01-04

RxJava框架时序图-map操作符

RxJava框架时序图-map操作符,RxJava框架时序图-map操作符

2018-01-04

RxJava框架时序图-基本的RxJava例子

RxJava框架时序图-基本的RxJava例子, RxJava框架时序图-基本的RxJava例子

2018-01-04

Glide框架时序图-加载缓存图片

Glide框架时序图-加载缓存图片,Glide框架时序图-加载缓存图片。

2017-12-21

Glide框架时序图-加载网络图片

Glide框架时序图-加载网络图片,Glide框架时序图-加载网络图片。

2017-12-21

imageloader框架时序图分析

imageloader框架时序图分析,imageloader框架时序图分析

2017-11-25

JobScheduler

JobScheduler 例子

2016-12-06

ttf字体文件

TTF字体文件,包括:微软雅黑、谐体、线体等等

2016-07-22

java程序设计使用教程

很好的书本指导和实验指导,适合初学者,学习的好材料,MyDate d1 = new MyDate(2014, 3, 31);

2014-03-31

空空如也

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

TA关注的人

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