2019.4.25 周四 阴有小雨

今天晚上跟朋友吃了一顿小龙虾和烧烤,然后又看了一把复联四,顺便交流了一波java技术加吹牛,very happy!

周五早上有个去亚信的面试,咨询了在那个部门工作的小伙伴,说用到kalfka和storm.天呐我也有没实际用过,那就随便自学一点点外加背几题面试题吧。

一、kalfka

Apache Kafka® is a distributed streaming platform.

a few concepts:

--Kafka is run as a cluster on one or more servers that can span multiple datacenters.

--The Kafka cluster stores streams of records in categories called topics.

--Each record consists of a key, a value, and a timestamp.

1. 基础

2. 面试题

Kalfa的用途和使用场景?

ISR代表什么?ISR的伸缩又指什么?

HW LEO LSO LW分别代表什么?

Kalfka怎么体现消息顺序性?

分区器、序列化器、拦截器是否了解?它们之间的处理顺序?

生产者客户端的整体结构?

生产者客户端使用了几个线程来处理?分别是什么?

哪些情形会造成重复消费?哪些会造成漏消费?

创建topic时如何选择合适的分区数?可以增加或减少分区数吗?

卡夫卡的幂等和事务分别怎么实现?为啥不支持读写分离?

卡夫卡有啥优缺点?说说和同类产品的比较?

简述kalfka的日志目录结构

kalfka有哪些索引文件

说说对kalfka底层存储的理解

为啥它强依赖zookeeper?

乱入:如何不用递归实现快排?

二、storm

storm是用来作流失处理的,而hadoop是作批处理,两者用处不一样。

三、python复习

1. 数据结构和算法(源于python cookbook第一章中20个专题前五个)

(1)将序列分解为单独的变量

只要对象是可迭代的,就可以执行分解操作,包括字符串、文件、迭代器以及生成器。

>>p = (4,5)

>>x, y = p

>>x

4

>>s = 'Hello'

>>a,b,c,d,e = 'Hello'

>>a

'H'

 (2) 从任意长度的可迭代对象中分解元素

>>record = {'Dave', 'dave@163.com', '1249809', '1233456', '8099999', '9999999'}

>>name, email, *phone_numbers = record

>>name

'Dave'

>>phone_numbers

['1249809', '1233456', '8099999', '9999999']

 (3) 保存最后N个元素(新进入的会挤掉最前面的)

用collections.deque完美解决

>>q  = deque(maxlen=3)

>>q.append(1)

>>q.append(2)

>>q.append(3)

>>q

deque([1,2,3], maxlen=3)

>>q.append(10)

>>q

deque([2,3,10],maxlen=3)

(4) 找到最大或最小的N个元素

使用heapq中nlargest()和nsmallest()

>>nums = [1,8,2,3,25,98]

>>heapq.nlargest(3, nums)

[98,25,8]

(5) 实现优先级队列(稍微有点复杂的)

import heapq
class PriorityQueue:
    def __init__(self):
        self._queue = []
        self._index = 0

    def push(self, item, priority):
        headq.heappush(self._queue, (-priority, self._index, item))
        self._index += 1

    def pop(self):
        return heapq.heappop(self._queue)[-1]

2. 入门回顾(源于Learning Python第一部分)

问题一:为什么要用python, 或者说python的优点

答:(1) 软件质量

python代码的设计致力于可读性,因此比传统脚本语言更具可重用性和可维护性。即使代码并非你所写,Python的一致性也保证了其代码易于理解。此外,Python支持软件开发的高级重用机制OOP。

(2)  提高开发者的效率

Python代码的大小往往只有C++或者Java代码的1/5~1/3。并且python程序可以立即运行,无需传统编译/静态语言所必须的编译链接等步骤,进一步提高了程序员的效率。

(3) 程序的可移植性

(4) 强大丰富的标准库和第三方库

比如但三方库Numpy,使python成为科学计算使用的首选语言之一。

(5) 组件集成

python是胶水语言,可与多种语言混合使用。著名的Tensorflow的核心部分使用C++编写,而用户接口使用python编写。

问题二:python的缺点

答:执行速度慢

3. 复习进阶(源于Beginning Python from Novice to Professional的7、10、14、15章)

(1)检查继承

>>issubclass(Cat, Animal)

True

>>Cat.__bases__

(<class __main__.Animal at 0x17le40>,)

(2) 重要的模块

sys模块(argv, exit([arg]), modules, path, platform, stdin, stdout, stderr)

os模块(environ, system(commond), sep, pathsep, linesep, urandom(n))

(3) socket

一个小型服务器

import socket
s = socket.socket()
host = socket.gethostname()
port = 1234
s.bind((host,port))
s.listen(5)
while True:
    c.addr = s.accept()
    print 'Got connection from', addr
    c.send('Thank you for connection')
    c.close()

一个小型客户机

import socket
s = socket.socket()
host = socket.gethostname()
port = 1234
s.connect((host,port))
print s.recv(1024)
原文地址:https://www.cnblogs.com/jdbc2nju/p/10779717.html