春招实习后台开发岗的复习经验体会,已拿美团腾讯offer

原文发在juejin,欢迎大家搜原题目点赞评论支持一下~具体的面试题目在前面有发,下面是原文

前言

从二月中旬开始准备,截止今天(4月2日)拿到了美团和腾讯的后台开发offer(应该吧,都没有正式发邮件,祈祷不在奇怪的地方翻车),也打算收手了。 刚好看到掘金的面经活动,就想着分享一下自己长期以来的学习体会和最近总结的面试经验,以及对之后要走的路的一些看法,希望找到志同道合的伙伴一起前进。

楼主目前上海某985大三在读, 但是和同学有个共识:跟着学校(的课程项目)走是没有前途的,掌握了基础后自己探索才是王道(高绩点保研大佬除外), 学校给我们的更多的是来自一群优秀且努力的同龄人的激励。

当然,由于楼主本人才大三,思想未免稚嫩,希望在给同龄人一点参考之余,有已经走在路上的前辈能给我一点指引。

一、道路选择

如果能保上研,又有谁愿意来直接找工作呢(手动滑稽)。 相信每个保不上研的CS专业的大三学生都面临过考研和找工作的抉择,而我在今年二月之前是坚定考研的目标的。 于是一放寒假就开始疯狂写代码看代码,因为我知道一旦开始考研的流程,我就要离我心爱的代码而去了。

