摘要:
1. 什么是依赖注入? 在软件设计中,我们会根据不同的职责将代码划分为不同的类。而不同类之间又会相互组合,形成依赖关系。例如在 Android 应用的登录流程时,LoginActivity 依赖于 LoginViewModel,而又依赖于 UserRepository。 —— 引用自 develop 阅读全文
摘要:
一、判断二叉树是否对称 给定一棵二叉树,判断它是否是自身的镜像(即:是否对称)例如:下面这棵二叉树是对称的 1 / \ 2 2 / \ / \3 4 4 3下面这棵二叉树不对称。 1 / \ 2 2 \ \ 3 3备注:希望你可以用递归和迭代两种方法解决这个问题 二、示例 输入:{1,2,2} 输出 阅读全文
摘要:
回文数定义 设n是一任意自然数。若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。 例如,若n=1234321,则称n为一回文数,同理,124421也是回文数。 算法: //是否是回文数 12321 true; 12344 false;1、常见的判断一个数为回文数的算法一般需要把一个 阅读全文
摘要:
题目 假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。 假设数组中不存在重复的元素。算法时间复杂度必须是 O(log 阅读全文
摘要:
kapt 即 Kotlin annotation processing tool(Kotlin 注解处理工具)缩写。 在 Kotlin 中通过 kapt 编译器插件支持注解处理器(参见JSR 269)。 简而言之,你可以在 Kotlin 项目中使用像 Dagger 或者 Data Binding 这 阅读全文
摘要:
一、概念 1、同步:A调用B,B处理直到获得结果,才返回给A。需要调用者一直等待和确认调用结果是否返回,然后继续往下执行。 2、异步:A调用B,无需等待结果,B通过状态通知A或回调函数来处理。调用结果返回时,会以消息或回调的方式通知调用者。 3、阻塞:A调用B,A被挂起直到B返回结果给A,才能继续执 阅读全文
摘要:
1. GIF(87年) 使用无损压缩 8 bit 彩色(256种颜色) 支持单一透明色; 2. JPG(92年): 使用的一种 失真压缩 标准方法 24 bit 彩色,内容比GIF丰富 不支持动画 不支持透明色 JPEG的压缩方式通常是破坏性资料压缩(lossy compression),意即在压缩 阅读全文
摘要:
android开发中肯定用到过Fragment 1 fragmentManager = getSupportFragmentManager(); 2 3 lifeFragment1 = new FragmentLife(); 4 Bundle bundle = new Bundle(); 5 bun 阅读全文
摘要:
Java的泛型大家都知道是类型擦除的方式实现的,“编译器会进行泛型擦除”是一个常识了(实际擦除的是参数和自变量的类型)。“类型擦除” 并非像许多开发者认为的那样,在 <..> 符号内的东西都被擦除了。看下面这段代码: 1 public class ClassTest { 2 public stati 阅读全文
摘要:
Observable 在RxJava1.x中,最熟悉的莫过于Observable这个类了,笔者刚使用RxJava2.x时,创建一个Observable后,顿时是懵逼的。因为我们熟悉的Subscriber居然没影了,取而代之的是ObservableEmitter,俗称发射器。此外,由于没有了Subsc 阅读全文
摘要:
一. Rxjava是什么 Rxjava在GitHub的介绍是 "A library for composing asynchronous and event-based programs using observable sequences for the Java VM"(一个在 JVM上使用可观 阅读全文
摘要:
在使用ViewPager时,Google亲爹为我们提供了多种PagerAdapter。其中,与Fragment相关的是FragmentPagerAdapter和FragmentStatePagerAdapter。对于它们的区别,网上有很多论述。在这里我们主要谈的是,在使用FragmentPagerA 阅读全文
摘要:
转载自:http://www.ishenping.com/ArtInfo/69561.html 1、okhttp工作的大致流程 1.1、整体流程 (1)、当我们通过OkhttpClient创建一个Call,并发起同步或异步请求时;(2)、okhttp会通过Dispatcher对我们所有的RealCa 阅读全文
摘要:
HTTP(HyperText Transfer Protocol),超文本传输协议,是一个基于TCP实现的应用层协议。 报文格式 HTTP1.0的报文有两种类型:请求和相应。其报文格式分别为: 请求报文格式 例如: 响应报文格式 例如: URL的结构 使用HTTP协议访问资源是通过URL(Unifo 阅读全文
摘要:
Cookies以键值的方式记录会话跟踪的内容.服务器利用响应报头Set-Cookie来发送COOKIE信息.在RFC2109中定义的SET-COOKIE响应报头的格式为:Set-Cookie: Name = Value; Comment = value; Domain = value; Max-Ag 阅读全文
摘要:
Transfer-Encoding,是一个 HTTP 头部字段,字面意思是「传输编码」。实际上,HTTP 协议中还有另外一个头部与编码有关:Content-Encoding(内容编码)。Content-Encoding 通常用于对实体内容进行压缩编码,目的是优化传输,例如用 gzip 压缩文本文件, 阅读全文
摘要:
读者好,前面我们在 《Android 架构之网络连接与加速》 和《Android 架构之长连接技术》两篇文章中,讲解了 Http 短连接、TCP 长连接、连接复用与速度优化、数据压缩 等方面的知识点。不过,真实的网络环境是很复杂的,存在各种各样的因素会导致网络服务不可用,比如 DNS 劫持、服务器宕 阅读全文
摘要:
对于热修复无非就是两大类,一类是tencent代表的classloader模式的,另一类是阿里系代表的底层方面替换。 下面以本人的经验介绍下微信的tinker接入: 命令行接入方式; gradle接入方式 1. 核心库引入,在你应用的app模块下build.gradle文件加入 4. proguar 阅读全文
摘要:
在Android项目开发中,项目代码量过大或通过引入很多jar导致代码量急剧增加,会出现错误: 错误出现的原因是 Android设定的方法数是65536个(DEX 64K problem),超过这个方法数,导致dex无法生成,就无法生成APK. 限制原因: 早期的Dalvik VM内部使用short 阅读全文
摘要:
转载自: https://segmentfault.com/a/1190000007032448#articleHeader16 一 前言 本文主要对ES6的Promise进行一些入门级的介绍。要想学习一个知识点,肯定是从三个方面出发,what、why、how。下面就跟着我一步步学习吧~ 二 什么是 阅读全文
摘要:
android实现阴影的方式有很多, 1. Android 在 API21(5.0)添加了 elevation,可以很方便的在 View 上实现阴影。但是这个只在 >= API21 的手机上可以看到阴影效果,低于这个版本的就没有阴影效果。 2. CardView 也可以实现阴影效果,项目中一般都是使 阅读全文
摘要:
一、类签名 LinkedHashMap<K,V>继承自HashMap<K,V>,可知存入的节点key永远是唯一的。可以通过Android的LruCache了解LinkedHashMap用法。 1 public class LinkedHashMap<K,V> 2 extends HashMap<K, 阅读全文
摘要:
同 HashMap 一样,LinkedHashMap 也是对 Map 接口的一种基于链表和哈希表的实现。实际上, LinkedHashMap 是 HashMap 的子类,其扩展了 HashMap 增加了双向链表的实现。相较于 HashMap 的迭代器中混乱的访问顺序,LinkedHashMap 可以 阅读全文
摘要:
二叉树的层次遍历 层次遍历,就是从上到下一层一层的遍历 。其实主要就是要借助一个队列的先进先出,去遍历例如: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 代码实现 阅读全文
摘要:
这是笔者面试阿里时,被问及的一个问题,应该不少人看到这个问题都会一面懵逼。因为,大部分的文章都是分析链表是怎么转换成红黑树的,但是并没有说明为什么当链表长度为8的时候才做转换动作。笔者第一反应也是一样,只能初略的猜测是因为时间和空间的权衡。 要弄明白这个问题,我们首先要明白为什么要转换,这个问题比较 阅读全文
摘要:
AOT,JIT是什么? JIT,即Just-in-time,动态(即时)编译,边运行边编译; AOT,Ahead Of Time,指运行前编译,是两种程序的编译方式 区别 这两种编译方式的主要区别在于是否在“运行时”进行编译 优劣JIT优点: 可以根据当前硬件情况实时编译生成最优机器指令(ps. A 阅读全文
摘要:
一般开发一个 APP,会直接调用系统提供的网络请求接口去服务端请求数据,再针对返回的数据进行一些处理,或者使用AFNetworking/OKHttp这样的网络库,管理好请求线程和队列,再自动做一些数据解析,就结束了。 但对于一些大型 APP,还会想针对网络的一些问题进行进一步优化,包括: 对基于浏览 阅读全文
摘要:
①HashMap的工作原理 HashMap基于hashing原理,我们通过put()和get()方法储存和获取对象。当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,让后找到bucket位置来储存值对象。当获取对象时,通过键对象的equals()方法 阅读全文
摘要:
简介 Nuwa是比较流行的一种Android热补丁方案的开源实现,它的特点是成功率高,实现简单。当然,热补丁的方案目前已经有很多了,AndFix, Dexposed, Tinker等,之所以要分析Nuwa,是因为它代表了一种热修复的思想,通过它可以窥探到很多这方面的知识,包括更进一步的插件化。 Nu 阅读全文
摘要:
APT(Annotation Processing Tool)是java的注解处理技术,它对源代码文件进行检测找出其中的Annotation,根据注解和注解处理器和相应的apt自动生成代码。 Annotation处理器在处理Annotation时可以根据源文件中的Annotation生成额外的源文件 阅读全文
摘要:
一. LruCache基本原理 LRU全称为Least Recently Used,即最近最少使用。由于缓存容量是有限的,当有新的数据需要加入缓存,但缓存的空闲空间不足的时候,如何移除原有的部分数据从而释放空间用来存放新的数据。 LRU算法就是当缓存空间满了的时候,将最近最少使用的数据从缓存空间中删 阅读全文
摘要:
oracle原文地址:https://docs.oracle.com/javase/tutorial/java/generics/erasure.html 在Java中,泛型的引入是为了在编译时提供强类型检查和支持泛型编程。为了实现泛型,Java编译器应用类型擦除实现: 1、 用类型参数(type 阅读全文
摘要:
java Object是所有对象的根父类,所有对象都直接或间接集成自该类。 java 的Object类也比较简单,有equals(Object)、toString()、finalize() java方法和hashcode()、clone()、wait()、notify()、notifyAll()、g 阅读全文
摘要:
一般任务调度机制的实现方式主要有: Thread sleep、Timer、ScheduledExecutor、Handler和其他第三方开源库、android的AlarmManager 1、 Timer java.util.Timer是Java语言本身提供的一种最简单实现任务调度的方法,使用简单,通 阅读全文
摘要:
阿里巴巴对Android热修复技术已经进行了长达多年的探索。 最开始,是手淘基于Xposed进行了改进,产生了针对Android Dalvik虚拟机运行时的Java Method Hook技术,Dexposed。但这个方案由于对底层Dalvik结构过于依赖,最终无法继续兼容Android5.0以后A 阅读全文
摘要:
Android:Broadcast广播类型主要分为5类: 普通广播(Normal Broadcast) 系统广播(System Broadcast) 有序广播(Ordered Broadcast) 粘性广播(Sticky Broadcast) 应用内广播(Local Broadcast)具体说明如下 阅读全文
摘要:
转载自:https://www.jianshu.com/p/c463629afb47?utm_source=oschina-app 和 http://www.yidianzixun.com/article/0LK3x8we 摘要:本文尝试一步步还原HTTPS的设计过程,以理解为什么HTTPS最终会是 阅读全文
摘要:
第11章 Android的线程和线程池 11.1 主线程和子线程 (1)在Java中默认情况下一个进程只有一个线程,也就是主线程,其他线程都是子线程,也叫工作线程。Android中的主线程主要处理和界面相关的事情,而子线程则往往用于执行耗时操作。线程的创建和销毁的开销较大,所以如果一个进程要频繁地创 阅读全文
摘要:
前言 很多项目使用流行的Rxjava2 + Retrofit搭建网络框架,Rxjava现在已经发展到Rxjava2,之前一直都只是再用Rxjava,但从来没有了解下Rxjava的内部实现,接下来一步步来分析Rxjava2的源码,Rxjava2分Observable和Flowable两种(无被压和有被 阅读全文
摘要:
DDMS中自带的Heap工具可以显示出当前堆内存的情况,分配内存、剩余的内存等信息。 首先是进入DDMS,运行应用,在DDMS的左边区域选中应用的包名,然后点击上方的update heap图标。 点击后控制台就会被触发了,但现在控制台可能没有下面的信息,因为只有在GC后控制台才会真正触发。所以可以点 阅读全文