Kafka进阶篇知识点
Kafka高级篇知识点
44个Kafka知识点(基础+进阶+高级)解析如下
由于篇幅有限,小编已将上面介绍的**《Kafka源码解析与实战》、Kafka面试专题解析、复习学习必备44个Kafka知识点(基础+进阶+高级)都整理成册,全部都是PDF文档**
=======================================================================
-
答:是因为如果不这样的话,队列空时的条件是:front == tail,而队列满是的条件还是: front == tail,这样会产生歧义。
-
空出一个位置之后,两者的条件就不会产生歧义了:
-
队列空的条件:front == tail
-
队列满的条件:front == (tail + 1)% N;(N:数组的长度)
-
注意:%N这是循环队列的精髓所在的地方,当tail到尾部没位置的时候,可以将元素添加到前面空闲的位置上。
package Queue;
// 循环队列
public class LoopQueue implements Myqueue {
private E[] data;
private int front, tail;
private int size;
public LoopQueue(int capacity) {
data = (E[])new Object[capacity + 1];
front = 0;
tail = 0;
size = 0;
}
public LoopQueue() {
this(10);
}
// 空闲下来一个位置,防止队列满和队列空的判断条件相同而产生歧义。
public int getCapacity() {
return data.length - 1;
}
@Override
public boolean isEmpty() {
return front == tail;
}
@Override
public int getSize() {
return size;
}
// 入队操作
@Override
public void enqueue(E e) {
// 若队列满了,则扩容两倍
if ((tail + 1) % data.length == front) {
resize(getCapacity() * 2);
}
data[tail] = e;
tail = (tail + 1) % data.length;
size ++ ;
}
// 扩容函数
private void resize(int newCapacity) {
// + 1 是因为要空闲一个位置,所以要 + 1才能装下newCapacity个元素
E[] newData = (E[])new Object[newCapacity + 1];
for (int i = 0; i < size; i ++ ) {
// 将front放到新组的头部
newData[i] = data[(i + front) % data.length];
}
总结
虽然我个人也经常自嘲,十年之后要去成为外卖专员,但实际上依靠自身的努力,是能够减少三十五岁之后的焦虑的,毕竟好的架构师并不多。
架构师,是我们大部分技术人的职业目标,一名好的架构师来源于机遇(公司)、个人努力(吃得苦、肯钻研)、天分(真的热爱)的三者协作的结果,实践+机遇+努力才能助你成为优秀的架构师。
如果你也想成为一名好的架构师,那或许这份Java成长笔记你需要阅读阅读,希望能够对你的职业发展有所帮助。
析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**