标签 消费者 下的文章

Kafka 介绍与实践


一.Kafka基础

1.1 实践内容

本文将介绍 Kafka 及实现原理,然后完整搭建,demo演示。

1.2 项目来源

参考资料: http://kafka.apache.org/documentation.html

1.3. 实践知识点

生产者/消费者模型
单机/集群的区别
设计原理

1.4 实验环境

Hadoop 2.6.1
kafka_2.10-0.8.1.1
Xfce 终端

1.5 适合人群

本文属于中等难度级别,适合具有 hadoop 基础的用户,如果对分布式文件系统了解能够更好的上手。


校招面试知识总结(一)


一、40个Java集合面试问题

1.Java集合框架是什么?说出一些集合框架的优点?

每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector、Stack、HashTable和Array。随着集合的广泛使用,Java1.2提出了囊括所有集合接口、实现和算法的集合框架。在保证线程安全的情况下使用泛型和并发集合类,Java已经经历了很久。它还包括在Java并发包中,阻塞接口以及它们的实现。

集合框架的部分优点如下:

(1)使用核心集合类降低开发成本,而非实现我们自己的集合类。

(2)随着使用经过严格测试的集合框架类,代码质量会得到提高。

(3)通过使用JDK附带的集合类,可以降低代码维护成本。

(4)复用性和可操作性。

2.集合框架中的泛型有什么优点?

Java1.5引入了泛型,所有的集合接口和实现都大量地使用它。泛型允许我们为集合提供一个可以容纳的对象类型,因此,如果你添加其它类型的任何元素,它会在编译时报错。这避免了在运行时出现ClassCastException,因为你将会在编译时得到报错信息。泛型也使得代码整洁,我们不需要使用显式转换和instanceOf操作符。它也给运行时带来好处,因为不会产生类型检查的字节码指令。

3.Java集合框架的基础接口有哪些?

Collection为集合层级的根接口。一个集合代表一组对象,这些对象即为它的元素。Java平台不提供这个接口任何直接的实现。

Set是一个不能包含重复元素的集合。这个接口对数学集合抽象进行建模,被用来代表集合,就如一副牌。

List是一个有序集合,可以包含重复元素。你可以通过它的索引来访问任何元素。List更像长度动态变换的数组。

Map是一个将key映射到value的对象.一个Map不能包含重复的key:每个key最多只能映射一个value。

一些其它的接口有Queue、Dequeue、SortedSet、SortedMap和ListIterator。


操作系统基础知识(三)--生产者消费者模型


生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题,主要解决的是两者速率不一致而产生的阻抗不匹配。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。
一、PV原语
1.一个生产者,一个消费者,一个缓冲区。

问题关键:只有生产了产品,消费者才能消费(同步)

其中包含的有2个同步条件:

只有当缓冲区是空的情况下,生产者才能往缓冲区写数据
只有当缓冲区是满的情况下,消费者才能往缓冲区读数据
所以要定义2个同步信号量: empty--表示缓冲区是否为空,初值为1.
full--表示缓冲区中是否为满,初值为0

生产者进程

while(true){
   produce();
   P(empty);
   toBuffer();
   V(full);
}

消费者进程

while(true){
    P(full);
    getBuffer();
    V(empty);
    consume();
}

2.一个生产者,一个消费者,N个环形缓冲区

定义2个同步信号量:
empty--表示缓冲区是否为空,初值为n
full--表示缓冲区是否为满,初值为0
设缓冲区的编号为1~n-1,定义2个指针in和out,分别是生产者进程和消费者进程使用的指针,指向下一个可用的缓冲区。

生产者进程

while(true){
  produce();
  P(empty);
  toBuffer(in);
  in = (in + 1) mod n;
  V(full);
}

消费者进程

while(true){
  P(full);
  getBuffer(out);
  out=(out+1) mode n;
  V(empty);
  consume();
}

3.一组生产者,一组消费者,N个环形缓冲区

问题关键:生产者生产了产品,消费者才能消费;生产者之间不能往同一个缓冲区写数据;消费者也不能从同一个缓冲区读数据;

同步关系

只有当缓冲区是空的情况下,生产者才能往缓冲区写数据
只有当缓冲区是满的情况下,消费者才能往缓冲区读数据
互斥关系:

生产者往一个缓冲区写数据了,另外一个生产者不能往该缓冲区写数据
消费者往一个缓冲区读数据了,另外一个生产者不能往该缓冲区读数据
所以定义4个信号量:(几种关系,几个信号量)

empty--表示缓冲区是否为空,初值为N
full--表示缓冲区是否为满,初值为0
mutex1--生产者之间的互斥信号量,初值为1
mutex2--消费者之间的互斥信号量,初值为1
该缓冲区的编号为1~n-1,定义两个指针in和out,分别是生产者进程和消费者进程使用的指针

生产者进程

while(true){
  produce();
  P(empty);
  P(mutex1);
  tobuffer(in);
  in = (in + 1) mod n;
  V(mutex1);
  V(full);
}

消费者进程

while(true){
  P(full);
  P(mutex2);
  getBuffer(out);
  out = (out + 1) mod n;
  V(mutex2);
  V(empty);
}

实际上互斥还是同步,虽然有以上2种方式实现,但其根本还是原语的原子性。


bst g22 jinniu lilai opebet orange88 vinbet xbet yuebo zunlong shijiebei bet007 hg0088 ju111 letiantang m88 mayaba qg777 qianyiguoji sbf777 tengbohui tlc ule weilianxier waiweitouzhu xingfayule xinhaotiandi yinheyule youfayule zhongying 2018shijiebei w88 18luck 188bet beplay manbet 12bet 95zz shenbo weide1946 ca88 88bifa aomenxinpujing betway bodog bt365 bwin tongbao vwin weinisiren 88jt fenghuangyule hongyunguoji 918botiantang huanyayule jianada28 jixiangfang libo long8 hongzuyishi zuqiutouzhu