什么是LRU缓存?
LRU缓存(Least Recently Used)是一种常用的缓存淘汰算法,它根据数据的使用时间来决定哪些数据需要被移除。这种算法假设最近使用的数据会在未来一段时间内继续被使用,而很久没有使用的数据则可能在未来很长时间内不会被使用。
实现
LRU淘汰机制的基本原理是,当缓存已满,需要插入新的数据时,它会选择最近最少使用的数据进行移除,从...
序列化框架Avro的使用
介绍
Avro是Hadoop的⼀个⼦项⽬,由Hadoop的创始⼈Doug Cutting(也是Lucene,Nutch等项⽬的创始⼈)牵头开发。Avro是⼀个数据序列化系统,设计⽤于⽀持⼤批量数据交换的应⽤。它的主要特点有:⾃描述;紧凑的序列化格式;压缩⽀持;动态模式解析;跨语⾔⽀持;⾼效的序列化.Avro是⼀种灵活和⾼效的序列化解...
概述
Zookeeper是⼀个开源的分布式的,为分布式应⽤提供协调的Apache项⽬。
⼯作机制
Zookeeper从设计模式⻆度来理解:是⼀个基于观察者模式设计的分布式服务管理框架,它负责存储和管理⼤家都关⼼的数据,然后接受观察者的注册,⼀旦这些数据的状态发⽣变化,Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应
...
背包问题
对于背包问题,我们需要使用动态规划的思想来解决问题。
例如一个问题, 选择n个物品重量w不超过n的最大价值v
首先是集合表示,可以表示为前 i 个物品 不超过 j 的重量的集合
集合的属性:最大/最小值
状态的计算: 对于[i,j] 我们需要对此进行一个集合的划分
一般来说,取最后一部进行划分:
以01 背包为栗:每个物品 选择和不选 , 划分为...
ThreadLocal存储数据是使用ThreadLocalMap来存的,ThreadLocalMap基于Entry[]实现,存储数据时,本身ThreadLocal作为key来存取value数据。
key内存泄露:
ThreadLocal对象本事就是一个强引用,当方法弹栈后,因为线程池中线程还在,对ThreadLocal引用的Key还在,这会导致这个Threa...
创建 - 线程创建,分配地址
runnable - 就绪和运行统称Runnable
阻塞block - 没有拿到资源,synchronize等待
等待waiting - 挂起线程池,或者wait(),需要手动唤醒
time waiting - sleep(1000)睡眠的状态,到时间自动唤醒
终止terminated - 结束
public enum ...
使用docker部署
部署elasticsearch
# 拉取镜像
docker pull elasticsearch
# 创建容器
docker run --name es -p 9200:9200 \
-p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64...
多线程
并发和并行
并发
并行
在同一时刻,有多个指令在多个cpu同时执行
多线程三种实现方式对比
线程常用的方法
优先级
java默认使用的线程调度是抢占式调度,是一种随机的形式,对此我们可以为一个线程设计优先级,默认值是5.
优先级越高,抢占到的cpu越大。
守护线程
当非守护线程运行结束之后,守护线程就会陆续结束。
应用场景: 比如 在聊天窗口...
给你一个整数数组 nums 和一个整数 k ,请你返回数对 (i, j) 的数目,满足 i < j 且 |nums[i] - nums[j]| == k 。
|x| 的值定义为:
如果 x >= 0 ,那么值为 x 。
如果 x < 0 ,那么值为 -x 。
1 <= nums.length,k <= 100000,数组中每...
一、Java基础 44 道
解释下什么是面向对象?面向对象和面向过程的区别?
面向对象的三大特性?分别解释下?
JDK、JRE、JVM 三者之间的关系?
重载和重写的区别?
Java 中是否可以重写一个 private 或者 static 方法?
构造方法有哪些特性?
在 Java 中定义一个不做事且没有参数的构造方法有什么作用?
Java 中创建对象的几...