清华硕士通信专业转后端开发,校招收割多个大厂SP/SSP offer,分享下学习历程

简介: 清华硕士通信专业转后端开发,校招收割多个大厂SP/SSP offer,分享下学习历程

背景

学习群里的清华学霸,去年这时候只有Java基础,后面帮他制定了学习路线开始学习,并参加了春季实习,这次秋招收获颇丰,基本都是一线大厂的SP SSP offer,年薪在35-55W,其中新加坡Shopee 年薪+股票 91W RMB.


个人情况

TOP 2 - 985 本硕。本科电子系,硕士通信方向。实验室里基本做的是通信的事情。计算机基础方面,大一时学过一点 C++,更准确地说是 C with classes,研究生阶段学过一点机器学习。

2021年的秋招中,拿到了腾讯 WXG,蚂蚁金服,字节跳动,美团,快手,shopee 新加坡开发岗的 offer,并且基本都是SP/SSP。


岗位选择

研一的时候就打算去互联网公司做技术方面的工作,并一直在开发/算法二者中纠结,毕竟当时正是 AI 行业快速起飞的时候。在知乎上也看过许多相关的帖子,后来考虑到算法越来越卷了,许多非科班的专业都可以转到算法岗,竞争压力大。加上实验室导师不放实习,以及非科班很难出算法顶会文章,最后选择了开发岗位。

事实上,在今年的秋招中,再一次印证了“选择大于努力”这一句话。我身边选择开发的同学,基本都有 BAT 等大厂的 offer。而算法岗位由于 hc 较少,竞争大,内卷极其严重,和开发相比更难拿到大厂 offer。例如,我一个室友面腾讯算法岗位面到三面,才被告知部门里没有 hc 了。

并且, AI 行业也逐年趋于冷静,许多 AI 公司必须让业务落地,实现公司盈利。其次,AI 岗位的薪资也没前几年疯狂了,许多大厂算法岗基本与开发岗同薪了。所以如果没有充分竞争力的情况下,还是建议大家选择相对容易的开发岗位,当然大佬除外。

另外,在 C++/Java 二者的选择中,我选择了需求量更大的 Java。实际上,在校招面试中,面试官并不会在意你的语言。只要选择一种语言并且熟练掌握即可。正式工作中需要什么语言,入职后再进行学习即可。


学习路线

在确定下来走开发岗位后,我参考了许多过来人的学习经验,从 Java 基础学起,接着是 Java 并发,JVM,MySQL,Redis, 最后是 Java 后端生态常用的框架,例如 Spring,Zookeeper,SpringBoot 等等。

另外,计算机网络,操作系统和数据结构与算法也是面试中必考的知识点,需要花功夫去学习。尤其是算法方面,面试的时候都会有在线网页编写代码题的考核,并且会占据面试半数以上的时间,需要着重准备。

算法学习上,简单翻翻《算法(第四版)》后,可以刷几遍《剑指 offer》,这时基本可以应付小厂的面试题了。另外再建议刷完左程云的《程序员代码面试指南:IT 名企算法与数据结构题目最优解(第二版)》,这时大厂的面试算法题基本毫无压力了,笔试也基本能通过了。如果还有空余时间,可以看看 GitHub 上前人总结的 Leetcode 分类习题,我参考的是https://github.com/dingjikerbo/Leetcode-Java 。这个 repo 总结得特别全面,刷完后算法的考核就不再会是面试的难点了。


面试准备

面试时,除了算法题的考核是硬功夫外,80% 以上的知识点都是常考的,也就是大家所说的”八股文“。面试前,可以去牛客网上看看相应公司的面经,或者别人总结成册的面经 pdf 版本。我反复看了几遍 https://github.com/jianghui-galaxy/Interview-Notebook 和峰哥给的 Java 面经后,对常见“八股文”烂熟于心,基础知识的问答基本就稳了。


另外,简历上有项目的话,也会是一个加分项。面试官会对简历上所写的项目进行详细的询问,所以简历上的每一句话都不要乱写,尤其是自己一知半解的东西就不要写到简历上了。

但要注意的是,要精炼地在简历上指出项目的主要亮点,如果是实习期间做的项目的话还可以标明项目收益(例如服务延时减小,ROI 提升,并发量增大等等)等等。

如果没有实习经历的话,也可以参考网上的许多项目教程/视频,自己也做一个,摸清楚项目里主要的难点后,写在简历上。在这里感谢峰哥对我项目进行把关!


