二战腾讯倒在三面:我意识到自己与一线大厂程序员的差距

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: 简单说一下吧,本人疫情还没开始时面试过一次鹅厂,在MySQL、redis这方面惨败,经过半年的沉淀,加上对MySQL,redis和分布式这块的补齐,终于重拾面试信心,再次出征。二战腾讯面试职位:go后端开发工程师,接受从Java转语言。都知道腾讯是cpp的主战场,而以cpp为背景的工程师大都对os,network这块要求特别高,不像是Java这种偏重业务层的语言。之前面试Java的公司侧重还是在数据结构、网络、框架、数据库和分布式。所以OS这块吃的亏比大。

简单说一下吧,本人疫情还没开始时面试过一次鹅厂,在MySQL、redis这方面惨败,经过半年的沉淀,加上对MySQL,redis和分布式这块的补齐,终于重拾面试信心,再次出征。

二战腾讯

面试职位:go后端开发工程师,接受从Java转语言。

都知道腾讯是cpp的主战场,而以cpp为背景的工程师大都对os,network这块要求特别高,不像是Java这种偏重业务层的语言。

之前面试Java的公司侧重还是在数据结构、网络、框架、数据库和分布式。所以OS这块吃的亏比大。

一面:基础技术面

电话面试,随便问了些技术问题,最后还问了个LeetCode里面medium级别的算法题,偏简单。大概整理回忆了一下:

  • redis有没有用过,常用的数据结构以及在业务中使用的场景。
  • redis的hash怎么实现的?
  • rehash过程讲一下和JavaHashMap的rehash有什么区别?
  • redis cluster有没有了解过,怎么做到高可用的?
  • 说说redis的持久化机制,为啥不能用redis做专门的持久化数据库存储?
  • 了不了解tcp/udp,说下两者的定义,tcp为什么要三次握手和四次挥手?
  • tcp怎么保证有序传输的,讲下tcp的快速重传和拥塞机制
  • 知不知道time_wait状态,这个状态出现在什么地方,有什么用?
  • udp是不可靠的传输,如果你来设计一个基于udp差不多可靠的算法,怎么设计?
  • http与https有啥区别?说下https解决了什么问题,怎么解决的?说下https的握手过程。
  • 看你项目里面用了etcd,讲解下etcd干什么用的,怎么保证高可用和一致性?
  • 既然你提到了raft算法,讲下raft算法的基本流程?raft算法里面如果出现脑裂怎么处理?
  • 有没有了解过paxos和zookeeper的zab算法,他们之前有啥区别?
  • 你们后端用什么数据库做持久化的?有没有用到分库分表,怎么做的?
  • 索引的常见实现方式有哪些,有哪些区别?
  • MySQL的存储引擎有哪些,有哪些区别?
  • InnoDB使用的是什么方式实现索引,怎么实现的?说下聚簇索引和非聚簇索引的区别?
  • 有没有了解过协程?说下协程和线程的区别?
  • 算法题一个,剑指offer第51题,数组中的重复数字?

大概说下我自己的回答情况,redis这块没啥问题,具体rehash有印象是渐进式的,但是具体原理可能答的有点出入。

tcp的 time_wait 这块答的不是很好,之前没有了解过quic机制的实现,所以问可靠性udp的时候,基本上脑子里就照着tcp的实现在说。

https这块没啥说的,之前项目里面有用到类似的东西,研究的比较清楚了。

raft算法这个因为刚好在刷6.824(才刷到lab2。。。),答的也凑合,不过paxos和zab算法确实不熟悉,直接说不会。

MySQL这块很熟了,包括索引,锁,事务机制以及mvcc等等,没啥说的,都已经补齐了。

协程和线程,主要说了go程和Java线程的区别以及go程的调度模型。面试官提示没有提到线程的有内核态的切换,go程只在用户态调度。

最后一个算法题,首先说使用HashMap来做,说空间复杂度能不能降到O(1),后面想了大概5min才想出来原地置换的思路。

总得来说,答的还行,一面就这么过了。

二面:项目技术面

二面从基础技术考察转移到了项目,主要问了我下面一些问题:

  • 针对自己最熟悉的项目,画出项目的架构图,项目主要的数据表结构。
  • 说说项目中使用到的技术点,项目的总峰值qps,时延。
  • 有没有分析过时延出现的耗时分别出现在什么地方,项目有啥改进的地方没有?
  • 如果请求出现问题没有响应,如何定位问题,说下思路?
  • tcp 粘包问题怎么处理?
  • 然后还问了下缓存更新的模式,以及会出现的问题和应对思路?
  • 除了公司项目之外,业余时间有没有研究过知名项目或做出过贡献?

