今天的文章来自SAP成都一位实习生,曾经和Jerry同在C4C成都开发团队一起工作过。在Sunshine最后一个工作日里,Jerry和Sunshine一起吃饭的时候,她曾经聊到接下来的保研打算和将来工作的努力方向。一位大三的学生,对于自己的将来有如此清晰和长远的规划,这让Jerry佩服不已。
而在结束了SAP成都研究院的实习后不久,Sunshine就实现了她个人规划的第一步,也就是即将在这篇文章里给大家分享的她的保研历程。Jerry在这里预祝Sunshine将来的硕士学习生活能和当初在SAP成都研究院一样收获满满。
下面是她的正文。
大家好,我是电子科技大学一名本科生,曾经在大三下学期时,有幸在SAP成都研究院的C4C开发团队实习过6个月。
我非常高兴在实习期间能够融入SAP成都C4C开发团队这个大家庭之中。在这里,收获到的更多是人生的成长和对自己的思考。
如今回顾自己这6个月愉快的实习生涯,我总结出对自己未来的研究生学习和职场之路很重要的三点,希望对大家也能有点启发。
1. 持续学习的能力
我加入的SAP成都C4C开发团队负责的是C4C UI框架的开发,使用的编程语言是JavaScript。虽然我在学校里也做过一些简单的Web开发,但是当我第一次按照组里有经验的同事写的帮助文档,在我本地搭建C4C开发环境时,我还是感到了深深的震撼:源代码clone下来之后,包含git修改的历史记录.git文件夹在内,一共将近1GB,超过1万个源文件。
在组里其他同事的帮助下,解决了各种本地环境问题,成功地在本地运行了C4C UI之后,我接下来面临的问题就是熟悉项目文件,确保自己接到开发任务后,能准确定位到需要在哪些文件上做增量开发。
在开发过程中,我发现自己在学校里学到的那点少得可怜的JavaScript开发知识根本不够用,因此JavaScript的持续学习也贯穿于我这6个月的实习生涯中。接下来我发现,开发的代码写完只是万里长征走完了第一步,单元测试,持续集成,检查产品标准,按照SAP的标准流程发布新开发的功能,等等都是我需要去学习的。同时,我开发的这些功能,背后是有什么客户的需求在驱动?帮助客户解决了哪些痛点?上下文涵盖了哪些业务场景?我真的感到要学得太多太多了。
我很好奇,是因为我是一个初入SAP大门的实习生,所以才有这么多东西要学么?在问过组里一些有过多年SAP工作经验的老同事,我才知道,持续学习在企业软件开发领域里是一个常态,不论你是一个初出茅庐的大学毕业生还是一个工作多年的SAP老兵。
我想,持续学习这个原则,不论是我将来进入计算机行业的哪一个具体领域进行工作,都是非常重要的。
2. 保持严谨的学习和工作态度
在我本科学习期间,在学校专业课上也了解了一些软件测试的概念,对于单元测试有个模糊的认识,但是进入SAP成都研究院后,没有想到单元测试在这里是执行得如此严格。每次本地用git提交代码修改之后,触发对应的单元测试,测试覆盖率不得低于SAP定义的基准,如果没有达到,哪怕差1%也无法提交代码。这种流程使得每一位开发者都认真严谨地对待自己的每一行代码:完成功能开发只是第一步,更多的精力放在了各种边界条件(Boundry Condition)的处理和负面测试上。
这篇文章的后半部分我会向大家介绍我那不算顺利的保研道路,其中就包含了我各种机试的滑铁卢。说来惭愧,我后来反思一下,有些我没有完成的题目,背后的知识点都很基础。如果我平时在学校的学习,都是抱着严谨的治学态度,把这些基础知识点的方方面面搞透彻,而不是像我现在这样学个似是而非,觉得自己达到差不多懂的程度就满足,那么我的机试一定是另外一个结果。
3. 团队协作
在进入SAP成都研究院之前,我对敏捷开发,持续交付和集成等概念也只是听说过而已。很庆幸自己能有机会加入到SAP成都C4C开发团队这样一个极具活力,进取心以及凝聚力的团队。
在这个以敏捷开发模式进行C4C功能交付的Scrum团队里,大家各司其职,工作,技术迎难而上,互帮互助,在编程马拉松等各项活动中都彰显了团队的实力以及魄力;各种session分享,每个开发周期结束后由同事轮流进行的功能展示等方式给个人能力的提升营造了很大的空间;组内聚餐和团队建设,生日蛋糕会,周末羽毛球等活动丰富了团队的文化,就如一个大家庭般温馨与团结。
初尝职场的我学到了很多,不管是从个人能力还是人生启蒙。这里感谢成都C4C团队的每一位同事,很庆幸曾是这个大家庭中的一员!
结束了6个月愉快的SAP成都研究院实习之后,我开始了新的旅程。如今, "浩浩荡荡"的保研之路总算是过去了,在这一路走来,过程虽然波折艰难,但皆是人生成长。一路的探索追求中,吸取到了不少的经验教训,所以记下来,希望能给之后的学弟学妹们一点启蒙。
前期准备
成绩:毫无疑问,好的成绩是通往学校的敲门砖。要想在大三结束后获得保研资格,需要年级排名靠前的成绩;想要在申请学校时不被拒绝,需要好的成绩;想要去到理想的学校,更需要一个好的成绩。而且,成绩排名越前越好,因为如果想申请像清华北大这样的学校,不是前1%是不可能的。
准备时间:当然是越早准备越好,个人推荐是最好从大三上学期结束后的寒假开始,就可以开始关注各大保研论坛,看看过去几年优秀的帖子,找好自己的定位,明确自己的目标以及各个阶段的复习内容以及计划。同时,这个阶段可以开始机试题目的练习。(作者当时没有意识到保研之路的艰辛以及竞争,准备得太晚——四月份才正式开始,因此,导致参加夏令营时准备不充分而遭遇的各种滑铁卢惨败经历)
简历:简历就像是一个人的门面,打造一份精确并且出彩的简历的重要性不言而喻。简历最好突出学习成绩,同时获奖经历,科研,项目经历这几个方面需要浓墨重彩。但要注意一个大忌就是不要一味为了彰显自己而过度的夸大,吹捧,将自己不够熟悉的方面写在简历上面,这样你在面试的时候将会被怼的很惨,因此简历上面的每字每句都需要慎重。
另外,简历的书写可以采取迭代的方式,每一版本可以在前一版本的基础上不断地修改,精细,提炼。
算法机试:正如网上流传“得机试者得天下”,在夏令营各大学校中,如清华北大,中科院计算所,南大等都会有相应的上机测试,通过这种方式直白的考察一个人的代码能力。因此,在前期的准备中,针对机试的准备是非常重要的,而且必须开始得早,因为上机写代码的能力不是简单的一两天就能够提高的。
在我四五月准备机试的过程中,由于白天在SAP成都研究院实习上班,每天只有晚上的时候刷题,时间,效率都非常低下,度过了比较煎熬的一段时间。也正是由于机试方面的准备不充分,使得我参加的夏令营都全军覆没。对于机试,建议一定要有充足的时间准备,并且要有规律,连续性。
部分刷题网站:poj(北大),leetcode,pat(浙大),牛客网,VJ等等,刷题网站很多,选择适合自己的就行。
计算机基础:在保研面试环节中,除了针对项目经历对学生的工程,科研能力的提问外,为了考察学生的专业基础以及思维方式,老师都会对相应的计算机相关的课程基础进行提问。
根据我的面试经历,被提问的频率大致按照下面的顺序排列,当然每个学校不一定完全相同:
算法与数据结构>高数>计算机操作系统>数据库>计算机网络>计算机组成原理>编译原理
如果时间充足,复习书本当然是最全面,最稳固的方式了;如果时间不够充裕,也没必要将大量的时间都投于此,则可以重点复习常考,核心的知识,网上通常会有各门课的知识点总结,进行理解记忆即好(学会利用谷歌度娘~)
**申请材料:**申请学校夏令营或预推免(具有获得保研资格后参加学校的推免面试的意思)时一般都会要求提交很多的材料,如申请表,个人陈述,研究计划,排名证明,成绩单,专家推荐信等等,这些材料最好提前准备,不然可能后面盖章什么的让您手忙脚乱。
夏令营
大多数夏令营一般集中在7月份,6月开始出相关的通知,但也有比较早的,像清华叉院,南大的lamda实验室和上海交大的直博都是在6月,因此大家一定要尽早关注各个学校官网,或是各种论坛等消息通知,如果因为错过时间而没有去到想去的学校就得不偿失了。
我当时抱着多尝试的心态,所以报的比较多(9个),但由于今年保研竞争异常的激烈,所以最后入营的只有计算所和南大。
7月15日~20日 计算所
计算所的夏令营比较长,有五天,前两天主要是各个实验室的介绍以及相关的论坛讲座,主要让大家对各个实验室有个更清晰的认识便于选择一个实验室参加考核。后三天即是各个实验室开展的笔记,机试,面试工作,各个实验室的形式不一样。
我当时选择的实验室有机试和面试,结果是两者综合起来的成绩。机试是头天下午,但由于机试题目比较难,准备不充分再加上又是第一次等各种因素,机试结束后整个人跌到谷底,对第二天的面试根本不抱什么希望。由于到面试还有一段时间,然后就去其他的实验室看看还有没有机会参加,因此也参加了一些机试笔试,同样做的很不理想(没错,就是太菜了~)。第二天面试,由于面试人多时间比较紧,所以面试时间不是很长,感觉还将就,但机试太差最后还是被刷了!
以下罗列一些遇到的问题。
机试:
1、真假式输出 (栈)
2、背包问题,然后输出哪些背包?
3、拓扑排序(孩子糖果贪心)
笔试:
1、排列组合?
2、快速排序的实现?
3、最长递增子序列?
4、英文翻译?(甚至有诗歌)
5、写一下BP模型的推导过程?
面试:
1、数学建模主要负责什么?能讲一讲怎么实现的,题目要求是什么?
2、C语言中的static有什么作用?
3、Linux如何实现相关的原语操作,比如copy,如何进行具体实现的(系统调用)
4、栈可以用什么进行实现?
5、说一下dijkstra算法?如何进行优化?
6、你最喜欢的一门课是什么?为什么让你印象深刻?
7、你的编程能力怎么样?觉得自己的机试如何?是怎么进行刷题的?
7月24日到26日 南京大学
在去南大的整个过程中,心情比较低落,对于机试也有一定的恐惧心理。南大一共两天,宿舍条件真的极好(四星级酒店),头一天也是参加实验室的宣讲,介绍,与老师交流。
因为在此之前我已经提前联系过老师了,所以就基本留在宿舍中准备机试(听说南大的机试是非常难的,整个人对机试都是畏惧的)。第二天上午先是面试,主要问一些项目经历以及相关的计算机基础,感觉还不错,心想着下午机试正常应该没什么问题….然而,事实是残酷的,题目确实比较难,在加上现场一些状况连连,机试,又败了。
机试:
1、最大子矩阵(dp)
2、寻找n中位进制中1不相邻的个数(斐波拉切数列的变形)
3、最大递增子序列的变形(需要进行转换成这个原型)
4、Dfs搜索
5、各种条件限制杂合
面试:
1、操作系统的死锁是什么?哲学家进餐有哪些实现方式?
2、存储过程以及触发器?为什么要使用存储过程—>预编译、提高代码的多次利用
3、说一下快速排序?如何寻找第k个数?
4、用英语介绍一个项目?
5、数据库的ACID特性,事务回滚,如何解决数据的不一致?信号量,共享资源保护。
就这样,我所有的夏令营就这样以失败告终,整个人笼罩在失学的边缘。在悲伤之余则是将所有的希望寄存在预推免,因此,整个暑假,都在学校全力备战着……
预推免
到了九月,我的战斗再一次打响了。可能由于前一个月准备得比较充分,所以面试表现还不错,顺利拿到了中科院的offer。
最后一战浙江大学,由于浙大只有直博夏令营,而硕士的招生是在预推免。浙大的第一关是英语,其形式是抽取红白纸,当时运气贼差抽到的内容完全看不懂没听过,所以英语关表现得不好,接着开始问项目,基础知识等的,总体来说问我的比较难,比较深,很多都需要完全的掌握才能答出来,所以很多点都没能答出来。因此结束后整个人心情沮丧,以为就这样与心仪学校擦肩而过。
当最后公布结果时,看到单子上面有我时,整个人都是热泪盈眶的,而且排名还比较靠前,后来仔细想了想为什么,或许问的难,问的深并不是坏事,老师只是想探查你了解的深度,只要在这个过程中你很好的表达出自己的一些思维方式和见解,大方地向面试官展现出你的实力,足矣!
机试:
1、链表的移位
2、快速排序算法的相关实现
面试:
1、斐波拉切数列的几种实现方式,并且比较复杂度
2、你对操作系统这门课的理解
3、cache的几种映射方式
4、讲一下极大似然算法
5、矩阵的秩?线性相关,线性无关?
6、讲一下最短路径的优化问题?
7、讲一下ARIMA算法(数学建模中用到)
后记
机会是留给有准备的人的,只要明确目标,一路向前,做好准备,机会和幸运终将走到你的身边~
要获取更多Jerry的原创文章,请关注公众号"汪子熙":