春招历程

下面总结下我春招的历程。

字节跳动

  • 一面
  • 算法题:二叉树深度(递归+非递归两种方法)、买卖股票的最佳时机
  • 项目提问
  • 二面
  • 算法题:环形链表、手写快排
  • 项目提问
  • TCP 三次握手、内存分页分段机制、数据库索引、Java 内存管理
  • 三面
  • 算法题:子集
  • 设计题:短链接网址设计

蚂蚁金服

由于蚂蚁金服笔试 A 了1.9道(一共两道),所以一二面没有做算法题。另外蚂蚁是电话面试,在家里吃火锅的时候突然一个电话打来,后来屁颠屁颠收拾了下就去面试了。

  • 一面
  • 项目提问
  • 常见八股文
  • 二面
  • 实验室工作、文章提问
  • 没有问一点 Java 相关的内容,可能是一面答得比较好
  • 三面(交叉面)
  • 算法题:二叉树的右视图
  • 阿里的交叉面应该就是评级 A 必须要走的流程,面试官面得比较水。主要还是问了问实验室做的事情。然后出了道算法题,让我口述下思路。思路没问题后,让我面试完后写一下然后发给他

腾讯

本来实习投的是 WXG,后来 WXG 打电话过来问我愿不愿意去广州实习,实在是太远了就拒绝了。后来简历就被 PCG 老了,面试官说主要做腾讯体育。感觉部门比较一般,一、二面通过后拒绝了后续的面试,准备秋招再战 WXG。腾讯的面试也很硬核,每次面试官都是直接打开 IDE 写题,并且面试 90% 时间都是写算法题…

  • 一面
  • 算法题: 字符串转整数、旋转矩阵、翻转二叉树、手写快排
  • 二面
  • 算法题:编辑距离、 最长不含重复字符的子字符串、rand5 实现 rand7
  • 三面打电话约时间的时候就直接拒了

美团

美团也是提前做过笔试,所以面试时没考算法题

  • 一面
  • 很深入的问了 Java 语言相关特性,包括反射实现原理,Java的 @ 注解等等
  • 由于项目上提到了分布式锁,和面试官深入讨论了下分布式锁…值得提的一点是,我简历上写的用分布式锁来防止缓存击穿,并且在面试前看到过许多相关的技术文章。但面试官说不能,我当时很懵逼,知道面试官说错了,但没有和面试官去争论,而是说“我面试结束后再了解下吧”,就逐渐淡出了这个话题,并转移到新的讨论点上。
  • 二面
  • 面试官又全程没问 Java 相关的东西,一直在问实验室的工作。聊着聊着发现面试官也是通信出生,华为干了几年后到了美团。接着我们聊到股票又聊了很久…

美团技术只有二面,而且 hr 面后意向书拖得特别久…我主动问了一面面试官后,当天晚上 hr 就打电话和我沟通了。

快手

  • 一面
  • 算法题:一道典型的 dfs,链表相交问题(见左程云那本书)
  • 普通八股文
  • 二面
  • 算法题:合并K个升序链表、滑雪场(dfs)
  • 三面
  • 问实验室的工作…

春招只面了上面几家公司,之后选择了在字节跳动实习。

秋招历程

字节跳动

  • 转正答辩
    简单汇报了一下实习做的工作,后来评级比较好,加面了一轮
  • 转正加面
  • 设计题:具体场景有点麻烦,主要的问题是根据已知的概率分布每次随机选择一个/多个数。解决思路是在区间 [0,1) 上,根据已知的概率分布确定每个点的位置,每次在 [0,1) 中随机出一个数,看这个数在哪两个点之间即可。
  • 写了一道简单的 SQL 语句。



image.png


蚂蚁金服

  • 由于春招通过,拿到了秋招终面直通车,只有一轮面试。主要介绍了之前在字节跳动的实习工作。

image.png


腾讯 WXG