这一面答的也比较顺利,因为都是围绕项目,自己很熟悉,基本都没有啥问题,除了面试官说项目经验稍弱之外,其余还不错。

三面:综合技术面

这面面的是阵脚大乱,面试官采用刨根问底的方式提问,终究是面试经验不够,导致面试的节奏有点乱。举个例子:

其中有个题:go程和线程有什么区别?

答:起一个go程大概只需要4kb的内存,起一个Java线程需要1.5MB的内存;go程的调度在用户态非常轻量,Java线程的切换成本比较高。

接着问为啥成本比较高?因为Java线程的调度需要在用户态和内核态切换所以成本高?为啥在用户态和内核态之间切换调度成本比较高?我简单说了下内核态和用户态的定义。

接着问,还是没有明白为啥成本高?心里瞬间崩溃,没完没了了呀,OS这块依旧是痛呀,支支吾吾半天放弃了。

后面所有的提问都是这种模式,结果回答的节奏全无,感觉被套路了。大多度都能回答个一二甚至是一二三,但是再往后或者再深入的OS层面就GG了。

后面问了下项目过程中遇到的最大的挑战,以及怎么解决的?

还问了一个问题定位的问题,服务器CPU 100%怎么定位?

可能是由于平时定位业务问题的思维定势,加之处于蒙蔽状态,随口就是:

  • 先查看监控面板看有无突发流量异常
  • 接着查看业务日志是否有异常,针对CPU100%那个时间段,取一个典型业务流程的日志查看
  • 最后才提到使用top命令来监控看是哪个进程占用到100%

果然阵脚大乱,张口就来,捂脸。。。

对这个问题,本来正确的思路应该是先用top定位出问题的进程,再用top定位到出问题的线程,再打印线程堆栈查看运行情况。

这个流程换平时肯定能答出来,但是,但是没有但是。还是得好好总结。

最后问了一个系统设计题目(朋友圈的设计),白板上面画出系统的架构图,主要的表结构和讲解主要的业务流程,如果用户变多流量变大,架构将怎么扩展,怎样应对?

这个答的也有点乱,直接上来自顾自的用了一个通用的架构,感觉毫无亮点。

后面反思应该先定位业务的特点,这个业务明显是读多写少。然后和面试官沟通一期刚开始的方案的用户量,性能要求,单机目标qps是什么等等?

在明确系统的特点和约束之后再来设计,而不是一开始就是用典型互联网的那种通用架构自顾自己搞自己的方案。

当然这都是事后诸葛亮了

面试结果:3天后收到短信,被拒。。。

总结

  1. tcp/udp,http和https还有网络这块(各种网络模型,已经select,poll和epoll)一定要非常熟悉
  2. 一定要有拿的出手的项目经验,而且要能够讲清楚,讲清楚项目中取舍,设计模型和数据表
  3. 分布式要非常熟悉
  4. 常见问题定位一定要有思路
  5. 操作系统,还是操作系统,重要的事情说三遍
  6. 系统设计,思路,思路,思路,一定要思路清晰,一定要总结下系统设计的流程
  7. 一点心得,平时blog和专栏看的再多,如果没有自己的思考不过是过眼云烟,根本不会成为自己的东西,就像内核态和用户态,平常也看过,但是没细想,突然要自己说,还真说不出来,这就很尴尬了。勿以浮沙筑高台,基础这种东西还是需要时间去慢慢打牢,多去思考和总结。
  8. 少吃老干妈拌饭(手动狗头)

分享

虽然失败了,但是生活总要继续,目前打算继续提升自己再战鹅厂,我把自己前段时间在学以及接下来打算学习的资料分享出来,希望大家都能进大厂,毕竟不想进大厂的程序员不是好程序员。

Redis

在用的实战书籍

网络异常,图片无法展示
|

面试前刷的面试题(含答案)

网络异常,图片无法展示
|

网络异常,图片无法展示
|


Mysql

在用的实战书籍(我是两本互相参考着学)

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

面试前刷的面试题(含答案)

网络异常,图片无法展示
|

网络异常,图片无法展示
|

分布式

在用的实战书籍

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

算法

在用的实战书籍(左神算法书)

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

面试题及答案(部分)

网络异常,图片无法展示
|

网络异常,图片无法展示
|

操作系统

在用的实战书籍

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络(一般我会结合视频学习)

在用的实战书籍

网络异常,图片无法展示
|

视频资料

网络异常,图片无法展示
|

网络异常,图片无法展示
|

线程

在用的实战书籍

网络异常,图片无法展示
|

视频资料

网络异常,图片无法展示
|

面试题

网络异常,图片无法展示
|

