文末有面经共享群

前面已经分享过几篇面试了,这是一篇关于更加面向项目和技术的面经详解,第一次遇见问那么多kafka的问题,看看这个粉丝是怎么回答的。

先来看看 职位描述

岗位职责:

  • 负责基于 Go 的后端服务的设计、开发和维护;
  • 参与系统架构设计,确保系统的高可用性、高性能和可扩展性;
  • 编写高质量、可维护的代码,并进行代码评审;
  • 解决复杂的技术问题,优化系统性能;
  • 与跨职能团队合作,确保项目按时交付;
  • 编写技术文档和开发规范,提升团队整体开发效率;
  • 参与新技术的研究和引入,推动技术创新。

岗位要求:

  1. 计算机科学或相关专业本科及以上学历,思维逻辑清晰;
  2. 5年以上软件开发经验,至少3年Go语言开发经验;
  3. 熟悉 Go 语言的标准库和常用框架,了解 Go 语言的内存管理和并发模型;
  4. 具备微服务架构设计和开发经验,熟悉 gRPC、Protobuf 等技术;
  5. 熟悉常见的数据库(如 MySQL、PostgreSQL)和缓存技术(如 Redis);
  6. 有良好的代码风格和编写高质量单元测试的习惯;
  7. 熟悉 Docker、Kubernetes 等容器技术,具备一定的 DevOps 经验;
  8. 具备较强的分析和解决问题的能力,良好的沟通和团队协作能力;
  9. 有开源项目贡献者或个人技术博客者优先。

加分项:

  • 有 Rust 开发经验,熟悉其他编程语言(如 Python、C++等);
  • 有金融行业交易系统开发经验,如行情报价、交易、风控等。

面试流程

来看看面试的全过程:

  1. 自我介绍

  2. 说一下项目的业务,怎么做的,难点在哪,如何解决?

    • 消息队列:数据倾斜问题,数据不丢,重复消费
    • redis:使用hash以及Pipline,bigkey拆解
    • 数据库:性能优化,分库分表
  3. 数据库优化设置lock_timeout是哪个锁的超时

    数据库优化设置中的 lock_timeout 主要是针对行锁的超时设置。当一个事务在等待获取行锁时,如果超过了 lock_timeout 设置的时间,就会抛出超时错误,避免事务长时间等待而导致系统性能下降。

  4. kafka集群规模

    我们的 Kafka 集群规模为 5 台服务器,能够支持 50 万的并发量。通过合理的配置和优化,我们可以进一步提高 Kafka 集群的性能和并发能力。

  5. kafka为什么支持高并发

    Kafka 支持高并发主要有以下几个原因:

    1. 分区:Kafka 将数据分成多个分区,每个分区可以在不同的服务器上进行存储和处理,从而实现了水平扩展,提高了系统的并发能力。
    2. 零拷贝:Kafka 采用了零拷贝技术,减少了数据在内存中的复制次数,提高了数据的传输效率。
    3. 网络压缩:Kafka 支持网络压缩,可以减少网络传输的数据量,提高系统的性能和并发能力。
  6. 说一下什么是零拷贝

    零拷贝是一种技术,主要通过减少数据在内存中的复制次数来提高数据的传输效率。在 Kafka 中,零拷贝技术主要通过使用 mmap 函数实现。mmap 函数将文件映射到内存中,使得应用程序可以直接访问文件内容,而不需要进行数据的复制。这样可以减少数据在内存中的复制次数,提高数据的传输效率。

  7. 为什么选择kafka

    首先,Kafka 具有很高的并发处理能力,能够满足金融交易系统对高吞吐量的要求。其次,Kafka 的扩容性非常好,可以很容易地增加服务器节点来提高系统的性能。此外,Kafka 天生适合集群部署,并且使用 Java 和 Scala 编写,便于进行问题排查和维护。相比之下,RabbitMQ 的集群部署相对复杂,而且使用 Erlang 语言,对于一些开发人员来说可能不太熟悉,问题排查也比较困难。

  8. Api 网关用来做什么的?

    Api 网关主要用于对第三方调用进行流量限制和安全控制。它可以对请求进行过滤、路由和负载均衡,确保系统的稳定性和安全性。同时,Api 网关还可以提供一些额外的功能,如身份验证、授权、监控和统计等。

  9. 支付模块这块怎么做的

    参与的项目中,支付模块是由其他同事负责开发的。我主要是通过调用支付模块提供的 API 来实现相关业务功能。在调用 API 时,我会确保参数的正确性和安全性,同时对返回结果进行合理的处理和错误处理。

  10. 说一下你们微服务的架构是怎么样的

    我们的系统采用了无服务和微服务的混合架构。这种架构可以充分发挥无服务架构的弹性和高效性,同时又能利用微服务架构的灵活性和可扩展性。在具体实现中,我们将一些通用的功能模块封装成无服务函数,通过事件驱动的方式进行调用。而对于一些复杂的业务模块,则采用微服务架构,进行独立开发和部署。

  11. 差分升级是怎么实现的

    通过对比不同版本的代码,找出差异部分,然后将这些差异部分抽取出来进行计算 MD5 值等操作,以确定是否需要进行升级。在升级过程中,我们会确保数据的完整性和一致性,同时尽量减少对系统的影响。

  12. 编译服务类似CI/CD

    通过修改 Git 命令,实现了类似于 Web Hook 的功能。当有代码提交并打上 tag 时,系统会自动进行 Git clone 操作,然后进行测试和编译。这样可以确保代码的质量和稳定性,同时提高开发效率。

  13. C/C++是开发固件的吧

    是的,我曾经使用 C/C++ 和 Lua 的组合开发过智能网关。不过,由于我这次是应聘后端开发岗位,所以没有将这部分内容写在简历中。

  14. 你很喜欢用redis?

    是的,我非常喜欢使用 Redis。Redis 就像一个数据结构数据库,它提供了丰富的数据结构和操作接口,使用起来非常方便。在项目中,我们使用 Redis 实现了很多业务功能,比如缓存热点数据、实现分布式锁、进行任务队列管理等。

  15. 反问

