暑期实习总结——生化环材本科生的大厂实习梦

回望来路总是让人感慨万千,在我结束了我漫长的暑期实习的投递之旅后,筑梦过程中的点点滴滴瞬间涌上心头……
我终究没有辜负一年半前某个下着淅淅沥沥小雨的夜晚自己做出的决定,慢慢在我的转码之路上越走越远……
谨以此文回馈牛客,记录我的所思所想,供自己警醒与回顾,供各位参考与指正

个人背景

基础背景 上海交通大学,生化环材之一,23届大三,gpa一般
技术栈 C++/Python/Go,服务端开发

暑期实习

暑期实习我避开了外企,投递了十家公司,分别拿到了腾讯,阿里,百度,字节,携程,启元世界的后台开发offer或是意向,美团,OPPO仍在流程中,佳期投资终面挂掉,米哈游笔试挂掉,面经如下:
在一年半前,我只是想着作为一个非科班的选手,能在暑期找到一份实习就再好不过了,未曾想到却能在貌似很卷的23届暑期实习能得到不少面试官们的青睐

准备阶段

和大多数人不同,我是从大二上就确定了自己在大三下需要一份暑期实习的目标,那时候我也是几乎作为一个没有任何基础的纯小白去接触编程。
我倾向于把我的时间线划分为五个阶段,分别是零基础入门期,初次投递期,再次投递期,实习期,暑期实习冲刺期。

零基础入门期(大二上)

大一上我有一点的Python基础,但是仅限于照着书上的代码随意敲了几行,所以在一开始我需要选择一门主语言,我参考完知乎上大部分的回答,觉得C++更难,更高性能,更接近底层,秉持着以科班的水平要要求自己的态度,我就义无反顾地选择了C++(虽然在后面看来语言仅仅是工具而已,语言的选择并不是那样的关键)。我开始的语言学习过程是面向刷题的,在此期间,我一边就着浙大《数据结构》的慕课,一边刷力扣,但由于我的惰性,浙大的《数据结构》只学到了树的(AVL树)章节,又由于我平平的天资,力扣在初始阶段刷的举步维艰,我依然清晰地记得对于翻转链表的递归法花了大概一个小时才理解明白,但是等到几天后写的时候还是没有写出来。这段时间我就慢慢的熬着,虽然很艰难但我还依稀记得某节物理化学课上我终于第一次的弄对了翻转链表的欣喜,某次实验课上我想明白了二分查找的激动,然后逐渐到期末,我带着学到二叉树的数据结构,力扣上的100题左右以及对C++ STL的基本使用,还有对未来的焦虑结束了这段时光。

现在想起来,我发现这段时间我并没有按照正确的方法学习,也没有获得什么特别的收获,但我还是认为这是最为重要的一段时光,我觉得它是我成长路上一段必走的弯路,通过它,我觉得是我在经过尝试之后,觉得自己可以转码了。

初次投递准备期(寒假 & 大二下)

