- 博客(195)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Android - Retorfit 2 使用详解
本文中使用 Retrofit 2.3.0 版本 侧重于如何使用,至于原理暂不考虑。面临秋招的准大四狗,看了看各大公司的面经,什么 Retrofit、RxJava,还有一众图片加载库 比如 Glide、Picasso 等等都快成了标配了,动辄分析其源码。原来一直以自己入门尚短为由拖沓没去了解这些开源库(实际上可以算作是18年年初才开始接触),现在不得不学习这戏开源库了。于是...
2018-08-06 16:00:27
845
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Android 开发艺术探索 - 读书笔记目录
仅作为读书笔记使用,建议阅读原书。 书中代码部分已和现版本不符,建议对比最新版本学习。读了这本书,越发认识到和大佬们的差距。嗯,加油吧。过去の自分が今仆の土台となる[第 1 章 - Activity 的生命周期和启动模式] 第 2 章 - IPC 机制 第 3 章 - View 的事件体系 [第 4 章 - View 的工作原理] 第 5 章 - 理解 R...
2018-07-24 17:38:45
650
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 LeetCode 题解整理
按照 探索 中初级-中级-高级的顺序刷题,下面是目前完成的题解,未完成版,随时更新。初级数组 - 两个数组的交集 II数组 - 从排序数组中删除重复项数组 - 买卖股票的最佳时机 II数组 - 旋转数组数组 - 存在重复数组 - 只出现一次的数字数组 - 加一数组 - 移动零数组 - 两数之和数组 - 有效的数独数组 - 旋转图像字符串 - 反转字符串字符串 ...
2018-06-04 22:04:15
1405
2
原创 LeetCode 随机 - 两两交换链表中的节点
24. 两两交换链表中的节点给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.代码/** * Definition for singly-linked list. * public class ListNo...
2019-04-04 17:01:07
437
原创 LeetCode 随机 - Z 字形变换
6. Z 字形变换将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。请你实现这个将字符串进行指定...
2019-04-04 16:52:42
408
原创 LeetCode 随机 - 全排列 II
47. 全排列 II给定一个可包含重复数字的序列,返回所有不重复的全排列。示例:输入: [1,1,2]输出:[ [1,1,2], [1,2,1], [2,1,1]]代码class Solution { public static List<List<Integer>> permuteUnique(int[] nums) { ...
2019-04-04 16:49:57
449
原创 LeetCode 高级 - Remove Invalid Parentheses
Remove Invalid Parentheses删除最小数量的无效括号,使得输入的字符串有效,返回所有可能的结果。说明: 输入可能包含了除 ( 和 ) 以外的字符。示例 1:输入: "()())()"输出: ["()()()", "(())()"]示例 2:输入: "(a)())()"输出: ["(a)()()", "(a())()"]示例 3:
2018-08-29 23:06:27
961
原创 Java 之路 (二十) -- Java I/O 上(BIO、文件、数据流、如何选择I/O流、典型用例)
前言Java 的 I/O 类库使用 流 这个抽象概念,代表任何有能力产出数据的数据源对象或者是有能力接收数据的接收端对象。流 屏蔽了实际的 I/O 设备中处理数据的细节。数据流是一串连续不断的数据的集合,简单理解的话,我们可以把 Java 数据流当作是 管道里的水流。我们只从一端供水(输入流),而另一端出水(输出流)。对输入端而言,只关心如何写入数据,一次整体全部输入还是分段输入等;对于输...
2018-08-24 15:42:33
450
原创 Java 之路 (十九) -- 注解(语法、预定义注解、元注解、重复注解、注解与反射)
前言官方注解的定义如下: 注解(一种元数据形式)提供有关不属于程序本身的程序的数据。注解对它们注解的代码的操作没有直接影响。 注解有许多用途,其中包括: 编译器的信息 - 编译器可以使用注解来检测错误或抑制警告。 编译时和部署时处理 - 软件工具可以处理注解信息以生成代码,XML文件等。 运行时处理 - 可以在运行时检查某些注解。 第一次看时...
2018-08-23 11:36:57
618
原创 Java 之路 (十八) -- 容器深入研究(容器接口,实现类特性及对比)
1. 接口首先,放上层次图(少了Queue)。 Collection 继承了 Iterator 接口(事实上,该接口是所有集合的总接口),定义了集合的遍历操作。前面我们已经介绍过集合类的基础知识,这里就简单回顾以下:**Collection:**Collection 是一个接口,没有直接实现类。它用来传递集合并在需要最大通用性时对其进行操作。List:有序集合(或称为序列)...
2018-08-18 15:36:11
376
原创 Java 之路 (十七) -- 数组(基本概念与使用、数组与泛型、数组操作、Arrays 类)
学完复杂的泛型,来学点简单的。本文介绍 Java 数组的相关知识。1. 基本概念数组是一个容器对象,它包含固定数量的单个类型的值。&nbsp;创建数组时,将建立数组的长度。&nbsp;创建后,其长度是固定的。 数组中的每个项成为元素,每个元素由其数组索引访问。举个简单例子:class ArrayDemo { public static void main...
2018-08-17 15:11:03
381
原创 Java 之路 (十六) -- 泛型下(通配符、类型擦除、泛型的限制)
7. 通配符通配符,即 “?”,用来表示未知类型。通配符可用作各种情况:作为参数,字段或局部变量的类型;有时也作为返回类型;通配符从不用作泛型方法调用、泛型类实例创建或超类型的类型参数。7.1 上限有界的通配符使用上限通配符来放宽对变量的限制。声明上限通配符的语法:&lt;? extends 上限&gt;举个例子:public static double sum...
2018-08-17 00:56:34
911
原创 Java 之路 (十五) -- 泛型上(泛型类、泛型方法、有界类型参数、泛型与继承、类型推断)
Thinking in Java 中关于泛型的讲解篇幅实在过长,前后尝试阅读这一章,但总是觉得找不到要点,很迷。于是放弃 Thinking in Java 泛型一章的阅读,转而官方教程,本章可以算作官方教程的中文版。 放上官方教程地址: The Java™ Tutorials - Generics1.为什么使用泛型简单来说,泛型使类型在定义类、接口和方法时成为参...
2018-08-17 00:52:44
6483
5
原创 Java 之路 (十四) -- 类型信息(RTTI、Class 对象的加载、Class 引用的获取与泛化、instanceof 关键字、反射基础与简单使用示例)
学习内容:传统的 RTTI Class 对象的加载获取 Class 对象引用的方式ClassforName类字面常量Class 引用的泛化instanceof 关键字反射 相关类简单使用示例前言运行时类型信息使得我们可以在程序运行时发现和使用类型信息,Java 中运行时识别对象和类的信息有如下两种方式: 传统的 RTTI :假定我们在编译时已经知道所有...
2018-08-15 17:52:23
1208
原创 Java 之路 (十三) -- 字符串(String、正则表达式)
个人吐槽:对于这章,第一遍读和重读之后果然看法不同:第一次读时觉得,文章用了大篇幅来介绍 API,这样我可以比较容易理解这个方法是干嘛的,以此理解这个类是干嘛的;但是重读之后觉得,文章居然用了这么大篇幅在讲 API(尤其是正则表达式),如果我需要知道具体某个方法怎么用,直接去官方文档查多好啊,这种情况下,我更希望得到某个方法可能出现的坑,而不只是方法的介绍(毕竟,这往往需要踩过坑之后总结的,...
2018-08-14 15:58:32
464
原创 Java 之路 (十二) -- 异常(基本常识、try-catch-finally、throw、throws、使用指南)
Java 的基本理念是 “结构不佳的代码不能运行”错误回复在我们编写的每个程序中都是基本的元素Java 的主要目标之一是创建供他人使用的程序构件Java 的异常处理的目的在于通过使用少于目前数量的代码来简化大型、可靠的程序的生成,并且通过这种方式可以使你更加自信:你的应用中没有未处理的错误1. 初识异常正式介绍异常之前,先来看一个例子:public static vo...
2018-08-13 18:43:37
369
原创 Java 之路 (十一) -- 持有对象(Collection、List、Set、Queue、Map、Iterator、foreach)
本章将简单介绍一下常用的集合类的特点,同时并不会深入源码分析原理,本文目的仅仅在于对 Java 集合类有一个整体认识关于 API,本文不涉及过多,建议直接查看 Java 官方文档 https://docs.oracle.com/javase/9/docs/api/overview-summary.html1. 容器概述1.1 引入原因Java 中,数组用来保存...
2018-08-11 16:45:48
444
1
原创 Java 之路 (十) -- 内部类(概念、分类、特性、意义、"多重继承"、继承)
1. 内部类基础1.1 什么是内部类内部类的定义如下:可以将一个类的定义放在另一个类的定义内部,这就是内部类更具体一点,对于编程思想而言:内部类允许将逻辑相关的类组织在一起,并控制位于内部的类的可视性。内部类就像是一种代码隐藏机制:将类置于其他类的内部,它了解外围类,能与之通信1.2 内部类的分类内部类分为以下四类:成员内部类:最最普通的内部类,...
2018-08-11 10:32:52
331
原创 Java 之路 (九) -- 接口(抽象类方法、接口、多重继承、接口与解耦等)
我们前面学过通过“隐藏实现”可以将接口与实现分离,然而它仅仅作为基础,而本章的接口以及下一章的内部类 为我们提供了一种将接口和实现分离的更加结构化的方法。话不多说,进入正题。1. 抽象类和抽象方法 抽象类是普通的类与接口之间的一种中庸之道。1.1 什么是抽象类/方法抽象方法定义:指的是一些只有方法声明,而没有具体方法体的方法。声明语法:通过 abstr...
2018-08-09 18:48:32
646
原创 Java 之路 (八) -- 多态(向上转型、多态、绑定、构造器与多态、再再谈初始化和类的加载、协变返回类型、向下转型)
多态 是继 数据抽象 和 继承 之后的第三种基本特征。 多态也称作动态绑定、后期绑定或运行时绑定。 多态的一些具象表现。 允许不同类的对象对同一消息做出响应 同一个行为具有多个不同表现形式或形态的能力 只有在运行时才会知道引用变量所指向的具体实例对象 封装:通过合并特征和行为创建新的数据类型。 实现隐藏:通过将细节私有化,把接口和实现分离开来 多态...
2018-08-09 00:12:01
356
原创 Java 之路 (七) -- 复用类(组合、继承、代理、向上转型、final、再谈初始化和类的加载、方法覆盖)
学习内容两种代码复用机制 - 组合 &amp; 继承 以及中庸之道 - 代理组合 和 继承 如何选择使用如何结合使用向上转型final 关键字1. 组合1.1 组合的概念 在新的类中产生现有类的对象,由于新的类是由现有类的对象所组成,所以这种方法成为组合。1.1.1 组合的写法及样例只需要在当前类中声明另一个类的对象作为其成员变量即可,...
2018-08-08 14:39:24
371
原创 Java 之路 (六) -- 访问权限控制(Package、Public、protected、friendly、private)
这一章内容比较少,也比较基础。不多废话,下面开始这一章的学习吧。学习内容包 package访问权限 public、protected、默认、private1. Package(1) 原因:为了更好的组织类,Java 提供了包机制,用来区别类名的命名空间。(2) 包的作用:利用操作系统的层次化的文件结构,将特定包的 .class 文件都置于一个目录下。...
2018-08-07 19:23:09
1868
原创 Java 之路 (五) -- 初始化和清理(构造器与初始化、方法重载、this、垃圾回收器、枚举类型)
学习内容:构造器方法重载this 关键字垃圾回收器的清理初始化问题枚举类型这一章内容有一点点多,需要注意的地方也很多。下面就开始我的表演了。1. 构造器(1) 概念:一个创建对象时被自动调用的特殊方法。(2) 作用:通过构造器,创建对象,并确保对象得到初始化。(3) 命名:构造器的名称必须与类名相同。(4) 特殊:构造...
2018-08-07 15:31:35
437
原创 Java 之路 (四) -- 控制执行流程
学习内容流程控制语句关键字:if-else、while、do-while、for、return、break、switchJava 使用了 C 中的全部流程控制语句,这一章也属于比较基础的,所以也是基础点到即止,坑点重点强调。1. 条件的判别这部分为这一章的大前提,需要清楚掌握,否则会掉进坑里。(1) 所有条件语句通过条件表达式的真或假来决定执行的路径,我们上一章讲...
2018-08-06 23:52:59
206
原创 Java 之路 (三) -- 操作符
发个牢骚,最近看 《Thinking in Java》,不知道是不是我的错觉,总觉得里面写的知识虽然很循序渐进,但是总是很散乱,对每个知识点没有总结性质的叙述。大概这就是我太菜了吧。 另外,我总是在途中下意识以为,我写这篇文章是给彻头彻尾的小白看的。但是其实不是,我只是记录书中的知识点,学习之余复习罢了。告诫自己,我的初衷是什么。学习内容:操作符的使用 及一些 易错点 (这里...
2018-08-06 21:40:53
252
原创 Java 之路 (二) -- 一切都是对象
本章学习内容Java 程序的基本组成部分核心:理解 Java 中(几乎)一切都是对象。Java 是 混合型语言1. 引用操纵对象Java 中通过操纵对象的 “引用” 来操纵内存中的元素。可以理解为通过遥控器(引用)操纵电视(对象),只要握住遥控器,就能保持和电视的连接。同时通过操控遥控器(引用)来简介操控电视(引用)。另外,即使没有电视,遥控器也可单独存在,也就是说...
2018-08-05 14:56:56
358
原创 Java 之路 (一) -- 对象导论
写在开篇作为计划中的 java 学习系列的第一篇,说一点废话。最开始学习 java 还是在大二下学期学校开的课,然而在那之后并未深入学习,相当多的知识要么遗忘掉了,要么就还是属于一知半解的程度。而自从今年接触 Android 以来,越发的感受到 java 基础的重要性,不只是 API 的熟练程度,最重要的是一些思想总是理解不到位。于是乎,趁现在大四前(秋招前)的最后一个暑假,重新学一下...
2018-08-05 09:58:52
280
原创 LeetCode 高级 - LRU 缓存机制
LRU 缓存机制运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。 写入数据 put(key, value) - 如果密钥不存在,则写入其数据值。当缓存容量达到上限时,它应该在写入新数据...
2018-08-04 15:48:14
2591
原创 Android 开发艺术探索笔记之十二 -- Bitmap 的加载和 Cache
学习内容:如何有效加载 BitmapAndroid 常用的缓存策略 LurChche - 内存缓存DiskLurCache - 存储缓存优化列表的卡顿现象1. Bitmap 的高效加载如何加载图片?四类方法:BitmapFactory.decodeFile / decodeResource / decodeStream / decodeByteArra...
2018-08-04 11:43:40
355
原创 Android 开发艺术探索笔记之八 -- 理解 Window 和 WindowManager
写在最前:本文涉及到源码的部分,查看的是 Android 8.1.0_r33 的源码,部分与原文中代码有出入。附上查看源码的网址:http://androidxref.com/学习内容:Window 和 WindowManagerWindow 的内部工作原理 Window 的添加、更新和删除Actvitiy、Dialog 等类型的 Window 对象的创建过程原...
2018-08-03 21:32:53
469
原创 LeetCode 高级 - 单词拆分 II
单词拆分 II给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中。返回所有这些可能的句子。说明:分隔时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1:输入:s = "catsanddog"wordDict = ["cat", "cats", "and", "san...
2018-08-03 12:46:20
2448
1
原创 LeetCode 高级 - 通配符匹配
通配符匹配给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持 '?' 和 '*' 的通配符匹配。'?' 可以匹配任何单个字符。'*' 可以匹配任意字符串(包括空字符串)。两个字符串完全匹配才算匹配成功。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。示例 1:输入:s = ...
2018-07-30 09:44:02
663
原创 LeetCode 高级 - 分割回文串
分割回文串给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回 s 所有可能的分割方案。示例:输入: "aab"输出:[ ["aa","b"], ["a","a","b"]]分析解题思路就是 DFS,用一个boolean[] 数组记录当
2018-07-27 22:09:24
3291
原创 Android 开发艺术探索笔记之七 -- Android 动画深入分析
写在最前:我之前整理过关于 Android 动画的两篇文章,所以本文更多的只是对之前遗漏的知识点加以补充,重复的部分不再详细描述。附上原本整理的两篇 动画相关 的文章:Android 视图动画(View Animation) 使用详解Android 属性动画(Property Animation) 使用详解欢迎大家提出各种意见!学习内容:View 动画 典型的四种...
2018-07-27 16:40:26
318
原创 LeetCode 高级 - 单词搜索 II
单词搜索 II给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中不允许被重复使用。示例:输入: words = ["oath","pea","eat","rain"] and board ...
2018-07-27 11:32:01
1631
原创 Android 开发艺术探索笔记之一 -- Android 的生命周期和启动模式
学习内容:Activity 的生命周期和启动模式以及 IntentFilter 的匹配规则分析 异常情况下的生命周期Activity 的启动模式以及 Flags隐式启动下的 Intent 匹配Activity 的生命周期全面分析 我的另一篇文章:详解 Android&Fragment 的生命周期 此处只是记录一下缺失的知识点,加以扩充。 建议本...
2018-07-26 23:51:35
373
原创 Android 开发艺术探索笔记之四 -- View 的工作原理
学习内容View 基础概念自定义 ViewView 的底层工作原理 测量流程布局流程绘制流程View 常见回调自定义 View 类型滑动效果初识 ViewRoot 和 DecorView基本概念ViewRoot对应于 ViewRootImpl 类,是连接 Window Manager 和 DecorView 的纽带。view 的三大流程均是通...
2018-07-26 11:56:23
350
原创 LeetCode 高级 - 矩阵中的最长递增路径
矩阵中的最长递增路径给定一个整数矩阵,找出最长递增路径的长度。对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。示例 1:输入: nums = [ [9,9,4], [6,6,8], [2,1,1]] 输出: 4 解释: 最长递增路径为 [1, 2, 6, 9]。示例 2:输入: nums ...
2018-07-25 09:03:36
9170
原创 Android 开发艺术探索笔记之十一 -- Android 的多线程和线程池
学习内容线程基本概念线程的不同形式 AsyncTaskHandlerThreadIntentService线程池基础原文开篇部分主线程主要处理和界面相关的事情,而子线程则往往用于执行耗时操作。线程的多种形态: AsyncTask:底层封装了线程池和 Handler,目的在于方便开发者在子线程中更新 UI。HandlerThread:底层直接使用了线程,它是一个...
2018-07-24 17:16:59
290
原创 Android 开发艺术探索笔记之十 -- Android 的消息机制
学习内容Android 的消息机制Handler 即其底层支撑原文开篇部分:从开发角度来说,Handler 是 Android 消息机制的上层接口,通过它可以将任务切换到 Handler 所在的线程中执行。更新 UI 仅仅是 Handler 的一个特殊的使用场景。本质不是专门用来更新 UI,只是常被用来这么做而已。Andorid 的消息机制主要指 Handler 的运行...
2018-07-23 20:33:38
388
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人