一共三轮面试,都非常硬核,每轮基本都两小时。

  • 部门一面
  • 直接发了三道 Leetcode 链接。一道 easy,一道 medium,一道 hard。
  • 详细地问了 TCP、分页分段、Linux、一致性哈希、cookie/session、MySQL、Redis 等内容,每个知识点问得特别深入,问到直到不会为止。。。感觉是秋招最难的一场面试,面完后仍然心有余悸…面试结束后面试官直接通知我通过了一面,进入面委会面试环节,并提醒我做好算法题的准备。
  • 面委一面
  • 第一题:有序数组用最快的方法找到重复数>1000的数字序列,直接秒
  • 第二题:字符串通配符匹配的填空题。开始有点蛋疼,最后想了半天才才写出来
  • 第三题:逆序对,直接秒
  • 第四题:翻转链表,直接秒
  • 第五题:一道偏物理的题目。大概题意是一段路程分成平路和电梯两段,你可以跑 t 秒。问你在电梯上跑划算还是平路上跑划算
  • 一来直接丢给我一份腾讯文档的链接,说他一个小时后再连上来。一共有5道题,最后都做出来了。
  • 面试官过完试卷后没啥问题,再问了问分页分段、数据库索引、Redis 的一些简单问题。
  • 面委二面
  • 也是直接打开 IDE 写题
  • 第一题:设计一个概率分布为 0.1,0.2,0.3,0.4 的算法。类似于字节加面题,由于之前面试中碰到过,直接秒杀。然后面试官问改成每次可以有放回地选两个数呢?在原代码上稍加修改就行了。为了验证代码的正确性,我还打出了概率分布表,符合预期。
  • 第二题:类似荷兰国旗问题,直接秒

image.png


美团/快手

和实习面的内容基本一致,不再详述



image.png


Shopee 新加坡

  • 一面
  • 算法题:Implement a data structure to support two functions add()/search() efficiently
    直接使用 Trie 树,search() 函数给了个 case 是有通配符‘*’的,所以 search 函数编写的时候写个 dfs 就 ok 了
  • 设计题:设计一个图书馆借书系统。
    主要问的是数据库表和 Java 类的设计,首先想了下有什么需求,再根据需求设计表即可
  • 设计题:登录系统设计
    主要说了 cookie/token 方式识别用户,密码 hash 并加盐后存储等等
  • 二面
  • 算法题:Given a string, find out the length of the longest substring which contains at most two distinct characters
    滑动窗口 + HashMap 直接秒,然后面试官问不用 HashMap 怎么做?改写原代码 + debug 后通过
  • 算法题:一个链表,先打印顺序奇数位,再逆序打印偶数位
    直接秒杀。先顺序打印奇数位。用递归栈存储每个偶数位,递归回来后再打印该位置即可。
  • 三面
    简单问了问技术后,面试官介绍了他们的部门,主要是在聊天。

秋招总结

1.重视算法:可以看到,大部分公司校招面试都强调算法题的考核,并且考核的基本都是常见题型。所以在算法上,需要下狠功夫进行准备。另外,还需要对边界条件的处理予以重视。我前后把《剑指offer》刷了三遍,左程云的那本书看了两遍,Leetcode 上也做了 400+ 道题。


2.基础知识:80% 的面试知识点都是常见“八股文”,面试前找一份相应的总结资料,并理解通透即可。


3.尽量找人内推:有一些公司内推可以免除笔试考核,直接进入面试环节,并且可以直接内推到你所感兴趣的部门主管手上。如果没有认识师兄师姐,可以在学校 bbs,牛客网等平台上进行内推信息的查询。


4.春季实习很重要!春季实习很重要!春季实习很重要!有一些公司(例如阿里巴巴)在你春季实习面试通过后,可以拿到秋招绿色直通车,秋招直接参加终面。并且,春季实习面试难度往往低于秋招。另外,春季实习可以及时让你查漏补缺,为秋招做好准备。所以不论导师放不放实习,都建议投递下春招参加面试。


5.写完算法题后,一定要自己写几个测试用例自测一下!如果有错误可以及时发现,没错误的话也可以给面试官留下良好印象。


6.秋招一定要尽早投递,不要等到“完全准备好”后再去投递。一是因为某些岗位 hc 少,越早投递越容易占坑。二是面试永远不存在所谓“完全准备好”的状态,要对自己有信心。


7.面试中一定要与面试官进行沟通,不要一个人一直埋着头写代码。如果你沟通能力不佳,也会被面试官拒掉。


--end--

