腾讯电商小鹅拼拼一面

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.给定一个字符串数组,从中找几个元素,拼接成一个无重复字符的字符串,求最大长度。

leetcode https://leetcode-cn.com/problems/maximum-length-of-a-concatenated-string-with-unique-characters/

#Java开发##腾讯##面试题目#
全部评论
🤣写的太好,在?送个offer!!!
点赞
送花
回复
分享
发布于 2022-01-16 11:57

相关推荐

2 8 评论
分享
牛客网
牛客企业服务