和大多数人不同,我并不喜欢把一学期学习的时间和放假的时间区分开,而只是把一天中学习和娱乐的时间区分开,所以我一天学习的时间很短,但是寒假我依然能做到每天高效率学习两个小时(实话实说,我觉得每天能够学习两个小时对我来说已经足够累了)。我还有一个习惯就是会在寒假或者暑假只带一本书回家准备在假期有时间就看看这本书的内容,比如这个假期我就选择了《剑指offer》。
也许大多数人都是从剑指offer的第三题 "数组中重复的数字" 开始做的,但我注意到了该书在第一题和第二题的内容,分别是对于类/结构体大小的判断,以及赋值运算符的重载,而对于这两个知识点我完全不了解,根本不知道这是从何而来的知识。所以我觉得我有必要系统地学一下语言相关的内容了,于是《剑指offer》便在寒假被我搁置了,我也在寒假开始了我对语言的学习。首先我在B站上找到了播放量最高的C++课程开始学习,但由于我是一个懒惰而喜欢走捷径的人,我也觉得他某些地方讲的太慢了,所以我使用倍速+跳过某些章节的方法学了一个C++基础知识和面向对象的大概,我也只是简单的听,并没有照着敲代码。然后我第一次觉得自己行了,于是我又去看赋值运算符重载,发现我还是不会(毕竟上述课程的面向对象知识点讲的也非常笼统),所以我又选择了当时在B站找到的清华大学的两门C++网课,一门貌似是郑丽老师偏向面向对象编程的课,一门是面向对象+系统编程的课,当然由于我的惰性我第一门课听了差不多一半,而第二门课所涉及到的环境变量,信号量,linux对我来说如天方夜谈,于是我也就此作罢,但可喜的是我已经能够看懂书上赋值运算符重载章节的内容了。接下来我刚看到《剑指offer》的前几题,我又发现我对指针概念的理解十分模糊,于是我又在B站以及一个国外的论坛上找到了C语言更底层的一些教学和思考,让我印象深刻的有C、C++变量所在不同内存区的讲解(堆,栈,.bss,.data段等)函数参数(值,指针,引用)以及一些二级指针的理解,至此我的寒假也结束了。
回到学校我感觉已经是时不我待了,但是我还完全没有一份拿得出手的简历,经过我的评估,我觉得在操作系统,计算机网络和数据库三个方面我完全没有涉足,同时也没有一两个拿得出手的项目,所以我决定暂且搁置掉刷题的计划,从这几个方面的八股文入手。我采取的是刷牛客网面经的方法,浏览过大部分面经,我也较为清楚地知道了每个方面需要掌握的知识点和高频问题。一开始的阶段我采取背诵+浅浅理解八股文的方法进行学习,虽然事后看来这种方式很蠢,但我还是觉得它在一定程度上加深了我对大概知识框架的熟悉,项目方面我用C++写了一个压缩算法和一个跳表,加上结合一些博文自己捣鼓了一下linux的ubantu系统以及一些及其简单的git操作,我终于有两个属于自己的项目了。在此期间我的作息也十分正常,只是把原来上课的时间用来自学cs了,每天保证两个小时学习的时间,也并没有十分热情地all in cs。
然后我就找了两家招日常实习的公司(字节和b站)投递了,不过结果可想而见,当然是都一面挂掉了,面试的时候我就意识到了自己“千疮百孔”的知识架构,很经常出现一问三不知的情况,然后我突然迷茫地觉得找实习好难,然后我就开始颓废了。

再次投递期(大二下六月 & 暑假 & 大三上九月)

颓废的时候我不学习也就每天刷刷知乎和牛客去找找经验贴,看看别人的故事用以激励自己,应该两周之后在一次因为打球投的很准而carry全场的快乐时光后,我重新拾起了少年心气,决定再冲一冲。从基础知识入手,我首先在牛客网上看了大量有关C++的面经,在此期间,听说了推荐的《C++ Primer》,《Effective C++》,《STL源码剖析》,《深入探索对象模型》这四本书,但是很可惜,由于懒散而不愿意花时间,我只是买了一本《C++ Primer》草草地翻了翻,在暑假军训的时候瞄了几眼《STL源码解析》的电子版,就把其他的一股脑地加入我的to do list里面了。在操作系统和计算机网络方面,我配合着哈工大的网课学习操作系统,湖科大教书匠的计算机网络视频学习计算机网络,当然还是之前的原因,我只是找到对应的章节听一听就浅尝辄止,但不得不说确实也搞明白了一些知识点。
然后就到了七月中旬了,和之前相同,我还是带着没怎么看的《剑指offer》回家了,暑假开始我斗志昂扬,想着要每天认真学习,可惜我整个暑假太沉迷于篮球,除了打篮球就是打电脑端和手机端的nba 2k系列游戏,所以也没干什么事情,只是按照惯例会刷刷知乎和牛客,用大概不到一个小时的时间来收藏和粗略浏览一下别人的发帖。另外就是我每天会花一个小时跟一跟某社区上的一个机器学习的课,实践了诸如LR,SVM,Xgboost等算法。
回到学校我决定再在项目方面精进一步了,我看到了C++经典传统项目 C++ Web Server,虽然我没有什么网络编程的基础,但我还是站在前人的肩膀上借鉴参考,最后搞出了一个只实现了一半功能的Web Server,在此基础上我用网络框架做了一个巨小的网络聊天室,至此,我的第二版简历诞生了。
等到9月底我准备的还行的时候我悲伤地发现貌似没有招实习生的公司了,兜兜转转我瞄准了还有hc和b站和一家量化私募投资,因为学校还行所以我顺利地过了量化投资的简历,经过笔试和面试我便成为一名C++系统开发实习生。

