腾讯电商小鹅拼拼一面
1.换索引为什么能提高性能,跟锁有关系么?
索引从roomid+appid改为roomid+uid。区分度更高了,扫描的数据更少,效率更高。
2.kafka高性能的原理。项目中积压是业务原因,不是kafka自身的原因。
服务端顺序写入,追加,不可修改。
服务端mmap,二分查找数据(索引文件和数据文件,一个partition为一个目录,分为多个段)。
生产者批量写入。写线程和io线程。压缩发送
多分区,均摊写入压力到不同机器。
消费时零拷贝。从磁盘直接拷贝到网卡缓冲区,无需先读取到用户态内存,又将用户态内存拷贝到socket缓冲区。从四次拷贝减少为两次拷贝。减少了一次系统调用。sendfile。
3.kafka如何找到某条消息?重新消费怎么实现。索引和数据分离。
找到partition,二分查找。每个partition是一个文件夹,分段,每个段有日志文件(消息)和索引文件,文件名包含baseoffset。索引是稀疏索引,只对部分消息添加索引,结构为offset及对应的消息位置。查找时先找到对应在哪个段上,然后在对应的段上的索引文件进行二分查找,找到对应的消息偏移,最后从消息偏移开始遍历日志文件,找到对应得消息。(key+value)
更改zk中的消费位置。
4.kafka如何保证有序,包括写入有序和消费有序。
通过生产者进行写入。连接池。一致性哈希。
rebalances,会从broker服务端选一台作为groupCorordinator,由该机器对zk进行watch。该组的消费者向该机器发送心跳。如果心跳断开,或者有新消费机器加入/移除,则触发rebalance。把分区分配算法交黑groupLeader(某台消费者,由coordinator进行指定)
5.JAVA并行流的原理。有用过异步框架么
disruptor?
6.给定一个字符串数组,从中找几个元素,拼接成一个无重复字符的字符串,求最大长度。
#Java开发##腾讯##面试题目#leetcode https://leetcode-cn.com/problems/maximum-length-of-a-concatenated-string-with-unique-characters/