2023届暑假实习回忆录

2022春,这本是一个充满生机而又具有机遇的季节。俗话说,一年之计在于春。而今年春季的春招\实习的场面却异常惨烈,令人记忆犹新。

引言

首先,我为什么突然要准备找实习?这是一个需要思考的问题。在年初时,有人可能会说了,你这实验做的还不错,有机会继续读啊,你突然也要准备找实习是为啥?随后,时间来到了三月,大批公司开启2022届春招,2023届暑期实习。大家伙儿们也都看到了今年的惨烈状态,以至于在知乎随便一搜,就是一篇令人难忘的故事。

看到这儿,有人可能更不解了,今年形势这么难,为啥一个劲想着找实习?直接读博规避就业风险不是更好?进去工作没多少时间被裁了该怎么办?

首先,我也是比较喜欢做一些research,喜欢看别人的paper,并从中寻找一些可以改进和可以做的地方。在短期内我做了大量的实验,来证明我的新工作是有效的,结合ablation study也说明了所设计的模块和网络是有用的。然而,事与愿违。当我在二月份完成几乎所有消融实验和对比实验并开始着手写新工作的paper时,我的导师却让我不投某某会议。而我的文章几乎也是自己改自己看,导师总喜欢喷我的文章写的low,但导师改过的部分也还存在或多或少的语法错误(嘘~)。在实验自己完成,idea自己考虑以及论文自己修改的前提下,组内的设备往往还不够用,导师也不能提出具有建设性的意见。又想到在VALSE交流会上认识的优秀的phD时,我会感到,如果我继续在这里待下去,自己与他们的差距将是巨大的。再者,再过四五年,CV这个领域的发展又会如何?到时计算机行业是否有广阔前景?这些,其实也都是未知数。于是,在3月的ddl前,我投出上一篇工作时,决心找个实习保底。等到paper中时,再说以后的research(换个组)也不迟。(这一段其实都是吐槽hh)

于是,我加入了2023届的暑假实习行列。在这两个月时间里,我开始了复习,记背和理解一些基础课程。同时,我也开始了刷题和复习算法。毕竟,笔试才是关键。最近做了不少题(基础为主),虽然我现在的算法也比较菜,但也有了一些进步。

暑假实习面试篇

2022年2月,未开始学习前的基础是一点点Java,一些后端和Web相关知识,比如Linux-Nginx-Mysql-PHP和一些容器化知识,如Docker。我于2月中旬开始刷算法题。这里我是在ACWING平台学习数据结构和算法基础,并在LeetCode平台刷题,提升题目的解题能力。我于2月底投了微软苏州的暑假实习,然而可惜的是算法没咋学,所以笔试题目做得特别差,就g了。

2022年3月初,已经学了一部分Java八股和复习了Mysql基础、计算机网络基础等。我投递了腾讯TEG(北京)的后端开发并进行了两轮技术面试。面试中的问题也非常基础,如TCP三次握手、Mysql范式、锁的机制、Mysql的MVCC等、Redis的分布式锁、跳表实现、epoll的实现等。当然我也答的不错,然而可惜的是流程并未推进。这个月,我也面试了美团(北京)后端开发岗,一面跟面试官聊的很开心,答的很不错的情况下也给我发了感谢信。

2022年4月初,已经学习了大部分Java基础、Java并发、JVM和数据库、中间件等内容,但并未学习Spring全家桶等相关技术栈。大概刷了如下这么多题。

我于4月中旬面试了阿里云边缘云计算(杭州)的开发岗。整场面试的内容相比上个月的还是非常硬核,如:

  • Docker网络如何跨越宿主机防火墙?Docker Swarm网络中 VXLAN的底层是如何实现的?Docker底层的隔离是如何做的,比如fork()函数是怎么样实现的?如何跟踪一个程序栈?pstack的底层如何实现,聊到linux底层的信号机制?用过strace吗,讲一下怎么用的?coredump是如何生成的,具体是怎么实现的?如何用gdb调试和跟踪程序栈?TCP三次握手中出现大量TIME_WAIT状态是怎么回事,如何避免?等等