实习期

虽然有了实习offer,但我面临着一个巨大的问题是我如果按照学校的安排我周一到周五上午满课,下午也有不少的课,经过利弊权衡我做出了大胆的决定——翘课实习,除了必到的实验课,我几乎翘掉了所有课用来保证一周3~4天的实习时间。实习的车程距学校来回共三四个小时,所以我的一天除了地铁上的时间和在公司的时间几乎没有其他剩余了,周末需要用来打球和补作业,所以我这段时间的收获基本都来自于公司的技术提升和偶尔在地铁上刷知乎和牛客的所思所想。
实习期间,用到linux,redis,C++,Git,Python(pandas)都让我在这方面更进一步,我也配合着实习粗略看了看《redis的设计与实现》和《Effective C++》,和之前相同,我都是定位到具体章节的胡乱翻翻,并没有细读。实习的时间除去地铁上的通勤时间还是快乐而充实的,重要的是我的简历更丰富了,这也是让我更开心的。
到了期末我提前一周离职用来考前突击,因为我的考勤我扣掉了部分平时分,但后面也还是有过得去的成绩,这时我彷佛感觉到了大学真正的意义,在我看来就是追求自己喜欢的,再花一点点时间向现实妥协,完成必须完成的没那么喜欢的事情。

暑期实习冲刺期(寒假后段 & 大三下)

我的暑期实习冲刺期主要由两个阶段构成,一个是寒假后段的面试,一个是从3月后开始的冲刺期第二阶段。
寒假后段我带着第三版简历海投,投了不少私募量化,部分外企以及部分大厂,虽然表现得差强人意有了offer,但我还是决定在大三下这学期不实习了。一是没有特别喜欢的offer,二是我为了再体验一下真正懒散的大学生活,还有就是我想着再丰富一下简历,包括夯实基础,完善项目。首先是我在学校找了一个计算机学院的相关项目,主要是python做数据处理和后台搭建,html/css/js(d3)做前端开发和绘图的项目,再者就是我学习了分布式和Go的基础,实现了简单的lab,另外我还选了操作系统和计算机网络两门课,进一步完善理论知识的同时也完成了相应的小lab。而在这期间,我也一直保持着笔试和面试的进度,在笔试和面试之中积极学习。

回顾我的四段找实习的历程,从一开始的都是一面挂,到再次投递时就是能过一面,而寒假后段的面试就是能过一面而且面评不错偶尔能过二面,3月之后就只挂过两次终面了。到后期每次面试我几乎都能表现得游刃有余而从容不迫,这时我就知道,我做到了。

后记