结尾

大家可以看出来,在这场深入的技术面试中,需要应试者具备强大的技术功底和应对各种挑战的能力。面试官询问的方向好像大多是 Kafka 的高并发处理的问题,不知道这次的面经有没有给你带来哪些学习要点呢?也希望通过分享这位面试者的经历,能给正在求职或致力于技术提升的你带来启发和帮助。

欢迎关注

我们搞了一个免费的面试真题共享群,互通有无,一起刷题进步。

没准能让你能刷到自己意向公司的最新面试题呢。

感兴趣的朋友们可以加我微信:wangzhongyang1993,备注:【博客园】。

好多kafka难题啊,看看其中的化解之道的更多相关文章

  1. DISC社交风格测试题--老虎 孔雀 考拉 猫头鹰

    凭直觉,迅速回答 "我是谁",而不是"我应该是谁,或我想我是谁". 1.关于人生观,我的内心其实是: A 希望能够有尽量多的人生体验,所以会有非常多样化的想法. ...

  2. 基于Kafka Connect框架DataPipeline可以更好地解决哪些企业数据集成难题?

    DataPipeline已经完成了很多优化和提升工作,可以很好地解决当前企业数据集成面临的很多核心难题. 1. 任务的独立性与全局性. 从Kafka设计之初,就遵从从源端到目的的解耦性.下游可以有很多 ...

  3. 【Azure 应用服务】部署Kafka Trigger Function到Azure Function服务中,解决自定义域名解析难题

    问题描述 经过前两篇文章,分别使用VM搭建了Kafka服务,创建了Azure Function项目,并且都在本地运行成功. [Azure Developer]在Azure VM (Windows) 中 ...

  4. 4 亿用户,7W+ 作业调度难题,Bigo 基于 Apache DolphinScheduler 巧化解

    点击上方 蓝字关注我们 ✎ 编 者 按 成立于 2014 年的 Bigo,成立以来就聚焦于在全球范围内提供音视频服务.面对 4 亿多用户,Bigo 大数据团队打造的计算平台基于 Apache Dolp ...

  5. RabbitMQ和Kafka

    转自通九大神的博客 起因 最近公司RabbitMQ的集群出了点问题,然后有些亲就说RabbitMQ慢且不好用,是一个瓶颈,不如换成Kafka.而我本人,使用RabbitMQ有一点久了,认为这个事情应当 ...

  6. 四万字32图,Kafka知识体系保姆级教程宝典

    本文目录: 一.消息队列 Apache Pulsar Pulsar 与 Kafka 对比 二.Kafka基础 三.Kafka架构及组件 四.Kafka集群操作 五.Kafka的JavaAPI操作 六. ...

  7. Spark踩坑记——Spark Streaming+Kafka

    [TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...

  8. Spark Streaming+Kafka

    Spark Streaming+Kafka 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端, ...

  9. Kafka使用入门教程

    转载自http://www.linuxidc.com/Linux/2014-07/104470.htm 介绍 Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了普通消息系统的功能,但具有自 ...

  10. kafka入门教程链接

    http://www.aboutyun.com/forum.php?mod=viewthread&tid=12882 经典入门教程 1.Kafka独特设计在什么地方?2.Kafka如何搭建及创 ...

随机推荐

  1. 2024年,AI驱动测试管理工具会有哪些发展前景呢?

    随着人工智能技术的日新月异,2024年的测试管理工具将迎来全新的发展机遇.AI赋能将助力测试管理工具实现前所未有的智能化升级,为软件研发团队带来革命性的变革. 一.什么是AI? 人工智能(AI)是一种 ...

  2. SpringBoot读取配置文件的几种方式

    示例 user: name: zhaotian age: 18 sex: 男 @Value注解 @Value注解是Spring框架提供的用于注入配置属性值的注解,它可用于类的成员变量.方法参数和构造函 ...

  3. Spring5.X bean自动装配Autowire属性

    属性注入 set方法.构造函数.POJO.list.map.ref,属于手工注入,点我直达 Spring自动注入 使用<bean>元素的autowire属性为一个bean定义指定自动装配模 ...

  4. 解决方案 | Chrome/Edge 总是自动修改我的pdf默认打开方式

    1.问题描述 最近我的pdf文件总是被chrome打开(如图1),而且点击属性,更改别的pdf阅读器也不管用(如图2),此时的chrome就像个流氓软件一样. 图1 被chrome劫持 图2 点击属性 ...

  5. 全网最适合入门的面向对象编程教程:17 类和对象的Python实现-鸭子类型与“file-like object“

    全网最适合入门的面向对象编程教程:17 类和对象的 Python 实现-鸭子类型与"file-like object" 摘要: 本文主要介绍了 Python 中创建自定义类时鸭子类 ...

  6. Python版RNA-seq分析教程:差异表达基因分析

    Bulk RNA-seq 分析的一个重要任务是分析差异表达基因,我们可以用 omicverse包来完成这个任务.对于差异表达分析而言,首先,我们可> 以先将 gene_id 改为 gene_na ...

  7. Pycharm+pytest+allure打造高逼格的测试报告

    环境前置提示:allure是基于Java的一个程序,需要Java1.8的环境,没有安装需要去安装一下. 如果在cmd中能输入java,获取到命令信息则不管,否则需要配置系统变量: 路径:计算机> ...

  8. JAVA并发编程理论基础

    注:本文章是对极客时间<java并发编程实战>学习归纳总结,更多知识点可到原文 java并发编程实战 进行学习.如果侵权,联系删除: 一.并发编程的BUG的源头 1.1 缓存导致的可见性问 ...

  9. 汇编+qemu玩转控制台打印

    有段时间开始对汇编感兴趣,也因此在写各种不同的demo,现在分享之前学习的成果,需要下载的东西有nasm和qemu-system-i386,看看枯燥的汇编能产生多大的能量. 先来复习一下通用寄存器: ...

  10. RPA美团外卖商家中心批量发送消息

    美团外卖商家中心批量发送消息,首先我们需要确定给谁发,发送什么内容 给谁发:可以传入美团用户名.美团订单号.美团将通过此条件进行搜索进入会话框 发送什么内容:批量发送信息给不同的用户,比如给不同的订单 ...