目录
Java相关
集合
LinkedHashMap就是HashMap+双向链表:图解LinkedHashMap原理
ConcurrentHashMap就是HashMap+分段锁:ConcurrentHashMap详解
多线程
线程池执行流程:
线程池7大参数:
线程池分类:
FixedThreadPool:只有核心线程并且梳理是固定的,没有非核心线程;
CachedThreadPool:没有核心线程、非核心线程是无界的;
SingleThreadExecutor:只有一个核心线程;
ScheduledThreadPool:一个能实现定时和周期性任务的线程池;
Java并发——Synchronized关键字和锁升级,详细分析偏向锁和轻量级锁的升级
比较synchronized和volatile,它们俩特性上最大的区别就在于原子性,volatile不具备原子性。
锁的分类:
JVM
引用计数 根搜索法
在Java中,可以作为GC Roots的对象主要有以下几种:
①Java栈中的引用的对象。
②本地方法栈中JNI引用的对象。
③方法区中运行时常量池引用的对象。
④方法区中静态属性引用的对象。
⑤运行中的线程
⑥由引导类加载器加载的对象
⑦GC控制的对象
双亲委托模式
Android解析ClassLoader(一)Java中的ClassLoader
类加载器查找Class所采用的是双亲委托模式,所谓双亲委托模式就是首先判断该Class是否已经加载,如果没有则不是自身去查找而是委托给父加载器进行查找,这样依次的进行递归,直到委托到最顶层的Bootstrap ClassLoader,如果Bootstrap ClassLoader找到了该Class,就会直接返回,如果没找到,则继续依次向下查找,如果还没找到则最后会交由自身去查找。
异常相关
Java语言按照错误严重性,从throwale根类衍生出Error和Exception两大派系
Error(错误)
程序在执行过程中所遇到的硬件或操作系统的错误。错误对程序而言是致命的,将导致程序无法运行。常见的错误有内存溢出,jvm虚拟机自身的非正常运行,calss文件没有主方法。程序本生是不能处理错误的,只能依靠外界干预。Error是系统内部的错误,由jvm抛出,交给系统来处理。
Exception(异常)
是程序正常运行中,可以预料的意外情况。比如数据库连接中断,空指针,数组下标越界。异常出现可以导致程序非正常终止,也可以预先检测,被捕获处理掉,使程序继续运行。
注解
反射
数据
其他
java中==和equals和hashCode的区别
基本数据类型的 == 比较的值相等;
类的 == 比较的内存的地址,即是否是同一个对象,在不覆盖equals的情况下,同比较内存地址,原实现也为 == ,如String等重写了equals方法;
hashCode也是Object类的一个方法,返回一个离散的int型整数,在集合类操作中使用,为了提高查询速度。(HashMap,HashSet等比较是否为同一个)
如果两个对象equals,Java运行时环境会认为他们的hashcode一定相等;
如果两个对象不equals,他们的hashcode有可能相等;
如果两个对象hashcode相等,他们不一定equals;
如果两个对象hashcode不相等,他们一定不equals;
设计模式
GoF提出的设计模式总共有23种,根据目的准则分类分为三大类:
创建型模式,共五种:单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
另外随着设计模式的发展也涌现出很多新的设计模式:它们分别是规格模式、对象池模式、雇工模式、黑板模式和空对象模式等。
创建型设计模式:
结构型模式:
行为型模式:
Android相关
Activity
《Android中高级工程师面试指南 — 基础知识 — Activity》
注:Android启动流程
1、bootloader启动内核和init进程;
2、init进程产生守护进程— daemons;
3、init进程启动Zygote进程;
4、Zygote进程初始化第一个VM, 预加载framework和通用资源;
5、init进程启动runtime进程;
6、Zygote进程孵化出System Server;
View
Android View体系(二)实现View滑动的六种方法
Android View体系(四)从源码解析Scroller
Android View体系(五)从源码解析View的事件分发机制
Android View体系(六)从源码解析Activity的构成
Android View体系(七)从源码解析View的measure流程
Android View体系(八)从源码解析View的layout和draw流程
Android View体系(十一)自定义ViewGroup
Android事件分发之ACTION_CANCEL机制及作用
如果一个组件没有接收到DOWN事件,那么一定接收不到MOVE,UP事件;
即时是MOVE和UP事件,在传递给子View之前也是可以通过ViewGroup的onInterceptTouchEvent方法拦截的,如果拦截了,那么该事件就会变成Cancel事件传递给子view;
Android VSYNC (Choreographer)与UI刷新原理分析
requestLayout、invalidate与postInvalidate区别
如果View确定自身不再适合当前区域,比如说它的LayoutParams发生了改变,需要父布局对其进行重新测量、布局、绘制这三个流程,往往使用requestLayout。而invalidate则是刷新当前View,使当前View进行重绘,不会进行测量、布局流程,因此如果View只需要重绘而不需要测量,布局的时候,使用invalidate方法往往比requestLayout方法更高效
Handler机制
Android Handler总结2-子线程中的Handler和HandlerThread的使用
在消息队列获取下一个消息的时候,可能会发生阻塞。主要由两种情况导致:a、消息队列已经没有消息了,这个时候nextPollTimeoutMillis置为-1,当前线程进入无限睡眠等待,直到其他线程有消息放入,并把它唤醒。 b、消息队列头的消息执行时间大于当前时间,那么该线程需要睡眠等待后再执行该消息。进入阻塞前,就会把mBlocked标志位置为true。
而在MessageQueue入队的时候,当发现队列是空的,或者发现入队的消息的执行时间比当前处理的消息执行时间小的时候,就会去判断是否是阻塞的标志位mBlocked是否为true,如果是true表示当前线程处于阻塞状态,就会去把当前线程唤醒。
从Handler.postDelayed来看看Android怎么实现处理延时消息
跨进程通信
Android IPC机制(二)用Messenger进行进程间通信
Android IPC机制(三)在Android Studio中使用AIDL实现跨进程方法调用
Android IPC机制(四)用ContentProvider进行进程间通信
Android IPC机制(五)用Socket实现跨进程聊天程序
Gradle
Android APK打包流程
JetPack
JNI
网络
TCP和UDP
TCP协议是一种面向连接的、可靠的、基于字节流的传输层通信协议。它使用三次握手协议建立连接,并且提供了超时重传机制,具有很高的稳定性。UDP协议则是是一种无连接的协议,且不对传送数据包进行可靠性保证,适合于一次传输少量数据,UDP传输的可靠性由应用层负责。在网络质量令人十分不满意的环境下,UDP协议数据包丢失会比较严重。但是由于UDP的特性:它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多。
HTTPS
HTTP2.0和HTTP1.0的区别:HTTP1.0、HTTP1.1 和 HTTP2.0 的区别
①降低延迟,针对HTTP高延迟的问题,SPDY优雅的采取了多路复用(multiplexing)。多路复用通过多个请求stream共享一个tcp连接的方式,解决了HOL blocking的问题,降低了延迟同时提高了带宽的利用率。
②请求优先级(request prioritization)。多路复用带来一个新的问题是,在连接共享的基础之上有可能会导致关键请求被阻塞。SPDY允许给每个request设置优先级,这样重要的请求就会优先得到响应。比如浏览器加载首页,首页的html内容应该优先展示,之后才是各种静态资源文件,脚本文件等加载,这样可以保证用户能第一时间看到网页内容。
③header压缩。前面提到HTTP1.x的header很多时候都是重复多余的。选择合适的压缩算法可以减小包的大小和数量。
④基于HTTPS的加密协议传输,大大提高了传输数据的可靠性。
⑤服务端推送(server push),采用了SPDY的网页,例如我的网页有一个sytle.css的请求,在客户端收到sytle.css数据的同时,服务端会将sytle.js的文件推送给客户端,当客户端再次尝试获取sytle.js时就可以直接从缓存中获取到,不用再发请求了。
架构
性能优化
算法
适配
Android各个版本API的区别
主要记住一些大版本变化:
android3.0 代号Honeycomb, 引入Fragments, ActionBar,属性动画,硬件加速
android4.0 代号Ice Cream,API14:截图功能,人脸识别,虚拟按键,3D优化驱动
android5.0 代号Lollipop API21:调整桌面图标及部件透明度等
android6.0 代号M Marshmallow API23,软件权限管理,安卓支付,指纹支持,App关联,
android7.0 代号N Preview API24,多窗口支持(不影响Activity生命周期),增加了JIT编译器,引入了新的应用签名方案APK Signature Scheme v2(缩短应用安装时间和更多未授权APK文件更改保护),严格了权限访问
android8.0 代号O API26,取消静态广播注册,限制后台进程调用手机资源,桌面图标自适应
android9.0 代号P API27,加强电池管理,系统界面添加了Home虚拟键,提供人工智能API,支持免打扰模式