行笔至此不由感慨万千,犹记得刚做出决定时身边没有任何一个人支持,只是在有所小成时得到众人称赞,大概人生就是这样,有些路是得自己默默一个人走的。
我只是记录个人的转码历程,要是你和当初的我一样迷茫,想问我哪种路线适不适合有没有更优解,我只能说我知道这个问题对我的答案,而你的答案得你自己去探寻,我最由衷的建议就是树立目标制定计划任然后不断试错不断改正不断试错不断完善不断试错不断精进,还是那句话:难道向上攀登的路不比登上山峰更令人热血沸腾吗
#暑期实习##2022春招#
全部评论
难道向上攀登的路不比站在顶峰更让人热血沸腾吗?很喜欢这句话,非常敬佩楼主,同样是转码,楼主学习的能力强太多太多,也认识到了差距,向楼主学习。
7 回复 分享
发布于 2022-06-28 10:29
向楼主学习,我这傻帽从读研才开始转码,深知生化环材自学转码的艰难🐂🍺
6 回复 分享
发布于 2022-07-05 15:51
大佬真的好厉害
3 回复 分享
发布于 2022-06-14 13:50
水源来的,支持hxd
2 回复 分享
发布于 2023-07-02 11:12 上海
好帖
2 回复 分享
发布于 2022-07-24 00:42
2 回复 分享
发布于 2022-06-12 19:09
一直关注,谢谢楼主的分享!!
2 回复 分享
发布于 2022-06-12 09:01
方便问一下大佬一开始在哪家量化实习吗🥲
点赞 回复 分享
发布于 2023-03-07 12:34 美国
膜拜,人生就是不断攀登的历程,只有不断攀登的过程才是最有意义的
点赞 回复 分享
发布于 2023-01-03 23:11 河南
太强了
点赞 回复 分享
发布于 2022-12-29 08:32 江苏
本是打算看面经,不经意刷到楼主的两篇文章,遂拜读,仿佛看到楼主转码的历程。震撼于楼主的决心和自制力,更敬佩楼主能早早地确定前进的道路。 秋招一无所得,本是失意人。要是能更早拜读楼主的文章,或许能彻底改变我的大学生涯,不至于沦落到如此地步。 关注了楼主,今后定当多向楼主学习
点赞 回复 分享
发布于 2022-09-23 01:52 安徽
兄弟太强了!
点赞 回复 分享
发布于 2022-09-14 15:00 湖北
楼主 做 webserver的项目之前需要先具体学一下TCP那些知识吗 计网只有一个大概了解 面经上问题都不会
点赞 回复 分享
发布于 2022-09-13 22:56 北京
脚大哥太强了,膜拜学习
点赞 回复 分享
发布于 2022-08-07 09:55
很强
点赞 回复 分享
发布于 2022-08-05 10:38
优秀如你
点赞 回复 分享
发布于 2022-07-22 19:50
太厉害了
点赞 回复 分享
发布于 2022-06-24 16:05
为什么放过外企?
点赞 回复 分享
发布于 2022-06-22 23:14
点赞 回复 分享
发布于 2022-06-14 22:18
大佬!
点赞 回复 分享
发布于 2022-06-14 19:06

相关推荐