最后面试官让我手撕一道DP,直接把我送走了。直到现在,我面试到的问题都没有阿里云的面试官问的偏实际,于是记忆犹新。4月下旬,我投递了字节跳动(成都)基础架构后端研发岗。一面面试官也问到了大量云原生容器化的问题以及数据库的问题。后面在实习的时候,这位面试官还记得面试过我。二面问的问题也偏基础,如:

  • redis和mysql的数据一致性如何做?redis的sub/pub模式是如何实现的?Kafka的消费顺序性如何保证?如何保证数据不重复不乱序?Docker底层隔离如何实现?Docker Overlay网络模式具体讲一下?Docker的AUFS底层如何实现?Docker网络中的iptables链路具体是怎样的?不开Docker时,iptables的链路又是如何?一个从Docker 容器里发出的包,发送到宿主机外部,在iptables上的具体流程是如何体现的?等等

最后让我做了一个很有意思的题:给出一个数组,如array[A, B, C, ...],还有一个数N,需要在数组中的数字可以任意取来组合成一个新数字,如AABBCC,使得这个新数字是比N小的最大数,并输出这个新数字。我考虑了一会儿,情况比较复杂,但最后敲出来了。进入到三面时,三面面试官主要问了以下问题:

  • 数据挖掘算法了解吗?说一下随机森林、决策树等算法具体实现?k8s的底层隔离是如何做的?了解IPVS么?了解k8s的网络组件和一些控制器么,说一下?了解Java线程池的具体实现原理么?线程池源码中Worker类、AQS、锁都谈一下?Java原生线程池存在的一些问题了解么?谈一下AtomicInteger类的具体实现?用过git么?了解rebase和merge的区别吗?等等

最后三面的面试官让我做了一个DP模板算法题:一个MxN的矩阵,每个arr[i][j]>0,输出从左上角到右下角的路径最短和,并输出路径。在三面后,大概一周约了HR面,并在一周后(4月底)发出了实习Offer。同期,我也做了华为暑假实习的笔试题目和面试,华为hr那边给的反馈是评价非常好,但我考虑到实习几乎无法在华为转正,并且华为的实习经历在互联网企业并不特别受认可,于是最后拒绝了华为并接受了字节(成都)的Offer。

2022年5月初,美团(北京)捞我了。上系统一看,是SRE组,遂随意面面。由于是SRE组,面试并无手撕算法环节,一面主要聊Nginx相关的线程流程、epoll具体实现、各种系统或网络监控,如tcpdump等。二面面试官非常诚恳和友好,跟我交流了非常深和非常长远,简单问了一下top命令和显示的各项参数、如何写一个定时监控等。面试完后,由于受到3月那个恶心的美团面试体验,加之不愿意去美团做SRE,遂拒绝了推进流程。

暑假实习工作篇

2022年5月底,进入字节基础架构后端开发实习了整4个月。我首先主要负责内部的运营效能平台的部分研发,也学到了不少知识,比如Go语言基础、项目基于DDD的设计、微服务相关基础、基于go的Thrift接口开发、基于go的GORM数据库操作、代码重构、方案详细设计文档撰写、Git的详细使用、定时任务、cicd流程等。

其次,我也负责一些数据大盘制作,也学到了很多:MySQL、PostgreSQL、MongoDB等数据库相关细节、数据同步流程、HiveQL相关基础、以及ClickHouse等一些利于实时数据查询的OLAP。直到9月,我也负责有关k8s的资源监控数据大盘制作,学习到了比如PromQL基础。

结局

[2022.5.23 – 2022.9.22] 字节跳动(成都)基础架构-后端开发, 未能转正,只能秋招咯。(已经结束咧~)

[复习参考资料]

Show CommentsClose Comments

Leave a comment