全部一一展示清楚的话篇幅太长,小编已经将所有资料已经打包好了~

网络异常,图片无法展示
|

本文就是愿天堂没有BUG给大家分享的内容,大家有收获的话可以分享下,想学习更多的话可以到微信公众号里找我,我等你哦。


相关文章
|
机器学习/深度学习
大模型训练loss突刺原因和解决办法
【1月更文挑战第19天】大模型训练loss突刺原因和解决办法
2218 1
大模型训练loss突刺原因和解决办法
|
Python
自动迁移百度网盘文件到阿里网盘,告别小水管
自动迁移百度网盘文件到阿里网盘,告别小水管
18001 1
自动迁移百度网盘文件到阿里网盘,告别小水管
|
4月前
|
机器学习/深度学习 数据采集 人工智能
Tongyi DeepResearch的技术报告探秘
引言阿里通义实验室悄悄(其实动静不小)发布了一个叫 Tongyi DeepResearch 的 Agent 项目。它没有开发布会,没请明星站台,甚至没发通稿——但它在 GitHub 上架当天,就登顶了“每日趋势榜”。这速度,比人类发现…
826 2
Tongyi DeepResearch的技术报告探秘
|
10月前
|
机器学习/深度学习 人工智能 算法
模型即产品:万字详解RL驱动的AI Agent模型如何巨震AI行业范式
未来 AI 智能体的发展方向还得是模型本身,而不是工作流(Work Flow)。像 Manus 这样基于「预先编排好的提示词与工具路径」构成的工作流智能体,短期或许表现不错,但长期必然遇到瓶颈。这种「提示驱动」的方式无法扩展,也无法真正处理那些需要长期规划、多步骤推理的复杂任务。下一代真正的LLM智能体,则是通过「强化学习(RL)与推理(Reasoning)的结合」来实现的。
648 10
模型即产品:万字详解RL驱动的AI Agent模型如何巨震AI行业范式
|
10月前
|
机器学习/深度学习 编解码 人工智能
Qwen2.5-VL Technical Report
Qwen2.5-VL是阿里云团队推出的Qwen系列最新旗舰模型,具备显著提升的基础能力和创新功能。它在视觉识别、对象定位、文档解析和长视频理解等方面实现突破,支持精准的边界框/点定位及复杂输入处理。通过技术创新如窗口注意力、动态帧率采样和绝对时间编码,该模型在多模态任务中表现出色,在多个基准测试中超越顶级闭源模型,适用于从边缘AI到高性能计算的广泛场景。
|
JSON 安全 API
如何使用Python开发API接口?
在现代软件开发中,API(应用程序编程接口)用于不同软件组件之间的通信和数据交换,实现系统互操作性。Python因其简单易用和强大功能,成为开发API的热门选择。本文详细介绍了Python开发API的基础知识、优势、实现方式(如Flask和Django框架)、实战示例及注意事项,帮助读者掌握高效、安全的API开发技巧。
2045 3
如何使用Python开发API接口?
|
传感器 监控 JavaScript
千套单片机\stm32毕设课设题目及资料案列-干货分享
为帮助电子工程领域的学习者顺利毕业或掌握更多专业知识,我们精心整理了一系列单片机和STM32相关的题目及资料案例。这些资源覆盖了从毕业设计到课程设计的各个方面,包括但不限于智能小车、温度控制系统、无线通信、智能家居等多个领域。每项设计都配有详细的原理图、仿真图以及完整的文档资料,旨在帮助学生深入理解理论知识的同时,提高实际动手操作能力。无论是初学者还是有一定基础的学生,都能从中找到适合自己的项目进行实践探索。
4174 8
|
自然语言处理 搜索推荐 程序员
因为看不惯Notepad++,国内大佬开源了Notepad--:技术分享与工作学习中的新选择
【8月更文挑战第20天】在编程界,文本编辑器是每一位开发者日常工作中不可或缺的工具。Notepad++,这款曾经风靡一时的文本编辑器,以其强大的功能和简洁的界面赢得了众多程序员的喜爱。然而,近年来,由于其作者的一些不当言论和行为,引发了广泛争议,许多程序员开始寻找替代品。在这样的背景下,国内一位大佬挺身而出,开源了Notepad--,为开发者们带来了一个新的选择。
1693 1
|
Linux Python Windows
在终端怎么升级python
Windows上,使用`Win+R`打开命令行,运行`cmd`,然后用`python -m ensurepip --upgrade`更新pip。通常需从官网下载安装新版本Python。验证版本用`python --version`。 Mac/Linux,打开终端,用`conda update python`(Anaconda/Miniconda环境)或手动下载安装新版本。 验证版本:`python3 --version`或`python --version`。
716 9