- 博客(80)
- 资源 (3)
- 收藏
- 关注
原创 JDK 1.8接口可以写非抽象方法
public interface SourceInterface{ int a = 5; int b = 10; public static int add() { return a + b; } public static void reset() { // do sth } public default int f1() { return a; } p...
2020-11-05 15:13:16
704
原创 Android中bindService的细节之三:多次调用bindService(),为什么onBind()只执行一次?
情况一: App A绑定App B的service,App A多次调用bindService(),而不调用unbindService(),此时App B的service的onBind()只执行一次情况二: App A,App C绑定App B的service,App A和App C各调用一次或多次bindService(),而不调用unbindService(),此时App B的service...
2020-04-19 16:38:27
4107
原创 http1 http2 http 3 区别
HTTP/2 相比于 HTTP/1.1,可以说是大幅度提高了网页的性能,只需要升级到该协议就可以减少很多之前需要做的性能优化工作,当然兼容问题以及如何优雅降级应该是国内还不普遍使用的原因之一。虽然 HTTP/2 提高了网页的性能,但是并不代表它已经是完美的了,HTTP/3 就是为了解决 HTTP/2 所存在的一些问题而被推出来的。一、HTTP/1.1发明以来发生了哪些变化?如果仔细观察...
2020-04-14 13:38:59
3366
原创 Java并发编程:volatile关键字解析
volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来...
2020-04-11 19:19:54
174
转载 三种垃圾回收机制
一、分代复制垃圾回收 不同的对象的生命周期是不一样的。因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率。在Java程序运行的过程中,会产生大量的对象,其中有些对象是与业务信息相关,比如Http请求中的Session对象、线程、Socket连接,这类对象跟业务直接挂钩,因此生命周期比较长。但是还有一些对象,主要是程序运行过程中生成的临时变量,这些对象生命周期会比较短...
2020-04-11 14:30:27
1655
原创 一条最长的短信息多少 Byte
中文 70 (包括标点),英文 160, 160 个字节。无意间看到一个这个题目,觉得有些奇怪,怎么不是140个字节呢,后来查阅后发现有以下博文:众所周知,一条短信是可以输入70个中文字符的。一个字符是2个字节(Byte)。一个字节是8位(bit).所以通用的计量是 一条短信可以输入70*2*8=1120 bit一个ASCII码是7bit(128个字符的标准ASCII...
2020-04-11 14:29:33
794
转载 Java创建线程的四种方式
1.继承Thread类实现多线程 run()为线程类的核心方法,相当于主线程的main方法,是每个线程的入口 a.一个线程调用 两次start()方法将会抛出线程状态异常,也就是的start()只可以被调用一次 b.native生明的方法只有方法名,没有方法体。是本地方法,不是抽象方法,而是调用c语言方法 registerNative()方法包含了所有与线程...
2020-04-11 14:28:09
183
转载 算法的时间复杂度和空间复杂度计算
一、算法的时间复杂度定义 在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度。记作:T(n)=O(f(n))。它表示随问题n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度,简称为时间复杂度。其中,f(n)是问题规模n的某个函数。 这样用大写O...
2020-04-11 11:38:15
426
原创 ThreadLocal 与 Synchronized区别
相同:ThreadLocal和线程同步机制都是为了解决多线程中相同变量的访问冲突问题。不同:Synchronized同步机制采用了“以时间换空间”的方式,仅提供一份变量,让不同的线程排队访问;而ThreadLocal采用了“以空间换时间”的方式,每一个线程都提供了一份变量,因此可以同时访问而互不影响。以时间换空间->即枷锁方式,某个区域代码或变量只有一份节省了内存,但是会形成很多线程等待...
2020-04-11 11:36:32
413
转载 构造函数,set()方法和建造者模式(Builder)
如何实现在Computer 中创建一个静态内部类 Builder,然后将Computer 中的参数都复制到Builder类中。 在Computer中创建一个private的构造函数,参数为Builder类型 在Builder中创建一个public的构造函数,参数为Computer中必填的那些参数,cpu 和ram。 在Builder中创建设置函数,对Computer中那些可选参数进行赋值,返回值为Builder类型的实例 在Builder中创建一个build()方法,在其中构建Computer的
2020-04-11 11:34:43
2468
1
转载 算法的时间与空间复杂度(一看就懂)
算法(Algorithm)是指用来操作数据、解决程序问题的一组方法。对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但在过程中消耗的资源和时间却会有很大的区别。那么我们应该如何去衡量不同算法之间的优劣呢?主要还是从算法所占用的「时间」和「空间」两个维度去考量。 时间维度:是指执行当前算法所消耗的时间,我们通常用「时间复杂度」来描述。 空间维度:是指执行当前算...
2020-04-11 11:32:19
285
转载 intent 传递数据时的大小限制
1. Intent 传递不同大小数据时的问题Activity间通过Intent传递数据的大小限制 – 具体数据博客传 512K 以下的数据的数据可以正常传递。传 512K~1024K 的数据会出错,闪退。传 1024K 以上的数据会报错:TransactionTooLargeException考虑到 Intent 还包括要启动的 Activity 等信息,实际可以传的数据略小于 51...
2020-04-07 17:55:27
1671
转载 LruCache算法
前言我们在对数据进行操作的时候,为了避免流量或者性能的消耗,我们对于一些数据都会进行缓存处理,而对数据的缓存的要点不仅仅只有我们所熟悉的存储缓存和使用缓存,还有删除缓存。对于添加和获取缓存很好理解,那么为什么还要对缓存进行删除呐?原因很简单,因为我们的手机容量是有限的,如果我们拼命的写入缓存,那么终有一天内存会满导致程序奔溃,这显然不是我们想要的结果,于是我们在写入缓存的时候并非无脑写入,而是...
2020-04-07 17:54:10
225
转载 静态代码块,构造代码块,构造函数执行执行顺序
静态代码块:用staitc声明,jvm加载类时执行,仅执行一次构造代码块:类中直接用{}定义,每一次创建对象时执行。执行顺序优先级:静态块,main(),构造块,构造方法。回到顶部构造函数public HelloA(){//构造函数 }关于构造函数,以下几点要注意:1.对象一建立,就会调用与之相应的构造函数,也就是说,不建立对象,构造函数时不会运行的。2.构造...
2020-04-07 16:49:52
209
原创 android的两种启动service方式及混合方式
一、startService1、通过调用startService启动服务的过程:onCreate —》onStartCommand —》onStartstartService 仅用于启动服务,如果Activity需要与Service进行通信,需利用Broadcast。2、而后,多次调用startService,服务会多次执行:onStartCommand —》onStar...
2020-04-07 15:44:39
568
原创 java实现单链表逆置
class LNode 2 { 3 public LNode next; 4 public int data; 5 } 6 /*逆置链表*/ 7 class Nizhi 8 { 9 private static LNode head = new LNode();;10 private static LNode node;11 priva...
2020-04-07 14:54:18
973
转载 Handler中有Loop死循环为什么没有阻塞主线程
Looper 死循环为什么不会导致应用卡死,会消耗大量资源吗?主线程的消息循环机制是什么(死循环如何处理其它事务)?ActivityThread 的动力是什么?(ActivityThread执行Looper的线程是什么)Handler 是如何能够线程切换,发送Message的?(线程间通讯)子线程有哪些更新UI的方法。子线程中Toast,showDialog,的方法。(和子线程...
2020-04-07 14:47:18
964
转载 ANR详解
1.1 何为ANRANR全名Application Not Responding, 也就是"应用无响应". 当操作在一段时间内系统无法处理时, 系统层面会弹出上图那样的ANR对话框.1.2 为什么会产生ANR在Android里, App的响应能力是由Activity Manager和Window Manager系统服务来监控的. 通常在如下两种情况下会弹出ANR对话框:5s内无法响...
2019-02-25 14:03:43
477
转载 APK的编译打包过程
流程图: 我们重点关心的是(1)这个过程的输入是什么?(2)这个过程的输出是什么?(3)这个过程使用了什么工具?至于使用什么参数,可以自己去看对应命令的帮助文件,或者在网上搜索,这不是本文的重点。aapt->aidl -> javac-> dx(dex)-> apkbuilder-> jarsigner-> zipalign 步骤中提到的工具...
2019-02-21 22:30:33
199
转载 JVM DVM ART 联系区别
1、JVM是什么?JVM是Java Virtual MachineJVM本质是软件,是计算机硬件的一层软件抽象,屏蔽了底层实现的差异Java编译的程序会生成JVM字节码,字节码需要通过JVM被翻译成机器指令JVM本质作用是将平台无关的.class内的字节码翻译成平台相关的机器码-实现跨平台2、Dalvik虚拟机(DVM)是什么是android中使用的虚拟机。所有的Android程序...
2019-02-21 21:59:14
717
转载 ThreadLocal的简单使用及实现的原理
ThreadLocal简介ThreadLocal的实例代表了一个线程局部的变量,每条线程都只能看到自己的值,并不会意识到其它的线程中也存在该变量。它采用采用空间来换取时间的方式,解决多线程中相同变量的访问冲突问题。ThreadLocal的简单使用下面的例子中,创建了两个线程,然后线程对各自的局部变量进行递增的操作。每个线程中的局部变量的初始值都是100。ThreadLocal中...
2019-02-21 16:56:43
486
转载 java动态代理实现与原理详细分析
关于Java中的动态代理,我们首先需要了解的是一种常用的设计模式--代理模式,而对于代理,根据创建代理类的时间点,又可以分为静态代理和动态代理。一、代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象...
2018-12-16 18:01:07
175
转载 Volley 分析
通过一个小栗子开始咱们的源码分析RequestQueue queue = Volley.newRequestQueue(this); String url ="http://www.baidu.com"; StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new...
2018-12-16 16:55:23
138
转载 HashMap实现原理及源码分析
哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表,而HashMap的实现原理也常常出现在各类的面试题中,重要性可见一斑。本文会对java集合框架中的对应实现HashMap的实现原理进行讲解,然后会对JDK7的HashMap源码进行分析。目录 一、什么是哈希表 二、Ha...
2018-12-16 16:48:29
169
转载 Android各个版本新特性
Android 8.0 优化通知 通知渠道 通知标志 休眠 通知超时 通知设置 通知清除 自动填充框架 画中画模式:清单中Activity设置android:supportsPictureInPicture 可下载字体:FontRequest XML 中的字体 自动调整 TextView 的大小 自适应图标 颜色管理 Web...
2018-12-16 16:46:42
219
转载 Animation和Animator的区别
Animation框架的支持要比 Animator 早得多,从 Android 发布之日起就一直存在,他主要有以下几个子类,AlphaAnimation(透明度), RotateAnimation(旋转), ScaleAnimation(缩放), TranslateAniamtion(平移), AnimationSet(动画集合) 从名字上,我们就能很清楚的知道 Aniamtion 所支持...
2018-12-16 16:42:02
7597
1
转载 死锁
产生死锁的原因主要是:(1) 因为系统资源不足。(2) 进程运行推进的顺序不合适。(3) 资源分配不当等。如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。产生死锁的四个必要条件:(1) 互斥条件:一个资源每次只能被一个进程使用。(2) 请求与保持条件:一个进程因请求资源而阻...
2018-12-14 08:55:00
180
转载 Android面试题-Handler消息机制(50题)
Handler(17)Handler是什么?消息机制是什么?为什么不能在子线程中访问UI?在子线程中创建Handler报错是为什么?如何在子线程创建Looper? Looper.prepare();为什么通过Handler能实现线程的切换?[☆] Handler.post的逻辑在哪个线程执行的,是由Looper所在线程还是Handler所在线程决定的? 由Loo...
2018-12-13 16:52:15
631
原创 MVC模式和MVP模式的区别
MVC模式: 1. MVC的所有通信都是单向的。 2.view传送指令到controller(用户也可以直接将指令传到controller)。 3.controller完成业务逻辑后要求model改变状态。 4.model将新的数据发送到view,用户得到反馈。MVP模式: MVP模式将Controller改名为Present...
2018-12-11 23:45:03
1421
转载 Android程序入口ActivityThread和Android应用程序启动流程
首先附上ActivityThread.java的main方法: public static void main(String[] args) { Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "ActivityThreadMain"); SamplingProfilerIntegrat...
2018-12-11 23:25:25
581
转载 进程和线程的区别
1、首先是定义进程:是执行中一段程序,即一旦程序被载入到内存中并准备执行,它就是一个进程。进程是表示资源分配的的基本概念,又是调度运行的基本单位,是系统中的并发执行的单位。线程:单个进程中执行中每个任务就是一个线程。线程是进程中执行运算的最小单位。2、一个线程只能属于一个进程,但是一个进程可以拥有多个线程。多线程处理就是允许一个进程中在同一时刻执行多个任务。3、线程是一种轻量级的进...
2018-12-11 22:48:06
120
转载 synchronized 与 Lock 的区别
java中使用锁的两个基本工具是 synchronized 和 Lock。 一直很喜欢synchronized,因为使用它很方便。比如,需要对一个方法进行同步,那么只需在方法的签名添加一个synchronized关键字。 // 未同步的方法public void test() {}// 同步的方法pubilc synchronized void test() {} ...
2018-12-11 22:43:25
109
转载 HTTPS 原理解析
Https在真正请求数据前,先会与服务有几次握手验证,以证明相互的身份,以下图为例 2.1 验证流程 注:文中所写的序号与图不对应但流程是对应的1 客户端发起一个https的请求,把自身支持的一系列Cipher Suite(密钥算法套件,简称Cipher)发送给服务端2 服务端,接收到客户端所有的Cipher后与自身支持的对比,如果不支持则连接断开,反...
2018-12-11 22:14:57
195
转载 android引用分析
Java/Android中有四种引用类型,分别是:Strong reference - 强引用Soft Reference - 软引用Weak Reference - 弱引用Phantom Reference - 虚引用不同的引用类型有着不同的特性,同时也对应着不同的使用场景。1.Strong reference - 强引用实际编码中最常见的一...
2018-12-09 23:29:26
193
转载 JVM内存分区及用途
ava虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区,这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。Java虚拟机所管理的内存将会包括以下几个运行时数据区域:1、程序计数器2、Java虚拟机栈3、本地方法栈4、Java堆5、方法区下面分别介绍各个内存分区及它们...
2018-12-09 20:12:14
2153
转载 RxJava 详解
假设有这样一个需求:界面上有一个自定义的视图 imageCollectorView ,它的作用是显示多张图片,并能使用 addImage(Bitmap) 方法来任意增加显示的图片。现在需要程序将一个给出的目录数组 File[] folders 中每个目录下的 png 图片都加载出来并显示在 imageCollectorView 中。需要注意的是,由于读取图片的这一过程较为耗时,需要放在后台执行,而...
2018-12-07 22:54:40
168
转载 RxJava2+Retrofit2+OkHttp3的基础、封装和项目中的使用
简单介绍Retrofit、OKHttp和RxJava之间的关系:Retrofit:Retrofit是Square公司开发的一款针对Android 网络请求的框架(底层默认是基于OkHttp 实现)。 OkHttp:也是Square公司的一款开源的网络请求库。 RxJava :"a library for composing asynchronous and event-based prog...
2018-12-07 22:44:57
489
转载 RxBus 使用及原理分析
RxJava目前已经很火了,如果你尚未了解请看这里。对于RxJava这里不多做介绍。RxBus并不是一个库,而是一种模式。相信大多数开发者都使用过EventBus,作为事件总线通信库,如果你的项目已经加入RxJava和EventBus,不妨用RxBus代替EventBus,以减少库的依赖。一、添加RxJava和RxAndroid依赖 //RxJava and RxAndroid...
2018-12-07 22:20:43
547
转载 EventBus与RxBus区别
先介绍一下EventBusEventBus是由greenrobot 组织贡献的一个Android事件发布/订阅轻量级框架。EventBus是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间、组件与后台线程间的通信。比如请求网络,等网络返回时通过Handler或Broadcast通知UI,两个Fragment之间需要通过Listener通信,这些需求...
2018-12-07 18:42:18
1160
转载 Android面试题-okhttp内核剖析
基本使用从使用方法出发,首先是怎么使用,其次是我们使用的功能在内部是如何实现的.建议大家下载 OkHttp 源码之后,跟着本文,过一遍源码。通过小栗子开启今天的源码分析:OkHttpClient client = new OkHttpClient();String run(String url) throws IOException { Request request = ne...
2018-12-07 15:48:44
179
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人