相关文章
|
17天前
|
存储 缓存 负载均衡
后端开发中的性能优化策略
本文将探讨几种常见的后端性能优化策略,包括代码层面的优化、数据库查询优化、缓存机制的应用以及负载均衡的实现。通过这些方法,开发者可以显著提升系统的响应速度和处理能力,从而提供更好的用户体验。
44 4
|
8天前
|
机器学习/深度学习 前端开发 算法
婚恋交友系统平台 相亲交友平台系统 婚恋交友系统APP 婚恋系统源码 婚恋交友平台开发流程 婚恋交友系统架构设计 婚恋交友系统前端/后端开发 婚恋交友系统匹配推荐算法优化
婚恋交友系统平台通过线上互动帮助单身男女找到合适伴侣,提供用户注册、个人资料填写、匹配推荐、实时聊天、社区互动等功能。开发流程包括需求分析、技术选型、系统架构设计、功能实现、测试优化和上线运维。匹配推荐算法优化是核心,通过用户行为数据分析和机器学习提高匹配准确性。
37 3
|
24天前
|
存储 前端开发 Java
深入理解后端开发:从基础到高级
本文将带你走进后端开发的神秘世界,从基础概念到高级应用,一步步揭示后端开发的全貌。我们将通过代码示例,让你更好地理解和掌握后端开发的核心技能。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供有价值的信息和启示。
|
27天前
|
存储 缓存 监控
后端开发中的缓存机制:深度解析与最佳实践####
本文深入探讨了后端开发中不可或缺的一环——缓存机制,旨在为读者提供一份详尽的指南,涵盖缓存的基本原理、常见类型(如内存缓存、磁盘缓存、分布式缓存等)、主流技术选型(Redis、Memcached、Ehcache等),以及在实际项目中如何根据业务需求设计并实施高效的缓存策略。不同于常规摘要的概述性质,本摘要直接点明文章将围绕“深度解析”与“最佳实践”两大核心展开,既适合初学者构建基础认知框架,也为有经验的开发者提供优化建议与实战技巧。 ####
|
22天前
|
运维 监控 Java
后端开发中的微服务架构实践与挑战####
在数字化转型加速的今天,微服务架构凭借其高度的灵活性、可扩展性和可维护性,成为众多企业后端系统构建的首选方案。本文深入探讨了微服务架构的核心概念、实施步骤、关键技术考量以及面临的主要挑战,旨在为开发者提供一份实用的实践指南。通过案例分析,揭示微服务在实际项目中的应用效果,并针对常见问题提出解决策略,帮助读者更好地理解和应对微服务架构带来的复杂性与机遇。 ####
|
21天前
|
消息中间件 运维 安全
后端开发中的微服务架构实践与挑战####
在数字化转型的浪潮中,微服务架构凭借其高度的灵活性和可扩展性,成为众多企业重构后端系统的首选方案。本文将深入探讨微服务的核心概念、设计原则、关键技术选型及在实际项目实施过程中面临的挑战与解决方案,旨在为开发者提供一套实用的微服务架构落地指南。我们将从理论框架出发,逐步深入至技术细节,最终通过案例分析,揭示如何在复杂业务场景下有效应用微服务,提升系统的整体性能与稳定性。 ####
33 1
|
22天前
|
消息中间件 运维 API
后端开发中的微服务架构实践####
本文深入探讨了微服务架构在后端开发中的应用,从其定义、优势到实际案例分析,全面解析了如何有效实施微服务以提升系统的可维护性、扩展性和灵活性。不同于传统摘要的概述性质,本摘要旨在激发读者对微服务架构深度探索的兴趣,通过提出问题而非直接给出答案的方式,引导读者深入
42 1
|
23天前
|
负载均衡 监控 API
后端开发中的微服务架构实践与挑战
本文深入探讨了微服务架构在后端开发中的应用,分析了其优势和面临的挑战,并通过案例分析提出了相应的解决策略。微服务架构以其高度的可扩展性和灵活性,成为现代软件开发的重要趋势。然而,它同时也带来了服务间通信、数据一致性等问题。通过实际案例的剖析,本文旨在为开发者提供有效的微服务实施指导,以优化系统性能和用户体验。
|
26天前
|
Web App开发 开发框架 JavaScript
深入浅出Node.js后端开发
本文将带你领略Node.js的魅力,从基础概念到实践应用,一步步深入理解并掌握Node.js在后端开发中的运用。我们将通过实例学习如何搭建一个基本的Web服务,探讨Node.js的事件驱动和非阻塞I/O模型,以及如何利用其强大的生态系统进行高效的后端开发。无论你是前端开发者还是后端新手,这篇文章都会为你打开一扇通往全栈开发的大门。
|
25天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
本文将带领读者从零基础开始,一步步深入到Node.js后端开发的精髓。我们将通过通俗易懂的语言和实际代码示例,探索Node.js的强大功能及其在现代Web开发中的应用。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的见解和技巧,让你的后端开发技能更上一层楼。