03-22 11:18
中南大学 Java
刷到此贴的友友春招/暑期必上岸!!!鼠鼠在秋招的过程中多次被问到场景题,中大厂的考察频率相当之高,一般会放在最后一个问题用来拖时间,也遇到过上来就问你怎么设计一个系统(面试官以此来决定后面对你的态度)。所以鼠鼠准备开这个场景题栏目,分享在秋招过程中遇到的场景题以及如何进行回答,感兴趣和感觉有帮助的友友点个关注和赞吧,你们的点赞和关注是鼠鼠持续更新下去的最大动力!!!话不多说开启今天的主题,扫码登录吧!!!关于扫码登录是现在PC端登录的常见方式,鼠鼠在面试美团,腾讯等公司的时候都遇到过这个问题,当时面试回答的属于是七零八落了,不过鼠鼠有及时复盘的习惯,所以针对场景题,逐渐有了一套自己的方法论,应对不同的面试官可能提出的不同问题。对于场景题,鼠鼠觉得拿到一道题,首先要思考的是业务逻辑,然后就是在这个业务上会有多大的qps请求量,面试官经常会对你设计的方案和系统提出高并发/大流量的情况下会出现什么问题,你如何去解决,从而考察你设计系统的高可用性和系统性。那么对于扫码登录,其请求量其实并不算大,所以我们侧重于业务流程。大家都有过扫码登录的经历:PC端显示二维码,手机扫描后弹出确认登录页面,点击登录后PC端页面进行跳转。那么扫码的过程其实主要就涉及到手机端、PC 端、服务端这三部分。一、账号登录验证扫码登录相比于传统的输入用户号密码登录,其实本质都是账号认证的过程,相信大家入门的第一个项目里一定会有登录这个功能。输入用户名和密码进行提交。服务端接收到用户名和密码,进行用户名和密码的匹配。如果匹配成功,则登录成功。这里在Java里常用的是使用cookie或session,不过大家做的项目里可能使用使用jwt多一点(对没错,就是外卖和点评),也就是借助token来解决session的一些弊端(这里八股提问,cookie和session还有jwt的区别和应用场景分别是什么),我们这里统一使用token的概念进行解释,服务端在登录完成后会生成一个 TOKEN,与当前登录的用户进行绑定。这个 TOKEN 可以存储在 REDIS 内,并设置在 REDIS 内的过期时间,这也是 TOKEN 的过期时间。最后将 TOKEN 返回给客户端。以上就是整个登录认证的过程。后续接口的请求都要带着这个 TOKEN。服务端会验证 TOKEN 的有效性,如果验证通过,则继续进行服务端内的接口的调用。如果验证不通过,则返回认证失败,或者说 TOKEN 过期了,客户端就会跳转到登录页,重新进行登录。二、扫码登录流程现在换成了扫码登录,换汤不换药,还是需要让 PC 端获取到认证的 ID。2.1 二维码解释:扫码登录在PC端生成的二维码,里面不光可以存储数字,还可以存储任何的字符,以二维码的形式展示出来。手机扫码的过程,就是解码的过程。划重点!!理解了手机扫码是解码的过程,那这道题就理解了一大半了PC 端显示的二维码,其实就是PC端向服务端发起请求后,服务端返回的内容。那这个返回内容是什么呢?可以看做是一个唯一请求ID,能够唯一地代表当前的请求,同时这个唯一的ID 是有状态的,表示这个当前二维码是未扫描还是扫描成功,PC端根据服务端返回的唯一请求ID生成一个二维码。同时这个唯一请求ID是有过期时间的。这个二维码过了一段时间,我们不扫描,网页会显示已失效,请刷新。在设计上呢可以将唯一请求ID,作为 KEY 存储到 REDIS 内并设置一个失效时间。综上,这个唯一请求ID最后有三个状态,一个是未扫描,扫描成功还有已失效。已失效就提示它再次进行刷新。2.2 扫码登录接下来到了扫码登录环节。2.2.1 手机扫码要进行手机扫码,前提条件是手机的 APP 必须是登录状态的,这个非常重要,也就是手机端已经进行了用户名和密码的登录认证过程。手机端一定会存储登录认证后的 TOKEN。手机扫码识别 PC 端的二维码后会解析出二维码携带的唯一请求ID。也就是PC端向服务端发起请求后,服务端返回的唯一请求ID,手机会显示确认登录的按钮,按下按钮,手机端会将唯一 请求ID 和手机认证的 TOKEN 一同发送到服务端进行认证。2.2.2 服务端验证最后到了服务端。服务端首先会验证手机端的 TOKEN 是否有效,如果有效会验证唯一请求 ID 的状态,如果唯一请求ID 不存在了说明就已经失效了,Redis过期删除(八股提问,Rediskey过期后一定会马上删除吗)。如果唯一请求 ID 存在且当前状态是未扫码的,也就是说 REDIS 存在唯一请求 ID的KEY。此时就会生成一个 PC 端的 TOKEN,与唯一请求 ID进行关联,设置 REDIS 的唯一请求 ID对应的 VALUE 为 PC端登录 的 TOKEN。此时 PC 的唯一登录 ID 就产生了,其他情况都是验证失败。到这里我们简单总结一下:PC端发起登录请求,服务端返回唯一请求ID,PC端根据请求ID生成二维码,处于登录态的手机已获得手机端的登录token,扫码解析出唯一请求ID后,将唯一请求ID和token一同发给服务端,服务端验证唯一请求ID和token后,生成PC端的登录唯一ID2.2.3 PC 端获得TOKENPC 端在生成完这个二维码之后会启动一个异步请求,向服务端去查询唯一 ID 的状态。1)如果是未扫描,REDIS 内存在唯一请求ID的 KEY,而且 VALUE 是空的,说明这个二维码是有效的。2)如果服务端的 REDIS 内已经没有唯一请求ID的 KEY 了,那说明就已经失效,提示二维码已经失效。3)如果 REDIS 内有唯一请求ID且有对应的 VALUE,则返回扫描成功和关联的 TOKEN,同时 PC 端就会显示登录成功。补充:PC 端通过什么方式来查询唯一请求 ID 的状态?1)轮询,PC 通过轮询的方式一次次的向服务端发送请求查询二维码的状态。2)长轮询,长轮询是指客户端主动给服务端发送二维码状态的查询请求。服务端接收到请求之后会按照情况进行阻塞直至二维码的信息状态更新或者超时。当客户端接收到返回的结果后,若二维码仍未扫描则会继续发送查询的请求,直至状态变化。3)WEB SOCKET ,WEB SOCKET 是指前端或者客户端在生成二维码后会与后端建立连接。一旦后端发现二维码状态发生变化,可以直接通过建立主动推送二维码的状态给前端。(这里其实很容易考到八股文三者的区别,如果友友们对这一块八股不清楚可以不讲出来,当然可能也有小伙伴在项目里用到了web socket,那么这里就可以和项目做一个关联,把面试官往项目上去引,因为场景设计题我们是很难在短时间内想得很完善的,但是我们的项目是千锤百炼过的)总结:以轮询的方式来获取二维码的状态为例。1)PC 端展示登录页面,会请求服务端获取唯一请求 ID,然后服务端会生成相应的唯一请求ID,并设置唯一请求 ID 的过期时间和状态,返回唯一请求 ID 给 PC 端。2)PC 端获取到唯一请求 ID 后生成相应的二维码,PC 端通过轮询的方式请求服务端通过唯一请求 ID 获取二维码的状态。3)手机端扫描二维码获取唯一请求 ID,将手机端的 TOKEN 和唯一请求 ID 发送给服务端确认登录。4)服务端验证手机端 TOKEN。然后根据手机端 TOKEN 和唯一请求 ID 生成 PC 端的 TOKEN。此时 PC 端通过轮循的方式请求服务端,就会获得到这个唯一请求 ID 对应的二维码的状态。如果是成功了,服务端就会返回 PC 端的 TOKEN,显示登录成功。PS:总结部分可以当做这个场景题的精简回答,上面的部分是帮助友友们理解,毕竟八股文如果死记硬背不理解的话稍微变化一下就不会了。其实在整个分析过程中大家可以发现,场景题其实就会把我们背的那些八股和技术运用起来,所以在学习场景题的时候就可以把八股文进行问题,有点像单词背不住就去读阅读文章,在读文章的时候记住八股文,在上面的分析过程中我也有几处进行了随机的八股提问。扫码登录这个过程里Redis用的很多,那友友们是不是可以顺带复习一下Redis的相关八股呢?(1)缓存三剑客是什么?有什么处理方式?(2)Redis缓存删除和内存淘汰策略(3)Redis持久化策略?AOF重写是什么?……以上都是鼠鼠在面试中只要遇到Redis就一定会被问到的,不一定是全部问到,但至少都是三选一了…好了如果大家有什么问题的话欢迎来评论区交流。包括但不限于文章创作改正意见,后续分享内容(面经,知识输出,经验分享等等),都看到这了,点个免费的关注和赞不过分吧#大家都开始春招面试了吗##我发现了面试通关密码##暑期实习   ##春招##场景题##八股#
点赞 评论 收藏
分享
评论
119
263
分享

创作者周榜

更多
牛客网
牛客企业服务