HashMap
1、存储过程1、HashMap<String,Integer> hm = new HashMap<>();当创建HashMap集合对象的时候,JDK8前,构造方法中创建一个一个长度是16的Entry[] table 用来存储键值对数据的。在JDK8之后不是在HashMap的构造方法底层创建数组了,是在第一次调用put方法时创建数组,Node[] table 用来存储键值对数据的。2、假设向哈希表中存储柳岩-18数据,根据柳岩调用String类中重写之后的hashCode()方法计算出值,然后结合数组长度采用某种算法计算出向Node数组中存储数据的空间的索引值,如果计算出的索引空间没有数据,则直接将柳岩-18存储到数组中面试题:哈希表底层采用何种算法计算hash值?还有哪些算法可以计算出hash值|底层采用的key的hashCode()方法的值结合数组长度进行无符号右移(>>>)、按位异或(^)、按位与(&)计算出索引。还可以采用:平方取中法、取余法、伪随机数法。3、向哈希表中存储数据刘德华-40,假设刘德华计算出的hashC ...
布隆过滤器
布隆过滤器布隆过滤器主要是为了解决海量数据的存在性问题
1、布隆过滤器的原理当一个元素加入布隆过滤器中的时候,会进行如下操作:
使用布隆过滤器中的哈希函数对元素值进行计算,得到哈希值(有几个哈希函数得到几个哈希值)。
根据得到的哈希值,在位数组中把对应下标的值置为 1。
当我们需要判断一个元素是否存在于布隆过滤器的时候,会进行如下操作
对给定元素再次进行相同的哈希计算;
得到值之后判断位数组中的每个元素是否都为 1,如果值都为 1,那么说明这个值在布隆过滤器中,如果存在一个值不为 1,说明该元素不在布隆过滤器中。
如图所示,当字符串存储要加入到布隆过滤器中时,该字符串首先由多个哈希函数生成不同的哈希值,然后将对应的位数组的下标设置为 1(当位数组初始化时,所有位置均为 0)。当第二次存储相同字符串时,因为先前的对应位置已设置为 1,所以很容易知道此值已经存在(去重非常方便)。
如果我们需要判断某个字符串是否在布隆过滤器中时,只需要对给定字符串再次进行相同的哈希计算,得到值之后判断位数组中的每个元素是否都为 1,如果值都为 1,那么说明这个值在布隆过滤器中,如果存在一 ...
HTTP1.0、HTTP2.0、HTTP3.0的区别
HTTP1.0、HTTP2.0、HTTP3.0的区别1、HTTP1.0和HTTP1.1的区别
连接方式:HTTP/1.0 为短连接,HTTP/1.1 支持长连接。
状态响应码 : HTTP/1.1 中新加入了大量的状态码,光是错误响应状态码就新增了 24 种。比如说,100 (Continue)——在请求大资源前的预热请求,206 (Partial Content)——范围请求的标识码,409 (Conflict)——请求与当前资源的规定冲突,410 (Gone)——资源已被永久转移,而且没有任何已知的转发地址。—
著作权归JavaGuide(javaguide.cn)所有 基于MIT协议 原文链接:https://javaguide.cn/cs-basics/network/other-network-questions.html
缓存机制 : 在 HTTP/1.0 中主要使用 Header 里的 If-Modified-Since,Expires 来做为缓存判断的标准,HTTP/1.1 则引入了更多的缓存控制策略 ...
OkHttp 配置
OkHttp 配置1、下载依赖在build.gradle的文件里面添加依赖
implementation("com.squareup.okhttp3:okhttp:3.10.0")
2、在清单文件中做网络的配置 <!-- 是为了可以访问网络 -->
<uses-permission android:name="android.permission.INTERNET" />
3、在xml文件夹下面创建network_security_config.xml写入一下文件
<?xml version="1.0" encoding="utf-8"?>
<network-security-config xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 禁用流量明文检查-->
<base-config clea ...
负载均衡
负载均衡1、 什么是负载均衡负载均衡的主要作用是为多个后端服务提供负载均衡功能,依据不同的负载均衡算法让这些服务可以分摊流量。负载均衡的历史非常悠久,从演进路径上看大致可以分为以下这几个阶段:
第一阶段:这一阶段的负载均衡通常由硬件设备组成,具有高性能、高可靠性的特点,但灵活性较差,价格昂贵。比较典型的是 F5 这种基于硬件的负载均衡。
第二阶段:负载均衡开始以软件形式实现,使其更加灵活和可扩展,通常以软件分发的形式出现,因此价格也比较低廉,比如 LVS 就属于这一类。
第三阶段:随着云计算技术的兴起,负载均衡也开始有了云版本,这个版本的负载均衡其中一个好处是可以帮助企业以更低的成本获得高性能的负载均衡服务,另一个好处是它能够利用云计算的可扩展性和弹性的特点来提高整体可用性。例如 AWS 的 Classic Load Balancer、Application Load Balancer、Network Load Balancer 等。
负载均衡除了用于分摊流量、提高网络的伸缩性外,还可以用于提升网络安全。比如可以将内网服务器与外网进行隔离,防止互联网的恶意攻击和访问。一个简单的使用 ...
消息机制全解析Handler
消息机制全解析Handler1、什么是Handler消息传递机制1.1 Handler的组成Handler消息传递机制,从名字看就可以联想到是Handler会发送出一个一个消息,同时系统会根据每一个不同的消息进行不同的处理流程。具体如何实现,直接上图。
图片来自参考目录1。
Handler由3个模块组成,Handler、MessageQueue、Looper:
Handler:主要作用是发送信息以及处理信息(为何发送还自己处理?),其中发送的信息叫作Message,可以传递数据哦;
MessageQueue:消息队列,由一个一个Message汇成,遵循先进先出规则,由Looper进行管理;
Looper:从MessageQueue里读取消息,并按消息分发机制分配到目标Handler进行消息处理。
1.2 Handler的使用和代码实例结合1.1小节,简述下完整的流程:
Handler通过sendMessage()发送消息Message,每个Message都在MessageQueue里排队。
Looper通过loop()从MessageQueue里读取Message,并按消息分 ...
Activity
Activity1、生命周期onCreate() -> onStart() -> onReume()->onPouse()->onStop()-> onDestroy()
打开新的activity:onCreate() -> onStart() -> onReume()
Activity A -> Activity B : onPouse()->onStop()->onCreate() -> onStart() -> onReume()
返回到Activity A: OnRestart()->onStart->onResume()
按back按键回退Activity时,onPause()->onStop()->onDestroy()
2、切换横竖屏时,生命周期的变化2.1 正常情况onPause()->onSaveInstanceState()->onStop()->onDestroy()->onCreate() -> onStart()->onSt ...
ContentProvider内容提供者
ContentProvider内容提供者
1、 什么是内容提供者之前有说过可以用Intent在组件中传递数据,那么其数据的大小是否有限制呢?很明显是有限制的,Intent传递数据大小的限制大概在1M左右,超过这个限制就会静默崩溃。因此我们就可以通过ContentProvider进行进程间的数据传递,也就是ContentProvider是一种进程间的数据传递的方式。 一般来说,Android数据存储的方式有:文件,数据库,网络,SharePreferences,ContentProvider。 上图是网上找到的一个图片,然而从图上可以明显的知道,ContentProvider更准确来说只是一个中间者的身份,真正存储数据的是数据库和文件等形式,这一点要分清楚!
2、ContentProvider 使用方法2.1 ContentResolver和url介绍ContentProvider的使用,就需要先了解ContentResolver和url。 url相信很多读者都知道是统一资源标识符。ContentProvider使用表的形式来组织数据,无论数据的来源是什么,ConentProvide ...
Broadcast广播机制
Broadcast广播机制1、注册方式1.1 静态注册使用清单文件进行注册
在AndroidManifest.xml清单文件里直接声明的方式叫做静态注册。
<receiver
//此广播接收者类是mXRReceiver
android:name=".mXRReceiver" >
//用于系统启动完成时,接收系统发送的广播
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<receiver
android:enabled=["true" | "false"]
//此broadcastReceiver能否接收其他App的发出的广播
//默认值是由receiver中有无intent-filter决定的:如果有in ...