但是我越是做项目,越是发现个人项目是有极限的。 没有实际需求,没有实际应用场景,没有实验机器,没有前辈指导。 虽然自己在写项目的过程中也经历很多的学习和思考,收获了很多,但毕竟也只能是一个玩具。 于是我的心态慢慢发生了变化, 决定在春招试一试自己的水平,如果可以获得比较好的成绩,那么就直接走实习+工作的路子,否则还是考研。 我之前之所以坚定要考研,是觉得自己在这个领域还有很多的知识没有学习,还有很多好书没看,而校园正是一个可以提供很好的自习环境的地方。但正如之前所说,自学也是有极限的, 我还是希望到实际的环境去磨炼自己, 而且我也给自己定下了目标,一定会持续学习。 当然,如果是机器学习,图形学等算法大佬,我直接认输(逃x

二、面试准备

既然决定了准备春招,那就要好好做准备呀。面试准备就两个部分,一个是CS基础,一个是算法。 关于怎么刷题,知乎上已经有很多很好的答案了。不会做很正常, 常思考常复习就好。而对计算机网络,操作系统等基础知识,我基本上是以整本书的形式进行复习的,对书上不够深入或者无法理解的知识点,再通过博客等进行深入。 下面我会分块对各个领域做一个复习的总结。

每个人有每个人的复习方法,希望大家可以从我的复习方法获得些许参考,以选择最适合自己的方式进行复习。

2.1 计算机网络

参考书推荐: 《计算机网络:自顶向下方法》、《HTTP权威指南》

进阶: 《TCP/IP详解:卷一》 (我没看)

计算机网络是我非常喜欢的领域,春招前就抽出时间看了把自顶向下和HTTP权威指南看了,所以春招的时候最主要的即就是做一个复习和查缺补漏。 这块在面试的时候基本上都回答出来了,但是面试官问的也相对基础,没有很深的扩展。

复习按照五层协议自顶向下进行,重点在应用层,传输层,网络层和链路层。

应用层

  1. DNS协议。 网络上有很多答案,协议流程也算简单,有些公司会问得比较详细,所以可以看看稍微深入点的答案。

  1. HTTP协议这个可以讲的东西就太多了,毕竟HTTP流量主宰今日的网络世界,从各种方面来说都没有理由不学好HTTP协议。 可以仔细地看看权威指南的三四章,系统地了解HTTP的基础

    1. 报文格式。很简单,背熟就好

    2. 请求方法。主要GET和POST的区别,可以看得深入一点。 有些面试官会问Restful,但是我个人倒不会去死记硬背接口设计的规范。

    3. 状态码。 有些偏门的状态码可以看看,比如101这种。

    4. 首部解释。 这里会涉及Cookie,Session,跨域等问题。 有余力的话可以深入了解一下。

    5. HTTP连接。 这个部分的知识是我花了大力气看了的,涉及的方面很广。建议按照发展历史进行学习。 从HTTP 0.9 开始到HTTP 2.0,经历了什么,新的协议是为了解决什么问题出来的。 重点就是导致当前HTTP性能差的原因,而业界又提出了什么解决方案。 我这个部分的笔记总结做的也挺详细的,之后应该会整理整理放出来。大致就是基于《HTTP权威指南》的第四章,再加上了些HTTP2的内容。

    6. HTTP2。 这一块单独拿出来是因为我做的项目里用到了grpc,而grpc就是基于HTTP2的,为了防止面试官安排我,特意任真复习了。然而并没有人问,终究是错付了。

传输层和其他

这层其实没什么好说的,或者可以说的太多了。 网上关于传输层的文章太多了,我也没有啥特殊的理解,就把自顶向下传输层的部分看了就好了。

其他的网络层和链路层乃至物理层,我基本上就保持一些基本知识,没有很深入的了解,大家也可以根据自己的经验和需要确定自己复习这几个部分知识的深度。

2.2 操作系统

参考书: 《linux内核的设计与实现》、《操作系统概念》第七版

我操作系统的复习基本上是以上学期学的操作系统加上课外的这本《linux内核的设计与实现》为主的。但是这本书的内容不算多,虽然也有源码分析,但大多数时候也不会过于深入,而且难度也蛮高的。 我在学习的时候基本上是在尽力学习,扎实自己能把握的部分,针对高频面试题再做一轮强化,面试的时候就可以引导面试官往自己熟悉的方向问了。 这一块在面试的时候有些回答出来了,但很多深入的还是不会,比如内存管理,内核启动流程,编译链接等。 后来有尽力去复习了。总体来说能让面试官看出我曾稍微深入一点地学过这部分的内容。

2.3 Mysql,Redis

参考书: 《MySQL 是怎样运行的:从根儿上理解 MySQL》、《高性能Mysql》、《Redis设计与实现》

小册写的很好(结一下广告费)~ 不过书上知识固然总结得好,要看懂并且很好地向面试官表达也是一种能力呀。

这轮复习过后,我基本上对索引原理,慢查询优化,隔离级别,锁等比较硬的知识有了还算全面的理解,面试官问起的时候可以侃上好几分钟,从面试官的回应来看答案应该是还不错的。

这里稍微提一下学习的方法,我上《数据库系统》这门课的时候,教授是个曾在美帝执教过的大佬,他当时说的一句话我现在印象特别深刻。 大意就是美国的学生特别擅长联想,比如他教数据存储的时候,学生马上联想到文件系统并提问数据库的存储是应该直接使用操作系统提供的文件系统还是自己管理。 体现他们很出色的组织知识体系,探索问题发现问题的能力,而中国学生大多数都知识被动接受知识。

我当时还有点不服气,但想了想,就算不上升到”中国学生“,我本人也确实不太注意知识体系的串联。从此就一直注意这点,虽然做的还不够好,但渐渐地也体会到了好处。 要想做到这一点,就要经常思考而不是死记硬背,知识串通之后,对理解新知识和分析问题帮助一定是很大的。 希望教授的这句话也可以帮到大家~

Redis作为一个NoSql和Mysql有共同之处,无非就是解决的问题不同催生了不同的数据结构和算法,所以我把他们放在了一起。我复习Redis的方式很直白,就通读一遍《Redis设计与实现》,做做笔记,时常复习一下,并总结一下自己的使用场景,用数据结构和算法的方式进行分析。 具体的实现会有不懂或者记不住的地方,我的策略就是按照自己总结的优先级尽力记忆,能和项目结合到一起的也优先记忆,确保有自己的理解。毕竟,面试最重要的就是展示自己的理解程度,而不是说可以死记硬背下某些知识。

2.4 其他

其他部分的知识点就因人而异了,对我来说,看了go语言,https,grpc,protobuf,微服务等,程度也是有深有浅。毕竟人的经历和记忆是有限的,有回答不出来的不丢人。 况且复习的大部分面试官都不会问,只需要保证关键部分有自己的理解就好了。

三、面试经验

具体地对于每次面试,内容大概就是自我介绍,问基础,问项目,深入挖各个知识点。 自我介绍只要说技术相关的,自己擅长什么,不擅长什么就好了,让面试官有一个问的基础。 如我面美团,说自己搞go的,面试官就不会逮着java问。当然不能说自己不擅长数据库操作系统什么的,这样有丶离谱。

自己的项目一定要复习好,正如我上面所提,要能串联起知识,针对面试官可能问的点,深入理解一下。 我是自己做了两个项目,然后比较全面地提炼了需要了解的点,针对不懂也不打算复习的点直球一点说不会就好。 当然,能梳理好项目也是经过面试官提问之后的事了。 所以我还是鼓励大家多面几面,真实积攒一点经验,光看面经毕竟有局限性。

其实,整个复习面试的过程,就是很好的总结自己知识体系的过程。 中间当然夹杂了一点死记硬背的成分,但是真正复习完了之后,你就能大概知道自己几斤几两了。 因为害怕面试官深挖,我还是很认真地去看了很多之前不会去看的内容,争取深入理解,然后也系统地复习了之前学到的知识,做了笔记,收获还是很大的。

整个春招下来,我一共投了四个公司,其中美团和腾讯是通过了,字节过了一面之后由于已经上岸了就不打算继续了,阿里是根本没开始,算起来一共经历七轮面试和一轮笔试,每一次面试都有不同的体会, 有很顺利的,也有被怼得心态爆炸的,但复盘之后都有还不错的收获。 就是面试实在太伤身体了,面试前紧张心跳加速,面试后提心吊胆,由于实在不想再经历一轮,适时收手。 如果到手这两个因为奇怪的原因挂了,那就直接准备提前批吧,刚好多余点时间刷题。

最后祝还没上岸的小伙伴们早日拿到心仪的offer~如果反馈比较好的话我会把笔记整理整理发出来,之后也会尽力输出一些东西的。




#美团##腾讯##实习##面经#
全部评论
大佬可以发一下笔记吗😁
点赞 回复 分享
发布于 2020-04-09 15:03
大佬,美团的笔试是只有算法题,还是有选择填空那些
点赞 回复 分享
发布于 2020-04-21 20:22
是个大佬
点赞 回复 分享
发布于 2022-04-23 00:55

相关推荐

MVC、MVVM和MVP都是常见的软件架构模式,用于组织和管理应用程序的代码。 它们在不同的上下文中有着各自的特点和用途。https://www.nowcoder.com/issue/tutorial?zhuanlanId=Mg58Em&uuid=1a0513f768dd42e88065708ac3b1237fMVC(Model-View-Controller)模式是最早提出的一种软件架构模式。它将应用程序分为三个主要部分:模型(Model)、视图(View)和控制器(Controller)。模型负责数据的存储和处理,视图负责展示数据给用户,控制器协调模型和视图之间的交互。MVC模式的优点是清晰的分离关注点,提高了代码的可维护性和可测试性。MVVM(Model-View-ViewModel)模式是基于MVC模式演变而来的,最早由微软的WPF框架推广。它引入了一个视图模型(ViewModel)层,负责处理视图和模型之间的通信。视图模型通过双向数据绑定将视图和模型关联起来,当模型数据发生变化时,视图会自动更新。MVVM的优点是提高了代码的可维护性和可测试性,减少了视图和模型之间的耦合。MVP(Model-View-Presenter)模式也是基于MVC模式演变而来的,常用于Android应用程序开发。它将视图和模型分离,并引入了一个中间层Presenter。Presenter负责处理视图和模型之间的交互,将视图的用户操作转发给模型进行处理,并将模型返回的数据更新到视图上。MVP模式的优点是解耦了视图和模型之间的关系,提高了代码的可测试性和可维护性。总的来说,MVC、MVVM和MVP都是常见的软件架构模式,用于组织和管理应用程序的代码。选择哪种模式需要根据具体的应用场景和需求来考虑,以最适合项目的方式进行开发。
点赞 评论 收藏
分享
评论
6
34
分享
牛客网
牛客企业服务